Merge branch 'SoftFever:main' into dremel

This commit is contained in:
cochcoder 2024-03-23 04:06:09 +00:00 committed by GitHub
commit 147428f709
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
110 changed files with 7610 additions and 5443 deletions

View file

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-03-16 17:57+0800\n" "POT-Creation-Date: 2024-03-22 19:58+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -5740,6 +5740,9 @@ msgstr ""
msgid "Stealth Mode" msgid "Stealth Mode"
msgstr "" msgstr ""
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only" msgid "Check for stable updates only"
msgstr "" msgstr ""
@ -5793,6 +5796,9 @@ msgstr ""
msgid "If enabled, auto-calculate everytime the color changed." msgid "If enabled, auto-calculate everytime the color changed."
msgstr "" msgstr ""
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)" msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr "" msgstr ""
@ -12509,7 +12515,7 @@ msgstr ""
msgid "Export Log" msgid "Export Log"
msgstr "" msgstr ""
msgid "Studio Version:" msgid "OrcaSlicer Version:"
msgstr "" msgstr ""
msgid "System Version:" msgid "System Version:"
@ -12518,10 +12524,10 @@ msgstr ""
msgid "DNS Server:" msgid "DNS Server:"
msgstr "" msgstr ""
msgid "Test BambuLab" msgid "Test OrcaSlicer(GitHub)"
msgstr "" msgstr ""
msgid "Test BambuLab:" msgid "Test OrcaSlicer(GitHub):"
msgstr "" msgstr ""
msgid "Test Bing.com" msgid "Test Bing.com"
@ -12530,39 +12536,6 @@ msgstr ""
msgid "Test bing.com:" msgid "Test bing.com:"
msgstr "" msgstr ""
msgid "Test HTTP"
msgstr ""
msgid "Test HTTP Service:"
msgstr ""
msgid "Test storage"
msgstr ""
msgid "Test Storage Upload:"
msgstr ""
msgid "Test storage upgrade"
msgstr ""
msgid "Test Storage Upgrade:"
msgstr ""
msgid "Test storage download"
msgstr ""
msgid "Test Storage Download:"
msgstr ""
msgid "Test plugin download"
msgstr ""
msgid "Test Plugin Download:"
msgstr ""
msgid "Test Storage Upload"
msgstr ""
msgid "Log Info" msgid "Log Info"
msgstr "" msgstr ""

View file

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-03-10 23:17+0800\n" "POT-Creation-Date: 2024-03-22 19:58+0800\n"
"PO-Revision-Date: 2024-03-17 22:08+0100\n" "PO-Revision-Date: 2024-03-17 22:08+0100\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@ -3420,22 +3420,16 @@ msgstr ""
"No - Renunciar a utilitzar el mode espiral aquesta vegada" "No - Renunciar a utilitzar el mode espiral aquesta vegada"
msgid "" msgid ""
"Alternate extra wall only works with ensure vertical shell thickness " "Alternate extra wall does't work well when ensure vertical shell thickness "
"disabled. " "is set to All. "
msgstr "" msgstr ""
"El perímetre addicional alternat només funciona amb el gruix vertical de la "
"carcassa desactivat. "
msgid "" msgid ""
"Change these settings automatically? \n" "Change these settings automatically? \n"
"Yes - Disable ensure vertical shell thickness and enable alternate extra " "Yes - Change ensure vertical shell thickness to Moderate and enable "
"wall\n" "alternate extra wall\n"
"No - Dont use alternate extra wall" "No - Dont use alternate extra wall"
msgstr "" msgstr ""
"Canviar aquesta configuració automàticament? \n"
"Sí - Desactivar assegurar el gruix vertical de la carcassa i activar un "
"perímetre addicional alternat\n"
"No - No utilitzar perímetre addicional alternat"
msgid "" msgid ""
"Prime tower does not work when Adaptive Layer Height or Independent Support " "Prime tower does not work when Adaptive Layer Height or Independent Support "
@ -3482,6 +3476,11 @@ msgstr ""
"Mentre s'imprimeix per Objecte, l'extrusora pot xocar amb la faldilla.\n" "Mentre s'imprimeix per Objecte, l'extrusora pot xocar amb la faldilla.\n"
"Per tant, restabliu la capa de faldilla a 1 per evitar-ho." "Per tant, restabliu la capa de faldilla a 1 per evitar-ho."
msgid ""
"seam_slope_start_height need to be smaller than layer_height.\n"
"Reset to 0."
msgstr ""
msgid "Auto bed leveling" msgid "Auto bed leveling"
msgstr "Anivellament de llit automàtic" msgstr "Anivellament de llit automàtic"
@ -6175,6 +6174,9 @@ msgstr "Regió d'inici de sessió"
msgid "Stealth Mode" msgid "Stealth Mode"
msgstr "Mode Silenciós" msgstr "Mode Silenciós"
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only" msgid "Check for stable updates only"
msgstr "Comprovar només si hi ha actualitzacions estables" msgstr "Comprovar només si hi ha actualitzacions estables"
@ -6235,6 +6237,9 @@ msgstr ""
"Si està activat, fa els clculs automàticament cada vegada que canviï el " "Si està activat, fa els clculs automàticament cada vegada que canviï el "
"color." "color."
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)" msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr "" msgstr ""
"Sincronització automàtica dels perfils de l'usuari ( Impressora/Filament/" "Sincronització automàtica dels perfils de l'usuari ( Impressora/Filament/"
@ -7122,8 +7127,8 @@ msgstr "Ignorar"
msgid "" msgid ""
"When recording timelapse without toolhead, it is recommended to add a " "When recording timelapse without toolhead, it is recommended to add a "
"\"Timelapse Wipe Tower\" \n" "\"Timelapse Wipe Tower\" \n"
"by right-click the empty position of build plate and choose \"Add " "by right-click the empty position of build plate and choose \"Add Primitive"
"Primitive\"->\"Timelapse Wipe Tower\"." "\"->\"Timelapse Wipe Tower\"."
msgstr "" msgstr ""
"Quan graveu timelapse sense capçal d'impressió, es recomana afegir una " "Quan graveu timelapse sense capçal d'impressió, es recomana afegir una "
"\"Torre de Purga Timelapse\" \n" "\"Torre de Purga Timelapse\" \n"
@ -8765,19 +8770,13 @@ msgstr ""
"de la impressora per obtenir velocitats més altes." "de la impressora per obtenir velocitats més altes."
msgid "" msgid ""
"The speed setting exceeds the printer's maximum speed (machine_max_speed_x/" "The travel acceleration setting exceeds the printer's maximum travel "
"machine_max_speed_y).\n" "acceleration (machine_max_acceleration_travel).\n"
"Orca will automatically cap the print speed to ensure it doesn't surpass the " "Orca will automatically cap the travel acceleration speed to ensure it "
"printer's capabilities.\n" "doesn't surpass the printer's capabilities.\n"
"You can adjust the maximum speed setting in your printer's configuration to " "You can adjust the machine_max_acceleration_travel value in your printer's "
"get higher speeds." "configuration to get higher speeds."
msgstr "" msgstr ""
"La configuració de velocitat supera la velocitat màxima de la impressora "
"(machine_max_speed_x/machine_max_speed_y).\n"
"L'Orca limitarà automàticament la velocitat d'impressió per assegurar-se que "
"no superi les capacitats de la impressora.\n"
"Podeu ajustar la configuració de velocitat màxima a la configuració de la "
"impressora per obtenir velocitats més altes."
msgid "Generating skirt & brim" msgid "Generating skirt & brim"
msgstr "Generant Faldilla i Vora d'Adherència" msgstr "Generant Faldilla i Vora d'Adherència"
@ -9335,8 +9334,8 @@ msgstr ""
"invers a 0 de manera que totes els perímetres interns s'imprimeixin en " "invers a 0 de manera que totes els perímetres interns s'imprimeixin en "
"direccions alternes en capes senars, independentment del seu grau de voladís." "direccions alternes en capes senars, independentment del seu grau de voladís."
msgid "Bridge counterbole holes" msgid "Bridge counterbore holes"
msgstr "Pont pels forats esbocats( contraforats )" msgstr ""
msgid "" msgid ""
"This option creates bridges for counterbore holes, allowing them to be " "This option creates bridges for counterbore holes, allowing them to be "
@ -10656,15 +10655,15 @@ msgstr "Velocitat màxima del ventilador a la capa"
msgid "" msgid ""
"Fan speed will be ramped up linearly from zero at layer " "Fan speed will be ramped up linearly from zero at layer "
"\"close_fan_the_first_x_layers\" to maximum at layer " "\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer"
"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " "\". \"full_fan_speed_layer\" will be ignored if lower than "
"than \"close_fan_the_first_x_layers\", in which case the fan will be running " "\"close_fan_the_first_x_layers\", in which case the fan will be running at "
"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." "maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1."
msgstr "" msgstr ""
"La velocitat del ventilador augmentarà linealment de zero a la capa " "La velocitat del ventilador augmentarà linealment de zero a la capa "
"\"close_fan_the_first_x_layers\" al màxim a la capa " "\"close_fan_the_first_x_layers\" al màxim a la capa \"full_fan_speed_layer"
"\"full_fan_speed_layer\". S'ignorarà \"full_fan_speed_layer\" si és inferior " "\". S'ignorarà \"full_fan_speed_layer\" si és inferior a "
"a \"close_fan_the_first_x_layers\", en aquest cas el ventilador funcionarà a " "\"close_fan_the_first_x_layers\", en aquest cas el ventilador funcionarà a "
"la velocitat màxima permesa a la capa \"close_fan_the_first_x_layers\" + 1." "la velocitat màxima permesa a la capa \"close_fan_the_first_x_layers\" + 1."
msgid "Support interface fan speed" msgid "Support interface fan speed"
@ -14425,8 +14424,8 @@ msgstr "Inicia la prova Single-Thread"
msgid "Export Log" msgid "Export Log"
msgstr "Exportar Registre( Log )" msgstr "Exportar Registre( Log )"
msgid "Studio Version:" msgid "OrcaSlicer Version:"
msgstr "Versió d'Studio:" msgstr ""
msgid "System Version:" msgid "System Version:"
msgstr "Versió del Sistema:" msgstr "Versió del Sistema:"
@ -14434,11 +14433,11 @@ msgstr "Versió del Sistema:"
msgid "DNS Server:" msgid "DNS Server:"
msgstr "Servidor DNS:" msgstr "Servidor DNS:"
msgid "Test BambuLab" msgid "Test OrcaSlicer(GitHub)"
msgstr "Prova BambuLab" msgstr ""
msgid "Test BambuLab:" msgid "Test OrcaSlicer(GitHub):"
msgstr "Prova BambuLab:" msgstr ""
msgid "Test Bing.com" msgid "Test Bing.com"
msgstr "Prova Bing.com" msgstr "Prova Bing.com"
@ -14446,39 +14445,6 @@ msgstr "Prova Bing.com"
msgid "Test bing.com:" msgid "Test bing.com:"
msgstr "Prova bing.com:" msgstr "Prova bing.com:"
msgid "Test HTTP"
msgstr "Prova HTTP"
msgid "Test HTTP Service:"
msgstr "Prova el servei HTTP:"
msgid "Test storage"
msgstr "Prova d'emmagatzematge"
msgid "Test Storage Upload:"
msgstr "Prova de càrrega d'emmagatzematge:"
msgid "Test storage upgrade"
msgstr "Prova d'actualització de l'emmagatzematge"
msgid "Test Storage Upgrade:"
msgstr "Prova d'Actualització de l'Emmagatzematge:"
msgid "Test storage download"
msgstr "Prova de descàrrega des de l'emmagatzematge"
msgid "Test Storage Download:"
msgstr "Prova de Descàrrega des de l'Emmagatzematge:"
msgid "Test plugin download"
msgstr "Prova de descàrrega de plugins"
msgid "Test Plugin Download:"
msgstr "Prova de Descàrrega de Plugins:"
msgid "Test Storage Upload"
msgstr "Prova de pujada a l'emmagatzematge"
msgid "Log Info" msgid "Log Info"
msgstr "Informació del Registre" msgstr "Informació del Registre"
@ -14587,8 +14553,8 @@ msgstr ""
"Vols reescriure'l?" "Vols reescriure'l?"
msgid "" msgid ""
"We would rename the presets as \"Vendor Type Serial @printer you " "We would rename the presets as \"Vendor Type Serial @printer you selected"
"selected\". \n" "\". \n"
"To add preset for more printers, Please go to printer selection" "To add preset for more printers, Please go to printer selection"
msgstr "" msgstr ""
"Canviaríem el nom dels perfils seleccionats com a \"Proveïdor Tipus " "Canviaríem el nom dels perfils seleccionats com a \"Proveïdor Tipus "
@ -15579,6 +15545,84 @@ msgstr ""
"augmentar adequadament la temperatura del llit pot reduir la probabilitat de " "augmentar adequadament la temperatura del llit pot reduir la probabilitat de "
"deformació." "deformació."
#~ msgid ""
#~ "Alternate extra wall only works with ensure vertical shell thickness "
#~ "disabled. "
#~ msgstr ""
#~ "El perímetre addicional alternat només funciona amb el gruix vertical de "
#~ "la carcassa desactivat. "
#~ msgid ""
#~ "Change these settings automatically? \n"
#~ "Yes - Disable ensure vertical shell thickness and enable alternate extra "
#~ "wall\n"
#~ "No - Dont use alternate extra wall"
#~ msgstr ""
#~ "Canviar aquesta configuració automàticament? \n"
#~ "Sí - Desactivar assegurar el gruix vertical de la carcassa i activar un "
#~ "perímetre addicional alternat\n"
#~ "No - No utilitzar perímetre addicional alternat"
#~ msgid ""
#~ "The speed setting exceeds the printer's maximum speed "
#~ "(machine_max_speed_x/machine_max_speed_y).\n"
#~ "Orca will automatically cap the print speed to ensure it doesn't surpass "
#~ "the printer's capabilities.\n"
#~ "You can adjust the maximum speed setting in your printer's configuration "
#~ "to get higher speeds."
#~ msgstr ""
#~ "La configuració de velocitat supera la velocitat màxima de la impressora "
#~ "(machine_max_speed_x/machine_max_speed_y).\n"
#~ "L'Orca limitarà automàticament la velocitat d'impressió per assegurar-se "
#~ "que no superi les capacitats de la impressora.\n"
#~ "Podeu ajustar la configuració de velocitat màxima a la configuració de la "
#~ "impressora per obtenir velocitats més altes."
#~ msgid "Bridge counterbole holes"
#~ msgstr "Pont pels forats esbocats( contraforats )"
#~ msgid "Studio Version:"
#~ msgstr "Versió d'Studio:"
#~ msgid "Test BambuLab"
#~ msgstr "Prova BambuLab"
#~ msgid "Test BambuLab:"
#~ msgstr "Prova BambuLab:"
#~ msgid "Test HTTP"
#~ msgstr "Prova HTTP"
#~ msgid "Test HTTP Service:"
#~ msgstr "Prova el servei HTTP:"
#~ msgid "Test storage"
#~ msgstr "Prova d'emmagatzematge"
#~ msgid "Test Storage Upload:"
#~ msgstr "Prova de càrrega d'emmagatzematge:"
#~ msgid "Test storage upgrade"
#~ msgstr "Prova d'actualització de l'emmagatzematge"
#~ msgid "Test Storage Upgrade:"
#~ msgstr "Prova d'Actualització de l'Emmagatzematge:"
#~ msgid "Test storage download"
#~ msgstr "Prova de descàrrega des de l'emmagatzematge"
#~ msgid "Test Storage Download:"
#~ msgstr "Prova de Descàrrega des de l'Emmagatzematge:"
#~ msgid "Test plugin download"
#~ msgstr "Prova de descàrrega de plugins"
#~ msgid "Test Plugin Download:"
#~ msgstr "Prova de Descàrrega de Plugins:"
#~ msgid "Test Storage Upload"
#~ msgstr "Prova de pujada a l'emmagatzematge"
#~ msgid "Resize" #~ msgid "Resize"
#~ msgstr "Redimensionar" #~ msgstr "Redimensionar"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-03-16 17:57+0800\n" "POT-Creation-Date: 2024-03-22 19:58+0800\n"
"PO-Revision-Date: 2023-09-30 15:15+0200\n" "PO-Revision-Date: 2023-09-30 15:15+0200\n"
"Last-Translator: René Mošner <Renemosner@seznam.cz>\n" "Last-Translator: René Mošner <Renemosner@seznam.cz>\n"
"Language-Team: \n" "Language-Team: \n"
@ -6069,6 +6069,9 @@ msgstr "Región přihlášení"
msgid "Stealth Mode" msgid "Stealth Mode"
msgstr "Tajný Režim" msgstr "Tajný Režim"
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only" msgid "Check for stable updates only"
msgstr "" msgstr ""
@ -6124,6 +6127,9 @@ msgstr ""
msgid "If enabled, auto-calculate everytime the color changed." msgid "If enabled, auto-calculate everytime the color changed."
msgstr "" msgstr ""
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)" msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr "" msgstr ""
"Automatická synchronizace uživatelských předvoleb (Tiskárna/Filament/Proces)" "Automatická synchronizace uživatelských předvoleb (Tiskárna/Filament/Proces)"
@ -13772,7 +13778,7 @@ msgstr ""
msgid "Export Log" msgid "Export Log"
msgstr "" msgstr ""
msgid "Studio Version:" msgid "OrcaSlicer Version:"
msgstr "" msgstr ""
msgid "System Version:" msgid "System Version:"
@ -13781,10 +13787,10 @@ msgstr ""
msgid "DNS Server:" msgid "DNS Server:"
msgstr "" msgstr ""
msgid "Test BambuLab" msgid "Test OrcaSlicer(GitHub)"
msgstr "" msgstr ""
msgid "Test BambuLab:" msgid "Test OrcaSlicer(GitHub):"
msgstr "" msgstr ""
msgid "Test Bing.com" msgid "Test Bing.com"
@ -13793,39 +13799,6 @@ msgstr ""
msgid "Test bing.com:" msgid "Test bing.com:"
msgstr "" msgstr ""
msgid "Test HTTP"
msgstr ""
msgid "Test HTTP Service:"
msgstr ""
msgid "Test storage"
msgstr ""
msgid "Test Storage Upload:"
msgstr ""
msgid "Test storage upgrade"
msgstr ""
msgid "Test Storage Upgrade:"
msgstr ""
msgid "Test storage download"
msgstr ""
msgid "Test Storage Download:"
msgstr ""
msgid "Test plugin download"
msgstr ""
msgid "Test Plugin Download:"
msgstr ""
msgid "Test Storage Upload"
msgstr ""
msgid "Log Info" msgid "Log Info"
msgstr "" msgstr ""

View file

@ -2,7 +2,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-03-16 17:57+0800\n" "POT-Creation-Date: 2024-03-22 19:58+0800\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: Heiko Liebscher <hliebschergmail.com>\n" "Last-Translator: Heiko Liebscher <hliebschergmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
@ -6237,6 +6237,9 @@ msgstr "Login-Region"
msgid "Stealth Mode" msgid "Stealth Mode"
msgstr "Unsichtbarer Modus" msgstr "Unsichtbarer Modus"
msgid "Enable network plugin"
msgstr "Netzwerk-Plugin aktivieren"
msgid "Check for stable updates only" msgid "Check for stable updates only"
msgstr "Nur nach stabilen Updates suchen" msgstr "Nur nach stabilen Updates suchen"
@ -6292,6 +6295,9 @@ msgstr "Reinigungsvolumen: Auto-Berechnung bei jeder Farbänderung."
msgid "If enabled, auto-calculate everytime the color changed." msgid "If enabled, auto-calculate everytime the color changed."
msgstr "Wenn aktiviert, wird bei jeder Farbänderung automatisch berechnet." msgstr "Wenn aktiviert, wird bei jeder Farbänderung automatisch berechnet."
msgid "Network"
msgstr "Netzwerk"
msgid "Auto sync user presets(Printer/Filament/Process)" msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr "Benutzerprofile automatisch synchronisieren (Drucker/Filament/Prozess)" msgstr "Benutzerprofile automatisch synchronisieren (Drucker/Filament/Prozess)"
@ -8853,8 +8859,9 @@ msgid ""
msgstr "" msgstr ""
"Die Beschleunigungseinstellung für das Verfahren überschreitet die maximale " "Die Beschleunigungseinstellung für das Verfahren überschreitet die maximale "
"Verfahrensbeschleunigung des Druckers (machine_max_acceleration_travel).\n" "Verfahrensbeschleunigung des Druckers (machine_max_acceleration_travel).\n"
"Orca wird automatisch die Verfahrensbeschleunigungsgeschwindigkeit begrenzen, " "Orca wird automatisch die Verfahrensbeschleunigungsgeschwindigkeit "
"um sicherzustellen, dass sie nicht die Fähigkeiten des Druckers überschreitet.\n" "begrenzen, um sicherzustellen, dass sie nicht die Fähigkeiten des Druckers "
"überschreitet.\n"
"Sie können den Wert von machine_max_acceleration_travel in der Konfiguration " "Sie können den Wert von machine_max_acceleration_travel in der Konfiguration "
"Ihres Druckers anpassen, um höhere Geschwindigkeiten zu erreichen." "Ihres Druckers anpassen, um höhere Geschwindigkeiten zu erreichen."
@ -14505,8 +14512,8 @@ msgstr "Starten Sie den Test mit einem Thread"
msgid "Export Log" msgid "Export Log"
msgstr "Protokoll exportieren" msgstr "Protokoll exportieren"
msgid "Studio Version:" msgid "OrcaSlicer Version:"
msgstr "Studio Version:" msgstr "OrcaSlicer Version:"
msgid "System Version:" msgid "System Version:"
msgstr "System Version:" msgstr "System Version:"
@ -14514,11 +14521,11 @@ msgstr "System Version:"
msgid "DNS Server:" msgid "DNS Server:"
msgstr "DNS Server:" msgstr "DNS Server:"
msgid "Test BambuLab" msgid "Test OrcaSlicer(GitHub)"
msgstr "Test BambuLab" msgstr "Test OrcaSlicer(GitHub)"
msgid "Test BambuLab:" msgid "Test OrcaSlicer(GitHub):"
msgstr "Test BambuLab:" msgstr "Test OrcaSlicer(GitHub):"
msgid "Test Bing.com" msgid "Test Bing.com"
msgstr "Test Bing.com" msgstr "Test Bing.com"
@ -14526,39 +14533,6 @@ msgstr "Test Bing.com"
msgid "Test bing.com:" msgid "Test bing.com:"
msgstr "Test bing.com:" msgstr "Test bing.com:"
msgid "Test HTTP"
msgstr "Test HTTP"
msgid "Test HTTP Service:"
msgstr "Test HTTP Service:"
msgid "Test storage"
msgstr "Test Speicher"
msgid "Test Storage Upload:"
msgstr "Test Speicher hochladen:"
msgid "Test storage upgrade"
msgstr "Test Speicher Upgrade"
msgid "Test Storage Upgrade:"
msgstr "Test Speicher Upgrade:"
msgid "Test storage download"
msgstr "Test Speicher Download"
msgid "Test Storage Download:"
msgstr "Test Speicher Download:"
msgid "Test plugin download"
msgstr "Test Plugin Download"
msgid "Test Plugin Download:"
msgstr "Test Plugin Download:"
msgid "Test Storage Upload"
msgstr "Test Speicher hochladen"
msgid "Log Info" msgid "Log Info"
msgstr "Protokoll Info" msgstr "Protokoll Info"
@ -15663,6 +15637,48 @@ msgstr ""
"wie z.B. ABS, durch eine entsprechende Erhöhung der Heizbetttemperatur die " "wie z.B. ABS, durch eine entsprechende Erhöhung der Heizbetttemperatur die "
"Wahrscheinlichkeit von Verwerfungen verringert werden kann." "Wahrscheinlichkeit von Verwerfungen verringert werden kann."
#~ msgid "Studio Version:"
#~ msgstr "Studio Version:"
#~ msgid "Test BambuLab"
#~ msgstr "Test BambuLab"
#~ msgid "Test BambuLab:"
#~ msgstr "Test BambuLab:"
#~ msgid "Test HTTP"
#~ msgstr "Test HTTP"
#~ msgid "Test HTTP Service:"
#~ msgstr "Test HTTP Service:"
#~ msgid "Test storage"
#~ msgstr "Test Speicher"
#~ msgid "Test Storage Upload:"
#~ msgstr "Test Speicher hochladen:"
#~ msgid "Test storage upgrade"
#~ msgstr "Test Speicher Upgrade"
#~ msgid "Test Storage Upgrade:"
#~ msgstr "Test Speicher Upgrade:"
#~ msgid "Test storage download"
#~ msgstr "Test Speicher Download"
#~ msgid "Test Storage Download:"
#~ msgstr "Test Speicher Download:"
#~ msgid "Test plugin download"
#~ msgstr "Test Plugin Download"
#~ msgid "Test Plugin Download:"
#~ msgstr "Test Plugin Download:"
#~ msgid "Test Storage Upload"
#~ msgstr "Test Speicher hochladen"
#~ msgid "" #~ msgid ""
#~ "The speed setting exceeds the printer's maximum speed " #~ "The speed setting exceeds the printer's maximum speed "
#~ "(machine_max_speed_x/machine_max_speed_y).\n" #~ "(machine_max_speed_x/machine_max_speed_y).\n"

View file

@ -2,7 +2,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-03-16 17:57+0800\n" "POT-Creation-Date: 2024-03-22 19:58+0800\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@ -5961,6 +5961,9 @@ msgstr "Login Region"
msgid "Stealth Mode" msgid "Stealth Mode"
msgstr "" msgstr ""
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only" msgid "Check for stable updates only"
msgstr "" msgstr ""
@ -6016,6 +6019,9 @@ msgstr ""
msgid "If enabled, auto-calculate everytime the color changed." msgid "If enabled, auto-calculate everytime the color changed."
msgstr "" msgstr ""
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)" msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr "Auto sync user presets (Printer/Filament/Process)" msgstr "Auto sync user presets (Printer/Filament/Process)"
@ -13217,7 +13223,7 @@ msgstr ""
msgid "Export Log" msgid "Export Log"
msgstr "" msgstr ""
msgid "Studio Version:" msgid "OrcaSlicer Version:"
msgstr "" msgstr ""
msgid "System Version:" msgid "System Version:"
@ -13226,10 +13232,10 @@ msgstr ""
msgid "DNS Server:" msgid "DNS Server:"
msgstr "" msgstr ""
msgid "Test BambuLab" msgid "Test OrcaSlicer(GitHub)"
msgstr "" msgstr ""
msgid "Test BambuLab:" msgid "Test OrcaSlicer(GitHub):"
msgstr "" msgstr ""
msgid "Test Bing.com" msgid "Test Bing.com"
@ -13238,39 +13244,6 @@ msgstr ""
msgid "Test bing.com:" msgid "Test bing.com:"
msgstr "" msgstr ""
msgid "Test HTTP"
msgstr ""
msgid "Test HTTP Service:"
msgstr ""
msgid "Test storage"
msgstr ""
msgid "Test Storage Upload:"
msgstr ""
msgid "Test storage upgrade"
msgstr ""
msgid "Test Storage Upgrade:"
msgstr ""
msgid "Test storage download"
msgstr ""
msgid "Test Storage Download:"
msgstr ""
msgid "Test plugin download"
msgstr ""
msgid "Test Plugin Download:"
msgstr ""
msgid "Test Storage Upload"
msgstr ""
msgid "Log Info" msgid "Log Info"
msgstr "" msgstr ""

View file

@ -2,7 +2,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-03-16 17:57+0800\n" "POT-Creation-Date: 2024-03-22 19:58+0800\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: Carlos Fco. Caruncho Serrano <puzzlero@gmail.com>\n" "Last-Translator: Carlos Fco. Caruncho Serrano <puzzlero@gmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
@ -6195,6 +6195,9 @@ msgstr "Región de inicio de sesión"
msgid "Stealth Mode" msgid "Stealth Mode"
msgstr "Modo invisible" msgstr "Modo invisible"
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only" msgid "Check for stable updates only"
msgstr "Buscar sólo actualizaciones estables" msgstr "Buscar sólo actualizaciones estables"
@ -6252,6 +6255,9 @@ msgstr "Volumenes de descarga: Auto calcular en cada cambio de color."
msgid "If enabled, auto-calculate everytime the color changed." msgid "If enabled, auto-calculate everytime the color changed."
msgstr "Si está activado, auto calcula en cada cambio de color." msgstr "Si está activado, auto calcula en cada cambio de color."
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)" msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr "" msgstr ""
"Sincronización automática de los perfiles del usuario (Impresora/Filamento/" "Sincronización automática de los perfiles del usuario (Impresora/Filamento/"
@ -14456,8 +14462,8 @@ msgstr "Iniciar Prueba Monotarea"
msgid "Export Log" msgid "Export Log"
msgstr "Exportar Registro" msgstr "Exportar Registro"
msgid "Studio Version:" msgid "OrcaSlicer Version:"
msgstr "Versión de Orca:" msgstr ""
msgid "System Version:" msgid "System Version:"
msgstr "Versión de Sistema:" msgstr "Versión de Sistema:"
@ -14465,11 +14471,11 @@ msgstr "Versión de Sistema:"
msgid "DNS Server:" msgid "DNS Server:"
msgstr "Servidor DNS:" msgstr "Servidor DNS:"
msgid "Test BambuLab" msgid "Test OrcaSlicer(GitHub)"
msgstr "Prueba OrcaSlicer" msgstr ""
msgid "Test BambuLab:" msgid "Test OrcaSlicer(GitHub):"
msgstr "Prueba OrcaSlicer:" msgstr ""
msgid "Test Bing.com" msgid "Test Bing.com"
msgstr "Prueba Bing.com" msgstr "Prueba Bing.com"
@ -14477,39 +14483,6 @@ msgstr "Prueba Bing.com"
msgid "Test bing.com:" msgid "Test bing.com:"
msgstr "Prueba Bing,.com:" msgstr "Prueba Bing,.com:"
msgid "Test HTTP"
msgstr "Prueba HTTP"
msgid "Test HTTP Service:"
msgstr "Prueba Servicio HTTP:"
msgid "Test storage"
msgstr "Prueba de almacenamiento"
msgid "Test Storage Upload:"
msgstr "Prueba de Carga de Almacenamiento:"
msgid "Test storage upgrade"
msgstr "Prueba de actualización de almacenamiento"
msgid "Test Storage Upgrade:"
msgstr "Prueba de Actualización de Almacenamiento:"
msgid "Test storage download"
msgstr "Prueba de descarga de almacenamiento"
msgid "Test Storage Download:"
msgstr "Prueba de Descarga de Almacenamiento:"
msgid "Test plugin download"
msgstr "Prueba de descarga de plugin"
msgid "Test Plugin Download:"
msgstr "Prueba de Descarga de Plugin:"
msgid "Test Storage Upload"
msgstr "Prueba de Carga de Almacenamiento"
msgid "Log Info" msgid "Log Info"
msgstr "Información de Registro" msgstr "Información de Registro"
@ -15610,6 +15583,48 @@ msgstr ""
"aumentar adecuadamente la temperatura del lecho térmico puede reducir la " "aumentar adecuadamente la temperatura del lecho térmico puede reducir la "
"probabilidad de deformaciones." "probabilidad de deformaciones."
#~ msgid "Studio Version:"
#~ msgstr "Versión de Orca:"
#~ msgid "Test BambuLab"
#~ msgstr "Prueba OrcaSlicer"
#~ msgid "Test BambuLab:"
#~ msgstr "Prueba OrcaSlicer:"
#~ msgid "Test HTTP"
#~ msgstr "Prueba HTTP"
#~ msgid "Test HTTP Service:"
#~ msgstr "Prueba Servicio HTTP:"
#~ msgid "Test storage"
#~ msgstr "Prueba de almacenamiento"
#~ msgid "Test Storage Upload:"
#~ msgstr "Prueba de Carga de Almacenamiento:"
#~ msgid "Test storage upgrade"
#~ msgstr "Prueba de actualización de almacenamiento"
#~ msgid "Test Storage Upgrade:"
#~ msgstr "Prueba de Actualización de Almacenamiento:"
#~ msgid "Test storage download"
#~ msgstr "Prueba de descarga de almacenamiento"
#~ msgid "Test Storage Download:"
#~ msgstr "Prueba de Descarga de Almacenamiento:"
#~ msgid "Test plugin download"
#~ msgstr "Prueba de descarga de plugin"
#~ msgid "Test Plugin Download:"
#~ msgstr "Prueba de Descarga de Plugin:"
#~ msgid "Test Storage Upload"
#~ msgstr "Prueba de Carga de Almacenamiento"
#~ msgid "" #~ msgid ""
#~ "The speed setting exceeds the printer's maximum speed " #~ "The speed setting exceeds the printer's maximum speed "
#~ "(machine_max_speed_x/machine_max_speed_y).\n" #~ "(machine_max_speed_x/machine_max_speed_y).\n"

View file

@ -6,7 +6,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-03-16 17:57+0800\n" "POT-Creation-Date: 2024-03-22 19:58+0800\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: Guislain Cyril, Thomas Lété\n" "Language-Team: Guislain Cyril, Thomas Lété\n"
@ -6222,6 +6222,9 @@ msgstr "Région d'origine"
msgid "Stealth Mode" msgid "Stealth Mode"
msgstr "Mode privé" msgstr "Mode privé"
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only" msgid "Check for stable updates only"
msgstr "Vérifier les mises à jour stables uniquement" msgstr "Vérifier les mises à jour stables uniquement"
@ -6282,6 +6285,9 @@ msgstr ""
"Si cette option est activée, le calcul se fera automatiquement à chaque " "Si cette option est activée, le calcul se fera automatiquement à chaque "
"changement de couleur." "changement de couleur."
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)" msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr "" msgstr ""
"Synchronisation automatique des pré-réglages utilisateur (Imprimante/" "Synchronisation automatique des pré-réglages utilisateur (Imprimante/"
@ -14603,8 +14609,8 @@ msgstr "Démarrer le test Single-Thread"
msgid "Export Log" msgid "Export Log"
msgstr "Exportation du journal" msgstr "Exportation du journal"
msgid "Studio Version:" msgid "OrcaSlicer Version:"
msgstr "Version de Studio :" msgstr ""
msgid "System Version:" msgid "System Version:"
msgstr "Version du système :" msgstr "Version du système :"
@ -14612,11 +14618,11 @@ msgstr "Version du système :"
msgid "DNS Server:" msgid "DNS Server:"
msgstr "Serveur DNS :" msgstr "Serveur DNS :"
msgid "Test BambuLab" msgid "Test OrcaSlicer(GitHub)"
msgstr "Test BambuLab" msgstr ""
msgid "Test BambuLab:" msgid "Test OrcaSlicer(GitHub):"
msgstr "Test BambuLab :" msgstr ""
msgid "Test Bing.com" msgid "Test Bing.com"
msgstr "Test Bing.com" msgstr "Test Bing.com"
@ -14624,39 +14630,6 @@ msgstr "Test Bing.com"
msgid "Test bing.com:" msgid "Test bing.com:"
msgstr "Test bing.com :" msgstr "Test bing.com :"
msgid "Test HTTP"
msgstr ""
msgid "Test HTTP Service:"
msgstr "Test du service HTTP :"
msgid "Test storage"
msgstr "Test du stockage"
msgid "Test Storage Upload:"
msgstr "Test de lenvoi du stockage:"
msgid "Test storage upgrade"
msgstr "Test de la mise à niveau du stockage"
msgid "Test Storage Upgrade:"
msgstr "Test de la mise à niveau du stockage :"
msgid "Test storage download"
msgstr "Test du téléchargement du stockage"
msgid "Test Storage Download:"
msgstr "Test du téléchargement du stockage :"
msgid "Test plugin download"
msgstr "Test du téléchargement du plugin"
msgid "Test Plugin Download:"
msgstr "Test du téléchargement du plugin :"
msgid "Test Storage Upload"
msgstr "Test de lenvoi du stockage"
msgid "Log Info" msgid "Log Info"
msgstr "Journal de bord" msgstr "Journal de bord"
@ -15775,6 +15748,45 @@ msgstr ""
"déformer, tels que lABS, une augmentation appropriée de la température du " "déformer, tels que lABS, une augmentation appropriée de la température du "
"plateau chauffant peut réduire la probabilité de déformation." "plateau chauffant peut réduire la probabilité de déformation."
#~ msgid "Studio Version:"
#~ msgstr "Version de Studio :"
#~ msgid "Test BambuLab"
#~ msgstr "Test BambuLab"
#~ msgid "Test BambuLab:"
#~ msgstr "Test BambuLab :"
#~ msgid "Test HTTP Service:"
#~ msgstr "Test du service HTTP :"
#~ msgid "Test storage"
#~ msgstr "Test du stockage"
#~ msgid "Test Storage Upload:"
#~ msgstr "Test de lenvoi du stockage:"
#~ msgid "Test storage upgrade"
#~ msgstr "Test de la mise à niveau du stockage"
#~ msgid "Test Storage Upgrade:"
#~ msgstr "Test de la mise à niveau du stockage :"
#~ msgid "Test storage download"
#~ msgstr "Test du téléchargement du stockage"
#~ msgid "Test Storage Download:"
#~ msgstr "Test du téléchargement du stockage :"
#~ msgid "Test plugin download"
#~ msgstr "Test du téléchargement du plugin"
#~ msgid "Test Plugin Download:"
#~ msgstr "Test du téléchargement du plugin :"
#~ msgid "Test Storage Upload"
#~ msgstr "Test de lenvoi du stockage"
#~ msgid "" #~ msgid ""
#~ "The speed setting exceeds the printer's maximum speed " #~ "The speed setting exceeds the printer's maximum speed "
#~ "(machine_max_speed_x/machine_max_speed_y).\n" #~ "(machine_max_speed_x/machine_max_speed_y).\n"

View file

@ -2,7 +2,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-03-16 17:57+0800\n" "POT-Creation-Date: 2024-03-22 19:58+0800\n"
"Language: hu\n" "Language: hu\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@ -5992,6 +5992,9 @@ msgstr "Régió"
msgid "Stealth Mode" msgid "Stealth Mode"
msgstr "" msgstr ""
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only" msgid "Check for stable updates only"
msgstr "" msgstr ""
@ -6047,6 +6050,9 @@ msgstr ""
msgid "If enabled, auto-calculate everytime the color changed." msgid "If enabled, auto-calculate everytime the color changed."
msgstr "" msgstr ""
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)" msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr "" msgstr ""
"Felhasználói beállítások automatikus szinkronizálása (Nyomtató/Filament/" "Felhasználói beállítások automatikus szinkronizálása (Nyomtató/Filament/"
@ -13310,7 +13316,7 @@ msgstr ""
msgid "Export Log" msgid "Export Log"
msgstr "" msgstr ""
msgid "Studio Version:" msgid "OrcaSlicer Version:"
msgstr "" msgstr ""
msgid "System Version:" msgid "System Version:"
@ -13319,10 +13325,10 @@ msgstr ""
msgid "DNS Server:" msgid "DNS Server:"
msgstr "" msgstr ""
msgid "Test BambuLab" msgid "Test OrcaSlicer(GitHub)"
msgstr "" msgstr ""
msgid "Test BambuLab:" msgid "Test OrcaSlicer(GitHub):"
msgstr "" msgstr ""
msgid "Test Bing.com" msgid "Test Bing.com"
@ -13331,39 +13337,6 @@ msgstr ""
msgid "Test bing.com:" msgid "Test bing.com:"
msgstr "" msgstr ""
msgid "Test HTTP"
msgstr ""
msgid "Test HTTP Service:"
msgstr ""
msgid "Test storage"
msgstr ""
msgid "Test Storage Upload:"
msgstr ""
msgid "Test storage upgrade"
msgstr ""
msgid "Test Storage Upgrade:"
msgstr ""
msgid "Test storage download"
msgstr ""
msgid "Test Storage Download:"
msgstr ""
msgid "Test plugin download"
msgstr ""
msgid "Test Plugin Download:"
msgstr ""
msgid "Test Storage Upload"
msgstr ""
msgid "Log Info" msgid "Log Info"
msgstr "" msgstr ""

View file

@ -2,7 +2,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-03-16 17:57+0800\n" "POT-Creation-Date: 2024-03-22 19:58+0800\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@ -2971,8 +2971,8 @@ msgstr "Slot AMS"
msgid "" msgid ""
"Note: Only the AMS slots loaded with the same material type can be selected." "Note: Only the AMS slots loaded with the same material type can be selected."
msgstr "" msgstr ""
"Nota: sono selezionabili solo gli slot AMS caricati con lo stesso tipo " "Nota: sono selezionabili solo gli slot AMS caricati con lo stesso tipo di "
"di materiale." "materiale."
msgid "Enable AMS" msgid "Enable AMS"
msgstr "Abilita AMS" msgstr "Abilita AMS"
@ -3443,8 +3443,8 @@ msgid ""
"No - Dont use alternate extra wall" "No - Dont use alternate extra wall"
msgstr "" msgstr ""
"Modificare automaticamente queste impostazioni? \n" "Modificare automaticamente queste impostazioni? \n"
"Sì - Modifica Garantisci spessore verticale del guscio a Moderato e " "Sì - Modifica Garantisci spessore verticale del guscio a Moderato e abilita "
"abilita Parete Aggiuntiva Alternativa\n" "Parete Aggiuntiva Alternativa\n"
"No - Non utilizzare Parete Aggiuntiva Alternativa" "No - Non utilizzare Parete Aggiuntiva Alternativa"
msgid "" msgid ""
@ -3494,8 +3494,7 @@ msgid ""
"seam_slope_start_height need to be smaller than layer_height.\n" "seam_slope_start_height need to be smaller than layer_height.\n"
"Reset to 0." "Reset to 0."
msgstr "" msgstr ""
"seam_slope_start_height deve essere inferiore a layer_height" "seam_slope_start_height deve essere inferiore a layer_heightReimpostare a 0."
"Reimpostare a 0."
msgid "Auto bed leveling" msgid "Auto bed leveling"
msgstr "Livellamento automatico piano" msgstr "Livellamento automatico piano"
@ -6189,6 +6188,9 @@ msgstr "Regione di accesso"
msgid "Stealth Mode" msgid "Stealth Mode"
msgstr "Modalità invisibile" msgstr "Modalità invisibile"
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only" msgid "Check for stable updates only"
msgstr "Verifica solo la disponibilità di aggiornamenti stabili" msgstr "Verifica solo la disponibilità di aggiornamenti stabili"
@ -6246,6 +6248,9 @@ msgstr ""
msgid "If enabled, auto-calculate everytime the color changed." msgid "If enabled, auto-calculate everytime the color changed."
msgstr "Se abilitato, calcola automaticamente ogni volta che il colore cambia." msgstr "Se abilitato, calcola automaticamente ogni volta che il colore cambia."
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)" msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr "" msgstr ""
"Sincronizzazione automatica preset utente (stampante/filamento/processo)" "Sincronizzazione automatica preset utente (stampante/filamento/processo)"
@ -6871,8 +6876,8 @@ msgid ""
"Caution to use! Flow calibration on Textured PEI Plate may fail due to the " "Caution to use! Flow calibration on Textured PEI Plate may fail due to the "
"scattered surface." "scattered surface."
msgstr "" msgstr ""
"Precauzioni per l'uso! La calibrazione del flusso sulla piastra PEI testurizzata " "Precauzioni per l'uso! La calibrazione del flusso sulla piastra PEI "
"può fallire a causa della superficie irregolare." "testurizzata può fallire a causa della superficie irregolare."
msgid "Automatic flow calibration using Micro Lidar" msgid "Automatic flow calibration using Micro Lidar"
msgstr "Calibrazione automatica del flusso tramite Micro Lidar" msgstr "Calibrazione automatica del flusso tramite Micro Lidar"
@ -8769,10 +8774,10 @@ msgid ""
"You can adjust the maximum jerk setting in your printer's configuration to " "You can adjust the maximum jerk setting in your printer's configuration to "
"get higher speeds." "get higher speeds."
msgstr "" msgstr ""
"L'impostazione del jerk supera quella massima prevista dalla stampante. " "L'impostazione del jerk supera quella massima prevista dalla stampante. "
" (machine_max_jerk_x/machine_max_jerk_y).\n" "(machine_max_jerk_x/machine_max_jerk_y).\n"
"Orca limiterà automaticamente la velocità del jerk per garantire che " "Orca limiterà automaticamente la velocità del jerk per garantire che non "
"non superi le capacità della stampante.\n" "superi le capacità della stampante.\n"
"È possibile regolare l'impostazione di jerk massimo nella configurazione " "È possibile regolare l'impostazione di jerk massimo nella configurazione "
"della stampante per ottenere velocità più elevate." "della stampante per ottenere velocità più elevate."
@ -8786,8 +8791,8 @@ msgid ""
msgstr "" msgstr ""
"L'impostazione di accelerazione supera quella massima prevista dalla " "L'impostazione di accelerazione supera quella massima prevista dalla "
"stampante. (machine_max_acceleration_extruding).\n" "stampante. (machine_max_acceleration_extruding).\n"
"Orca limiterà automaticamente la velocità di accelerazione per garantire " "Orca limiterà automaticamente la velocità di accelerazione per garantire che "
"che non superi le capacità della stampante.\n" "non superi le capacità della stampante.\n"
"È possibile regolare il valore machine_max_acceleration_extruding nella " "È possibile regolare il valore machine_max_acceleration_extruding nella "
"configurazione della stampante per ottenere velocità più elevate." "configurazione della stampante per ottenere velocità più elevate."
@ -9769,15 +9774,16 @@ msgid ""
"All: Add solid infill for all suitable sloping surfaces\n" "All: Add solid infill for all suitable sloping surfaces\n"
"Default value is All." "Default value is All."
msgstr "" msgstr ""
"Aggiunge un riempimento solido in prossimità di superfici inclinate " "Aggiunge un riempimento solido in prossimità di superfici inclinate per "
"per garantire lo spessore verticale del guscio (layers solidi superiori e " "garantire lo spessore verticale del guscio (layers solidi superiori e "
"inferiori)\n" "inferiori)\n"
"Nessuno: Non viene aggiunto alcun riempimento solido. Attenzione: utilizzare " "Nessuno: Non viene aggiunto alcun riempimento solido. Attenzione: utilizzare "
"questa opzione con precauzione se il modello presenta superfici inclinate\n" "questa opzione con precauzione se il modello presenta superfici inclinate\n"
"Solo Critico: Evitare l'aggiunta di riempimenti solidi per le pareti\n" "Solo Critico: Evitare l'aggiunta di riempimenti solidi per le pareti\n"
"Moderato: Aggiungere il riempimento solido solo per le superfici fortemente " "Moderato: Aggiungere il riempimento solido solo per le superfici fortemente "
"inclinate.\n" "inclinate.\n"
"Tutto: aggiunge un riempimento solido per tutte le superfici inclinate idonee\n" "Tutto: aggiunge un riempimento solido per tutte le superfici inclinate "
"idonee\n"
"Il valore predefinito è Tutto." "Il valore predefinito è Tutto."
msgid "Critical Only" msgid "Critical Only"
@ -14470,8 +14476,8 @@ msgstr "Avvia test a thread singolo"
msgid "Export Log" msgid "Export Log"
msgstr "Esporta Log" msgstr "Esporta Log"
msgid "Studio Version:" msgid "OrcaSlicer Version:"
msgstr "Versione Studio:" msgstr ""
msgid "System Version:" msgid "System Version:"
msgstr "Versione del sistema:" msgstr "Versione del sistema:"
@ -14479,11 +14485,11 @@ msgstr "Versione del sistema:"
msgid "DNS Server:" msgid "DNS Server:"
msgstr "Server DNS:" msgstr "Server DNS:"
msgid "Test BambuLab" msgid "Test OrcaSlicer(GitHub)"
msgstr "Test BambuLab" msgstr ""
msgid "Test BambuLab:" msgid "Test OrcaSlicer(GitHub):"
msgstr "Test BambuLab:" msgstr ""
msgid "Test Bing.com" msgid "Test Bing.com"
msgstr "Test Bing.com" msgstr "Test Bing.com"
@ -14491,39 +14497,6 @@ msgstr "Test Bing.com"
msgid "Test bing.com:" msgid "Test bing.com:"
msgstr "Test bing.com:" msgstr "Test bing.com:"
msgid "Test HTTP"
msgstr "Test HTTP"
msgid "Test HTTP Service:"
msgstr "Test servizio HTTP:"
msgid "Test storage"
msgstr "Test Archiviazione"
msgid "Test Storage Upload:"
msgstr "Test Caricamento dell'archiviazione:"
msgid "Test storage upgrade"
msgstr "Test l'aggiornamento dell'archiviazione"
msgid "Test Storage Upgrade:"
msgstr "Test l'aggiornamento dell'archiviazione:"
msgid "Test storage download"
msgstr "Test Download dell'archiviazione "
msgid "Test Storage Download:"
msgstr "Test Download dell'archiviazione:"
msgid "Test plugin download"
msgstr "Test plugin download"
msgid "Test Plugin Download:"
msgstr "Test Plugin Download:"
msgid "Test Storage Upload"
msgstr "Test Caricamento dell'archiviazione"
msgid "Log Info" msgid "Log Info"
msgstr "Informazioni sul registro" msgstr "Informazioni sul registro"
@ -15627,12 +15600,54 @@ msgstr ""
"aumentare in modo appropriato la temperatura del piano riscaldato può " "aumentare in modo appropriato la temperatura del piano riscaldato può "
"ridurre la probabilità di deformazione." "ridurre la probabilità di deformazione."
#~ msgid "Studio Version:"
#~ msgstr "Versione Studio:"
#~ msgid "Test BambuLab"
#~ msgstr "Test BambuLab"
#~ msgid "Test BambuLab:"
#~ msgstr "Test BambuLab:"
#~ msgid "Test HTTP"
#~ msgstr "Test HTTP"
#~ msgid "Test HTTP Service:"
#~ msgstr "Test servizio HTTP:"
#~ msgid "Test storage"
#~ msgstr "Test Archiviazione"
#~ msgid "Test Storage Upload:"
#~ msgstr "Test Caricamento dell'archiviazione:"
#~ msgid "Test storage upgrade"
#~ msgstr "Test l'aggiornamento dell'archiviazione"
#~ msgid "Test Storage Upgrade:"
#~ msgstr "Test l'aggiornamento dell'archiviazione:"
#~ msgid "Test storage download"
#~ msgstr "Test Download dell'archiviazione "
#~ msgid "Test Storage Download:"
#~ msgstr "Test Download dell'archiviazione:"
#~ msgid "Test plugin download"
#~ msgstr "Test plugin download"
#~ msgid "Test Plugin Download:"
#~ msgstr "Test Plugin Download:"
#~ msgid "Test Storage Upload"
#~ msgstr "Test Caricamento dell'archiviazione"
#~ msgid "" #~ msgid ""
#~ "Alternate extra wall only works with ensure vertical shell thickness " #~ "Alternate extra wall only works with ensure vertical shell thickness "
#~ "disabled. " #~ "disabled. "
#~ msgstr "" #~ msgstr ""
#~ "L'opzione Parete Aggiuntiva Alternativa funziona solo con la disattivazione " #~ "L'opzione Parete Aggiuntiva Alternativa funziona solo con la "
#~ "dell'opzione Garantisci spessore verticale del guscio" #~ "disattivazione dell'opzione Garantisci spessore verticale del guscio"
#~ msgid "" #~ msgid ""
#~ "Change these settings automatically? \n" #~ "Change these settings automatically? \n"
@ -15641,8 +15656,8 @@ msgstr ""
#~ "No - Dont use alternate extra wall" #~ "No - Dont use alternate extra wall"
#~ msgstr "" #~ msgstr ""
#~ "Modificare automaticamente queste impostazioni? \n" #~ "Modificare automaticamente queste impostazioni? \n"
#~ "Sì - Disabilita Garantisci spessore verticale del guscio e abilita " #~ "Sì - Disabilita Garantisci spessore verticale del guscio e abilita Parete "
#~ "Parete Aggiuntiva Alternativa\n" #~ "Aggiuntiva Alternativa\n"
#~ "No - Non utilizzare una Parete Aggiuntiva Alternativa" #~ "No - Non utilizzare una Parete Aggiuntiva Alternativa"
#~ msgid "" #~ msgid ""

View file

@ -2,7 +2,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-03-16 17:57+0800\n" "POT-Creation-Date: 2024-03-22 19:58+0800\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@ -5878,6 +5878,9 @@ msgstr "地域"
msgid "Stealth Mode" msgid "Stealth Mode"
msgstr "" msgstr ""
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only" msgid "Check for stable updates only"
msgstr "" msgstr ""
@ -5933,6 +5936,9 @@ msgstr ""
msgid "If enabled, auto-calculate everytime the color changed." msgid "If enabled, auto-calculate everytime the color changed."
msgstr "" msgstr ""
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)" msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr "ユーザープリセットの自動同期 (プリンター/フィラメント/プロセス)" msgstr "ユーザープリセットの自動同期 (プリンター/フィラメント/プロセス)"
@ -12936,7 +12942,7 @@ msgstr ""
msgid "Export Log" msgid "Export Log"
msgstr "" msgstr ""
msgid "Studio Version:" msgid "OrcaSlicer Version:"
msgstr "" msgstr ""
msgid "System Version:" msgid "System Version:"
@ -12945,10 +12951,10 @@ msgstr ""
msgid "DNS Server:" msgid "DNS Server:"
msgstr "" msgstr ""
msgid "Test BambuLab" msgid "Test OrcaSlicer(GitHub)"
msgstr "" msgstr ""
msgid "Test BambuLab:" msgid "Test OrcaSlicer(GitHub):"
msgstr "" msgstr ""
msgid "Test Bing.com" msgid "Test Bing.com"
@ -12957,39 +12963,6 @@ msgstr ""
msgid "Test bing.com:" msgid "Test bing.com:"
msgstr "" msgstr ""
msgid "Test HTTP"
msgstr ""
msgid "Test HTTP Service:"
msgstr ""
msgid "Test storage"
msgstr ""
msgid "Test Storage Upload:"
msgstr ""
msgid "Test storage upgrade"
msgstr ""
msgid "Test Storage Upgrade:"
msgstr ""
msgid "Test storage download"
msgstr ""
msgid "Test Storage Download:"
msgstr ""
msgid "Test plugin download"
msgstr ""
msgid "Test Plugin Download:"
msgstr ""
msgid "Test Storage Upload"
msgstr ""
msgid "Log Info" msgid "Log Info"
msgstr "" msgstr ""

View file

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-03-16 17:57+0800\n" "POT-Creation-Date: 2024-03-22 19:58+0800\n"
"PO-Revision-Date: 2024-03-15 23:12+0900\n" "PO-Revision-Date: 2024-03-15 23:12+0900\n"
"Last-Translator: Hotsolidinfill <138652683+Hotsolidinfill@users.noreply." "Last-Translator: Hotsolidinfill <138652683+Hotsolidinfill@users.noreply."
"github.com>, crwusiz <crwusiz@naver.com>\n" "github.com>, crwusiz <crwusiz@naver.com>\n"
@ -6021,6 +6021,9 @@ msgstr "로그인 지역"
msgid "Stealth Mode" msgid "Stealth Mode"
msgstr "스텔스 모드" msgstr "스텔스 모드"
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only" msgid "Check for stable updates only"
msgstr "안정적인 업데이트만 확인" msgstr "안정적인 업데이트만 확인"
@ -6076,6 +6079,9 @@ msgstr "플러시 볼륨: 색상이 변경될 때마다 자동 계산됩니다."
msgid "If enabled, auto-calculate everytime the color changed." msgid "If enabled, auto-calculate everytime the color changed."
msgstr "활성화하면 색상이 변경될 때마다 자동 계산됩니다." msgstr "활성화하면 색상이 변경될 때마다 자동 계산됩니다."
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)" msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr "사용자 사전 설정 자동 동기화(프린터/필라멘트/프로세스)" msgstr "사용자 사전 설정 자동 동기화(프린터/필라멘트/프로세스)"
@ -13795,8 +13801,8 @@ msgstr "단일 스레드 테스트 시작"
msgid "Export Log" msgid "Export Log"
msgstr "로그 내보내기" msgstr "로그 내보내기"
msgid "Studio Version:" msgid "OrcaSlicer Version:"
msgstr "스튜디오 버전:" msgstr ""
msgid "System Version:" msgid "System Version:"
msgstr "시스템 버전:" msgstr "시스템 버전:"
@ -13804,11 +13810,11 @@ msgstr "시스템 버전:"
msgid "DNS Server:" msgid "DNS Server:"
msgstr "DNS 서버:" msgstr "DNS 서버:"
msgid "Test BambuLab" msgid "Test OrcaSlicer(GitHub)"
msgstr "테스트 뱀부랩" msgstr ""
msgid "Test BambuLab:" msgid "Test OrcaSlicer(GitHub):"
msgstr "테스트 뱀부랩:" msgstr ""
msgid "Test Bing.com" msgid "Test Bing.com"
msgstr "테스트 Bing.com" msgstr "테스트 Bing.com"
@ -13816,39 +13822,6 @@ msgstr "테스트 Bing.com"
msgid "Test bing.com:" msgid "Test bing.com:"
msgstr "테스트 Bing.com:" msgstr "테스트 Bing.com:"
msgid "Test HTTP"
msgstr "테스트 HTTP"
msgid "Test HTTP Service:"
msgstr "테스트 HTTP 서비스:"
msgid "Test storage"
msgstr "테스트 저장소"
msgid "Test Storage Upload:"
msgstr "테스트 저장소 업로드:"
msgid "Test storage upgrade"
msgstr "테스트 저장소 업그레이드"
msgid "Test Storage Upgrade:"
msgstr "테스트 저장소 업그레이드:"
msgid "Test storage download"
msgstr "테스트 저장소 다운로드"
msgid "Test Storage Download:"
msgstr "테스트 저장소 다운로드:"
msgid "Test plugin download"
msgstr "테스트 플러그인 다운로드"
msgid "Test Plugin Download:"
msgstr "테스트 플러그인 다운로드:"
msgid "Test Storage Upload"
msgstr "테스트 저장소 업로드"
msgid "Log Info" msgid "Log Info"
msgstr "로그 정보" msgstr "로그 정보"
@ -14901,6 +14874,48 @@ msgstr ""
"ABS 등 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 높이" "ABS 등 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 높이"
"면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?" "면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?"
#~ msgid "Studio Version:"
#~ msgstr "스튜디오 버전:"
#~ msgid "Test BambuLab"
#~ msgstr "테스트 뱀부랩"
#~ msgid "Test BambuLab:"
#~ msgstr "테스트 뱀부랩:"
#~ msgid "Test HTTP"
#~ msgstr "테스트 HTTP"
#~ msgid "Test HTTP Service:"
#~ msgstr "테스트 HTTP 서비스:"
#~ msgid "Test storage"
#~ msgstr "테스트 저장소"
#~ msgid "Test Storage Upload:"
#~ msgstr "테스트 저장소 업로드:"
#~ msgid "Test storage upgrade"
#~ msgstr "테스트 저장소 업그레이드"
#~ msgid "Test Storage Upgrade:"
#~ msgstr "테스트 저장소 업그레이드:"
#~ msgid "Test storage download"
#~ msgstr "테스트 저장소 다운로드"
#~ msgid "Test Storage Download:"
#~ msgstr "테스트 저장소 다운로드:"
#~ msgid "Test plugin download"
#~ msgstr "테스트 플러그인 다운로드"
#~ msgid "Test Plugin Download:"
#~ msgstr "테스트 플러그인 다운로드:"
#~ msgid "Test Storage Upload"
#~ msgstr "테스트 저장소 업로드"
#~ msgid "" #~ msgid ""
#~ "The speed setting exceeds the printer's maximum speed " #~ "The speed setting exceeds the printer's maximum speed "
#~ "(machine_max_speed_x/machine_max_speed_y).\n" #~ "(machine_max_speed_x/machine_max_speed_y).\n"

View file

@ -2,7 +2,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-03-16 17:57+0800\n" "POT-Creation-Date: 2024-03-22 19:58+0800\n"
"Language: nl\n" "Language: nl\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@ -6043,6 +6043,9 @@ msgstr "Inlogregio"
msgid "Stealth Mode" msgid "Stealth Mode"
msgstr "" msgstr ""
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only" msgid "Check for stable updates only"
msgstr "" msgstr ""
@ -6099,6 +6102,9 @@ msgstr ""
msgid "If enabled, auto-calculate everytime the color changed." msgid "If enabled, auto-calculate everytime the color changed."
msgstr "" msgstr ""
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)" msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr "" msgstr ""
"Gebruikersvoorinstellingen automatisch synchroniseren (printer/filament/" "Gebruikersvoorinstellingen automatisch synchroniseren (printer/filament/"
@ -13424,7 +13430,7 @@ msgstr ""
msgid "Export Log" msgid "Export Log"
msgstr "" msgstr ""
msgid "Studio Version:" msgid "OrcaSlicer Version:"
msgstr "" msgstr ""
msgid "System Version:" msgid "System Version:"
@ -13433,10 +13439,10 @@ msgstr ""
msgid "DNS Server:" msgid "DNS Server:"
msgstr "" msgstr ""
msgid "Test BambuLab" msgid "Test OrcaSlicer(GitHub)"
msgstr "" msgstr ""
msgid "Test BambuLab:" msgid "Test OrcaSlicer(GitHub):"
msgstr "" msgstr ""
msgid "Test Bing.com" msgid "Test Bing.com"
@ -13445,39 +13451,6 @@ msgstr ""
msgid "Test bing.com:" msgid "Test bing.com:"
msgstr "" msgstr ""
msgid "Test HTTP"
msgstr ""
msgid "Test HTTP Service:"
msgstr ""
msgid "Test storage"
msgstr ""
msgid "Test Storage Upload:"
msgstr ""
msgid "Test storage upgrade"
msgstr ""
msgid "Test Storage Upgrade:"
msgstr ""
msgid "Test storage download"
msgstr ""
msgid "Test Storage Download:"
msgstr ""
msgid "Test plugin download"
msgstr ""
msgid "Test Plugin Download:"
msgstr ""
msgid "Test Storage Upload"
msgstr ""
msgid "Log Info" msgid "Log Info"
msgstr "" msgstr ""

View file

@ -2,7 +2,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-03-16 17:57+0800\n" "POT-Creation-Date: 2024-03-22 19:58+0800\n"
"PO-Revision-Date: \n" "PO-Revision-Date: \n"
"Last-Translator: Krzysztof Morga <tlumaczeniebs@gmail.com>\n" "Last-Translator: Krzysztof Morga <tlumaczeniebs@gmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
@ -6170,6 +6170,9 @@ msgstr "Region Logowania"
msgid "Stealth Mode" msgid "Stealth Mode"
msgstr "Tryb \"Niewidzialny\"" msgstr "Tryb \"Niewidzialny\""
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only" msgid "Check for stable updates only"
msgstr "Sprawdzaj aktualizacje (tylko wersje stabilne)" msgstr "Sprawdzaj aktualizacje (tylko wersje stabilne)"
@ -6229,6 +6232,9 @@ msgid "If enabled, auto-calculate everytime the color changed."
msgstr "" msgstr ""
"Jeśli włączone, automatyczne obliczanie za każdym razem, gdy zmieni się kolor" "Jeśli włączone, automatyczne obliczanie za każdym razem, gdy zmieni się kolor"
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)" msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr "" msgstr ""
"Automatyczna synchronizacja profili użytkownika (Drukarka/Filament/Proces)" "Automatyczna synchronizacja profili użytkownika (Drukarka/Filament/Proces)"
@ -7103,8 +7109,8 @@ msgstr "Ignoruj"
msgid "" msgid ""
"When recording timelapse without toolhead, it is recommended to add a " "When recording timelapse without toolhead, it is recommended to add a "
"\"Timelapse Wipe Tower\" \n" "\"Timelapse Wipe Tower\" \n"
"by right-click the empty position of build plate and choose \"Add " "by right-click the empty position of build plate and choose \"Add Primitive"
"Primitive\"->\"Timelapse Wipe Tower\"." "\"->\"Timelapse Wipe Tower\"."
msgstr "" msgstr ""
"Podczas nagrywania timelapse'a bez głowicy narzędziowej zaleca się dodanie " "Podczas nagrywania timelapse'a bez głowicy narzędziowej zaleca się dodanie "
"\"Timelaps - Wieża Czyszcząca\" \n" "\"Timelaps - Wieża Czyszcząca\" \n"
@ -8944,10 +8950,10 @@ msgid ""
msgstr "" msgstr ""
"Unikaj ruchów nad obrysami-\n" "Unikaj ruchów nad obrysami-\n"
"Maksymalna długość objazdu przy unikaniu przejeżdżania nad obrysami. Jeśli " "Maksymalna długość objazdu przy unikaniu przejeżdżania nad obrysami. Jeśli "
"objazd miałby wykroczyć poza tę wartość, funkcja \"unikaj ruchów nad " "objazd miałby wykroczyć poza tę wartość, funkcja \"unikaj ruchów nad obrysami"
"obrysami\" zostanie zignorowana dla tej ścieżki. Długość objazdu można " "\" zostanie zignorowana dla tej ścieżki. Długość objazdu można zdefiniować "
"zdefiniować jako wartość absolutna lub obliczona procentowo (np. 50%) z " "jako wartość absolutna lub obliczona procentowo (np. 50%) z długości ruchu "
"długości ruchu bezpośredniego." "bezpośredniego."
msgid "mm or %" msgid "mm or %"
msgstr "mm lub %" msgstr "mm lub %"
@ -9507,9 +9513,9 @@ msgid ""
"quality for needle and small details" "quality for needle and small details"
msgstr "" msgstr ""
"Włącz tę opcję, aby zwolnić prędkość druku, aby czas końcowej warstwy nie " "Włącz tę opcję, aby zwolnić prędkość druku, aby czas końcowej warstwy nie "
"był krótszy niż próg czasu warstwy w \"Próg maksymalnej prędkości " "był krótszy niż próg czasu warstwy w \"Próg maksymalnej prędkości wentylatora"
"wentylatora\", tak aby warstwa mogła być chłodzona przez dłuższy czas. Może " "\", tak aby warstwa mogła być chłodzona przez dłuższy czas. Może to poprawić "
"to poprawić jakość chłodzenia dla igieł i małych detali" "jakość chłodzenia dla igieł i małych detali"
msgid "Normal printing" msgid "Normal printing"
msgstr "Normalne drukowanie" msgstr "Normalne drukowanie"
@ -10636,10 +10642,10 @@ msgstr "Pełna prędkość wentylatora na warstwie"
msgid "" msgid ""
"Fan speed will be ramped up linearly from zero at layer " "Fan speed will be ramped up linearly from zero at layer "
"\"close_fan_the_first_x_layers\" to maximum at layer " "\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer"
"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " "\". \"full_fan_speed_layer\" will be ignored if lower than "
"than \"close_fan_the_first_x_layers\", in which case the fan will be running " "\"close_fan_the_first_x_layers\", in which case the fan will be running at "
"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." "maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1."
msgstr "" msgstr ""
"Prędkość wentylatora będzie stopniowo zwiększana liniowo od zera na warstwie " "Prędkość wentylatora będzie stopniowo zwiększana liniowo od zera na warstwie "
"\"close_fan_the_first_x_layers\" do maksymalnej na warstwie " "\"close_fan_the_first_x_layers\" do maksymalnej na warstwie "
@ -12109,8 +12115,8 @@ msgstr ""
"poklatkowy po zakończeniu drukowania. Jeśli wybrany jest tryb \"Wygładź\", " "poklatkowy po zakończeniu drukowania. Jeśli wybrany jest tryb \"Wygładź\", "
"głowica narzędziowa przesunie się nad wieżę po wydrukowaniu każdej warstwy, " "głowica narzędziowa przesunie się nad wieżę po wydrukowaniu każdej warstwy, "
"a następnie zrobi zdjęcie. Ponieważ stopiony filament może wyciekać z dyszy " "a następnie zrobi zdjęcie. Ponieważ stopiony filament może wyciekać z dyszy "
"podczas robienia zdjęcia, wieża czyszcząca jest wymagana w trybie " "podczas robienia zdjęcia, wieża czyszcząca jest wymagana w trybie \"Wygładź"
"\"Wygładź\" do czyszczenia dyszy." "\" do czyszczenia dyszy."
msgid "Traditional" msgid "Traditional"
msgstr "Tradycyjny" msgstr "Tradycyjny"
@ -12190,10 +12196,10 @@ msgid ""
"triangle mesh slicing. The gap closing operation may reduce the final print " "triangle mesh slicing. The gap closing operation may reduce the final print "
"resolution, therefore it is advisable to keep the value reasonably low." "resolution, therefore it is advisable to keep the value reasonably low."
msgstr "" msgstr ""
"Szpary mniejsze niż dwukrotność wartości parametru \"promień zamykania " "Szpary mniejsze niż dwukrotność wartości parametru \"promień zamykania szpar"
"szpar\" zostaną zamknięte przy cięciu. Operacja zamykania szpar może " "\" zostaną zamknięte przy cięciu. Operacja zamykania szpar może zmniejszyć "
"zmniejszyć finalną rozdzielczość wydruku, więc zalecane jest ustawienie tej " "finalną rozdzielczość wydruku, więc zalecane jest ustawienie tej wartości na "
"wartości na rozsądnie niskim poziomie." "rozsądnie niskim poziomie."
msgid "Slicing Mode" msgid "Slicing Mode"
msgstr "Tryb cięcia" msgstr "Tryb cięcia"
@ -14371,8 +14377,8 @@ msgstr "Rozpocznij test jednowątkowy"
msgid "Export Log" msgid "Export Log"
msgstr "Eksportuj log" msgstr "Eksportuj log"
msgid "Studio Version:" msgid "OrcaSlicer Version:"
msgstr "Wersja Studio:" msgstr ""
msgid "System Version:" msgid "System Version:"
msgstr "Wersja systemu:" msgstr "Wersja systemu:"
@ -14380,11 +14386,11 @@ msgstr "Wersja systemu:"
msgid "DNS Server:" msgid "DNS Server:"
msgstr "Serwer DNS:" msgstr "Serwer DNS:"
msgid "Test BambuLab" msgid "Test OrcaSlicer(GitHub)"
msgstr "Test BambuLab" msgstr ""
msgid "Test BambuLab:" msgid "Test OrcaSlicer(GitHub):"
msgstr "Test BambuLab:" msgstr ""
msgid "Test Bing.com" msgid "Test Bing.com"
msgstr "Test Bing.com" msgstr "Test Bing.com"
@ -14392,39 +14398,6 @@ msgstr "Test Bing.com"
msgid "Test bing.com:" msgid "Test bing.com:"
msgstr "Test bing.com:" msgstr "Test bing.com:"
msgid "Test HTTP"
msgstr "Test HTTP"
msgid "Test HTTP Service:"
msgstr "Test usługi HTTP:"
msgid "Test storage"
msgstr "Test pamięci"
msgid "Test Storage Upload:"
msgstr "Test Przesyłu:"
msgid "Test storage upgrade"
msgstr "Test aktualizacji pamięci masowej"
msgid "Test Storage Upgrade:"
msgstr "Test aktualizacji pamięci masowej:"
msgid "Test storage download"
msgstr "Test pamięci dla pobierania"
msgid "Test Storage Download:"
msgstr "Test pamięci dla pobierania:"
msgid "Test plugin download"
msgstr "Test pobierania pluginów"
msgid "Test Plugin Download:"
msgstr "Test pobierania Pluginów:"
msgid "Test Storage Upload"
msgstr "Test załadunku przechowywania"
msgid "Log Info" msgid "Log Info"
msgstr "Informacje o logu" msgstr "Informacje o logu"
@ -14529,8 +14502,8 @@ msgstr ""
"Czy chcesz go zastąpić?" "Czy chcesz go zastąpić?"
msgid "" msgid ""
"We would rename the presets as \"Vendor Type Serial @printer you " "We would rename the presets as \"Vendor Type Serial @printer you selected"
"selected\". \n" "\". \n"
"To add preset for more printers, Please go to printer selection" "To add preset for more printers, Please go to printer selection"
msgstr "" msgstr ""
"Nazwa profilu zostanie zmieniona na \"Producent Typ Rodzaj @nazwa drukarki, " "Nazwa profilu zostanie zmieniona na \"Producent Typ Rodzaj @nazwa drukarki, "
@ -15512,6 +15485,48 @@ msgstr ""
"takimi jak ABS, odpowiednie zwiększenie temperatury podgrzewanej płyty może " "takimi jak ABS, odpowiednie zwiększenie temperatury podgrzewanej płyty może "
"zmniejszyć prawdopodobieństwo odkształceń." "zmniejszyć prawdopodobieństwo odkształceń."
#~ msgid "Studio Version:"
#~ msgstr "Wersja Studio:"
#~ msgid "Test BambuLab"
#~ msgstr "Test BambuLab"
#~ msgid "Test BambuLab:"
#~ msgstr "Test BambuLab:"
#~ msgid "Test HTTP"
#~ msgstr "Test HTTP"
#~ msgid "Test HTTP Service:"
#~ msgstr "Test usługi HTTP:"
#~ msgid "Test storage"
#~ msgstr "Test pamięci"
#~ msgid "Test Storage Upload:"
#~ msgstr "Test Przesyłu:"
#~ msgid "Test storage upgrade"
#~ msgstr "Test aktualizacji pamięci masowej"
#~ msgid "Test Storage Upgrade:"
#~ msgstr "Test aktualizacji pamięci masowej:"
#~ msgid "Test storage download"
#~ msgstr "Test pamięci dla pobierania"
#~ msgid "Test Storage Download:"
#~ msgstr "Test pamięci dla pobierania:"
#~ msgid "Test plugin download"
#~ msgstr "Test pobierania pluginów"
#~ msgid "Test Plugin Download:"
#~ msgstr "Test pobierania Pluginów:"
#~ msgid "Test Storage Upload"
#~ msgstr "Test załadunku przechowywania"
#~ msgid "" #~ msgid ""
#~ "The speed setting exceeds the printer's maximum speed " #~ "The speed setting exceeds the printer's maximum speed "
#~ "(machine_max_speed_x/machine_max_speed_y).\n" #~ "(machine_max_speed_x/machine_max_speed_y).\n"
@ -16355,8 +16370,8 @@ msgstr ""
#~ "Elevation is too low for object. Use the \"Pad around object\" feature to " #~ "Elevation is too low for object. Use the \"Pad around object\" feature to "
#~ "print the object without elevation." #~ "print the object without elevation."
#~ msgstr "" #~ msgstr ""
#~ "Podniesienie zbyt małe dla modelu. Użyj funkcji \"Podkładka wokół " #~ "Podniesienie zbyt małe dla modelu. Użyj funkcji \"Podkładka wokół modelu"
#~ "modelu\", aby wydrukować model bez podniesienia." #~ "\", aby wydrukować model bez podniesienia."
#~ msgid "" #~ msgid ""
#~ "The endings of the support pillars will be deployed on the gap between " #~ "The endings of the support pillars will be deployed on the gap between "

File diff suppressed because it is too large Load diff

View file

@ -2,7 +2,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-03-16 17:57+0800\n" "POT-Creation-Date: 2024-03-22 19:58+0800\n"
"Language: sv\n" "Language: sv\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@ -5975,6 +5975,9 @@ msgstr "Logga in Region"
msgid "Stealth Mode" msgid "Stealth Mode"
msgstr "" msgstr ""
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only" msgid "Check for stable updates only"
msgstr "" msgstr ""
@ -6030,6 +6033,9 @@ msgstr ""
msgid "If enabled, auto-calculate everytime the color changed." msgid "If enabled, auto-calculate everytime the color changed."
msgstr "" msgstr ""
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)" msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr "" msgstr ""
"Automatisk synkronisering av användarens förinställningar (skrivare/filament/" "Automatisk synkronisering av användarens förinställningar (skrivare/filament/"
@ -13236,7 +13242,7 @@ msgstr ""
msgid "Export Log" msgid "Export Log"
msgstr "" msgstr ""
msgid "Studio Version:" msgid "OrcaSlicer Version:"
msgstr "" msgstr ""
msgid "System Version:" msgid "System Version:"
@ -13245,10 +13251,10 @@ msgstr ""
msgid "DNS Server:" msgid "DNS Server:"
msgstr "" msgstr ""
msgid "Test BambuLab" msgid "Test OrcaSlicer(GitHub)"
msgstr "" msgstr ""
msgid "Test BambuLab:" msgid "Test OrcaSlicer(GitHub):"
msgstr "" msgstr ""
msgid "Test Bing.com" msgid "Test Bing.com"
@ -13257,39 +13263,6 @@ msgstr ""
msgid "Test bing.com:" msgid "Test bing.com:"
msgstr "" msgstr ""
msgid "Test HTTP"
msgstr ""
msgid "Test HTTP Service:"
msgstr ""
msgid "Test storage"
msgstr ""
msgid "Test Storage Upload:"
msgstr ""
msgid "Test storage upgrade"
msgstr ""
msgid "Test Storage Upgrade:"
msgstr ""
msgid "Test storage download"
msgstr ""
msgid "Test Storage Download:"
msgstr ""
msgid "Test plugin download"
msgstr ""
msgid "Test Plugin Download:"
msgstr ""
msgid "Test Storage Upload"
msgstr ""
msgid "Log Info" msgid "Log Info"
msgstr "" msgstr ""

View file

@ -6,7 +6,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: OrcaSlicer\n" "Project-Id-Version: OrcaSlicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-03-16 17:57+0800\n" "POT-Creation-Date: 2024-03-22 19:58+0800\n"
"PO-Revision-Date: 2024-03-14 22:00+0300\n" "PO-Revision-Date: 2024-03-14 22:00+0300\n"
"Last-Translator: Olcay ÖREN\n" "Last-Translator: Olcay ÖREN\n"
"Language-Team: Türkçe\n" "Language-Team: Türkçe\n"
@ -6120,6 +6120,9 @@ msgstr "Giriş Bölgesi"
msgid "Stealth Mode" msgid "Stealth Mode"
msgstr "Gizli mod" msgstr "Gizli mod"
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only" msgid "Check for stable updates only"
msgstr "Yalnızca kararlı güncellemeleri kontrol edin" msgstr "Yalnızca kararlı güncellemeleri kontrol edin"
@ -6177,6 +6180,9 @@ msgstr "Hacimleri temizleme: Renk her değiştiğinde otomatik olarak hesapla."
msgid "If enabled, auto-calculate everytime the color changed." msgid "If enabled, auto-calculate everytime the color changed."
msgstr "Etkinleştirilirse, renk her değiştiğinde otomatik hesapla." msgstr "Etkinleştirilirse, renk her değiştiğinde otomatik hesapla."
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)" msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr "Kullanıcı ön ayarları otomatik senkronizasyon (Yazıcı/Filament/İşlem)" msgstr "Kullanıcı ön ayarları otomatik senkronizasyon (Yazıcı/Filament/İşlem)"
@ -14195,8 +14201,8 @@ msgstr "Tek İş Parçacığı Testini Başlat"
msgid "Export Log" msgid "Export Log"
msgstr "Logu Dışa Aktar" msgstr "Logu Dışa Aktar"
msgid "Studio Version:" msgid "OrcaSlicer Version:"
msgstr "Stüdyo Sürümü:" msgstr ""
msgid "System Version:" msgid "System Version:"
msgstr "Sistem Versiyonu:" msgstr "Sistem Versiyonu:"
@ -14204,11 +14210,11 @@ msgstr "Sistem Versiyonu:"
msgid "DNS Server:" msgid "DNS Server:"
msgstr "Dns sunucusu:" msgstr "Dns sunucusu:"
msgid "Test BambuLab" msgid "Test OrcaSlicer(GitHub)"
msgstr "BambuLab'ı test edin" msgstr ""
msgid "Test BambuLab:" msgid "Test OrcaSlicer(GitHub):"
msgstr "BambuLab'ı test edin" msgstr ""
msgid "Test Bing.com" msgid "Test Bing.com"
msgstr "Bing.com'u test edin" msgstr "Bing.com'u test edin"
@ -14216,39 +14222,6 @@ msgstr "Bing.com'u test edin"
msgid "Test bing.com:" msgid "Test bing.com:"
msgstr "Bing.com'u test edin:" msgstr "Bing.com'u test edin:"
msgid "Test HTTP"
msgstr "HTTP'yi test et"
msgid "Test HTTP Service:"
msgstr "HTTP Hizmetini Test Edin:"
msgid "Test storage"
msgstr "Test depolaması"
msgid "Test Storage Upload:"
msgstr "Depolama Yüklemesini Test Et:"
msgid "Test storage upgrade"
msgstr "Depolama yükseltmesini test edin"
msgid "Test Storage Upgrade:"
msgstr "Depolama Yükseltmesini Test Edin:"
msgid "Test storage download"
msgstr "Test depolama indirmesi"
msgid "Test Storage Download:"
msgstr "Test Depolama İndirme:"
msgid "Test plugin download"
msgstr "Test eklentisi indirme"
msgid "Test Plugin Download:"
msgstr "Test Eklentisini İndirin:"
msgid "Test Storage Upload"
msgstr "Depolama Yüklemesini Test Etme"
msgid "Log Info" msgid "Log Info"
msgstr "Günlük Bilgisi" msgstr "Günlük Bilgisi"
@ -15322,6 +15295,48 @@ msgstr ""
"sıcaklığının uygun şekilde arttırılmasının bükülme olasılığını " "sıcaklığının uygun şekilde arttırılmasının bükülme olasılığını "
"azaltabileceğini biliyor muydunuz?" "azaltabileceğini biliyor muydunuz?"
#~ msgid "Studio Version:"
#~ msgstr "Stüdyo Sürümü:"
#~ msgid "Test BambuLab"
#~ msgstr "BambuLab'ı test edin"
#~ msgid "Test BambuLab:"
#~ msgstr "BambuLab'ı test edin"
#~ msgid "Test HTTP"
#~ msgstr "HTTP'yi test et"
#~ msgid "Test HTTP Service:"
#~ msgstr "HTTP Hizmetini Test Edin:"
#~ msgid "Test storage"
#~ msgstr "Test depolaması"
#~ msgid "Test Storage Upload:"
#~ msgstr "Depolama Yüklemesini Test Et:"
#~ msgid "Test storage upgrade"
#~ msgstr "Depolama yükseltmesini test edin"
#~ msgid "Test Storage Upgrade:"
#~ msgstr "Depolama Yükseltmesini Test Edin:"
#~ msgid "Test storage download"
#~ msgstr "Test depolama indirmesi"
#~ msgid "Test Storage Download:"
#~ msgstr "Test Depolama İndirme:"
#~ msgid "Test plugin download"
#~ msgstr "Test eklentisi indirme"
#~ msgid "Test Plugin Download:"
#~ msgstr "Test Eklentisini İndirin:"
#~ msgid "Test Storage Upload"
#~ msgstr "Depolama Yüklemesini Test Etme"
#~ msgid "" #~ msgid ""
#~ "The speed setting exceeds the printer's maximum speed " #~ "The speed setting exceeds the printer's maximum speed "
#~ "(machine_max_speed_x/machine_max_speed_y).\n" #~ "(machine_max_speed_x/machine_max_speed_y).\n"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-03-16 17:57+0800\n" "POT-Creation-Date: 2024-03-22 19:58+0800\n"
"PO-Revision-Date: 2023-08-10 20:25-0400\n" "PO-Revision-Date: 2023-08-10 20:25-0400\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@ -6030,6 +6030,9 @@ msgstr "Регіон входу"
msgid "Stealth Mode" msgid "Stealth Mode"
msgstr "" msgstr ""
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only" msgid "Check for stable updates only"
msgstr "" msgstr ""
@ -6084,6 +6087,9 @@ msgstr ""
msgid "If enabled, auto-calculate everytime the color changed." msgid "If enabled, auto-calculate everytime the color changed."
msgstr "" msgstr ""
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)" msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr "" msgstr ""
"Автоматична синхронізація користувацьких пресетів (принтер/філамент/процес)" "Автоматична синхронізація користувацьких пресетів (принтер/філамент/процес)"
@ -13404,7 +13410,7 @@ msgstr ""
msgid "Export Log" msgid "Export Log"
msgstr "" msgstr ""
msgid "Studio Version:" msgid "OrcaSlicer Version:"
msgstr "" msgstr ""
msgid "System Version:" msgid "System Version:"
@ -13413,10 +13419,10 @@ msgstr ""
msgid "DNS Server:" msgid "DNS Server:"
msgstr "" msgstr ""
msgid "Test BambuLab" msgid "Test OrcaSlicer(GitHub)"
msgstr "" msgstr ""
msgid "Test BambuLab:" msgid "Test OrcaSlicer(GitHub):"
msgstr "" msgstr ""
msgid "Test Bing.com" msgid "Test Bing.com"
@ -13425,39 +13431,6 @@ msgstr ""
msgid "Test bing.com:" msgid "Test bing.com:"
msgstr "" msgstr ""
msgid "Test HTTP"
msgstr ""
msgid "Test HTTP Service:"
msgstr ""
msgid "Test storage"
msgstr ""
msgid "Test Storage Upload:"
msgstr ""
msgid "Test storage upgrade"
msgstr ""
msgid "Test Storage Upgrade:"
msgstr ""
msgid "Test storage download"
msgstr ""
msgid "Test Storage Download:"
msgstr ""
msgid "Test plugin download"
msgstr ""
msgid "Test Plugin Download:"
msgstr ""
msgid "Test Storage Upload"
msgstr ""
msgid "Log Info" msgid "Log Info"
msgstr "" msgstr ""

View file

@ -6,7 +6,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Slic3rPE\n" "Project-Id-Version: Slic3rPE\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-03-16 17:57+0800\n" "POT-Creation-Date: 2024-03-22 19:58+0800\n"
"PO-Revision-Date: 2023-04-01 13:21+0800\n" "PO-Revision-Date: 2023-04-01 13:21+0800\n"
"Last-Translator: SoftFever <softfeverever@gmail.com>\n" "Last-Translator: SoftFever <softfeverever@gmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
@ -4306,22 +4306,22 @@ msgid "Use Orthogonal View"
msgstr "使用正交视角" msgstr "使用正交视角"
msgid "Show &G-code Window" msgid "Show &G-code Window"
msgstr "" msgstr "显示G-code窗口"
msgid "Show g-code window in Previce scene" msgid "Show g-code window in Previce scene"
msgstr "" msgstr "显示G-code窗口"
msgid "Show 3D Navigator" msgid "Show 3D Navigator"
msgstr "" msgstr "显示3D导航器"
msgid "Show 3D navigator in Prepare and Preview scene" msgid "Show 3D navigator in Prepare and Preview scene"
msgstr "" msgstr "显示3D导航器"
msgid "Reset Window Layout" msgid "Reset Window Layout"
msgstr "" msgstr "重置窗口布局"
msgid "Reset to default window layout" msgid "Reset to default window layout"
msgstr "" msgstr "重置为默认窗口布局"
msgid "Show &Labels" msgid "Show &Labels"
msgstr "显示名称" msgstr "显示名称"
@ -5863,8 +5863,11 @@ msgstr "登录区域"
msgid "Stealth Mode" msgid "Stealth Mode"
msgstr "局域网模式" msgstr "局域网模式"
msgid "Enable network plugin"
msgstr "启用网络插件"
msgid "Check for stable updates only" msgid "Check for stable updates only"
msgstr "" msgstr "仅检测正式版的更新"
msgid "Metric" msgid "Metric"
msgstr "公制" msgstr "公制"
@ -5916,6 +5919,9 @@ msgstr "冲刷体积:每一次更换颜色时自动计算。"
msgid "If enabled, auto-calculate everytime the color changed." msgid "If enabled, auto-calculate everytime the color changed."
msgstr "如果启用,会在每一次更换颜色时自动计算。" msgstr "如果启用,会在每一次更换颜色时自动计算。"
msgid "Network"
msgstr "网络"
msgid "Auto sync user presets(Printer/Filament/Process)" msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr "同步用户预设(打印机/耗材丝/工艺)" msgstr "同步用户预设(打印机/耗材丝/工艺)"
@ -10078,10 +10084,10 @@ msgid "Klipper"
msgstr "" msgstr ""
msgid "Support multi bed types" msgid "Support multi bed types"
msgstr "" msgstr "支持多种打印床类型"
msgid "Enable this option if you want to use multiple bed types" msgid "Enable this option if you want to use multiple bed types"
msgstr "" msgstr "如果要使用多种打印床类型,请启用此选项"
msgid "Label objects" msgid "Label objects"
msgstr "标注模型" msgstr "标注模型"
@ -10092,6 +10098,9 @@ msgid ""
"plugin. This settings is NOT compatible with Single Extruder Multi Material " "plugin. This settings is NOT compatible with Single Extruder Multi Material "
"setup and Wipe into Object / Wipe into Infill." "setup and Wipe into Object / Wipe into Infill."
msgstr "" msgstr ""
"启用此选项将在G-code中添加注释标记打印移动属于哪个对象这对Octoprint "
"CancelObject插件非常有用。此设置与单挤出机多材料设置和擦拭到对象/擦拭到填充不"
"兼容。"
msgid "Exclude objects" msgid "Exclude objects"
msgstr "对象排除" msgstr "对象排除"
@ -10107,6 +10116,8 @@ msgid ""
"descriptive text. If you print from SD card, the additional weight of the " "descriptive text. If you print from SD card, the additional weight of the "
"file could make your firmware slow down." "file could make your firmware slow down."
msgstr "" msgstr ""
"启用此选项将获得带有注释的G-code文件每行都有描述性文本解释。如果您从SD卡"
"打印,文件的额外重量可能会使您的固件变慢。"
msgid "Infill combination" msgid "Infill combination"
msgstr "合并填充" msgstr "合并填充"
@ -10215,7 +10226,7 @@ msgstr "熨烫角度"
msgid "" msgid ""
"The angle ironing is done at. A negative number disables this function and " "The angle ironing is done at. A negative number disables this function and "
"uses the default method." "uses the default method."
msgstr "" msgstr "熨烫的角度。设为负值将禁用此功能并使用默认方法。"
msgid "This gcode part is inserted at every layer change after lift z" msgid "This gcode part is inserted at every layer change after lift z"
msgstr "在每次换层抬升Z高度之后插入这段G-code。" msgstr "在每次换层抬升Z高度之后插入这段G-code。"
@ -10238,6 +10249,8 @@ msgid ""
"If enabled, the machine limits will be emitted to G-code file.\n" "If enabled, the machine limits will be emitted to G-code file.\n"
"This option will be ignored if the g-code flavor is set to Klipper." "This option will be ignored if the g-code flavor is set to Klipper."
msgstr "" msgstr ""
"如果启用机器限制将写入到G-code文件。\n"
"如果G-code风格设置为Klipper则此选项将被忽略。"
msgid "" msgid ""
"This G-code will be used as a code for the pause print. User can insert " "This G-code will be used as a code for the pause print. User can insert "
@ -13144,8 +13157,8 @@ msgstr "单线程开始测试"
msgid "Export Log" msgid "Export Log"
msgstr "输出日志" msgstr "输出日志"
msgid "Studio Version:" msgid "OrcaSlicer Version:"
msgstr "Studio 版本:" msgstr "逆戟鲸版本:"
msgid "System Version:" msgid "System Version:"
msgstr "系统版本:" msgstr "系统版本:"
@ -13153,11 +13166,11 @@ msgstr "系统版本:"
msgid "DNS Server:" msgid "DNS Server:"
msgstr "DNS服务" msgstr "DNS服务"
msgid "Test BambuLab" msgid "Test OrcaSlicer(GitHub)"
msgstr "测试 BambuLab" msgstr "测试逆戟鲸项目网站(GitHub)"
msgid "Test BambuLab:" msgid "Test OrcaSlicer(GitHub):"
msgstr "测试 BambuLab" msgstr "测试逆戟鲸项目网站(GitHub)"
msgid "Test Bing.com" msgid "Test Bing.com"
msgstr "测试 Bing.com" msgstr "测试 Bing.com"
@ -13165,39 +13178,6 @@ msgstr "测试 Bing.com"
msgid "Test bing.com:" msgid "Test bing.com:"
msgstr "测试 Bing.com" msgstr "测试 Bing.com"
msgid "Test HTTP"
msgstr "测试 HTTP"
msgid "Test HTTP Service:"
msgstr "测试 HTTP 服务:"
msgid "Test storage"
msgstr "测试存储"
msgid "Test Storage Upload:"
msgstr "测试存储上传:"
msgid "Test storage upgrade"
msgstr "测试存储升级"
msgid "Test Storage Upgrade:"
msgstr "测试存储升级:"
msgid "Test storage download"
msgstr "测试存储下载"
msgid "Test Storage Download:"
msgstr "测试存储下载:"
msgid "Test plugin download"
msgstr "测试插件下载"
msgid "Test Plugin Download:"
msgstr "测试插件下载:"
msgid "Test Storage Upload"
msgstr "测试存储上传"
msgid "Log Info" msgid "Log Info"
msgstr "日志信息" msgstr "日志信息"
@ -14185,6 +14165,48 @@ msgstr ""
"避免翘曲\n" "避免翘曲\n"
"您知道吗打印ABS这类易翘曲材料时适当提高热床温度可以降低翘曲的概率。" "您知道吗打印ABS这类易翘曲材料时适当提高热床温度可以降低翘曲的概率。"
#~ msgid "Studio Version:"
#~ msgstr "Studio 版本:"
#~ msgid "Test BambuLab"
#~ msgstr "测试 BambuLab"
#~ msgid "Test BambuLab:"
#~ msgstr "测试 BambuLab"
#~ msgid "Test HTTP"
#~ msgstr "测试 HTTP"
#~ msgid "Test HTTP Service:"
#~ msgstr "测试 HTTP 服务:"
#~ msgid "Test storage"
#~ msgstr "测试存储"
#~ msgid "Test Storage Upload:"
#~ msgstr "测试存储上传:"
#~ msgid "Test storage upgrade"
#~ msgstr "测试存储升级"
#~ msgid "Test Storage Upgrade:"
#~ msgstr "测试存储升级:"
#~ msgid "Test storage download"
#~ msgstr "测试存储下载"
#~ msgid "Test Storage Download:"
#~ msgstr "测试存储下载:"
#~ msgid "Test plugin download"
#~ msgstr "测试插件下载"
#~ msgid "Test Plugin Download:"
#~ msgstr "测试插件下载:"
#~ msgid "Test Storage Upload"
#~ msgstr "测试存储上传"
#~ msgid "" #~ msgid ""
#~ "The speed setting exceeds the printer's maximum speed " #~ "The speed setting exceeds the printer's maximum speed "
#~ "(machine_max_speed_x/machine_max_speed_y).\n" #~ "(machine_max_speed_x/machine_max_speed_y).\n"

View file

@ -6,7 +6,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Orca Slicer\n" "Project-Id-Version: Orca Slicer\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-03-16 17:57+0800\n" "POT-Creation-Date: 2024-03-22 19:58+0800\n"
"PO-Revision-Date: 2023-11-06 14:37+0800\n" "PO-Revision-Date: 2023-11-06 14:37+0800\n"
"Last-Translator: ablegods <ablegods@gmail.com>\n" "Last-Translator: ablegods <ablegods@gmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
@ -6119,6 +6119,9 @@ msgstr "登入區域"
msgid "Stealth Mode" msgid "Stealth Mode"
msgstr "區域網路模式" msgstr "區域網路模式"
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only" msgid "Check for stable updates only"
msgstr "" msgstr ""
@ -6173,6 +6176,9 @@ msgstr ""
msgid "If enabled, auto-calculate everytime the color changed." msgid "If enabled, auto-calculate everytime the color changed."
msgstr "" msgstr ""
msgid "Network"
msgstr ""
#, fuzzy #, fuzzy
msgid "Auto sync user presets(Printer/Filament/Process)" msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr "同步使用者預設(列印設備/線材/列印品質參數)" msgstr "同步使用者預設(列印設備/線材/列印品質參數)"
@ -13660,7 +13666,7 @@ msgstr ""
msgid "Export Log" msgid "Export Log"
msgstr "" msgstr ""
msgid "Studio Version:" msgid "OrcaSlicer Version:"
msgstr "" msgstr ""
msgid "System Version:" msgid "System Version:"
@ -13669,10 +13675,10 @@ msgstr ""
msgid "DNS Server:" msgid "DNS Server:"
msgstr "" msgstr ""
msgid "Test BambuLab" msgid "Test OrcaSlicer(GitHub)"
msgstr "" msgstr ""
msgid "Test BambuLab:" msgid "Test OrcaSlicer(GitHub):"
msgstr "" msgstr ""
msgid "Test Bing.com" msgid "Test Bing.com"
@ -13681,39 +13687,6 @@ msgstr ""
msgid "Test bing.com:" msgid "Test bing.com:"
msgstr "" msgstr ""
msgid "Test HTTP"
msgstr ""
msgid "Test HTTP Service:"
msgstr ""
msgid "Test storage"
msgstr ""
msgid "Test Storage Upload:"
msgstr ""
msgid "Test storage upgrade"
msgstr ""
msgid "Test Storage Upgrade:"
msgstr ""
msgid "Test storage download"
msgstr ""
msgid "Test Storage Download:"
msgstr ""
msgid "Test plugin download"
msgstr ""
msgid "Test Plugin Download:"
msgstr ""
msgid "Test Storage Upload"
msgstr ""
msgid "Log Info" msgid "Log Info"
msgstr "" msgstr ""

View file

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Before After
Before After

View file

@ -23,6 +23,10 @@
"Creality Ender-3 0.4 nozzle", "Creality Ender-3 0.4 nozzle",
"Creality Ender-3 0.6 nozzle", "Creality Ender-3 0.6 nozzle",
"Creality Ender-3 0.8 nozzle", "Creality Ender-3 0.8 nozzle",
"Creality Ender-3 Pro 0.2 nozzle",
"Creality Ender-3 Pro 0.4 nozzle",
"Creality Ender-3 Pro 0.6 nozzle",
"Creality Ender-3 Pro 0.8 nozzle",
"Creality Ender-3 V2 0.4 nozzle", "Creality Ender-3 V2 0.4 nozzle",
"Creality Ender-3 V2 Neo 0.4 nozzle", "Creality Ender-3 V2 Neo 0.4 nozzle",
"Creality Ender-3 S1 0.4 nozzle", "Creality Ender-3 S1 0.4 nozzle",

View file

@ -24,6 +24,10 @@
"Creality Ender-3 0.4 nozzle", "Creality Ender-3 0.4 nozzle",
"Creality Ender-3 0.6 nozzle", "Creality Ender-3 0.6 nozzle",
"Creality Ender-3 0.8 nozzle", "Creality Ender-3 0.8 nozzle",
"Creality Ender-3 Pro 0.2 nozzle",
"Creality Ender-3 Pro 0.4 nozzle",
"Creality Ender-3 Pro 0.6 nozzle",
"Creality Ender-3 Pro 0.8 nozzle",
"Creality Ender-3 V2 Neo 0.4 nozzle", "Creality Ender-3 V2 Neo 0.4 nozzle",
"Creality Ender-3 S1 0.4 nozzle", "Creality Ender-3 S1 0.4 nozzle",
"Creality Ender-3 S1 Pro 0.4 nozzle", "Creality Ender-3 S1 Pro 0.4 nozzle",

View file

@ -57,6 +57,10 @@
"Creality Ender-3 0.4 nozzle", "Creality Ender-3 0.4 nozzle",
"Creality Ender-3 0.6 nozzle", "Creality Ender-3 0.6 nozzle",
"Creality Ender-3 0.8 nozzle", "Creality Ender-3 0.8 nozzle",
"Creality Ender-3 Pro 0.2 nozzle",
"Creality Ender-3 Pro 0.4 nozzle",
"Creality Ender-3 Pro 0.6 nozzle",
"Creality Ender-3 Pro 0.8 nozzle",
"Creality Ender-3 V2 0.4 nozzle", "Creality Ender-3 V2 0.4 nozzle",
"Creality Ender-3 V2 Neo 0.4 nozzle", "Creality Ender-3 V2 Neo 0.4 nozzle",
"Creality Ender-3 S1 0.4 nozzle", "Creality Ender-3 S1 0.4 nozzle",

View file

@ -33,6 +33,10 @@
"Creality Ender-3 0.4 nozzle", "Creality Ender-3 0.4 nozzle",
"Creality Ender-3 0.6 nozzle", "Creality Ender-3 0.6 nozzle",
"Creality Ender-3 0.8 nozzle", "Creality Ender-3 0.8 nozzle",
"Creality Ender-3 Pro 0.2 nozzle",
"Creality Ender-3 Pro 0.4 nozzle",
"Creality Ender-3 Pro 0.6 nozzle",
"Creality Ender-3 Pro 0.8 nozzle",
"Creality Ender-3 V2 0.4 nozzle", "Creality Ender-3 V2 0.4 nozzle",
"Creality Ender-3 V2 Neo 0.4 nozzle", "Creality Ender-3 V2 Neo 0.4 nozzle",
"Creality Ender-3 S1 0.4 nozzle", "Creality Ender-3 S1 0.4 nozzle",

View file

@ -7,14 +7,14 @@
"inherits": "Creality Generic PLA", "inherits": "Creality Generic PLA",
"filament_max_volumetric_speed": ["18"], "filament_max_volumetric_speed": ["18"],
"slow_down_min_speed": ["20"], "slow_down_min_speed": ["20"],
"cool_plate_temp" : ["45"], "cool_plate_temp" : ["55"],
"eng_plate_temp" : ["45"], "eng_plate_temp" : ["55"],
"hot_plate_temp" : ["45"], "hot_plate_temp" : ["55"],
"textured_plate_temp" : ["45"], "textured_plate_temp" : ["55"],
"cool_plate_temp_initial_layer" : ["45"], "cool_plate_temp_initial_layer" : ["55"],
"eng_plate_temp_initial_layer" : ["45"], "eng_plate_temp_initial_layer" : ["55"],
"hot_plate_temp_initial_layer" : ["45"], "hot_plate_temp_initial_layer" : ["55"],
"textured_plate_temp_initial_layer" : ["45"], "textured_plate_temp_initial_layer" : ["55"],
"compatible_printers": [ "compatible_printers": [
"Creality Ender-3 V3 SE 0.4 nozzle", "Creality Ender-3 V3 SE 0.4 nozzle",
"Creality Ender-3 V3 KE 0.4 nozzle" "Creality Ender-3 V3 KE 0.4 nozzle"

View file

@ -35,6 +35,10 @@
"Creality Ender-3 0.4 nozzle", "Creality Ender-3 0.4 nozzle",
"Creality Ender-3 0.6 nozzle", "Creality Ender-3 0.6 nozzle",
"Creality Ender-3 0.8 nozzle", "Creality Ender-3 0.8 nozzle",
"Creality Ender-3 Pro 0.2 nozzle",
"Creality Ender-3 Pro 0.4 nozzle",
"Creality Ender-3 Pro 0.6 nozzle",
"Creality Ender-3 Pro 0.8 nozzle",
"Creality Ender-3 V2 0.4 nozzle", "Creality Ender-3 V2 0.4 nozzle",
"Creality Ender-3 V2 Neo 0.4 nozzle", "Creality Ender-3 V2 Neo 0.4 nozzle",
"Creality Ender-3 S1 0.4 nozzle", "Creality Ender-3 S1 0.4 nozzle",

View file

@ -24,6 +24,10 @@
"Creality Ender-3 0.4 nozzle", "Creality Ender-3 0.4 nozzle",
"Creality Ender-3 0.6 nozzle", "Creality Ender-3 0.6 nozzle",
"Creality Ender-3 0.8 nozzle", "Creality Ender-3 0.8 nozzle",
"Creality Ender-3 Pro 0.2 nozzle",
"Creality Ender-3 Pro 0.4 nozzle",
"Creality Ender-3 Pro 0.6 nozzle",
"Creality Ender-3 Pro 0.8 nozzle",
"Creality Ender-3 V2 0.4 nozzle", "Creality Ender-3 V2 0.4 nozzle",
"Creality Ender-3 V2 Neo 0.4 nozzle", "Creality Ender-3 V2 Neo 0.4 nozzle",
"Creality Ender-3 S1 0.4 nozzle", "Creality Ender-3 S1 0.4 nozzle",

View file

@ -1,6 +1,6 @@
{ {
"name": "Custom Printer", "name": "Custom Printer",
"version": "02.00.00.00", "version": "02.00.00.01",
"force_update": "0", "force_update": "0",
"description": "My configurations", "description": "My configurations",
"machine_model_list": [ "machine_model_list": [
@ -11,6 +11,10 @@
{ {
"name": "Generic Marlin Printer", "name": "Generic Marlin Printer",
"sub_path": "machine/MyMarlin.json" "sub_path": "machine/MyMarlin.json"
},
{
"name": "Generic RRF Printer",
"sub_path": "machine/MyRRF.json"
} }
], ],
"process_list": [ "process_list": [
@ -22,6 +26,10 @@
"name": "fdm_process_klipper_common", "name": "fdm_process_klipper_common",
"sub_path": "process/fdm_process_klipper_common.json" "sub_path": "process/fdm_process_klipper_common.json"
}, },
{
"name": "fdm_process_rrf_common",
"sub_path": "process/fdm_process_rrf_common.json"
},
{ {
"name": "fdm_process_marlin_common", "name": "fdm_process_marlin_common",
"sub_path": "process/fdm_process_marlin_common.json" "sub_path": "process/fdm_process_marlin_common.json"
@ -50,6 +58,30 @@
"name": "0.28mm Extra Draft @MyKlipper", "name": "0.28mm Extra Draft @MyKlipper",
"sub_path": "process/0.28mm Extra Draft @MyKlipper.json" "sub_path": "process/0.28mm Extra Draft @MyKlipper.json"
}, },
{
"name": "0.08mm Extra Fine @MyRRF",
"sub_path": "process/0.08mm Extra Fine @MyRRF.json"
},
{
"name": "0.12mm Fine @MyRRF",
"sub_path": "process/0.12mm Fine @MyRRF.json"
},
{
"name": "0.15mm Optimal @MyRRF",
"sub_path": "process/0.15mm Optimal @MyRRF.json"
},
{
"name": "0.20mm Standard @MyRRF",
"sub_path": "process/0.20mm Standard @MyRRF.json"
},
{
"name": "0.24mm Draft @MyRRF",
"sub_path": "process/0.24mm Draft @MyRRF.json"
},
{
"name": "0.28mm Extra Draft @MyRRF",
"sub_path": "process/0.28mm Extra Draft @MyRRF.json"
},
{ {
"name": "0.08mm Extra Fine @MyMarlin", "name": "0.08mm Extra Fine @MyMarlin",
"sub_path": "process/0.08mm Extra Fine @MyMarlin.json" "sub_path": "process/0.08mm Extra Fine @MyMarlin.json"
@ -162,6 +194,10 @@
"name": "fdm_klipper_common", "name": "fdm_klipper_common",
"sub_path": "machine/fdm_klipper_common.json" "sub_path": "machine/fdm_klipper_common.json"
}, },
{
"name": "fdm_rrf_common",
"sub_path": "machine/fdm_rrf_common.json"
},
{ {
"name": "MyKlipper 0.4 nozzle", "name": "MyKlipper 0.4 nozzle",
"sub_path": "machine/MyKlipper 0.4 nozzle.json" "sub_path": "machine/MyKlipper 0.4 nozzle.json"
@ -169,6 +205,10 @@
{ {
"name": "MyMarlin 0.4 nozzle", "name": "MyMarlin 0.4 nozzle",
"sub_path": "machine/MyMarlin 0.4 nozzle.json" "sub_path": "machine/MyMarlin 0.4 nozzle.json"
},
{
"name": "MyRRF 0.4 nozzle",
"sub_path": "machine/MyRRF 0.4 nozzle.json"
} }
] ]
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

View file

@ -14,6 +14,7 @@
], ],
"compatible_printers": [ "compatible_printers": [
"MyKlipper 0.4 nozzle", "MyKlipper 0.4 nozzle",
"MyMarlin 0.4 nozzle" "MyMarlin 0.4 nozzle",
"MyRRF 0.4 nozzle"
] ]
} }

View file

@ -14,6 +14,7 @@
], ],
"compatible_printers": [ "compatible_printers": [
"MyKlipper 0.4 nozzle", "MyKlipper 0.4 nozzle",
"MyMarlin 0.4 nozzle" "MyMarlin 0.4 nozzle",
"MyRRF 0.4 nozzle"
] ]
} }

View file

@ -18,8 +18,9 @@
"filament_max_volumetric_speed": [ "filament_max_volumetric_speed": [
"8" "8"
], ],
"compatible_printers": [ "compatible_printers": [
"MyKlipper 0.4 nozzle", "MyKlipper 0.4 nozzle",
"MyMarlin 0.4 nozzle" "MyMarlin 0.4 nozzle",
"MyRRF 0.4 nozzle"
] ]
} }

View file

@ -15,8 +15,9 @@
"filament_max_volumetric_speed": [ "filament_max_volumetric_speed": [
"12" "12"
], ],
"compatible_printers": [ "compatible_printers": [
"MyKlipper 0.4 nozzle", "MyKlipper 0.4 nozzle",
"MyMarlin 0.4 nozzle" "MyMarlin 0.4 nozzle",
"MyRRF 0.4 nozzle"
] ]
} }

View file

@ -14,6 +14,7 @@
], ],
"compatible_printers": [ "compatible_printers": [
"MyKlipper 0.4 nozzle", "MyKlipper 0.4 nozzle",
"MyMarlin 0.4 nozzle" "MyMarlin 0.4 nozzle",
"MyRRF 0.4 nozzle"
] ]
} }

View file

@ -44,6 +44,7 @@
], ],
"compatible_printers": [ "compatible_printers": [
"MyKlipper 0.4 nozzle", "MyKlipper 0.4 nozzle",
"MyMarlin 0.4 nozzle" "MyMarlin 0.4 nozzle",
"MyRRF 0.4 nozzle"
] ]
} }

View file

@ -20,6 +20,7 @@
], ],
"compatible_printers": [ "compatible_printers": [
"MyKlipper 0.4 nozzle", "MyKlipper 0.4 nozzle",
"MyMarlin 0.4 nozzle" "MyMarlin 0.4 nozzle",
"MyRRF 0.4 nozzle"
] ]
} }

View file

@ -17,6 +17,7 @@
], ],
"compatible_printers": [ "compatible_printers": [
"MyKlipper 0.4 nozzle", "MyKlipper 0.4 nozzle",
"MyMarlin 0.4 nozzle" "MyMarlin 0.4 nozzle",
"MyRRF 0.4 nozzle"
] ]
} }

View file

@ -20,6 +20,7 @@
], ],
"compatible_printers": [ "compatible_printers": [
"MyKlipper 0.4 nozzle", "MyKlipper 0.4 nozzle",
"MyMarlin 0.4 nozzle" "MyMarlin 0.4 nozzle",
"MyRRF 0.4 nozzle"
] ]
} }

View file

@ -11,6 +11,7 @@
], ],
"compatible_printers": [ "compatible_printers": [
"MyKlipper 0.4 nozzle", "MyKlipper 0.4 nozzle",
"MyMarlin 0.4 nozzle" "MyMarlin 0.4 nozzle",
"MyRRF 0.4 nozzle"
] ]
} }

View file

@ -6,7 +6,7 @@
"machine_tech": "FFF", "machine_tech": "FFF",
"family": "MyPrinter", "family": "MyPrinter",
"bed_model": "", "bed_model": "",
"bed_texture": "", "bed_texture": "orcaslicer_bed_texture.svg",
"hotend_model": "", "hotend_model": "",
"default_materials": "My Generic ABS;My Generic PLA;My Generic PLA-CF;My Generic PETG;My Generic TPU;My Generic ASA;My Generic PC;My Generic PVA;My Generic PA;My Generic PA-CF" "default_materials": "My Generic ABS;My Generic PLA;My Generic PLA-CF;My Generic PETG;My Generic TPU;My Generic ASA;My Generic PC;My Generic PVA;My Generic PA;My Generic PA-CF"
} }

View file

@ -6,7 +6,7 @@
"machine_tech": "FFF", "machine_tech": "FFF",
"family": "MyPrinter", "family": "MyPrinter",
"bed_model": "", "bed_model": "",
"bed_texture": "", "bed_texture": "orcaslicer_bed_texture.svg",
"hotend_model": "", "hotend_model": "",
"default_materials": "My Generic ABS;My Generic PLA;My Generic PLA-CF;My Generic PETG;My Generic TPU;My Generic ASA;My Generic PC;My Generic PVA;My Generic PA;My Generic PA-CF" "default_materials": "My Generic ABS;My Generic PLA;My Generic PLA-CF;My Generic PETG;My Generic TPU;My Generic ASA;My Generic PC;My Generic PVA;My Generic PA;My Generic PA-CF"
} }

View file

@ -0,0 +1,19 @@
{
"type": "machine",
"setting_id": "GM003",
"name": "MyRRF 0.4 nozzle",
"from": "system",
"instantiation": "true",
"inherits": "fdm_rrf_common",
"printer_model": "Generic RRF Printer",
"nozzle_diameter": [
"0.4"
],
"printable_area": [
"0x0",
"250x0",
"250x250",
"0x250"
],
"printable_height": "250"
}

View file

@ -0,0 +1,12 @@
{
"type": "machine_model",
"name": "Generic RRF Printer",
"model_id": "my_rrf_01",
"nozzle_diameter": "0.4",
"machine_tech": "FFF",
"family": "MyPrinter",
"bed_model": "",
"bed_texture": "orcaslicer_bed_texture.svg",
"hotend_model": "",
"default_materials": "My Generic ABS;My Generic PLA;My Generic PLA-CF;My Generic PETG;My Generic TPU;My Generic ASA;My Generic PC;My Generic PVA;My Generic PA;My Generic PA-CF"
}

View file

@ -0,0 +1,141 @@
{
"type": "machine",
"name": "fdm_rrf_common",
"from": "system",
"instantiation": "false",
"inherits": "fdm_machine_common",
"gcode_flavor": "reprapfirmware",
"machine_max_acceleration_e": [
"5000",
"5000"
],
"machine_max_acceleration_extruding": [
"20000",
"20000"
],
"machine_max_acceleration_retracting": [
"5000",
"5000"
],
"machine_max_acceleration_travel": [
"20000",
"20000"
],
"machine_max_acceleration_x": [
"20000",
"20000"
],
"machine_max_acceleration_y": [
"20000",
"20000"
],
"machine_max_acceleration_z": [
"500",
"200"
],
"machine_max_speed_e": [
"25",
"25"
],
"machine_max_speed_x": [
"500",
"200"
],
"machine_max_speed_y": [
"500",
"200"
],
"machine_max_speed_z": [
"12",
"12"
],
"machine_max_jerk_e": [
"2.5",
"2.5"
],
"machine_max_jerk_x": [
"9",
"9"
],
"machine_max_jerk_y": [
"9",
"9"
],
"machine_max_jerk_z": [
"0.2",
"0.4"
],
"machine_min_extruding_rate": [
"0",
"0"
],
"machine_min_travel_rate": [
"0",
"0"
],
"max_layer_height": [
"0.32"
],
"min_layer_height": [
"0.08"
],
"printable_height": "250",
"extruder_clearance_radius": "65",
"extruder_clearance_height_to_rod": "36",
"extruder_clearance_height_to_lid": "140",
"printer_settings_id": "",
"printer_technology": "FFF",
"printer_variant": "0.4",
"retraction_minimum_travel": [
"1"
],
"retract_before_wipe": [
"70%"
],
"retract_when_changing_layer": [
"1"
],
"retraction_length": [
"0.8"
],
"retract_length_toolchange": [
"2"
],
"z_hop": [
"0.4"
],
"retract_restart_extra": [
"0"
],
"retract_restart_extra_toolchange": [
"0"
],
"retraction_speed": [
"30"
],
"deretraction_speed": [
"30"
],
"z_hop_types": "Normal Lift",
"silent_mode": "0",
"single_extruder_multi_material": "1",
"change_filament_gcode": "",
"wipe": [
"1"
],
"default_filament_profile": [
"My Generic ABS"
],
"default_print_profile": "0.20mm Standard @MyRRF",
"bed_exclude_area": [
"0x0"
],
"scan_first_layer": "0",
"nozzle_type": "undefine",
"auxiliary_fan": "0",
"machine_start_gcode": "; Prime Filament Sensor for Runout\nM581 P1 T2 S-1 R0\nM950 J1 C\"nil\" ; Input 1 e0 Filament Sensor \nM591 D0 P2 C\"e0stop\" S1 ; Filament Runout Sensor\n\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 S140 ; Set extruder temp 140C before bed level\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\n;G28 W\nG32 ; Levels Z Tilt and probes Z=0\nG29 S0 ; mesh bed leveling\nG1 X0 Y0 Z2 F2000\nM109 S[first_layer_temperature] ; wait for extruder temp\n\nG1 X10 Y-7 Z0.3 F1000.0 ; go outside print area\nG92 E0.0\nG1 Z0.2 E8 ; Purge Bubble\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0",
"machine_end_gcode": "{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nG1 X0 Y200 F3600 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+49, max_print_height)} F720 ; Move print head further up{endif}\nM221 S100 ; reset flow\nM900 K0 ; reset LA\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM84 ; disable motors",
"layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]",
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n",
"machine_pause_gcode": "M601"
}

View file

@ -0,0 +1,148 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="512"
height="512"
viewBox="0 0 512 512"
fill="none"
version="1.1"
id="svg526"
sodipodi:docname="OrcaSlicer_about.svg"
inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
inkscape:export-filename="OrcaSlicer_about.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs530">
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath16">
<path
d="M 0,792 H 612 V 0 H 0 Z"
id="path14" />
</clipPath>
</defs>
<sodipodi:namedview
id="namedview528"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="12.179348"
inkscape:cx="278.75055"
inkscape:cy="104.93173"
inkscape:window-width="3440"
inkscape:window-height="1369"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg526" />
<g
id="g10"
transform="matrix(0.07369611,0,0,-0.07369611,345.22738,480.7198)"
style="display:inline">
<g
id="g12"
clip-path="url(#clipPath16)">
<g
id="g18"
transform="translate(59.7287,115.3517)">
<path
d="m 0,0 c 53.332,-53.285 126.698,-86.317 207.744,-86.646 164.049,-0.664 298.355,134.38 297.699,299.337 -0.324,81.496 -33.176,155.271 -86.17,208.899 z"
style="fill:#292826;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path20" />
</g>
<g
id="g22"
transform="translate(479.0017,536.9419)">
<path
d="m 0,0 -419.273,-421.59 c 0.298,-0.298 0.606,-0.587 0.906,-0.884 146.894,74.925 348.023,206.579 486.003,316.297 C 52.756,-65.97 29.506,-29.859 0,0"
style="fill:#009789;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path24" />
</g>
<g
id="g26"
transform="translate(397.0372,747)">
<path
d="m 0,0 c -163.742,0 -296.482,-133.473 -296.482,-298.121 0,-81.979 32.915,-156.223 86.172,-210.117 l 419.273,421.59 C 155.364,-33.096 81.529,0 0,0"
style="fill:#292826;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path28" />
</g>
<g
id="g30"
transform="translate(397.0372,747)">
<path
d="m 0,0 c -56.714,0 -109.702,-16.022 -154.751,-43.796 -24.127,6.312 -54.061,11.37 -88.437,11.157 -59.938,-0.372 -108.713,-16.603 -141.822,-31.784 -8.218,-3.768 -6.898,-15.967 1.941,-17.829 21.801,-4.593 50.498,-14.324 78.883,-35.28 17.931,-13.238 31.574,-27.883 41.856,-41.597 -21.794,-41.504 -34.152,-88.793 -34.152,-138.992 0,-29.952 4.412,-58.865 12.586,-86.137 12.54,27.79 25.699,46.391 29.916,52.184 27.229,37.41 56.015,56.883 98.542,85.651 31.328,21.193 74.856,46.047 199.916,97.449 0,0 39.121,11.017 91.587,42.212 20.912,12.433 36.823,24.17 41.863,42.526 0.355,1.293 0.677,2.57 0.973,3.83 C 129.175,-22.506 67.208,0 0,0"
style="fill:#262523;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path32" />
</g>
<g
id="g34"
transform="translate(446.5563,646.8041)">
<path
d="m 0,0 c 10.875,-19.229 -10.891,-52.305 -48.616,-73.879 -37.725,-21.573 -77.124,-23.474 -88,-4.245 -10.875,19.229 10.891,52.305 48.617,73.879 C -50.274,17.328 -10.875,19.229 0,0"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path36" />
</g>
</g>
</g>
<g
aria-label="Orca"
id="text835"
style="font-size:31.8474px;fill:#f9f9f9;fill-opacity:0.8;fill-rule:evenodd;stroke:#1a1a1a;stroke-width:1.19308"
transform="translate(160.2713,346.81659)">
<path
d="m 246.33548,105.05624 q -3.12104,0 -5.47775,-0.95542 -2.32486,-0.95542 -3.6943,-2.86626 -1.33759,-1.942695 -1.46498,-4.777114 -0.0319,-1.305744 -0.0319,-2.770724 0,-1.46498 0.0319,-2.834419 0.12739,-2.802571 1.46498,-4.745262 1.33759,-1.942692 3.6943,-2.961809 2.35671,-1.019116 5.47775,-1.019116 3.12105,0 5.47775,1.019116 2.35671,1.019117 3.6943,2.961809 1.36944,1.942691 1.46498,4.745262 0.0637,1.369439 0.0637,2.834419 0,1.46498 -0.0637,2.770724 -0.12739,2.834419 -1.49683,4.777114 -1.33759,1.91084 -3.69429,2.86626 -2.32486,0.95542 -5.44591,0.95542 z m 0,-6.210239 q 1.05096,0 1.68791,-0.605101 0.63695,-0.636948 0.6688,-1.974538 0.0637,-1.369439 0.0637,-2.70703 0,-1.33759 -0.0637,-2.643334 -0.0319,-0.891727 -0.35032,-1.46498 -0.28663,-0.573253 -0.79619,-0.828033 -0.50956,-0.286626 -1.2102,-0.286626 -0.66879,0 -1.2102,0.286626 -0.50956,0.25478 -0.82803,0.828033 -0.28663,0.573253 -0.31848,1.46498 -0.0318,1.305744 -0.0318,2.643334 0,1.337591 0.0318,2.70703 0.0637,1.33759 0.6688,1.974538 0.63695,0.605101 1.68791,0.605101 z"
style="font-weight:900;font-family:Rubik;-inkscape-font-specification:'Rubik Heavy';text-align:center;text-anchor:middle"
id="path926" />
<path
d="m 260.4439,104.73777 q -0.35032,0 -0.6051,-0.25478 -0.25478,-0.25478 -0.25478,-0.6051 V 89.037002 q 0,-0.350322 0.25478,-0.605101 0.25478,-0.254779 0.6051,-0.254779 h 5.57329 q 0.35032,0 0.6051,0.254779 0.25478,0.254779 0.25478,0.605101 v 1.114659 q 1.01912,-0.891728 2.26117,-1.433133 1.27389,-0.541406 2.70703,-0.541406 h 1.52867 q 0.35032,0 0.6051,0.254779 0.25478,0.254779 0.25478,0.605101 v 4.968194 q 0,0.350321 -0.25478,0.605101 -0.25478,0.254779 -0.6051,0.254779 h -4.10831 q -0.95542,0 -1.43313,0.477711 -0.47772,0.477711 -0.47772,1.433133 v 7.10197 q 0,0.35032 -0.25477,0.6051 -0.25478,0.25478 -0.60511,0.25478 z"
style="font-weight:900;font-family:Rubik;-inkscape-font-specification:'Rubik Heavy';text-align:center;text-anchor:middle"
id="path928" />
<path
d="m 284.52052,105.05624 q -2.4204,0 -4.39494,-0.82803 -1.97454,-0.85988 -3.18474,-2.4841 -1.2102,-1.62421 -1.33759,-3.980921 -0.0319,-0.509558 -0.0319,-1.273896 0,-0.764337 0.0319,-1.305743 0.12739,-2.356708 1.30574,-3.980925 1.2102,-1.656065 3.18474,-2.484097 2.00639,-0.85988 4.42679,-0.85988 2.51595,0 4.26755,0.73249 1.78346,0.700643 2.86627,1.751607 1.11466,1.019117 1.62422,2.038234 0.5414,1.019116 0.57325,1.656064 0.0319,0.350322 -0.25478,0.605101 -0.25478,0.254779 -0.6051,0.254779 h -6.21024 q -0.35033,0 -0.57326,-0.159237 -0.19108,-0.191084 -0.35032,-0.477711 -0.22293,-0.445863 -0.47771,-0.700643 -0.22293,-0.254779 -0.70064,-0.254779 -0.73249,0 -0.98727,0.541406 -0.25478,0.541406 -0.28663,1.496828 -0.0319,1.369438 0,2.261165 0.0637,1.019117 0.28663,1.528676 0.25478,0.477711 0.98727,0.477711 0.57325,0 0.76434,-0.25478 0.22293,-0.254779 0.41401,-0.700642 0.12739,-0.286627 0.35032,-0.445864 0.22293,-0.191084 0.57326,-0.191084 h 6.21024 q 0.35032,0 0.6051,0.254779 0.28663,0.254779 0.25478,0.6051 -0.0319,0.414017 -0.35032,1.178352 -0.28663,0.73249 -0.95542,1.59237 -0.63695,0.85988 -1.71976,1.65607 -1.08282,0.76433 -2.64334,1.27389 -1.56052,0.47771 -3.66245,0.47771 z"
style="font-weight:900;font-family:Rubik;-inkscape-font-specification:'Rubik Heavy';text-align:center;text-anchor:middle"
id="path930" />
<path
d="m 301.1767,105.05624 q -1.8153,0 -3.21659,-0.66879 -1.40128,-0.6688 -2.19747,-1.8153 -0.76433,-1.14651 -0.76433,-2.579643 0,-2.32486 1.87899,-3.630603 1.91085,-1.337591 5.09559,-1.878997 l 3.37582,-0.541406 v -0.03185 q 0,-0.828033 -0.15924,-1.210201 -0.12738,-0.382169 -0.79618,-0.382169 -0.44586,0 -0.73249,0.191084 -0.25478,0.159237 -0.57325,0.477711 -0.35033,0.350322 -0.89173,0.350322 h -5.41406 q -0.31847,0 -0.5414,-0.191085 -0.19109,-0.191084 -0.15924,-0.509558 0.0319,-0.605101 0.50956,-1.401286 0.47771,-0.828032 1.46498,-1.59237 1.01911,-0.764337 2.57964,-1.273896 1.59237,-0.509558 3.82168,-0.509558 2.16563,0 3.758,0.477711 1.62422,0.445863 2.67518,1.337591 1.05096,0.859879 1.56052,2.165623 0.54141,1.273896 0.54141,2.898113 v 9.140207 q 0,0.35032 -0.25478,0.6051 -0.25478,0.25478 -0.6051,0.25478 h -5.5733 q -0.35032,0 -0.6051,-0.25478 -0.25478,-0.25478 -0.25478,-0.6051 v -0.89173 q -0.44586,0.63695 -1.1465,1.11466 -0.6688,0.44587 -1.52868,0.70064 -0.85988,0.25478 -1.84715,0.25478 z m 2.19747,-4.71341 q 0.63695,0 1.08281,-0.25478 0.47772,-0.25478 0.73249,-0.796185 0.25478,-0.573254 0.25478,-1.401286 v -0.03185 l -1.87899,0.414016 q -0.82804,0.191084 -1.11466,0.509558 -0.28663,0.318474 -0.28663,0.668796 0,0.222931 0.12739,0.445863 0.15924,0.191088 0.41402,0.318478 0.28662,0.12739 0.66879,0.12739 z"
style="font-weight:900;font-family:Rubik;-inkscape-font-specification:'Rubik Heavy';text-align:center;text-anchor:middle"
id="path932" />
</g>
<g
aria-label="Slicer"
id="text1443"
style="font-size:22.8809px;text-align:center;text-anchor:middle;fill:#f9f9f9;fill-opacity:0.8;stroke:#1a1a1a;stroke-width:0.857176"
transform="translate(160.2713,346.81659)">
<path
d="m 244.8391,127.60037 q -2.53978,0 -4.18721,-0.68643 -1.64742,-0.68643 -2.47113,-1.80759 -0.82372,-1.12116 -0.86948,-2.37961 0,-0.20593 0.13729,-0.34322 0.16016,-0.16016 0.36609,-0.16016 h 4.34737 q 0.3661,0 0.54914,0.1144 0.20593,0.0915 0.43474,0.27457 0.22881,0.16017 0.45762,0.29745 0.25169,0.11441 0.54914,0.18305 0.32033,0.0458 0.68643,0.0458 0.77795,0 1.23557,-0.16016 0.48049,-0.18305 0.48049,-0.4805 0,-0.27457 -0.27457,-0.45762 -0.25169,-0.18305 -0.89235,-0.32033 -0.64067,-0.16017 -1.78471,-0.29745 -1.80759,-0.25169 -3.13468,-0.8466 -1.3271,-0.5949 -2.05929,-1.62454 -0.7093,-1.05252 -0.7093,-2.56266 0,-1.5559 0.86947,-2.74571 0.89236,-1.18981 2.44826,-1.85335 1.57878,-0.66355 3.66094,-0.66355 1.71607,0 3.04316,0.45762 1.32709,0.43474 2.24233,1.16692 0.91523,0.70931 1.39573,1.53302 0.4805,0.82372 0.50338,1.57879 0,0.20592 -0.16016,0.36609 -0.13729,0.13729 -0.32034,0.13729 h -4.57618 q -0.32033,0 -0.52626,-0.0915 -0.18304,-0.0915 -0.38897,-0.27457 -0.11441,-0.1144 -0.43474,-0.25169 -0.29745,-0.16016 -0.77795,-0.16016 -0.57202,0 -0.84659,0.18304 -0.25169,0.16017 -0.25169,0.45762 0,0.20593 0.20593,0.38898 0.20592,0.18304 0.75507,0.32033 0.54914,0.13728 1.57878,0.27457 2.28809,0.27457 3.66094,0.89235 1.39574,0.59491 2.01352,1.60167 0.64067,1.00676 0.64067,2.49402 0,1.6703 -1.00676,2.88299 -0.98388,1.21269 -2.69995,1.87623 -1.71607,0.64067 -3.88975,0.64067 z"
style="font-weight:900;font-family:Rubik;-inkscape-font-specification:'Rubik Heavy'"
id="path935" />
<path
d="m 254.49485,127.37156 q -0.25169,0 -0.43474,-0.18305 -0.18305,-0.18305 -0.18305,-0.43474 V 111.7439 q 0,-0.25169 0.18305,-0.43473 0.18305,-0.18305 0.43474,-0.18305 h 4.09568 q 0.25169,0 0.43474,0.18305 0.18304,0.18304 0.18304,0.43473 v 15.00987 q 0,0.25169 -0.18304,0.43474 -0.18305,0.18305 -0.43474,0.18305 z"
style="font-weight:900;font-family:Rubik;-inkscape-font-specification:'Rubik Heavy'"
id="path937" />
<path
d="m 263.12097,127.37156 q -0.25169,0 -0.43474,-0.18305 -0.18305,-0.18305 -0.18305,-0.43474 v -10.66249 q 0,-0.25169 0.18305,-0.43474 0.18305,-0.18305 0.43474,-0.18305 h 4.09568 q 0.25169,0 0.43473,0.18305 0.18305,0.18305 0.18305,0.43474 v 10.66249 q 0,0.25169 -0.18305,0.43474 -0.18304,0.18305 -0.43473,0.18305 z m 0.1144,-13.15652 q -0.25169,0 -0.43474,-0.18305 -0.18304,-0.18304 -0.18304,-0.43473 v -2.76859 q 0,-0.25169 0.18304,-0.43474 0.18305,-0.18305 0.43474,-0.18305 h 3.86687 q 0.25169,0 0.43474,0.18305 0.18305,0.18305 0.18305,0.43474 v 2.76859 q 0,0.25169 -0.18305,0.43473 -0.18305,0.18305 -0.43474,0.18305 z"
style="font-weight:900;font-family:Rubik;-inkscape-font-specification:'Rubik Heavy'"
id="path939" />
<path
d="m 276.14018,127.60037 q -1.73895,0 -3.15756,-0.59491 -1.41862,-0.61778 -2.28809,-1.78471 -0.86948,-1.16692 -0.961,-2.86011 -0.0229,-0.36609 -0.0229,-0.91523 0,-0.54915 0.0229,-0.93812 0.0915,-1.69319 0.93812,-2.86011 0.86947,-1.18981 2.28809,-1.78471 1.44149,-0.61779 3.18044,-0.61779 1.80759,0 3.06604,0.52626 1.28133,0.50338 2.05928,1.25845 0.80084,0.73219 1.16693,1.46438 0.38897,0.73219 0.41186,1.18981 0.0229,0.25169 -0.18305,0.43473 -0.18305,0.18305 -0.43474,0.18305 h -4.46177 q -0.25169,0 -0.41186,-0.1144 -0.13729,-0.13729 -0.25169,-0.34322 -0.16017,-0.32033 -0.34321,-0.50338 -0.16017,-0.18304 -0.50338,-0.18304 -0.52626,0 -0.70931,0.38897 -0.18305,0.38898 -0.20593,1.0754 -0.0229,0.98388 0,1.62455 0.0458,0.73219 0.20593,1.09828 0.18305,0.34321 0.70931,0.34321 0.41185,0 0.54914,-0.18304 0.16016,-0.18305 0.29745,-0.50338 0.0915,-0.20593 0.25169,-0.32034 0.16017,-0.13728 0.41186,-0.13728 h 4.46177 q 0.25169,0 0.43474,0.18305 0.20593,0.18304 0.18305,0.43473 -0.0229,0.29746 -0.25169,0.8466 -0.20593,0.52626 -0.68643,1.14404 -0.45762,0.61779 -1.23557,1.18981 -0.77795,0.54914 -1.89911,0.91523 -1.12117,0.34322 -2.63131,0.34322 z"
style="font-weight:900;font-family:Rubik;-inkscape-font-specification:'Rubik Heavy'"
id="path941" />
<path
d="m 290.46362,127.60037 q -2.9974,0 -4.78211,-1.46438 -1.76183,-1.48726 -1.76183,-4.69058 0,-0.0458 0,-0.0915 0,-0.0458 0,-0.0686 0.0458,-1.96776 0.8466,-3.31773 0.82371,-1.34997 2.26521,-2.0364 1.46437,-0.68643 3.40925,-0.68643 2.24233,0 3.68382,0.86948 1.4415,0.84659 2.12793,2.26521 0.70931,1.39573 0.70931,3.08892 v 0.68642 q 0,0.25169 -0.18305,0.43474 -0.18305,0.18305 -0.43474,0.18305 h -6.81851 q 0,0.0229 0,0.0458 0,0.0229 0,0.0686 0,0.45762 0.0686,0.77795 0.0915,0.29746 0.29745,0.45762 0.20593,0.16017 0.52626,0.16017 0.13728,0 0.22881,-0.0458 0.1144,-0.0458 0.20593,-0.13729 0.1144,-0.1144 0.2288,-0.22881 0.20593,-0.20593 0.34322,-0.25169 0.13728,-0.0686 0.41185,-0.0686 h 4.32449 q 0.22881,0 0.3661,0.13728 0.16016,0.13729 0.13728,0.3661 -0.0229,0.43474 -0.41185,1.05252 -0.3661,0.5949 -1.12117,1.16693 -0.75507,0.57202 -1.92199,0.96099 -1.16693,0.3661 -2.74571,0.3661 z m -0.93812,-7.68798 h 1.83048 v -0.0229 q 0,-0.50338 -0.11441,-0.82372 -0.0915,-0.32033 -0.29745,-0.45762 -0.20593,-0.16016 -0.50338,-0.16016 -0.29745,0 -0.50338,0.16016 -0.20593,0.13729 -0.32033,0.45762 -0.0915,0.32034 -0.0915,0.82372 z"
style="font-weight:900;font-family:Rubik;-inkscape-font-specification:'Rubik Heavy'"
id="path943" />
<path
d="m 299.18123,127.37156 q -0.25169,0 -0.43474,-0.18305 -0.18305,-0.18305 -0.18305,-0.43474 v -10.66249 q 0,-0.25169 0.18305,-0.43474 0.18305,-0.18305 0.43474,-0.18305 h 4.00415 q 0.25169,0 0.43474,0.18305 0.18305,0.18305 0.18305,0.43474 v 0.80083 q 0.73219,-0.64067 1.62454,-1.02964 0.91524,-0.38898 1.94488,-0.38898 h 1.09828 q 0.25169,0 0.43474,0.18305 0.18305,0.18305 0.18305,0.43474 v 3.56942 q 0,0.25169 -0.18305,0.43473 -0.18305,0.18305 -0.43474,0.18305 h -2.95163 q -0.68643,0 -1.02965,0.34321 -0.34321,0.34322 -0.34321,1.02964 v 5.10244 q 0,0.25169 -0.18305,0.43474 -0.18304,0.18305 -0.43473,0.18305 z"
style="font-weight:900;font-family:Rubik;-inkscape-font-specification:'Rubik Heavy'"
id="path945" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -0,0 +1,11 @@
{
"type": "process",
"setting_id": "GP004",
"name": "0.08mm Extra Fine @MyRRF",
"from": "system",
"instantiation": "true",
"inherits": "fdm_process_rrf_common",
"layer_height": "0.08",
"bottom_shell_layers": "7",
"top_shell_layers": "9"
}

View file

@ -0,0 +1,11 @@
{
"type": "process",
"setting_id": "GP004",
"name": "0.12mm Fine @MyRRF",
"from": "system",
"instantiation": "true",
"inherits": "fdm_process_rrf_common",
"layer_height": "0.12",
"bottom_shell_layers": "5",
"top_shell_layers": "6"
}

View file

@ -0,0 +1,11 @@
{
"type": "process",
"setting_id": "GP004",
"name": "0.15mm Optimal @MyRRF",
"from": "system",
"instantiation": "true",
"inherits": "fdm_process_rrf_common",
"bottom_shell_layers": "4",
"top_shell_layers": "5",
"layer_height": "0.15"
}

View file

@ -0,0 +1,11 @@
{
"type": "process",
"setting_id": "GP004",
"name": "0.20mm Standard @MyRRF",
"from": "system",
"inherits": "fdm_process_rrf_common",
"instantiation": "true",
"layer_height": "0.2",
"bottom_shell_layers": "3",
"top_shell_layers": "4"
}

View file

@ -0,0 +1,12 @@
{
"type": "process",
"setting_id": "GP004",
"name": "0.24mm Draft @MyRRF",
"from": "system",
"instantiation": "true",
"inherits": "fdm_process_rrf_common",
"layer_height": "0.24",
"top_surface_line_width": "0.45",
"bottom_shell_layers": "3",
"top_shell_layers": "4"
}

View file

@ -0,0 +1,12 @@
{
"type": "process",
"setting_id": "GP004",
"name": "0.28mm Extra Draft @MyRRF",
"from": "system",
"instantiation": "true",
"inherits": "fdm_process_rrf_common",
"layer_height": "0.28",
"top_surface_line_width": "0.45",
"bottom_shell_layers": "3",
"top_shell_layers": "4"
}

View file

@ -0,0 +1,109 @@
{
"type": "process",
"name": "fdm_process_rrf_common",
"from": "system",
"instantiation": "false",
"inherits": "fdm_process_common",
"adaptive_layer_height": "0",
"reduce_crossing_wall": "0",
"max_travel_detour_distance": "0",
"bottom_surface_pattern": "monotonic",
"bottom_shell_layers": "3",
"bottom_shell_thickness": "0",
"bridge_flow": "0.95",
"bridge_speed": "50",
"brim_width": "5",
"brim_object_gap": "0.1",
"compatible_printers_condition": "",
"print_sequence": "by layer",
"default_acceleration": "5000",
"top_surface_acceleration": "3000",
"travel_acceleration": "7000",
"inner_wall_acceleration": "5000",
"outer_wall_acceleration": "3000",
"bridge_no_support": "0",
"draft_shield": "disabled",
"elefant_foot_compensation": "0",
"outer_wall_line_width": "0.4",
"wall_infill_order": "inner wall/outer wall/infill",
"line_width": "0.4",
"infill_direction": "45",
"sparse_infill_density": "15%",
"sparse_infill_pattern": "grid",
"initial_layer_acceleration": "500",
"initial_layer_line_width": "0.5",
"initial_layer_print_height": "0.2",
"infill_combination": "0",
"sparse_infill_line_width": "0.45",
"infill_wall_overlap": "25%",
"interface_shells": "0",
"ironing_flow": "10%",
"ironing_spacing": "0.15",
"ironing_speed": "30",
"ironing_type": "no ironing",
"layer_height": "0.2",
"reduce_infill_retraction": "1",
"filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode",
"detect_overhang_wall": "1",
"overhang_1_4_speed": "0",
"overhang_2_4_speed": "50",
"overhang_3_4_speed": "30",
"overhang_4_4_speed": "10",
"inner_wall_line_width": "0.45",
"wall_loops": "3",
"print_settings_id": "",
"raft_layers": "0",
"seam_position": "aligned",
"skirt_distance": "2",
"skirt_height": "1",
"skirt_loops": "0",
"minimum_sparse_infill_area": "15",
"internal_solid_infill_line_width": "0.4",
"spiral_mode": "0",
"standby_temperature_delta": "-5",
"enable_support": "0",
"resolution": "0.012",
"support_type": "normal(auto)",
"support_style": "default",
"support_on_build_plate_only": "0",
"support_top_z_distance": "0.2",
"support_filament": "0",
"support_line_width": "0.4",
"support_interface_loop_pattern": "0",
"support_interface_filament": "0",
"support_interface_top_layers": "2",
"support_interface_bottom_layers": "2",
"support_interface_spacing": "0.5",
"support_interface_speed": "80",
"support_base_pattern": "rectilinear",
"support_base_pattern_spacing": "2.5",
"support_speed": "150",
"support_threshold_angle": "30",
"support_object_xy_distance": "0.35",
"tree_support_branch_angle": "45",
"tree_support_wall_count": "0",
"detect_thin_wall": "0",
"top_surface_pattern": "monotonic",
"top_surface_line_width": "0.4",
"top_shell_layers": "3",
"top_shell_thickness": "0.8",
"initial_layer_speed": "50",
"initial_layer_infill_speed": "105",
"outer_wall_speed": "120",
"inner_wall_speed": "200",
"internal_solid_infill_speed": "200",
"top_surface_speed": "100",
"gap_infill_speed": "100",
"sparse_infill_speed": "200",
"travel_speed": "350",
"enable_prime_tower": "0",
"wipe_tower_no_sparse_layers": "0",
"prime_tower_width": "60",
"xy_hole_compensation": "0",
"xy_contour_compensation": "0",
"enable_arc_fitting": "0",
"compatible_printers": [
"MyRRF 0.4 nozzle"
],
"exclude_object": "1"
}

View file

@ -115,7 +115,7 @@
"0" "0"
], ],
"machine_pause_gcode": "PAUSE", "machine_pause_gcode": "PAUSE",
"machine_start_gcode": ";v2.8-20240219-3;\n;wiping nozzle start\nM106 P3 S0\nclean_nozzle_position\n;wiping nozzle end\n;*************preheat nozzle and hotbed for Z_TILT_ADJUST*************\nM140 S[bed_temperature_initial_layer_single]\nM104 S130\nG1 X110 Y110 F6000 \nG4 P200\nprobe\nSET_KINEMATIC_POSITION Z=0 ;Z homing\nZ_TILT_ADJUST \n;*************Z_TILT_ADJUST end*************\nM140 S[bed_temperature_initial_layer_single] ;heat hotbed temp set by user\nG1 X5 Y5 F6000 \nG28 \nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[0] + 60,print_bed_max[0])} F6000 \nG1 Z0.2 F600\nM104 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user\nM106 S100 ;close head_nozzle fan\nG4 P3000\nM106 S255 ;close head_nozzle fan\nG4 P3000\nM106 S100 ;close head_nozzle fan\n;*************PRINT START*************\nM109 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user\nM106 S0 ;close head_nozzle fan\nBED_MESH_CLEAR \nBED_MESH_PROFILE LOAD=default # bedmesh load\nG92 E0 ;Reset Extruder\nG1 Z4.0 F200 ;Move Z Axis up\nG90 ;absolute position\n ; ; ; ; ; ; ; ; ; draw line along model\nG92 E0 ;reset extruder\nG1 E4 F300 ;extrude filament\nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[0] + 60,print_bed_max[0])} F6000 \nG1 Z0.22 F600\nG1 X{first_layer_print_min[0]-1.5} Y{max(0, first_layer_print_min[1]-1.5)} F2000 E10\nG1 Z0.22 F600\nG1 X{min(first_layer_print_min[0] + 60,print_bed_max[0])} F1200 E12\n ; ; ; ; ; ; ; ; ;draw line along model end \nG4 P200\nG1 Z2\nG92 E0 ;Reset Extruder\nCLEAR_PAUSE\n;***********model start************\n", "machine_start_gcode": ";v2.9-20240311;\n;wiping nozzle start\nM106 P3 S0\nclean_nozzle_position\n;wiping nozzle end\n;*************preheat nozzle and hotbed for Z_TILT_ADJUST*************\nM140 S[bed_temperature_initial_layer_single]\nM104 S130\nG1 X110 Y110 F6000 \nG4 P200\nprobe\nSET_KINEMATIC_POSITION Z=0 ;Z homing\nZ_TILT_ADJUST \n;*************Z_TILT_ADJUST end*************\nM140 S[bed_temperature_initial_layer_single] ;heat hotbed temp set by user\nG1 X5 Y5 F6000 \nG28 \nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[0] + 60,print_bed_max[0])} F6000 \nG1 Z0.2 F600\nM104 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user\nM106 S100 ;close head_nozzle fan\nG4 P3000\nM106 S255 ;close head_nozzle fan\nG4 P3000\nM106 S100 ;close head_nozzle fan\n;*************PRINT START*************\nM109 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user and wait \nM190 S[bed_temperature_initial_layer_single];heat bed temp set by user and wait \nM106 S0 ;close head_nozzle fan\nBED_MESH_CLEAR \nBED_MESH_PROFILE LOAD=default # bedmesh load\nG92 E0 ;Reset Extruder\nG1 Z4.0 F200 ;Move Z Axis up\nG90 ;absolute position\n ; ; ; ; ; ; ; ; ; draw line along model\nG92 E0 ;reset extruder\nG1 E4 F300 ;extrude filament\nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[0] + 60,print_bed_max[0])} F6000 \nG1 Z0.22 F600\nG1 X{first_layer_print_min[0]-1.5} Y{max(0, first_layer_print_min[1]-1.5)} F2000 E10\nG1 Z0.22 F600\nG1 X{min(first_layer_print_min[0] + 60,print_bed_max[0])} F1200 E12\n ; ; ; ; ; ; ; ; ;draw line along model end \nG4 P200\nG1 Z2\nG92 E0 ;Reset Extruder\nCLEAR_PAUSE\n;***********model start************\n",
"machine_unload_filament_time": "0", "machine_unload_filament_time": "0",
"max_layer_height": [ "max_layer_height": [
"0.28" "0.28"

View file

@ -112,7 +112,7 @@
"0" "0"
], ],
"machine_pause_gcode": "PAUSE", "machine_pause_gcode": "PAUSE",
"machine_start_gcode": ";V1.0\n\nM140 S[bed_temperature_initial_layer_single] \nG28\nG4 P200\nG90\nG1 Z4\nZ_TILT_ADJUST\nM140 S[bed_temperature_initial_layer_single] \nG90\nG1 X150 Y150 F3000\nG28 Z\nG1 X50 Y-3 F2500\nM109 S[nozzle_temperature_initial_layer]\nM190 S[bed_temperature_initial_layer_single] \nPRINT_START", "machine_start_gcode": ";V1.1\n\nM140 S[bed_temperature_initial_layer_single] \nM104 S135\nG28\nG4 P200\nZ_TILT_ADJUST\nG90\nG1 X150 Y150 F3000\nG28 Z\nG1 X50 Y-4 F2500\nM109 S[nozzle_temperature_initial_layer]\nM190 S[bed_temperature_initial_layer_single] \nPRINT_START",
"max_layer_height": [ "max_layer_height": [
"0.28" "0.28"
], ],

View file

@ -113,7 +113,7 @@
"0" "0"
], ],
"machine_pause_gcode": "PAUSE", "machine_pause_gcode": "PAUSE",
"machine_start_gcode": "M140 S[bed_temperature_initial_layer_single] \nG28\nG4 P200\nG90\nG1 Z4\nZ_TILT_ADJUST\nM140 S[bed_temperature_initial_layer_single] \nG90\nG1 X150 Y150 F3000\nG28 Z\nG1 X50 Y-3 F2500\nM109 S[nozzle_temperature_initial_layer]\nM190 S[bed_temperature_initial_layer_single] \nPRINT_START", "machine_start_gcode": ";V1.1\n\nM140 S[bed_temperature_initial_layer_single] \nM104 S135\nG28\nG4 P200\nZ_TILT_ADJUST\nG90\nG1 X150 Y150 F3000\nG28 Z\nG1 X50 Y-4 F2500\nM109 S[nozzle_temperature_initial_layer]\nM190 S[bed_temperature_initial_layer_single] \nPRINT_START",
"max_layer_height": [ "max_layer_height": [
"0.28" "0.28"
], ],

View file

@ -6,6 +6,9 @@
"instantiation": "true", "instantiation": "true",
"inherits": "fdm_process_common", "inherits": "fdm_process_common",
"overhang_2_4_speed": "50",
"overhang_3_4_speed": "30",
"top_shell_layers": "6",
"overhang_1_4_speed": "50", "overhang_1_4_speed": "50",
"accel_to_decel_enable": "0", "accel_to_decel_enable": "0",
"bottom_shell_layers": "4", "bottom_shell_layers": "4",
@ -28,7 +31,7 @@
"skirt_speed": "50", "skirt_speed": "50",
"sparse_infill_speed": "330", "sparse_infill_speed": "330",
"support_line_width": "0.42", "support_line_width": "0.42",
"top_shell_thickness": "0.8", "top_shell_thickness": "1",
"top_surface_line_width": "0.42", "top_surface_line_width": "0.42",
"compatible_printers": [ "compatible_printers": [
"FlyingBear Reborn3 0.4 nozzle" "FlyingBear Reborn3 0.4 nozzle"

View file

@ -6,6 +6,9 @@
"instantiation": "true", "instantiation": "true",
"inherits": "fdm_process_common_S1", "inherits": "fdm_process_common_S1",
"overhang_2_4_speed": "50",
"overhang_3_4_speed": "30",
"top_shell_layers": "6",
"overhang_1_4_speed": "50", "overhang_1_4_speed": "50",
"accel_to_decel_enable": "0", "accel_to_decel_enable": "0",
"bottom_shell_layers": "4", "bottom_shell_layers": "4",
@ -28,7 +31,7 @@
"skirt_speed": "50", "skirt_speed": "50",
"sparse_infill_speed": "330", "sparse_infill_speed": "330",
"support_line_width": "0.42", "support_line_width": "0.42",
"top_shell_thickness": "0.8", "top_shell_thickness": "1",
"top_surface_line_width": "0.42", "top_surface_line_width": "0.42",
"compatible_printers": [ "compatible_printers": [
"FlyingBear S1 0.4 nozzle" "FlyingBear S1 0.4 nozzle"

View file

@ -61,7 +61,7 @@
"initial_layer_print_height": "0.2", "initial_layer_print_height": "0.2",
"initial_layer_speed": "50", "initial_layer_speed": "50",
"initial_layer_travel_speed": "100%", "initial_layer_travel_speed": "100%",
"inner_wall_acceleration": "10000", "inner_wall_acceleration": "5000",
"inner_wall_jerk": "9", "inner_wall_jerk": "9",
"inner_wall_line_width": "0.45", "inner_wall_line_width": "0.45",
"interface_shells": "0", "interface_shells": "0",

View file

@ -95,7 +95,7 @@
"tree_support_branch_diameter": "2", "tree_support_branch_diameter": "2",
"tree_support_branch_angle": "45", "tree_support_branch_angle": "45",
"tree_support_wall_count": "1", "tree_support_wall_count": "1",
"detect_thin_wall": "0", "detect_thin_wall": "1",
"top_surface_pattern": "monotonicline", "top_surface_pattern": "monotonicline",
"top_surface_line_width": "0.42", "top_surface_line_width": "0.42",
"top_surface_acceleration": "2000", "top_surface_acceleration": "2000",

View file

@ -105,6 +105,8 @@ var LangText = {
t111: "Create New", t111: "Create New",
t112: "Join the Program", t112: "Join the Program",
t113: "You may change your choice in preference anytime.", t113: "You may change your choice in preference anytime.",
orca1: "Edit Project Info",
orca2: "no model information",
}, },
es_ES: { es_ES: {
t1: "Bienvenido a Orca Slicer", t1: "Bienvenido a Orca Slicer",
@ -212,6 +214,8 @@ var LangText = {
t111: "Crear nuevo", t111: "Crear nuevo",
t112: "Unirse al programa", t112: "Unirse al programa",
t113: "Puede cambiar su elección en preferencias en cualquier momento.", t113: "Puede cambiar su elección en preferencias en cualquier momento.",
orca1: "Edit Project Info",
orca2: "no model information",
}, },
de_DE: { de_DE: {
t1: "Willkommen im Orca Slicer", t1: "Willkommen im Orca Slicer",
@ -312,6 +316,8 @@ var LangText = {
t104: "Profilname", t104: "Profilname",
t105: "Profilautor", t105: "Profilautor",
t106: "Profilbeschreibung", t106: "Profilbeschreibung",
orca1: "Edit Project Info",
orca2: "no model information",
}, },
cs_CZ: { cs_CZ: {
t1: "Vítejte v Orca Slicer", t1: "Vítejte v Orca Slicer",
@ -412,6 +418,8 @@ var LangText = {
t104: "Název profilu", t104: "Název profilu",
t105: "Autor profilu", t105: "Autor profilu",
t106: "Popis profilu", t106: "Popis profilu",
orca1: "Edit Project Info",
orca2: "no model information",
}, },
fr_FR: { fr_FR: {
t1: "Bienvenue sur Orca Slicer", t1: "Bienvenue sur Orca Slicer",
@ -515,6 +523,8 @@ var LangText = {
t109: "Filaments du système", t109: "Filaments du système",
t110: "Filaments personnalisés", t110: "Filaments personnalisés",
t111: "Créer un nouveau filament", t111: "Créer un nouveau filament",
orca1: "Edit Project Info",
orca2: "no model information",
wk1: "Démarrage rapide", wk1: "Démarrage rapide",
wk2: "Cet article présente l'utilisation la plus basique de Orca Slicer. Il guide les utilisateurs pour configurer le logiciel, créer des projets et effectuer la première tâche d'impression étape par étape.", wk2: "Cet article présente l'utilisation la plus basique de Orca Slicer. Il guide les utilisateurs pour configurer le logiciel, créer des projets et effectuer la première tâche d'impression étape par étape.",
wk3: "Workflow basé sur des projets", wk3: "Workflow basé sur des projets",
@ -655,6 +665,7 @@ var LangText = {
wk15: "3D文本", wk15: "3D文本",
wk16: "使用3D文本工具用户可以轻松地在项目中创建各种3D文本形状使模型更加个性化。Orca Slicer提供了数十种字体并支持粗体和斜体样式使文本具有更大的灵活性。", wk16: "使用3D文本工具用户可以轻松地在项目中创建各种3D文本形状使模型更加个性化。Orca Slicer提供了数十种字体并支持粗体和斜体样式使文本具有更大的灵活性。",
orca1: "编辑项目信息", orca1: "编辑项目信息",
orca2: "该模型没有相关信息",
}, },
zh_TW: { zh_TW: {
t1: "歡迎使用 Orca Slicer", t1: "歡迎使用 Orca Slicer",
@ -742,6 +753,8 @@ var LangText = {
t90: "3D 模型", t90: "3D 模型",
t91: "下載3D模型", t91: "下載3D模型",
t92: "Bambu聖誕小屋", t92: "Bambu聖誕小屋",
orca1: "Edit Project Info",
orca2: "no model information",
wk1: "快速入門指南", wk1: "快速入門指南",
wk2: "本文介紹了 Orca Slicer 的最基本用法。它指導用戶配置軟體,創建項目,並逐步完成第一個列印任務。", wk2: "本文介紹了 Orca Slicer 的最基本用法。它指導用戶配置軟體,創建項目,並逐步完成第一個列印任務。",
wk3: "基於項目的工作流", wk3: "基於項目的工作流",
@ -865,6 +878,8 @@ var LangText = {
t111: "Создать новый", t111: "Создать новый",
t112: "Присоединяйтесь к программе", t112: "Присоединяйтесь к программе",
t113: "Вы можете изменить свой выбор в любое время.", t113: "Вы можете изменить свой выбор в любое время.",
orca1: "Edit Project Info",
orca2: "no model information",
}, },
ko_KR: { ko_KR: {
t1: "Orca Slicer에 오신 것을 환영합니다", t1: "Orca Slicer에 오신 것을 환영합니다",
@ -954,6 +969,8 @@ var LangText = {
t92: "Bambu Christmas Cabin", t92: "Bambu Christmas Cabin",
t93: "프린터 연결", t93: "프린터 연결",
t94: "장치를 보려면 프린터 연결을 설정하세요.", t94: "장치를 보려면 프린터 연결을 설정하세요.",
orca1: "Edit Project Info",
orca2: "no model information",
}, },
tr_TR: { tr_TR: {
t1: "Orca Slicer'a hoş geldiniz", t1: "Orca Slicer'a hoş geldiniz",
@ -1043,6 +1060,8 @@ var LangText = {
t92: "Bambu Noel Kabini", t92: "Bambu Noel Kabini",
t93: "Yazıcı Bağlantısı", t93: "Yazıcı Bağlantısı",
t94: "Cihazı görüntülemek için lütfen yazıcı bağlantınızı kurun.", t94: "Cihazı görüntülemek için lütfen yazıcı bağlantınızı kurun.",
orca1: "Edit Project Info",
orca2: "no model information",
}, },
pl_PL: { pl_PL: {
t1: "Witamy w Orca Slicer", t1: "Witamy w Orca Slicer",
@ -1057,7 +1076,7 @@ var LangText = {
t10: "Wybór drukarki", t10: "Wybór drukarki",
t11: "Wszystkie", t11: "Wszystkie",
t12: "Wyczyść wszystko", t12: "Wyczyść wszystko",
t13: "dysza mm", t13: "mm dysza",
t14: "Wybór filamentu", t14: "Wybór filamentu",
t15: "Drukarka", t15: "Drukarka",
t16: "Typ filamentu", t16: "Typ filamentu",
@ -1151,6 +1170,7 @@ var LangText = {
t112: "Dołącz do programu", t112: "Dołącz do programu",
t113: "Możesz zmienić swój wybór w preferencjach w dowolnym momencie.", t113: "Możesz zmienić swój wybór w preferencjach w dowolnym momencie.",
orca1: "Edytuj informacje o projekcie", orca1: "Edytuj informacje o projekcie",
orca2: "brak informacji o modelu",
}, },
}; };

View file

@ -19,7 +19,7 @@
<script type="text/javascript" src="js/home.js"></script> <script type="text/javascript" src="js/home.js"></script>
</head> </head>
<body class="ZScrol" onLoad="OnInit()"> <body class="ZScrol" onLoad="OnInit()">
<div id="LeftBoard"> <div id="LeftBoard" style="display: none;">
<div id="LoginArea"> <div id="LoginArea">
<div id="Login1"> <div id="Login1">
<div id="Icon1"><img id="BBLIcon" src="../image/logo2.png" /></div> <div id="Icon1"><img id="BBLIcon" src="../image/logo2.png" /></div>

View file

@ -80,62 +80,54 @@ function Set_RecentFile_MouseRightBtn_Event()
} }
function SetLoginPanelVisibility(visible) {
var leftBoard = document.getElementById("LeftBoard");
if (visible) {
leftBoard.style.display = "block";
} else {
leftBoard.style.display = "none";
}
}
function HandleStudio( pVal ) function HandleStudio( pVal )
{ {
let strCmd = pVal['command']; let strCmd = pVal['command'];
if(strCmd=='get_recent_projects') if (strCmd == "get_recent_projects") {
{ ShowRecentFileList(pVal["response"]);
ShowRecentFileList(pVal['response']); } else if (strCmd == "studio_userlogin") {
} SetLoginInfo(pVal["data"]["avatar"], pVal["data"]["name"]);
else if(strCmd=='studio_userlogin') } else if (strCmd == "studio_useroffline") {
{ SetUserOffline();
SetLoginInfo(pVal['data']['avatar'],pVal['data']['name']); } else if (strCmd == "studio_set_mallurl") {
} SetMallUrl(pVal["data"]["url"]);
else if(strCmd=='studio_useroffline') } else if (strCmd == "studio_clickmenu") {
{ let strName = pVal["data"]["menu"];
SetUserOffline();
}
else if( strCmd=="studio_set_mallurl" )
{
SetMallUrl( pVal['data']['url'] );
}
else if( strCmd=="studio_clickmenu" )
{
let strName=pVal['data']['menu'];
GotoMenu(strName); GotoMenu(strName);
} } else if (strCmd == "network_plugin_installtip") {
else if( strCmd=="network_plugin_installtip" ) let nShow = pVal["show"] * 1;
{
let nShow=pVal["show"]*1;
if(nShow==1) if (nShow == 1) {
{ $("#NoPluginTip").show();
$("#NoPluginTip").show(); $("#NoPluginTip").css("display", "flex");
$("#NoPluginTip").css("display","flex"); } else {
} $("#NoPluginTip").hide();
else }
{ } else if (strCmd == "modelmall_model_advise_get") {
$("#NoPluginTip").hide(); //alert('hot');
} if (m_HotModelList != null) {
} let SS1 = JSON.stringify(pVal["hits"]);
else if( strCmd=="modelmall_model_advise_get") let SS2 = JSON.stringify(m_HotModelList);
{
//alert('hot');
if( m_HotModelList!=null )
{
let SS1=JSON.stringify(pVal['hits']);
let SS2=JSON.stringify(m_HotModelList);
if( SS1==SS2 ) if (SS1 == SS2) return;
return; }
}
m_HotModelList=pVal['hits']; m_HotModelList = pVal["hits"];
ShowStaffPick( m_HotModelList ); ShowStaffPick(m_HotModelList);
} } else if (data.cmd === "SetLoginPanelVisibility") {
SetLoginPanelVisibility(data.visible);
}
} }
function GotoMenu( strMenu ) function GotoMenu( strMenu )

View file

@ -25,7 +25,7 @@
<div id="EmptyArea"> <div id="EmptyArea">
<div><img src="img/null.png"></div> <div><img src="img/null.png"></div>
<div>no model information</div> <div class="Text_Title Text_Bold trans" tid='orca2'>no model information</div>
<div id="AddModelInfoBtn" class="trans TextS1" tid='orca1' onClick="OnClickEditProjectInfo()">Edit Project Info</div> <div id="AddModelInfoBtn" class="trans TextS1" tid='orca1' onClick="OnClickEditProjectInfo()">Edit Project Info</div>
</div> </div>

View file

@ -874,7 +874,7 @@ static std::vector<std::string> s_Preset_printer_options {
"nozzle_type", "nozzle_hrc","auxiliary_fan", "nozzle_volume","upward_compatible_machine", "z_hop_types", "retract_lift_enforce","support_chamber_temp_control","support_air_filtration","printer_structure", "nozzle_type", "nozzle_hrc","auxiliary_fan", "nozzle_volume","upward_compatible_machine", "z_hop_types", "retract_lift_enforce","support_chamber_temp_control","support_air_filtration","printer_structure",
"best_object_pos","head_wrap_detect_zone", "best_object_pos","head_wrap_detect_zone",
//SoftFever //SoftFever
"host_type", "print_host", "printhost_apikey", "host_type", "print_host", "printhost_apikey", "bbl_use_printhost",
"print_host_webui", "print_host_webui",
"printhost_cafile","printhost_port","printhost_authorization_type", "printhost_cafile","printhost_port","printhost_authorization_type",
"printhost_user", "printhost_password", "printhost_ssl_ignore_revoke", "thumbnails", "thumbnails_format", "printhost_user", "printhost_password", "printhost_ssl_ignore_revoke", "thumbnails", "thumbnails_format",
@ -2941,6 +2941,7 @@ static std::vector<std::string> s_PhysicalPrinter_opts {
"preset_name", // temporary option to compatibility with older Slicer "preset_name", // temporary option to compatibility with older Slicer
"preset_names", "preset_names",
"printer_technology", "printer_technology",
"bbl_use_printhost",
"host_type", "host_type",
"print_host", "print_host",
"print_host_webui", "print_host_webui",

View file

@ -344,6 +344,13 @@ VendorType PresetBundle::get_current_vendor_type()
return t; return t;
} }
bool PresetBundle::use_bbl_network()
{
const auto cfg = printers.get_edited_preset().config;
const bool use_bbl_network = is_bbl_vendor() && !cfg.opt_bool("bbl_use_printhost");
return use_bbl_network;
}
//BBS: load project embedded presets //BBS: load project embedded presets
PresetsConfigSubstitutions PresetBundle::load_project_embedded_presets(std::vector<Preset*> project_presets, ForwardCompatibilitySubstitutionRule substitution_rule) PresetsConfigSubstitutions PresetBundle::load_project_embedded_presets(std::vector<Preset*> project_presets, ForwardCompatibilitySubstitutionRule substitution_rule)
{ {

View file

@ -97,6 +97,7 @@ public:
VendorType get_current_vendor_type(); VendorType get_current_vendor_type();
// Vendor related handy functions // Vendor related handy functions
bool is_bbl_vendor() { return get_current_vendor_type() == VendorType::Marlin_BBL; } bool is_bbl_vendor() { return get_current_vendor_type() == VendorType::Marlin_BBL; }
bool use_bbl_network();
//BBS: project embedded preset logic //BBS: project embedded preset logic
PresetsConfigSubstitutions load_project_embedded_presets(std::vector<Preset*> project_presets, ForwardCompatibilitySubstitutionRule substitution_rule); PresetsConfigSubstitutions load_project_embedded_presets(std::vector<Preset*> project_presets, ForwardCompatibilitySubstitutionRule substitution_rule);

View file

@ -103,7 +103,9 @@ static t_config_enum_values s_keys_map_PrintHostType {
{ "astrobox", htAstroBox }, { "astrobox", htAstroBox },
{ "repetier", htRepetier }, { "repetier", htRepetier },
{ "mks", htMKS }, { "mks", htMKS },
{ "obico", htObico } { "obico", htObico },
{ "flashforge", htFlashforge },
{ "simplyprint", htSimplyPrint },
}; };
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(PrintHostType) CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(PrintHostType)
@ -541,6 +543,13 @@ void PrintConfigDef::init_common_params()
def->mode = comDevelop; def->mode = comDevelop;
def->set_default_value(new ConfigOptionStrings()); def->set_default_value(new ConfigOptionStrings());
def = this->add("bbl_use_printhost", coBool);
def->label = L("Use 3rd-party print host");
def->tooltip = L("Allow controlling BambuLab's printer through 3rd party print hosts");
def->mode = comAdvanced;
def->cli = ConfigOptionDef::nocli;
def->set_default_value(new ConfigOptionBool(false));
def = this->add("print_host", coString); def = this->add("print_host", coString);
def->label = L("Hostname, IP or URL"); def->label = L("Hostname, IP or URL");
def->tooltip = L("Orca Slicer can upload G-code files to a printer host. This field should contain " def->tooltip = L("Orca Slicer can upload G-code files to a printer host. This field should contain "
@ -3066,6 +3075,8 @@ def = this->add("filament_loading_speed", coFloats);
def->enum_values.push_back("repetier"); def->enum_values.push_back("repetier");
def->enum_values.push_back("mks"); def->enum_values.push_back("mks");
def->enum_values.push_back("obico"); def->enum_values.push_back("obico");
def->enum_values.push_back("flashforge");
def->enum_values.push_back("simplyprint");
def->enum_labels.push_back("PrusaLink"); def->enum_labels.push_back("PrusaLink");
def->enum_labels.push_back("PrusaConnect"); def->enum_labels.push_back("PrusaConnect");
def->enum_labels.push_back("Octo/Klipper"); def->enum_labels.push_back("Octo/Klipper");
@ -3075,6 +3086,8 @@ def = this->add("filament_loading_speed", coFloats);
def->enum_labels.push_back("Repetier"); def->enum_labels.push_back("Repetier");
def->enum_labels.push_back("MKS"); def->enum_labels.push_back("MKS");
def->enum_labels.push_back("Obico"); def->enum_labels.push_back("Obico");
def->enum_labels.push_back("Flashforge");
def->enum_labels.push_back("SimplyPrint");
def->mode = comAdvanced; def->mode = comAdvanced;
def->cli = ConfigOptionDef::nocli; def->cli = ConfigOptionDef::nocli;
def->set_default_value(new ConfigOptionEnum<PrintHostType>(htOctoPrint)); def->set_default_value(new ConfigOptionEnum<PrintHostType>(htOctoPrint));

View file

@ -59,7 +59,7 @@ enum class FuzzySkinType {
}; };
enum PrintHostType { enum PrintHostType {
htPrusaLink, htPrusaConnect, htOctoPrint, htDuet, htFlashAir, htAstroBox, htRepetier, htMKS, htObico htPrusaLink, htPrusaConnect, htOctoPrint, htDuet, htFlashAir, htAstroBox, htRepetier, htMKS, htObico, htFlashforge, htSimplyPrint
}; };
enum AuthorizationType { enum AuthorizationType {

View file

@ -2059,9 +2059,9 @@ void PrintObject::bridge_over_infill()
unsupported_area = closing(unsupported_area, float(SCALED_EPSILON)); unsupported_area = closing(unsupported_area, float(SCALED_EPSILON));
// Orca: // Orca:
// Lightning infill benefits from always having a bridge layer so don't filter out small unsupported areas. Also, don't filter small internal unsupported areas if the user has requested so. // Don't filter small internal unsupported areas if the user has requested so.
double expansion_multiplier = 3; double expansion_multiplier = 3;
if(has_lightning_infill || po->config().dont_filter_internal_bridges.value !=ibfDisabled){ if(po->config().dont_filter_internal_bridges.value !=ibfDisabled){
expansion_multiplier = 1; expansion_multiplier = 1;
} }
// By expanding the lower layer solids, we avoid making bridges from the tiny internal overhangs that are (very likely) supported by previous layer solids // By expanding the lower layer solids, we avoid making bridges from the tiny internal overhangs that are (very likely) supported by previous layer solids

View file

@ -508,6 +508,8 @@ set(SLIC3R_GUI_SOURCES
Utils/PrintHost.hpp Utils/PrintHost.hpp
Utils/Serial.cpp Utils/Serial.cpp
Utils/Serial.hpp Utils/Serial.hpp
Utils/SerialMessageType.hpp
Utils/SerialMessage.hpp
Utils/MKS.cpp Utils/MKS.cpp
Utils/MKS.hpp Utils/MKS.hpp
Utils/WxFontUtils.cpp Utils/WxFontUtils.cpp
@ -528,6 +530,15 @@ set(SLIC3R_GUI_SOURCES
GUI/PrinterCloudAuthDialog.hpp GUI/PrinterCloudAuthDialog.hpp
Utils/Obico.cpp Utils/Obico.cpp
Utils/Obico.hpp Utils/Obico.hpp
Utils/Flashforge.cpp
Utils/Flashforge.hpp
GUI/OAuthDialog.cpp
GUI/OAuthDialog.hpp
GUI/Jobs/OAuthJob.cpp
GUI/Jobs/OAuthJob.hpp
Utils/SimplyPrint.cpp
Utils/SimplyPrint.hpp
) )
if (WIN32) if (WIN32)

View file

@ -1434,7 +1434,7 @@ int GUI_App::install_plugin(std::string name, std::string package_name, InstallP
if (pro_fn) if (pro_fn)
pro_fn(InstallStatusInstallCompleted, 100, cancel); pro_fn(InstallStatusInstallCompleted, 100, cancel);
if (name == "plugins") if (name == "plugins")
app_config->set_str("app", "installed_networking", "1"); app_config->set_bool("installed_networking", true);
BOOST_LOG_TRIVIAL(info) << "[install_plugin] success"; BOOST_LOG_TRIVIAL(info) << "[install_plugin] success";
return 0; return 0;
} }
@ -2616,6 +2616,11 @@ void GUI_App::copy_network_if_available()
bool GUI_App::on_init_network(bool try_backup) bool GUI_App::on_init_network(bool try_backup)
{ {
auto should_load_networking_plugin = app_config->get_bool("installed_networking");
if(!should_load_networking_plugin) {
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "Don't load plugin as installed_networking is false";
return false;
}
int load_agent_dll = Slic3r::NetworkAgent::initialize_network_module(); int load_agent_dll = Slic3r::NetworkAgent::initialize_network_module();
bool create_network_agent = false; bool create_network_agent = false;
__retry: __retry:
@ -2627,7 +2632,7 @@ __retry:
if (!bambu_source) { if (!bambu_source) {
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": can not get bambu source module!"; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": can not get bambu source module!";
m_networking_compatible = false; m_networking_compatible = false;
if (app_config->get("installed_networking") == "1") { if (should_load_networking_plugin) {
m_networking_need_update = true; m_networking_need_update = true;
} }
} }
@ -2642,13 +2647,13 @@ __retry:
goto __retry; goto __retry;
} }
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": on_init_network, version dismatch, need upload network module"; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": on_init_network, version dismatch, need upload network module";
if (app_config->get("installed_networking") == "1") { if (should_load_networking_plugin) {
m_networking_need_update = true; m_networking_need_update = true;
} }
} }
} else { } else {
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": on_init_network, load dll failed"; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": on_init_network, load dll failed";
if (app_config->get("installed_networking") == "1") { if (should_load_networking_plugin) {
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": on_init_network, need upload network module"; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": on_init_network, need upload network module";
m_networking_need_update = true; m_networking_need_update = true;
} }
@ -3208,9 +3213,9 @@ void GUI_App::ShowUserGuide() {
try { try {
bool res = false; bool res = false;
GuideFrame GuideDlg(this); GuideFrame GuideDlg(this);
//if (GuideDlg.IsFirstUse()) //if (GuideDlg.IsFirstUse())
res = GuideDlg.run(); res = GuideDlg.run();
if (res) { if (res) {
load_current_presets(); load_current_presets();
update_publish_status(); update_publish_status();
// BBS: remove SLA related message // BBS: remove SLA related message
@ -3462,6 +3467,7 @@ void GUI_App::get_login_info()
wxString strJS = wxString::Format("window.postMessage(%s)", logout_cmd); wxString strJS = wxString::Format("window.postMessage(%s)", logout_cmd);
GUI::wxGetApp().run_script(strJS); GUI::wxGetApp().run_script(strJS);
} }
mainframe->m_webview->SetLoginPanelVisibility(true);
} }
} }

View file

@ -7,40 +7,184 @@
namespace Slic3r { namespace Slic3r {
namespace GUI { namespace GUI {
static std::string parse_params(std::string url, std::string key) std::string url_get_param(const std::string& url, const std::string& key)
{ {
size_t start = url.find(key); size_t start = url.find(key);
if (start < 0) return ""; if (start == std::string::npos) return "";
size_t eq = url.find('=', start); size_t eq = url.find('=', start);
if (eq < 0) return ""; if (eq == std::string::npos) return "";
std::string key_str = url.substr(start, eq - start); std::string key_str = url.substr(start, eq - start);
if (key_str != key) if (key_str != key)
return ""; return "";
start += key.size() + 1; start += key.size() + 1;
size_t end = url.find('&', start); size_t end = url.find('&', start);
if (end < 0) if (end == std::string::npos) end = url.length(); // Last param
return "";
std::string result = url.substr(start, end - start); std::string result = url.substr(start, end - start);
return result; return result;
} }
std::string http_headers::get_response() void session::start()
{
read_first_line();
}
void session::stop()
{
boost::system::error_code ignored_ec;
socket.shutdown(boost::asio::socket_base::shutdown_both, ignored_ec);
socket.close(ignored_ec);
}
void session::read_first_line()
{
auto self(shared_from_this());
async_read_until(socket, buff, '\r', [this, self](const boost::beast::error_code& e, std::size_t s) {
if (!e) {
std::string line, ignore;
std::istream stream{&buff};
std::getline(stream, line, '\r');
std::getline(stream, ignore, '\n');
headers.on_read_request_line(line);
read_next_line();
} else if (e != boost::asio::error::operation_aborted) {
server.stop(self);
}
});
}
void session::read_body()
{
auto self(shared_from_this());
int nbuffer = 1000;
std::shared_ptr<std::vector<char>> bufptr = std::make_shared<std::vector<char>>(nbuffer);
async_read(socket, boost::asio::buffer(*bufptr, nbuffer),
[this, self](const boost::beast::error_code& e, std::size_t s) { server.stop(self); });
}
void session::read_next_line()
{
auto self(shared_from_this());
async_read_until(socket, buff, '\r', [this, self](const boost::beast::error_code& e, std::size_t s) {
if (!e) {
std::string line, ignore;
std::istream stream{&buff};
std::getline(stream, line, '\r');
std::getline(stream, ignore, '\n');
headers.on_read_header(line);
if (line.length() == 0) {
if (headers.content_length() == 0) {
const std::string url_str = Http::url_decode(headers.get_url());
const auto resp = server.server.m_request_handler(url_str);
std::stringstream ssOut;
resp->write_response(ssOut);
std::shared_ptr<std::string> str = std::make_shared<std::string>(ssOut.str());
async_write(socket, boost::asio::buffer(str->c_str(), str->length()),
[this, self](const boost::beast::error_code& e, std::size_t s) {
std::cout << "done" << std::endl;
server.stop(self);
});
} else {
read_body();
}
} else {
read_next_line();
}
} else if (e != boost::asio::error::operation_aborted) {
server.stop(self);
}
});
}
void HttpServer::IOServer::do_accept()
{
acceptor.async_accept([this](boost::system::error_code ec, boost::asio::ip::tcp::socket socket) {
if (!acceptor.is_open()) {
return;
}
if (!ec) {
const auto ss = std::make_shared<session>(*this, std::move(socket));
start(ss);
}
do_accept();
});
}
void HttpServer::IOServer::start(std::shared_ptr<session> session)
{
sessions.insert(session);
session->start();
}
void HttpServer::IOServer::stop(std::shared_ptr<session> session)
{
sessions.erase(session);
session->stop();
}
void HttpServer::IOServer::stop_all()
{
for (auto s : sessions) {
s->stop();
}
sessions.clear();
}
HttpServer::HttpServer(boost::asio::ip::port_type port) : port(port) {}
void HttpServer::start()
{
BOOST_LOG_TRIVIAL(info) << "start_http_service...";
start_http_server = true;
m_http_server_thread = create_thread([this] {
set_current_thread_name("http_server");
server_ = std::make_unique<IOServer>(*this);
server_->acceptor.listen();
server_->do_accept();
server_->io_service.run();
});
}
void HttpServer::stop()
{
start_http_server = false;
if (server_) {
server_->acceptor.close();
server_->stop_all();
}
if (m_http_server_thread.joinable())
m_http_server_thread.join();
server_.reset();
}
void HttpServer::set_request_handler(const std::function<std::shared_ptr<Response>(const std::string&)>& request_handler)
{
this->m_request_handler = request_handler;
}
std::shared_ptr<HttpServer::Response> HttpServer::bbl_auth_handle_request(const std::string& url)
{ {
BOOST_LOG_TRIVIAL(info) << "thirdparty_login: get_response"; BOOST_LOG_TRIVIAL(info) << "thirdparty_login: get_response";
std::stringstream ssOut;
std::string url_str = Http::url_decode(url); if (boost::contains(url, "access_token")) {
if (boost::contains(url_str, "access_token")) { std::string redirect_url = url_get_param(url, "redirect_url");
std::string sHTML = "<html><body><p>redirect to url </p></body></html>"; std::string access_token = url_get_param(url, "access_token");
std::string redirect_url = parse_params(url_str, "redirect_url"); std::string refresh_token = url_get_param(url, "refresh_token");
std::string access_token = parse_params(url_str, "access_token"); std::string expires_in_str = url_get_param(url, "expires_in");
std::string refresh_token = parse_params(url_str, "refresh_token"); std::string refresh_expires_in_str = url_get_param(url, "refresh_expires_in");
std::string expires_in_str = parse_params(url_str, "expires_in"); NetworkAgent* agent = wxGetApp().getAgent();
std::string refresh_expires_in_str = parse_params(url_str, "refresh_expires_in");
NetworkAgent* agent = wxGetApp().getAgent();
unsigned int http_code; unsigned int http_code;
std::string http_body; std::string http_body;
int result = agent->get_my_profile(access_token, &http_code, &http_body); int result = agent->get_my_profile(access_token, &http_code, &http_body);
if (result == 0) { if (result == 0) {
std::string user_id; std::string user_id;
std::string user_name; std::string user_name;
@ -60,91 +204,50 @@ std::string http_headers::get_response()
; ;
} }
json j; json j;
j["data"]["refresh_token"] = refresh_token; j["data"]["refresh_token"] = refresh_token;
j["data"]["token"] = access_token; j["data"]["token"] = access_token;
j["data"]["expires_in"] = expires_in_str; j["data"]["expires_in"] = expires_in_str;
j["data"]["refresh_expires_in"] = refresh_expires_in_str; j["data"]["refresh_expires_in"] = refresh_expires_in_str;
j["data"]["user"]["uid"] = user_id; j["data"]["user"]["uid"] = user_id;
j["data"]["user"]["name"] = user_name; j["data"]["user"]["name"] = user_name;
j["data"]["user"]["account"] = user_account; j["data"]["user"]["account"] = user_account;
j["data"]["user"]["avatar"] = user_avatar; j["data"]["user"]["avatar"] = user_avatar;
agent->change_user(j.dump()); agent->change_user(j.dump());
if (agent->is_user_login()) { if (agent->is_user_login()) {
wxGetApp().request_user_login(1); wxGetApp().request_user_login(1);
} }
GUI::wxGetApp().CallAfter([this] { GUI::wxGetApp().CallAfter([] { wxGetApp().ShowUserLogin(false); });
wxGetApp().ShowUserLogin(false); std::string location_str = (boost::format("%1%?result=success") % redirect_url).str();
}); return std::make_shared<ResponseRedirect>(location_str);
std::string location_str = (boost::format("Location: %1%?result=success") % redirect_url).str();
ssOut << "HTTP/1.1 302 Found" << std::endl;
ssOut << location_str << std::endl;
ssOut << "content-type: text/html" << std::endl;
ssOut << "content-length: " << sHTML.length() << std::endl;
ssOut << std::endl;
ssOut << sHTML;
} else { } else {
std::string error_str = "get_user_profile_error_" + std::to_string(result); std::string error_str = "get_user_profile_error_" + std::to_string(result);
std::string location_str = (boost::format("Location: %1%?result=fail&error=%2%") % redirect_url % error_str).str(); std::string location_str = (boost::format("%1%?result=fail&error=%2%") % redirect_url % error_str).str();
ssOut << "HTTP/1.1 302 Found" << std::endl; return std::make_shared<ResponseRedirect>(location_str);
ssOut << location_str << std::endl;
ssOut << "content-type: text/html" << std::endl;
ssOut << "content-length: " << sHTML.length() << std::endl;
ssOut << std::endl;
ssOut << sHTML;
} }
} else { } else {
std::string sHTML = "<html><body><h1>404 Not Found</h1><p>There's nothing here.</p></body></html>"; return std::make_shared<ResponseNotFound>();
ssOut << "HTTP/1.1 404 Not Found" << std::endl;
ssOut << "content-type: text/html" << std::endl;
ssOut << "content-length: " << sHTML.length() << std::endl;
ssOut << std::endl;
ssOut << sHTML;
} }
return ssOut.str();
} }
void HttpServer::ResponseNotFound::write_response(std::stringstream& ssOut)
void accept_and_run(boost::asio::ip::tcp::acceptor& acceptor, boost::asio::io_service& io_service)
{ {
std::shared_ptr<session> sesh = std::make_shared<session>(io_service); const std::string sHTML = "<html><body><h1>404 Not Found</h1><p>There's nothing here.</p></body></html>";
acceptor.async_accept(sesh->socket, ssOut << "HTTP/1.1 404 Not Found" << std::endl;
[sesh, &acceptor, &io_service](const boost::beast::error_code& accept_error) ssOut << "content-type: text/html" << std::endl;
{ ssOut << "content-length: " << sHTML.length() << std::endl;
accept_and_run(acceptor, io_service); ssOut << std::endl;
if (!accept_error) ssOut << sHTML;
{
session::interact(sesh);
}
});
} }
HttpServer::HttpServer() void HttpServer::ResponseRedirect::write_response(std::stringstream& ssOut)
{ {
; const std::string sHTML = "<html><body><p>redirect to url </p></body></html>";
} ssOut << "HTTP/1.1 302 Found" << std::endl;
ssOut << "Location: " << location_str << std::endl;
void HttpServer::start() ssOut << "content-type: text/html" << std::endl;
{ ssOut << "content-length: " << sHTML.length() << std::endl;
BOOST_LOG_TRIVIAL(info) << "start_http_service..."; ssOut << std::endl;
start_http_server = true; ssOut << sHTML;
m_http_server_thread = Slic3r::create_thread(
[this] {
boost::asio::io_service io_service;
boost::asio::ip::tcp::endpoint endpoint{ boost::asio::ip::tcp::v4(), LOCALHOST_PORT};
boost::asio::ip::tcp::acceptor acceptor { io_service, endpoint};
acceptor.listen();
accept_and_run(acceptor, io_service);
while (start_http_server) {
io_service.run();
}
});
}
void HttpServer::stop()
{
start_http_server = false;
if (m_http_server_thread.joinable())
m_http_server_thread.join();
} }
} // GUI } // GUI

View file

@ -13,14 +13,12 @@
#include <string> #include <string>
#include <memory> #include <memory>
using namespace boost::system;
using namespace boost::asio;
#define LOCALHOST_PORT 13618 #define LOCALHOST_PORT 13618
#define LOCALHOST_URL "http://localhost:" #define LOCALHOST_URL "http://localhost:"
namespace Slic3r { namespace Slic3r { namespace GUI {
namespace GUI {
class session;
class http_headers class http_headers
{ {
@ -31,16 +29,14 @@ class http_headers
std::map<std::string, std::string> headers; std::map<std::string, std::string> headers;
public: public:
std::string get_url() { return url; }
std::string get_response();
int content_length() int content_length()
{ {
auto request = headers.find("content-length"); auto request = headers.find("content-length");
if (request != headers.end()) if (request != headers.end()) {
{
std::stringstream ssLength(request->second); std::stringstream ssLength(request->second);
int content_length; int content_length;
ssLength >> content_length; ssLength >> content_length;
return content_length; return content_length;
} }
@ -49,10 +45,10 @@ public:
void on_read_header(std::string line) void on_read_header(std::string line)
{ {
//std::cout << "header: " << line << std::endl; // std::cout << "header: " << line << std::endl;
std::stringstream ssHeader(line); std::stringstream ssHeader(line);
std::string headerName; std::string headerName;
std::getline(ssHeader, headerName, ':'); std::getline(ssHeader, headerName, ':');
std::string value; std::string value;
@ -71,92 +67,92 @@ public:
} }
}; };
class session class HttpServer
{ {
boost::asio::ip::port_type port;
public:
class Response
{
public:
virtual ~Response() = default;
virtual void write_response(std::stringstream& ssOut) = 0;
};
class ResponseNotFound : public Response
{
public:
~ResponseNotFound() override = default;
void write_response(std::stringstream& ssOut) override;
};
class ResponseRedirect : public Response
{
const std::string location_str;
public:
ResponseRedirect(const std::string& location) : location_str(location) {}
~ResponseRedirect() override = default;
void write_response(std::stringstream& ssOut) override;
};
HttpServer(boost::asio::ip::port_type port = LOCALHOST_PORT);
boost::thread m_http_server_thread;
bool start_http_server = false;
bool is_started() { return start_http_server; }
void start();
void stop();
void set_request_handler(const std::function<std::shared_ptr<Response>(const std::string&)>& m_request_handler);
static std::shared_ptr<Response> bbl_auth_handle_request(const std::string& url);
private:
class IOServer
{
public:
HttpServer& server;
boost::asio::io_service io_service;
boost::asio::ip::tcp::acceptor acceptor;
std::set<std::shared_ptr<session>> sessions;
IOServer(HttpServer& server) : server(server), acceptor(io_service, {boost::asio::ip::tcp::v4(), server.port}) {}
void do_accept();
void start(std::shared_ptr<session> session);
void stop(std::shared_ptr<session> session);
void stop_all();
};
friend class session;
std::unique_ptr<IOServer> server_{nullptr};
std::function<std::shared_ptr<Response>(const std::string&)> m_request_handler{&HttpServer::bbl_auth_handle_request};
};
class session : public std::enable_shared_from_this<session>
{
HttpServer::IOServer& server;
boost::asio::ip::tcp::socket socket;
boost::asio::streambuf buff; boost::asio::streambuf buff;
http_headers headers; http_headers headers;
static void read_body(std::shared_ptr<session> pThis) void read_first_line();
{ void read_next_line();
int nbuffer = 1000; void read_body();
std::shared_ptr<std::vector<char>> bufptr = std::make_shared<std::vector<char>>(nbuffer);
boost::asio::async_read(pThis->socket, boost::asio::buffer(*bufptr, nbuffer), [pThis](const boost::beast::error_code& e, std::size_t s)
{
});
}
static void read_next_line(std::shared_ptr<session> pThis)
{
boost::asio::async_read_until(pThis->socket, pThis->buff, '\r', [pThis](const boost::beast::error_code& e, std::size_t s)
{
std::string line, ignore;
std::istream stream{ &pThis->buff };
std::getline(stream, line, '\r');
std::getline(stream, ignore, '\n');
pThis->headers.on_read_header(line);
if (line.length() == 0)
{
if (pThis->headers.content_length() == 0)
{
std::shared_ptr<std::string> str = std::make_shared<std::string>(pThis->headers.get_response());
boost::asio::async_write(pThis->socket, boost::asio::buffer(str->c_str(), str->length()), [pThis, str](const boost::beast::error_code& e, std::size_t s)
{
std::cout << "done" << std::endl;
});
}
else
{
pThis->read_body(pThis);
}
}
else
{
pThis->read_next_line(pThis);
}
});
}
static void read_first_line(std::shared_ptr<session> pThis)
{
boost::asio::async_read_until(pThis->socket, pThis->buff, '\r', [pThis](const boost::beast::error_code& e, std::size_t s)
{
std::string line, ignore;
std::istream stream{ &pThis->buff };
std::getline(stream, line, '\r');
std::getline(stream, ignore, '\n');
pThis->headers.on_read_request_line(line);
pThis->read_next_line(pThis);
});
}
public: public:
boost::asio::ip::tcp::socket socket; session(HttpServer::IOServer& server, boost::asio::ip::tcp::socket socket) : server(server), socket(std::move(socket)) {}
session(io_service& io_service) void start();
:socket(io_service) void stop();
{
}
static void interact(std::shared_ptr<session> pThis)
{
read_first_line(pThis);
}
}; };
class HttpServer { std::string url_get_param(const std::string& url, const std::string& key);
public:
HttpServer();
boost::thread m_http_server_thread; }};
bool start_http_server = false;
bool is_started() { return start_http_server; }
void start();
void stop();
};
}
};
#endif #endif

View file

@ -0,0 +1,124 @@
#include "OAuthJob.hpp"
#include "Http.hpp"
#include "ThreadSafeQueue.hpp"
#include "slic3r/GUI/I18N.hpp"
#include "nlohmann/json.hpp"
namespace Slic3r {
namespace GUI {
wxDEFINE_EVENT(EVT_OAUTH_COMPLETE_MESSAGE, wxCommandEvent);
OAuthJob::OAuthJob(const OAuthData& input) : local_authorization_server(input.params.callback_port), _data(input) {}
void OAuthJob::parse_token_response(const std::string& body, bool error, OAuthResult& result)
{
const auto j = nlohmann::json::parse(body, nullptr, false, true);
if (j.is_discarded()) {
BOOST_LOG_TRIVIAL(warning) << "Invalid or no JSON data on token response: " << body;
result.error_message = _u8L("Unknown error");
} else if (error) {
if (j.contains("error_description")) {
j.at("error_description").get_to(result.error_message);
} else {
result.error_message = _u8L("Unknown error");
}
} else {
j.at("access_token").get_to(result.access_token);
j.at("refresh_token").get_to(result.refresh_token);
result.success = true;
}
}
void OAuthJob::process(Ctl& ctl)
{
// Prepare auth process
ThreadSafeQueueSPSC<OAuthResult> queue;
// Setup auth server to receive OAuth code from callback url
local_authorization_server.set_request_handler([this, &queue](const std::string& url) -> std::shared_ptr<HttpServer::Response> {
if (boost::contains(url, "/callback")) {
const auto code = url_get_param(url, "code");
const auto state = url_get_param(url, "state");
const auto handle_auth_fail = [this, &queue](const std::string& message) -> std::shared_ptr<HttpServer::ResponseRedirect> {
queue.push(OAuthResult{false, message});
return std::make_shared<HttpServer::ResponseRedirect>(this->_data.params.auth_fail_redirect_url);
};
if (state != _data.params.state) {
BOOST_LOG_TRIVIAL(warning) << "The provided state was not correct. Got " << state << " and expected " << _data.params.state;
return handle_auth_fail(_u8L("The provided state is not correct."));
}
if (code.empty()) {
const auto error_code = url_get_param(url, "error_code");
if (error_code == "user_denied") {
BOOST_LOG_TRIVIAL(debug) << "User did not give the required permission when authorizing this application";
return handle_auth_fail(_u8L("Please give the required permissions when authorizing this application."));
}
BOOST_LOG_TRIVIAL(warning) << "Unexpected error when logging in. Error_code: " << error_code << ", State: " << state;
return handle_auth_fail(_u8L("Something unexpected happened when trying to log in, please try again."));
}
OAuthResult r;
// Request the access token from the authorization server.
auto http = Http::post(_data.params.token_url);
http.timeout_connect(5)
.timeout_max(5)
.form_add("client_id", _data.params.client_id)
.form_add("redirect_uri", _data.params.callback_url)
.form_add("grant_type", "authorization_code")
.form_add("code", code)
.form_add("code_verifier", _data.params.verification_code)
.form_add("scope", _data.params.scope)
.on_complete([&](std::string body, unsigned status) { parse_token_response(body, false, r); })
.on_error([&](std::string body, std::string error, unsigned status) { parse_token_response(body, true, r); })
.perform_sync();
queue.push(r);
return std::make_shared<HttpServer::ResponseRedirect>(r.success ? _data.params.auth_success_redirect_url :
_data.params.auth_fail_redirect_url);
} else {
queue.push(OAuthResult{false});
return std::make_shared<HttpServer::ResponseNotFound>();
}
});
// Run the local server
local_authorization_server.start();
// Wait until we received the result
bool received = false;
while (!ctl.was_canceled() && !received ) {
queue.consume_one(BlockingWait{1000}, [this, &received](const OAuthResult& result) {
*_data.result = result;
received = true;
});
}
// Handle timeout
if (!received && !ctl.was_canceled()) {
BOOST_LOG_TRIVIAL(debug) << "Timeout when authenticating with the account server.";
_data.result->error_message = _u8L("Timeout when authenticating with the account server.");
} else if (ctl.was_canceled()) {
_data.result->error_message = _u8L("User cancelled.");
}
}
void OAuthJob::finalize(bool canceled, std::exception_ptr& e)
{
// Make sure it's stopped
local_authorization_server.stop();
wxCommandEvent event(EVT_OAUTH_COMPLETE_MESSAGE);
event.SetEventObject(m_event_handle);
wxPostEvent(m_event_handle, event);
}
}} // namespace Slic3r::GUI

View file

@ -0,0 +1,62 @@
#ifndef __OAuthJob_HPP__
#define __OAuthJob_HPP__
#include "Job.hpp"
#include "slic3r/GUI/HttpServer.hpp"
namespace Slic3r {
namespace GUI {
class Plater;
struct OAuthParams
{
std::string login_url;
std::string client_id;
boost::asio::ip::port_type callback_port;
std::string callback_url;
std::string scope;
std::string response_type;
std::string auth_success_redirect_url;
std::string auth_fail_redirect_url;
std::string token_url;
std::string verification_code;
std::string state;
};
struct OAuthResult
{
bool success{false};
std::string error_message{""};
std::string access_token{""};
std::string refresh_token{""};
};
struct OAuthData
{
OAuthParams params;
std::shared_ptr<OAuthResult> result;
};
class OAuthJob : public Job
{
HttpServer local_authorization_server;
OAuthData _data;
wxWindow* m_event_handle{nullptr};
public:
explicit OAuthJob(const OAuthData& input);
void process(Ctl& ctl) override;
void finalize(bool canceled, std::exception_ptr& e) override;
void set_event_handle(wxWindow* hanle) { m_event_handle = hanle; }
static void parse_token_response(const std::string& body, bool error, OAuthResult& result);
};
wxDECLARE_EVENT(EVT_OAUTH_COMPLETE_MESSAGE, wxCommandEvent);
}} // namespace Slic3r::GUI
#endif // OAUTHJOB_HPP

View file

@ -562,7 +562,7 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_
m_print_enable = get_enable_print_status(); m_print_enable = get_enable_print_status();
m_print_btn->Enable(m_print_enable); m_print_btn->Enable(m_print_enable);
if (m_print_enable) { if (m_print_enable) {
if (wxGetApp().preset_bundle->is_bbl_vendor()) if (wxGetApp().preset_bundle->use_bbl_network())
wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_PRINT_PLATE)); wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_PRINT_PLATE));
else else
wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_SEND_GCODE)); wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_SEND_GCODE));
@ -989,30 +989,6 @@ void MainFrame::init_tabpanel() {
m_tabpanel->Hide(); m_tabpanel->Hide();
m_settings_dialog.set_tabpanel(m_tabpanel); m_settings_dialog.set_tabpanel(m_tabpanel);
m_tabpanel->Bind(wxEVT_NOTEBOOK_PAGE_CHANGING, [this](wxBookCtrlEvent &e) {
int old_sel = e.GetOldSelection();
int new_sel = e.GetSelection();
if (wxGetApp().preset_bundle && wxGetApp().preset_bundle->is_bbl_vendor() && new_sel == tpMonitor) {
if (!wxGetApp().getAgent()) {
e.Veto();
BOOST_LOG_TRIVIAL(info) << boost::format("skipped tab switch from %1% to %2%, lack of network plugins") % old_sel % new_sel;
if (m_plater) {
wxCommandEvent *evt = new wxCommandEvent(EVT_INSTALL_PLUGIN_HINT);
wxQueueEvent(m_plater, evt);
}
}
} else {
if (new_sel == tpMonitor && wxGetApp().preset_bundle != nullptr) {
auto cfg = wxGetApp().preset_bundle->printers.get_edited_preset().config;
wxString url = cfg.opt_string("print_host_webui").empty() ? cfg.opt_string("print_host") : cfg.opt_string("print_host_webui");
if (url.empty()) {
wxString url = wxString::Format("file://%s/web/orca/missing_connection.html", from_u8(resources_dir()));
m_printer_view->load_url(url);
}
}
}
});
#ifdef __WXMSW__ #ifdef __WXMSW__
m_tabpanel->Bind(wxEVT_BOOKCTRL_PAGE_CHANGED, [this](wxBookCtrlEvent& e) { m_tabpanel->Bind(wxEVT_BOOKCTRL_PAGE_CHANGED, [this](wxBookCtrlEvent& e) {
#else #else
@ -1624,7 +1600,7 @@ wxBoxSizer* MainFrame::create_side_tools()
SidePopup* p = new SidePopup(this); SidePopup* p = new SidePopup(this);
if (wxGetApp().preset_bundle if (wxGetApp().preset_bundle
&& !wxGetApp().preset_bundle->is_bbl_vendor()) { && !wxGetApp().preset_bundle->use_bbl_network()) {
// ThirdParty Buttons // ThirdParty Buttons
SideButton* export_gcode_btn = new SideButton(p, _L("Export G-code file"), ""); SideButton* export_gcode_btn = new SideButton(p, _L("Export G-code file"), "");
export_gcode_btn->SetCornerRadius(0); export_gcode_btn->SetCornerRadius(0);
@ -3608,7 +3584,7 @@ void MainFrame::load_printer_url(wxString url, wxString apikey)
void MainFrame::load_printer_url() void MainFrame::load_printer_url()
{ {
PresetBundle &preset_bundle = *wxGetApp().preset_bundle; PresetBundle &preset_bundle = *wxGetApp().preset_bundle;
if (preset_bundle.is_bbl_vendor()) if (preset_bundle.use_bbl_network())
return; return;
auto cfg = preset_bundle.printers.get_edited_preset().config; auto cfg = preset_bundle.printers.get_edited_preset().config;

View file

@ -93,7 +93,7 @@ wxBoxSizer* NetworkTestDialog::create_info_sizer(wxWindow* parent)
sizer->Add(text_basic_info, 0, wxALL, 5); sizer->Add(text_basic_info, 0, wxALL, 5);
wxBoxSizer* version_sizer = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer* version_sizer = new wxBoxSizer(wxHORIZONTAL);
text_version_title = new wxStaticText(this, wxID_ANY, _L("Studio Version:"), wxDefaultPosition, wxDefaultSize, 0); text_version_title = new wxStaticText(this, wxID_ANY, _L("OrcaSlicer Version:"), wxDefaultPosition, wxDefaultSize, 0);
text_version_title->Wrap(-1); text_version_title->Wrap(-1);
version_sizer->Add(text_version_title, 0, wxALL, 5); version_sizer->Add(text_version_title, 0, wxALL, 5);
@ -139,11 +139,11 @@ wxBoxSizer* NetworkTestDialog::create_content_sizer(wxWindow* parent)
grid_sizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED); grid_sizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED);
StateColor btn_bg(std::pair<wxColour, int>(wxColour(0, 137, 123), StateColor::Pressed),std::pair<wxColour, int>(wxColour(38, 166, 154), StateColor::Hovered), std::pair<wxColour, int>(wxColour(255,255,255), StateColor::Enabled)); StateColor btn_bg(std::pair<wxColour, int>(wxColour(0, 137, 123), StateColor::Pressed),std::pair<wxColour, int>(wxColour(38, 166, 154), StateColor::Hovered), std::pair<wxColour, int>(wxColour(255,255,255), StateColor::Enabled));
btn_link = new Button(this, _L("Test BambuLab")); btn_link = new Button(this, _L("Test OrcaSlicer(GitHub)"));
btn_link->SetBackgroundColor(btn_bg); btn_link->SetBackgroundColor(btn_bg);
grid_sizer->Add(btn_link, 0, wxEXPAND | wxALL, 5); grid_sizer->Add(btn_link, 0, wxEXPAND | wxALL, 5);
text_link_title = new wxStaticText(this, wxID_ANY, _L("Test BambuLab:"), wxDefaultPosition, wxDefaultSize, 0); text_link_title = new wxStaticText(this, wxID_ANY, _L("Test OrcaSlicer(GitHub):"), wxDefaultPosition, wxDefaultSize, 0);
text_link_title->Wrap(-1); text_link_title->Wrap(-1);
grid_sizer->Add(text_link_title, 0, wxALIGN_RIGHT | wxALL, 5); grid_sizer->Add(text_link_title, 0, wxALIGN_RIGHT | wxALL, 5);
@ -163,114 +163,16 @@ wxBoxSizer* NetworkTestDialog::create_content_sizer(wxWindow* parent)
text_bing_val = new wxStaticText(this, wxID_ANY, _L("N/A"), wxDefaultPosition, wxDefaultSize, 0); text_bing_val = new wxStaticText(this, wxID_ANY, _L("N/A"), wxDefaultPosition, wxDefaultSize, 0);
text_bing_val->Wrap(-1); text_bing_val->Wrap(-1);
grid_sizer->Add(text_bing_val, 0, wxALL, 5); grid_sizer->Add(text_bing_val, 0, wxALL, 5);
btn_iot = new Button(this, _L("Test HTTP"));
btn_iot->SetBackgroundColor(btn_bg);
grid_sizer->Add(btn_iot, 0, wxEXPAND | wxALL, 5);
text_iot_title = new wxStaticText(this, wxID_ANY, _L("Test HTTP Service:"), wxDefaultPosition, wxDefaultSize, 0);
text_iot_title->Wrap(-1);
grid_sizer->Add(text_iot_title, 0, wxALIGN_RIGHT | wxALL, 5);
text_iot_value = new wxStaticText(this, wxID_ANY, _L("N/A"), wxDefaultPosition, wxDefaultSize, 0);
text_iot_value->Wrap(-1);
grid_sizer->Add(text_iot_value, 0, wxALL, 5);
btn_oss = new Button(this, _L("Test storage"));
btn_oss->SetBackgroundColor(btn_bg);
grid_sizer->Add(btn_oss, 0, wxEXPAND | wxALL, 5);
text_oss_title = new wxStaticText(this, wxID_ANY, _L("Test Storage Upload:"), wxDefaultPosition, wxDefaultSize, 0);
text_oss_title->Wrap(-1);
grid_sizer->Add(text_oss_title, 0, wxALIGN_RIGHT | wxALL, 5);
text_oss_value = new wxStaticText(this, wxID_ANY, _L("N/A"), wxDefaultPosition, wxDefaultSize, 0);
text_oss_value->Wrap(-1);
grid_sizer->Add(text_oss_value, 0, wxALL, 5);
btn_oss_upgrade = new Button(this, _L("Test storage upgrade"));
btn_oss_upgrade->SetBackgroundColor(btn_bg);
grid_sizer->Add(btn_oss_upgrade, 0, wxEXPAND | wxALL, 5);
text_oss_upgrade_title = new wxStaticText(this, wxID_ANY, _L("Test Storage Upgrade:"), wxDefaultPosition, wxDefaultSize, 0);
text_oss_upgrade_title->Wrap(-1);
grid_sizer->Add(text_oss_upgrade_title, 0, wxALIGN_RIGHT | wxALL, 5);
text_oss_upgrade_value = new wxStaticText(this, wxID_ANY, _L("N/A"), wxDefaultPosition, wxDefaultSize, 0);
text_oss_upgrade_value->Wrap(-1);
grid_sizer->Add(text_oss_upgrade_value, 0, wxALL, 5);
btn_oss_download = new Button(this, _L("Test storage download"));
btn_oss_download->SetBackgroundColor(btn_bg);
grid_sizer->Add(btn_oss_download, 0, wxEXPAND | wxALL, 5);
text_oss_download_title = new wxStaticText(this, wxID_ANY, _L("Test Storage Download:"), wxDefaultPosition, wxDefaultSize, 0);
text_oss_download_title->Wrap(-1);
grid_sizer->Add(text_oss_download_title, 0, wxALIGN_RIGHT | wxALL, 5);
text_oss_download_value = new wxStaticText(this, wxID_ANY, _L("N/A"), wxDefaultPosition, wxDefaultSize, 0);
text_oss_download_value->Wrap(-1);
grid_sizer->Add(text_oss_download_value, 0, wxALL, 5);
btn_network_plugin=new Button(this, _L("Test plugin download"));
btn_network_plugin->SetBackgroundColor(btn_bg);
grid_sizer->Add(btn_network_plugin, 0, wxEXPAND | wxALL, 5);
text_network_plugin_title=new wxStaticText(this, wxID_ANY, _L("Test Plugin Download:"), wxDefaultPosition, wxDefaultSize, 0);
text_network_plugin_title->Wrap(-1);
grid_sizer->Add(text_network_plugin_title, 0, wxALIGN_RIGHT | wxALL, 5);
text_network_plugin_value=new wxStaticText(this, wxID_ANY, _L("N/A"), wxDefaultPosition, wxDefaultSize, 0);
text_network_plugin_value->Wrap(-1);
grid_sizer->Add(text_network_plugin_value, 0, wxALL, 5);
btn_oss_upload = new Button(this, _L("Test Storage Upload"));
btn_oss_upload->SetBackgroundColor(btn_bg);
grid_sizer->Add(btn_oss_upload, 0, wxEXPAND | wxALL, 5);
text_oss_upload_title = new wxStaticText(this, wxID_ANY, _L("Test Storage Upload:"), wxDefaultPosition, wxDefaultSize, 0);
text_oss_upload_title->Wrap(-1);
grid_sizer->Add(text_oss_upload_title, 0, wxALIGN_RIGHT | wxALL, 5);
text_oss_upload_value = new wxStaticText(this, wxID_ANY, _L("N/A"), wxDefaultPosition, wxDefaultSize, 0);
text_oss_upload_value->Wrap(-1);
grid_sizer->Add(text_oss_upload_value, 0, wxALL, 5);
btn_oss_upload->Hide();
text_oss_upload_title->Hide();
text_oss_upload_value->Hide();
sizer->Add(grid_sizer, 1, wxEXPAND, 5); sizer->Add(grid_sizer, 1, wxEXPAND, 5);
btn_link->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) { btn_link->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) {
start_test_bambulab_thread(); start_test_github_thread();
}); });
btn_bing->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) { btn_bing->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) {
start_test_bing_thread(); start_test_bing_thread();
}); });
btn_iot->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) {
start_test_iot_thread();
});
btn_oss->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) {
start_test_oss_thread();
});
btn_oss_upgrade->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) {
start_test_oss_upgrade_thread();
});
btn_oss_download->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) {
start_test_oss_download_thread();
});
btn_network_plugin->Bind(wxEVT_BUTTON, [this](wxCommandEvent &evt) {
start_test_plugin_download_thread();
});
return sizer; return sizer;
} }
wxBoxSizer* NetworkTestDialog::create_result_sizer(wxWindow* parent) wxBoxSizer* NetworkTestDialog::create_result_sizer(wxWindow* parent)
@ -293,23 +195,11 @@ NetworkTestDialog::~NetworkTestDialog()
void NetworkTestDialog::init_bind() void NetworkTestDialog::init_bind()
{ {
Bind(EVT_UPDATE_RESULT, [this](wxCommandEvent& evt) { Bind(EVT_UPDATE_RESULT, [this](wxCommandEvent& evt) {
if (evt.GetInt() == TEST_BAMBULAB_JOB) { if (evt.GetInt() == TEST_ORCA_JOB) {
text_link_val->SetLabelText(evt.GetString()); text_link_val->SetLabelText(evt.GetString());
} else if (evt.GetInt() == TEST_BING_JOB) { } else if (evt.GetInt() == TEST_BING_JOB) {
text_bing_val->SetLabelText(evt.GetString()); text_bing_val->SetLabelText(evt.GetString());
} else if (evt.GetInt() == TEST_IOT_JOB) { }
text_iot_value->SetLabelText(evt.GetString());
} else if (evt.GetInt() == TEST_OSS_JOB) {
text_oss_value->SetLabelText(evt.GetString());
} else if (evt.GetInt() == TEST_OSS_UPGRADE_JOB) {
text_oss_upgrade_value->SetLabelText(evt.GetString());
} else if (evt.GetInt() == TEST_OSS_DOWNLOAD_JOB) {
text_oss_download_value->SetLabelText(evt.GetString());
} else if (evt.GetInt() == TEST_OSS_UPLOAD_JOB) {
text_oss_upload_value->SetLabelText(evt.GetString());
} else if (evt.GetInt() == TEST_PLUGIN_JOB){
text_network_plugin_value->SetLabelText(evt.GetString());
}
std::time_t t = std::time(0); std::time_t t = std::time(0);
std::tm* now_time = std::localtime(&t); std::tm* now_time = std::localtime(&t);
@ -350,46 +240,35 @@ wxString NetworkTestDialog::get_dns_info()
void NetworkTestDialog::start_all_job() void NetworkTestDialog::start_all_job()
{ {
start_test_bambulab_thread(); start_test_github_thread();
start_test_bing_thread(); start_test_bing_thread();
start_test_iot_thread();
start_test_oss_thread();
start_test_oss_upgrade_thread();
start_test_oss_download_thread();
start_test_plugin_download_thread();
start_test_ping_thread();
} }
void NetworkTestDialog::start_all_job_sequence() void NetworkTestDialog::start_all_job_sequence()
{ {
m_sequence_job = new boost::thread([this] { m_sequence_job = new boost::thread([this] {
update_status(-1, "start_test_sequence"); update_status(-1, "start_test_sequence");
start_test_bing(); start_test_url(TEST_BING_JOB, "Bing", "http://www.bing.com");
if (m_closing) return;
start_test_url(TEST_ORCA_JOB, "OrcaSlicer(GitHub)", "https://github.com/SoftFever/OrcaSlicer");
if (m_closing) return; if (m_closing) return;
start_test_bambulab();
if (m_closing) return;
start_test_oss();
if (m_closing) return;
start_test_oss_upgrade();
if (m_closing) return;
start_test_oss_download();
if (m_closing) return;
start_test_plugin_download();
update_status(-1, "end_test_sequence"); update_status(-1, "end_test_sequence");
}); });
} }
void NetworkTestDialog::start_test_bing() void NetworkTestDialog::start_test_url(TestJob job, wxString name, wxString url)
{ {
m_in_testing[TEST_BING_JOB] = true; m_in_testing[job] = true;
update_status(TEST_BING_JOB, "test bing start..."); wxString info = wxString::Format("test %s start...", name);
std::string url = "http://www.bing.com/"; update_status(job, info);
Slic3r::Http http = Slic3r::Http::get(url);
update_status(-1, "[test_bing]: url=" + url);
int result = -1; Slic3r::Http http = Slic3r::Http::get(url.ToStdString());
info = wxString::Format("[test %s]: url=%s", name,url);
update_status(-1, info);
int result = -1;
http.timeout_max(10) http.timeout_max(10)
.on_complete([this, &result](std::string body, unsigned status) { .on_complete([this, &result](std::string body, unsigned status) {
try { try {
@ -401,477 +280,19 @@ void NetworkTestDialog::start_test_bing()
; ;
} }
}) })
.on_ip_resolve([this](std::string ip) { .on_ip_resolve([this,name,job](std::string ip) {
wxString ip_report = wxString::Format("test bing ip resolved = %s", ip); wxString ip_report = wxString::Format("test %s ip resolved = %s", name, ip);
update_status(TEST_BING_JOB, ip_report); update_status(job, ip_report);
}) })
.on_error([this](std::string body, std::string error, unsigned int status) { .on_error([this,name,job](std::string body, std::string error, unsigned int status) {
wxString info = wxString::Format("status=%u, body=%s, error=%s", status, body, error); wxString info = wxString::Format("status=%u, body=%s, error=%s", status, body, error);
this->update_status(TEST_BING_JOB, "test bing failed"); this->update_status(job, wxString::Format("test %s failed", name));
this->update_status(-1, info); this->update_status(-1, info);
}).perform_sync(); }).perform_sync();
if (result == 0) { if (result == 0) {
update_status(TEST_BING_JOB, "test bing ok"); update_status(job, wxString::Format("test %s ok", name));
}
m_in_testing[TEST_BING_JOB] = false;
}
void NetworkTestDialog::start_test_bambulab()
{
m_in_testing[TEST_BAMBULAB_JOB] = true;
update_status(TEST_BAMBULAB_JOB, "test bambulab start...");
std::string platform = "windows";
#ifdef __WINDOWS__
platform = "windows";
#endif
#ifdef __APPLE__
platform = "macos";
#endif
#ifdef __LINUX__
platform = "linux";
#endif
std::string query_params = (boost::format("?name=slicer&version=%1%&guide_version=%2%")
% VersionInfo::convert_full_version(SLIC3R_VERSION)
% VersionInfo::convert_full_version("0.0.0.1")
).str();
AppConfig* app_config = wxGetApp().app_config;
std::string url = wxGetApp().get_http_url(app_config->get_country_code()) + query_params;
Slic3r::Http http = Slic3r::Http::get(url);
update_status(-1, "[test_bambulab]: url=" + url);
int result = -1;
http.header("accept", "application/json")
.timeout_max(10)
.on_complete([this, &result](std::string body, unsigned status) {
try {
if (status == 200) {
result = 0;
}
}
catch (...) {
;
}
})
.on_ip_resolve([this](std::string ip) {
wxString ip_report = wxString::Format("test bambulab ip resolved = %s", ip);
update_status(TEST_BAMBULAB_JOB, ip_report);
})
.on_error([this](std::string body, std::string error, unsigned int status) {
wxString info = wxString::Format("status=%u, body=%s, error=%s", status, body, error);
this->update_status(TEST_BAMBULAB_JOB, "test bambulab failed");
this->update_status(-1, info);
}).perform_sync();
if (result == 0) {
update_status(TEST_BAMBULAB_JOB, "test bambulab ok");
}
m_in_testing[TEST_BAMBULAB_JOB] = false;
}
void NetworkTestDialog::start_test_iot()
{
m_in_testing[TEST_IOT_JOB] = true;
update_status(TEST_IOT_JOB, "test http start...");
NetworkAgent* agent = wxGetApp().getAgent();
if (agent) {
unsigned int http_code;
std::string http_body;
if (!agent->is_user_login()) {
update_status(TEST_IOT_JOB, "please login first");
} else {
int result = agent->get_user_print_info(&http_code, &http_body);
if (result == 0) {
update_status(TEST_IOT_JOB, "test http ok");
} else {
update_status(TEST_IOT_JOB, "test http failed");
wxString info = wxString::Format("test http failed, status = %u, error = %s", http_code, http_body);
update_status(-1, info);
}
}
} else {
update_status(TEST_IOT_JOB, "please install network module first");
}
m_in_testing[TEST_IOT_JOB] = false;
}
void NetworkTestDialog::start_test_oss()
{
m_in_testing[TEST_OSS_JOB] = true;
update_status(TEST_OSS_JOB, "test storage start...");
std::string url = "http://upload-file.bambulab.com";
AppConfig* config = wxGetApp().app_config;
if (config) {
if (config->get_country_code() == "CN")
url = "http://upload-file.bambulab.cn";
}
Slic3r::Http http = Slic3r::Http::get(url);
update_status(-1, "[test_oss]: url=" + url);
int result = -1;
http.timeout_max(15)
.on_complete([this, &result](std::string body, unsigned status) {
try {
if (status == 200) {
result = 0;
}
}
catch (...) {
;
}
})
.on_ip_resolve([this](std::string ip) {
wxString ip_report = wxString::Format("test oss ip resolved = %s", ip);
update_status(TEST_OSS_JOB, ip_report);
})
.on_error([this, &result](std::string body, std::string error, unsigned int status) {
if (status == 403) {
result = 0;
} else {
wxString info = wxString::Format("status=%u, body=%s, error=%s", status, body, error);
this->update_status(TEST_OSS_JOB, "test storage failed");
this->update_status(-1, info);
}
}).perform_sync();
if (result == 0) {
update_status(TEST_OSS_JOB, "test storage ok");
}
m_in_testing[TEST_OSS_JOB] = false;
}
void NetworkTestDialog::start_test_oss_upgrade()
{
m_in_testing[TEST_OSS_UPGRADE_JOB] = true;
update_status(TEST_OSS_UPGRADE_JOB, "test storage upgrade start...");
std::string url = "http://upgrade-file.bambulab.com";
AppConfig* config = wxGetApp().app_config;
if (config) {
if (config->get_country_code() == "CN")
url = "http://upgrade-file.bambulab.cn";
}
Slic3r::Http http = Slic3r::Http::get(url);
update_status(-1, "[test_oss_upgrade]: url=" + url);
int result = -1;
http.timeout_max(15)
.on_complete([this, &result](std::string body, unsigned status) {
try {
if (status == 200) {
result = 0;
}
}
catch (...) {
;
}
})
.on_ip_resolve([this](std::string ip) {
wxString ip_report = wxString::Format("test storage upgrade ip resolved = %s", ip);
update_status(TEST_OSS_UPGRADE_JOB, ip_report);
})
.on_error([this, &result](std::string body, std::string error, unsigned int status) {
if (status == 403) {
result = 0;
}
else {
wxString info = wxString::Format("status=%u, body=%s, error=%s", status, body, error);
this->update_status(TEST_OSS_UPGRADE_JOB, "test storage upgrade failed");
this->update_status(-1, info);
}
}).perform_sync();
if (result == 0) {
update_status(TEST_OSS_UPGRADE_JOB, "test storage upgrade ok");
}
m_in_testing[TEST_OSS_UPGRADE_JOB] = false;
}
void NetworkTestDialog::start_test_oss_download()
{
int result = 0;
// get country_code
AppConfig* app_config = wxGetApp().app_config;
if (!app_config) {
update_status(TEST_OSS_DOWNLOAD_JOB, "app config is nullptr");
return;
}
m_in_testing[TEST_OSS_DOWNLOAD_JOB] = true;
update_status(TEST_OSS_DOWNLOAD_JOB, "test storage download start...");
m_download_cancel = false;
// get temp path
fs::path target_file_path = (fs::temp_directory_path() / "test_storage_download.zip");
fs::path tmp_path = target_file_path;
tmp_path += (boost::format(".%1%%2%") % get_current_pid() % ".tmp").str();
// get_url
std::string url = wxGetApp().get_plugin_url("plugins", app_config->get_country_code());
std::string download_url;
Slic3r::Http http_url = Slic3r::Http::get(url);
update_status(-1, "[test_oss_download]: url=" + url);
http_url.on_complete(
[&download_url](std::string body, unsigned status) {
try {
json j = json::parse(body);
std::string message = j["message"].get<std::string>();
if (message == "success") {
json resource = j.at("resources");
if (resource.is_array()) {
for (auto iter = resource.begin(); iter != resource.end(); iter++) {
Semver version;
std::string url;
std::string type;
std::string vendor;
std::string description;
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) << "[test_storage_download]: get version of settings's type, " << sub_iter.value();
}
else if (boost::iequals(sub_iter.key(), "version")) {
version = *(Semver::parse(sub_iter.value()));
}
else if (boost::iequals(sub_iter.key(), "description")) {
description = sub_iter.value();
}
else if (boost::iequals(sub_iter.key(), "url")) {
url = sub_iter.value();
}
}
BOOST_LOG_TRIVIAL(info) << "[test_storage_download]: get type " << type << ", version " << version.to_string() << ", url " << url;
download_url = url;
}
}
}
else {
BOOST_LOG_TRIVIAL(info) << "[test_storage_download]: get version of plugin failed, body=" << body;
}
}
catch (...) {
BOOST_LOG_TRIVIAL(error) << "[test_storage_download]: catch unknown exception";
;
}
}).on_error(
[&result, this](std::string body, std::string error, unsigned int status) {
BOOST_LOG_TRIVIAL(error) << "[test_storage_download] on_error: " << error << ", body = " << body;
wxString info = wxString::Format("status=%u, body=%s, error=%s", status, body, error);
this->update_status(TEST_OSS_DOWNLOAD_JOB, "test storage download failed");
this->update_status(-1, info);
result = -1;
}).perform_sync();
if (result < 0) {
this->update_status(TEST_OSS_DOWNLOAD_JOB, "test storage download failed");
m_in_testing[TEST_OSS_DOWNLOAD_JOB] = false;
return;
}
if (download_url.empty()) {
BOOST_LOG_TRIVIAL(info) << "[test_oss_download]: no availaible plugin found for this app version: " << SLIC3R_VERSION;
this->update_status(TEST_OSS_DOWNLOAD_JOB, "test storage download failed");
m_in_testing[TEST_OSS_DOWNLOAD_JOB] = false;
return;
}
if (m_download_cancel) {
this->update_status(TEST_OSS_DOWNLOAD_JOB, "test storage download canceled");
m_in_testing[TEST_OSS_DOWNLOAD_JOB] = false;
return;
}
bool cancel = false;
BOOST_LOG_TRIVIAL(info) << "[test_storage_download] get_url = " << download_url;
// download
Slic3r::Http http = Slic3r::Http::get(download_url);
int reported_percent = 0;
http.on_progress(
[this, &result, &reported_percent](Slic3r::Http::Progress progress, bool& cancel) {
int percent = 0;
if (progress.dltotal != 0) {
percent = progress.dlnow * 100 / progress.dltotal;
}
if (percent - reported_percent >= 10) {
reported_percent = percent;
std::string download_progress_info = (boost::format("downloading %1%%%") % percent).str();
this->update_status(TEST_OSS_DOWNLOAD_JOB, download_progress_info);
}
BOOST_LOG_TRIVIAL(info) << "[test_storage_download] progress: " << reported_percent;
cancel = m_download_cancel;
if (cancel)
result = -1;
})
.on_complete([this, tmp_path, target_file_path](std::string body, unsigned status) {
BOOST_LOG_TRIVIAL(info) << "[test_storage_download] completed";
bool cancel = false;
fs::fstream file(tmp_path, std::ios::out | std::ios::binary | std::ios::trunc);
file.write(body.c_str(), body.size());
file.close();
fs::rename(tmp_path, target_file_path);
//this->update_status(TEST_OSS_DOWNLOAD_JOB, "test storage download ok");
})
.on_error([this, &result](std::string body, std::string error, unsigned int status) {
BOOST_LOG_TRIVIAL(error) << "[test_oss_download] downloading... on_error: " << error << ", body = " << body;
wxString info = wxString::Format("status=%u, body=%s, error=%s", status, body, error);
this->update_status(TEST_OSS_DOWNLOAD_JOB, "test storage download failed");
this->update_status(-1, info);
result = -1;
});
http.perform_sync();
if (result < 0) {
this->update_status(TEST_OSS_DOWNLOAD_JOB, "test storage download failed");
} else {
this->update_status(TEST_OSS_DOWNLOAD_JOB, "test storage download ok");
}
m_in_testing[TEST_OSS_DOWNLOAD_JOB] = false;
return;
}
void NetworkTestDialog::start_test_oss_upload()
{
}
void NetworkTestDialog:: start_test_plugin_download(){
int result = 0;
// get country_code
AppConfig *app_config = wxGetApp().app_config;
if (!app_config) {
update_status(TEST_PLUGIN_JOB, "app config is nullptr");
return;
} }
m_in_testing[job] = false;
m_in_testing[TEST_PLUGIN_JOB] = true;
update_status(TEST_PLUGIN_JOB, "test plugin download start...");
m_download_cancel = false;
// get temp path
fs::path target_file_path = (fs::temp_directory_path() / "test_plugin_download.zip");
fs::path tmp_path = target_file_path;
tmp_path += (boost::format(".%1%%2%") % get_current_pid() % ".tmp").str();
// get_url
std::string url = wxGetApp().get_plugin_url("plugins", app_config->get_country_code());
std::string download_url;
Slic3r::Http http_url = Slic3r::Http::get(url);
http_url
.on_complete([&download_url,this](std::string body, unsigned status) {
try {
json j = json::parse(body);
std::string message = j["message"].get<std::string>();
if (message == "success") {
json resource = j.at("resources");
if (resource.is_array()) {
for (auto iter = resource.begin(); iter != resource.end(); iter++) {
Semver version;
std::string url;
std::string type;
std::string vendor;
std::string description;
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) << "[test_plugin_download]: get version of settings's type, " << sub_iter.value();
} else if (boost::iequals(sub_iter.key(), "version")) {
version = *(Semver::parse(sub_iter.value()));
} else if (boost::iequals(sub_iter.key(), "description")) {
description = sub_iter.value();
} else if (boost::iequals(sub_iter.key(), "url")) {
url = sub_iter.value();
}
}
BOOST_LOG_TRIVIAL(info) << "[test_plugin_download]: get type " << type << ", version " << version.to_string() << ", url " << url;
download_url = url;
this->update_status(-1, "[test_plugin_download]: downloadurl=" + download_url);
}
}
} else {
BOOST_LOG_TRIVIAL(info) << "[test_plugin_download]: get version of plugin failed, body=" << body;
}
} catch (...) {
BOOST_LOG_TRIVIAL(error) << "[test_plugin_download]: catch unknown exception";
;
}
})
.on_error([&result, this](std::string body, std::string error, unsigned int status) {
BOOST_LOG_TRIVIAL(error) << "[test_plugin_download] on_error: " << error << ", body = " << body;
wxString info = wxString::Format("status=%u, body=%s, error=%s", status, body, error);
this->update_status(TEST_PLUGIN_JOB, "test plugin download failed");
this->update_status(-1, info);
result = -1;
})
.perform_sync();
if (result < 0) {
this->update_status(TEST_PLUGIN_JOB, "test plugin download failed");
m_in_testing[TEST_PLUGIN_JOB] = false;
return;
}
if (download_url.empty()) {
BOOST_LOG_TRIVIAL(info) << "[test_plugin_download]: no availaible plugin found for this app version: " << SLIC3R_VERSION;
this->update_status(TEST_PLUGIN_JOB, "test plugin download failed");
m_in_testing[TEST_PLUGIN_JOB] = false;
return;
}
if (m_download_cancel) {
this->update_status(TEST_PLUGIN_JOB, "test plugin download canceled");
m_in_testing[TEST_PLUGIN_JOB] = false;
return;
}
bool cancel = false;
BOOST_LOG_TRIVIAL(info) << "[test_plugin_download] get_url = " << download_url;
// download
Slic3r::Http http = Slic3r::Http::get(download_url);
int reported_percent = 0;
http.on_progress([this, &result, &reported_percent](Slic3r::Http::Progress progress, bool &cancel) {
int percent = 0;
if (progress.dltotal != 0) { percent = progress.dlnow * 100 / progress.dltotal; }
if (percent - reported_percent >= 5) {
reported_percent = percent;
std::string download_progress_info = (boost::format("downloading %1%%%") % percent).str();
this->update_status(TEST_PLUGIN_JOB, download_progress_info);
}
BOOST_LOG_TRIVIAL(info) << "[test_plugin_download] progress: " << reported_percent;
cancel = m_download_cancel;
if (cancel) result = -1;
})
.on_complete([this, tmp_path, target_file_path](std::string body, unsigned status) {
BOOST_LOG_TRIVIAL(info) << "[test_plugin_download] completed";
bool cancel = false;
fs::fstream file(tmp_path, std::ios::out | std::ios::binary | std::ios::trunc);
file.write(body.c_str(), body.size());
file.close();
fs::rename(tmp_path, target_file_path);
})
.on_error([this, &result](std::string body, std::string error, unsigned int status) {
BOOST_LOG_TRIVIAL(error) << "[test_plugin_download] downloading... on_error: " << error << ", body = " << body;
wxString info = wxString::Format("status=%u, body=%s, error=%s", status, body, error);
this->update_status(TEST_PLUGIN_JOB, "test plugin download failed");
this->update_status(-1, info);
result = -1;
});
http.perform_sync();
if (result < 0) {
this->update_status(TEST_PLUGIN_JOB, "test plugin download failed");
} else {
this->update_status(TEST_PLUGIN_JOB, "test plugin download ok");
}
m_in_testing[TEST_PLUGIN_JOB] = false;
return;
} }
void NetworkTestDialog::start_test_ping_thread() void NetworkTestDialog::start_test_ping_thread()
@ -882,63 +303,19 @@ void NetworkTestDialog::start_test_ping_thread()
m_in_testing[TEST_PING_JOB] = false; m_in_testing[TEST_PING_JOB] = false;
}); });
} }
void NetworkTestDialog::start_test_github_thread()
{
if (m_in_testing[TEST_ORCA_JOB])
return;
test_job[TEST_ORCA_JOB] = new boost::thread([this] {
start_test_url(TEST_ORCA_JOB, "OrcaSlicer(GitHub)", "https://github.com/SoftFever/OrcaSlicer");
});
}
void NetworkTestDialog::start_test_bing_thread() void NetworkTestDialog::start_test_bing_thread()
{ {
test_job[TEST_BING_JOB] = new boost::thread([this] { test_job[TEST_BING_JOB] = new boost::thread([this] {
start_test_bing(); start_test_url(TEST_BING_JOB, "Bing", "http://www.bing.com");
}); });
}
void NetworkTestDialog::start_test_bambulab_thread()
{
if (m_in_testing[TEST_BAMBULAB_JOB]) return;
test_job[TEST_BAMBULAB_JOB] = new boost::thread([this] {
start_test_bambulab();
});
}
void NetworkTestDialog::start_test_iot_thread()
{
if (m_in_testing[TEST_IOT_JOB]) return;
test_job[TEST_IOT_JOB] = new boost::thread([this] {
start_test_iot();
});
}
void NetworkTestDialog::start_test_oss_thread()
{
test_job[TEST_OSS_JOB] = new boost::thread([this] {
start_test_oss();
});
}
void NetworkTestDialog::start_test_oss_upgrade_thread()
{
test_job[TEST_OSS_UPGRADE_JOB] = new boost::thread([this] {
start_test_oss_upgrade();
});
}
void NetworkTestDialog::start_test_oss_download_thread()
{
test_job[TEST_OSS_DOWNLOAD_JOB] = new boost::thread([this] {
start_test_oss_download();
});
}
void NetworkTestDialog::start_test_oss_upload_thread()
{
test_job[TEST_OSS_UPLOAD_JOB] = new boost::thread([this] {
start_test_oss_upload();
});
}
void NetworkTestDialog:: start_test_plugin_download_thread(){
test_job[TEST_PLUGIN_JOB] = new boost::thread([this] {
start_test_plugin_download();
});
} }
void NetworkTestDialog::on_close(wxCloseEvent& event) void NetworkTestDialog::on_close(wxCloseEvent& event)
@ -958,7 +335,7 @@ void NetworkTestDialog::on_close(wxCloseEvent& event)
wxString NetworkTestDialog::get_studio_version() wxString NetworkTestDialog::get_studio_version()
{ {
return wxString(SLIC3R_VERSION); return wxString(SoftFever_VERSION);
} }
void NetworkTestDialog::set_default() void NetworkTestDialog::set_default()
@ -975,13 +352,6 @@ void NetworkTestDialog::set_default()
txt_dns_info_value->SetLabelText(get_dns_info()); txt_dns_info_value->SetLabelText(get_dns_info());
text_link_val->SetLabelText(NA_STR); text_link_val->SetLabelText(NA_STR);
text_bing_val->SetLabelText(NA_STR); text_bing_val->SetLabelText(NA_STR);
text_iot_value->SetLabelText(NA_STR);
text_oss_value->SetLabelText(NA_STR);
text_oss_upgrade_value->SetLabelText(NA_STR);
text_oss_download_value->SetLabelText(NA_STR);
text_oss_upload_value->SetLabelText(NA_STR);
text_network_plugin_value->SetLabelText(NA_STR);
//text_ping_value->SetLabelText(NA_STR);
m_download_cancel = false; m_download_cancel = false;
m_closing = false; m_closing = false;
} }

View file

@ -35,15 +35,9 @@ namespace GUI {
enum TestJob { enum TestJob {
TEST_BING_JOB = 0, TEST_BING_JOB = 0,
TEST_BAMBULAB_JOB = 1, TEST_ORCA_JOB = 1,
TEST_IOT_JOB = 2, TEST_PING_JOB,
TEST_OSS_JOB = 3, TEST_JOB_MAX
TEST_OSS_UPGRADE_JOB = 4,
TEST_OSS_DOWNLOAD_JOB = 5,
TEST_OSS_UPLOAD_JOB = 6,
TEST_PING_JOB = 7,
TEST_PLUGIN_JOB = 8,
TEST_JOB_MAX = 9
}; };
class NetworkTestDialog : public DPIDialog class NetworkTestDialog : public DPIDialog
@ -65,24 +59,6 @@ protected:
Button* btn_bing; Button* btn_bing;
wxStaticText* text_bing_title; wxStaticText* text_bing_title;
wxStaticText* text_bing_val; wxStaticText* text_bing_val;
Button* btn_iot;
wxStaticText* text_iot_title;
wxStaticText* text_iot_value;
Button* btn_oss;
wxStaticText* text_oss_title;
wxStaticText* text_oss_value;
Button* btn_oss_upgrade;
wxStaticText* text_oss_upgrade_title;
wxStaticText* text_oss_upgrade_value;
Button* btn_oss_download;
wxStaticText* text_oss_download_title;
wxStaticText* text_oss_download_value;
Button* btn_oss_upload;
wxStaticText* text_oss_upload_title;
wxStaticText* text_oss_upload_value;
Button* btn_network_plugin;
wxStaticText* text_network_plugin_title;
wxStaticText* text_network_plugin_value;
wxStaticText* text_ping_title; wxStaticText* text_ping_title;
wxStaticText* text_ping_value; wxStaticText* text_ping_value;
wxStaticText* text_result; wxStaticText* text_result;
@ -116,23 +92,10 @@ public:
void start_all_job(); void start_all_job();
void start_all_job_sequence(); void start_all_job_sequence();
void start_test_bing_thread(); void start_test_bing_thread();
void start_test_bambulab_thread(); void start_test_github_thread();
void start_test_iot_thread();
void start_test_oss_thread();
void start_test_oss_upgrade_thread();
void start_test_oss_download_thread();
void start_test_oss_upload_thread();
void start_test_ping_thread(); void start_test_ping_thread();
void start_test_plugin_download_thread();
void start_test_bing(); void start_test_url(TestJob job, wxString name, wxString url);
void start_test_bambulab();
void start_test_iot();
void start_test_oss();
void start_test_oss_upgrade();
void start_test_oss_download();
void start_test_oss_upload();
void start_test_plugin_download();
void on_close(wxCloseEvent& event); void on_close(wxCloseEvent& event);

View file

@ -0,0 +1,84 @@
#include "OAuthDialog.hpp"
#include "GUI_App.hpp"
#include "Jobs/BoostThreadWorker.hpp"
#include "Jobs/PlaterWorker.hpp"
#include "wxExtensions.hpp"
namespace Slic3r {
namespace GUI {
#define BORDER_W FromDIP(10)
OAuthDialog::OAuthDialog(wxWindow* parent, OAuthParams params)
: DPIDialog(parent, wxID_ANY, _L("Login"), wxDefaultPosition, wxSize(45 * wxGetApp().em_unit(), -1), wxDEFAULT_DIALOG_STYLE)
, _params(params)
{
SetFont(wxGetApp().normal_font());
SetBackgroundColour(*wxWHITE);
m_worker = std::make_unique<PlaterWorker<BoostThreadWorker>>(this, nullptr, "auth_worker");
wxStdDialogButtonSizer* btns = this->CreateStdDialogButtonSizer(wxCANCEL);
btnCancel = static_cast<wxButton*>(this->FindWindowById(wxID_CANCEL, this));
wxGetApp().UpdateDarkUI(btnCancel);
btnCancel->Bind(wxEVT_BUTTON, &OAuthDialog::on_cancel, this);
const auto message_sizer = new wxBoxSizer(wxVERTICAL);
const auto message = new wxStaticText(this, wxID_ANY, _L("Authorizing..."), wxDefaultPosition, wxDefaultSize, 0);
message->SetForegroundColour(*wxBLACK);
message_sizer->Add(message, 0, wxEXPAND | wxLEFT | wxTOP | wxBOTTOM, BORDER_W);
const auto topSizer = new wxBoxSizer(wxVERTICAL);
topSizer->Add(message_sizer, 0, wxEXPAND | wxALL, BORDER_W);
topSizer->Add(btns, 0, wxEXPAND | wxALL, BORDER_W);
Bind(wxEVT_CLOSE_WINDOW, &OAuthDialog::on_cancel, this);
SetSizer(topSizer);
topSizer->SetSizeHints(this);
this->CenterOnParent();
wxGetApp().UpdateDlgDarkUI(this);
}
void OAuthDialog::on_cancel(wxEvent& event)
{
m_worker->cancel_all();
m_worker->wait_for_idle();
EndModal(wxID_NO);
}
bool OAuthDialog::Show(bool show)
{
if (show) {
// Prepare login job
_result = std::make_shared<OAuthResult>();
auto job = std::make_unique<OAuthJob>(OAuthData{_params, _result});
job->set_event_handle(this);
Bind(EVT_OAUTH_COMPLETE_MESSAGE, [this](wxCommandEvent& evt) { EndModal(wxID_NO); });
// Start auth job
replace_job(*m_worker, std::move(job));
// Open login URL in external browser
wxLaunchDefaultBrowser(_params.login_url);
}
return DPIDialog::Show(show);
}
void OAuthDialog::on_dpi_changed(const wxRect& suggested_rect)
{
const int& em = em_unit();
msw_buttons_rescale(this, em, {wxID_CANCEL});
const wxSize& size = wxSize(45 * em, 35 * em);
SetMinSize(size);
Fit();
Refresh();
}
}}

View file

@ -0,0 +1,34 @@
#ifndef __OAuthDialog_HPP__
#define __OAuthDialog_HPP__
#include "GUI_Utils.hpp"
#include "Jobs/OAuthJob.hpp"
#include "Jobs/Worker.hpp"
namespace Slic3r {
namespace GUI {
class OAuthDialog : public DPIDialog
{
private:
OAuthParams _params;
std::shared_ptr<OAuthResult> _result;
wxButton* btnCancel{nullptr};
std::unique_ptr<Worker> m_worker;
void on_cancel(wxEvent& event);
protected:
bool Show(bool show) override;
void on_dpi_changed(const wxRect& suggested_rect) override;
public:
OAuthDialog(wxWindow* parent, OAuthParams params);
OAuthResult get_result() { return *_result; }
};
}} // namespace Slic3r::GUI
#endif

View file

@ -194,6 +194,13 @@ void OptionsGroup::show_field(const t_config_option_key& opt_key, bool show/* =
} }
} }
void OptionsGroup::enable_field(const t_config_option_key& opt_key, bool enable)
{
if (Field* f = get_field(opt_key); f) {
f->toggle(enable);
}
}
void OptionsGroup::set_name(const wxString& new_name) void OptionsGroup::set_name(const wxString& new_name)
{ {
stb->SetLabel(new_name); stb->SetLabel(new_name);

View file

@ -173,6 +173,9 @@ public:
void show_field(const t_config_option_key& opt_key, bool show = true); void show_field(const t_config_option_key& opt_key, bool show = true);
void hide_field(const t_config_option_key& opt_key) { show_field(opt_key, false); } void hide_field(const t_config_option_key& opt_key) { show_field(opt_key, false); }
void enable_field(const t_config_option_key& opt_key, bool enable = true);
void disable_field(const t_config_option_key& opt_key) { enable_field(opt_key, false); }
void set_name(const wxString& new_name); void set_name(const wxString& new_name);
inline void enable() { for (auto& field : m_fields) field.second->enable(); } inline void enable() { for (auto& field : m_fields) field.second->enable(); }

View file

@ -34,6 +34,8 @@
#include "BitmapCache.hpp" #include "BitmapCache.hpp"
#include "BonjourDialog.hpp" #include "BonjourDialog.hpp"
#include "MsgDialog.hpp" #include "MsgDialog.hpp"
#include "OAuthDialog.hpp"
#include "SimplyPrint.hpp"
namespace Slic3r { namespace Slic3r {
namespace GUI { namespace GUI {
@ -174,20 +176,24 @@ void PhysicalPrinterDialog::build_printhost_settings(ConfigOptionsGroup* m_optgr
result = host->test(msg); result = host->test(msg);
if (!result && host->is_cloud()) { if (!result && host->is_cloud()) {
PrinterCloudAuthDialog dlg(this->GetParent(), host.get()); if (const auto h = dynamic_cast<SimplyPrint*>(host.get()); h) {
dlg.ShowModal(); OAuthDialog dlg(this, h->get_oauth_params());
dlg.ShowModal();
auto api_key = dlg.GetApiKey(); const auto& r = dlg.get_result();
m_config->opt_string("printhost_apikey") = api_key; result = r.success;
result = !api_key.empty(); if (r.success) {
if (result) { h->save_oauth_credential(r);
if (Field* print_host_webui_field = this->m_optgroup->get_field("printhost_apikey"); print_host_webui_field) { } else {
if (TextInput* temp_input = dynamic_cast<TextInput*>(print_host_webui_field->getWindow()); temp_input) { msg = r.error_message;
if (wxTextCtrl* temp = temp_input->GetTextCtrl()) {
temp->SetValue(wxString(api_key));
}
}
} }
} else {
PrinterCloudAuthDialog dlg(this->GetParent(), host.get());
dlg.ShowModal();
const auto api_key = dlg.GetApiKey();
m_config->opt_string("printhost_apikey") = api_key;
result = !api_key.empty();
} }
} }
} }
@ -195,11 +201,36 @@ void PhysicalPrinterDialog::build_printhost_settings(ConfigOptionsGroup* m_optgr
show_info(this, host->get_test_ok_msg(), _L("Success!")); show_info(this, host->get_test_ok_msg(), _L("Success!"));
else else
show_error(this, host->get_test_failed_msg(msg)); show_error(this, host->get_test_failed_msg(msg));
update();
}); });
return sizer; return sizer;
}; };
auto print_host_logout = [&](wxWindow* parent) {
auto sizer = create_sizer_with_btn(parent, &m_printhost_logout_btn, "", _L("Log Out"));
m_printhost_logout_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& e) {
std::unique_ptr<PrintHost> host(PrintHost::get_print_host(m_config));
if (!host) {
const wxString text = _L("Could not get a valid Printer Host reference");
show_error(this, text);
return;
}
wxString msg_text = _L("Are you sure to log out?");
MessageDialog dialog(this, msg_text, "", wxICON_QUESTION | wxYES_NO);
if (dialog.ShowModal() == wxID_YES) {
host->log_out();
update();
}
});
return sizer;
};
auto print_host_printers = [this, create_sizer_with_btn](wxWindow* parent) { auto print_host_printers = [this, create_sizer_with_btn](wxWindow* parent) {
//add_scaled_button(parent, &m_printhost_port_browse_btn, "browse", _(L("Refresh Printers")), wxBU_LEFT | wxBU_EXACTFIT); //add_scaled_button(parent, &m_printhost_port_browse_btn, "browse", _(L("Refresh Printers")), wxBU_LEFT | wxBU_EXACTFIT);
auto sizer = create_sizer_with_btn(parent, &m_printhost_port_browse_btn, "monitor_signal_strong", _(L("Refresh Printers"))); auto sizer = create_sizer_with_btn(parent, &m_printhost_port_browse_btn, "monitor_signal_strong", _(L("Refresh Printers")));
@ -215,6 +246,7 @@ void PhysicalPrinterDialog::build_printhost_settings(ConfigOptionsGroup* m_optgr
Line host_line = m_optgroup->create_single_option_line(option); Line host_line = m_optgroup->create_single_option_line(option);
host_line.append_widget(printhost_browse); host_line.append_widget(printhost_browse);
host_line.append_widget(print_host_test); host_line.append_widget(print_host_test);
host_line.append_widget(print_host_logout);
m_optgroup->append_line(host_line); m_optgroup->append_line(host_line);
option = m_optgroup->get_option("print_host_webui"); option = m_optgroup->get_option("print_host_webui");
@ -375,7 +407,9 @@ void PhysicalPrinterDialog::update_printhost_buttons()
std::unique_ptr<PrintHost> host(PrintHost::get_print_host(m_config)); std::unique_ptr<PrintHost> host(PrintHost::get_print_host(m_config));
if (host) { if (host) {
m_printhost_test_btn->Enable(!m_config->opt_string("print_host").empty() && host->can_test()); m_printhost_test_btn->Enable(!m_config->opt_string("print_host").empty() && host->can_test());
m_printhost_browse_btn->Enable(host->has_auto_discovery()); m_printhost_browse_btn->Show(host->has_auto_discovery());
m_printhost_logout_btn->Show(host->is_logged_in());
m_printhost_test_btn->SetLabel(host->is_cloud() ? _L("Login/Test") : _L("Test"));
} }
} }
@ -469,15 +503,29 @@ void PhysicalPrinterDialog::update(bool printer_change)
const auto opt = m_config->option<ConfigOptionEnum<PrintHostType>>("host_type"); const auto opt = m_config->option<ConfigOptionEnum<PrintHostType>>("host_type");
m_optgroup->show_field("host_type"); m_optgroup->show_field("host_type");
// hide PrusaConnect address m_optgroup->enable_field("print_host");
if (Field* printhost_field = m_optgroup->get_field("print_host"); printhost_field) { m_optgroup->enable_field("print_host_webui");
if (wxTextCtrl* temp = dynamic_cast<wxTextCtrl*>(printhost_field->getWindow()); temp && temp->GetValue() == L"https://connect.prusa3d.com") { m_optgroup->enable_field("printhost_cafile");
temp->SetValue(wxString()); m_optgroup->enable_field("printhost_ssl_ignore_revoke");
} if (m_printhost_cafile_browse_btn)
m_printhost_cafile_browse_btn->Enable();
if (TextInput* temp_input = dynamic_cast<TextInput*>(printhost_field->getWindow()); temp_input) { // hide pre-configured address, in case user switched to a different host type
if (wxTextCtrl* temp = temp_input->GetTextCtrl(); temp &&temp->GetValue() == L"https://app.obico.io") { if (Field* printhost_field = m_optgroup->get_field("print_host"); printhost_field) {
temp->SetValue(wxString()); if (wxTextCtrl* temp = dynamic_cast<TextCtrl*>(printhost_field)->text_ctrl(); temp) {
const auto current_host = temp->GetValue();
if (current_host == L"https://connect.prusa3d.com" ||
current_host == L"https://app.obico.io" ||
current_host == "https://simplyprint.io") {
temp->SetValue(wxString());
}
}
}
if (Field* printhost_webui_field = m_optgroup->get_field("print_host_webui"); printhost_webui_field) {
if (wxTextCtrl* temp = dynamic_cast<TextCtrl*>(printhost_webui_field)->text_ctrl(); temp) {
const auto current_host = temp->GetValue();
if (current_host == "https://simplyprint.io/panel") {
temp->SetValue(wxString());
} }
} }
} }
@ -492,27 +540,49 @@ void PhysicalPrinterDialog::update(bool printer_change)
m_optgroup->show_field("printhost_apikey", true); m_optgroup->show_field("printhost_apikey", true);
for (const std::string& opt_key : std::vector<std::string>{ "printhost_user", "printhost_password" }) for (const std::string& opt_key : std::vector<std::string>{ "printhost_user", "printhost_password" })
m_optgroup->hide_field(opt_key); m_optgroup->hide_field(opt_key);
supports_multiple_printers = opt && opt->value == htRepetier; supports_multiple_printers = opt->value == htRepetier || opt->value == htObico;
if (opt->value == htPrusaConnect) { // automatically show default prusaconnect address if (opt->value == htPrusaConnect) { // automatically show default prusaconnect address
if (Field* printhost_field = m_optgroup->get_field("print_host"); printhost_field) { if (Field* printhost_field = m_optgroup->get_field("print_host"); printhost_field) {
if (wxTextCtrl* temp = dynamic_cast<wxTextCtrl*>(printhost_field->getWindow()); temp && temp->GetValue().IsEmpty()) { if (wxTextCtrl* temp = dynamic_cast<TextCtrl*>(printhost_field)->text_ctrl(); temp && temp->GetValue().IsEmpty()) {
temp->SetValue(L"https://connect.prusa3d.com"); temp->SetValue(L"https://connect.prusa3d.com");
} }
} }
} } else if (opt->value == htObico) { // automatically show default obico address
} if (Field* printhost_field = m_optgroup->get_field("print_host"); printhost_field) {
if (wxTextCtrl* temp = dynamic_cast<TextCtrl*>(printhost_field)->text_ctrl(); temp && temp->GetValue().IsEmpty()) {
if (opt->value == htObico) {
supports_multiple_printers = true;
if (Field* printhost_field = m_optgroup->get_field("print_host"); printhost_field) {
if (TextInput* temp_input = dynamic_cast<TextInput*>(printhost_field->getWindow()); temp_input) {
if (wxTextCtrl* temp = temp_input->GetTextCtrl(); temp && temp->GetValue().IsEmpty()) {
temp->SetValue(L"https://app.obico.io"); temp->SetValue(L"https://app.obico.io");
m_config->opt_string("print_host") = "https://app.obico.io"; m_config->opt_string("print_host") = "https://app.obico.io";
} }
} }
} else if (opt->value == htSimplyPrint) {
// Set the host url
if (Field* printhost_field = m_optgroup->get_field("print_host"); printhost_field) {
printhost_field->disable();
if (wxTextCtrl* temp = dynamic_cast<TextCtrl*>(printhost_field)->text_ctrl(); temp && temp->GetValue().IsEmpty()) {
temp->SetValue("https://simplyprint.io");
}
m_config->opt_string("print_host") = "https://simplyprint.io";
}
if (Field* printhost_webui_field = m_optgroup->get_field("print_host_webui"); printhost_webui_field) {
printhost_webui_field->disable();
if (wxTextCtrl* temp = dynamic_cast<TextCtrl*>(printhost_webui_field)->text_ctrl(); temp && temp->GetValue().IsEmpty()) {
temp->SetValue("https://simplyprint.io/panel");
}
m_config->opt_string("print_host_webui") = "https://simplyprint.io/panel";
}
m_optgroup->hide_field("printhost_apikey");
m_optgroup->disable_field("printhost_cafile");
m_optgroup->disable_field("printhost_ssl_ignore_revoke");
if (m_printhost_cafile_browse_btn)
m_printhost_cafile_browse_btn->Disable();
} }
} }
if (opt->value == htFlashforge) {
m_optgroup->hide_field("printhost_apikey");
m_optgroup->hide_field("printhost_authorization_type");
}
} }
else { else {
m_optgroup->set_value("host_type", int(PrintHostType::htOctoPrint), false); m_optgroup->set_value("host_type", int(PrintHostType::htOctoPrint), false);
@ -594,6 +664,7 @@ void PhysicalPrinterDialog::on_dpi_changed(const wxRect& suggested_rect)
m_printhost_browse_btn->msw_rescale(); m_printhost_browse_btn->msw_rescale();
m_printhost_test_btn->msw_rescale(); m_printhost_test_btn->msw_rescale();
m_printhost_logout_btn->msw_rescale();
if (m_printhost_cafile_browse_btn) if (m_printhost_cafile_browse_btn)
m_printhost_cafile_browse_btn->msw_rescale(); m_printhost_cafile_browse_btn->msw_rescale();

View file

@ -30,6 +30,7 @@ class PhysicalPrinterDialog : public DPIDialog
ScalableButton* m_printhost_browse_btn {nullptr}; ScalableButton* m_printhost_browse_btn {nullptr};
ScalableButton* m_printhost_test_btn {nullptr}; ScalableButton* m_printhost_test_btn {nullptr};
ScalableButton* m_printhost_logout_btn {nullptr};
ScalableButton* m_printhost_cafile_browse_btn {nullptr}; ScalableButton* m_printhost_cafile_browse_btn {nullptr};
ScalableButton* m_printhost_client_cert_browse_btn {nullptr}; ScalableButton* m_printhost_client_cert_browse_btn {nullptr};
ScalableButton* m_printhost_port_browse_btn {nullptr}; ScalableButton* m_printhost_port_browse_btn {nullptr};

View file

@ -1132,13 +1132,14 @@ void Sidebar::update_all_preset_comboboxes()
const auto print_tech = preset_bundle.printers.get_edited_preset().printer_technology(); const auto print_tech = preset_bundle.printers.get_edited_preset().printer_technology();
bool is_bbl_vendor = preset_bundle.is_bbl_vendor(); bool is_bbl_vendor = preset_bundle.is_bbl_vendor();
const bool use_bbl_network = preset_bundle.use_bbl_network();
// Orca:: show device tab based on vendor type // Orca:: show device tab based on vendor type
auto p_mainframe = wxGetApp().mainframe; auto p_mainframe = wxGetApp().mainframe;
p_mainframe->show_device(is_bbl_vendor); p_mainframe->show_device(use_bbl_network);
auto cfg = preset_bundle.printers.get_edited_preset().config; auto cfg = preset_bundle.printers.get_edited_preset().config;
if (is_bbl_vendor) { if (use_bbl_network) {
//only show connection button for not-BBL printer //only show connection button for not-BBL printer
connection_btn->Hide(); connection_btn->Hide();
//only show sync-ams button for BBL printer //only show sync-ams button for BBL printer
@ -1270,7 +1271,7 @@ void Sidebar::update_presets(Preset::Type preset_type)
} }
Preset& printer_preset = wxGetApp().preset_bundle->printers.get_edited_preset(); Preset& printer_preset = wxGetApp().preset_bundle->printers.get_edited_preset();
bool isBBL = preset_bundle.is_bbl_vendor(); bool isBBL = preset_bundle.use_bbl_network();
wxGetApp().mainframe->show_calibration_button(!isBBL); wxGetApp().mainframe->show_calibration_button(!isBBL);
if (auto printer_structure_opt = printer_preset.config.option<ConfigOptionEnum<PrinterStructure>>("printer_structure")) { if (auto printer_structure_opt = printer_preset.config.option<ConfigOptionEnum<PrinterStructure>>("printer_structure")) {
@ -6835,6 +6836,26 @@ void Plater::priv::on_tab_selection_changing(wxBookCtrlEvent& e)
const int new_sel = e.GetSelection(); const int new_sel = e.GetSelection();
sidebar_layout.show = new_sel == MainFrame::tp3DEditor || new_sel == MainFrame::tpPreview; sidebar_layout.show = new_sel == MainFrame::tp3DEditor || new_sel == MainFrame::tpPreview;
update_sidebar(); update_sidebar();
int old_sel = e.GetOldSelection();
if (wxGetApp().preset_bundle && wxGetApp().preset_bundle->use_bbl_network() && new_sel == MainFrame::tpMonitor) {
if (!wxGetApp().getAgent()) {
e.Veto();
BOOST_LOG_TRIVIAL(info) << boost::format("skipped tab switch from %1% to %2%, lack of network plugins") % old_sel % new_sel;
if (q) {
wxCommandEvent* evt = new wxCommandEvent(EVT_INSTALL_PLUGIN_HINT);
wxQueueEvent(q, evt);
}
}
} else {
if (new_sel == MainFrame::tpMonitor && wxGetApp().preset_bundle != nullptr) {
auto cfg = wxGetApp().preset_bundle->printers.get_edited_preset().config;
wxString url = cfg.opt_string("print_host_webui").empty() ? cfg.opt_string("print_host") : cfg.opt_string("print_host_webui");
if (url.empty()) {
// It's missing_connection page, reload so that we can replay the gif image
main_frame->m_printer_view->reload();
}
}
}
} }
int Plater::priv::update_print_required_data(Slic3r::DynamicPrintConfig config, Slic3r::Model model, Slic3r::PlateDataPtrs plate_data_list, std::string file_name, std::string file_path) int Plater::priv::update_print_required_data(Slic3r::DynamicPrintConfig config, Slic3r::Model model, Slic3r::PlateDataPtrs plate_data_list, std::string file_name, std::string file_path)

View file

@ -629,7 +629,7 @@ wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxWindow *pa
m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 23);
auto checkbox = new ::CheckBox(parent); auto checkbox = new ::CheckBox(parent);
checkbox->SetValue((app_config->get(param) == "true") ? true : false); checkbox->SetValue(app_config->get_bool(param));
m_sizer_checkbox->Add(checkbox, 0, wxALIGN_CENTER, 0); m_sizer_checkbox->Add(checkbox, 0, wxALIGN_CENTER, 0);
m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 8); m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 8);
@ -701,10 +701,16 @@ wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxWindow *pa
} }
} }
#endif // __WXMSW__ if (param == "installed_networking") {
bool pbool = app_config->get_bool("installed_networking");
if (pbool) {
GUI::wxGetApp().CallAfter([] { GUI::wxGetApp().ShowDownNetPluginDlg(); });
}
}
if (param == "developer_mode") #endif // __WXMSW__
{
if (param == "developer_mode") {
m_developer_mode_def = app_config->get("developer_mode"); m_developer_mode_def = app_config->get("developer_mode");
if (m_developer_mode_def == "true") { if (m_developer_mode_def == "true") {
Slic3r::GUI::wxGetApp().save_mode(comDevelop); Slic3r::GUI::wxGetApp().save_mode(comDevelop);
@ -1004,6 +1010,7 @@ wxWindow* PreferencesDialog::create_general_page()
auto item_region= create_item_region_combobox(_L("Login Region"), page, _L("Login Region"), Regions); auto item_region= create_item_region_combobox(_L("Login Region"), page, _L("Login Region"), Regions);
auto item_stealth_mode = create_item_checkbox(_L("Stealth Mode"), page, _L("Stealth Mode"), 50, "stealth_mode"); auto item_stealth_mode = create_item_checkbox(_L("Stealth Mode"), page, _L("Stealth Mode"), 50, "stealth_mode");
auto item_enable_plugin = create_item_checkbox(_L("Enable network plugin"), page, _L("Enable network plugin"), 50, "installed_networking");
auto item_check_stable_version_only = create_item_checkbox(_L("Check for stable updates only"), page, _L("Check for stable updates only"), 50, "check_stable_update_only"); auto item_check_stable_version_only = create_item_checkbox(_L("Check for stable updates only"), page, _L("Check for stable updates only"), 50, "check_stable_update_only");
std::vector<wxString> Units = {_L("Metric") + " (mm, g)", _L("Imperial") + " (in, oz)"}; std::vector<wxString> Units = {_L("Metric") + " (mm, g)", _L("Imperial") + " (in, oz)"};
@ -1020,6 +1027,7 @@ wxWindow* PreferencesDialog::create_general_page()
auto item_calc_mode = create_item_checkbox(_L("Flushing volumes: Auto-calculate everytime the color changed."), page, _L("If enabled, auto-calculate everytime the color changed."), 50, "auto_calculate"); auto item_calc_mode = create_item_checkbox(_L("Flushing volumes: Auto-calculate everytime the color changed."), page, _L("If enabled, auto-calculate everytime the color changed."), 50, "auto_calculate");
auto title_presets = create_item_title(_L("Presets"), page, _L("Presets")); auto title_presets = create_item_title(_L("Presets"), page, _L("Presets"));
auto title_network = create_item_title(_L("Network"), page, _L("Network"));
auto item_user_sync = create_item_checkbox(_L("Auto sync user presets(Printer/Filament/Process)"), page, _L("User Sync"), 50, "sync_user_preset"); auto item_user_sync = create_item_checkbox(_L("Auto sync user presets(Printer/Filament/Process)"), page, _L("User Sync"), 50, "sync_user_preset");
auto item_system_sync = create_item_checkbox(_L("Update built-in Presets automatically."), page, _L("System Sync"), 50, "sync_system_preset"); auto item_system_sync = create_item_checkbox(_L("Update built-in Presets automatically."), page, _L("System Sync"), 50, "sync_system_preset");
auto item_save_presets = create_item_button(_L("Clear my choice on the unsaved presets."), _L("Clear"), page, _L("Clear my choice on the unsaved presets."), []() { auto item_save_presets = create_item_button(_L("Clear my choice on the unsaved presets."), _L("Clear"), page, _L("Clear my choice on the unsaved presets."), []() {
@ -1080,12 +1088,14 @@ wxWindow* PreferencesDialog::create_general_page()
sizer_page->Add(item_show_splash_screen, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_show_splash_screen, 0, wxTOP, FromDIP(3));
sizer_page->Add(item_hints, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_hints, 0, wxTOP, FromDIP(3));
sizer_page->Add(title_presets, 0, wxTOP | wxEXPAND, FromDIP(20)); sizer_page->Add(title_presets, 0, wxTOP | wxEXPAND, FromDIP(20));
sizer_page->Add(item_stealth_mode, 0, wxTOP, FromDIP(3));
sizer_page->Add(item_check_stable_version_only, 0, wxTOP, FromDIP(3));
sizer_page->Add(item_calc_mode, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_calc_mode, 0, wxTOP, FromDIP(3));
sizer_page->Add(item_user_sync, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_user_sync, 0, wxTOP, FromDIP(3));
sizer_page->Add(item_system_sync, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_system_sync, 0, wxTOP, FromDIP(3));
sizer_page->Add(item_save_presets, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_save_presets, 0, wxTOP, FromDIP(3));
sizer_page->Add(title_network, 0, wxTOP | wxEXPAND, FromDIP(20));
sizer_page->Add(item_check_stable_version_only, 0, wxTOP, FromDIP(3));
sizer_page->Add(item_stealth_mode, 0, wxTOP, FromDIP(3));
sizer_page->Add(item_enable_plugin, 0, wxTOP, FromDIP(3));
#ifdef _WIN32 #ifdef _WIN32
sizer_page->Add(title_associate_file, 0, wxTOP| wxEXPAND, FromDIP(20)); sizer_page->Add(title_associate_file, 0, wxTOP| wxEXPAND, FromDIP(20));
sizer_page->Add(item_associate_3mf, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_associate_3mf, 0, wxTOP, FromDIP(3));

View file

@ -23,7 +23,7 @@
namespace Slic3r { namespace GUI { namespace Slic3r { namespace GUI {
PrinterCloudAuthDialog::PrinterCloudAuthDialog(wxWindow* parent, PrintHost* host) PrinterCloudAuthDialog::PrinterCloudAuthDialog(wxWindow* parent, PrintHost* host)
: wxDialog((wxWindow*) (wxGetApp().mainframe), wxID_ANY, "Login"), m_host(host) : wxDialog((wxWindow*) (wxGetApp().mainframe), wxID_ANY, "Login")
{ {
SetBackgroundColour(*wxWHITE); SetBackgroundColour(*wxWHITE);
// Url // Url
@ -91,7 +91,6 @@ void PrinterCloudAuthDialog::OnScriptMessage(wxWebViewEvent& evt)
wxString strCmd = j["command"]; wxString strCmd = j["command"];
if (strCmd == "login_token") { if (strCmd == "login_token") {
auto token = j["data"]["token"]; auto token = j["data"]["token"];
m_host->set_api_key(token);
m_apikey = token; m_apikey = token;
} }
Close(); Close();

View file

@ -29,7 +29,6 @@ protected:
wxString m_javascript; wxString m_javascript;
wxString m_response_js; wxString m_response_js;
PrintHost* m_host;
std::string m_apikey; std::string m_apikey;
public: public:

View file

@ -80,6 +80,11 @@ void PrinterWebView::load_url(wxString& url, wxString apikey)
//m_browser->SetFocus(); //m_browser->SetFocus();
UpdateState(); UpdateState();
} }
void PrinterWebView::reload()
{
m_browser->Reload();
}
/** /**
* Method that retrieves the current state from the web control and updates the * Method that retrieves the current state from the web control and updates the
* GUI the reflect this current state. * GUI the reflect this current state.

View file

@ -41,6 +41,7 @@ public:
void OnClose(wxCloseEvent& evt); void OnClose(wxCloseEvent& evt);
void OnError(wxWebViewEvent& evt); void OnError(wxWebViewEvent& evt);
void OnLoaded(wxWebViewEvent& evt); void OnLoaded(wxWebViewEvent& evt);
void reload();
private: private:
void SendAPIKey(); void SendAPIKey();

View file

@ -3546,6 +3546,7 @@ void TabPrinter::build_fff()
optgroup = page->new_optgroup(L("Advanced"), L"param_advanced"); optgroup = page->new_optgroup(L("Advanced"), L"param_advanced");
optgroup->append_single_option_line("printer_structure"); optgroup->append_single_option_line("printer_structure");
optgroup->append_single_option_line("gcode_flavor"); optgroup->append_single_option_line("gcode_flavor");
optgroup->append_single_option_line("bbl_use_printhost");
optgroup->append_single_option_line("disable_m73"); optgroup->append_single_option_line("disable_m73");
option = optgroup->get_option("thumbnails"); option = optgroup->get_option("thumbnails");
option.opt.full_width = true; option.opt.full_width = true;
@ -4188,7 +4189,7 @@ void TabPrinter::toggle_options()
// SoftFever: hide BBL specific settings // SoftFever: hide BBL specific settings
for (auto el : for (auto el :
{"scan_first_layer", "machine_load_filament_time", "machine_unload_filament_time", "bbl_calib_mark_logo"}) {"scan_first_layer", "machine_load_filament_time", "machine_unload_filament_time", "bbl_calib_mark_logo", "bbl_use_printhost"})
toggle_line(el, is_BBL_printer); toggle_line(el, is_BBL_printer);
// SoftFever: hide non-BBL settings // SoftFever: hide non-BBL settings

View file

@ -421,6 +421,11 @@ void WebViewPanel::OnFreshLoginStatus(wxTimerEvent &event)
Slic3r::GUI::wxGetApp().get_login_info(); Slic3r::GUI::wxGetApp().get_login_info();
} }
void WebViewPanel::SetLoginPanelVisibility(bool bshow)
{
wxString strJS = wxString::Format("SetLoginPanelVisibility(%s)", bshow ? "true" : "false");
RunScript(strJS);
}
void WebViewPanel::SendRecentList(int images) void WebViewPanel::SendRecentList(int images)
{ {
boost::property_tree::wptree req; boost::property_tree::wptree req;

View file

@ -94,6 +94,7 @@ public:
public: public:
void SendRecentList(int images); void SendRecentList(int images);
void SetLoginPanelVisibility(bool bshow);
void SendDesignStaffpick(bool on); void SendDesignStaffpick(bool on);
void OpenModelDetail(std::string id, NetworkAgent *agent); void OpenModelDetail(std::string id, NetworkAgent *agent);
void SendLoginInfo(); void SendLoginInfo();

View file

@ -0,0 +1,135 @@
#include "Flashforge.hpp"
#include <algorithm>
#include <ctime>
#include <chrono>
#include <thread>
#include <boost/filesystem/path.hpp>
#include <boost/format.hpp>
#include <boost/log/trivial.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <boost/asio.hpp>
#include <boost/algorithm/string.hpp>
#include <wx/frame.h>
#include <wx/event.h>
#include <wx/progdlg.h>
#include <wx/sizer.h>
#include <wx/stattext.h>
#include <wx/textctrl.h>
#include <wx/checkbox.h>
#include "libslic3r/PrintConfig.hpp"
#include "slic3r/GUI/GUI.hpp"
#include "slic3r/GUI/I18N.hpp"
#include "slic3r/GUI/MsgDialog.hpp"
#include "Http.hpp"
#include "TCPConsole.hpp"
#include "SerialMessage.hpp"
#include "SerialMessageType.hpp"
namespace fs = boost::filesystem;
namespace pt = boost::property_tree;
namespace Slic3r {
Flashforge::Flashforge(DynamicPrintConfig* config) : m_host(config->opt_string("print_host")), m_console_port("8899")
{
}
const char* Flashforge::get_name() const { return "Flashforge"; }
bool Flashforge::test(wxString& msg) const
{
BOOST_LOG_TRIVIAL(debug) << boost::format("[Flashforge] testing connection");
// Utils::TCPConsole console(m_host, m_console_port);
Utils::TCPConsole client(m_host, m_console_port);
client.enqueue_cmd(controlCommand);
bool res = client.run_queue();
if (!res) {
msg = wxString::FromUTF8(client.error_message().c_str());
BOOST_LOG_TRIVIAL(info) << boost::format("[Flashforge] testing connection failed");
} else {
BOOST_LOG_TRIVIAL(info) << boost::format("[Flashforge] testing connection success");
}
return res;
}
wxString Flashforge::get_test_ok_msg() const { return _(L("Connection to Flashforge works correctly.")); }
wxString Flashforge::get_test_failed_msg(wxString& msg) const
{
return GUI::from_u8((boost::format("%s: %s") % _utf8(L("Could not connect to Flashforge")) % std::string(msg.ToUTF8())).str());
}
bool Flashforge::upload(PrintHostUpload upload_data, ProgressFn progress_fn, ErrorFn error_fn, InfoFn info_fn) const
{
bool res = true;
Utils::TCPConsole client(m_host, m_console_port);
client.enqueue_cmd(controlCommand);
client.enqueue_cmd(connect5MCommand);
client.enqueue_cmd(statusCommand);
wxString errormsg;
try {
std::ifstream newfile;
newfile.open(upload_data.source_path.c_str(), std::ios::binary); // open a file to perform read operation using file object
if (newfile.is_open()) { // checking whether the file is open
BOOST_LOG_TRIVIAL(info) << boost::format("[Flashforge] Reading file...");
newfile.seekg(0, std::ios::end);
std::ifstream::pos_type pos = newfile.tellg();
std::vector<char> result(pos);
newfile.seekg(0, std::ios::beg);
newfile.read(&result[0], pos);
BOOST_LOG_TRIVIAL(info) << boost::format("[Flashforge] Reading file...done size is %1%") % result.size();
Slic3r::Utils::SerialMessage fileuploadCommand =
{(boost::format("~M28 %1% 0:/user/%2%") % result.size() % upload_data.upload_path.generic_string()).str(),
Slic3r::Utils::Command};
client.enqueue_cmd(fileuploadCommand);
Slic3r::Utils::SerialMessage dataCommand = {std::string(result.begin(), result.end()), Slic3r::Utils::Data};
client.enqueue_cmd(dataCommand);
newfile.close(); // close the file object.
BOOST_LOG_TRIVIAL(info) << boost::format("[Flashforge] Sent %1% ") % result.size();
}
BOOST_LOG_TRIVIAL(info) << boost::format("[Flashforge] Sending file save command ");
client.enqueue_cmd(saveFileCommand);
if (upload_data.post_action == PrintHostPostUploadAction::StartPrint) {
BOOST_LOG_TRIVIAL(info) << boost::format("[Flashforge] Starting print %1%") % upload_data.upload_path.string();
Slic3r::Utils::SerialMessage startPrintCommand = {(boost::format("~M23 0:/user/%1%") % upload_data.upload_path.string()).str(),
Slic3r::Utils::Command};
client.enqueue_cmd(startPrintCommand);
}
res = client.run_queue();
if (!res) {
BOOST_LOG_TRIVIAL(info) << boost::format("[Flashforge] error %1%") % client.error_message().c_str();
errormsg = wxString::FromUTF8(client.error_message().c_str());
}
if (!res) {
error_fn(std::move(errormsg));
}
} catch (const std::exception& e) {
BOOST_LOG_TRIVIAL(info) << boost::format("[Flashforge] error %1%") % e.what();
errormsg = wxString::FromUTF8(e.what());
error_fn(std::move(errormsg));
}
return res;
}
int Flashforge::get_err_code_from_body(const std::string& body) const
{
pt::ptree root;
std::istringstream iss(body); // wrap returned json to istringstream
pt::read_json(iss, root);
return root.get<int>("err", 0);
}
} // namespace Slic3r

View file

@ -0,0 +1,45 @@
#ifndef slic3r_FlashForge_hpp_
#define slic3r_FlashForge_hpp_
#include <string>
#include <wx/string.h>
#include "PrintHost.hpp"
#include "SerialMessage.hpp"
#include "SerialMessageType.hpp"
#include "../../libslic3r/PrintConfig.hpp"
namespace Slic3r {
class DynamicPrintConfig;
class Http;
class Flashforge : public PrintHost
{
public:
explicit Flashforge(DynamicPrintConfig *config);
~Flashforge() override = default;
const char *get_name() const override;
bool test(wxString &curl_msg) const override;
wxString get_test_ok_msg() const override;
wxString get_test_failed_msg(wxString &msg) const override;
bool upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn error_fn, InfoFn info_fn) const override;
bool has_auto_discovery() const override { return false; }
bool can_test() const override { return true; }
PrintHostPostUploadActions get_post_upload_actions() const override { return PrintHostPostUploadAction::StartPrint; }
std::string get_host() const override { return m_host; }
private:
std::string m_host;
std::string m_console_port;
Slic3r::Utils::SerialMessage controlCommand = {"~M601 S1\r\n",Slic3r::Utils::Command};
Slic3r::Utils::SerialMessage connect5MCommand = {"~M640\r\n",Slic3r::Utils::Command};
Slic3r::Utils::SerialMessage connectGuiderCommand = {"~M650\r\n",Slic3r::Utils::Command};
Slic3r::Utils::SerialMessage statusCommand = {"~M119\r\n",Slic3r::Utils::Command};
Slic3r::Utils::SerialMessage saveFileCommand = {"~M29\r\n",Slic3r::Utils::Command};
int get_err_code_from_body(const std::string &body) const;
};
} // namespace Slic3r
#endif

View file

@ -25,6 +25,8 @@
#include "slic3r/GUI/I18N.hpp" #include "slic3r/GUI/I18N.hpp"
#include "slic3r/GUI/MsgDialog.hpp" #include "slic3r/GUI/MsgDialog.hpp"
#include "Http.hpp" #include "Http.hpp"
#include "SerialMessage.hpp"
#include "SerialMessageType.hpp"
namespace fs = boost::filesystem; namespace fs = boost::filesystem;
namespace pt = boost::property_tree; namespace pt = boost::property_tree;
@ -40,8 +42,8 @@ const char* MKS::get_name() const { return "MKS"; }
bool MKS::test(wxString& msg) const bool MKS::test(wxString& msg) const
{ {
Utils::TCPConsole console(m_host, m_console_port); Utils::TCPConsole console(m_host, m_console_port);
Slic3r::Utils::SerialMessage s("M105", Slic3r::Utils::Command);
console.enqueue_cmd("M105"); console.enqueue_cmd(s);
bool ret = console.run_queue(); bool ret = console.run_queue();
if (!ret) if (!ret)
@ -126,9 +128,10 @@ bool MKS::start_print(wxString& msg, const std::string& filename) const
std::this_thread::sleep_for(std::chrono::milliseconds(1500)); std::this_thread::sleep_for(std::chrono::milliseconds(1500));
Utils::TCPConsole console(m_host, m_console_port); Utils::TCPConsole console(m_host, m_console_port);
Slic3r::Utils::SerialMessage s(std::string("M23 ") + filename, Slic3r::Utils::Command);
console.enqueue_cmd(std::string("M23 ") + filename); console.enqueue_cmd(s);
console.enqueue_cmd("M24"); s.message = "M24";
console.enqueue_cmd(s);
bool ret = console.run_queue(); bool ret = console.run_queue();

View file

@ -42,8 +42,6 @@ Obico::Obico(DynamicPrintConfig* config) :
const char* Obico::get_name() const { return "Obico"; } const char* Obico::get_name() const { return "Obico"; }
void Obico::set_api_key(const std::string auth_api_key) { m_apikey = auth_api_key; }
std::string Obico::get_host() const { std::string Obico::get_host() const {
return m_host; return m_host;
} }

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