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 ""
"Project-Id-Version: PACKAGE VERSION\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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -5740,6 +5740,9 @@ msgstr ""
msgid "Stealth Mode"
msgstr ""
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only"
msgstr ""
@ -5793,6 +5796,9 @@ msgstr ""
msgid "If enabled, auto-calculate everytime the color changed."
msgstr ""
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr ""
@ -12509,7 +12515,7 @@ msgstr ""
msgid "Export Log"
msgstr ""
msgid "Studio Version:"
msgid "OrcaSlicer Version:"
msgstr ""
msgid "System Version:"
@ -12518,10 +12524,10 @@ msgstr ""
msgid "DNS Server:"
msgstr ""
msgid "Test BambuLab"
msgid "Test OrcaSlicer(GitHub)"
msgstr ""
msgid "Test BambuLab:"
msgid "Test OrcaSlicer(GitHub):"
msgstr ""
msgid "Test Bing.com"
@ -12530,39 +12536,6 @@ msgstr ""
msgid "Test bing.com:"
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"
msgstr ""

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \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"
"Last-Translator: \n"
"Language-Team: \n"
@ -3420,22 +3420,16 @@ msgstr ""
"No - Renunciar a utilitzar el mode espiral aquesta vegada"
msgid ""
"Alternate extra wall only works with ensure vertical shell thickness "
"disabled. "
"Alternate extra wall does't work well when ensure vertical shell thickness "
"is set to All. "
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"
"Yes - Change ensure vertical shell thickness to Moderate 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 ""
"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"
"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"
msgstr "Anivellament de llit automàtic"
@ -6175,6 +6174,9 @@ msgstr "Regió d'inici de sessió"
msgid "Stealth Mode"
msgstr "Mode Silenciós"
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only"
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 "
"color."
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr ""
"Sincronització automàtica dels perfils de l'usuari ( Impressora/Filament/"
@ -7122,8 +7127,8 @@ msgstr "Ignorar"
msgid ""
"When recording timelapse without toolhead, it is recommended to add a "
"\"Timelapse Wipe Tower\" \n"
"by right-click the empty position of build plate and choose \"Add "
"Primitive\"->\"Timelapse Wipe Tower\"."
"by right-click the empty position of build plate and choose \"Add Primitive"
"\"->\"Timelapse Wipe Tower\"."
msgstr ""
"Quan graveu timelapse sense capçal d'impressió, es recomana afegir una "
"\"Torre de Purga Timelapse\" \n"
@ -8765,19 +8770,13 @@ msgstr ""
"de la impressora per obtenir velocitats més altes."
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."
"The travel acceleration setting exceeds the printer's maximum travel "
"acceleration (machine_max_acceleration_travel).\n"
"Orca will automatically cap the travel acceleration speed to ensure it "
"doesn't surpass the printer's capabilities.\n"
"You can adjust the machine_max_acceleration_travel value 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 "Generating skirt & brim"
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 "
"direccions alternes en capes senars, independentment del seu grau de voladís."
msgid "Bridge counterbole holes"
msgstr "Pont pels forats esbocats( contraforats )"
msgid "Bridge counterbore holes"
msgstr ""
msgid ""
"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 ""
"Fan speed will be ramped up linearly from zero at layer "
"\"close_fan_the_first_x_layers\" to maximum at layer "
"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower "
"than \"close_fan_the_first_x_layers\", in which case the fan will be running "
"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1."
"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer"
"\". \"full_fan_speed_layer\" will be ignored if lower than "
"\"close_fan_the_first_x_layers\", in which case the fan will be running at "
"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1."
msgstr ""
"La velocitat del ventilador augmentarà linealment de zero a la capa "
"\"close_fan_the_first_x_layers\" al màxim a la capa "
"\"full_fan_speed_layer\". S'ignorarà \"full_fan_speed_layer\" si és inferior "
"a \"close_fan_the_first_x_layers\", en aquest cas el ventilador funcionarà a "
"\"close_fan_the_first_x_layers\" al màxim a la capa \"full_fan_speed_layer"
"\". S'ignorarà \"full_fan_speed_layer\" si és inferior 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."
msgid "Support interface fan speed"
@ -14425,8 +14424,8 @@ msgstr "Inicia la prova Single-Thread"
msgid "Export Log"
msgstr "Exportar Registre( Log )"
msgid "Studio Version:"
msgstr "Versió d'Studio:"
msgid "OrcaSlicer Version:"
msgstr ""
msgid "System Version:"
msgstr "Versió del Sistema:"
@ -14434,11 +14433,11 @@ msgstr "Versió del Sistema:"
msgid "DNS Server:"
msgstr "Servidor DNS:"
msgid "Test BambuLab"
msgstr "Prova BambuLab"
msgid "Test OrcaSlicer(GitHub)"
msgstr ""
msgid "Test BambuLab:"
msgstr "Prova BambuLab:"
msgid "Test OrcaSlicer(GitHub):"
msgstr ""
msgid "Test Bing.com"
msgstr "Prova Bing.com"
@ -14446,39 +14445,6 @@ msgstr "Prova Bing.com"
msgid "Test 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"
msgstr "Informació del Registre"
@ -14587,8 +14553,8 @@ msgstr ""
"Vols reescriure'l?"
msgid ""
"We would rename the presets as \"Vendor Type Serial @printer you "
"selected\". \n"
"We would rename the presets as \"Vendor Type Serial @printer you selected"
"\". \n"
"To add preset for more printers, Please go to printer selection"
msgstr ""
"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 "
"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"
#~ msgstr "Redimensionar"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \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"
"Last-Translator: René Mošner <Renemosner@seznam.cz>\n"
"Language-Team: \n"
@ -6069,6 +6069,9 @@ msgstr "Región přihlášení"
msgid "Stealth Mode"
msgstr "Tajný Režim"
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only"
msgstr ""
@ -6124,6 +6127,9 @@ msgstr ""
msgid "If enabled, auto-calculate everytime the color changed."
msgstr ""
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr ""
"Automatická synchronizace uživatelských předvoleb (Tiskárna/Filament/Proces)"
@ -13772,7 +13778,7 @@ msgstr ""
msgid "Export Log"
msgstr ""
msgid "Studio Version:"
msgid "OrcaSlicer Version:"
msgstr ""
msgid "System Version:"
@ -13781,10 +13787,10 @@ msgstr ""
msgid "DNS Server:"
msgstr ""
msgid "Test BambuLab"
msgid "Test OrcaSlicer(GitHub)"
msgstr ""
msgid "Test BambuLab:"
msgid "Test OrcaSlicer(GitHub):"
msgstr ""
msgid "Test Bing.com"
@ -13793,39 +13799,6 @@ msgstr ""
msgid "Test bing.com:"
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"
msgstr ""

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\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"
"Last-Translator: Heiko Liebscher <hliebschergmail.com>\n"
"Language-Team: \n"
@ -6237,6 +6237,9 @@ msgstr "Login-Region"
msgid "Stealth Mode"
msgstr "Unsichtbarer Modus"
msgid "Enable network plugin"
msgstr "Netzwerk-Plugin aktivieren"
msgid "Check for stable updates only"
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."
msgstr "Wenn aktiviert, wird bei jeder Farbänderung automatisch berechnet."
msgid "Network"
msgstr "Netzwerk"
msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr "Benutzerprofile automatisch synchronisieren (Drucker/Filament/Prozess)"
@ -8853,8 +8859,9 @@ msgid ""
msgstr ""
"Die Beschleunigungseinstellung für das Verfahren überschreitet die maximale "
"Verfahrensbeschleunigung des Druckers (machine_max_acceleration_travel).\n"
"Orca wird automatisch die Verfahrensbeschleunigungsgeschwindigkeit begrenzen, "
"um sicherzustellen, dass sie nicht die Fähigkeiten des Druckers überschreitet.\n"
"Orca wird automatisch die Verfahrensbeschleunigungsgeschwindigkeit "
"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 "
"Ihres Druckers anpassen, um höhere Geschwindigkeiten zu erreichen."
@ -14505,8 +14512,8 @@ msgstr "Starten Sie den Test mit einem Thread"
msgid "Export Log"
msgstr "Protokoll exportieren"
msgid "Studio Version:"
msgstr "Studio Version:"
msgid "OrcaSlicer Version:"
msgstr "OrcaSlicer Version:"
msgid "System Version:"
msgstr "System Version:"
@ -14514,11 +14521,11 @@ msgstr "System Version:"
msgid "DNS Server:"
msgstr "DNS Server:"
msgid "Test BambuLab"
msgstr "Test BambuLab"
msgid "Test OrcaSlicer(GitHub)"
msgstr "Test OrcaSlicer(GitHub)"
msgid "Test BambuLab:"
msgstr "Test BambuLab:"
msgid "Test OrcaSlicer(GitHub):"
msgstr "Test OrcaSlicer(GitHub):"
msgid "Test Bing.com"
msgstr "Test Bing.com"
@ -14526,39 +14533,6 @@ msgstr "Test Bing.com"
msgid "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"
msgstr "Protokoll Info"
@ -15663,6 +15637,48 @@ msgstr ""
"wie z.B. ABS, durch eine entsprechende Erhöhung der Heizbetttemperatur die "
"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 ""
#~ "The speed setting exceeds the printer's maximum speed "
#~ "(machine_max_speed_x/machine_max_speed_y).\n"

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\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"
"Last-Translator: \n"
"Language-Team: \n"
@ -5961,6 +5961,9 @@ msgstr "Login Region"
msgid "Stealth Mode"
msgstr ""
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only"
msgstr ""
@ -6016,6 +6019,9 @@ msgstr ""
msgid "If enabled, auto-calculate everytime the color changed."
msgstr ""
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr "Auto sync user presets (Printer/Filament/Process)"
@ -13217,7 +13223,7 @@ msgstr ""
msgid "Export Log"
msgstr ""
msgid "Studio Version:"
msgid "OrcaSlicer Version:"
msgstr ""
msgid "System Version:"
@ -13226,10 +13232,10 @@ msgstr ""
msgid "DNS Server:"
msgstr ""
msgid "Test BambuLab"
msgid "Test OrcaSlicer(GitHub)"
msgstr ""
msgid "Test BambuLab:"
msgid "Test OrcaSlicer(GitHub):"
msgstr ""
msgid "Test Bing.com"
@ -13238,39 +13244,6 @@ msgstr ""
msgid "Test bing.com:"
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"
msgstr ""

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\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"
"Last-Translator: Carlos Fco. Caruncho Serrano <puzzlero@gmail.com>\n"
"Language-Team: \n"
@ -6195,6 +6195,9 @@ msgstr "Región de inicio de sesión"
msgid "Stealth Mode"
msgstr "Modo invisible"
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only"
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."
msgstr "Si está activado, auto calcula en cada cambio de color."
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr ""
"Sincronización automática de los perfiles del usuario (Impresora/Filamento/"
@ -14456,8 +14462,8 @@ msgstr "Iniciar Prueba Monotarea"
msgid "Export Log"
msgstr "Exportar Registro"
msgid "Studio Version:"
msgstr "Versión de Orca:"
msgid "OrcaSlicer Version:"
msgstr ""
msgid "System Version:"
msgstr "Versión de Sistema:"
@ -14465,11 +14471,11 @@ msgstr "Versión de Sistema:"
msgid "DNS Server:"
msgstr "Servidor DNS:"
msgid "Test BambuLab"
msgstr "Prueba OrcaSlicer"
msgid "Test OrcaSlicer(GitHub)"
msgstr ""
msgid "Test BambuLab:"
msgstr "Prueba OrcaSlicer:"
msgid "Test OrcaSlicer(GitHub):"
msgstr ""
msgid "Test Bing.com"
msgstr "Prueba Bing.com"
@ -14477,39 +14483,6 @@ msgstr "Prueba Bing.com"
msgid "Test 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"
msgstr "Información de Registro"
@ -15610,6 +15583,48 @@ msgstr ""
"aumentar adecuadamente la temperatura del lecho térmico puede reducir la "
"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 ""
#~ "The speed setting exceeds the printer's maximum speed "
#~ "(machine_max_speed_x/machine_max_speed_y).\n"

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\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"
"Last-Translator: \n"
"Language-Team: Guislain Cyril, Thomas Lété\n"
@ -6222,6 +6222,9 @@ msgstr "Région d'origine"
msgid "Stealth Mode"
msgstr "Mode privé"
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only"
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 "
"changement de couleur."
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr ""
"Synchronisation automatique des pré-réglages utilisateur (Imprimante/"
@ -14603,8 +14609,8 @@ msgstr "Démarrer le test Single-Thread"
msgid "Export Log"
msgstr "Exportation du journal"
msgid "Studio Version:"
msgstr "Version de Studio :"
msgid "OrcaSlicer Version:"
msgstr ""
msgid "System Version:"
msgstr "Version du système :"
@ -14612,11 +14618,11 @@ msgstr "Version du système :"
msgid "DNS Server:"
msgstr "Serveur DNS :"
msgid "Test BambuLab"
msgstr "Test BambuLab"
msgid "Test OrcaSlicer(GitHub)"
msgstr ""
msgid "Test BambuLab:"
msgstr "Test BambuLab :"
msgid "Test OrcaSlicer(GitHub):"
msgstr ""
msgid "Test Bing.com"
msgstr "Test Bing.com"
@ -14624,39 +14630,6 @@ msgstr "Test Bing.com"
msgid "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"
msgstr "Journal de bord"
@ -15775,6 +15748,45 @@ msgstr ""
"déformer, tels que lABS, une augmentation appropriée de la température du "
"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 ""
#~ "The speed setting exceeds the printer's maximum speed "
#~ "(machine_max_speed_x/machine_max_speed_y).\n"

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -5992,6 +5992,9 @@ msgstr "Régió"
msgid "Stealth Mode"
msgstr ""
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only"
msgstr ""
@ -6047,6 +6050,9 @@ msgstr ""
msgid "If enabled, auto-calculate everytime the color changed."
msgstr ""
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr ""
"Felhasználói beállítások automatikus szinkronizálása (Nyomtató/Filament/"
@ -13310,7 +13316,7 @@ msgstr ""
msgid "Export Log"
msgstr ""
msgid "Studio Version:"
msgid "OrcaSlicer Version:"
msgstr ""
msgid "System Version:"
@ -13319,10 +13325,10 @@ msgstr ""
msgid "DNS Server:"
msgstr ""
msgid "Test BambuLab"
msgid "Test OrcaSlicer(GitHub)"
msgstr ""
msgid "Test BambuLab:"
msgid "Test OrcaSlicer(GitHub):"
msgstr ""
msgid "Test Bing.com"
@ -13331,39 +13337,6 @@ msgstr ""
msgid "Test bing.com:"
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"
msgstr ""

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\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"
"Last-Translator: \n"
"Language-Team: \n"
@ -2971,8 +2971,8 @@ msgstr "Slot AMS"
msgid ""
"Note: Only the AMS slots loaded with the same material type can be selected."
msgstr ""
"Nota: sono selezionabili solo gli slot AMS caricati con lo stesso tipo "
"di materiale."
"Nota: sono selezionabili solo gli slot AMS caricati con lo stesso tipo di "
"materiale."
msgid "Enable AMS"
msgstr "Abilita AMS"
@ -3443,8 +3443,8 @@ msgid ""
"No - Dont use alternate extra wall"
msgstr ""
"Modificare automaticamente queste impostazioni? \n"
"Sì - Modifica Garantisci spessore verticale del guscio a Moderato e "
"abilita Parete Aggiuntiva Alternativa\n"
"Sì - Modifica Garantisci spessore verticale del guscio a Moderato e abilita "
"Parete Aggiuntiva Alternativa\n"
"No - Non utilizzare Parete Aggiuntiva Alternativa"
msgid ""
@ -3494,8 +3494,7 @@ msgid ""
"seam_slope_start_height need to be smaller than layer_height.\n"
"Reset to 0."
msgstr ""
"seam_slope_start_height deve essere inferiore a layer_height"
"Reimpostare a 0."
"seam_slope_start_height deve essere inferiore a layer_heightReimpostare a 0."
msgid "Auto bed leveling"
msgstr "Livellamento automatico piano"
@ -6189,6 +6188,9 @@ msgstr "Regione di accesso"
msgid "Stealth Mode"
msgstr "Modalità invisibile"
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only"
msgstr "Verifica solo la disponibilità di aggiornamenti stabili"
@ -6246,6 +6248,9 @@ msgstr ""
msgid "If enabled, auto-calculate everytime the color changed."
msgstr "Se abilitato, calcola automaticamente ogni volta che il colore cambia."
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr ""
"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 "
"scattered surface."
msgstr ""
"Precauzioni per l'uso! La calibrazione del flusso sulla piastra PEI testurizzata "
"può fallire a causa della superficie irregolare."
"Precauzioni per l'uso! La calibrazione del flusso sulla piastra PEI "
"testurizzata può fallire a causa della superficie irregolare."
msgid "Automatic flow calibration using Micro Lidar"
msgstr "Calibrazione automatica del flusso tramite Micro Lidar"
@ -8771,8 +8776,8 @@ msgid ""
msgstr ""
"L'impostazione del jerk supera quella massima prevista dalla stampante. "
"(machine_max_jerk_x/machine_max_jerk_y).\n"
"Orca limiterà automaticamente la velocità del jerk per garantire che "
"non superi le capacità della stampante.\n"
"Orca limiterà automaticamente la velocità del jerk per garantire che non "
"superi le capacità della stampante.\n"
"È possibile regolare l'impostazione di jerk massimo nella configurazione "
"della stampante per ottenere velocità più elevate."
@ -8786,8 +8791,8 @@ msgid ""
msgstr ""
"L'impostazione di accelerazione supera quella massima prevista dalla "
"stampante. (machine_max_acceleration_extruding).\n"
"Orca limiterà automaticamente la velocità di accelerazione per garantire "
"che non superi le capacità della stampante.\n"
"Orca limiterà automaticamente la velocità di accelerazione per garantire che "
"non superi le capacità della stampante.\n"
"È possibile regolare il valore machine_max_acceleration_extruding nella "
"configurazione della stampante per ottenere velocità più elevate."
@ -9769,15 +9774,16 @@ msgid ""
"All: Add solid infill for all suitable sloping surfaces\n"
"Default value is All."
msgstr ""
"Aggiunge un riempimento solido in prossimità di superfici inclinate "
"per garantire lo spessore verticale del guscio (layers solidi superiori e "
"Aggiunge un riempimento solido in prossimità di superfici inclinate per "
"garantire lo spessore verticale del guscio (layers solidi superiori e "
"inferiori)\n"
"Nessuno: Non viene aggiunto alcun riempimento solido. Attenzione: utilizzare "
"questa opzione con precauzione se il modello presenta superfici inclinate\n"
"Solo Critico: Evitare l'aggiunta di riempimenti solidi per le pareti\n"
"Moderato: Aggiungere il riempimento solido solo per le superfici fortemente "
"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."
msgid "Critical Only"
@ -14470,8 +14476,8 @@ msgstr "Avvia test a thread singolo"
msgid "Export Log"
msgstr "Esporta Log"
msgid "Studio Version:"
msgstr "Versione Studio:"
msgid "OrcaSlicer Version:"
msgstr ""
msgid "System Version:"
msgstr "Versione del sistema:"
@ -14479,11 +14485,11 @@ msgstr "Versione del sistema:"
msgid "DNS Server:"
msgstr "Server DNS:"
msgid "Test BambuLab"
msgstr "Test BambuLab"
msgid "Test OrcaSlicer(GitHub)"
msgstr ""
msgid "Test BambuLab:"
msgstr "Test BambuLab:"
msgid "Test OrcaSlicer(GitHub):"
msgstr ""
msgid "Test Bing.com"
msgstr "Test Bing.com"
@ -14491,39 +14497,6 @@ msgstr "Test Bing.com"
msgid "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"
msgstr "Informazioni sul registro"
@ -15627,12 +15600,54 @@ msgstr ""
"aumentare in modo appropriato la temperatura del piano riscaldato può "
"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 ""
#~ "Alternate extra wall only works with ensure vertical shell thickness "
#~ "disabled. "
#~ msgstr ""
#~ "L'opzione Parete Aggiuntiva Alternativa funziona solo con la disattivazione "
#~ "dell'opzione Garantisci spessore verticale del guscio"
#~ "L'opzione Parete Aggiuntiva Alternativa funziona solo con la "
#~ "disattivazione dell'opzione Garantisci spessore verticale del guscio"
#~ msgid ""
#~ "Change these settings automatically? \n"
@ -15641,8 +15656,8 @@ msgstr ""
#~ "No - Dont use alternate extra wall"
#~ msgstr ""
#~ "Modificare automaticamente queste impostazioni? \n"
#~ "Sì - Disabilita Garantisci spessore verticale del guscio e abilita "
#~ "Parete Aggiuntiva Alternativa\n"
#~ "Sì - Disabilita Garantisci spessore verticale del guscio e abilita Parete "
#~ "Aggiuntiva Alternativa\n"
#~ "No - Non utilizzare una Parete Aggiuntiva Alternativa"
#~ msgid ""

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\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"
"Last-Translator: \n"
"Language-Team: \n"
@ -5878,6 +5878,9 @@ msgstr "地域"
msgid "Stealth Mode"
msgstr ""
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only"
msgstr ""
@ -5933,6 +5936,9 @@ msgstr ""
msgid "If enabled, auto-calculate everytime the color changed."
msgstr ""
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr "ユーザープリセットの自動同期 (プリンター/フィラメント/プロセス)"
@ -12936,7 +12942,7 @@ msgstr ""
msgid "Export Log"
msgstr ""
msgid "Studio Version:"
msgid "OrcaSlicer Version:"
msgstr ""
msgid "System Version:"
@ -12945,10 +12951,10 @@ msgstr ""
msgid "DNS Server:"
msgstr ""
msgid "Test BambuLab"
msgid "Test OrcaSlicer(GitHub)"
msgstr ""
msgid "Test BambuLab:"
msgid "Test OrcaSlicer(GitHub):"
msgstr ""
msgid "Test Bing.com"
@ -12957,39 +12963,6 @@ msgstr ""
msgid "Test bing.com:"
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"
msgstr ""

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\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"
"Last-Translator: Hotsolidinfill <138652683+Hotsolidinfill@users.noreply."
"github.com>, crwusiz <crwusiz@naver.com>\n"
@ -6021,6 +6021,9 @@ msgstr "로그인 지역"
msgid "Stealth Mode"
msgstr "스텔스 모드"
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only"
msgstr "안정적인 업데이트만 확인"
@ -6076,6 +6079,9 @@ msgstr "플러시 볼륨: 색상이 변경될 때마다 자동 계산됩니다."
msgid "If enabled, auto-calculate everytime the color changed."
msgstr "활성화하면 색상이 변경될 때마다 자동 계산됩니다."
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr "사용자 사전 설정 자동 동기화(프린터/필라멘트/프로세스)"
@ -13795,8 +13801,8 @@ msgstr "단일 스레드 테스트 시작"
msgid "Export Log"
msgstr "로그 내보내기"
msgid "Studio Version:"
msgstr "스튜디오 버전:"
msgid "OrcaSlicer Version:"
msgstr ""
msgid "System Version:"
msgstr "시스템 버전:"
@ -13804,11 +13810,11 @@ msgstr "시스템 버전:"
msgid "DNS Server:"
msgstr "DNS 서버:"
msgid "Test BambuLab"
msgstr "테스트 뱀부랩"
msgid "Test OrcaSlicer(GitHub)"
msgstr ""
msgid "Test BambuLab:"
msgstr "테스트 뱀부랩:"
msgid "Test OrcaSlicer(GitHub):"
msgstr ""
msgid "Test Bing.com"
msgstr "테스트 Bing.com"
@ -13816,39 +13822,6 @@ msgstr "테스트 Bing.com"
msgid "Test 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"
msgstr "로그 정보"
@ -14901,6 +14874,48 @@ msgstr ""
"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 ""
#~ "The speed setting exceeds the printer's maximum speed "
#~ "(machine_max_speed_x/machine_max_speed_y).\n"

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -6043,6 +6043,9 @@ msgstr "Inlogregio"
msgid "Stealth Mode"
msgstr ""
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only"
msgstr ""
@ -6099,6 +6102,9 @@ msgstr ""
msgid "If enabled, auto-calculate everytime the color changed."
msgstr ""
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr ""
"Gebruikersvoorinstellingen automatisch synchroniseren (printer/filament/"
@ -13424,7 +13430,7 @@ msgstr ""
msgid "Export Log"
msgstr ""
msgid "Studio Version:"
msgid "OrcaSlicer Version:"
msgstr ""
msgid "System Version:"
@ -13433,10 +13439,10 @@ msgstr ""
msgid "DNS Server:"
msgstr ""
msgid "Test BambuLab"
msgid "Test OrcaSlicer(GitHub)"
msgstr ""
msgid "Test BambuLab:"
msgid "Test OrcaSlicer(GitHub):"
msgstr ""
msgid "Test Bing.com"
@ -13445,39 +13451,6 @@ msgstr ""
msgid "Test bing.com:"
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"
msgstr ""

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\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"
"Last-Translator: Krzysztof Morga <tlumaczeniebs@gmail.com>\n"
"Language-Team: \n"
@ -6170,6 +6170,9 @@ msgstr "Region Logowania"
msgid "Stealth Mode"
msgstr "Tryb \"Niewidzialny\""
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only"
msgstr "Sprawdzaj aktualizacje (tylko wersje stabilne)"
@ -6229,6 +6232,9 @@ msgid "If enabled, auto-calculate everytime the color changed."
msgstr ""
"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)"
msgstr ""
"Automatyczna synchronizacja profili użytkownika (Drukarka/Filament/Proces)"
@ -7103,8 +7109,8 @@ msgstr "Ignoruj"
msgid ""
"When recording timelapse without toolhead, it is recommended to add a "
"\"Timelapse Wipe Tower\" \n"
"by right-click the empty position of build plate and choose \"Add "
"Primitive\"->\"Timelapse Wipe Tower\"."
"by right-click the empty position of build plate and choose \"Add Primitive"
"\"->\"Timelapse Wipe Tower\"."
msgstr ""
"Podczas nagrywania timelapse'a bez głowicy narzędziowej zaleca się dodanie "
"\"Timelaps - Wieża Czyszcząca\" \n"
@ -8944,10 +8950,10 @@ msgid ""
msgstr ""
"Unikaj ruchów nad obrysami-\n"
"Maksymalna długość objazdu przy unikaniu przejeżdżania nad obrysami. Jeśli "
"objazd miałby wykroczyć poza tę wartość, funkcja \"unikaj ruchów nad "
"obrysami\" zostanie zignorowana dla tej ścieżki. Długość objazdu można "
"zdefiniować jako wartość absolutna lub obliczona procentowo (np. 50%) z "
"długości ruchu bezpośredniego."
"objazd miałby wykroczyć poza tę wartość, funkcja \"unikaj ruchów nad obrysami"
"\" zostanie zignorowana dla tej ścieżki. Długość objazdu można zdefiniować "
"jako wartość absolutna lub obliczona procentowo (np. 50%) z długości ruchu "
"bezpośredniego."
msgid "mm or %"
msgstr "mm lub %"
@ -9507,9 +9513,9 @@ msgid ""
"quality for needle and small details"
msgstr ""
"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 "
"wentylatora\", tak aby warstwa mogła być chłodzona przez dłuższy czas. Może "
"to poprawić jakość chłodzenia dla igieł i małych detali"
"był krótszy niż próg czasu warstwy w \"Próg maksymalnej prędkości wentylatora"
"\", tak aby warstwa mogła być chłodzona przez dłuższy czas. Może to poprawić "
"jakość chłodzenia dla igieł i małych detali"
msgid "Normal printing"
msgstr "Normalne drukowanie"
@ -10636,10 +10642,10 @@ msgstr "Pełna prędkość wentylatora na warstwie"
msgid ""
"Fan speed will be ramped up linearly from zero at layer "
"\"close_fan_the_first_x_layers\" to maximum at layer "
"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower "
"than \"close_fan_the_first_x_layers\", in which case the fan will be running "
"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1."
"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer"
"\". \"full_fan_speed_layer\" will be ignored if lower than "
"\"close_fan_the_first_x_layers\", in which case the fan will be running at "
"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1."
msgstr ""
"Prędkość wentylatora będzie stopniowo zwiększana liniowo od zera 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ź\", "
"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 "
"podczas robienia zdjęcia, wieża czyszcząca jest wymagana w trybie "
"\"Wygładź\" do czyszczenia dyszy."
"podczas robienia zdjęcia, wieża czyszcząca jest wymagana w trybie \"Wygładź"
"\" do czyszczenia dyszy."
msgid "Traditional"
msgstr "Tradycyjny"
@ -12190,10 +12196,10 @@ msgid ""
"triangle mesh slicing. The gap closing operation may reduce the final print "
"resolution, therefore it is advisable to keep the value reasonably low."
msgstr ""
"Szpary mniejsze niż dwukrotność wartości parametru \"promień zamykania "
"szpar\" zostaną zamknięte przy cięciu. Operacja zamykania szpar może "
"zmniejszyć finalną rozdzielczość wydruku, więc zalecane jest ustawienie tej "
"wartości na rozsądnie niskim poziomie."
"Szpary mniejsze niż dwukrotność wartości parametru \"promień zamykania szpar"
"\" zostaną zamknięte przy cięciu. Operacja zamykania szpar może zmniejszyć "
"finalną rozdzielczość wydruku, więc zalecane jest ustawienie tej wartości na "
"rozsądnie niskim poziomie."
msgid "Slicing Mode"
msgstr "Tryb cięcia"
@ -14371,8 +14377,8 @@ msgstr "Rozpocznij test jednowątkowy"
msgid "Export Log"
msgstr "Eksportuj log"
msgid "Studio Version:"
msgstr "Wersja Studio:"
msgid "OrcaSlicer Version:"
msgstr ""
msgid "System Version:"
msgstr "Wersja systemu:"
@ -14380,11 +14386,11 @@ msgstr "Wersja systemu:"
msgid "DNS Server:"
msgstr "Serwer DNS:"
msgid "Test BambuLab"
msgstr "Test BambuLab"
msgid "Test OrcaSlicer(GitHub)"
msgstr ""
msgid "Test BambuLab:"
msgstr "Test BambuLab:"
msgid "Test OrcaSlicer(GitHub):"
msgstr ""
msgid "Test Bing.com"
msgstr "Test Bing.com"
@ -14392,39 +14398,6 @@ msgstr "Test Bing.com"
msgid "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"
msgstr "Informacje o logu"
@ -14529,8 +14502,8 @@ msgstr ""
"Czy chcesz go zastąpić?"
msgid ""
"We would rename the presets as \"Vendor Type Serial @printer you "
"selected\". \n"
"We would rename the presets as \"Vendor Type Serial @printer you selected"
"\". \n"
"To add preset for more printers, Please go to printer selection"
msgstr ""
"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 "
"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 ""
#~ "The speed setting exceeds the printer's maximum speed "
#~ "(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 "
#~ "print the object without elevation."
#~ msgstr ""
#~ "Podniesienie zbyt małe dla modelu. Użyj funkcji \"Podkładka wokół "
#~ "modelu\", aby wydrukować model bez podniesienia."
#~ "Podniesienie zbyt małe dla modelu. Użyj funkcji \"Podkładka wokół modelu"
#~ "\", aby wydrukować model bez podniesienia."
#~ msgid ""
#~ "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 ""
"Project-Id-Version: Orca Slicer\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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -5975,6 +5975,9 @@ msgstr "Logga in Region"
msgid "Stealth Mode"
msgstr ""
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only"
msgstr ""
@ -6030,6 +6033,9 @@ msgstr ""
msgid "If enabled, auto-calculate everytime the color changed."
msgstr ""
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr ""
"Automatisk synkronisering av användarens förinställningar (skrivare/filament/"
@ -13236,7 +13242,7 @@ msgstr ""
msgid "Export Log"
msgstr ""
msgid "Studio Version:"
msgid "OrcaSlicer Version:"
msgstr ""
msgid "System Version:"
@ -13245,10 +13251,10 @@ msgstr ""
msgid "DNS Server:"
msgstr ""
msgid "Test BambuLab"
msgid "Test OrcaSlicer(GitHub)"
msgstr ""
msgid "Test BambuLab:"
msgid "Test OrcaSlicer(GitHub):"
msgstr ""
msgid "Test Bing.com"
@ -13257,39 +13263,6 @@ msgstr ""
msgid "Test bing.com:"
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"
msgstr ""

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: OrcaSlicer\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"
"Last-Translator: Olcay ÖREN\n"
"Language-Team: Türkçe\n"
@ -6120,6 +6120,9 @@ msgstr "Giriş Bölgesi"
msgid "Stealth Mode"
msgstr "Gizli mod"
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only"
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."
msgstr "Etkinleştirilirse, renk her değiştiğinde otomatik hesapla."
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)"
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"
msgstr "Logu Dışa Aktar"
msgid "Studio Version:"
msgstr "Stüdyo Sürümü:"
msgid "OrcaSlicer Version:"
msgstr ""
msgid "System Version:"
msgstr "Sistem Versiyonu:"
@ -14204,11 +14210,11 @@ msgstr "Sistem Versiyonu:"
msgid "DNS Server:"
msgstr "Dns sunucusu:"
msgid "Test BambuLab"
msgstr "BambuLab'ı test edin"
msgid "Test OrcaSlicer(GitHub)"
msgstr ""
msgid "Test BambuLab:"
msgstr "BambuLab'ı test edin"
msgid "Test OrcaSlicer(GitHub):"
msgstr ""
msgid "Test Bing.com"
msgstr "Bing.com'u test edin"
@ -14216,39 +14222,6 @@ msgstr "Bing.com'u test edin"
msgid "Test bing.com:"
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"
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ı "
"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 ""
#~ "The speed setting exceeds the printer's maximum speed "
#~ "(machine_max_speed_x/machine_max_speed_y).\n"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \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"
"Last-Translator: \n"
"Language-Team: \n"
@ -6030,6 +6030,9 @@ msgstr "Регіон входу"
msgid "Stealth Mode"
msgstr ""
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only"
msgstr ""
@ -6084,6 +6087,9 @@ msgstr ""
msgid "If enabled, auto-calculate everytime the color changed."
msgstr ""
msgid "Network"
msgstr ""
msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr ""
"Автоматична синхронізація користувацьких пресетів (принтер/філамент/процес)"
@ -13404,7 +13410,7 @@ msgstr ""
msgid "Export Log"
msgstr ""
msgid "Studio Version:"
msgid "OrcaSlicer Version:"
msgstr ""
msgid "System Version:"
@ -13413,10 +13419,10 @@ msgstr ""
msgid "DNS Server:"
msgstr ""
msgid "Test BambuLab"
msgid "Test OrcaSlicer(GitHub)"
msgstr ""
msgid "Test BambuLab:"
msgid "Test OrcaSlicer(GitHub):"
msgstr ""
msgid "Test Bing.com"
@ -13425,39 +13431,6 @@ msgstr ""
msgid "Test bing.com:"
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"
msgstr ""

View file

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

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Orca Slicer\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"
"Last-Translator: ablegods <ablegods@gmail.com>\n"
"Language-Team: \n"
@ -6119,6 +6119,9 @@ msgstr "登入區域"
msgid "Stealth Mode"
msgstr "區域網路模式"
msgid "Enable network plugin"
msgstr ""
msgid "Check for stable updates only"
msgstr ""
@ -6173,6 +6176,9 @@ msgstr ""
msgid "If enabled, auto-calculate everytime the color changed."
msgstr ""
msgid "Network"
msgstr ""
#, fuzzy
msgid "Auto sync user presets(Printer/Filament/Process)"
msgstr "同步使用者預設(列印設備/線材/列印品質參數)"
@ -13660,7 +13666,7 @@ msgstr ""
msgid "Export Log"
msgstr ""
msgid "Studio Version:"
msgid "OrcaSlicer Version:"
msgstr ""
msgid "System Version:"
@ -13669,10 +13675,10 @@ msgstr ""
msgid "DNS Server:"
msgstr ""
msgid "Test BambuLab"
msgid "Test OrcaSlicer(GitHub)"
msgstr ""
msgid "Test BambuLab:"
msgid "Test OrcaSlicer(GitHub):"
msgstr ""
msgid "Test Bing.com"
@ -13681,39 +13687,6 @@ msgstr ""
msgid "Test bing.com:"
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"
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.6 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 Neo 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.6 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 S1 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.6 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 Neo 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.6 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 Neo 0.4 nozzle",
"Creality Ender-3 S1 0.4 nozzle",

View file

@ -7,14 +7,14 @@
"inherits": "Creality Generic PLA",
"filament_max_volumetric_speed": ["18"],
"slow_down_min_speed": ["20"],
"cool_plate_temp" : ["45"],
"eng_plate_temp" : ["45"],
"hot_plate_temp" : ["45"],
"textured_plate_temp" : ["45"],
"cool_plate_temp_initial_layer" : ["45"],
"eng_plate_temp_initial_layer" : ["45"],
"hot_plate_temp_initial_layer" : ["45"],
"textured_plate_temp_initial_layer" : ["45"],
"cool_plate_temp" : ["55"],
"eng_plate_temp" : ["55"],
"hot_plate_temp" : ["55"],
"textured_plate_temp" : ["55"],
"cool_plate_temp_initial_layer" : ["55"],
"eng_plate_temp_initial_layer" : ["55"],
"hot_plate_temp_initial_layer" : ["55"],
"textured_plate_temp_initial_layer" : ["55"],
"compatible_printers": [
"Creality Ender-3 V3 SE 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.6 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 Neo 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.6 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 Neo 0.4 nozzle",
"Creality Ender-3 S1 0.4 nozzle",

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -11,6 +11,7 @@
],
"compatible_printers": [
"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",
"family": "MyPrinter",
"bed_model": "",
"bed_texture": "",
"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

@ -6,7 +6,7 @@
"machine_tech": "FFF",
"family": "MyPrinter",
"bed_model": "",
"bed_texture": "",
"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,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"
],
"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",
"max_layer_height": [
"0.28"

View file

@ -112,7 +112,7 @@
"0"
],
"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": [
"0.28"
],

View file

@ -113,7 +113,7 @@
"0"
],
"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": [
"0.28"
],

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -80,61 +80,53 @@ 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 )
{
let strCmd = pVal['command'];
if(strCmd=='get_recent_projects')
{
ShowRecentFileList(pVal['response']);
}
else if(strCmd=='studio_userlogin')
{
SetLoginInfo(pVal['data']['avatar'],pVal['data']['name']);
}
else if(strCmd=='studio_useroffline')
{
if (strCmd == "get_recent_projects") {
ShowRecentFileList(pVal["response"]);
} else if (strCmd == "studio_userlogin") {
SetLoginInfo(pVal["data"]["avatar"], pVal["data"]["name"]);
} else if (strCmd == "studio_useroffline") {
SetUserOffline();
}
else if( strCmd=="studio_set_mallurl" )
{
SetMallUrl( pVal['data']['url'] );
}
else if( strCmd=="studio_clickmenu" )
{
let strName=pVal['data']['menu'];
} else if (strCmd == "studio_set_mallurl") {
SetMallUrl(pVal["data"]["url"]);
} else if (strCmd == "studio_clickmenu") {
let strName = pVal["data"]["menu"];
GotoMenu(strName);
}
else if( strCmd=="network_plugin_installtip" )
{
} else if (strCmd == "network_plugin_installtip") {
let nShow = pVal["show"] * 1;
if(nShow==1)
{
if (nShow == 1) {
$("#NoPluginTip").show();
$("#NoPluginTip").css("display", "flex");
}
else
{
} else {
$("#NoPluginTip").hide();
}
}
else if( strCmd=="modelmall_model_advise_get")
{
} else if (strCmd == "modelmall_model_advise_get") {
//alert('hot');
if( m_HotModelList!=null )
{
let SS1=JSON.stringify(pVal['hits']);
if (m_HotModelList != null) {
let SS1 = JSON.stringify(pVal["hits"]);
let SS2 = JSON.stringify(m_HotModelList);
if( SS1==SS2 )
return;
if (SS1 == SS2) return;
}
m_HotModelList=pVal['hits'];
m_HotModelList = pVal["hits"];
ShowStaffPick(m_HotModelList);
} else if (data.cmd === "SetLoginPanelVisibility") {
SetLoginPanelVisibility(data.visible);
}
}

View file

@ -25,7 +25,7 @@
<div id="EmptyArea">
<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>

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",
"best_object_pos","head_wrap_detect_zone",
//SoftFever
"host_type", "print_host", "printhost_apikey",
"host_type", "print_host", "printhost_apikey", "bbl_use_printhost",
"print_host_webui",
"printhost_cafile","printhost_port","printhost_authorization_type",
"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_names",
"printer_technology",
"bbl_use_printhost",
"host_type",
"print_host",
"print_host_webui",

View file

@ -344,6 +344,13 @@ VendorType PresetBundle::get_current_vendor_type()
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
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();
// Vendor related handy functions
bool is_bbl_vendor() { return get_current_vendor_type() == VendorType::Marlin_BBL; }
bool use_bbl_network();
//BBS: project embedded preset logic
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 },
{ "repetier", htRepetier },
{ "mks", htMKS },
{ "obico", htObico }
{ "obico", htObico },
{ "flashforge", htFlashforge },
{ "simplyprint", htSimplyPrint },
};
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(PrintHostType)
@ -541,6 +543,13 @@ void PrintConfigDef::init_common_params()
def->mode = comDevelop;
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->label = L("Hostname, IP or URL");
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("mks");
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("PrusaConnect");
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("MKS");
def->enum_labels.push_back("Obico");
def->enum_labels.push_back("Flashforge");
def->enum_labels.push_back("SimplyPrint");
def->mode = comAdvanced;
def->cli = ConfigOptionDef::nocli;
def->set_default_value(new ConfigOptionEnum<PrintHostType>(htOctoPrint));

View file

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

View file

@ -2059,9 +2059,9 @@ void PrintObject::bridge_over_infill()
unsupported_area = closing(unsupported_area, float(SCALED_EPSILON));
// 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;
if(has_lightning_infill || po->config().dont_filter_internal_bridges.value !=ibfDisabled){
if(po->config().dont_filter_internal_bridges.value !=ibfDisabled){
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

View file

@ -508,6 +508,8 @@ set(SLIC3R_GUI_SOURCES
Utils/PrintHost.hpp
Utils/Serial.cpp
Utils/Serial.hpp
Utils/SerialMessageType.hpp
Utils/SerialMessage.hpp
Utils/MKS.cpp
Utils/MKS.hpp
Utils/WxFontUtils.cpp
@ -528,6 +530,15 @@ set(SLIC3R_GUI_SOURCES
GUI/PrinterCloudAuthDialog.hpp
Utils/Obico.cpp
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)

View file

@ -1434,7 +1434,7 @@ int GUI_App::install_plugin(std::string name, std::string package_name, InstallP
if (pro_fn)
pro_fn(InstallStatusInstallCompleted, 100, cancel);
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";
return 0;
}
@ -2616,6 +2616,11 @@ void GUI_App::copy_network_if_available()
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();
bool create_network_agent = false;
__retry:
@ -2627,7 +2632,7 @@ __retry:
if (!bambu_source) {
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": can not get bambu source module!";
m_networking_compatible = false;
if (app_config->get("installed_networking") == "1") {
if (should_load_networking_plugin) {
m_networking_need_update = true;
}
}
@ -2642,13 +2647,13 @@ __retry:
goto __retry;
}
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;
}
}
} else {
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";
m_networking_need_update = true;
}
@ -3462,6 +3467,7 @@ void GUI_App::get_login_info()
wxString strJS = wxString::Format("window.postMessage(%s)", logout_cmd);
GUI::wxGetApp().run_script(strJS);
}
mainframe->m_webview->SetLoginPanelVisibility(true);
}
}

View file

@ -7,35 +7,179 @@
namespace Slic3r {
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);
if (start < 0) return "";
if (start == std::string::npos) return "";
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);
if (key_str != key)
return "";
start += key.size() + 1;
size_t end = url.find('&', start);
if (end < 0)
return "";
if (end == std::string::npos) end = url.length(); // Last param
std::string result = url.substr(start, end - start);
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";
std::stringstream ssOut;
std::string url_str = Http::url_decode(url);
if (boost::contains(url_str, "access_token")) {
std::string sHTML = "<html><body><p>redirect to url </p></body></html>";
std::string redirect_url = parse_params(url_str, "redirect_url");
std::string access_token = parse_params(url_str, "access_token");
std::string refresh_token = parse_params(url_str, "refresh_token");
std::string expires_in_str = parse_params(url_str, "expires_in");
std::string refresh_expires_in_str = parse_params(url_str, "refresh_expires_in");
if (boost::contains(url, "access_token")) {
std::string redirect_url = url_get_param(url, "redirect_url");
std::string access_token = url_get_param(url, "access_token");
std::string refresh_token = url_get_param(url, "refresh_token");
std::string expires_in_str = url_get_param(url, "expires_in");
std::string refresh_expires_in_str = url_get_param(url, "refresh_expires_in");
NetworkAgent* agent = wxGetApp().getAgent();
unsigned int http_code;
@ -72,79 +216,38 @@ std::string http_headers::get_response()
if (agent->is_user_login()) {
wxGetApp().request_user_login(1);
}
GUI::wxGetApp().CallAfter([this] {
wxGetApp().ShowUserLogin(false);
});
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;
GUI::wxGetApp().CallAfter([] { wxGetApp().ShowUserLogin(false); });
std::string location_str = (boost::format("%1%?result=success") % redirect_url).str();
return std::make_shared<ResponseRedirect>(location_str);
} else {
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();
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;
std::string location_str = (boost::format("%1%?result=fail&error=%2%") % redirect_url % error_str).str();
return std::make_shared<ResponseRedirect>(location_str);
}
} else {
std::string sHTML = "<html><body><h1>404 Not Found</h1><p>There's nothing here.</p></body></html>";
return std::make_shared<ResponseNotFound>();
}
}
void HttpServer::ResponseNotFound::write_response(std::stringstream& ssOut)
{
const std::string sHTML = "<html><body><h1>404 Not Found</h1><p>There's nothing here.</p></body></html>";
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 accept_and_run(boost::asio::ip::tcp::acceptor& acceptor, boost::asio::io_service& io_service)
void HttpServer::ResponseRedirect::write_response(std::stringstream& ssOut)
{
std::shared_ptr<session> sesh = std::make_shared<session>(io_service);
acceptor.async_accept(sesh->socket,
[sesh, &acceptor, &io_service](const boost::beast::error_code& accept_error)
{
accept_and_run(acceptor, io_service);
if (!accept_error)
{
session::interact(sesh);
}
});
}
HttpServer::HttpServer()
{
;
}
void HttpServer::start()
{
BOOST_LOG_TRIVIAL(info) << "start_http_service...";
start_http_server = true;
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();
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;
ssOut << "content-type: text/html" << std::endl;
ssOut << "content-length: " << sHTML.length() << std::endl;
ssOut << std::endl;
ssOut << sHTML;
}
} // GUI

View file

@ -13,14 +13,12 @@
#include <string>
#include <memory>
using namespace boost::system;
using namespace boost::asio;
#define LOCALHOST_PORT 13618
#define LOCALHOST_URL "http://localhost:"
namespace Slic3r {
namespace GUI {
namespace Slic3r { namespace GUI {
class session;
class http_headers
{
@ -31,14 +29,12 @@ class http_headers
std::map<std::string, std::string> headers;
public:
std::string get_response();
std::string get_url() { return url; }
int content_length()
{
auto request = headers.find("content-length");
if (request != headers.end())
{
if (request != headers.end()) {
std::stringstream ssLength(request->second);
int content_length;
ssLength >> content_length;
@ -71,82 +67,36 @@ public:
}
};
class session
class HttpServer
{
boost::asio::streambuf buff;
http_headers headers;
static void read_body(std::shared_ptr<session> pThis)
{
int nbuffer = 1000;
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);
});
}
boost::asio::ip::port_type port;
public:
boost::asio::ip::tcp::socket socket;
session(io_service& io_service)
:socket(io_service)
class Response
{
}
static void interact(std::shared_ptr<session> pThis)
{
read_first_line(pThis);
}
public:
virtual ~Response() = default;
virtual void write_response(std::stringstream& ssOut) = 0;
};
class HttpServer {
class ResponseNotFound : public Response
{
public:
HttpServer();
~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;
@ -154,9 +104,55 @@ public:
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;
http_headers headers;
void read_first_line();
void read_next_line();
void read_body();
public:
session(HttpServer::IOServer& server, boost::asio::ip::tcp::socket socket) : server(server), socket(std::move(socket)) {}
void start();
void stop();
};
std::string url_get_param(const std::string& url, const std::string& key);
}};
#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_btn->Enable(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));
else
wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_SEND_GCODE));
@ -989,30 +989,6 @@ void MainFrame::init_tabpanel() {
m_tabpanel->Hide();
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__
m_tabpanel->Bind(wxEVT_BOOKCTRL_PAGE_CHANGED, [this](wxBookCtrlEvent& e) {
#else
@ -1624,7 +1600,7 @@ wxBoxSizer* MainFrame::create_side_tools()
SidePopup* p = new SidePopup(this);
if (wxGetApp().preset_bundle
&& !wxGetApp().preset_bundle->is_bbl_vendor()) {
&& !wxGetApp().preset_bundle->use_bbl_network()) {
// ThirdParty Buttons
SideButton* export_gcode_btn = new SideButton(p, _L("Export G-code file"), "");
export_gcode_btn->SetCornerRadius(0);
@ -3608,7 +3584,7 @@ void MainFrame::load_printer_url(wxString url, wxString apikey)
void MainFrame::load_printer_url()
{
PresetBundle &preset_bundle = *wxGetApp().preset_bundle;
if (preset_bundle.is_bbl_vendor())
if (preset_bundle.use_bbl_network())
return;
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);
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);
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);
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);
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);
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->Wrap(-1);
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);
btn_link->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) {
start_test_bambulab_thread();
start_test_github_thread();
});
btn_bing->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) {
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;
}
wxBoxSizer* NetworkTestDialog::create_result_sizer(wxWindow* parent)
@ -293,22 +195,10 @@ NetworkTestDialog::~NetworkTestDialog()
void NetworkTestDialog::init_bind()
{
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());
} else if (evt.GetInt() == TEST_BING_JOB) {
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);
@ -350,44 +240,33 @@ wxString NetworkTestDialog::get_dns_info()
void NetworkTestDialog::start_all_job()
{
start_test_bambulab_thread();
start_test_github_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()
{
m_sequence_job = new boost::thread([this] {
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_bambulab();
start_test_url(TEST_ORCA_JOB, "OrcaSlicer(GitHub)", "https://github.com/SoftFever/OrcaSlicer");
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");
});
}
void NetworkTestDialog::start_test_bing()
void NetworkTestDialog::start_test_url(TestJob job, wxString name, wxString url)
{
m_in_testing[TEST_BING_JOB] = true;
update_status(TEST_BING_JOB, "test bing start...");
m_in_testing[job] = true;
wxString info = wxString::Format("test %s start...", name);
std::string url = "http://www.bing.com/";
Slic3r::Http http = Slic3r::Http::get(url);
update_status(-1, "[test_bing]: url=" + url);
update_status(job, info);
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)
@ -401,477 +280,19 @@ void NetworkTestDialog::start_test_bing()
;
}
})
.on_ip_resolve([this](std::string ip) {
wxString ip_report = wxString::Format("test bing ip resolved = %s", ip);
update_status(TEST_BING_JOB, ip_report);
.on_ip_resolve([this,name,job](std::string ip) {
wxString ip_report = wxString::Format("test %s ip resolved = %s", name, ip);
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);
this->update_status(TEST_BING_JOB, "test bing failed");
this->update_status(job, wxString::Format("test %s failed", name));
this->update_status(-1, info);
}).perform_sync();
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[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;
m_in_testing[job] = false;
}
void NetworkTestDialog::start_test_ping_thread()
@ -882,62 +303,18 @@ void NetworkTestDialog::start_test_ping_thread()
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()
{
test_job[TEST_BING_JOB] = new boost::thread([this] {
start_test_bing();
});
}
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();
start_test_url(TEST_BING_JOB, "Bing", "http://www.bing.com");
});
}
@ -958,7 +335,7 @@ void NetworkTestDialog::on_close(wxCloseEvent& event)
wxString NetworkTestDialog::get_studio_version()
{
return wxString(SLIC3R_VERSION);
return wxString(SoftFever_VERSION);
}
void NetworkTestDialog::set_default()
@ -975,13 +352,6 @@ void NetworkTestDialog::set_default()
txt_dns_info_value->SetLabelText(get_dns_info());
text_link_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_closing = false;
}

View file

@ -35,15 +35,9 @@ namespace GUI {
enum TestJob {
TEST_BING_JOB = 0,
TEST_BAMBULAB_JOB = 1,
TEST_IOT_JOB = 2,
TEST_OSS_JOB = 3,
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
TEST_ORCA_JOB = 1,
TEST_PING_JOB,
TEST_JOB_MAX
};
class NetworkTestDialog : public DPIDialog
@ -65,24 +59,6 @@ protected:
Button* btn_bing;
wxStaticText* text_bing_title;
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_value;
wxStaticText* text_result;
@ -116,23 +92,10 @@ public:
void start_all_job();
void start_all_job_sequence();
void start_test_bing_thread();
void start_test_bambulab_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_github_thread();
void start_test_ping_thread();
void start_test_plugin_download_thread();
void start_test_bing();
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 start_test_url(TestJob job, wxString name, wxString url);
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)
{
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 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);
inline void enable() { for (auto& field : m_fields) field.second->enable(); }

View file

@ -34,6 +34,8 @@
#include "BitmapCache.hpp"
#include "BonjourDialog.hpp"
#include "MsgDialog.hpp"
#include "OAuthDialog.hpp"
#include "SimplyPrint.hpp"
namespace Slic3r {
namespace GUI {
@ -174,20 +176,24 @@ void PhysicalPrinterDialog::build_printhost_settings(ConfigOptionsGroup* m_optgr
result = host->test(msg);
if (!result && host->is_cloud()) {
if (const auto h = dynamic_cast<SimplyPrint*>(host.get()); h) {
OAuthDialog dlg(this, h->get_oauth_params());
dlg.ShowModal();
const auto& r = dlg.get_result();
result = r.success;
if (r.success) {
h->save_oauth_credential(r);
} else {
msg = r.error_message;
}
} else {
PrinterCloudAuthDialog dlg(this->GetParent(), host.get());
dlg.ShowModal();
auto api_key = dlg.GetApiKey();
const auto api_key = dlg.GetApiKey();
m_config->opt_string("printhost_apikey") = api_key;
result = !api_key.empty();
if (result) {
if (Field* print_host_webui_field = this->m_optgroup->get_field("printhost_apikey"); print_host_webui_field) {
if (TextInput* temp_input = dynamic_cast<TextInput*>(print_host_webui_field->getWindow()); temp_input) {
if (wxTextCtrl* temp = temp_input->GetTextCtrl()) {
temp->SetValue(wxString(api_key));
}
}
}
}
}
}
@ -195,6 +201,31 @@ void PhysicalPrinterDialog::build_printhost_settings(ConfigOptionsGroup* m_optgr
show_info(this, host->get_test_ok_msg(), _L("Success!"));
else
show_error(this, host->get_test_failed_msg(msg));
update();
});
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;
@ -215,6 +246,7 @@ void PhysicalPrinterDialog::build_printhost_settings(ConfigOptionsGroup* m_optgr
Line host_line = m_optgroup->create_single_option_line(option);
host_line.append_widget(printhost_browse);
host_line.append_widget(print_host_test);
host_line.append_widget(print_host_logout);
m_optgroup->append_line(host_line);
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));
if (host) {
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,14 +503,28 @@ void PhysicalPrinterDialog::update(bool printer_change)
const auto opt = m_config->option<ConfigOptionEnum<PrintHostType>>("host_type");
m_optgroup->show_field("host_type");
// hide PrusaConnect address
m_optgroup->enable_field("print_host");
m_optgroup->enable_field("print_host_webui");
m_optgroup->enable_field("printhost_cafile");
m_optgroup->enable_field("printhost_ssl_ignore_revoke");
if (m_printhost_cafile_browse_btn)
m_printhost_cafile_browse_btn->Enable();
// hide pre-configured address, in case user switched to a different host type
if (Field* printhost_field = m_optgroup->get_field("print_host"); printhost_field) {
if (wxTextCtrl* temp = dynamic_cast<wxTextCtrl*>(printhost_field->getWindow()); temp && temp->GetValue() == L"https://connect.prusa3d.com") {
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 (TextInput* temp_input = dynamic_cast<TextInput*>(printhost_field->getWindow()); temp_input) {
if (wxTextCtrl* temp = temp_input->GetTextCtrl(); temp &&temp->GetValue() == L"https://app.obico.io") {
}
}
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,26 +540,48 @@ void PhysicalPrinterDialog::update(bool printer_change)
m_optgroup->show_field("printhost_apikey", true);
for (const std::string& opt_key : std::vector<std::string>{ "printhost_user", "printhost_password" })
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 (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");
}
}
}
}
if (opt->value == htObico) {
supports_multiple_printers = true;
} else if (opt->value == htObico) { // automatically show default obico address
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()) {
if (wxTextCtrl* temp = dynamic_cast<TextCtrl*>(printhost_field)->text_ctrl(); temp && temp->GetValue().IsEmpty()) {
temp->SetValue(L"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 {
@ -594,6 +664,7 @@ void PhysicalPrinterDialog::on_dpi_changed(const wxRect& suggested_rect)
m_printhost_browse_btn->msw_rescale();
m_printhost_test_btn->msw_rescale();
m_printhost_logout_btn->msw_rescale();
if (m_printhost_cafile_browse_btn)
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_test_btn {nullptr};
ScalableButton* m_printhost_logout_btn {nullptr};
ScalableButton* m_printhost_cafile_browse_btn {nullptr};
ScalableButton* m_printhost_client_cert_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();
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
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;
if (is_bbl_vendor) {
if (use_bbl_network) {
//only show connection button for not-BBL printer
connection_btn->Hide();
//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();
bool isBBL = preset_bundle.is_bbl_vendor();
bool isBBL = preset_bundle.use_bbl_network();
wxGetApp().mainframe->show_calibration_button(!isBBL);
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();
sidebar_layout.show = new_sel == MainFrame::tp3DEditor || new_sel == MainFrame::tpPreview;
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)

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);
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(0, 0, 0, wxEXPAND | wxLEFT, 8);
@ -701,10 +701,16 @@ wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxWindow *pa
}
}
if (param == "installed_networking") {
bool pbool = app_config->get_bool("installed_networking");
if (pbool) {
GUI::wxGetApp().CallAfter([] { GUI::wxGetApp().ShowDownNetPluginDlg(); });
}
}
#endif // __WXMSW__
if (param == "developer_mode")
{
if (param == "developer_mode") {
m_developer_mode_def = app_config->get("developer_mode");
if (m_developer_mode_def == "true") {
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_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");
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 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_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."), []() {
@ -1080,12 +1088,14 @@ wxWindow* PreferencesDialog::create_general_page()
sizer_page->Add(item_show_splash_screen, 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(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_user_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(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
sizer_page->Add(title_associate_file, 0, wxTOP| wxEXPAND, FromDIP(20));
sizer_page->Add(item_associate_3mf, 0, wxTOP, FromDIP(3));

View file

@ -23,7 +23,7 @@
namespace Slic3r { namespace GUI {
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);
// Url
@ -91,7 +91,6 @@ void PrinterCloudAuthDialog::OnScriptMessage(wxWebViewEvent& evt)
wxString strCmd = j["command"];
if (strCmd == "login_token") {
auto token = j["data"]["token"];
m_host->set_api_key(token);
m_apikey = token;
}
Close();

View file

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

View file

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

View file

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

View file

@ -3546,6 +3546,7 @@ void TabPrinter::build_fff()
optgroup = page->new_optgroup(L("Advanced"), L"param_advanced");
optgroup->append_single_option_line("printer_structure");
optgroup->append_single_option_line("gcode_flavor");
optgroup->append_single_option_line("bbl_use_printhost");
optgroup->append_single_option_line("disable_m73");
option = optgroup->get_option("thumbnails");
option.opt.full_width = true;
@ -4188,7 +4189,7 @@ void TabPrinter::toggle_options()
// SoftFever: hide BBL specific settings
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);
// SoftFever: hide non-BBL settings

View file

@ -421,6 +421,11 @@ void WebViewPanel::OnFreshLoginStatus(wxTimerEvent &event)
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)
{
boost::property_tree::wptree req;

View file

@ -94,6 +94,7 @@ public:
public:
void SendRecentList(int images);
void SetLoginPanelVisibility(bool bshow);
void SendDesignStaffpick(bool on);
void OpenModelDetail(std::string id, NetworkAgent *agent);
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/MsgDialog.hpp"
#include "Http.hpp"
#include "SerialMessage.hpp"
#include "SerialMessageType.hpp"
namespace fs = boost::filesystem;
namespace pt = boost::property_tree;
@ -40,8 +42,8 @@ const char* MKS::get_name() const { return "MKS"; }
bool MKS::test(wxString& msg) const
{
Utils::TCPConsole console(m_host, m_console_port);
console.enqueue_cmd("M105");
Slic3r::Utils::SerialMessage s("M105", Slic3r::Utils::Command);
console.enqueue_cmd(s);
bool ret = console.run_queue();
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));
Utils::TCPConsole console(m_host, m_console_port);
console.enqueue_cmd(std::string("M23 ") + filename);
console.enqueue_cmd("M24");
Slic3r::Utils::SerialMessage s(std::string("M23 ") + filename, Slic3r::Utils::Command);
console.enqueue_cmd(s);
s.message = "M24";
console.enqueue_cmd(s);
bool ret = console.run_queue();

View file

@ -42,8 +42,6 @@ Obico::Obico(DynamicPrintConfig* config) :
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 {
return m_host;
}

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