From 70c1d860695159630a382317eaeed3810301f3c6 Mon Sep 17 00:00:00 2001 From: mainmind Date: Sat, 25 Mar 2023 10:35:16 +0100 Subject: [PATCH 001/339] Rebase --- bbl/i18n/es/BambuStudio_es.po | 214 +++++++++++++++++++++++++++------- 1 file changed, 172 insertions(+), 42 deletions(-) diff --git a/bbl/i18n/es/BambuStudio_es.po b/bbl/i18n/es/BambuStudio_es.po index 7a8a0aa8e2..3432d1c027 100644 --- a/bbl/i18n/es/BambuStudio_es.po +++ b/bbl/i18n/es/BambuStudio_es.po @@ -566,7 +566,7 @@ msgstr "" "corte!" msgid "Open Project" -msgstr "Proyesto Abierto" +msgstr "Abrir proyecto" msgid "" "The version of Bambu studio is too low and needs to be updated to the latest " @@ -600,13 +600,19 @@ msgid "*" msgstr "*" msgid "The uploads are still ongoing" -msgstr "Las subidas aún están en curso" +msgstr "El envío aún están en curso" msgid "Stop them and continue anyway?" msgstr "¿Detenerlos y continuar de todos modos?" msgid "Ongoing uploads" -msgstr "Cargas en curso" +msgstr "El envío todavía esta en curso" + +msgid "Stop them and continue anyway?" +msgstr "¿Detenerlas y continuar de todos modos?" + +msgid "Ongoing uploads" +msgstr "Envío en curso" msgid "Select a G-code file:" msgstr "Seleccione un archivo de código G:" @@ -765,6 +771,15 @@ msgstr "Sustituir por STL" msgid "Replace the selected part with new STL" msgstr "Sustituir la pieza seleccionada por un STL nuevo" +msgid "Reload the selected parts from disk" +msgstr "Recargar las partes seleccionadas desde disco" + +msgid "Replace with STL" +msgstr "Reemplazar con STL" + +msgid "Replace the selected part with new STL" +msgstr "Reemplazar las partes seleccionadas con nuevo STL" + msgid "Change filament" msgstr "Cambiar el filamento" @@ -878,8 +893,7 @@ msgid "Auto orientation" msgstr "Orientación automática" msgid "Auto orient the object to improve print quality." -msgstr "" -"Orienta automáticamente el objeto para mejorar la calidad de la impresión." +msgstr "Orienta automáticamente el objeto para mejorar la calidad de la impresión." msgid "Split the selected object into mutiple objects" msgstr "Dividir el objeto seleccionado en múltiples objetos" @@ -924,7 +938,10 @@ msgid "Center" msgstr "Centrar" msgid "Edit Process Settings" -msgstr "Editar la configuración del proceso" +msgstr "Editar configuración del proceso" + +msgid "Edit in Parameter Table" +msgstr "Editar en tabla de parámetros" msgid "Edit print parameters for a single object" msgstr "Editar los parámetros de impresión de un solo objeto" @@ -1179,6 +1196,12 @@ msgstr "Abrir el siguiente consejo" msgid "Open Documentation in web browser." msgstr "Abrir documentación en el navegador web" +msgid "Open next tip." +msgstr "Abrir siguiente sugerencia." + +msgid "Open Documentation in web browser." +msgstr "Abrir documentación en el navegador" + msgid "Custom G-code" msgstr "Código G personalizado" @@ -1192,7 +1215,10 @@ msgid "Jump to layer" msgstr "Saltar a la capa" msgid "Please enter the layer number" -msgstr "Introduzca el número de capa." +msgstr "Por favor, introduzca el número de capa" + +msgid "Jump to Layer" +msgstr "Saltar a la capa" msgid "Add Pause" msgstr "Añadir pausa" @@ -1207,7 +1233,10 @@ msgid "Jump to Layer" msgstr "Saltar a la capa" msgid "Filament " -msgstr "FIlament" +msgstr "Filamento" + +msgid "Add Custom Template" +msgstr "Añadir plantilla personalizada" msgid "Start" msgstr "Iniciar" @@ -1219,7 +1248,22 @@ msgid "No printer" msgstr "Sin impresión" msgid "..." -msgstr "" +msgstr "..." + +msgid "Heat the nozzle" +msgstr "Calentar la boquilla" + +msgid "Cut filament" +msgstr "Cortar filamento" + +msgid "Pull back current filament" +msgstr "Extraer el filamento actual" + +msgid "Push new filament into extruder" +msgstr "Empuje el nuevo filamento en el extrusor" + +msgid "Purge old filament" +msgstr "Purgar el filamento antiguo" msgid "?" msgstr "?" @@ -1404,7 +1448,7 @@ msgid "Unknown Failure" msgstr "Error desconocido" msgid "Please check the printer network connection." -msgstr "Compruebe la conexión de red de la impresora." +msgstr "Por favor, comprueba la conexión de red de la impresora." msgid "Abnormal print file data. Please slice again" msgstr "Datos anormales del archivo de impresión. Por favor, procese de nuevo" @@ -1456,9 +1500,7 @@ msgstr "Enviando la configuración de impresión" #, c-format, boost-format msgid "Successfully sent. Will automatically jump to the device page in %ss" -msgstr "" -"Enviado con éxito. Se saltará automáticamente a la página del dispositivo en " -"%s s" +msgstr "Enviado correctamente. Se mostrará automáticamente en el dispositivo en %ss" msgid "An SD card needs to be inserted before printing via LAN." msgstr "Se debe insertar una tarjeta microSD antes de imprimir mediante LAN." @@ -1481,12 +1523,30 @@ msgstr "Envío de archivos G-code a través del servicio en la nube" msgid "Sending gcode file to sdcard" msgstr "Envío de un archivo G-code a la tarjeta microSD" +msgid "An SD card needs to be inserted before printing via LAN." +msgstr "Es necesario insertar una tarjeta SD antes de imprimir a través de red local." + +msgid "Failed to send the print job. Please try again." +msgstr "No se pudo enviar el trabajo de impresión. Inténtalo de nuevo." + +msgid "Send to Printer failed. Please try again." +msgstr "El envio a la impresora falló. Inténtelo de nuevo." + +msgid "Sending gcode file over LAN" +msgstr "Enviando archivo g-code a través de red local" + +msgid "Sending gcode file through cloud service" +msgstr "Enviando archivo a traves de servicio en la nube" + +msgid "Sending gcode file to sdcard" +msgstr "Enviado archivo g-code a la tarjeta SD" + #, c-format, boost-format msgid "Successfully sent. Close current page in %s s" msgstr "Se ha enviado correctamente. Cerrar la página actual en %s s" msgid "An SD card needs to be inserted before sending to printer." -msgstr "Se debe insertar una tarjeta microSD antes de enviar a la impresora." +msgstr "Debe insertar una tarjeta microSD antes de enviar a la impresora." msgid "Please log out and login to the printer again." msgstr "Cierre sesión y vuelva a iniciarla en la impresora." @@ -1547,8 +1607,11 @@ msgstr "" msgid "Attention!" msgstr "¡Atención!" +msgid "Please log out and login to the printer again." +msgstr "Cierre la sesión y vuelva a iniciar sesión en la impresora." + msgid "Downloading" -msgstr "" +msgstr "Descargando" msgid "Download failed" msgstr "Descarga fallida" @@ -1557,7 +1620,7 @@ msgid "Cancelled" msgstr "Cancelado" msgid "Install successfully." -msgstr "Instalado correctamente" +msgstr "Instalación correcta" msgid "Installing" msgstr "Instalando…" @@ -1565,11 +1628,17 @@ msgstr "Instalando…" msgid "Install failed" msgstr "Error de instalación" +msgid "Installing" +msgstr "Instalando" + +msgid "Install failed" +msgstr "Instalación fallida" + msgid "Portions copyright" msgstr "Porciones del copyright" msgid "Copyright" -msgstr "Copyright" +msgstr "Derecho de autor" msgid "License" msgstr "Licencia" @@ -1817,12 +1886,21 @@ msgstr "" "también ralentizan el proceso. Durante este tiempo, es posible que el " "indicador no represente la humedad de la cámara con precisión." +msgid "Print with filaments in the AMS" +msgstr "Imprimir con filamentos en el AMS" + +msgid "Disable AMS" +msgstr "Desactivar AMS" + +msgid "Print with the filament mounted on the back of chassis" +msgstr "Imprimir con el filamento montado en la parte posterior del chasis" + msgid "" "Config which AMS slot should be used for a filament used in the print job" msgstr "Configure qué ranura AMS debe utilizarse para la impresión." msgid "Filament used in this print job" -msgstr "Filamento utilizado en esta impresión" +msgstr "Filamento utilizado en este trabajo de impresión" msgid "AMS slot used for this filament" msgstr "Ranura AMS utilizada para este filamento" @@ -2461,25 +2539,37 @@ msgid "Layer Time" msgstr "Tiempo de capa" msgid "Height: " -msgstr "Altura:" +msgstr "Altura: " msgid "Width: " -msgstr "Ancho:" +msgstr "Ancho: " msgid "Speed: " -msgstr "Velocidad:" +msgstr "Velocidad: " msgid "Flow: " -msgstr "Flujo:" +msgstr "Flujo: " msgid "Layer Time: " -msgstr "Tiempo de capa:" +msgstr "Tiempo de capa: " msgid "Fan Speed: " msgstr "Velocidad del ventilador:" +msgid "Width: " +msgstr "Anchura: " + +msgid "Speed: " +msgstr "Velocidad: " + +msgid "Flow: " +msgstr "Flujo: " + +msgid "Fan Speed: " +msgstr "Velocidad del ventilador: " + msgid "Temperature: " -msgstr "Temperatura:" +msgstr "Temperatura: " msgid "Loading G-codes" msgstr "Carga de códigos G" @@ -2616,6 +2706,9 @@ msgstr "Planificar tiempo" msgid "Model printing time" msgstr "Tiempo de impresión del modelo" +msgid "Total time" +msgstr "Tiempo total" + msgid "Switch to silent mode" msgstr "Cambiar al modo silencioso" @@ -2632,13 +2725,13 @@ msgid "Quality / Speed" msgstr "Calidad / Velocidad" msgid "Smooth" -msgstr "Suavizar" +msgstr "Alisado" msgid "Radius" msgstr "Radio" msgid "Keep min" -msgstr "Mantener mínimo" +msgstr "minutos restantes" msgid "Left mouse button:" msgstr "Botón izquierdo del ratón:" @@ -2919,6 +3012,9 @@ msgstr "Exportar archivo G-code" msgid "Send" msgstr "Enviar" +msgid "Print plate" +msgstr "Imprimir placa" + msgid "Export plate sliced file" msgstr "Exportar la placa de impresión actual" @@ -2950,7 +3046,7 @@ msgid "Check for Update" msgstr "Comprobar Actualicaciones" msgid "Open Network Test" -msgstr "Abrir prueba de red" +msgstr "Realizar prueba de red" #, c-format, boost-format msgid "&About %s" @@ -3211,7 +3307,7 @@ msgid "No to All" msgstr "No a todo" msgid "Choose a directory" -msgstr "Elegir un directorio" +msgstr "Seleccionar directorio" #, c-format, boost-format msgid "There is %d config exported. (Only non-system configs)" @@ -3356,6 +3452,15 @@ msgstr "Agrupe los archivos por mes, primero los recientes." msgid "Show all files, recent first." msgstr "Mostrar todos los archivos, primero los recientes." +msgid "Group files by year, recent first." +msgstr "Agrupar ficheros por año, primero los más recientes" + +msgid "Group files by month, recent first." +msgstr "Agrupar ficheros por mes, primero los más recientes" + +msgid "Show all files, recent first." +msgstr "Mostrar todos los fciheros, primero los más recientes" + msgid "Timelapse" msgstr "Timelapse" @@ -3369,13 +3474,13 @@ msgid "Switch to video files." msgstr "Cambia a archivos de vídeo." msgid "Delete selected files from printer." -msgstr "Elimine los archivos seleccionados de la impresora." +msgstr "Borrar archivos seleccionados de la impresora." msgid "Download" msgstr "Descargar" msgid "Download selected files from printer." -msgstr "Descargue los archivos seleccionados de la impresora." +msgstr "Descargar archivos seleccionados de la impresora." msgid "Select" msgstr "Seleccionar" @@ -3387,7 +3492,7 @@ msgid "No printers." msgstr "No hay impresoras." msgid "Not supported by this model of printer!" -msgstr "¡No es compatible con este modelo de impresora!" +msgstr "¡Modelo de impresora no soportado!" msgid "Connecting..." msgstr "Conectando…" @@ -3453,7 +3558,7 @@ msgid "Camera" msgstr "Cámara" msgid "SD Card" -msgstr "Tarjeta MicroSD" +msgstr "Tarjeta SD" msgid "Camera Setting" msgstr "Configuración de cámara" @@ -3504,10 +3609,10 @@ msgid "Debug Info" msgstr "Información de Depuración" msgid "No SD Card" -msgstr "No hay tarjeta SD" +msgstr "Tarjeta SD no encontrada" msgid "SD Card Abnormal" -msgstr "Tarjeta microSD anormal" +msgstr "Tarjeta SD errónea" msgid "Printing List" msgstr "Imprimiendo Lista" @@ -3516,7 +3621,7 @@ msgid "Cancel print" msgstr "Cancelar impresión" msgid "Are you sure you want to cancel this print?" -msgstr "¿Estás seguro de que quieres cancelar esta impresión?" +msgstr "¿Está seguro de cancelar la impresión?" #, c-format, boost-format msgid "" @@ -3698,13 +3803,13 @@ msgid "ERROR" msgstr "¡Error!" msgid "CANCELED" -msgstr "Cancelado" +msgstr "CANCELADO" msgid "COMPLETED" -msgstr "Completado" +msgstr "COMPLETADO" msgid "Cancel upload" -msgstr "Cancelar la subida" +msgstr "Cancelar envío" msgid "Slice ok." msgstr "Rebanado correcto." @@ -3719,13 +3824,13 @@ msgid "Warning:" msgstr "Advertencia:" msgid "Export successfully." -msgstr "Exportación correcta" +msgstr "Exportado correctamente." msgid " (Repair)" msgstr " (Reparación)" msgid " Click here to install it." -msgstr " Haga clic aquí para instalarlo." +msgstr "Click aquí para instalar." msgid "WARNING:" msgstr "AVISO:" @@ -3874,6 +3979,9 @@ msgstr "Retirar el último filamento" msgid "Synchronize filament list from AMS" msgstr "Sincronizar la lista de filamentos de AMS" +msgid "Synchronize filament list from AMS" +msgstr "Sincronizar filamentos desde AMS" + msgid "Set filaments to use" msgstr "Establecer filamentos a utilizar" @@ -3978,6 +4086,15 @@ msgstr "" "El 3mf fue generado por una versión antigua de Bambu Studio, solo se " "cargaran datos de geometría." +msgid "Load 3mf" +msgstr "Cargar 3mf" + +msgid "The Config can not be loaded." +msgstr "La configuración no puede ser cargada." + +msgid "The 3mf is generated by old Bambu Studio, load geometry data only." +msgstr "3mf generado con versión antigua de Bambu Studio, se cargan datos de geometría unicamente" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Found following keys " @@ -4162,7 +4279,7 @@ msgid "Importing Model" msgstr "Importando modelo" msgid "prepare 3mf file..." -msgstr "preparando el archivo 3mf..." +msgstr "preparar archivo 3mf..." msgid "downloading project ..." msgstr "descargando proyecto..." @@ -4171,6 +4288,13 @@ msgstr "descargando proyecto..." msgid "Project downloaded %d%%" msgstr "Proyecto descargado %d%%" +msgid "downloading project ..." +msgstr "descargado proyecto..." + +#, c-format, boost-format +msgid "Project downloaded %d%%" +msgstr "Proyecto %d%% descargado" + msgid "The selected file" msgstr "El archivo seleccionado" @@ -4541,7 +4665,7 @@ msgid "Project-inside presets" msgstr "Preajustes internos del proyecto" msgid "Add/Remove filaments" -msgstr "Añadir/quitar filamento" +msgstr "Añadir/quitar filamentos" msgid "Add/Remove materials" msgstr "Añadir/eliminar materiales" @@ -4582,6 +4706,12 @@ msgstr "" msgid "Log Out" msgstr "" +msgid "Add/Remove materials" +msgstr "Añadir/quitar materiales" + +msgid "Add/Remove printers" +msgstr "Añadir/quitar impresoras" + msgid "Slice all plate to obtain time and filament estimation" msgstr "" "Rebana todas las piezas para obtener una estimación del tiempo y del " From dbe61652c772a7582ae3e26c34e797c2a2c160c5 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Thu, 2 Mar 2023 10:02:42 +0800 Subject: [PATCH 002/339] ENH: give a tips when printer model is different Change-Id: I387f2dd74e80efc4c0fbbd5d39faeb29ac2a9581 Signed-off-by: Stone Li --- src/slic3r/GUI/SelectMachine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index a64588c256..53d0ec40fd 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -1989,7 +1989,7 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) std::vector confirm_text; confirm_text.push_back(_L("Please check the following infomation and click Confirm to continue sending print:") + "\n"); -#if 0 +#if 1 //Check Printer Model Id bool is_same_printer_type = is_same_printer_model(); if (!is_same_printer_type) From 6fab32c98b1a5887181fe8e8a619517a704f10a1 Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Wed, 22 Feb 2023 11:46:12 +0800 Subject: [PATCH 003/339] ENH: backup: add logic to cleanup directory under cli Change-Id: I7a846e362f45d1c7e34bef59be3b2c312799d0d2 --- src/BambuStudio.cpp | 9 +++++++++ src/libslic3r/Model.cpp | 20 +++++++++++++++++++- src/libslic3r/Model.hpp | 1 + 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/BambuStudio.cpp b/src/BambuStudio.cpp index 1197e0ced5..2cf7e053ec 100644 --- a/src/BambuStudio.cpp +++ b/src/BambuStudio.cpp @@ -311,11 +311,17 @@ static PrinterTechnology get_printer_technology(const DynamicConfig &config) g_cli_callback_mgr.stop();\ boost::nowide::cout.flush();\ boost::nowide::cerr.flush();\ + for (Model &model : m_models) {\ + model.remove_backup_path_if_exist();\ + }\ return(ret);} #else #define flush_and_exit(ret) { boost::nowide::cout << __FUNCTION__ << " found error, exit" << std::endl;\ boost::nowide::cout.flush();\ boost::nowide::cerr.flush();\ + for (Model &model : m_models) {\ + model.remove_backup_path_if_exist();\ + }\ return(ret);} #endif @@ -2371,6 +2377,9 @@ int CLI::run(int argc, char **argv) g_cli_callback_mgr.stop(); #endif + for (Model &model : m_models) { + model.remove_backup_path_if_exist(); + } //BBS: flush logs BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", Finished" << std::endl; boost::nowide::cout.flush(); diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index cff60e72ce..d710efd742 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -790,9 +790,11 @@ std::string Model::get_backup_path() buf << this->id().id; backup_path = parent_path.string() + buf.str(); + BOOST_LOG_TRIVIAL(info) << boost::format("model %1%, id %2%, backup_path empty, set to %3%")%this%this->id().id%backup_path; boost::filesystem::path temp_path(backup_path); if (boost::filesystem::exists(temp_path)) { + BOOST_LOG_TRIVIAL(info) << boost::format("model %1%, id %2%, remove previous %3%")%this%this->id().id%backup_path; boost::filesystem::remove_all(temp_path); } } @@ -815,6 +817,19 @@ std::string Model::get_backup_path() return backup_path; } +void Model::remove_backup_path_if_exist() +{ + if (!backup_path.empty()) { + boost::filesystem::path temp_path(backup_path); + if (boost::filesystem::exists(temp_path)) + { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format("model %1%, id %2% remove backup_path %3%")%this%this->id().id%backup_path; + boost::filesystem::remove_all(temp_path); + } + backup_path.clear(); + } +} + std::string Model::get_backup_path(const std::string &sub_path) { auto path = get_backup_path() + "/" + sub_path; @@ -837,9 +852,12 @@ void Model::set_backup_path(std::string const& path) backup_path.clear(); return; } - if (!backup_path.empty()) + if (!backup_path.empty()) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__<id().id%backup_path; Slic3r::remove_backup(*this, true); + } backup_path = path; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__<id().id%backup_path; } void Model::load_from(Model& model) diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index c682af16c0..d12bf1f7d9 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -1433,6 +1433,7 @@ public: void load_from(Model & model); bool is_need_backup() { return need_backup; } void set_need_backup(); + void remove_backup_path_if_exist(); // Checks if any of objects is painted using the fdm support painting gizmo. bool is_fdm_support_painted() const; From 662453f41961e0c30ed418858a86b3adb6b7db9b Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Tue, 28 Feb 2023 14:18:24 +0800 Subject: [PATCH 004/339] ENH: add the time limit and triangle limit for cli slicing Change-Id: I80d6e58dca6648427dbe4cfbc01eabdedfa79f52 --- src/BambuStudio.cpp | 36 +++++++++++++++++++++++++++++++++++ src/libslic3r/PrintConfig.cpp | 14 ++++++++++++++ src/libslic3r/Utils.hpp | 3 ++- 3 files changed, 52 insertions(+), 1 deletion(-) diff --git a/src/BambuStudio.cpp b/src/BambuStudio.cpp index 2cf7e053ec..6b83806605 100644 --- a/src/BambuStudio.cpp +++ b/src/BambuStudio.cpp @@ -60,6 +60,7 @@ using namespace nlohmann; #include "libslic3r/Format/OBJ.hpp" #include "libslic3r/Format/SL1.hpp" #include "libslic3r/Utils.hpp" +#include "libslic3r/Time.hpp" #include "libslic3r/Thread.hpp" #include "libslic3r/BlacklistedLibraryCheck.hpp" @@ -1735,6 +1736,7 @@ int CLI::run(int argc, char **argv) std::string export_3mf_file, load_slice_data_dir, export_slice_data_dir; std::string outfile_dir = m_config.opt_string("outputdir"); std::vector calibration_thumbnails; + int max_slicing_time_per_plate = 0, max_triangle_count_per_plate = 0; for (auto const &opt_key : m_actions) { if (opt_key == "help") { this->print_help(); @@ -1767,6 +1769,10 @@ int CLI::run(int argc, char **argv) } } else if (opt_key == "uptodate") { //already processed before + } else if (opt_key == "mtcpp") { + max_triangle_count_per_plate = m_config.option("mtcpp")->value; + } else if (opt_key == "mstpp") { + max_slicing_time_per_plate = m_config.option("mstpp")->value; } else if (opt_key == "export_stl") { for (auto &model : m_models) model.add_default_instances(); @@ -1836,6 +1842,8 @@ int CLI::run(int argc, char **argv) BOOST_LOG_TRIVIAL(info) << "Skip plate " << index+1 << std::endl; continue; } + long long start_time = 0, end_time = 0; + start_time = (long long)Slic3r::Utils::get_current_time_utc(); //get the current partplate Slic3r::GUI::PartPlate* part_plate = partplate_list.get_plate(index); part_plate->get_print(&print, &gcode_result, &print_index); @@ -1866,13 +1874,32 @@ int CLI::run(int argc, char **argv) flush_and_exit(CLI_NO_SUITABLE_OBJECTS); } else { + long long triangle_count = 0; for (ModelObject* model_object : model.objects) for (ModelInstance *i : model_object->instances) + { if (i->print_volume_state == ModelInstancePVS_Partly_Outside) { BOOST_LOG_TRIVIAL(error) << "plate "<< index+1<< ": Found Object " << model_object->name <<" partly inside, can not be sliced." << std::endl; flush_and_exit(CLI_OBJECTS_PARTLY_INSIDE); } + else if ((max_triangle_count_per_plate != 0) && (i->print_volume_state == ModelInstancePVS_Inside)) + { + for (const ModelVolume* vol : model_object->volumes) + { + if (vol->is_model_part()) { + size_t volume_triangle_count = vol->mesh().facets_count(); + triangle_count += volume_triangle_count; + BOOST_LOG_TRIVIAL(info) << boost::format("volume triangle count %1%, total %2%")%volume_triangle_count %triangle_count; + if (triangle_count > max_triangle_count_per_plate) + { + BOOST_LOG_TRIVIAL(error) << "plate "<< index+1<< ": triangle count " << triangle_count <<" exceeds the limit:" << max_triangle_count_per_plate; + flush_and_exit(CLI_TRIANGLE_COUNT_EXCEEDS_LIMIT); + } + } + } + } + } } // BBS: TODO //BOOST_LOG_TRIVIAL(info) << boost::format("print_volume {%1%,%2%,%3%}->{%4%, %5%, %6%}, has %7% printables") % print_volume.min(0) % print_volume.min(1) @@ -2000,6 +2027,15 @@ int CLI::run(int argc, char **argv) fs::remove_all(plate_dir); } } + if (max_slicing_time_per_plate != 0) { + end_time = (long long)Slic3r::Utils::get_current_time_utc(); + long long time_cost = end_time - start_time; + if (time_cost > max_slicing_time_per_plate) { + BOOST_LOG_TRIVIAL(error) << boost::format("plate %1%'s slice time %2% exceeds the limit %3%, return error.") + %(index+1) %time_cost %max_slicing_time_per_plate; + flush_and_exit(CLI_SLICING_TIME_EXCEEDS_LIMIT); + } + } } catch (const std::exception &ex) { BOOST_LOG_TRIVIAL(info) << "found slicing or export error for partplate "<cli = "uptodate"; def->set_default_value(new ConfigOptionBool(false)); + def = this->add("mtcpp", coInt); + def->label = L("mtcpp"); + def->tooltip = L("max triangle count per plate for slicing."); + def->cli = "mtcpp"; + def->cli_params = "count"; + def->set_default_value(new ConfigOptionInt(1000000)); + + def = this->add("mstpp", coInt); + def->label = L("mstpp"); + def->tooltip = L("max slicing time per plate in seconds."); + def->cli = "mstpp"; + def->cli_params = "time"; + def->set_default_value(new ConfigOptionInt(300)); + /*def = this->add("help_fff", coBool); def->label = L("Help (FFF options)"); def->tooltip = L("Show the full list of print/G-code configuration options."); diff --git a/src/libslic3r/Utils.hpp b/src/libslic3r/Utils.hpp index fcb818daa9..71dacf6d28 100644 --- a/src/libslic3r/Utils.hpp +++ b/src/libslic3r/Utils.hpp @@ -45,7 +45,8 @@ #define CLI_IMPORT_CACHE_NOT_FOUND -55 #define CLI_IMPORT_CACHE_DATA_CAN_NOT_USE -56 #define CLI_IMPORT_CACHE_LOAD_FAILED -57 - +#define CLI_SLICING_TIME_EXCEEDS_LIMIT -58 +#define CLI_TRIANGLE_COUNT_EXCEEDS_LIMIT -59 #define CLI_SLICING_ERROR -100 From 4c93d6e59ddd9faac334b72bb68c16908a4945f3 Mon Sep 17 00:00:00 2001 From: wintergua Date: Fri, 24 Feb 2023 16:52:43 +0800 Subject: [PATCH 005/339] FIX: Brim may not generate with a large positive xy compensation value studio-2344 Change-Id: I74e91ccae8465ab747f2ed7e95e3d2694238c407 (cherry picked from commit a076c0541e88c68b11cf3b91725da6f8421c405b) --- src/libslic3r/PrintObjectSlice.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/PrintObjectSlice.cpp b/src/libslic3r/PrintObjectSlice.cpp index 8ed2565c73..9dcdbe044e 100644 --- a/src/libslic3r/PrintObjectSlice.cpp +++ b/src/libslic3r/PrintObjectSlice.cpp @@ -563,15 +563,18 @@ void reGroupingLayerPolygons(std::vector& gvss, ExPolygons std::vector epsIndex; epsIndex.resize(eps.size(), -1); for (int ie = 0; ie != eps.size(); ie++) { + if (eps[ie].area() <= 0) + continue; + double minArea = eps[ie].area(); for (int iv = 0; iv != gvss.size(); iv++) { auto clipedExPolys = diff_ex(eps[ie], gvss[iv].slices); double area = 0; for (const auto& ce : clipedExPolys) { area += ce.area(); } - if (eps[ie].area() > 0 && area / eps[ie].area() < 0.3) { + if (area < minArea) { + minArea = area; epsIndex[ie] = iv; - break; } } } From 3448b7a053a910a760e42aa9c27ef68db82e2050 Mon Sep 17 00:00:00 2001 From: miaoxin Date: Tue, 21 Feb 2023 16:46:53 +0800 Subject: [PATCH 006/339] FIX: avoid arrange to outer when quick click autoarrangement in plate. Change-Id: Ic8fa2f605094c7a3b7fa5a6fe36c5159678c50fd STUDIO-2202 (cherry picked from commit 641c18c25f5f297234059d463ac12220c4b6fa9f) Change-Id: Ic452f2fa4357fcacf71f6a70df2c514d2628b217 --- src/slic3r/GUI/Jobs/ArrangeJob.cpp | 1 + src/slic3r/GUI/Plater.cpp | 6 ++++-- src/slic3r/GUI/Plater.hpp | 7 +++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index 9b81736a66..dc2a5016ca 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -750,6 +750,7 @@ void ArrangeJob::finalize() { m_plater->update(); Job::finalize(); + m_plater->m_arrange_running.store(false); } std::optional diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 79d4c322cd..78a5e7e2cc 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -11098,8 +11098,10 @@ int Plater::select_plate_by_hover_id(int hover_id, bool right_click) ret = select_plate(plate_index); if (!ret) { - set_prepare_state(Job::PREPARE_STATE_MENU); - arrange(); + if (last_arrange_job_is_finished()) { + set_prepare_state(Job::PREPARE_STATE_MENU); + arrange(); + } } else { diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 56d97d83a9..f6c7420d28 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -678,6 +678,13 @@ public: std::string get_preview_only_filename() { return m_preview_only_filename; }; + bool last_arrange_job_is_finished() + { + bool prevRunning = false; + return m_arrange_running.compare_exchange_strong(prevRunning, true); + }; + std::atomic m_arrange_running{false}; + private: struct priv; std::unique_ptr p; From 8669291aadb03060a900e0d5add3bea39a33b605 Mon Sep 17 00:00:00 2001 From: "salt.wei" Date: Thu, 2 Mar 2023 20:30:47 +0800 Subject: [PATCH 007/339] ENH: optimize speed of gcode export Signed-off-by: salt.wei Change-Id: Ic641352623f26c7241ae5720ad1baa202a1b00c7 --- src/libslic3r/GCode.cpp | 18 +++++++++++++++++- src/libslic3r/Layer.hpp | 11 +++++++++++ src/libslic3r/libslic3r.h | 2 ++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 483240f400..cb068b8a5e 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -1461,6 +1461,22 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato m_enable_cooling_markers = true; this->apply_print_config(print.config()); + //BBS: generate simplified_slices if necessary + if (m_config.reduce_infill_retraction) { + for (auto object : print.objects()) { + tbb::parallel_for( + tbb::blocked_range(0, object->layers().size()), + [object](const tbb::blocked_range& range) { + for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++ layer_idx) { + Layer* layer = object->layers()[layer_idx]; + if (layer) + layer->simplify_reagon_final_slices(); + } + } + ); + } + } + //m_volumetric_speed = DoExport::autospeed_volumetric_limit(print); print.throw_if_canceled(); @@ -4048,7 +4064,7 @@ bool GCode::needs_retraction(const Polyline &travel, ExtrusionRole role, LiftTyp } //BBS: need retract when long moving to print perimeter to avoid dropping of material if (!is_perimeter(role) && m_config.reduce_infill_retraction && m_layer != nullptr && - m_config.sparse_infill_density.value > 0 && m_layer->any_internal_region_slice_contains(travel)) + m_config.sparse_infill_density.value > 0 && m_layer->any_internal_region_slmplify_slice_contains(travel)) // Skip retraction if travel is contained in an internal slice *and* // internal infill is enabled (so that stringing is entirely not visible). //FIXME any_internal_region_slice_contains() is potentionally very slow, it shall test for the bounding boxes first. diff --git a/src/libslic3r/Layer.hpp b/src/libslic3r/Layer.hpp index 753ffed60a..305016a789 100644 --- a/src/libslic3r/Layer.hpp +++ b/src/libslic3r/Layer.hpp @@ -33,6 +33,8 @@ public: // collection of surfaces generated by slicing the original geometry // divided by type top/bottom/internal SurfaceCollection slices; + //BBS: simplifed final slices data to accelerate + SurfaceCollection slices_simplified; // Backed up slices before they are split into top/bottom/internal. // Only backed up for multi-region layers or layers with elephant foot compensation. //FIXME Review whether not to simplify the code by keeping the raw_slices all the time. @@ -73,6 +75,8 @@ public: void slices_to_fill_surfaces_clipped(); void prepare_fill_surfaces(); //BBS + inline void simplify_final_slices() { this->slices_simplified.set(this->slices); this->slices_simplified.simplify(scaled(SIMPLIFY_SLICES_RESOLUTION));} + //BBS void make_perimeters(const SurfaceCollection &slices, SurfaceCollection* fill_surfaces, ExPolygons* fill_no_overlap); void process_external_surfaces(const Layer *lower_layer, const Polygons *lower_layer_covered); double infill_area_threshold() const; @@ -166,6 +170,11 @@ public: for (const LayerRegion *layerm : m_regions) if (layerm->slices.any_internal_contains(item)) return true; return false; } + //BBS: only be used in gcode export when reduce_infill_retraction is enabled + template bool any_internal_region_slmplify_slice_contains(const T& item) const { + for (const LayerRegion* layerm : m_regions) if (layerm->slices_simplified.any_internal_contains(item)) return true; + return false; + } template bool any_bottom_region_slice_contains(const T &item) const { for (const LayerRegion *layerm : m_regions) if (layerm->slices.any_bottom_contains(item)) return true; return false; @@ -189,6 +198,8 @@ public: void simplify_extrusion_path() { for (auto layerm : m_regions) layerm->simplify_extrusion_entity();} //BBS: this function calculate the maximum void grid area of sparse infill of this layer. Just estimated value coordf_t get_sparse_infill_max_void_area(); + //BBS + inline void simplify_reagon_final_slices() { for (auto* region : this->m_regions) region->simplify_final_slices();} protected: friend class PrintObject; diff --git a/src/libslic3r/libslic3r.h b/src/libslic3r/libslic3r.h index 8589d705fb..f482184945 100644 --- a/src/libslic3r/libslic3r.h +++ b/src/libslic3r/libslic3r.h @@ -76,6 +76,8 @@ static constexpr double BRIDGE_INFILL_MARGIN = 1; //inline coord_t scale_(coordf_t v) { return coord_t(floor(v / SCALING_FACTOR + 0.5f)); } #define scale_(val) ((val) / SCALING_FACTOR) #define unscale_(val) ((val) * SCALING_FACTOR) +//BBS +static constexpr double SIMPLIFY_SLICES_RESOLUTION = 0.1; //BBS: BBS only support relative E and can't been changed by user at the moment. because //BBS need to support skip object when printing. From ebaf87f033d5eb82d43f61b95195d8ec805587cb Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Mon, 27 Feb 2023 18:52:13 +0800 Subject: [PATCH 008/339] FIX: The paint on the top surface is embedded in the sparse fill Change-Id: I5e95bd22684d79413322fce2924fa4ff8f668c0e --- src/libslic3r/MultiMaterialSegmentation.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libslic3r/MultiMaterialSegmentation.cpp b/src/libslic3r/MultiMaterialSegmentation.cpp index 03f3268210..6428ab4561 100644 --- a/src/libslic3r/MultiMaterialSegmentation.cpp +++ b/src/libslic3r/MultiMaterialSegmentation.cpp @@ -1575,7 +1575,7 @@ static inline std::vector> mmu_segmentation_top_and_bott append(triangles_by_color_top[color_idx][layer_idx + layer_idx_offset], top_ex); float offset = 0.f; ExPolygons layer_slices_trimmed = input_expolygons[layer_idx]; - for (int last_idx = int(layer_idx) - 1; last_idx >= std::max(int(layer_idx - stat.top_shell_layers), int(0)); --last_idx) { + for (int last_idx = int(layer_idx) - 1; last_idx > std::max(int(layer_idx - stat.top_shell_layers), int(0)); --last_idx) { //BBS: offset width should be 2*spacing to avoid too narrow area which has overlap of wall line //offset -= stat.extrusion_width ; offset -= (stat.extrusion_spacing + stat.extrusion_width); From 0532f837facd11ab037d49be9964673a4ddea56a Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Tue, 28 Feb 2023 09:15:30 +0800 Subject: [PATCH 009/339] FIX: wipe tower is not generated when inserting custom gcode Change-Id: I8f81dff79dba2fd60df2095ff37696ddc0b9597c --- src/slic3r/GUI/Plater.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 78a5e7e2cc..444b7d1d92 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -2442,7 +2442,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) // update slice and print button wxGetApp().mainframe->update_slice_print_status(MainFrame::SlicePrintEventType::eEventSliceUpdate, true, false); - set_need_update(true); + update(); }); } if (wxGetApp().is_gcode_viewer()) From b2c457eec6732639a64c479bb6a666a74af08281 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Fri, 24 Feb 2023 16:16:22 +0800 Subject: [PATCH 010/339] FIX: Selected shadow position is not correct in assembly view Change-Id: If727e8f70dc85fb256cad6d9de9bb4913cb11896 (cherry picked from commit a3540aa72566a6606ee3533b4770d010d1edd58c) --- src/slic3r/GUI/3DScene.cpp | 25 ++----------------------- src/slic3r/GUI/3DScene.hpp | 3 --- 2 files changed, 2 insertions(+), 26 deletions(-) diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp index 5cbb412e42..3494b94ccd 100644 --- a/src/slic3r/GUI/3DScene.cpp +++ b/src/slic3r/GUI/3DScene.cpp @@ -569,26 +569,6 @@ Transform3d GLVolume::world_matrix() const return m; } -//BBS: scaled_matrix -Transform3d GLVolume::world_matrix( float scale_factor) const -{ - //const Vec3d& volume_translation = m_volume_transformation.get_offset(); - //Vec3d scaling_factor = { scale_factor, scale_factor, scale_factor }; - Vec3d ofs2ass = m_offset_to_assembly * (GLVolume::explosion_ratio - 1.0); - Vec3d volofs2obj = m_volume_transformation.get_offset() * (GLVolume::explosion_ratio - 1.0); - - Transform3d volume_matrix = Geometry::assemble_transform( - m_volume_transformation.get_offset() + ofs2ass + volofs2obj, - m_volume_transformation.get_rotation(), - m_volume_transformation.get_scaling_factor() * scale_factor, - m_volume_transformation.get_mirror() - ); - Transform3d m = m_instance_transformation.get_matrix() * volume_matrix; - - //m.translation()(2) += m_sla_shift_z; - return m; -} - bool GLVolume::is_left_handed() const { const Vec3d &m1 = m_instance_transformation.get_mirror(); @@ -834,8 +814,6 @@ void GLVolume::render(bool with_outline) const fclose(file); } #endif - - Transform3d matrix = world_matrix(); render_body(); //BOOST_LOG_TRIVIAL(info) << boost::format(": %1%, outline render body, shader name %2%")%__LINE__ %shader->get_name(); @@ -887,7 +865,8 @@ void GLVolume::render(bool with_outline) const glsafe(::glPopMatrix()); glsafe(::glPushMatrix()); - matrix = world_matrix(scale); + Transform3d matrix = world_matrix(); + matrix.scale(scale); glsafe(::glMultMatrixd(matrix.data())); this->indexed_vertex_array.render(this->tverts_range, this->qverts_range); //BOOST_LOG_TRIVIAL(info) << boost::format(": %1%, outline render for body, shader name %2%")%__LINE__ %shader->get_name(); diff --git a/src/slic3r/GUI/3DScene.hpp b/src/slic3r/GUI/3DScene.hpp index 86c93a47a7..bf6af2ee36 100644 --- a/src/slic3r/GUI/3DScene.hpp +++ b/src/slic3r/GUI/3DScene.hpp @@ -501,9 +501,6 @@ public: Transform3d world_matrix() const; bool is_left_handed() const; - //BBS: world_matrix with scale factor - Transform3d world_matrix(float scale_factor) const; - const BoundingBoxf3& transformed_bounding_box() const; // non-caching variant BoundingBoxf3 transformed_convex_hull_bounding_box(const Transform3d &trafo) const; From 088f2a4acef00442c23fd500f5f5764d0db003b3 Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Fri, 3 Mar 2023 20:28:32 +0800 Subject: [PATCH 011/339] ENH: cli: add pre-check logic when slicing all Change-Id: Ib13a5dd11175c0835b7a1362317941aa6a04474b (cherry picked from commit a6f7ad231e5694ce12f9fd34518425f31c3bb5bd) --- src/BambuStudio.cpp | 378 +++++++++++++++++++++----------------------- 1 file changed, 182 insertions(+), 196 deletions(-) diff --git a/src/BambuStudio.cpp b/src/BambuStudio.cpp index 6b83806605..6bf7195bf5 100644 --- a/src/BambuStudio.cpp +++ b/src/BambuStudio.cpp @@ -376,13 +376,13 @@ int CLI::run(int argc, char **argv) char *debug_argv[] = { "E:\work\projects\bambu_release\bamboo_slicer\build_debug\src\Debug\bambu-studio.exe", "--slice", - "9", + "0", //"--load-settings", //"machine.json;process.json", //"--load-filaments", //"filament.json", "--export-3mf=output.3mf", - "test_outside.3mf" + "test_cube.3mf" }; if (! this->setup(debug_argc, debug_argv))*/ if (!this->setup(argc, argv)) @@ -1800,6 +1800,10 @@ int CLI::run(int argc, char **argv) } else if (opt_key == "slice") { //BBS: slice 0 means all plates, i means plate i; plate_to_slice = m_config.option("slice")->value; + bool pre_check = (plate_to_slice == 0)?true:false; + if (partplate_list.get_plate_count() == 1) + pre_check = false; + bool finished = false; /*if (opt_key == "export_gcode" && printer_technology == ptSLA) { boost::nowide::cerr << "error: cannot export G-code for an FFF configuration" << std::endl; flush_and_exit(1); @@ -1822,226 +1826,208 @@ int CLI::run(int argc, char **argv) // and all instances will be rearranged (unless --dont-arrange is supplied). std::string outfile; Print fff_print; - /*SLAPrint sla_print; - SL1Archive sla_archive(sla_print.printer_config()); - sla_print.set_printer(&sla_archive); - sla_print.set_status_callback( - [](const PrintBase::SlicingStatus& s) - { - if(s.percent >= 0) // FIXME: is this sufficient? - printf("%3d%s %s\n", s.percent, "% =>", s.text.c_str()); - });*/ - //BBS: slice every partplate one by one - PrintBase *print=NULL; - Slic3r::GUI::GCodeResult *gcode_result = NULL; - int print_index; - for (int index = 0; index < partplate_list.get_plate_count(); index ++) + while(!finished) { - if ((plate_to_slice != 0) && (plate_to_slice != (index + 1))) { - BOOST_LOG_TRIVIAL(info) << "Skip plate " << index+1 << std::endl; - continue; - } - long long start_time = 0, end_time = 0; - start_time = (long long)Slic3r::Utils::get_current_time_utc(); - //get the current partplate - Slic3r::GUI::PartPlate* part_plate = partplate_list.get_plate(index); - part_plate->get_print(&print, &gcode_result, &print_index); - /*if (outfile_config.empty()) + //BBS: slice every partplate one by one + PrintBase *print=NULL; + Slic3r::GUI::GCodeResult *gcode_result = NULL; + int print_index; + for (int index = 0; index < partplate_list.get_plate_count(); index ++) { - outfile = "plate_" + std::to_string(index + 1) + ".gcode"; - } - else - { - outfile = "plate_" + std::to_string(index + 1) + "_" + outfile_config + ".gcode"; - }*/ + if ((plate_to_slice != 0) && (plate_to_slice != (index + 1))) { + BOOST_LOG_TRIVIAL(info) << "Skip plate " << index+1 << std::endl; + continue; + } + long long start_time = 0, end_time = 0; + start_time = (long long)Slic3r::Utils::get_current_time_utc(); + //get the current partplate + Slic3r::GUI::PartPlate* part_plate = partplate_list.get_plate(index); + part_plate->get_print(&print, &gcode_result, &print_index); + /*if (outfile_config.empty()) + { + outfile = "plate_" + std::to_string(index + 1) + ".gcode"; + } + else + { + outfile = "plate_" + std::to_string(index + 1) + "_" + outfile_config + ".gcode"; + }*/ - //update plate's bounding box to model + //update plate's bounding box to model #if 0 - BoundingBoxf3 print_volume = part_plate->get_bounding_box(false); - print_volume.max(2) = z; - print_volume.min(2) = -1e10; - model.update_print_volume_state(print_volume); - BOOST_LOG_TRIVIAL(info) << boost::format("print_volume {%1%,%2%,%3%}->{%4%, %5%, %6%}") % print_volume.min(0) % print_volume.min(1) - % print_volume.min(2) % print_volume.max(0) % print_volume.max(1) % print_volume.max(2) << std::endl; + BoundingBoxf3 print_volume = part_plate->get_bounding_box(false); + print_volume.max(2) = z; + print_volume.min(2) = -1e10; + model.update_print_volume_state(print_volume); + BOOST_LOG_TRIVIAL(info) << boost::format("print_volume {%1%,%2%,%3%}->{%4%, %5%, %6%}") % print_volume.min(0) % print_volume.min(1) + % print_volume.min(2) % print_volume.max(0) % print_volume.max(1) % print_volume.max(2) << std::endl; #else - BuildVolume build_volume(part_plate->get_shape(), print_height); - model.update_print_volume_state(build_volume); - unsigned int count = model.update_print_volume_state(build_volume); + BuildVolume build_volume(part_plate->get_shape(), print_height); + model.update_print_volume_state(build_volume); + unsigned int count = model.update_print_volume_state(build_volume); - if (count == 0) { - BOOST_LOG_TRIVIAL(error) << "plate "<< index+1<< ": Nothing to be sliced, Either the print is empty or no object is fully inside the print volume before apply." << std::endl; - flush_and_exit(CLI_NO_SUITABLE_OBJECTS); - } - else { - long long triangle_count = 0; - for (ModelObject* model_object : model.objects) - for (ModelInstance *i : model_object->instances) - { - if (i->print_volume_state == ModelInstancePVS_Partly_Outside) + if (count == 0) { + BOOST_LOG_TRIVIAL(error) << "plate "<< index+1<< ": Nothing to be sliced, Either the print is empty or no object is fully inside the print volume before apply." << std::endl; + flush_and_exit(CLI_NO_SUITABLE_OBJECTS); + } + else { + long long triangle_count = 0; + for (ModelObject* model_object : model.objects) + for (ModelInstance *i : model_object->instances) { - BOOST_LOG_TRIVIAL(error) << "plate "<< index+1<< ": Found Object " << model_object->name <<" partly inside, can not be sliced." << std::endl; - flush_and_exit(CLI_OBJECTS_PARTLY_INSIDE); - } - else if ((max_triangle_count_per_plate != 0) && (i->print_volume_state == ModelInstancePVS_Inside)) - { - for (const ModelVolume* vol : model_object->volumes) + if (i->print_volume_state == ModelInstancePVS_Partly_Outside) { - if (vol->is_model_part()) { - size_t volume_triangle_count = vol->mesh().facets_count(); - triangle_count += volume_triangle_count; - BOOST_LOG_TRIVIAL(info) << boost::format("volume triangle count %1%, total %2%")%volume_triangle_count %triangle_count; - if (triangle_count > max_triangle_count_per_plate) - { - BOOST_LOG_TRIVIAL(error) << "plate "<< index+1<< ": triangle count " << triangle_count <<" exceeds the limit:" << max_triangle_count_per_plate; - flush_and_exit(CLI_TRIANGLE_COUNT_EXCEEDS_LIMIT); + BOOST_LOG_TRIVIAL(error) << "plate "<< index+1<< ": Found Object " << model_object->name <<" partly inside, can not be sliced." << std::endl; + flush_and_exit(CLI_OBJECTS_PARTLY_INSIDE); + } + else if ((max_triangle_count_per_plate != 0) && (i->print_volume_state == ModelInstancePVS_Inside)) + { + for (const ModelVolume* vol : model_object->volumes) + { + if (vol->is_model_part()) { + size_t volume_triangle_count = vol->mesh().facets_count(); + triangle_count += volume_triangle_count; + BOOST_LOG_TRIVIAL(info) << boost::format("volume triangle count %1%, total %2%")%volume_triangle_count %triangle_count; + if (triangle_count > max_triangle_count_per_plate) + { + BOOST_LOG_TRIVIAL(error) << "plate "<< index+1<< ": triangle count " << triangle_count <<" exceeds the limit:" << max_triangle_count_per_plate; + flush_and_exit(CLI_TRIANGLE_COUNT_EXCEEDS_LIMIT); + } } } } } - } - } - // BBS: TODO - //BOOST_LOG_TRIVIAL(info) << boost::format("print_volume {%1%,%2%,%3%}->{%4%, %5%, %6%}, has %7% printables") % print_volume.min(0) % print_volume.min(1) - // % print_volume.min(2) % print_volume.max(0) % print_volume.max(1) % print_volume.max(2) % count << std::endl; + } + // BBS: TODO + //BOOST_LOG_TRIVIAL(info) << boost::format("print_volume {%1%,%2%,%3%}->{%4%, %5%, %6%}, has %7% printables") % print_volume.min(0) % print_volume.min(1) + // % print_volume.min(2) % print_volume.max(0) % print_volume.max(1) % print_volume.max(2) % count << std::endl; #endif + DynamicPrintConfig new_print_config = m_print_config; + new_print_config.apply(*part_plate->config()); + new_print_config.apply(m_extra_config, true); + print->apply(model, new_print_config); + StringObjectException warning; + auto err = print->validate(&warning); + if (!err.string.empty()) { + BOOST_LOG_TRIVIAL(info) << "got error when validate: "<< err.string << std::endl; + boost::nowide::cerr << err.string << std::endl; + //BBS: continue for other plates + //continue; + flush_and_exit(CLI_VALIDATE_ERROR); + } + else if (!warning.string.empty()) + BOOST_LOG_TRIVIAL(info) << "got warnings: "<< warning.string << std::endl; - //PrintBase *print = (printer_technology == ptFFF) ? static_cast(&fff_print) : static_cast(&sla_print); - /*if (! m_config.opt_bool("dont_arrange")) { - if (user_center_specified) { - Vec2d c = m_config.option("center")->value; - arrange_objects(model, InfiniteBed{scaled(c)}, arrange_cfg); - } else - arrange_objects(model, bed, arrange_cfg); - }*/ - /*if (printer_technology == ptFFF) { - for (auto* mo : model.objects) - (dynamic_cast(print))->auto_assign_extruders(mo); - } else { - // The default for "filename_format" is good for FDM: "[input_filename_base].gcode" - // Replace it with a reasonable SLA default. - std::string &format = m_print_config.opt_string("filename_format", true); - if (format == static_cast(m_print_config.def()->get("filename_format")->default_value.get())->value) - format = "[input_filename_base].SL1"; - }*/ - DynamicPrintConfig new_print_config = m_print_config; - new_print_config.apply(*part_plate->config()); - new_print_config.apply(m_extra_config, true); - print->apply(model, new_print_config); - StringObjectException warning; - auto err = print->validate(&warning); - if (!err.string.empty()) { - BOOST_LOG_TRIVIAL(info) << "got error when validate: "<< err.string << std::endl; - boost::nowide::cerr << err.string << std::endl; - //BBS: continue for other plates - //continue; - flush_and_exit(CLI_VALIDATE_ERROR); - } - else if (!warning.string.empty()) - BOOST_LOG_TRIVIAL(info) << "got warnings: "<< warning.string << std::endl; - - if (print->empty()) { - BOOST_LOG_TRIVIAL(error) << "plate "<< index+1<< ": Nothing to be sliced, Either the print is empty or no object is fully inside the print volume after apply." << std::endl; - flush_and_exit(CLI_NO_SUITABLE_OBJECTS); - } - else - try { - std::string outfile_final; - BOOST_LOG_TRIVIAL(info) << "start Print::process for partplate "<empty()) { + BOOST_LOG_TRIVIAL(error) << "plate "<< index+1<< ": Nothing to be sliced, Either the print is empty or no object is fully inside the print volume after apply." << std::endl; + flush_and_exit(CLI_NO_SUITABLE_OBJECTS); + } + else { + if (pre_check) //continue to next plate directly + continue; + try { + std::string outfile_final; + BOOST_LOG_TRIVIAL(info) << "start Print::process for partplate "<set_status_callback(cli_status_callback); - g_cli_callback_mgr.set_plate_info(index+1, (plate_to_slice== 0)?partplate_list.get_plate_count():1); - if (!warning.string.empty()) { - PrintBase::SlicingStatus slicing_status{2, warning.string, 0, 0}; - cli_status_callback(slicing_status); + BOOST_LOG_TRIVIAL(info) << "cli callback mgr started: "<set_status_callback(cli_status_callback); + g_cli_callback_mgr.set_plate_info(index+1, (plate_to_slice== 0)?partplate_list.get_plate_count():1); + if (!warning.string.empty()) { + PrintBase::SlicingStatus slicing_status{2, warning.string, 0, 0}; + cli_status_callback(slicing_status); + } } - } #endif - if (load_slicedata) { - std::string plate_dir = load_slice_data_dir+"/"+std::to_string(index+1); - int ret = print->load_cached_data(plate_dir); - if (ret) { - BOOST_LOG_TRIVIAL(warning) << "plate "<< index+1<< ": load Slicing data error, ret=" << ret; - BOOST_LOG_TRIVIAL(warning) << "plate "<< index+1<< ": switch normal slicing"; + if (load_slicedata) { + std::string plate_dir = load_slice_data_dir+"/"+std::to_string(index+1); + int ret = print->load_cached_data(plate_dir); + if (ret) { + BOOST_LOG_TRIVIAL(warning) << "plate "<< index+1<< ": load Slicing data error, ret=" << ret; + BOOST_LOG_TRIVIAL(warning) << "plate "<< index+1<< ": switch normal slicing"; + print->process(); + } + else { + BOOST_LOG_TRIVIAL(info) << "plate "<< index+1<< ": load cached data success, go on."; + print->process(true); + BOOST_LOG_TRIVIAL(info) << "plate "<< index+1<< ": finished print::process."; + } + } + else { print->process(); } - else { - BOOST_LOG_TRIVIAL(info) << "plate "<< index+1<< ": load cached data success, go on."; - print->process(true); - BOOST_LOG_TRIVIAL(info) << "plate "<< index+1<< ": finished print::process."; - } - } - else { - print->process(); - } - if (printer_technology == ptFFF) { - // The outfile is processed by a PlaceholderParser. - //outfile = part_plate->get_tmp_gcode_path(); - if (outfile_dir.empty()) { - outfile = part_plate->get_tmp_gcode_path(); - } - else { - outfile = outfile_dir + "/plate_" + std::to_string(index + 1) + ".gcode"; - part_plate->set_tmp_gcode_path(outfile); - } - BOOST_LOG_TRIVIAL(info) << "process finished, will export gcode temporily to " << outfile << std::endl; - outfile = (dynamic_cast(print))->export_gcode(outfile, gcode_result, nullptr); - //outfile_final = (dynamic_cast(print))->print_statistics().finalize_output_path(outfile); - //m_fff_print->export_gcode(m_temp_output_path, m_gcode_result, [this](const ThumbnailsParams& params) { return this->render_thumbnails(params); }); - }/* else { - outfile = sla_print.output_filepath(outfile); - // We need to finalize the filename beforehand because the export function sets the filename inside the zip metadata - outfile_final = sla_print.print_statistics().finalize_output_path(outfile); - sla_archive.export_print(outfile_final, sla_print); - }*/ - /*if (outfile != outfile_final) { - if (Slic3r::rename_file(outfile, outfile_final)) { - boost::nowide::cerr << "Renaming file " << outfile << " to " << outfile_final << " failed" << std::endl; - flush_and_exit(1); - } - outfile = outfile_final; - }*/ - // Run the post-processing scripts if defined. - //BBS: TODO, maybe need to open this function later - //run_post_process_scripts(outfile, print->full_print_config()); - BOOST_LOG_TRIVIAL(info) << "Slicing result exported to " << outfile << std::endl; - part_plate->update_slice_result_valid_state(true); + if (printer_technology == ptFFF) { + // The outfile is processed by a PlaceholderParser. + //outfile = part_plate->get_tmp_gcode_path(); + if (outfile_dir.empty()) { + outfile = part_plate->get_tmp_gcode_path(); + } + else { + outfile = outfile_dir + "/plate_" + std::to_string(index + 1) + ".gcode"; + part_plate->set_tmp_gcode_path(outfile); + } + BOOST_LOG_TRIVIAL(info) << "process finished, will export gcode temporily to " << outfile << std::endl; + outfile = (dynamic_cast(print))->export_gcode(outfile, gcode_result, nullptr); + //outfile_final = (dynamic_cast(print))->print_statistics().finalize_output_path(outfile); + //m_fff_print->export_gcode(m_temp_output_path, m_gcode_result, [this](const ThumbnailsParams& params) { return this->render_thumbnails(params); }); + }/* else { + outfile = sla_print.output_filepath(outfile); + // We need to finalize the filename beforehand because the export function sets the filename inside the zip metadata + outfile_final = sla_print.print_statistics().finalize_output_path(outfile); + sla_archive.export_print(outfile_final, sla_print); + }*/ + /*if (outfile != outfile_final) { + if (Slic3r::rename_file(outfile, outfile_final)) { + boost::nowide::cerr << "Renaming file " << outfile << " to " << outfile_final << " failed" << std::endl; + flush_and_exit(1); + } + outfile = outfile_final; + }*/ + // Run the post-processing scripts if defined. + //BBS: TODO, maybe need to open this function later + //run_post_process_scripts(outfile, print->full_print_config()); + BOOST_LOG_TRIVIAL(info) << "Slicing result exported to " << outfile << std::endl; + part_plate->update_slice_result_valid_state(true); #if defined(__linux__) || defined(__LINUX__) - if (g_cli_callback_mgr.is_started()) { - PrintBase::SlicingStatus slicing_status{100, "Slicing finished"}; - cli_status_callback(slicing_status); - } + if (g_cli_callback_mgr.is_started()) { + PrintBase::SlicingStatus slicing_status{100, "Slicing finished"}; + cli_status_callback(slicing_status); + } #endif - if (export_slicedata) { - BOOST_LOG_TRIVIAL(info) << "plate "<< index+1<< ":will export Slicing data to " << export_slice_data_dir; - std::string plate_dir = export_slice_data_dir+"/"+std::to_string(index+1); - bool with_space = (get_logging_level() >= 4)?true:false; - int ret = print->export_cached_data(plate_dir, with_space); - if (ret) { - BOOST_LOG_TRIVIAL(error) << "plate "<< index+1<< ": export Slicing data error, ret=" << ret; - export_slicedata_error = true; - if (fs::exists(plate_dir)) - fs::remove_all(plate_dir); + if (export_slicedata) { + BOOST_LOG_TRIVIAL(info) << "plate "<< index+1<< ":will export Slicing data to " << export_slice_data_dir; + std::string plate_dir = export_slice_data_dir+"/"+std::to_string(index+1); + bool with_space = (get_logging_level() >= 4)?true:false; + int ret = print->export_cached_data(plate_dir, with_space); + if (ret) { + BOOST_LOG_TRIVIAL(error) << "plate "<< index+1<< ": export Slicing data error, ret=" << ret; + export_slicedata_error = true; + if (fs::exists(plate_dir)) + fs::remove_all(plate_dir); + } } - } - if (max_slicing_time_per_plate != 0) { - end_time = (long long)Slic3r::Utils::get_current_time_utc(); - long long time_cost = end_time - start_time; - if (time_cost > max_slicing_time_per_plate) { - BOOST_LOG_TRIVIAL(error) << boost::format("plate %1%'s slice time %2% exceeds the limit %3%, return error.") - %(index+1) %time_cost %max_slicing_time_per_plate; - flush_and_exit(CLI_SLICING_TIME_EXCEEDS_LIMIT); + if (max_slicing_time_per_plate != 0) { + end_time = (long long)Slic3r::Utils::get_current_time_utc(); + long long time_cost = end_time - start_time; + if (time_cost > max_slicing_time_per_plate) { + BOOST_LOG_TRIVIAL(error) << boost::format("plate %1%'s slice time %2% exceeds the limit %3%, return error.") + %(index+1) %time_cost %max_slicing_time_per_plate; + flush_and_exit(CLI_SLICING_TIME_EXCEEDS_LIMIT); + } } + } catch (const std::exception &ex) { + BOOST_LOG_TRIVIAL(info) << "found slicing or export error for partplate "< Date: Mon, 6 Mar 2023 09:17:54 +0800 Subject: [PATCH 012/339] FIX: fix a link url error Change-Id: Ie4c87383e043fc51adddabde1904b03af585181f --- resources/data/hints.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/data/hints.ini b/resources/data/hints.ini index c3542fa7a1..6404ddc47c 100644 --- a/resources/data/hints.ini +++ b/resources/data/hints.ini @@ -155,7 +155,7 @@ documentation_link= https://wiki.bambulab.com/en/software/bambu-studio/set-param [hint:Stack objects] text = Stack objects\nDid you know that you can stack objects as a whole one? -documentation_link= https://wiki.bambulab.com/e/en/software/bambu-studio/stacking-objects +documentation_link= https://wiki.bambulab.com/en/software/bambu-studio/stacking-objects [hint:Flush into support/objects/infill] text = Flush into support/objects/infill\nDid you know that you can save the wasted filament by flushing them into support/objects/infill during filament change? From 23db2233649bea858e39b5718b3d222e8994d546 Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Mon, 6 Mar 2023 11:07:02 +0800 Subject: [PATCH 013/339] ENH: CLI: adjust the thumbnail size to 512 Change-Id: I79c8d584b23e7d4d9c27ce1859b322d9fddebc90 --- src/BambuStudio.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BambuStudio.cpp b/src/BambuStudio.cpp index 6bf7195bf5..4ab0a6e619 100644 --- a/src/BambuStudio.cpp +++ b/src/BambuStudio.cpp @@ -2232,7 +2232,7 @@ int CLI::run(int argc, char **argv) } BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s thumbnail, need to regenerate")%(i+1); ThumbnailData * thumbnail_data = new ThumbnailData(); - unsigned int thumbnail_width = 256, thumbnail_height = 256; + unsigned int thumbnail_width = 512, thumbnail_height = 512; const ThumbnailsParams thumbnail_params = {{}, false, true, true, true, i}; switch (Slic3r::GUI::OpenGLManager::get_framebuffers_type()) From ee3e8fc515bb1e122d2174ea2e63a56c3914c1bd Mon Sep 17 00:00:00 2001 From: wintergua Date: Tue, 21 Feb 2023 15:00:54 +0800 Subject: [PATCH 014/339] ENH: restore inner and outerinner brim modes 1) the function is not released to public Change-Id: Ia1b5a31db3b1b1864997b57fe875c01f3ea9fb08 (cherry picked from commit a816cc313659f87978e1275b98f43172cb416a59) --- src/libslic3r/Brim.cpp | 7 +++++-- src/libslic3r/PrintConfig.cpp | 23 +++++++++++++++-------- src/libslic3r/PrintConfig.hpp | 2 +- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/libslic3r/Brim.cpp b/src/libslic3r/Brim.cpp index 7dfac2b361..a9e0b1cc84 100644 --- a/src/libslic3r/Brim.cpp +++ b/src/libslic3r/Brim.cpp @@ -892,12 +892,15 @@ static ExPolygons outer_inner_brim_area(const Print& print, // BBS: inner and outer boundary are offset from the same polygon incase of round off error. auto innerExpoly = offset_ex(ex_poly.contour, brim_offset, jtRound, SCALED_RESOLUTION); append(brim_area_object, diff_ex(offset_ex(innerExpoly, brim_width_mod, jtRound, SCALED_RESOLUTION), innerExpoly)); - // BBS: brim should be apart from holes - append(no_brim_area_object, diff_ex(ex_poly_holes_reversed, offset_ex(ex_poly_holes_reversed, -scale_(5.)))); + } if (brim_type == BrimType::btInnerOnly || brim_type == BrimType::btOuterAndInner) { append(brim_area_object, diff_ex(offset_ex(ex_poly_holes_reversed, -brim_offset), offset_ex(ex_poly_holes_reversed, -brim_width - brim_offset))); } + if (brim_type != BrimType::btInnerOnly && brim_type != BrimType::btOuterAndInner) { + // BBS: brim should be apart from holes + append(no_brim_area_object, diff_ex(ex_poly_holes_reversed, offset_ex(ex_poly_holes_reversed, -scale_(5.)))); + } if (brim_type == BrimType::btInnerOnly || brim_type == BrimType::btNoBrim) append(no_brim_area_object, diff_ex(offset(ex_poly.contour, no_brim_offset), ex_poly_holes_reversed)); if (brim_type == BrimType::btNoBrim) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index a0b82494d8..2f755615dd 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -768,15 +768,22 @@ void PrintConfigDef::init_fff_params() def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.emplace_back("auto_brim"); def->enum_values.emplace_back("outer_only"); - def->enum_values.emplace_back("no_brim"); - //def->enum_values.emplace_back("inner_only"); - //def->enum_values.emplace_back("outer_and_inner"); - def->enum_labels.emplace_back(L("Auto")); - def->enum_labels.emplace_back(L("Manual")); - def->enum_labels.emplace_back(L("No-brim")); +#if !BBL_RELEASE_TO_PUBLIC // BBS: The following two types are disabled - //def->enum_labels.emplace_back(L("Inner brim only")); - //def->enum_labels.emplace_back(L("Outer and inner brim")); + def->enum_values.emplace_back("inner_only"); + def->enum_values.emplace_back("outer_and_inner"); +#endif + def->enum_values.emplace_back("no_brim"); + + def->enum_labels.emplace_back(L("Auto")); + def->enum_labels.emplace_back(L("Outer brim only")); +#if !BBL_RELEASE_TO_PUBLIC + // BBS: The following two types are disabled + def->enum_labels.emplace_back(L("Inner brim only")); + def->enum_labels.emplace_back(L("Outer and inner brim")); +#endif + def->enum_labels.emplace_back(L("No-brim")); + def->mode = comSimple; def->set_default_value(new ConfigOptionEnum(btAutoBrim)); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 4747068d98..f266c935d9 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -150,9 +150,9 @@ enum SLAPillarConnectionMode { enum BrimType { btAutoBrim, // BBS btOuterOnly, - btNoBrim, btInnerOnly, btOuterAndInner, + btNoBrim, }; enum TimelapseType : int { From 4cb8b1e125cc37390f6099b5d9ce1738a9b3bbb6 Mon Sep 17 00:00:00 2001 From: MusangKing Date: Tue, 14 Feb 2023 14:16:28 +0800 Subject: [PATCH 015/339] ENH: Re-open support independent layer height Allow user to disable support independent layer height when prime tower closed. Fix wrong WIKI link jumping. JIRA: STUDIO-1685 JIRA: STUDIO-2308 Change-Id: I894fdd37b707c53e17fd4ad7d1518897f307e557 (cherry picked from commit e10d31e123306a0893087ea03693303768a2daf6) --- src/libslic3r/Preset.cpp | 2 +- src/libslic3r/Print.cpp | 3 ++- src/libslic3r/PrintConfig.cpp | 7 ++++++- src/slic3r/GUI/ConfigManipulation.cpp | 5 ++++- src/slic3r/GUI/Tab.cpp | 7 ++++--- 5 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 0527c6d3b2..bff33c4af1 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -725,7 +725,7 @@ static std::vector s_Preset_print_options { "raft_layers", "raft_first_layer_density", "raft_first_layer_expansion", "raft_contact_distance", "raft_expansion", "support_base_pattern", "support_base_pattern_spacing", "support_expansion", "support_style", // BBS - //"independent_support_layer_height", + "independent_support_layer_height", "support_angle", "support_interface_top_layers", "support_interface_bottom_layers", "support_interface_pattern", "support_interface_spacing", "support_interface_loop_pattern", "support_top_z_distance", "support_on_build_plate_only","support_critical_regions_only", "bridge_no_support", "thick_bridges", "max_bridge_length", "print_sequence", diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 1ac4a16324..394e735740 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -203,7 +203,8 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n steps.emplace_back(psWipeTower); steps.emplace_back(psSkirtBrim); } else if (opt_key == "filament_soluble" - || opt_key == "filament_is_support") { + || opt_key == "filament_is_support" + || opt_key == "independent_support_layer_height") { steps.emplace_back(psWipeTower); // Soluble support interface / non-soluble base interface produces non-soluble interface layers below soluble interface layers. // Thus switching between soluble / non-soluble interface layer material may require recalculation of supports. diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 2f755615dd..c8dbaa0a4a 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -2694,7 +2694,8 @@ void PrintConfigDef::init_fff_params() def = this->add("independent_support_layer_height", coBool); def->label = L("Independent support layer height"); def->category = L("Support"); - def->tooltip = L("Support layer uses layer height independent with object layer. This is to support customizing z-gap and save print time."); + def->tooltip = L("Support layer uses layer height independent with object layer. This is to support customizing z-gap and save print time." + "This option will be invalid when the prime tower is enabled."); def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(true)); @@ -4031,10 +4032,12 @@ void DynamicPrintConfig::normalize_fdm(int used_filaments) //if (alh_opt) // alh_opt->value = false; } + /* BBS: MusangKing - not sure if this is still valid, just comment it out cause "Independent support layer height" is re-opened. else { if (islh_opt) islh_opt->value = true; } + */ } } @@ -4120,6 +4123,7 @@ t_config_option_keys DynamicPrintConfig::normalize_fdm_2(int num_objects, int us // //alh_opt->value = false; //} } + /* BBS:MusangKing - use "global->support->Independent support layer height" widget to replace previous assignment else { if (islh_opt) { if (!islh_opt->value) { @@ -4129,6 +4133,7 @@ t_config_option_keys DynamicPrintConfig::normalize_fdm_2(int num_objects, int us //islh_opt->value = true; } } + */ } return changed_keys; diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 8540746fb1..2fd2aac8ad 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -594,7 +594,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co "bridge_no_support", "max_bridge_length", "support_top_z_distance", "support_bottom_z_distance", //BBS: add more support params to dependent of enable_support "support_type", "support_on_build_plate_only", "support_critical_regions_only", - "support_object_xy_distance", "independent_support_layer_height"}) + "support_object_xy_distance"/*, "independent_support_layer_height"*/}) toggle_field(el, have_support_material); toggle_field("support_threshold_angle", have_support_material && is_auto(support_type)); //toggle_field("support_closing_radius", have_support_material && support_style == smsSnug); @@ -648,6 +648,9 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co for (auto el : {"flush_into_infill", "flush_into_support", "flush_into_objects"}) toggle_field(el, have_prime_tower); + // BBS: MusangKing - Hide "Independent support layer height" option + toggle_line("independent_support_layer_height", have_support_material && !have_prime_tower); + bool have_avoid_crossing_perimeters = config->opt_bool("reduce_crossing_wall"); toggle_line("max_travel_detour_distance", have_avoid_crossing_perimeters); diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 222d84c3b1..d9ff15aaaf 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1466,7 +1466,7 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) if (is_support_filament(interface_filament_id) && !(m_config->opt_float("support_top_z_distance") == 0 && m_config->opt_float("support_interface_spacing") == 0 && m_config->opt_enum("support_interface_pattern") == SupportMaterialInterfacePattern::smipConcentric)) { wxString msg_text = _L("When using support material for the support interface, We recommend the following settings:\n" - "0 top z distance, 0 interface spacing, concentric pattern."); + "0 top z distance, 0 interface spacing, concentric pattern and disable independent support layer height"); msg_text += "\n\n" + _L("Change these settings automatically? \n" "Yes - Change these settings automatically\n" "No - Do not change these settings for me"); @@ -1476,6 +1476,7 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) new_conf.set_key_value("support_top_z_distance", new ConfigOptionFloat(0)); new_conf.set_key_value("support_interface_spacing", new ConfigOptionFloat(0)); new_conf.set_key_value("support_interface_pattern", new ConfigOptionEnum(SupportMaterialInterfacePattern::smipConcentric)); + new_conf.set_key_value("independent_support_layer_height", new ConfigOptionBool(false)); m_config_manipulation.apply(m_config, &new_conf); } wxGetApp().plater()->update(); @@ -1978,10 +1979,10 @@ void TabPrint::build() optgroup->append_single_option_line("support_expansion", "support#base-pattern"); //optgroup->append_single_option_line("support_interface_loop_pattern"); - optgroup->append_single_option_line("support_object_xy_distance", "support#supportobject-xy-distance"); + optgroup->append_single_option_line("support_object_xy_distance", "support"); optgroup->append_single_option_line("bridge_no_support", "support#base-pattern"); optgroup->append_single_option_line("max_bridge_length", "support#base-pattern"); - //optgroup->append_single_option_line("independent_support_layer_height"); + optgroup->append_single_option_line("independent_support_layer_height", "support"); page = add_options_page(L("Others"), "advanced"); optgroup = page->new_optgroup(L("Bed adhension"), L"param_adhension"); From a86d94f2c96642e6b760eb7fe6cbbc5e8b490762 Mon Sep 17 00:00:00 2001 From: tao wang Date: Tue, 14 Feb 2023 15:44:03 +0800 Subject: [PATCH 016/339] NEW:update the content of the project page Change-Id: Idb7f8a2564c78a1f062580f6b388ee033238cedf --- src/libslic3r/Format/bbs_3mf.cpp | 43 +++- src/libslic3r/Model.cpp | 5 + src/libslic3r/Model.hpp | 14 ++ src/slic3r/CMakeLists.txt | 2 + src/slic3r/GUI/Auxiliary.cpp | 1 - src/slic3r/GUI/GUI_App.cpp | 4 +- src/slic3r/GUI/MainFrame.cpp | 8 +- src/slic3r/GUI/MainFrame.hpp | 6 +- src/slic3r/GUI/Plater.cpp | 2 +- src/slic3r/GUI/Project.cpp | 412 +++++++++++++++++++++++++++++++ src/slic3r/GUI/Project.hpp | 99 ++++++++ 11 files changed, 586 insertions(+), 10 deletions(-) create mode 100644 src/slic3r/GUI/Project.cpp create mode 100644 src/slic3r/GUI/Project.hpp diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index ef7bf7f9e3..8cc21b43e5 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -110,6 +110,7 @@ const std::string BBS_SEAM_PAINTING_VERSION = "BambuStudio:SeamPaintingV const std::string BBS_MM_PAINTING_VERSION = "BambuStudio:MmPaintingVersion"; const std::string BBL_MODEL_ID_TAG = "model_id"; const std::string BBL_MODEL_NAME_TAG = "Title"; +const std::string BBL_ORIGIN_TAG = "Origin"; const std::string BBL_DESIGNER_TAG = "Designer"; const std::string BBL_DESIGNER_USER_ID_TAG = "DesignerUserId"; const std::string BBL_DESIGNER_COVER_FILE_TAG = "DesignerCover"; @@ -121,6 +122,12 @@ const std::string BBL_MODIFICATION_TAG = "ModificationDate"; const std::string BBL_CREATION_DATE_TAG = "CreationDate"; const std::string BBL_APPLICATION_TAG = "Application"; +const std::string BBL_PROFILE_TITLE_TAG = "ProfileTitle"; +const std::string BBL_PROFILE_COVER_TAG = "ProfileCover"; +const std::string BBL_PROFILE_DESCRIPTION_TAG = "ProfileDescription"; +const std::string BBL_PROFILE_USER_ID_TAG = "ProfileUserId"; +const std::string BBL_PROFILE_USER_NAME_TAG = "ProfileUserName"; + const std::string MODEL_FOLDER = "3D/"; const std::string MODEL_EXTENSION = ".model"; const std::string MODEL_FILE = "3D/3dmodel.model"; // << this is the only format of the string which works with CURA @@ -847,7 +854,12 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) std::string m_designer_cover; ModelInfo model_info; BBLProject project_info; - + std::string m_profile_title; + std::string m_profile_cover; + std::string m_Profile_description; + std::string m_profile_user_id; + std::string m_profile_user_name; + XML_Parser m_xml_parser; // Error code returned by the application side of the parser. In that case the expat may not reliably deliver the error state // after returning from XML_Parse() function, thus we keep the error state here. @@ -1379,6 +1391,14 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) m_model->design_info->Designer = m_designer; } + m_model->profile_info = std::make_shared(); + m_model->profile_info->ProfileTile = m_profile_title; + m_model->profile_info->ProfileCover = m_profile_cover; + m_model->profile_info->ProfileDescription = m_Profile_description; + m_model->profile_info->ProfileUserId = m_profile_user_id; + m_model->profile_info->ProfileUserName = m_profile_user_name; + + m_model->model_info = std::make_shared(); m_model->model_info->load(model_info); @@ -3189,6 +3209,9 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) } else if (m_curr_metadata_name == BBL_MODEL_NAME_TAG) { BOOST_LOG_TRIVIAL(trace) << "design_info, load_3mf found model name = " << m_curr_characters; model_info.model_name = xml_unescape(m_curr_characters); + } else if (m_curr_metadata_name == BBL_ORIGIN_TAG) { + BOOST_LOG_TRIVIAL(trace) << "design_info, load_3mf found model name = " << m_curr_characters; + model_info.origin = xml_unescape(m_curr_characters); } else if (m_curr_metadata_name == BBL_DESIGNER_TAG) { BOOST_LOG_TRIVIAL(trace) << "design_info, load_3mf found designer = " << m_curr_characters; m_designer = xml_unescape(m_curr_characters); @@ -3210,6 +3233,21 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) } else if (m_curr_metadata_name == BBL_REGION_TAG) { BOOST_LOG_TRIVIAL(trace) << "design_info, load_3mf found region = " << m_curr_characters; m_contry_code = xml_unescape(m_curr_characters); + } else if (m_curr_metadata_name == BBL_PROFILE_TITLE_TAG) { + BOOST_LOG_TRIVIAL(trace) << "design_info, load_3mf found profile_title = " << m_curr_characters; + m_profile_title = xml_unescape(m_curr_characters); + } else if (m_curr_metadata_name == BBL_PROFILE_COVER_TAG) { + BOOST_LOG_TRIVIAL(trace) << "design_info, load_3mf found profile_cover = " << m_curr_characters; + m_profile_cover = xml_unescape(m_curr_characters); + } else if (m_curr_metadata_name == BBL_PROFILE_DESCRIPTION_TAG) { + BOOST_LOG_TRIVIAL(trace) << "design_info, load_3mf found profile_description = " << m_curr_characters; + m_Profile_description = xml_unescape(m_curr_characters); + } else if (m_curr_metadata_name == BBL_PROFILE_USER_ID_TAG) { + BOOST_LOG_TRIVIAL(trace) << "design_info, load_3mf found profile_user_id = " << m_curr_characters; + m_profile_user_id = xml_unescape(m_curr_characters); + }else if (m_curr_metadata_name == BBL_PROFILE_USER_NAME_TAG) { + BOOST_LOG_TRIVIAL(trace) << "design_info, load_3mf found profile_user_name = " << m_curr_characters; + m_profile_user_name = xml_unescape(m_curr_characters); } else if (m_curr_metadata_name == BBL_CREATION_DATE_TAG) { ; } else if (m_curr_metadata_name == BBL_MODIFICATION_TAG) { @@ -5427,6 +5465,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) stream << " xmlns:p=\"http://schemas.microsoft.com/3dmanufacturing/production/2015/06\" requiredextensions=\"p\""; stream << ">\n"; + std::string origin; std::string name; std::string user_name; std::string user_id; @@ -5455,6 +5494,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) description = model.model_info->description; copyright = model.model_info->copyright; name = model.model_info->model_name; + origin = model.model_info->origin; BOOST_LOG_TRIVIAL(trace) << "design_info, save_3mf found designer_cover = " << design_cover; } // remember to use metadata_item_map to store metadata info @@ -5466,6 +5506,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) } metadata_item_map[BBL_MODEL_NAME_TAG] = xml_escape(name); + metadata_item_map[BBL_ORIGIN_TAG] = xml_escape(origin); metadata_item_map[BBL_DESIGNER_TAG] = xml_escape(user_name); metadata_item_map[BBL_DESIGNER_USER_ID_TAG] = user_id; metadata_item_map[BBL_DESIGNER_COVER_FILE_TAG] = xml_escape(design_cover); diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index d710efd742..8fd3d3ce86 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -70,6 +70,7 @@ Model& Model::assign_copy(const Model &rhs) // BBS: for design info this->design_info = rhs.design_info; this->model_info = rhs.model_info; + this->profile_info = rhs.profile_info; return *this; } @@ -104,6 +105,8 @@ Model& Model::assign_copy(Model &&rhs) rhs.design_info.reset(); this->model_info = rhs.model_info; rhs.model_info.reset(); + this->profile_info = rhs.profile_info; + rhs.profile_info.reset(); return *this; } @@ -868,8 +871,10 @@ void Model::load_from(Model& model) next_object_backup_id = model.next_object_backup_id; design_info = model.design_info; model_info = model.model_info; + profile_info = model.profile_info; model.design_info.reset(); model.model_info.reset(); + model.profile_info.reset(); } // BBS: backup diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index d12bf1f7d9..0560840a0a 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -1257,6 +1257,17 @@ struct GlobalSpeedMap Polygon bed_poly; }; +/* Profile data */ +class ModelProfileInfo +{ +public: + std::string ProfileTile; + std::string ProfileCover; + std::string ProfileDescription; + std::string ProfileUserId; + std::string ProfileUserName; +}; + /* info in ModelDesignInfo can not changed after initialization */ class ModelDesignInfo { @@ -1275,6 +1286,7 @@ public: std::string description; // utf8 format std::string copyright; // utf8 format std::string model_name; // utf8 format + std::string origin; // utf8 format std::map metadata_items; // other meta data items @@ -1284,6 +1296,7 @@ public: this->description = info.description; this->copyright = info.copyright; this->model_name = info.model_name; + this->origin = info.origin; this->metadata_items = info.metadata_items; } }; @@ -1310,6 +1323,7 @@ public: // DesignInfo of Model std::shared_ptr design_info = nullptr; std::shared_ptr model_info = nullptr; + std::shared_ptr profile_info = nullptr; void SetDesigner(std::string designer, std::string designer_user_id) { if (design_info == nullptr) { diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index e4e269d819..3d60c924d1 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -82,6 +82,8 @@ set(SLIC3R_GUI_SOURCES GUI/AuxiliaryDialog.hpp GUI/Auxiliary.cpp GUI/Auxiliary.hpp + GUI/Project.cpp + GUI/Project.hpp GUI/BackgroundSlicingProcess.cpp GUI/BackgroundSlicingProcess.hpp GUI/BitmapCache.cpp diff --git a/src/slic3r/GUI/Auxiliary.cpp b/src/slic3r/GUI/Auxiliary.cpp index f94ee1170c..614d4f7f47 100644 --- a/src/slic3r/GUI/Auxiliary.cpp +++ b/src/slic3r/GUI/Auxiliary.cpp @@ -1034,7 +1034,6 @@ void AuxiliaryPanel::Reload(wxString aux_path) auto iter = m_paths_list.find(folder.ToStdString()); auto file_path_str = fs::path(file_path.c_str()); - if (iter != m_paths_list.end()) { m_paths_list[folder.ToStdString()].push_back(file_path_str); break; diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index a38c3649ce..bc3fd433f2 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -2413,7 +2413,7 @@ bool GUI_App::on_init_inner() sidebar().obj_list()->init(); //sidebar().aux_list()->init_auxiliary(); - mainframe->m_auxiliary->init_auxiliary(); + //mainframe->m_auxiliary->init_auxiliary(); // update_mode(); // !!! do that later SetTopWindow(mainframe); @@ -3042,7 +3042,7 @@ void GUI_App::recreate_GUI(const wxString& msg_name) // Propagate model objects to object list. sidebar().obj_list()->init(); //sidebar().aux_list()->init_auxiliary(); - mainframe->m_auxiliary->init_auxiliary(); + //mainframe->m_auxiliary->init_auxiliary(); SetTopWindow(mainframe); dlg.Update(30, _L("Rebuild") + dots); diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index d49e06cb97..3ef44f9ce9 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -970,9 +970,9 @@ void MainFrame::init_tabpanel() m_monitor->SetBackgroundColour(*wxWHITE); m_tabpanel->AddPage(m_monitor, _L("Device"), std::string("tab_monitor_active"), std::string("tab_monitor_active")); - m_auxiliary = new AuxiliaryPanel(m_tabpanel, wxID_ANY, wxDefaultPosition, wxDefaultSize); - m_auxiliary->SetBackgroundColour(*wxWHITE); - m_tabpanel->AddPage(m_auxiliary, _L("Project"), std::string("tab_auxiliary_avtice"), std::string("tab_auxiliary_avtice")); + m_project = new ProjectPanel(m_tabpanel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_project->SetBackgroundColour(*wxWHITE); + m_tabpanel->AddPage(m_project, _L("Project"), std::string("tab_auxiliary_avtice"), std::string("tab_auxiliary_avtice")); if (m_plater) { // load initial config @@ -1790,7 +1790,7 @@ void MainFrame::on_dpi_changed(const wxRect& suggested_rect) //BBS GUI refactor: remove unused layout new/dlg //if (m_layout != ESettingsLayout::Dlg) // Do not update tabs if the Settings are in the separated dialog m_param_panel->msw_rescale(); - m_auxiliary->msw_rescale(); + m_project->msw_rescale(); m_monitor->msw_rescale(); // BBS diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index 81c59fc49e..58ed9314c4 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -20,6 +20,7 @@ #include "ParamsPanel.hpp" #include "Monitor.hpp" #include "Auxiliary.hpp" +#include "Project.hpp" #include "UnsavedChangesDialog.hpp" #include "Widgets/SideButton.hpp" #include "Widgets/SideMenuPopup.hpp" @@ -330,7 +331,10 @@ public: Plater* m_plater { nullptr }; //BBS: GUI refactor MonitorPanel* m_monitor{ nullptr }; - AuxiliaryPanel* m_auxiliary{ nullptr }; + + //AuxiliaryPanel* m_auxiliary{ nullptr }; + ProjectPanel* m_project{ nullptr }; + WebViewPanel* m_webview { nullptr }; wxLogWindow* m_log_window { nullptr }; // BBS diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 444b7d1d92..1c00290dc7 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -3813,7 +3813,7 @@ std::vector Plater::priv::load_model_objects(const ModelObjectPtrs& mode void Plater::priv::load_auxiliary_files() { std::string auxiliary_path = encode_path(q->model().get_auxiliary_file_temp_path().c_str()); - wxGetApp().mainframe->m_auxiliary->Reload(auxiliary_path); + //wxGetApp().mainframe->m_project->Reload(auxiliary_path); } fs::path Plater::priv::get_export_file_path(GUI::FileType file_type) diff --git a/src/slic3r/GUI/Project.cpp b/src/slic3r/GUI/Project.cpp new file mode 100644 index 0000000000..70ea98f782 --- /dev/null +++ b/src/slic3r/GUI/Project.cpp @@ -0,0 +1,412 @@ +#include "Tab.hpp" +#include "Project.hpp" +#include "libslic3r/Utils.hpp" +#include "libslic3r/Model.hpp" +#include "libslic3r/Format/bbs_3mf.hpp" + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "wxExtensions.hpp" +#include "GUI_App.hpp" +#include "GUI_ObjectList.hpp" +#include "MainFrame.hpp" +#include + +namespace Slic3r { namespace GUI { + +wxDEFINE_EVENT(EVT_PROJECT_RELOAD, wxCommandEvent); + +const std::vector license_list = { + "BSD License", + "Apache License", + "GPL License", + "LGPL License", + "MIT License", + "CC License" +}; + +ProjectPanel::ProjectPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size, long style) : wxPanel(parent, id, pos, size, style) +{ + m_project_home_url = wxString::Format("file://%s/web/model/index.html", from_u8(resources_dir())); + std::string strlang = wxGetApp().app_config->get("language"); + if (strlang != "") + m_project_home_url = wxString::Format("file://%s/web/model/index.html?lang=%s", from_u8(resources_dir()), strlang); + + wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL); + + m_browser = WebView::CreateWebView(this, m_project_home_url); + if (m_browser == nullptr) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format("load web view of project page failed"); + return; + } + //m_browser->Hide(); + main_sizer->Add(m_browser, wxSizerFlags().Expand().Proportion(1)); + m_browser->Bind(wxEVT_WEBVIEW_NAVIGATED, &ProjectPanel::on_navigated, this); + m_browser->Bind(wxEVT_WEBVIEW_SCRIPT_MESSAGE_RECEIVED, &ProjectPanel::OnScriptMessage, this, m_browser->GetId()); + + Bind(EVT_PROJECT_RELOAD, &ProjectPanel::on_reload, this); + + SetSizer(main_sizer); + Layout(); + Fit(); +} + +ProjectPanel::~ProjectPanel() {} + +void ProjectPanel::on_reload(wxCommandEvent& evt) +{ + std::string update_type; + std::string license; + std::string model_name; + std::string model_author; + std::string cover_file; + std::string description; + std::map> files; + + std::string p_name; + std::string p_author; + std::string p_description; + std::string p_cover_file; + + Model model = wxGetApp().plater()->model(); + + license = model.model_info->license; + model_name = model.model_info->model_name; + cover_file = model.model_info->cover_file; + description = model.model_info->description; + update_type = model.model_info->origin; + + if (model.design_info != nullptr) + model_author = model.design_info->Designer; + + if (model.profile_info != nullptr) { + p_name = model.profile_info->ProfileTile; + p_description = model.profile_info->ProfileDescription; + p_cover_file = model.profile_info->ProfileCover; + p_author = model.profile_info->ProfileUserName; + } + + //file info + std::string file_path = encode_path(wxGetApp().plater()->model().get_auxiliary_file_temp_path().c_str()); + if (!file_path.empty()) { + files = Reload(file_path); + } + else { + clear_model_info(); + return; + } + + json j; + j["model"]["license"] = license; + j["model"]["name"] = url_encode(model_name); + j["model"]["author"] = url_encode(model_author);; + j["model"]["cover_img"] = url_encode(cover_file); + j["model"]["description"] = url_encode(description); + j["model"]["preview_img"] = files["Model Pictures"]; + j["model"]["upload_type"] = update_type; + + j["file"]["BOM"] = files["Bill of Materials"]; + j["file"]["Assembly"] = files["Assembly Guide"]; + j["file"]["Other"] = files["Others"]; + + j["profile"]["name"] = url_encode(p_name); + j["profile"]["author"] = url_encode(p_author); + j["profile"]["description"] = url_encode(p_description); + j["profile"]["cover_img"] = url_encode(p_cover_file); + j["profile"]["preview_img"] = files["Profile Pictures"]; + + json m_Res = json::object(); + m_Res["command"] = "show_3mf_info"; + m_Res["sequence_id"] = std::to_string(ProjectPanel::m_sequence_id++); + m_Res["model"] = j; + + wxString strJS = wxString::Format("HandleStudio(%s)", m_Res.dump(-1, ' ', false, json::error_handler_t::ignore)); + + if (m_web_init_completed) { + wxGetApp().CallAfter([this, strJS] { + RunScript(strJS.ToStdString()); + }); + } +} + +void ProjectPanel::msw_rescale() +{ +} + +void ProjectPanel::on_size(wxSizeEvent &event) +{ + event.Skip(); +} + +void ProjectPanel::on_navigated(wxWebViewEvent& event) +{ + event.Skip(); +} + +void ProjectPanel::OnScriptMessage(wxWebViewEvent& evt) +{ + try { + wxString strInput = evt.GetString(); + json j = json::parse(strInput); + + wxString strCmd = j["command"]; + + if (strCmd == "open_3mf_accessory") { + wxString accessory_path = j["accessory_path"]; + + if (!accessory_path.empty()) { + std::string decode_path = url_decode(accessory_path.ToStdString()); + fs::path path(decode_path); + + if (fs::exists(path)) { + wxLaunchDefaultApplication(path.wstring(), 0); + } + } + } + else if (strCmd == "request_3mf_info") { + m_web_init_completed = true; + } + else if (strCmd == "debug_info") { + //wxString msg = j["msg"]; + //OutputDebugString(wxString::Format("Model_Web: msg = %s \r\n", msg)); + //BOOST_LOG_TRIVIAL(info) << wxString::Format("Model_Web: msg = %s", msg); + } + + } + catch (std::exception& e) { + // wxMessageBox(e.what(), "json Exception", MB_OK); + } +} + +void ProjectPanel::update_model_data() +{ + Model model = wxGetApp().plater()->model(); + clear_model_info(); + + //basics info + if (model.model_info == nullptr) + return; + + auto event = wxCommandEvent(EVT_PROJECT_RELOAD); + event.SetEventObject(this); + wxPostEvent(this, event); +} + +void ProjectPanel::clear_model_info() +{ + json m_Res = json::object(); + m_Res["command"] = "clear_3mf_info"; + m_Res["sequence_id"] = std::to_string(ProjectPanel::m_sequence_id++); + + wxString strJS = wxString::Format("HandleStudio(%s)", m_Res.dump(-1, ' ', false, json::error_handler_t::ignore)); + + wxGetApp().CallAfter([this, strJS] { + RunScript(strJS.ToStdString()); + }); +} + +std::map> ProjectPanel::Reload(wxString aux_path) +{ + std::vector dir_cache; + fs::directory_iterator iter_end; + wxString m_root_dir; + std::map> m_paths_list; + + const static std::array s_default_folders = { + ("Model Pictures"), + ("Bill of Materials"), + ("Assembly Guide"), + ("Others"), + //(".thumbnails"), + ("Profile Pictures"), + }; + + for (auto folder : s_default_folders) + m_paths_list[folder.ToStdString()] = std::vector{}; + + + fs::path new_aux_path(aux_path.ToStdWstring()); + + try { + fs::remove_all(fs::path(m_root_dir.ToStdWstring())); + } + catch (...) { + BOOST_LOG_TRIVIAL(error) << "Failed removing the auxiliary directory" << m_root_dir.c_str(); + } + + m_root_dir = aux_path; + // Check new path. If not exist, create a new one. + if (!fs::exists(new_aux_path)) { + fs::create_directory(new_aux_path); + // Create default folders if they are not loaded + for (auto folder : s_default_folders) { + wxString folder_path = aux_path + "/" + folder; + if (fs::exists(folder_path.ToStdWstring())) continue; + fs::create_directory(folder_path.ToStdWstring()); + } + return m_paths_list; + } + + // Load from new path + for (fs::directory_iterator iter(new_aux_path); iter != iter_end; iter++) { + wxString path = iter->path().generic_wstring(); + dir_cache.push_back(iter->path()); + } + + + for (auto dir : dir_cache) { + for (fs::directory_iterator iter(dir); iter != iter_end; iter++) { + if (fs::is_directory(iter->path())) continue; + + json pfile_obj; + + std::string file_path = iter->path().string(); + fs::path file_path_obj = fs::path(iter->path().string()); + + for (auto folder : s_default_folders) { + auto idx = file_path.find(folder.ToStdString()); + if (idx != std::string::npos) { + + wxStructStat strucStat; + wxString file_name = encode_path(file_path.c_str()); + wxStat(file_name, &strucStat); + wxFileOffset filelen = strucStat.st_size; + + pfile_obj["filename"] = url_encode(file_path_obj.filename().string().c_str()); + pfile_obj["size"] = formatBytes((unsigned long)filelen); + + //image + if (file_path_obj.extension() == ".jpg" || + file_path_obj.extension() == ".jpeg" || + file_path_obj.extension() == ".png" || + file_path_obj.extension() == ".bmp") + { + + wxString base64_str = to_base64(file_path); + pfile_obj["filepath"] = base64_str.ToStdString(); + m_paths_list[folder.ToStdString()].push_back(pfile_obj); + break; + } + else { + pfile_obj["filepath"] = url_encode(file_path); + m_paths_list[folder.ToStdString()].push_back(pfile_obj); + break; + } + } + } + } + } + + return m_paths_list; +} + +std::string ProjectPanel::formatBytes(unsigned long bytes) +{ + double dValidData = round(double(bytes) / (1024 * 1024) * 1000) / 1000; + return wxString::Format("%.2fMB", dValidData).ToStdString(); +} + +wxString ProjectPanel::to_base64(std::string file_path) +{ + std::map base64_format; + base64_format[".jpg"] = wxBITMAP_TYPE_JPEG; + base64_format[".jpeg"] = wxBITMAP_TYPE_JPEG; + base64_format[".png"] = wxBITMAP_TYPE_PNG; + base64_format[".bmp"] = wxBITMAP_TYPE_BMP; + + std::string extension = file_path.substr(file_path.rfind("."), file_path.length()); + + auto image = new wxImage(encode_path(file_path.c_str())); + wxMemoryOutputStream mem; + image->SaveFile(mem, base64_format[extension]); + + wxString km = wxBase64Encode(mem.GetOutputStreamBuffer()->GetBufferStart(), + mem.GetSize()); + + std::wstringstream wss; + wss << L"data:image/jpg;base64,"; + //wss << wxBase64Encode(km.data(), km.size()); + wss << km; + + wxString base64_str = wss.str(); + return base64_str; +} + +void ProjectPanel::RunScript(std::string content) +{ + WebView::RunScript(m_browser, content); +} + +char ProjectPanel::from_hex(char ch) { + return isdigit(ch) ? ch - '0' : tolower(ch) - 'a' + 10; +} + +std::string ProjectPanel::url_decode(string text) { + char h; + ostringstream escaped; + escaped.fill('0'); + + for (auto i = text.begin(), n = text.end(); i != n; ++i) { + string::value_type c = (*i); + + if (c == '%') { + if (i[1] && i[2]) { + h = from_hex(i[1]) << 4 | from_hex(i[2]); + escaped << h; + i += 2; + } + } + else if (c == '+') { + escaped << ' '; + } + else { + escaped << c; + } + } + + return escaped.str(); +} + +std::string ProjectPanel::url_encode(const std::string& value) { + std::ostringstream escaped; + escaped.fill('0'); + escaped << std::hex; + for (std::string::const_iterator i = value.begin(), n = value.end(); i != n; ++i) { + std::string::value_type c = (*i); + + // Keep alphanumeric and other accepted characters intact + if (isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') { + escaped << c; + continue; + } + + // Any other characters are percent-encoded + escaped << std::uppercase; + escaped << '%' << std::setw(2) << int((unsigned char)c); + escaped << std::nouppercase; + } + return escaped.str(); +} + +bool ProjectPanel::Show(bool show) +{ + if (show) update_model_data(); + return wxPanel::Show(show); +} + +}} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/Project.hpp b/src/slic3r/GUI/Project.hpp new file mode 100644 index 0000000000..d001f013e1 --- /dev/null +++ b/src/slic3r/GUI/Project.hpp @@ -0,0 +1,99 @@ +#ifndef slic3r_Project_hpp_ +#define slic3r_Project_hpp_ + +#include "Tabbook.hpp" +#include "wx/artprov.h" +#include "wx/cmdline.h" +#include "wx/notifmsg.h" +#include "wx/settings.h" +#include "wx/webview.h" + +#if wxUSE_WEBVIEW_EDGE +#include "wx/msw/webview_edge.h" +#endif + +#include "wx/numdlg.h" +#include "wx/infobar.h" +#include "wx/filesys.h" +#include "wx/fs_arc.h" +#include "wx/fs_mem.h" +#include "wx/stdpaths.h" +#include +#include +#include "wx/textctrl.h" +#include + +#include "nlohmann/json.hpp" +#include "slic3r/Utils/json_diff.hpp" + +#include +#include +#include +#include "Event.hpp" +#include "libslic3r/ProjectTask.hpp" +#include "wxExtensions.hpp" + +#define AUFILE_GREY700 wxColour(107, 107, 107) +#define AUFILE_GREY500 wxColour(158, 158, 158) +#define AUFILE_GREY300 wxColour(238, 238, 238) +#define AUFILE_GREY200 wxColour(248, 248, 248) +#define AUFILE_BRAND wxColour(0, 174, 66) +#define AUFILE_BRAND_TRANSPARENT wxColour(215, 232, 222) +//#define AUFILE_PICTURES_SIZE wxSize(FromDIP(300), FromDIP(300)) +//#define AUFILE_PICTURES_PANEL_SIZE wxSize(FromDIP(300), FromDIP(340)) +#define AUFILE_PICTURES_SIZE wxSize(FromDIP(168), FromDIP(168)) +#define AUFILE_PICTURES_PANEL_SIZE wxSize(FromDIP(168), FromDIP(208)) +#define AUFILE_SIZE wxSize(FromDIP(168), FromDIP(168)) +#define AUFILE_PANEL_SIZE wxSize(FromDIP(168), FromDIP(208)) +#define AUFILE_TEXT_HEIGHT FromDIP(40) +#define AUFILE_ROUNDING FromDIP(5) + +namespace Slic3r { namespace GUI { + +struct project_file{ + std::string filepath; + std::string filename; + std::string size; +}; + +class ProjectPanel : public wxPanel +{ +private: + bool m_web_init_completed = {false}; + bool m_reload_already = {false}; + + wxWebView* m_browser = {nullptr}; + wxString m_project_home_url; + wxString m_root_dir; + static inline int m_sequence_id = 8000; + + +public: + ProjectPanel(wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize, long style = wxTAB_TRAVERSAL); + ~ProjectPanel(); + + + void on_reload(wxCommandEvent& evt); + void on_size(wxSizeEvent &event); + void on_navigated(wxWebViewEvent& event); + + void msw_rescale(); + void update_model_data(); + void clear_model_info(); + + bool Show(bool show); + void OnScriptMessage(wxWebViewEvent& evt); + void RunScript(std::string content); + + char from_hex(char ch); + std::string url_decode(string text); + std::string url_encode(const std::string& value); + std::map> Reload(wxString aux_path); + std::string formatBytes(unsigned long bytes); + wxString to_base64(std::string path); +}; + +wxDECLARE_EVENT(EVT_PROJECT_RELOAD, wxCommandEvent); +}} // namespace Slic3r::GUI + +#endif From 289a3d1d532e290ec8b210c30f5a14a4a5cfac90 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Mon, 6 Mar 2023 14:47:11 +0800 Subject: [PATCH 017/339] FIX: crash at fix model (Studio-1482) deselect all objects when select plate in objectList. https://jira.bambooolab.com/browse/STUDIO-1482 Change-Id: I3660108ba1d8f369afd5058f086cb7daf306ea59 --- src/slic3r/GUI/GUI_ObjectList.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 08d3b6c4bb..104dc40003 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -155,6 +155,7 @@ ObjectList::ObjectList(wxWindow* parent) : ObjectDataViewModelNode* sel_node = (ObjectDataViewModelNode*)event.GetItem().GetID(); if (sel_node && (sel_node->GetType() & ItemType::itPlate)) { wxGetApp().plater()->select_plate(sel_node->GetPlateIdx()); + wxGetApp().plater()->deselect_all(); } else { selection_changed(); @@ -4690,17 +4691,20 @@ void ObjectList::fix_through_netfabb() obj_idxs.erase(obj_idxs.begin()+i); #endif // FIX_THROUGH_NETFABB_ALWAYS for (int obj_idx : obj_idxs) - model_names.push_back(object(obj_idx)->name); + if (object(obj_idx)) + model_names.push_back(object(obj_idx)->name); } else { ModelObject* obj = object(obj_idxs.front()); + if (obj) { #if !FIX_THROUGH_NETFABB_ALWAYS - for (int i = int(vol_idxs.size()) - 1; i >= 0; --i) - if (obj->get_repaired_errors_count(vol_idxs[i]) == 0) - vol_idxs.erase(vol_idxs.begin() + i); + for (int i = int(vol_idxs.size()) - 1; i >= 0; --i) + if (obj->get_repaired_errors_count(vol_idxs[i]) == 0) + vol_idxs.erase(vol_idxs.begin() + i); #endif // FIX_THROUGH_NETFABB_ALWAYS - for (int vol_idx : vol_idxs) - model_names.push_back(obj->volumes[vol_idx]->name); + for (int vol_idx : vol_idxs) + model_names.push_back(obj->volumes[vol_idx]->name); + } } auto plater = wxGetApp().plater(); @@ -4711,6 +4715,9 @@ void ObjectList::fix_through_netfabb() std::vector& succes_models, std::vector>& failed_models) { + if (!object(obj_idx)) + return false; + const std::string& model_name = model_names[model_idx]; wxString msg = _L("Repairing model object"); if (model_names.size() == 1) From aba824bbb9c5b2370ad72ed7f1233a72503a3f42 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Mon, 6 Mar 2023 15:35:48 +0800 Subject: [PATCH 018/339] FIX: press key R and T cannot close gizmo window (STUDIO-1980) https://jira.bambooolab.com/browse/STUDIO-1980 Change-Id: Iaebe4674cf3b14dde4e7ee1a9b123b5a36d2c693 --- src/slic3r/GUI/Gizmos/GLGizmosManager.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index f1ee1753ed..49f8799330 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -1017,8 +1017,6 @@ bool GLGizmosManager::on_char(wxKeyEvent& evt) break; } //skip some keys when gizmo - case 'r': - case 'R': case 'A': case 'a': { @@ -1088,9 +1086,9 @@ bool GLGizmosManager::on_char(wxKeyEvent& evt) // BBS: Skip all keys when in gizmo. This is necessary for 3D text tool. default: { - if (is_running() && m_current == EType::Text) { - processed = true; - } + //if (is_running() && m_current == EType::Text) { + // processed = true; + //} break; } } From fdd659cefeda5cddf3d4042bcd8d5d23e9264787 Mon Sep 17 00:00:00 2001 From: "qing.zhang" Date: Mon, 6 Mar 2023 15:13:36 +0800 Subject: [PATCH 019/339] ENH: speed up the wall generator process by using bounding box Signed-off-by: qing.zhang Change-Id: Ifccbb33bc6df28136746f98020ef2cad002b5868 --- src/libslic3r/ClipperUtils.cpp | 92 +++++++++++++++++++++++++++- src/libslic3r/ClipperUtils.hpp | 20 +++++- src/libslic3r/PerimeterGenerator.cpp | 21 ++++--- 3 files changed, 122 insertions(+), 11 deletions(-) diff --git a/src/libslic3r/ClipperUtils.cpp b/src/libslic3r/ClipperUtils.cpp index b7aeed8a69..0745bea8d4 100644 --- a/src/libslic3r/ClipperUtils.cpp +++ b/src/libslic3r/ClipperUtils.cpp @@ -57,8 +57,96 @@ err: #endif /* CLIPPER_UTILS_DEBUG */ namespace ClipperUtils { - Points EmptyPathsProvider::s_empty_points; - Points SinglePathProvider::s_end; +Points EmptyPathsProvider::s_empty_points; +Points SinglePathProvider::s_end; + +// Clip source polygon to be used as a clipping polygon with a bouding box around the source (to be clipped) polygon. +// Useful as an optimization for expensive ClipperLib operations, for example when clipping source polygons one by one +// with a set of polygons covering the whole layer below. +template inline void clip_clipper_polygon_with_subject_bbox_templ(const std::vector &src, const BoundingBox &bbox, std::vector &out) +{ + out.clear(); + const size_t cnt = src.size(); + if (cnt < 3) return; + + enum class Side { Left = 1, Right = 2, Top = 4, Bottom = 8 }; + + auto sides = [bbox](const PointType &p) { + return int(p.x() < bbox.min.x()) * int(Side::Left) + int(p.x() > bbox.max.x()) * int(Side::Right) + int(p.y() < bbox.min.y()) * int(Side::Bottom) + + int(p.y() > bbox.max.y()) * int(Side::Top); + }; + + int sides_prev = sides(src.back()); + int sides_this = sides(src.front()); + const size_t last = cnt - 1; + for (size_t i = 0; i < last; ++i) { + int sides_next = sides(src[i + 1]); + if ( // This point is inside. Take it. + sides_this == 0 || + // Either this point is outside and previous or next is inside, or + // the edge possibly cuts corner of the bounding box. + (sides_prev & sides_this & sides_next) == 0) { + out.emplace_back(src[i]); + sides_prev = sides_this; + } else { + // All the three points (this, prev, next) are outside at the same side. + // Ignore this point. + } + sides_this = sides_next; + } + + // Never produce just a single point output polygon. + if (!out.empty()) + if (int sides_next = sides(out.front()); + // The last point is inside. Take it. + sides_this == 0 || + // Either this point is outside and previous or next is inside, or + // the edge possibly cuts corner of the bounding box. + (sides_prev & sides_this & sides_next) == 0) + out.emplace_back(src.back()); +} + + void clip_clipper_polygon_with_subject_bbox(const Points &src, const BoundingBox &bbox, Points &out) { clip_clipper_polygon_with_subject_bbox_templ(src, bbox, out); } +void clip_clipper_polygon_with_subject_bbox(const ZPoints &src, const BoundingBox &bbox, ZPoints &out) { clip_clipper_polygon_with_subject_bbox_templ(src, bbox, out); } + +template [[nodiscard]] std::vector clip_clipper_polygon_with_subject_bbox_templ(const std::vector &src, const BoundingBox &bbox) +{ + std::vector out; + clip_clipper_polygon_with_subject_bbox(src, bbox, out); + return out; +} + +[[nodiscard]] Points clip_clipper_polygon_with_subject_bbox(const Points &src, const BoundingBox &bbox) { return clip_clipper_polygon_with_subject_bbox_templ(src, bbox); } +[[nodiscard]] ZPoints clip_clipper_polygon_with_subject_bbox(const ZPoints &src, const BoundingBox &bbox) { return clip_clipper_polygon_with_subject_bbox_templ(src, bbox); } + +void clip_clipper_polygon_with_subject_bbox(const Polygon &src, const BoundingBox &bbox, Polygon &out) { + clip_clipper_polygon_with_subject_bbox(src.points, bbox, out.points); +} + +[[nodiscard]] Polygon clip_clipper_polygon_with_subject_bbox(const Polygon &src, const BoundingBox &bbox) +{ + Polygon out; + clip_clipper_polygon_with_subject_bbox(src.points, bbox, out.points); + return out; +} + +[[nodiscard]] Polygons clip_clipper_polygons_with_subject_bbox(const Polygons &src, const BoundingBox &bbox) +{ + Polygons out; + out.reserve(src.size()); + for (const Polygon &p : src) out.emplace_back(clip_clipper_polygon_with_subject_bbox(p, bbox)); + out.erase(std::remove_if(out.begin(), out.end(), [](const Polygon &polygon) { return polygon.empty(); }), out.end()); + return out; +} +[[nodiscard]] Polygons clip_clipper_polygons_with_subject_bbox(const ExPolygon &src, const BoundingBox &bbox) +{ + Polygons out; + out.reserve(src.num_contours()); + out.emplace_back(clip_clipper_polygon_with_subject_bbox(src.contour, bbox)); + for (const Polygon &p : src.holes) out.emplace_back(clip_clipper_polygon_with_subject_bbox(p, bbox)); + out.erase(std::remove_if(out.begin(), out.end(), [](const Polygon &polygon) { return polygon.empty(); }), out.end()); + return out; +} } static ExPolygons PolyTreeToExPolygons(ClipperLib::PolyTree &&polytree) diff --git a/src/libslic3r/ClipperUtils.hpp b/src/libslic3r/ClipperUtils.hpp index d96061b07b..0c703b6311 100644 --- a/src/libslic3r/ClipperUtils.hpp +++ b/src/libslic3r/ClipperUtils.hpp @@ -296,7 +296,25 @@ namespace ClipperUtils { const SurfacesPtr &m_surfaces; size_t m_size; }; -} + + + // For ClipperLib with Z coordinates. + using ZPoint = Vec3i32; + using ZPoints = std::vector; + + // Clip source polygon to be used as a clipping polygon with a bouding box around the source (to be clipped) polygon. + // Useful as an optimization for expensive ClipperLib operations, for example when clipping source polygons one by one + // with a set of polygons covering the whole layer below. + void clip_clipper_polygon_with_subject_bbox(const Points &src, const BoundingBox &bbox, Points &out); + void clip_clipper_polygon_with_subject_bbox(const ZPoints &src, const BoundingBox &bbox, ZPoints &out); + [[nodiscard]] Points clip_clipper_polygon_with_subject_bbox(const Points &src, const BoundingBox &bbox); + [[nodiscard]] ZPoints clip_clipper_polygon_with_subject_bbox(const ZPoints &src, const BoundingBox &bbox); + void clip_clipper_polygon_with_subject_bbox(const Polygon &src, const BoundingBox &bbox, Polygon &out); + [[nodiscard]] Polygon clip_clipper_polygon_with_subject_bbox(const Polygon &src, const BoundingBox &bbox); + [[nodiscard]] Polygons clip_clipper_polygons_with_subject_bbox(const Polygons &src, const BoundingBox &bbox); + [[nodiscard]] Polygons clip_clipper_polygons_with_subject_bbox(const ExPolygon &src, const BoundingBox &bbox); + + } // Perform union of input polygons using the non-zero rule, convert to ExPolygons. ExPolygons ClipperPaths_to_Slic3rExPolygons(const ClipperLib::Paths &input, bool do_union = false); diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index cb37471e45..ff7d94a6e1 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -268,6 +268,10 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime } if (perimeter_generator.config->detect_overhang_wall && perimeter_generator.layer_id > perimeter_generator.object_config->raft_layers) { // get non 100% overhang paths by intersecting this loop with the grown lower slices + // prepare grown lower layer slices for overhang detection + BoundingBox bbox(polygon.points); + bbox.offset(SCALED_EPSILON); + Polylines remain_polines; //BBS: don't calculate overhang degree when enable fuzzy skin. It's unmeaning @@ -275,10 +279,10 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime for (auto it = lower_polygons_series->begin(); it != lower_polygons_series->end(); it++) { + Polygons lower_polygons_series_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(it->second, bbox); - Polylines inside_polines = (it == lower_polygons_series->begin()) ? - intersection_pl({ polygon }, it->second) : - intersection_pl(remain_polines, it->second); + Polylines inside_polines = (it == lower_polygons_series->begin()) ? intersection_pl({polygon}, lower_polygons_series_clipped) : + intersection_pl(remain_polines, lower_polygons_series_clipped); extrusion_paths_append( paths, std::move(inside_polines), @@ -289,9 +293,8 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime extrusion_width, (float)perimeter_generator.layer_height); - remain_polines = (it == lower_polygons_series->begin()) ? - diff_pl({ polygon }, it->second) : - diff_pl(remain_polines, it->second); + remain_polines = (it == lower_polygons_series->begin()) ? diff_pl({polygon}, lower_polygons_series_clipped) : + diff_pl(remain_polines, lower_polygons_series_clipped); if (remain_polines.size() == 0) break; @@ -299,7 +302,9 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime } else { auto it = lower_polygons_series->end(); it--; - Polylines inside_polines = intersection_pl({ polygon }, it->second); + Polygons lower_polygons_series_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(it->second, bbox); + + Polylines inside_polines = intersection_pl({polygon}, lower_polygons_series_clipped); extrusion_paths_append( paths, std::move(inside_polines), @@ -310,7 +315,7 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime extrusion_width, (float)perimeter_generator.layer_height); - remain_polines = diff_pl({ polygon }, it->second); + remain_polines = diff_pl({polygon}, lower_polygons_series_clipped); } // get 100% overhang paths by checking what parts of this loop fall From ede8a2dc307a0969e84f7b086fe46d93d9d15490 Mon Sep 17 00:00:00 2001 From: tao wang Date: Thu, 2 Mar 2023 12:17:09 +0800 Subject: [PATCH 020/339] ENH:disconnect lan mode printer when switing other printers Change-Id: Ibd2d80e248b8a25a103cec75fdc9cd11b84e8b48 --- src/slic3r/GUI/DeviceManager.cpp | 4 ++-- src/slic3r/GUI/DeviceManager.hpp | 2 +- src/slic3r/GUI/SelectMachine.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 926242061c..25dbfceb9a 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -3956,7 +3956,7 @@ void DeviceManager::clean_user_info() userMachineList.clear(); } -bool DeviceManager::set_selected_machine(std::string dev_id) +bool DeviceManager::set_selected_machine(std::string dev_id, bool need_disconnect) { BOOST_LOG_TRIVIAL(info) << "set_selected_machine=" << dev_id; auto my_machine_list = get_my_machine_list(); @@ -3966,7 +3966,7 @@ bool DeviceManager::set_selected_machine(std::string dev_id) auto last_selected = my_machine_list.find(selected_machine); if (last_selected != my_machine_list.end()) { if (last_selected->second->connection_type() == "lan") { - if (last_selected->second->is_connecting()) + if (last_selected->second->is_connecting() && !need_disconnect) return false; m_agent->disconnect_printer(); } diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 13c066f945..5464309aaf 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -816,7 +816,7 @@ public: void erase_user_machine(std::string dev_id); void clean_user_info(); - bool set_selected_machine(std::string dev_id); + bool set_selected_machine(std::string dev_id, bool need_disconnect = false); MachineObject* get_selected_machine(); /* return machine has access code and user machine if login*/ diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 53d0ec40fd..11c5c2f522 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -2575,7 +2575,7 @@ void SelectMachineDialog::on_selection_changed(wxCommandEvent &event) if (obj && !obj->get_lan_mode_connection_state()) { obj->command_get_version(); obj->command_request_push_all(); - dev->set_selected_machine(m_printer_last_select); + dev->set_selected_machine(m_printer_last_select, true); // Has changed machine unrecoverably GUI::wxGetApp().sidebar().load_ams_list(obj->dev_id, obj->amsList); update_select_layout(obj); From 1beee1eebf31fc7652dc02c4d91ef1b9522d3a2b Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Mon, 6 Mar 2023 18:39:23 +0800 Subject: [PATCH 021/339] FIX: .gcode file shall disable preview menu (STUDIO-2320) https://jira.bambooolab.com/browse/STUDIO-2320 Change-Id: I54cd49a49a8b08916872eae75534ef4c1d915cb5 --- src/slic3r/GUI/GCodeViewer.cpp | 8 ++++++++ src/slic3r/GUI/IMSlider.cpp | 3 +++ src/slic3r/GUI/IMSlider.hpp | 4 +++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index b686f2b8a2..96b7fcb754 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -1086,6 +1086,14 @@ void GCodeViewer::load(const GCodeProcessorResult& gcode_result, const Print& pr } m_fold = false; + + bool only_gcode_3mf = false; + PartPlate* current_plate = wxGetApp().plater()->get_partplate_list().get_curr_plate(); + bool current_has_print_instances = current_plate->has_printable_instances(); + if (current_plate->is_slice_result_valid() && wxGetApp().model().objects.empty() && !current_has_print_instances) + only_gcode_3mf = true; + + m_layers_slider->set_menu_enable(!(only_gcode || only_gcode_3mf)); m_layers_slider->set_as_dirty(); m_moves_slider->set_as_dirty(); diff --git a/src/slic3r/GUI/IMSlider.cpp b/src/slic3r/GUI/IMSlider.cpp index 87556b75c0..1c4ec7a17e 100644 --- a/src/slic3r/GUI/IMSlider.cpp +++ b/src/slic3r/GUI/IMSlider.cpp @@ -1125,6 +1125,9 @@ void IMSlider::render_go_to_layer_dialog() void IMSlider::render_menu() { + if (!m_menu_enable) + return; + ImGuiWrapper::push_menu_style(m_scale); int extruder_num = m_extruder_colors.size(); diff --git a/src/slic3r/GUI/IMSlider.hpp b/src/slic3r/GUI/IMSlider.hpp index 7d1e10c6c1..b3a021598a 100644 --- a/src/slic3r/GUI/IMSlider.hpp +++ b/src/slic3r/GUI/IMSlider.hpp @@ -129,6 +129,7 @@ public: float m_scale = 1.0; void set_scale(float scale = 1.0); void on_change_color_mode(bool is_dark); + void set_menu_enable(bool enable = true) { m_menu_enable = enable; } protected: void add_custom_gcode(std::string custom_gcode); @@ -179,7 +180,8 @@ private: bool m_is_right_down = false; bool m_is_one_layer = false; bool m_is_focused = false; - bool m_show_menu = false; + bool m_show_menu = false; + bool m_menu_enable = true; bool m_show_custom_gcode_window = false; bool m_show_go_to_layer_dialog = false; bool m_force_mode_apply = true; From a8d98d87aeacc458ef994a8e1c4fb5551a7aca3e Mon Sep 17 00:00:00 2001 From: gerrit Date: Mon, 6 Mar 2023 20:18:30 +0800 Subject: [PATCH 022/339] ci: update build version to 01.05.00.60 Change-Id: I3887ba41bce97454001005ace28951cbf81ec91a --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index 7783f6103c..6376bb895b 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.05.00.59") +set(SLIC3R_VERSION "01.05.00.60") From dce7751750262daab4cc831352d56903d16c4d82 Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Mon, 6 Mar 2023 20:08:31 +0800 Subject: [PATCH 023/339] ENH: param: remove redundant values in fdm_common Change-Id: Ie23377db59196edc1857071b91889e2165e63127 (cherry picked from commit 84dc9d988decae3164c084a6b579522276cb4010) --- resources/profiles/BBL/filament/fdm_filament_common.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/resources/profiles/BBL/filament/fdm_filament_common.json b/resources/profiles/BBL/filament/fdm_filament_common.json index 361fd9a9a9..58998e42e0 100644 --- a/resources/profiles/BBL/filament/fdm_filament_common.json +++ b/resources/profiles/BBL/filament/fdm_filament_common.json @@ -114,9 +114,6 @@ "filament_wipe_distance": [ "nil" ], - "bed_type": [ - "Cool Plate" - ], "nozzle_temperature_initial_layer": [ "200" ], From 017707e5753534108e1cd42c48de9432f969bf7d Mon Sep 17 00:00:00 2001 From: Arthur Date: Mon, 6 Mar 2023 18:23:15 +0800 Subject: [PATCH 024/339] FIX: sharp tail detection may fail 1. In small overhang detection, some sharp tail cases are missed because the max_layer was not compared. 2. In normal support, previously the lower layer's expolys were not right, should only keep the ones that won't vanish when extruding. Jira: STUDIO-1977, STUDIO-2200 Change-Id: Ia09ff1ab4870b7e3c199a827932536867644c76c (cherry picked from commit e3ba3a3114821e951d6eb00b4c95e6e63ffe00d4) --- src/libslic3r/SVG.cpp | 5 +++-- src/libslic3r/SupportMaterial.cpp | 14 ++++++++++++-- src/libslic3r/TreeSupport.cpp | 20 ++++++++++++-------- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/libslic3r/SVG.cpp b/src/libslic3r/SVG.cpp index 4ad31bb332..51c7c7ff3f 100644 --- a/src/libslic3r/SVG.cpp +++ b/src/libslic3r/SVG.cpp @@ -279,13 +279,14 @@ std::string SVG::get_path_d(const ClipperLib::Path &path, double scale, bool clo return d.str(); } +// font_size: font-size={font_size*10}px void SVG::draw_text(const Point &pt, const char *text, const char *color, int font_size) { fprintf(this->f, - "%s", + "%s", to_svg_x(pt(0)-origin(0)), to_svg_y(pt(1)-origin(1)), - color, text); + font_size*10, color, text); } void SVG::draw_legend(const Point &pt, const char *text, const char *color) diff --git a/src/libslic3r/SupportMaterial.cpp b/src/libslic3r/SupportMaterial.cpp index dc86831d64..0e7a85ad3b 100644 --- a/src/libslic3r/SupportMaterial.cpp +++ b/src/libslic3r/SupportMaterial.cpp @@ -1535,7 +1535,17 @@ static inline Polygons detect_overhangs( // Generate overhang / contact_polygons for non-raft layers. const Layer &lower_layer = *layer.lower_layer; const bool has_enforcer = !annotations.enforcers_layers.empty() && !annotations.enforcers_layers[layer_id].empty(); - const ExPolygons& lower_layer_expolys = lower_layer.lslices; + // Can't directly use lower_layer.lslices, or we'll miss some very sharp tails. + // Filter out areas whose diameter that is smaller than extrusion_width. Do not use offset2() for this purpose! + // FIXME if there are multiple regions with different extrusion width, the following code may not be right. + float fw = float(layer.regions().front()->flow(frExternalPerimeter).scaled_width()); + ExPolygons lower_layer_expolys; + for (const ExPolygon& expoly : lower_layer.lslices) { + if (!offset_ex(expoly, -fw / 2).empty()) { + lower_layer_expolys.emplace_back(expoly); + } + } + const ExPolygons& lower_layer_sharptails = lower_layer.sharp_tails; auto& lower_layer_sharptails_height = lower_layer.sharp_tails_height; @@ -2265,7 +2275,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_ // 3. check whether the small overhang is sharp tail bool is_sharp_tail = false; - for (size_t layer_id = cluster.min_layer; layer_id < cluster.max_layer; layer_id++) { + for (size_t layer_id = cluster.min_layer; layer_id <= cluster.max_layer; layer_id++) { const Layer& layer = *object.layers()[layer_id]; if (!intersection_ex(layer.sharp_tails, cluster.merged_overhangs_dilated).empty()) { is_sharp_tail = true; diff --git a/src/libslic3r/TreeSupport.cpp b/src/libslic3r/TreeSupport.cpp index d3050db3fa..e1606a4b75 100644 --- a/src/libslic3r/TreeSupport.cpp +++ b/src/libslic3r/TreeSupport.cpp @@ -237,11 +237,15 @@ static void draw_contours_and_nodes_to_svg svg.draw_outline(outlines_below, colors[2]); // draw legend - svg.draw_text(bbox.min + Point(scale_(0), scale_(0)), ("nPoints: "+std::to_string(layer_nodes.size())+"->").c_str(), "green", 4); - svg.draw_text(bbox.min + Point(scale_(15), scale_(0)), std::to_string(lower_layer_nodes.size()).c_str(), "black", 4); - svg.draw_text(bbox.min + Point(scale_(0), scale_(1)), legends[0].c_str(), colors[0].c_str(), 4); - svg.draw_text(bbox.min + Point(scale_(0), scale_(2)), legends[1].c_str(), colors[1].c_str(), 4); - svg.draw_text(bbox.min + Point(scale_(0), scale_(3)), legends[2].c_str(), colors[2].c_str(), 4); + if (!lower_layer_nodes.empty()) { + svg.draw_text(bbox.min + Point(scale_(0), scale_(0)), format("nPoints: %1%->%2%",layer_nodes.size(), lower_layer_nodes.size()).c_str(), "green", 2); + } + else { + svg.draw_text(bbox.min + Point(scale_(0), scale_(0)), ("nPoints: " + std::to_string(layer_nodes.size())).c_str(), "green", 2); + } + svg.draw_text(bbox.min + Point(scale_(0), scale_(2)), legends[0].c_str(), colors[0].c_str(), 2); + svg.draw_text(bbox.min + Point(scale_(0), scale_(4)), legends[1].c_str(), colors[1].c_str(), 2); + svg.draw_text(bbox.min + Point(scale_(0), scale_(6)), legends[2].c_str(), colors[2].c_str(), 2); // draw layer nodes svg.draw(layer_pts, "green", coord_t(scale_(0.1))); @@ -874,13 +878,13 @@ void TreeSupport::detect_overhangs() coordf_t lower_layer_offset = layer_nr < enforce_support_layers ? -0.15 * extrusion_width : (float)lower_layer->height / tan(threshold_rad); coordf_t support_offset_scaled = scale_(lower_layer_offset); // Filter out areas whose diameter that is smaller than extrusion_width. Do not use offset2() for this purpose! - ExPolygons lower_polys;// = offset2_ex(lower_layer->lslices, -extrusion_width_scaled / 2, extrusion_width_scaled / 2); + ExPolygons lower_polys; for (const ExPolygon& expoly : lower_layer->lslices) { if (!offset_ex(expoly, -extrusion_width_scaled / 2).empty()) { lower_polys.emplace_back(expoly); } } - ExPolygons curr_polys;// = offset2_ex(layer->lslices, -extrusion_width_scaled / 2, extrusion_width_scaled / 2); + ExPolygons curr_polys; for (const ExPolygon& expoly : layer->lslices) { if (!offset_ex(expoly, -extrusion_width_scaled / 2).empty()) { curr_polys.emplace_back(expoly); @@ -1127,7 +1131,7 @@ void TreeSupport::detect_overhangs() // 3. check whether the small overhang is sharp tail bool is_sharp_tail = false; - for (size_t layer_id = cluster.min_layer; layer_id < cluster.max_layer; layer_id++) { + for (size_t layer_id = cluster.min_layer; layer_id <= cluster.max_layer; layer_id++) { Layer* layer = m_object->get_layer(layer_id); if (!intersection_ex(layer->sharp_tails, cluster.merged_poly).empty()) { is_sharp_tail = true; From fc25754c2c62442b981e8bad8fe2058ceadda5b7 Mon Sep 17 00:00:00 2001 From: "yifan.wu" Date: Mon, 27 Feb 2023 21:39:44 +0800 Subject: [PATCH 025/339] ENH: support smooth timelapse for C11 Signed-off-by: yifan.wu Change-Id: Id9da6654fe26c0bda6a9a7dae1e5601e2d944a57 --- src/slic3r/GUI/ConfigManipulation.cpp | 5 ----- src/slic3r/GUI/UnsavedChangesDialog.cpp | 20 -------------------- 2 files changed, 25 deletions(-) diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 2fd2aac8ad..d03189ba64 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -664,11 +664,6 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co for (auto el : { "fuzzy_skin_thickness", "fuzzy_skin_point_distance"}) toggle_line(el, has_fuzzy_skin); - // C11 printer is not support smooth timelapse - PresetBundle *preset_bundle = wxGetApp().preset_bundle; - std::string str_preset_type = preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle); - toggle_field("timelapse_type", str_preset_type != "C11"); - bool have_arachne = config->opt_enum("wall_generator") == PerimeterGeneratorType::Arachne; for (auto el : { "wall_transition_length", "wall_transition_filter_deviation", "wall_transition_angle", "min_feature_size", "min_bead_width", "wall_distribution_count" }) diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp index 0f385c5bd1..82c8009a7d 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.cpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp @@ -1663,26 +1663,6 @@ void UnsavedChangesDialog::on_sys_color_changed() bool UnsavedChangesDialog::check_option_valid() { - auto itor = std::find_if(m_presetitems.begin(), m_presetitems.end(), [](const PresetItem &item) { - return item.opt_key == "timelapse_type"; - }); - - if (itor != m_presetitems.end()) { - PresetBundle *preset_bundle = wxGetApp().preset_bundle; - Preset * new_preset = preset_bundle->printers.find_preset(m_new_selected_preset_name); - if (new_preset == nullptr) - return false; - - std::string str_print_type = new_preset->get_current_printer_type(preset_bundle); - if (str_print_type == "C11" && itor->new_value.ToStdString() == "Smooth") { - MessageDialog dlg(wxGetApp().plater(), _L("The P1P printer does not support smooth timelapse, use traditional timelapse instead."), - _L("Warning"), wxICON_WARNING | wxOK); - dlg.ShowModal(); - m_presetitems.erase(itor); - return false; - } - } - return true; } From 365eacc7cfb9ca627dc3b8c67022cffc0d4292b9 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Mon, 6 Mar 2023 10:15:39 +0800 Subject: [PATCH 026/339] ENH: add translation for choose color dialog Change-Id: Ic59286939fcf5a9905950c249ee3e9b03a55398e Signed-off-by: Stone Li --- src/slic3r/GUI/PresetComboBoxes.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp index 14fd600a17..83e033d502 100644 --- a/src/slic3r/GUI/PresetComboBoxes.cpp +++ b/src/slic3r/GUI/PresetComboBoxes.cpp @@ -691,7 +691,7 @@ PlaterPresetComboBox::PlaterPresetComboBox(wxWindow *parent, Preset::Type preset m_clrData.SetChooseAlpha(false); wxColourDialog dialog(this, &m_clrData); - dialog.SetTitle("Please choose the filament colour"); + dialog.SetTitle(_L("Please choose the filament colour")); if ( dialog.ShowModal() == wxID_OK ) { m_clrData = dialog.GetColourData(); From 0e3364a41512780ea0319f261f2768095943b441 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Tue, 7 Mar 2023 13:27:43 +0800 Subject: [PATCH 027/339] FIX: [] not unload user presets on app closing Change-Id: I517366d0cddab9c073db7bf70fec8f59d7d39e3c --- src/slic3r/GUI/GUI_App.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index bc3fd433f2..6d89c7839d 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -4308,7 +4308,8 @@ void GUI_App::start_sync_user_preset(bool load_immediately, bool with_progress_d void GUI_App::stop_sync_user_preset() { - remove_user_presets(); + if (!wxGetApp().m_is_closing) + remove_user_presets(); enable_user_preset_folder(false); if (!enable_sync) From a401c0fa2ee31ec55a1b46c23e2160047cf82e11 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Mon, 6 Mar 2023 16:02:57 +0800 Subject: [PATCH 028/339] FIX: [STUDIO-2340] [STUDIO-2297] handle linux gstreamer error Change-Id: Iadc6dcb9d7a9f2c5d1ce9cf979bbbfbd0f805d19 --- src/slic3r/GUI/MediaPlayCtrl.cpp | 7 ++----- src/slic3r/GUI/Printer/gstbambusrc.c | 10 +++++++--- src/slic3r/GUI/wxMediaCtrl2.cpp | 27 ++++++++++++++++++++++++++- src/slic3r/GUI/wxMediaCtrl2.h | 3 ++- 4 files changed, 37 insertions(+), 10 deletions(-) diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp index 2e88131df3..2a687be53f 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.cpp +++ b/src/slic3r/GUI/MediaPlayCtrl.cpp @@ -27,9 +27,6 @@ MediaPlayCtrl::MediaPlayCtrl(wxWindow *parent, wxMediaCtrl2 *media_ctrl, const w { SetBackgroundColour(*wxWHITE); m_media_ctrl->Bind(wxEVT_MEDIA_STATECHANGED, &MediaPlayCtrl::onStateChanged, this); -#if wxUSE_GSTREAMER_PLAYER - m_media_ctrl->Bind(wxEVT_MEDIA_LOADED, &MediaPlayCtrl::onStateChanged, this); -#endif m_button_play = new Button(this, "", "media_play", wxBORDER_NONE); m_button_play->SetCanFocus(false); @@ -365,11 +362,11 @@ void MediaPlayCtrl::onStateChanged(wxMediaEvent &event) Stop(); return; } - if (last_state == MEDIASTATE_LOADING && (state == wxMEDIASTATE_STOPPED || state == wxMEDIASTATE_PAUSED || event.GetEventType() == wxEVT_MEDIA_LOADED)) { + if (last_state == MEDIASTATE_LOADING && (state == wxMEDIASTATE_STOPPED || state == wxMEDIASTATE_PAUSED)) { wxSize size = m_media_ctrl->GetVideoSize(); BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl::onStateChanged: size: " << size.x << "x" << size.y; m_failed_code = m_media_ctrl->GetLastError(); - if (size.GetWidth() > 1000 || (event.GetEventType() == wxEVT_MEDIA_LOADED)) { + if (size.GetWidth() > 1000) { m_last_state = state; SetStatus(_L("Playing..."), false); m_failed_retry = 0; diff --git a/src/slic3r/GUI/Printer/gstbambusrc.c b/src/slic3r/GUI/Printer/gstbambusrc.c index e7339ec177..14f2476f22 100644 --- a/src/slic3r/GUI/Printer/gstbambusrc.c +++ b/src/slic3r/GUI/Printer/gstbambusrc.c @@ -259,6 +259,8 @@ gst_bambusrc_get_property (GObject * object, guint prop_id, } } +int gst_bambu_last_error = 0; + static GstFlowReturn gst_bambusrc_create (GstPushSrc * psrc, GstBuffer ** outbuf) { @@ -286,7 +288,8 @@ gst_bambusrc_create (GstPushSrc * psrc, GstBuffer ** outbuf) } if (rv != Bambu_success) { - return GST_FLOW_ERROR; + gst_bambu_last_error = rv; + return GST_FLOW_ERROR; } #if GLIB_CHECK_VERSION(2,68,0) @@ -316,7 +319,7 @@ gst_bambusrc_create (GstPushSrc * psrc, GstBuffer ** outbuf) //if (GST_CLOCK_TIME_NONE == src->sttime) // src->sttime GST_DEBUG_OBJECT(src, - "sttime init to %llu.", + "sttime init to %lu.", src->sttime); } //GST_BUFFER_DTS(*outbuf) = gst_element_get_current_clock_time((GstElement *)psrc) - src->sttime; @@ -325,7 +328,7 @@ gst_bambusrc_create (GstPushSrc * psrc, GstBuffer ** outbuf) GST_BUFFER_DURATION(*outbuf) = GST_CLOCK_TIME_NONE; } GST_DEBUG_OBJECT(src, - "sttime:%llu, DTS:%llu, PTS: %llu~", + "sttime:%lu, DTS:%lu, PTS: %lu~", src->sttime, GST_BUFFER_DTS(*outbuf), GST_BUFFER_PTS(*outbuf)); return GST_FLOW_OK; @@ -377,6 +380,7 @@ gst_bambusrc_start (GstBaseSrc * bsrc) BAMBULIB(Bambu_Close)(src->tnl); BAMBULIB(Bambu_Destroy)(src->tnl); src->tnl = NULL; + gst_bambu_last_error = rv; return FALSE; } diff --git a/src/slic3r/GUI/wxMediaCtrl2.cpp b/src/slic3r/GUI/wxMediaCtrl2.cpp index 446e819df4..6ef78eec61 100644 --- a/src/slic3r/GUI/wxMediaCtrl2.cpp +++ b/src/slic3r/GUI/wxMediaCtrl2.cpp @@ -31,6 +31,9 @@ wxMediaCtrl2::wxMediaCtrl2(wxWindow *parent) #ifdef __LINUX__ /* Register only after we have created the wxMediaCtrl, since only then are we guaranteed to have fired up Gstreamer's plugin registry. */ gstbambusrc_register(); + Bind(wxEVT_MEDIA_LOADED, [this](auto & e) { + m_loaded = true; + }); #endif } @@ -138,22 +141,44 @@ void wxMediaCtrl2::Load(wxURI url) wxPostEvent(this, event); return; } + wxLog::EnableLogging(false); #endif m_error = 0; + m_loaded = false; wxMediaCtrl::Load(url); + +#ifdef __WXGTK3__ + wxMediaEvent event(wxEVT_MEDIA_STATECHANGED); + event.SetId(GetId()); + event.SetEventObject(this); + wxPostEvent(this, event); +#endif } void wxMediaCtrl2::Play() { wxMediaCtrl::Play(); } void wxMediaCtrl2::Stop() { wxMediaCtrl::Stop(); } +#ifdef __LINUX__ +extern int gst_bambu_last_error; +#endif + +int wxMediaCtrl2::GetLastError() const +{ +#ifdef __LINUX__ + return gst_bambu_last_error; +#else + return m_error; +#endif +} + wxSize wxMediaCtrl2::GetVideoSize() const { #ifdef __LINUX__ // Gstreamer doesn't give us a VideoSize until we're playing, which // confuses the MediaPlayCtrl into claiming that it is stuck // "Loading...". Fake it out for now. - return wxSize(1280, 720); + return m_loaded ? wxSize(1280, 720) : wxSize{}; #else return m_imp ? m_imp->GetVideoSize() : wxSize(0, 0); #endif diff --git a/src/slic3r/GUI/wxMediaCtrl2.h b/src/slic3r/GUI/wxMediaCtrl2.h index e894793afb..3f1467a13f 100644 --- a/src/slic3r/GUI/wxMediaCtrl2.h +++ b/src/slic3r/GUI/wxMediaCtrl2.h @@ -65,7 +65,7 @@ public: void SetIdleImage(wxString const & image); - int GetLastError() const { return m_error; } + int GetLastError() const; wxSize GetVideoSize() const; @@ -83,6 +83,7 @@ protected: private: wxString m_idle_image; int m_error = 0; + bool m_loaded = false; }; #endif From 7eb3aa810455326bf473674705a18b04017943c3 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Mon, 6 Mar 2023 16:02:57 +0800 Subject: [PATCH 029/339] FIX: privacy dialog dark mode (STUDIO-2345) Change-Id: Icd44d4b83bd9785869f68c04e6d4e38524e4b46a --- resources/tooltip/privacyupdate.html | 8 +++++++- src/slic3r/GUI/PrivacyUpdateDialog.cpp | 4 ++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/resources/tooltip/privacyupdate.html b/resources/tooltip/privacyupdate.html index 3e7c22c174..c67ccf83f0 100644 --- a/resources/tooltip/privacyupdate.html +++ b/resources/tooltip/privacyupdate.html @@ -6,7 +6,7 @@ - +
diff --git a/src/slic3r/GUI/PrivacyUpdateDialog.cpp b/src/slic3r/GUI/PrivacyUpdateDialog.cpp index c2d19a9377..7cd85cfa4a 100644 --- a/src/slic3r/GUI/PrivacyUpdateDialog.cpp +++ b/src/slic3r/GUI/PrivacyUpdateDialog.cpp @@ -171,6 +171,10 @@ bool PrivacyUpdateDialog::ShowReleaseNote(std::string content) void PrivacyUpdateDialog::RunScript(std::string script) { WebView::RunScript(m_vebview_release_note, script); + std::string switch_dark_mode_script = "SwitchDarkMode("; + switch_dark_mode_script += wxGetApp().app_config->get("dark_color_mode") == "1" ? "true" : "false"; + switch_dark_mode_script += ");"; + WebView::RunScript(m_vebview_release_note, switch_dark_mode_script); script.clear(); } From 311d9c3481b3decae57da2538e751bfefc3e550f Mon Sep 17 00:00:00 2001 From: tao wang Date: Tue, 7 Mar 2023 17:14:07 +0800 Subject: [PATCH 030/339] NEW:the model mall is opened using the default browser Change-Id: I9f855288486196b2a7c72c51bee8cfcf408ceab8 --- src/slic3r/GUI/GUI_App.cpp | 131 +++++++++++++++++++++++------- src/slic3r/GUI/GUI_App.hpp | 3 +- src/slic3r/GUI/Project.cpp | 41 +++------- src/slic3r/Utils/NetworkAgent.cpp | 13 +++ src/slic3r/Utils/NetworkAgent.hpp | 3 + 5 files changed, 128 insertions(+), 63 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 6d89c7839d..0565544772 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1296,6 +1296,32 @@ std::string GUI_App::get_http_url(std::string country_code) return url; } +std::string GUI_App::get_model_http_url(std::string country_code) +{ + std::string url; + if (country_code == "US") { + url = "https://makerhub.bambu-lab.com/"; + } + else if (country_code == "CN") { + url = "https://makerhub.bambu-lab.com/zh/"; + } + else if (country_code == "ENV_CN_DEV") { + url = "https://makerhub-dev.bambu-lab.com/"; + } + else if (country_code == "ENV_CN_QA") { + url = "https://makerhub-qa.bambu-lab.com/"; + } + else if (country_code == "ENV_CN_PRE") { + url = "https://makerhub-pre.bambu-lab.com/"; + } + else { + url = "https://makerhub.bambu-lab.com/"; + } + + return url; +} + + std::string GUI_App::get_plugin_url(std::string name, std::string country_code) { std::string url = get_http_url(country_code); @@ -5409,45 +5435,94 @@ void GUI_App::load_url(wxString url) void GUI_App::open_mall_page_dialog() { - std::string url; + std::string host_url; + std::string model_url; + std::string link_url; + + int result = -1; + + //model api url + host_url = get_model_http_url(app_config->get_country_code()); + + //model url + + wxString language_code = this->current_language_code().BeforeFirst('_'); + model_url += (language_code.ToStdString() + "/models"); if (getAgent() && mainframe) { - getAgent()->get_model_mall_home_url(&url); - if (!m_mall_home_dialog) { - m_mall_home_dialog = new ModelMallDialog(); - m_mall_home_dialog->go_to_mall(url); - } - else { - if (m_mall_home_dialog->IsIconized()) - m_mall_home_dialog->Iconize(false); + //login already + if (getAgent()->is_user_login()) { + std::string ticket; + result = getAgent()->request_bind_ticket(&ticket); - //m_mall_home_dialog->go_to_mall(url); - } - m_mall_home_dialog->Raise(); - m_mall_home_dialog->Show(); + if(result == 0){ + link_url = host_url + "api/sign-in/ticket?to=" + host_url + url_encode(model_url) + "&ticket=" + ticket; + } + } } + + if (result < 0) { + link_url = host_url + model_url; + } + + wxLaunchDefaultBrowser(link_url); } void GUI_App::open_publish_page_dialog() { - std::string url; + std::string host_url; + std::string model_url; + std::string link_url; + + int result = -1; + + //model api url + host_url = get_model_http_url(app_config->get_country_code()); + + //publish url + wxString language_code = this->current_language_code().BeforeFirst('_'); + model_url += (language_code.ToStdString() + "/my/models/publish"); + if (getAgent() && mainframe) { - getAgent()->get_model_publish_url(&url); - if (!m_mall_publish_dialog) { - m_mall_publish_dialog = new ModelMallDialog(); - m_mall_publish_dialog->go_to_mall(url); - } - else { - if (m_mall_publish_dialog->IsIconized()) - m_mall_publish_dialog->Iconize(false); + //login already + if (getAgent()->is_user_login()) { + std::string ticket; + result = getAgent()->request_bind_ticket(&ticket); - //m_mall_publish_dialog->go_to_publish(url); + if (result == 0) { + link_url = host_url + "api/sign-in/ticket?to=" + host_url + url_encode(model_url) + "&ticket=" + ticket; + } } - m_mall_publish_dialog->Raise(); - m_mall_publish_dialog->Show(); } + + if (result < 0) { + link_url = host_url + model_url; + } + + wxLaunchDefaultBrowser(link_url); +} + +std::string GUI_App::url_encode(const std::string& value) { + std::ostringstream escaped; + escaped.fill('0'); + escaped << std::hex; + for (std::string::const_iterator i = value.begin(), n = value.end(); i != n; ++i) { + std::string::value_type c = (*i); + + // Keep alphanumeric and other accepted characters intact + if (isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') { + escaped << c; + continue; + } + + // Any other characters are percent-encoded + escaped << std::uppercase; + escaped << '%' << std::setw(2) << int((unsigned char)c); + escaped << std::nouppercase; + } + return escaped.str(); } void GUI_App::remove_mall_system_dialog() @@ -5456,12 +5531,6 @@ void GUI_App::remove_mall_system_dialog() m_mall_publish_dialog->Destroy(); delete m_mall_publish_dialog; } - - - if (m_mall_home_dialog != nullptr) { - m_mall_home_dialog->Destroy(); - delete m_mall_home_dialog; - } } void GUI_App::run_script(wxString js) diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 611f2bfbd9..9ada96711a 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -509,7 +509,6 @@ public: std::string m_mall_model_download_url; std::string m_mall_model_download_name; - ModelMallDialog* m_mall_home_dialog{ nullptr }; ModelMallDialog* m_mall_publish_dialog{ nullptr }; void set_download_model_url(std::string url) {m_mall_model_download_url = url;} @@ -519,6 +518,7 @@ public: void load_url(wxString url); void open_mall_page_dialog(); + std::string url_encode(const std::string& value); void open_publish_page_dialog(); void remove_mall_system_dialog(); void run_script(wxString js); @@ -586,6 +586,7 @@ public: int download_plugin(std::string name, std::string package_name, InstallProgressFn pro_fn = nullptr, WasCancelledFn cancel_fn = nullptr); int install_plugin(std::string name, std::string package_name, InstallProgressFn pro_fn = nullptr, WasCancelledFn cancel_fn = nullptr); std::string get_http_url(std::string country_code); + std::string get_model_http_url(std::string country_code); bool is_compatibility_version(); bool check_networking_version(); void cancel_networking_install(); diff --git a/src/slic3r/GUI/Project.cpp b/src/slic3r/GUI/Project.cpp index 70ea98f782..18fb956c8b 100644 --- a/src/slic3r/GUI/Project.cpp +++ b/src/slic3r/GUI/Project.cpp @@ -113,10 +113,10 @@ void ProjectPanel::on_reload(wxCommandEvent& evt) json j; j["model"]["license"] = license; - j["model"]["name"] = url_encode(model_name); - j["model"]["author"] = url_encode(model_author);; - j["model"]["cover_img"] = url_encode(cover_file); - j["model"]["description"] = url_encode(description); + j["model"]["name"] = wxGetApp().url_encode(model_name); + j["model"]["author"] = wxGetApp().url_encode(model_author);; + j["model"]["cover_img"] = wxGetApp().url_encode(cover_file); + j["model"]["description"] = wxGetApp().url_encode(description); j["model"]["preview_img"] = files["Model Pictures"]; j["model"]["upload_type"] = update_type; @@ -124,10 +124,10 @@ void ProjectPanel::on_reload(wxCommandEvent& evt) j["file"]["Assembly"] = files["Assembly Guide"]; j["file"]["Other"] = files["Others"]; - j["profile"]["name"] = url_encode(p_name); - j["profile"]["author"] = url_encode(p_author); - j["profile"]["description"] = url_encode(p_description); - j["profile"]["cover_img"] = url_encode(p_cover_file); + j["profile"]["name"] = wxGetApp().url_encode(p_name); + j["profile"]["author"] = wxGetApp().url_encode(p_author); + j["profile"]["description"] = wxGetApp().url_encode(p_description); + j["profile"]["cover_img"] = wxGetApp().url_encode(p_cover_file); j["profile"]["preview_img"] = files["Profile Pictures"]; json m_Res = json::object(); @@ -287,7 +287,7 @@ std::map> ProjectPanel::Reload(wxString aux_path) wxStat(file_name, &strucStat); wxFileOffset filelen = strucStat.st_size; - pfile_obj["filename"] = url_encode(file_path_obj.filename().string().c_str()); + pfile_obj["filename"] = wxGetApp().url_encode(file_path_obj.filename().string().c_str()); pfile_obj["size"] = formatBytes((unsigned long)filelen); //image @@ -303,7 +303,7 @@ std::map> ProjectPanel::Reload(wxString aux_path) break; } else { - pfile_obj["filepath"] = url_encode(file_path); + pfile_obj["filepath"] = wxGetApp().url_encode(file_path); m_paths_list[folder.ToStdString()].push_back(pfile_obj); break; } @@ -382,27 +382,6 @@ std::string ProjectPanel::url_decode(string text) { return escaped.str(); } -std::string ProjectPanel::url_encode(const std::string& value) { - std::ostringstream escaped; - escaped.fill('0'); - escaped << std::hex; - for (std::string::const_iterator i = value.begin(), n = value.end(); i != n; ++i) { - std::string::value_type c = (*i); - - // Keep alphanumeric and other accepted characters intact - if (isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') { - escaped << c; - continue; - } - - // Any other characters are percent-encoded - escaped << std::uppercase; - escaped << '%' << std::setw(2) << int((unsigned char)c); - escaped << std::nouppercase; - } - return escaped.str(); -} - bool ProjectPanel::Show(bool show) { if (show) update_model_data(); diff --git a/src/slic3r/Utils/NetworkAgent.cpp b/src/slic3r/Utils/NetworkAgent.cpp index cd63fb4156..7501bc091a 100644 --- a/src/slic3r/Utils/NetworkAgent.cpp +++ b/src/slic3r/Utils/NetworkAgent.cpp @@ -87,6 +87,7 @@ func_get_user_print_info NetworkAgent::get_user_print_info_ptr = null func_get_printer_firmware NetworkAgent::get_printer_firmware_ptr = nullptr; func_get_task_plate_index NetworkAgent::get_task_plate_index_ptr = nullptr; func_get_user_info NetworkAgent::get_user_info_ptr = nullptr; +func_request_bind_ticket NetworkAgent::request_bind_ticket_ptr = nullptr; func_get_slice_info NetworkAgent::get_slice_info_ptr = nullptr; func_query_bind_status NetworkAgent::query_bind_status_ptr = nullptr; func_modify_printer_name NetworkAgent::modify_printer_name_ptr = nullptr; @@ -229,6 +230,7 @@ int NetworkAgent::initialize_network_module(bool using_backup) get_printer_firmware_ptr = reinterpret_cast(get_network_function("bambu_network_get_printer_firmware")); get_task_plate_index_ptr = reinterpret_cast(get_network_function("bambu_network_get_task_plate_index")); get_user_info_ptr = reinterpret_cast(get_network_function("bambu_network_get_user_info")); + request_bind_ticket_ptr = reinterpret_cast(get_network_function("bambu_network_request_bind_ticket")); get_slice_info_ptr = reinterpret_cast(get_network_function("bambu_network_get_slice_info")); query_bind_status_ptr = reinterpret_cast(get_network_function("bambu_network_query_bind_status")); modify_printer_name_ptr = reinterpret_cast(get_network_function("bambu_network_modify_printer_name")); @@ -1019,6 +1021,17 @@ int NetworkAgent::get_user_info(int* identifier) return ret; } +int NetworkAgent::request_bind_ticket(std::string* ticket) +{ + int ret = 0; + if (network_agent && request_bind_ticket_ptr) { + ret = request_bind_ticket_ptr(network_agent, ticket); + if (ret) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%") % network_agent % ret; + } + return ret; +} + int NetworkAgent::get_slice_info(std::string project_id, std::string profile_id, int plate_index, std::string* slice_json) { int ret; diff --git a/src/slic3r/Utils/NetworkAgent.hpp b/src/slic3r/Utils/NetworkAgent.hpp index 7d8b593214..2899b2481d 100644 --- a/src/slic3r/Utils/NetworkAgent.hpp +++ b/src/slic3r/Utils/NetworkAgent.hpp @@ -67,6 +67,7 @@ typedef int (*func_get_user_print_info)(void *agent, unsigned int* http_code, st typedef int (*func_get_printer_firmware)(void *agent, std::string dev_id, unsigned* http_code, std::string* http_body); typedef int (*func_get_task_plate_index)(void *agent, std::string task_id, int* plate_index); typedef int (*func_get_user_info)(void *agent, int* identifier); +typedef int (*func_request_bind_ticket)(void *agent, std::string* ticket); typedef int (*func_get_slice_info)(void *agent, std::string project_id, std::string profile_id, int plate_index, std::string* slice_json); typedef int (*func_query_bind_status)(void *agent, std::vector query_list, unsigned int* http_code, std::string* http_body); typedef int (*func_modify_printer_name)(void *agent, std::string dev_id, std::string dev_name); @@ -151,6 +152,7 @@ public: int get_printer_firmware(std::string dev_id, unsigned* http_code, std::string* http_body); int get_task_plate_index(std::string task_id, int* plate_index); int get_user_info(int* identifier); + int request_bind_ticket(std::string* ticket); int get_slice_info(std::string project_id, std::string profile_id, int plate_index, std::string* slice_json); int query_bind_status(std::vector query_list, unsigned int* http_code, std::string* http_body); int modify_printer_name(std::string dev_id, std::string dev_name); @@ -225,6 +227,7 @@ private: static func_get_printer_firmware get_printer_firmware_ptr; static func_get_task_plate_index get_task_plate_index_ptr; static func_get_user_info get_user_info_ptr; + static func_request_bind_ticket request_bind_ticket_ptr; static func_get_slice_info get_slice_info_ptr; static func_query_bind_status query_bind_status_ptr; static func_modify_printer_name modify_printer_name_ptr; From 4adfb71115c3ca74b68539be36a611c44e1ccb1b Mon Sep 17 00:00:00 2001 From: "qing.zhang" Date: Tue, 7 Mar 2023 14:46:59 +0800 Subject: [PATCH 031/339] ENH: add Bambu PETG-CF & change filament id of PLA Silk Signed-off-by: qing.zhang Change-Id: Ib62b479a2a6648a2a4bfa0d3deb11f6f37f754a4 --- resources/profiles/BBL.json | 18 ++++++- .../BBL/filament/Bambu PETG-CF @BBL X1C.json | 16 ++++++ .../BBL/filament/Bambu PETG-CF @base.json | 50 +++++++++++++++++++ .../BBL/filament/Generic PETG-CF @base.json | 4 +- .../BBL/filament/Generic PLA Silk @base.json | 20 ++++++++ .../BBL/filament/Generic PLA Silk.json | 2 +- .../filament/P1P/Bambu PETG-CF @BBL P1P.json | 13 +++++ .../P1P/Generic PETG @BBL P1P 0.2 nozzle.json | 3 ++ .../P1P/Generic PLA Silk @BBL P1P.json | 2 +- 9 files changed, 123 insertions(+), 5 deletions(-) create mode 100644 resources/profiles/BBL/filament/Bambu PETG-CF @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/Bambu PETG-CF @base.json create mode 100644 resources/profiles/BBL/filament/Generic PLA Silk @base.json create mode 100644 resources/profiles/BBL/filament/P1P/Bambu PETG-CF @BBL P1P.json diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index ee6ae98e48..dff263ccb5 100644 --- a/resources/profiles/BBL.json +++ b/resources/profiles/BBL.json @@ -1,7 +1,7 @@ { "name": "Bambulab", "url": "http://www.bambulab.com/Parameters/vendor/BBL.json", - "version": "01.05.00.17", + "version": "01.05.00.18", "force_update": "0", "description": "the initial version of BBL configurations", "machine_model_list": [ @@ -361,6 +361,10 @@ "name": "Generic PLA", "sub_path": "filament/Generic PLA.json" }, + { + "name": "Generic PLA Silk @base", + "sub_path": "filament/Generic PLA Silk @base.json" + }, { "name": "Generic PLA Silk", "sub_path": "filament/Generic PLA Silk.json" @@ -441,6 +445,18 @@ "name": "Generic PETG-CF @BBL P1P", "sub_path": "filament/P1P/Generic PETG-CF @BBL P1P.json" }, + { + "name": "Bambu PETG-CF @base", + "sub_path": "filament/Bambu PETG-CF @base.json" + }, + { + "name": "Bambu PETG-CF @BBL X1C", + "sub_path": "filament/Bambu PETG-CF @BBL X1C.json" + }, + { + "name": "Bambu PETG-CF @BBL P1P", + "sub_path": "filament/P1P/Bambu PETG-CF @BBL P1P.json" + }, { "name": "Generic PVA @0.2 nozzle", "sub_path": "filament/Generic PVA @0.2 nozzle.json" diff --git a/resources/profiles/BBL/filament/Bambu PETG-CF @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PETG-CF @BBL X1C.json new file mode 100644 index 0000000000..7a0a106668 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PETG-CF @BBL X1C.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "setting_id": "GFSG50_01", + "name": "Bambu PETG-CF @BBL X1C", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PETG-CF @base", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle" + ] +} diff --git a/resources/profiles/BBL/filament/Bambu PETG-CF @base.json b/resources/profiles/BBL/filament/Bambu PETG-CF @base.json new file mode 100644 index 0000000000..7bdf4dd0bb --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PETG-CF @base.json @@ -0,0 +1,50 @@ +{ + "type": "filament", + "filament_id": "GFG50", + "name": "Bambu PETG-CF @base", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_pet", + "required_nozzle_HRC": [ + "40" + ], + "filament_vendor": [ + "Bambu Lab" + ], + "filament_type": [ + "PETG-CF" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "255" + ], + "nozzle_temperature": [ + "255" + ], + "filament_cost": [ + "34.99" + ], + "filament_density": [ + "1.04" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "slow_down_layer_time": [ + "6" + ], + "fan_cooling_layer_time": [ + "20" + ] +} diff --git a/resources/profiles/BBL/filament/Generic PETG-CF @base.json b/resources/profiles/BBL/filament/Generic PETG-CF @base.json index c52b122a90..b836ea162a 100644 --- a/resources/profiles/BBL/filament/Generic PETG-CF @base.json +++ b/resources/profiles/BBL/filament/Generic PETG-CF @base.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG50", + "filament_id": "GFG98", "name": "Generic PETG-CF @base", "from": "system", "instantiation": "false", @@ -39,7 +39,7 @@ "0" ], "filament_max_volumetric_speed": [ - "16" + "10" ], "slow_down_layer_time": [ "6" diff --git a/resources/profiles/BBL/filament/Generic PLA Silk @base.json b/resources/profiles/BBL/filament/Generic PLA Silk @base.json new file mode 100644 index 0000000000..cf7e7b080a --- /dev/null +++ b/resources/profiles/BBL/filament/Generic PLA Silk @base.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "filament_id": "GFA05", + "name": "Generic PLA Silk @base", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif};Prevent PLA from jamming" + ] +} diff --git a/resources/profiles/BBL/filament/Generic PLA Silk.json b/resources/profiles/BBL/filament/Generic PLA Silk.json index 16dc0cc49b..b836780578 100644 --- a/resources/profiles/BBL/filament/Generic PLA Silk.json +++ b/resources/profiles/BBL/filament/Generic PLA Silk.json @@ -4,7 +4,7 @@ "name": "Generic PLA Silk", "from": "system", "instantiation": "true", - "inherits": "Generic PLA @base", + "inherits": "Generic PLA Silk @base", "filament_max_volumetric_speed": [ "7.5" ], diff --git a/resources/profiles/BBL/filament/P1P/Bambu PETG-CF @BBL P1P.json b/resources/profiles/BBL/filament/P1P/Bambu PETG-CF @BBL P1P.json new file mode 100644 index 0000000000..bd49859717 --- /dev/null +++ b/resources/profiles/BBL/filament/P1P/Bambu PETG-CF @BBL P1P.json @@ -0,0 +1,13 @@ +{ + "type": "filament", + "setting_id": "GFSG50_11", + "name": "Bambu PETG-CF @BBL P1P", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PETG-CF @base", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ] +} diff --git a/resources/profiles/BBL/filament/P1P/Generic PETG @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/P1P/Generic PETG @BBL P1P 0.2 nozzle.json index a45a05b9bb..d2e0801e06 100644 --- a/resources/profiles/BBL/filament/P1P/Generic PETG @BBL P1P 0.2 nozzle.json +++ b/resources/profiles/BBL/filament/P1P/Generic PETG @BBL P1P 0.2 nozzle.json @@ -17,6 +17,9 @@ "textured_plate_temp_initial_layer" : [ "80" ], + "filament_max_volumetric_speed": [ + "1" + ], "compatible_printers": [ "Bambu Lab P1P 0.2 nozzle" ] diff --git a/resources/profiles/BBL/filament/P1P/Generic PLA Silk @BBL P1P.json b/resources/profiles/BBL/filament/P1P/Generic PLA Silk @BBL P1P.json index a6498fb75c..3654126f28 100644 --- a/resources/profiles/BBL/filament/P1P/Generic PLA Silk @BBL P1P.json +++ b/resources/profiles/BBL/filament/P1P/Generic PLA Silk @BBL P1P.json @@ -4,7 +4,7 @@ "name": "Generic PLA Silk @BBL P1P", "from": "system", "instantiation": "true", - "inherits": "Generic PLA @BBL P1P", + "inherits": "Generic PLA Silk @base", "filament_max_volumetric_speed": [ "7.5" ], From bd75af4a43ba04398823d2f956baf9a01ef02d8c Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Wed, 8 Mar 2023 08:40:33 +0800 Subject: [PATCH 032/339] ENH: Linux: set BBL_INTERNAL_TESTING to 1 for release build Change-Id: I1545636c9e9714b44124ea0ddf18ef39f277a2b8 --- BuildLinux.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BuildLinux.sh b/BuildLinux.sh index 3fb83005a2..1461e63b80 100755 --- a/BuildLinux.sh +++ b/BuildLinux.sh @@ -222,9 +222,9 @@ then fi if [[ -n "$BUILD_DEBUG" ]] then - BUILD_ARGS="${BUILD_ARGS} -DCMAKE_BUILD_TYPE=Debug" + BUILD_ARGS="${BUILD_ARGS} -DCMAKE_BUILD_TYPE=Debug -DBBL_INTERNAL_TESTING=1" else - BUILD_ARGS="${BUILD_ARGS} -DBBL_RELEASE_TO_PUBLIC=1" + BUILD_ARGS="${BUILD_ARGS} -DBBL_RELEASE_TO_PUBLIC=1 -DBBL_INTERNAL_TESTING=0" fi # cmake From 6827b41eb3c0fab179dd3ee7f12fe69303c74831 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Wed, 15 Feb 2023 11:32:18 +0800 Subject: [PATCH 033/339] NEW: add track events for debugging network Change-Id: I671f91b4af00277236ca71014f8d667109756d00 Signed-off-by: Stone Li --- src/slic3r/GUI/BindDialog.cpp | 5 ++ src/slic3r/GUI/DeviceManager.cpp | 1 + src/slic3r/GUI/GUI_App.cpp | 21 ++++++- src/slic3r/GUI/GUI_App.hpp | 1 + src/slic3r/GUI/Jobs/BindJob.cpp | 2 +- src/slic3r/GUI/MainFrame.cpp | 5 ++ src/slic3r/GUI/MediaFilePanel.cpp | 52 ++++++++++++++++- src/slic3r/GUI/MediaPlayCtrl.cpp | 25 ++++++++ src/slic3r/GUI/Printer/PrinterFileSystem.cpp | 4 +- src/slic3r/GUI/SelectMachine.cpp | 5 ++ src/slic3r/GUI/StatusPanel.cpp | 2 +- src/slic3r/Utils/NetworkAgent.cpp | 60 +++++++++++++++++++- src/slic3r/Utils/NetworkAgent.hpp | 16 +++++- 13 files changed, 187 insertions(+), 12 deletions(-) diff --git a/src/slic3r/GUI/BindDialog.cpp b/src/slic3r/GUI/BindDialog.cpp index afdbd319e5..09952d48af 100644 --- a/src/slic3r/GUI/BindDialog.cpp +++ b/src/slic3r/GUI/BindDialog.cpp @@ -262,6 +262,11 @@ namespace GUI { //check dev_id if (m_machine_info->dev_id.empty()) return; + // update ota version + NetworkAgent* agent = wxGetApp().getAgent(); + if (agent) + agent->track_update_property("dev_ota_version", m_machine_info->get_ota_version()); + m_simplebook->SetSelection(0); m_bind_job = std::make_shared(m_status_bar, wxGetApp().plater(), m_machine_info->dev_id, m_machine_info->dev_ip); m_bind_job->set_event_handle(this); diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 25dbfceb9a..24ae96312f 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -3451,6 +3451,7 @@ int MachineObject::parse_json(std::string payload) module_vers.emplace(ver_info.name, ver_info); } parse_version_func(); + bool get_version_result = true; if (j["info"].contains("result")) if (j["info"]["result"].get() == "fail") diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 0565544772..373ee1f91c 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1127,9 +1127,11 @@ void GUI_App::post_init() //BBS: check new version this->check_new_version(); //BBS: check privacy version - if (is_user_login()) + if (is_user_login()) { this->check_privacy_version(0); + this->check_track_enable(); + } }); } @@ -3809,12 +3811,29 @@ void GUI_App::on_user_login_handle(wxCommandEvent &evt) } } +void GUI_App::check_track_enable() +{ + if (app_config && app_config->get("firstguide", "privacyuse") == "true") { + //enable track event + json header_json; + header_json["ver"] = SLIC3R_VERSION; + wxString os_desc = wxGetOsDescription(); + int major = 0, minor = 0, micro = 0; + header_json["os"] = std::string(os_desc.ToUTF8()); + if (m_agent) { + m_agent->track_header(header_json.dump()); + m_agent->track_enable(true); + } + } +} + void GUI_App::on_user_login(wxCommandEvent &evt) { if (!m_agent) { return; } int online_login = evt.GetInt(); // check privacy before handle check_privacy_version(online_login); + check_track_enable(); } bool GUI_App::is_studio_active() diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 9ada96711a..45465aac9c 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -442,6 +442,7 @@ public: void on_check_privacy_update(wxCommandEvent &evt); bool check_privacy_update(); void check_privacy_version(int online_login = 0); + void check_track_enable(); static bool catch_error(std::function cb, const std::string& err); diff --git a/src/slic3r/GUI/Jobs/BindJob.cpp b/src/slic3r/GUI/Jobs/BindJob.cpp index 12bdb1b6f9..19b389e46d 100644 --- a/src/slic3r/GUI/Jobs/BindJob.cpp +++ b/src/slic3r/GUI/Jobs/BindJob.cpp @@ -79,7 +79,7 @@ void BindJob::process() long offset = tz.GetOffset(); std::string timezone = get_timezone_utc_hm(offset); - int result = m_agent->bind(m_dev_ip, timezone, + int result = m_agent->bind(m_dev_ip, m_dev_id, timezone, [this, &curr_percent, &msg](int stage, int code, std::string info) { if (stage == BBL::BindJobStage::LoginStageConnect) { curr_percent = 15; diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 3ef44f9ce9..e755ff4da8 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -806,6 +806,11 @@ void MainFrame::shutdown() m_plater->get_mouse3d_controller().save_config(*wxGetApp().app_config); } + // stop agent + NetworkAgent* agent = wxGetApp().getAgent(); + if (agent) + agent->track_enable(false); + // Stop the background thread of the removable drive manager, so that no new updates will be sent to the Plater. //wxGetApp().removable_drive_manager()->shutdown(); //stop listening for messages from other instances diff --git a/src/slic3r/GUI/MediaFilePanel.cpp b/src/slic3r/GUI/MediaFilePanel.cpp index 502e7a56ee..ad6d945b23 100644 --- a/src/slic3r/GUI/MediaFilePanel.cpp +++ b/src/slic3r/GUI/MediaFilePanel.cpp @@ -228,14 +228,15 @@ void MediaFilePanel::SetMachineObject(MachineObject* obj) m_button_download->Enable(e.GetInt() > 0); }); fs->Bind(EVT_MODE_CHANGED, &MediaFilePanel::modeChanged, this); - fs->Bind(EVT_STATUS_CHANGED, [this, wfs = boost::weak_ptr(fs)](auto &e) { + fs->Bind(EVT_STATUS_CHANGED, [this, wfs = boost::weak_ptr(fs)](auto& e) { e.Skip(); boost::shared_ptr fs(wfs.lock()); if (m_image_grid->GetFileSystem() != fs) // canceled return; ScalableBitmap icon; wxString msg; - switch (e.GetInt()) { + int status = e.GetInt(); + switch (status) { case PrinterFileSystem::Initializing: icon = m_bmp_loading; msg = _L("Initializing..."); break; case PrinterFileSystem::Connecting: icon = m_bmp_loading; msg = _L("Connecting..."); break; case PrinterFileSystem::Failed: icon = m_bmp_failed; msg = _L("Connect failed [%d]!"); break; @@ -246,6 +247,53 @@ void MediaFilePanel::SetMachineObject(MachineObject* obj) m_image_grid->SetStatus(icon, msg); if (e.GetInt() == PrinterFileSystem::Initializing) fetchUrl(boost::weak_ptr(fs)); + + if (status == PrinterFileSystem::Failed + || status == PrinterFileSystem::ListReady) { + json j; + j["code"] = fs->GetLastError(); + j["dev_id"] = m_machine; + j["dev_ip"] = m_lan_ip; + NetworkAgent* agent = wxGetApp().getAgent(); + if (status == PrinterFileSystem::Failed) { + j["result"] = "failed"; + if (agent) + agent->track_event("download_video_conn", j.dump()); + } else if (status == PrinterFileSystem::ListReady) { + j["result"] = "success"; + if (agent) + agent->track_event("download_video_conn", j.dump()); + } + } + }); + fs->Bind(EVT_DOWNLOAD, [this, wfs = boost::weak_ptr(fs)](auto& e) { + e.Skip(); + boost::shared_ptr fs(wfs.lock()); + if (m_image_grid->GetFileSystem() != fs) // canceled + return; + + int result = e.GetExtraLong(); + NetworkAgent* agent = wxGetApp().getAgent(); + if (result > 1 || result == 0) { + json j; + j["code"] = result; + j["dev_id"] = m_machine; + j["dev_ip"] = m_lan_ip; + if (result > 1) { + // download failed + j["result"] = "failed"; + if (agent) { + agent->track_event("download_video", j.dump()); + } + } else if (result == 0) { + // download success + j["result"] = "success"; + if (agent) { + agent->track_event("download_video", j.dump()); + } + } + } + return; }); if (IsShown()) fs->Start(); } diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp index 2a687be53f..407e89530f 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.cpp +++ b/src/slic3r/GUI/MediaPlayCtrl.cpp @@ -233,6 +233,19 @@ void MediaPlayCtrl::Stop(wxString const &msg) } else if (!msg.IsEmpty()) { SetStatus(msg, false); } + + if (m_failed_code != 0) { + json j; + j["stage"] = std::to_string(m_last_state); + j["dev_id"] = m_machine; + j["dev_ip"] = m_lan_ip; + j["result"] = "failed"; + j["code"] = m_failed_code; + NetworkAgent* agent = wxGetApp().getAgent(); + if (agent) + agent->track_event("start_liveview", j.dump()); + } + ++m_failed_retry; if (m_failed_code != 0 && !m_tutk_support && (m_failed_retry > 1 || m_user_triggered)) { m_next_retry = wxDateTime(); // stop retry @@ -369,6 +382,18 @@ void MediaPlayCtrl::onStateChanged(wxMediaEvent &event) if (size.GetWidth() > 1000) { m_last_state = state; SetStatus(_L("Playing..."), false); + + // track event + json j; + j["stage"] = std::to_string(m_last_state); + j["dev_id"] = m_machine; + j["dev_ip"] = m_lan_ip; + j["result"] = "success"; + j["code"] = 0; + NetworkAgent* agent = wxGetApp().getAgent(); + if (agent) + agent->track_event("start_liveview", j.dump()); + m_failed_retry = 0; m_failed_code = 0; boost::unique_lock lock(m_mutex); diff --git a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp index ff018bb413..97c506dad9 100644 --- a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp +++ b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp @@ -481,14 +481,12 @@ void PrinterFileSystem::DownloadNextFile() download->index = FindFile(download->index, download->name); if (download->index != size_t(-1)) { int progress = data.size * 100 / data.total; - if (result > CONTINUE) - progress = -2; auto & file = m_file_list[download->index]; if (result == ERROR_CANCEL) file.flags &= ~FF_DOWNLOAD; else if (file.progress != progress) { file.progress = progress; - SendChangedEvent(EVT_DOWNLOAD, download->index, file.path, data.size); + SendChangedEvent(EVT_DOWNLOAD, download->index, file.path, result); } } if (result != CONTINUE) DownloadNextFile(); diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 11c5c2f522..fddaab8d36 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -2228,6 +2228,11 @@ void SelectMachineDialog::on_ok() wxGetApp().show_ip_address_enter_dialog(); }); + // update ota version + NetworkAgent* agent = wxGetApp().getAgent(); + if (agent) + agent->track_update_property("dev_ota_version", obj_->get_ota_version()); + m_print_job->start(); BOOST_LOG_TRIVIAL(info) << "print_job: start print job"; } diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index a6ea2dc889..920a81462a 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -2445,7 +2445,7 @@ bool StatusPanel::check_axis_z_at_home(MachineObject* obj) } void StatusPanel::on_axis_ctrl_z_up_10(wxCommandEvent &event) -{ +{ if (obj) { obj->command_axis_control("Z", 1.0, -10.0f, 900); if (!check_axis_z_at_home(obj)) diff --git a/src/slic3r/Utils/NetworkAgent.cpp b/src/slic3r/Utils/NetworkAgent.cpp index 7501bc091a..a7a31b9aad 100644 --- a/src/slic3r/Utils/NetworkAgent.cpp +++ b/src/slic3r/Utils/NetworkAgent.cpp @@ -97,6 +97,10 @@ func_get_profile_3mf NetworkAgent::get_profile_3mf_ptr = nullptr; func_get_model_publish_url NetworkAgent::get_model_publish_url_ptr = nullptr; func_get_model_mall_home_url NetworkAgent::get_model_mall_home_url_ptr = nullptr; func_get_my_profile NetworkAgent::get_my_profile_ptr = nullptr; +func_track_enable NetworkAgent::track_enable_ptr = nullptr; +func_track_event NetworkAgent::track_event_ptr = nullptr; +func_track_header NetworkAgent::track_header_ptr = nullptr; +func_track_update_property NetworkAgent::track_update_property_ptr = nullptr; NetworkAgent::NetworkAgent() @@ -240,6 +244,10 @@ int NetworkAgent::initialize_network_module(bool using_backup) get_model_publish_url_ptr = reinterpret_cast(get_network_function("bambu_network_get_model_publish_url")); get_model_mall_home_url_ptr = reinterpret_cast(get_network_function("bambu_network_get_model_mall_home_url")); get_my_profile_ptr = reinterpret_cast(get_network_function("bambu_network_get_my_profile")); + track_enable_ptr = reinterpret_cast(get_network_function("bambu_network_track_enable")); + track_event_ptr = reinterpret_cast(get_network_function("bambu_network_track_event")); + track_header_ptr = reinterpret_cast(get_network_function("bambu_network_track_header")); + track_update_property_ptr = reinterpret_cast(get_network_function("bambu_network_track_update_property")); return 0; } @@ -336,6 +344,10 @@ int NetworkAgent::unload_network_module() get_model_publish_url_ptr = nullptr; get_model_mall_home_url_ptr = nullptr; get_my_profile_ptr = nullptr; + track_enable_ptr = nullptr; + track_event_ptr = nullptr; + track_header_ptr = nullptr; + track_update_property_ptr = nullptr; return 0; } @@ -787,11 +799,11 @@ std::string NetworkAgent::build_login_info() return ret; } -int NetworkAgent::bind(std::string dev_ip, std::string timezone, OnUpdateStatusFn update_fn) +int NetworkAgent::bind(std::string dev_ip, std::string dev_id, std::string timezone, OnUpdateStatusFn update_fn) { int ret = 0; if (network_agent && bind_ptr) { - ret = bind_ptr(network_agent, dev_ip, timezone, update_fn); + ret = bind_ptr(network_agent, dev_ip, dev_id, timezone, update_fn); if (ret) BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%, dev_ip=%3%, timezone=%4%") %network_agent %ret %dev_ip %timezone; @@ -1130,4 +1142,48 @@ int NetworkAgent::get_my_profile(std::string token, unsigned int *http_code, std return ret; } +int NetworkAgent::track_enable(bool enable) +{ + int ret = 0; + if (network_agent && track_enable_ptr) { + ret = track_enable_ptr(network_agent, enable); + if (ret) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format("error network_agnet=%1%, ret = %2%") % network_agent % ret; + } + return ret; +} + +int NetworkAgent::track_event(std::string evt_key, std::string content) +{ + int ret = 0; + if (network_agent && track_event_ptr) { + ret = track_event_ptr(network_agent, evt_key, content); + if (ret) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format("error network_agnet=%1%, ret = %2%") % network_agent % ret; + } + return ret; +} + +int NetworkAgent::track_header(std::string header) +{ + int ret = 0; + if (network_agent && track_header_ptr) { + ret = track_header_ptr(network_agent, header); + if (ret) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format("error network_agnet=%1%, ret = %2%") % network_agent % ret; + } + return ret; +} + +int NetworkAgent::track_update_property(std::string name, std::string value, std::string type) +{ + int ret = 0; + if (network_agent && track_update_property_ptr) { + ret = track_update_property_ptr(network_agent, name, value, type); + if (ret) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format("error network_agnet=%1%, ret = %2%") % network_agent % ret; + } + return ret; +} + } //namespace diff --git a/src/slic3r/Utils/NetworkAgent.hpp b/src/slic3r/Utils/NetworkAgent.hpp index 2899b2481d..07a0b2e068 100644 --- a/src/slic3r/Utils/NetworkAgent.hpp +++ b/src/slic3r/Utils/NetworkAgent.hpp @@ -45,7 +45,7 @@ typedef std::string (*func_get_user_nickanme)(void *agent); typedef std::string (*func_build_login_cmd)(void *agent); typedef std::string (*func_build_logout_cmd)(void *agent); typedef std::string (*func_build_login_info)(void *agent); -typedef int (*func_bind)(void *agent, std::string dev_ip, std::string timezone, OnUpdateStatusFn update_fn); +typedef int (*func_bind)(void *agent, std::string dev_ip, std::string dev_id, std::string timezone, OnUpdateStatusFn update_fn); typedef int (*func_unbind)(void *agent, std::string dev_id); typedef std::string (*func_get_bambulab_host)(void *agent); typedef std::string (*func_get_user_selected_machine)(void *agent); @@ -77,6 +77,10 @@ typedef int (*func_get_profile_3mf)(void *agent, BBLProfile* profile); typedef int (*func_get_model_publish_url)(void *agent, std::string* url); typedef int (*func_get_model_mall_home_url)(void *agent, std::string* url); typedef int (*func_get_my_profile)(void *agent, std::string token, unsigned int *http_code, std::string *http_body); +typedef int (*func_track_enable)(void *agent, bool enable); +typedef int (*func_track_event)(void *agent, std::string evt_key, std::string content); +typedef int (*func_track_header)(void *agent, std::string header); +typedef int (*func_track_update_property)(void *agent, std::string name, std::string value, std::string type); //the NetworkAgent class @@ -130,7 +134,7 @@ public: std::string build_login_cmd(); std::string build_logout_cmd(); std::string build_login_info(); - int bind(std::string dev_ip, std::string timezone, OnUpdateStatusFn update_fn); + int bind(std::string dev_ip, std::string dev_id, std::string timezone, OnUpdateStatusFn update_fn); int unbind(std::string dev_id); std::string get_bambulab_host(); std::string get_user_selected_machine(); @@ -162,6 +166,10 @@ public: int get_model_publish_url(std::string* url); int get_model_mall_home_url(std::string* url); int get_my_profile(std::string token, unsigned int* http_code, std::string* http_body); + int track_enable(bool enable); + int track_event(std::string evt_key, std::string content); + int track_header(std::string header); + int track_update_property(std::string name, std::string value, std::string type = "string"); private: @@ -237,6 +245,10 @@ private: static func_get_model_publish_url get_model_publish_url_ptr; static func_get_model_mall_home_url get_model_mall_home_url_ptr; static func_get_my_profile get_my_profile_ptr; + static func_track_enable track_enable_ptr; + static func_track_event track_event_ptr; + static func_track_header track_header_ptr; + static func_track_update_property track_update_property_ptr; }; } From 55f3e51bf4bba5d0610b2e1f2af5d88fb30eb189 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Wed, 8 Mar 2023 08:34:21 +0800 Subject: [PATCH 034/339] ENH: add translations for Search JIRA: STUDIO-1985 Change-Id: I39d0eddfc1aa957ecdbe35b9093bceb5c770c224 Signed-off-by: Stone Li --- src/slic3r/GUI/SelectMachine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index fddaab8d36..01cab849ad 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -415,7 +415,7 @@ SelectMachinePopup::SelectMachinePopup(wxWindow *parent) #if !BBL_RELEASE_TO_PUBLIC && defined(__WINDOWS__) m_sizer_search_bar = new wxBoxSizer(wxVERTICAL); - m_search_bar = new wxSearchCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_search_bar = new wxSearchCtrl( this, wxID_ANY, _L("Search"), wxDefaultPosition, wxDefaultSize, 0 ); m_search_bar->ShowSearchButton( true ); m_search_bar->ShowCancelButton( false ); m_sizer_search_bar->Add( m_search_bar, 1, wxALL| wxEXPAND, 1 ); From 65db26a27d63729aa6d46d3cd556a6653f247108 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Wed, 8 Mar 2023 11:20:32 +0800 Subject: [PATCH 035/339] NEW: remember use options when printing JIRA: STUDIO-2396 Change-Id: I21e6f91e3da53adf8dc28d9be223e03a4a275fca Signed-off-by: Stone Li --- src/libslic3r/AppConfig.cpp | 10 ++++++++ src/slic3r/GUI/SelectMachine.cpp | 44 ++++++++++++++++++++++++++++---- 2 files changed, 49 insertions(+), 5 deletions(-) diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index fcc8ca5c2b..6b1478e59a 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -307,6 +307,16 @@ void AppConfig::set_defaults() } #endif + if (get("print", "bed_leveling").empty()) { + set_str("print", "bed_leveling", "1"); + } + if (get("print", "flow_cali").empty()) { + set_str("print", "flow_cali", "1"); + } + if (get("print", "timelapse").empty()) { + set_str("print", "timelapse", "1"); + } + // Remove legacy window positions/sizes erase("app", "main_frame_maximized"); erase("app", "main_frame_pos"); diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 01cab849ad..28999057b3 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -1420,7 +1420,28 @@ wxWindow *SelectMachineDialog::create_item_checkbox(wxString title, wxWindow *pa checkbox->SetToolTip(tooltip); text->SetToolTip(tooltip); - text->Bind(wxEVT_LEFT_DOWN, [this, check](wxMouseEvent &) { check->SetValue(check->GetValue() ? false : true); }); + + + check->Bind(wxEVT_LEFT_DOWN, [this, check, param](wxMouseEvent &e) { + AppConfig* config = wxGetApp().app_config; + if (config) { + if (check->GetValue()) + config->set_str("print", param, "0"); + else + config->set_str("print", param, "1"); + } + e.Skip(); + }); + text->Bind(wxEVT_LEFT_DOWN, [this, check, param](wxMouseEvent &) { + check->SetValue(check->GetValue() ? false : true); + AppConfig* config = wxGetApp().app_config; + if (config) { + if (check->GetValue()) + config->set_str("print", param, "1"); + else + config->set_str("print", param, "0"); + } + }); m_checkbox_list[param] = check; return checkbox; } @@ -2958,10 +2979,23 @@ void SelectMachineDialog::set_default() select_bed->Show(); select_flow->Show(); - // checkbox default values - m_checkbox_list["bed_leveling"]->SetValue(true); - m_checkbox_list["flow_cali"]->SetValue(true); - m_checkbox_list["timelapse"]->SetValue(true); + // load checkbox values from app config + AppConfig* config = wxGetApp().app_config; + if (config && config->get("print", "bed_leveling") == "0") { + m_checkbox_list["bed_leveling"]->SetValue(false); + } else { + m_checkbox_list["bed_leveling"]->SetValue(true); + } + if (config && config->get("print", "flow_cali") == "0") { + m_checkbox_list["flow_cali"]->SetValue(false); + } else { + m_checkbox_list["flow_cali"]->SetValue(true); + } + if (config && config->get("print", "timelapse") == "0") { + m_checkbox_list["timelapse"]->SetValue(false); + } else { + m_checkbox_list["timelapse"]->SetValue(true); + } ams_check->SetValue(true); // thumbmail From 68c9cb0a8cd131bbdcae15d38a50b0a29aba2482 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Mon, 6 Mar 2023 15:06:42 +0800 Subject: [PATCH 036/339] FIX: some config param range Change-Id: Ia19f51e121bd1966e35efef1127d685b07ca676f --- src/libslic3r/PrintConfig.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index c8dbaa0a4a..d2c49a1f96 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -548,7 +548,7 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("Bed temperature of the initial layer. " "Value 0 means the filament does not support to print on the Cool Plate"); def->sidetext = L("°C"); - def->max = 0; + def->min = 0; def->max = 120; def->set_default_value(new ConfigOptionInts{ 35 }); @@ -558,7 +558,7 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("Bed temperature of the initial layer. " "Value 0 means the filament does not support to print on the Engineering Plate"); def->sidetext = L("°C"); - def->max = 0; + def->min = 0; def->max = 120; def->set_default_value(new ConfigOptionInts{ 45 }); @@ -568,7 +568,7 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("Bed temperature of the initial layer. " "Value 0 means the filament does not support to print on the High Temp Plate"); def->sidetext = L("°C"); - def->max = 0; + def->min = 0; def->max = 120; def->set_default_value(new ConfigOptionInts{ 45 }); @@ -578,7 +578,7 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("Bed temperature of the initial layer. " "Value 0 means the filament does not support to print on the Textured PEI Plate"); def->sidetext = L("°C"); - def->max = 0; + def->min = 0; def->max = 120; def->set_default_value(new ConfigOptionInts{45}); From 91ad491743a1a8ae0099703484b6f1c3a20d1b8a Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Mon, 6 Mar 2023 16:01:17 +0800 Subject: [PATCH 037/339] FIX: [STUDIO-2282] auto expand filament list on sync ams Change-Id: Iad2fd419fc6da56418cda7423adcbcef641ee2a3 --- src/slic3r/GUI/Plater.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 1c00290dc7..9852d64f12 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1441,6 +1441,9 @@ void Sidebar::sync_ams_list() wxGetApp().get_tab(Preset::TYPE_FILAMENT)->select_preset(wxGetApp().preset_bundle->filament_presets[0]); wxGetApp().preset_bundle->export_selections(*wxGetApp().app_config); dynamic_filament_list.update(); + // Expand filament list + p->m_panel_filament_content->SetMaxSize({-1, -1}); + Layout(); } ObjectList* Sidebar::obj_list() From 8292486c3a3b9f1d9b8298c33de8df90ee99d147 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Mon, 6 Mar 2023 17:21:27 +0800 Subject: [PATCH 038/339] FIX: [STUDIO-2064] back color of list view editor on macOS dark mode Change-Id: Id6ea9b17b83ccb08fe911d62d8fd292358a20ebc --- src/slic3r/GUI/ExtraRenderers.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/slic3r/GUI/ExtraRenderers.cpp b/src/slic3r/GUI/ExtraRenderers.cpp index 7f77c0a4ce..7b1dafb352 100644 --- a/src/slic3r/GUI/ExtraRenderers.cpp +++ b/src/slic3r/GUI/ExtraRenderers.cpp @@ -216,6 +216,7 @@ wxWindow* BitmapTextRenderer::CreateEditorCtrl(wxWindow* parent, wxRect labelRec position, labelRect.GetSize(), wxTE_PROCESS_ENTER); text_editor->SetInsertionPointEnd(); text_editor->SelectAll(); + text_editor->SetBackgroundColour(parent->GetBackgroundColour()); return text_editor; } From 2bb8875e30f8b46bfcc7dfd39378cc073dc2db65 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Tue, 7 Mar 2023 11:30:59 +0800 Subject: [PATCH 039/339] FIX: [STUDIO-2213] project title of restored new project Change-Id: Ia8255016f77942274c9cf4f704115766735a820b --- src/slic3r/GUI/Plater.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 9852d64f12..a5ff0443d8 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -7658,6 +7658,8 @@ void Plater::load_project(wxString const& filename2, // if res is empty no data has been loaded if (!res.empty() && (load_restore || !(strategy & LoadStrategy::Silence))) { p->set_project_filename(load_restore ? originfile : filename); + if (load_restore && originfile.IsEmpty()) + p->set_project_name(_L("Untitled")); } else { if (using_exported_file()) p->set_project_filename(filename); From c945c4738394a56922e1a2b0a7b982ef93f02859 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Tue, 7 Mar 2023 11:55:44 +0800 Subject: [PATCH 040/339] FIX: [STUDIO-2150] export config not work Change-Id: I05915a9dc5e767273e09ecdebaf5a679435c080f --- src/libslic3r/PresetBundle.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 7c90e59318..04aca8bac6 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -3507,6 +3507,7 @@ std::vector PresetBundle::export_current_configs(const std::string if ((preset->is_system && !export_system_settings) || preset->is_default) continue; std::string file = path + "/" + preset->name + ".json"; + if (overwrite == 0) overwrite = 1; if (boost::filesystem::exists(file) && overwrite < 2) { overwrite = override_confirm(preset->name); } From 4c4b274408e9be42845432d08d7b57a66ad5f0bf Mon Sep 17 00:00:00 2001 From: "salt.wei" Date: Wed, 8 Mar 2023 17:22:21 +0800 Subject: [PATCH 041/339] ENH: speed gcode export up again thanks prusa Signed-off-by: salt.wei Change-Id: Ifbe5e2ea55b16a7fe281b54ca16c37695c15f5b1 --- src/libslic3r/AABBTreeIndirect.hpp | 119 +++++- src/libslic3r/AABBTreeLines.hpp | 361 +++++++++++++++--- src/libslic3r/CMakeLists.txt | 4 + src/libslic3r/ClipperUtils.cpp | 2 + src/libslic3r/ClipperUtils.hpp | 1 + src/libslic3r/GCode.cpp | 2 +- src/libslic3r/GCode.hpp | 2 + .../GCode/RetractWhenCrossingPerimeters.cpp | 54 +++ .../GCode/RetractWhenCrossingPerimeters.hpp | 32 ++ src/libslic3r/Layer.hpp | 8 +- src/libslic3r/SLAPrintSteps.cpp | 2 + 11 files changed, 512 insertions(+), 75 deletions(-) create mode 100644 src/libslic3r/GCode/RetractWhenCrossingPerimeters.cpp create mode 100644 src/libslic3r/GCode/RetractWhenCrossingPerimeters.hpp diff --git a/src/libslic3r/AABBTreeIndirect.hpp b/src/libslic3r/AABBTreeIndirect.hpp index 9b9c886ecc..6d6479508f 100644 --- a/src/libslic3r/AABBTreeIndirect.hpp +++ b/src/libslic3r/AABBTreeIndirect.hpp @@ -13,6 +13,7 @@ #include +#include "BoundingBox.hpp" #include "Utils.hpp" // for next_highest_power_of_2() // Definition of the ray intersection hit structure. @@ -83,6 +84,13 @@ public: // to split around. template void build(std::vector &&input) + { + this->build_modify_input(input); + input.clear(); + } + + template + void build_modify_input(std::vector &input) { if (input.empty()) clear(); @@ -91,7 +99,6 @@ public: m_nodes.assign(next_highest_power_of_2(input.size()) * 2 - 1, Node()); build_recursive(input, 0, 0, input.size() - 1); } - input.clear(); } const std::vector& nodes() const { return m_nodes; } @@ -211,6 +218,23 @@ using Tree3f = Tree<3, float>; using Tree2d = Tree<2, double>; using Tree3d = Tree<3, double>; +// Wrap a 2D Slic3r own BoundingBox to be passed to Tree::build() and similar +// to build an AABBTree over coord_t 2D bounding boxes. +class BoundingBoxWrapper { +public: + using BoundingBox = Eigen::AlignedBox; + BoundingBoxWrapper(const size_t idx, const Slic3r::BoundingBox &bbox) : + m_idx(idx), + // Inflate the bounding box a bit to account for numerical issues. + m_bbox(bbox.min - Point(SCALED_EPSILON, SCALED_EPSILON), bbox.max + Point(SCALED_EPSILON, SCALED_EPSILON)) {} + size_t idx() const { return m_idx; } + const BoundingBox& bbox() const { return m_bbox; } + Point centroid() const { return ((m_bbox.min().cast() + m_bbox.max().cast()) / 2).cast(); } +private: + size_t m_idx; + BoundingBox m_bbox; +}; + namespace detail { template struct RayIntersector { @@ -513,7 +537,7 @@ namespace detail { const VectorType origin; inline VectorType closest_point_to_origin(size_t primitive_index, - ScalarType& squared_distance){ + ScalarType& squared_distance) const { const auto &triangle = this->faces[primitive_index]; VectorType closest_point = closest_point_to_triangle(origin, this->vertices[triangle(0)].template cast(), @@ -607,6 +631,37 @@ namespace detail { return up_sqr_d; } + template + static inline void indexed_primitives_within_distance_squared_recurisve(const IndexedPrimitivesDistancerType &distancer, + size_t node_idx, + Scalar squared_distance_limit, + std::vector &found_primitives_indices) + { + const auto &node = distancer.tree.node(node_idx); + assert(node.is_valid()); + if (node.is_leaf()) { + Scalar sqr_dist; + distancer.closest_point_to_origin(node.idx, sqr_dist); + if (sqr_dist < squared_distance_limit) { found_primitives_indices.push_back(node.idx); } + } else { + size_t left_node_idx = node_idx * 2 + 1; + size_t right_node_idx = left_node_idx + 1; + const auto &node_left = distancer.tree.node(left_node_idx); + const auto &node_right = distancer.tree.node(right_node_idx); + assert(node_left.is_valid()); + assert(node_right.is_valid()); + + if (node_left.bbox.squaredExteriorDistance(distancer.origin) < squared_distance_limit) { + indexed_primitives_within_distance_squared_recurisve(distancer, left_node_idx, squared_distance_limit, + found_primitives_indices); + } + if (node_right.bbox.squaredExteriorDistance(distancer.origin) < squared_distance_limit) { + indexed_primitives_within_distance_squared_recurisve(distancer, right_node_idx, squared_distance_limit, + found_primitives_indices); + } + } + } + } // namespace detail // Build a balanced AABB Tree over an indexed triangles set, balancing the tree @@ -793,6 +848,33 @@ inline bool is_any_triangle_in_radius( return hit_point.allFinite(); } +// Returns all triangles within the given radius limit +template +inline std::vector all_triangles_in_radius( + // Indexed triangle set - 3D vertices. + const std::vector &vertices, + // Indexed triangle set - triangular faces, references to vertices. + const std::vector &faces, + // AABBTreeIndirect::Tree over vertices & faces, bounding boxes built with the accuracy of vertices. + const TreeType &tree, + // Point to which the distances on the indexed triangle set is searched for. + const VectorType &point, + //Square of maximum distance in which triangles are searched for + typename VectorType::Scalar max_distance_squared) +{ + auto distancer = detail::IndexedTriangleSetDistancer + { vertices, faces, tree, point }; + + if(tree.empty()) + { + return {}; + } + + std::vector found_triangles{}; + detail::indexed_primitives_within_distance_squared_recurisve(distancer, size_t(0), max_distance_squared, found_triangles); + return found_triangles; +} + // Traverse the tree and return the index of an entity whose bounding box // contains a given point. Returns size_t(-1) when the point is outside. @@ -837,48 +919,54 @@ struct Intersecting> { template auto intersecting(const G &g) { return Intersecting{g}; } -template struct Containing {}; +template struct Within {}; // Intersection predicate specialization for box-box intersections template -struct Containing> { +struct Within> { Eigen::AlignedBox box; - Containing(const Eigen::AlignedBox &bb): box{bb} {} + Within(const Eigen::AlignedBox &bb): box{bb} {} bool operator() (const typename Tree::Node &node) const { - return box.contains(node.bbox); + return node.is_leaf() ? box.contains(node.bbox) : box.intersects(node.bbox); } }; -template auto containing(const G &g) { return Containing{g}; } +template auto within(const G &g) { return Within{g}; } namespace detail { +// Returns true in case traversal should continue, +// returns false if traversal should stop (for example if the first hit was found). template -void traverse_recurse(const Tree &tree, +bool traverse_recurse(const Tree &tree, size_t idx, Pred && pred, Fn && callback) { assert(tree.node(idx).is_valid()); - if (!pred(tree.node(idx))) return; + if (!pred(tree.node(idx))) + // Continue traversal. + return true; if (tree.node(idx).is_leaf()) { - callback(tree.node(idx).idx); + // Callback returns true to continue traversal, false to stop traversal. + return callback(tree.node(idx)); } else { // call this with left and right node idx: - auto trv = [&](size_t idx) { - traverse_recurse(tree, idx, std::forward(pred), - std::forward(callback)); + auto trv = [&](size_t idx) -> bool { + return traverse_recurse(tree, idx, std::forward(pred), + std::forward(callback)); }; // Left / right child node index. - trv(Tree::left_child_idx(idx)); - trv(Tree::right_child_idx(idx)); + // Returns true if both children allow the traversal to continue. + return trv(Tree::left_child_idx(idx)) && + trv(Tree::right_child_idx(idx)); } } @@ -888,6 +976,7 @@ void traverse_recurse(const Tree &tree, // traverse(tree, intersecting(QueryBox), [](size_t face_idx) { // /* ... */ // }); +// Callback shall return true to continue traversal, false if it wants to stop traversal, for example if it found the answer. template void traverse(const Tree &tree, Predicate &&pred, Fn &&callback) { diff --git a/src/libslic3r/AABBTreeLines.hpp b/src/libslic3r/AABBTreeLines.hpp index 7b9595419a..21678bfcdf 100644 --- a/src/libslic3r/AABBTreeLines.hpp +++ b/src/libslic3r/AABBTreeLines.hpp @@ -1,83 +1,197 @@ #ifndef SRC_LIBSLIC3R_AABBTREELINES_HPP_ #define SRC_LIBSLIC3R_AABBTREELINES_HPP_ -#include "libslic3r/Point.hpp" -#include "libslic3r/EdgeGrid.hpp" +#include "Point.hpp" +#include "Utils.hpp" +#include "libslic3r.h" #include "libslic3r/AABBTreeIndirect.hpp" #include "libslic3r/Line.hpp" +#include +#include +#include +#include -namespace Slic3r { - -namespace AABBTreeLines { +namespace Slic3r { namespace AABBTreeLines { namespace detail { -template -struct IndexedLinesDistancer { - using LineType = ALineType; - using TreeType = ATreeType; +template struct IndexedLinesDistancer +{ + using LineType = ALineType; + using TreeType = ATreeType; using VectorType = AVectorType; using ScalarType = typename VectorType::Scalar; const std::vector &lines; - const TreeType &tree; + const TreeType &tree; const VectorType origin; - inline VectorType closest_point_to_origin(size_t primitive_index, - ScalarType &squared_distance) { - VectorType nearest_point; - const LineType &line = lines[primitive_index]; - squared_distance = line_alg::distance_to_squared(line, origin, &nearest_point); - return nearest_point; + inline VectorType closest_point_to_origin(size_t primitive_index, ScalarType &squared_distance) const + { + Vec nearest_point; + const LineType &line = lines[primitive_index]; + squared_distance = line_alg::distance_to_squared(line, origin.template cast(), &nearest_point); + return nearest_point.template cast(); } }; +// returns number of intersections of ray starting in ray_origin and following the specified coordinate line with lines in tree +// first number is hits in positive direction of ray, second number hits in negative direction. returns neagtive numbers when ray_origin is +// on some line exactly. +template +inline std::tuple coordinate_aligned_ray_hit_count(size_t node_idx, + const TreeType &tree, + const std::vector &lines, + const VectorType &ray_origin) +{ + static constexpr int other_coordinate = (coordinate + 1) % 2; + using Scalar = typename LineType::Scalar; + using Floating = typename std::conditional::value, Scalar, double>::type; + const auto &node = tree.node(node_idx); + assert(node.is_valid()); + if (node.is_leaf()) { + const LineType &line = lines[node.idx]; + if (ray_origin[other_coordinate] < std::min(line.a[other_coordinate], line.b[other_coordinate]) || + ray_origin[other_coordinate] >= std::max(line.a[other_coordinate], line.b[other_coordinate])) { + // the second inequality is nonsharp for a reason + // without it, we may count contour border twice when the lines meet exactly at the spot of intersection. this prevents is + return {0, 0}; + } + + Scalar line_max = std::max(line.a[coordinate], line.b[coordinate]); + Scalar line_min = std::min(line.a[coordinate], line.b[coordinate]); + if (ray_origin[coordinate] > line_max) { + return {1, 0}; + } else if (ray_origin[coordinate] < line_min) { + return {0, 1}; + } else { + // find intersection of ray with line + // that is when ( line.a + t * (line.b - line.a) )[other_coordinate] == ray_origin[other_coordinate] + // t = ray_origin[oc] - line.a[oc] / (line.b[oc] - line.a[oc]); + // then we want to get value of intersection[ coordinate] + // val_c = line.a[c] + t * (line.b[c] - line.a[c]); + // Note that ray and line may overlap, when (line.b[oc] - line.a[oc]) is zero + // In that case, we return negative number + Floating distance_oc = line.b[other_coordinate] - line.a[other_coordinate]; + Floating t = (ray_origin[other_coordinate] - line.a[other_coordinate]) / distance_oc; + Floating val_c = line.a[coordinate] + t * (line.b[coordinate] - line.a[coordinate]); + if (ray_origin[coordinate] > val_c) { + return {1, 0}; + } else if (ray_origin[coordinate] < val_c) { + return {0, 1}; + } else { // ray origin is on boundary + return {-1, -1}; + } + } + } else { + int intersections_above = 0; + int intersections_below = 0; + size_t left_node_idx = node_idx * 2 + 1; + size_t right_node_idx = left_node_idx + 1; + const auto &node_left = tree.node(left_node_idx); + const auto &node_right = tree.node(right_node_idx); + assert(node_left.is_valid()); + assert(node_right.is_valid()); + + if (node_left.bbox.min()[other_coordinate] <= ray_origin[other_coordinate] && + node_left.bbox.max()[other_coordinate] >= + ray_origin[other_coordinate]) { + auto [above, below] = coordinate_aligned_ray_hit_count(left_node_idx, tree, lines, + ray_origin); + if (above < 0 || below < 0) return {-1, -1}; + intersections_above += above; + intersections_below += below; + } + + if (node_right.bbox.min()[other_coordinate] <= ray_origin[other_coordinate] && + node_right.bbox.max()[other_coordinate] >= ray_origin[other_coordinate]) { + auto [above, below] = coordinate_aligned_ray_hit_count(right_node_idx, tree, lines, + ray_origin); + if (above < 0 || below < 0) return {-1, -1}; + intersections_above += above; + intersections_below += below; + } + return {intersections_above, intersections_below}; + } } -// Build a balanced AABB Tree over a vector of float lines, balancing the tree +template +inline std::vector> get_intersections_with_line(size_t node_idx, + const TreeType &tree, + const std::vector &lines, + const LineType &line, + const typename TreeType::BoundingBox &line_bb) +{ + const auto &node = tree.node(node_idx); + assert(node.is_valid()); + if (node.is_leaf()) { + VectorType intersection_pt; + if (line_alg::intersection(line, lines[node.idx], &intersection_pt)) { + return {std::pair(intersection_pt, node.idx)}; + } else { + return {}; + } + } else { + size_t left_node_idx = node_idx * 2 + 1; + size_t right_node_idx = left_node_idx + 1; + const auto &node_left = tree.node(left_node_idx); + const auto &node_right = tree.node(right_node_idx); + assert(node_left.is_valid()); + assert(node_right.is_valid()); + + std::vector> result; + + if (node_left.bbox.intersects(line_bb)) { + std::vector> intersections = + get_intersections_with_line(left_node_idx, tree, lines, line, line_bb); + result.insert(result.end(), intersections.begin(), intersections.end()); + } + + if (node_right.bbox.intersects(line_bb)) { + std::vector> intersections = + get_intersections_with_line(right_node_idx, tree, lines, line, line_bb); + result.insert(result.end(), intersections.begin(), intersections.end()); + } + + return result; + } +} + +} // namespace detail + +// Build a balanced AABB Tree over a vector of lines, balancing the tree // on centroids of the lines. // Epsilon is applied to the bounding boxes of the AABB Tree to cope with numeric inaccuracies // during tree traversal. template -inline AABBTreeIndirect::Tree<2, typename LineType::Scalar> build_aabb_tree_over_indexed_lines( - const std::vector &lines, - //FIXME do we want to apply an epsilon? - const float eps = 0) - { +inline AABBTreeIndirect::Tree<2, typename LineType::Scalar> build_aabb_tree_over_indexed_lines(const std::vector &lines) +{ using TreeType = AABBTreeIndirect::Tree<2, typename LineType::Scalar>; -// using CoordType = typename TreeType::CoordType; - using VectorType = typename TreeType::VectorType; + // using CoordType = typename TreeType::CoordType; + using VectorType = typename TreeType::VectorType; using BoundingBox = typename TreeType::BoundingBox; - struct InputType { - size_t idx() const { - return m_idx; - } - const BoundingBox& bbox() const { - return m_bbox; - } - const VectorType& centroid() const { - return m_centroid; - } + struct InputType + { + size_t idx() const { return m_idx; } + const BoundingBox &bbox() const { return m_bbox; } + const VectorType ¢roid() const { return m_centroid; } - size_t m_idx; + size_t m_idx; BoundingBox m_bbox; - VectorType m_centroid; + VectorType m_centroid; }; std::vector input; input.reserve(lines.size()); - const VectorType veps(eps, eps); for (size_t i = 0; i < lines.size(); ++i) { const LineType &line = lines[i]; - InputType n; - n.m_idx = i; + InputType n; + n.m_idx = i; n.m_centroid = (line.a + line.b) * 0.5; - n.m_bbox = BoundingBox(line.a, line.a); + n.m_bbox = BoundingBox(line.a, line.a); n.m_bbox.extend(line.b); - n.m_bbox.min() -= veps; - n.m_bbox.max() += veps; input.emplace_back(n); } @@ -88,25 +202,164 @@ inline AABBTreeIndirect::Tree<2, typename LineType::Scalar> build_aabb_tree_over // Finding a closest line, its closest point and squared distance to the closest point // Returns squared distance to the closest point or -1 if the input is empty. +// or no closer point than max_sq_dist template inline typename VectorType::Scalar squared_distance_to_indexed_lines( - const std::vector &lines, - const TreeType &tree, - const VectorType &point, - size_t &hit_idx_out, - Eigen::PlainObjectBase &hit_point_out) - { + const std::vector &lines, + const TreeType &tree, + const VectorType &point, + size_t &hit_idx_out, + Eigen::PlainObjectBase &hit_point_out, + typename VectorType::Scalar max_sqr_dist = std::numeric_limits::infinity()) +{ using Scalar = typename VectorType::Scalar; - auto distancer = detail::IndexedLinesDistancer - { lines, tree, point }; - return tree.empty() ? - Scalar(-1) : - AABBTreeIndirect::detail::squared_distance_to_indexed_primitives_recursive(distancer, size_t(0), Scalar(0), - std::numeric_limits::infinity(), hit_idx_out, hit_point_out); + if (tree.empty()) return Scalar(-1); + auto distancer = detail::IndexedLinesDistancer{lines, tree, point}; + return AABBTreeIndirect::detail::squared_distance_to_indexed_primitives_recursive(distancer, size_t(0), Scalar(0), max_sqr_dist, + hit_idx_out, hit_point_out); } +// Returns all lines within the given radius limit +template +inline std::vector all_lines_in_radius(const std::vector &lines, + const TreeType &tree, + const VectorType &point, + typename VectorType::Scalar max_distance_squared) +{ + auto distancer = detail::IndexedLinesDistancer{lines, tree, point}; + + if (tree.empty()) { return {}; } + + std::vector found_lines{}; + AABBTreeIndirect::detail::indexed_primitives_within_distance_squared_recurisve(distancer, size_t(0), max_distance_squared, found_lines); + return found_lines; } +// return 1 if true, -1 if false, 0 for point on contour (or if cannot be determined) +template +inline int point_outside_closed_contours(const std::vector &lines, const TreeType &tree, const VectorType &point) +{ + if (tree.empty()) { return 1; } + + auto [hits_above, hits_below] = detail::coordinate_aligned_ray_hit_count(0, tree, lines, point); + if (hits_above < 0 || hits_below < 0) { + return 0; + } else if (hits_above % 2 == 1 && hits_below % 2 == 1) { + return -1; + } else if (hits_above % 2 == 0 && hits_below % 2 == 0) { + return 1; + } else { // this should not happen with closed contours. lets check it in Y direction + auto [hits_above, hits_below] = detail::coordinate_aligned_ray_hit_count(0, tree, lines, point); + if (hits_above < 0 || hits_below < 0) { + return 0; + } else if (hits_above % 2 == 1 && hits_below % 2 == 1) { + return -1; + } else if (hits_above % 2 == 0 && hits_below % 2 == 0) { + return 1; + } else { // both results were unclear + return 0; + } + } } +template +inline std::vector> get_intersections_with_line(const std::vector &lines, + const TreeType &tree, + const LineType &line) +{ + if (tree.empty()) { + return {}; + } + auto line_bb = typename TreeType::BoundingBox(line.a, line.a); + line_bb.extend(line.b); + + auto intersections = detail::get_intersections_with_line(0, tree, lines, line, line_bb); + if (sorted) { + using Floating = + typename std::conditional::value, typename LineType::Scalar, double>::type; + + std::vector>> points_with_sq_distance{}; + for (const auto &p : intersections) { + points_with_sq_distance.emplace_back((p.first - line.a).template cast().squaredNorm(), p); + } + std::sort(points_with_sq_distance.begin(), points_with_sq_distance.end(), + [](const std::pair> &left, + std::pair> &right) { return left.first < right.first; }); + for (size_t i = 0; i < points_with_sq_distance.size(); i++) { + intersections[i] = points_with_sq_distance[i].second; + } + } + + return intersections; +} + +template class LinesDistancer +{ +public: + using Scalar = typename LineType::Scalar; + using Floating = typename std::conditional::value, Scalar, double>::type; +private: + std::vector lines; + AABBTreeIndirect::Tree<2, Scalar> tree; + +public: + explicit LinesDistancer(const std::vector &lines) : lines(lines) + { + tree = AABBTreeLines::build_aabb_tree_over_indexed_lines(this->lines); + } + + explicit LinesDistancer(std::vector &&lines) : lines(lines) + { + tree = AABBTreeLines::build_aabb_tree_over_indexed_lines(this->lines); + } + + LinesDistancer() = default; + + // 1 true, -1 false, 0 cannot determine + int outside(const Vec<2, Scalar> &point) const { return point_outside_closed_contours(lines, tree, point); } + + // negative sign means inside + template + std::tuple> distance_from_lines_extra(const Vec<2, Scalar> &point) const + { + size_t nearest_line_index_out = size_t(-1); + Vec<2, Floating> nearest_point_out = Vec<2, Floating>::Zero(); + Vec<2, Floating> p = point.template cast(); + auto distance = AABBTreeLines::squared_distance_to_indexed_lines(lines, tree, p, nearest_line_index_out, nearest_point_out); + + if (distance < 0) { + return {std::numeric_limits::infinity(), nearest_line_index_out, nearest_point_out}; + } + distance = sqrt(distance); + + if (SIGNED_DISTANCE) { + distance *= outside(point); + } + + return {distance, nearest_line_index_out, nearest_point_out}; + } + + template Floating distance_from_lines(const Vec<2, typename LineType::Scalar> &point) const + { + auto [dist, idx, np] = distance_from_lines_extra(point); + return dist; + } + + std::vector all_lines_in_radius(const Vec<2, typename LineType::Scalar> &point, Floating radius) + { + return all_lines_in_radius(this->lines, this->tree, point, radius * radius); + } + + template std::vector, size_t>> intersections_with_line(const LineType &line) const + { + return get_intersections_with_line>(lines, tree, line); + } + + const LineType &get_line(size_t line_idx) const { return lines[line_idx]; } + + const std::vector &get_lines() const { return lines; } +}; + +}} // namespace Slic3r::AABBTreeLines + #endif /* SRC_LIBSLIC3R_AABBTREELINES_HPP_ */ diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index 332702e6c7..43d10b5a28 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -22,6 +22,8 @@ set(lisbslic3r_sources ArcFitter.hpp pchheader.cpp pchheader.hpp + AABBTreeIndirect.hpp + AABBTreeLines.hpp BoundingBox.cpp BoundingBox.hpp BridgeDetector.cpp @@ -125,6 +127,8 @@ set(lisbslic3r_sources # GCode/PressureEqualizer.hpp GCode/PrintExtents.cpp GCode/PrintExtents.hpp + GCode/RetractWhenCrossingPerimeters.cpp + GCode/RetractWhenCrossingPerimeters.hpp GCode/SpiralVase.cpp GCode/SpiralVase.hpp GCode/SeamPlacer.cpp diff --git a/src/libslic3r/ClipperUtils.cpp b/src/libslic3r/ClipperUtils.cpp index 0745bea8d4..19bd2850e8 100644 --- a/src/libslic3r/ClipperUtils.cpp +++ b/src/libslic3r/ClipperUtils.cpp @@ -833,6 +833,8 @@ Polylines _clipper_pl_closed(ClipperLib::ClipType clipType, PathProvider1 &&subj return retval; } +Slic3r::Polylines diff_pl(const Slic3r::Polyline& subject, const Slic3r::Polygons& clip) + { return _clipper_pl_open(ClipperLib::ctDifference, ClipperUtils::SinglePathProvider(subject.points), ClipperUtils::PolygonsProvider(clip)); } Slic3r::Polylines diff_pl(const Slic3r::Polylines &subject, const Slic3r::Polygons &clip) { return _clipper_pl_open(ClipperLib::ctDifference, ClipperUtils::PolylinesProvider(subject), ClipperUtils::PolygonsProvider(clip)); } Slic3r::Polylines diff_pl(const Slic3r::Polyline &subject, const Slic3r::ExPolygon &clip) diff --git a/src/libslic3r/ClipperUtils.hpp b/src/libslic3r/ClipperUtils.hpp index 0c703b6311..d7e0fcc4c8 100644 --- a/src/libslic3r/ClipperUtils.hpp +++ b/src/libslic3r/ClipperUtils.hpp @@ -430,6 +430,7 @@ Slic3r::ExPolygons diff_ex(const Slic3r::Surfaces &subject, const Slic3r::ExPoly Slic3r::ExPolygons diff_ex(const Slic3r::ExPolygons &subject, const Slic3r::Surfaces &clip, ApplySafetyOffset do_safety_offset = ApplySafetyOffset::No); Slic3r::ExPolygons diff_ex(const Slic3r::Surfaces &subject, const Slic3r::Surfaces &clip, ApplySafetyOffset do_safety_offset = ApplySafetyOffset::No); Slic3r::ExPolygons diff_ex(const Slic3r::SurfacesPtr &subject, const Slic3r::Polygons &clip, ApplySafetyOffset do_safety_offset = ApplySafetyOffset::No); +Slic3r::Polylines diff_pl(const Slic3r::Polyline& subject, const Slic3r::Polygons& clip); Slic3r::Polylines diff_pl(const Slic3r::Polylines &subject, const Slic3r::Polygons &clip); Slic3r::Polylines diff_pl(const Slic3r::Polyline &subject, const Slic3r::ExPolygon &clip); Slic3r::Polylines diff_pl(const Slic3r::Polylines &subject, const Slic3r::ExPolygon &clip); diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index cb068b8a5e..279eeae57a 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -4064,7 +4064,7 @@ bool GCode::needs_retraction(const Polyline &travel, ExtrusionRole role, LiftTyp } //BBS: need retract when long moving to print perimeter to avoid dropping of material if (!is_perimeter(role) && m_config.reduce_infill_retraction && m_layer != nullptr && - m_config.sparse_infill_density.value > 0 && m_layer->any_internal_region_slmplify_slice_contains(travel)) + m_config.sparse_infill_density.value > 0 && m_retract_when_crossing_perimeters.travel_inside_internal_regions(*m_layer, travel)) // Skip retraction if travel is contained in an internal slice *and* // internal infill is enabled (so that stringing is entirely not visible). //FIXME any_internal_region_slice_contains() is potentionally very slow, it shall test for the bounding boxes first. diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp index b7132bbc3e..c16b58bbe9 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -10,6 +10,7 @@ #include "PrintConfig.hpp" #include "GCode/AvoidCrossingPerimeters.hpp" #include "GCode/CoolingBuffer.hpp" +#include "GCode/RetractWhenCrossingPerimeters.hpp" #include "GCode/SpiralVase.hpp" #include "GCode/ToolOrdering.hpp" #include "GCode/WipeTower.hpp" @@ -423,6 +424,7 @@ private: OozePrevention m_ooze_prevention; Wipe m_wipe; AvoidCrossingPerimeters m_avoid_crossing_perimeters; + RetractWhenCrossingPerimeters m_retract_when_crossing_perimeters; bool m_enable_loop_clipping; // If enabled, the G-code generator will put following comments at the ends // of the G-code lines: _EXTRUDE_SET_SPEED, _WIPE, _OVERHANG_FAN_START, _OVERHANG_FAN_END diff --git a/src/libslic3r/GCode/RetractWhenCrossingPerimeters.cpp b/src/libslic3r/GCode/RetractWhenCrossingPerimeters.cpp new file mode 100644 index 0000000000..3d3b54d454 --- /dev/null +++ b/src/libslic3r/GCode/RetractWhenCrossingPerimeters.cpp @@ -0,0 +1,54 @@ +#include "../ClipperUtils.hpp" +#include "../Layer.hpp" +#include "../Polyline.hpp" + +#include "RetractWhenCrossingPerimeters.hpp" + +namespace Slic3r { + +bool RetractWhenCrossingPerimeters::travel_inside_internal_regions(const Layer &layer, const Polyline &travel) +{ + if (m_layer != &layer) { + // Update cache. + m_layer = &layer; + m_internal_islands.clear(); + m_aabbtree_internal_islands.clear(); + // Collect expolygons of internal slices. + for (const LayerRegion *layerm : layer.regions()) + for (const Surface &surface : layerm->get_slices_simplified().surfaces) + if (surface.is_internal()) + m_internal_islands.emplace_back(&surface.expolygon); + // Calculate bounding boxes of internal slices. + std::vector bboxes; + bboxes.reserve(m_internal_islands.size()); + for (size_t i = 0; i < m_internal_islands.size(); ++ i) + bboxes.emplace_back(i, get_extents(*m_internal_islands[i])); + // Build AABB tree over bounding boxes of internal slices. + m_aabbtree_internal_islands.build_modify_input(bboxes); + } + + BoundingBox bbox_travel = get_extents(travel); + AABBTree::BoundingBox bbox_travel_eigen{ bbox_travel.min, bbox_travel.max }; + int result = -1; + bbox_travel.offset(SCALED_EPSILON); + AABBTreeIndirect::traverse(m_aabbtree_internal_islands, + [&bbox_travel_eigen](const AABBTree::Node &node) { + return bbox_travel_eigen.intersects(node.bbox); + }, + [&travel, &bbox_travel, &result, &islands = m_internal_islands](const AABBTree::Node &node) { + assert(node.is_leaf()); + assert(node.is_valid()); + Polygons clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(*islands[node.idx], bbox_travel); + if (diff_pl(travel, clipped).empty()) { + // Travel path is completely inside an "internal" island. Don't retract. + result = int(node.idx); + // Stop traversal. + return false; + } + // Continue traversal. + return true; + }); + return result != -1; +} + +} // namespace Slic3r diff --git a/src/libslic3r/GCode/RetractWhenCrossingPerimeters.hpp b/src/libslic3r/GCode/RetractWhenCrossingPerimeters.hpp new file mode 100644 index 0000000000..fb624d7f90 --- /dev/null +++ b/src/libslic3r/GCode/RetractWhenCrossingPerimeters.hpp @@ -0,0 +1,32 @@ +#ifndef slic3r_RetractWhenCrossingPerimeters_hpp_ +#define slic3r_RetractWhenCrossingPerimeters_hpp_ + +#include + +#include "../AABBTreeIndirect.hpp" + +namespace Slic3r { + +// Forward declarations. +class ExPolygon; +class Layer; +class Polyline; + +class RetractWhenCrossingPerimeters +{ +public: + bool travel_inside_internal_regions(const Layer &layer, const Polyline &travel); + +private: + // Last object layer visited, for which a cache of internal islands was created. + const Layer *m_layer; + // Internal islands only, referencing data owned by m_layer->regions()->surfaces(). + std::vector m_internal_islands; + // Search structure over internal islands. + using AABBTree = AABBTreeIndirect::Tree<2, coord_t>; + AABBTree m_aabbtree_internal_islands; +}; + +} // namespace Slic3r + +#endif // slic3r_RetractWhenCrossingPerimeters_hpp_ diff --git a/src/libslic3r/Layer.hpp b/src/libslic3r/Layer.hpp index 305016a789..0db7fc58c6 100644 --- a/src/libslic3r/Layer.hpp +++ b/src/libslic3r/Layer.hpp @@ -30,6 +30,9 @@ public: const Layer* layer() const { return m_layer; } const PrintRegion& region() const { return *m_region; } + const SurfaceCollection& get_slices() const { return slices; } + const SurfaceCollection& get_slices_simplified() const { return slices_simplified; } + // collection of surfaces generated by slicing the original geometry // divided by type top/bottom/internal SurfaceCollection slices; @@ -170,11 +173,6 @@ public: for (const LayerRegion *layerm : m_regions) if (layerm->slices.any_internal_contains(item)) return true; return false; } - //BBS: only be used in gcode export when reduce_infill_retraction is enabled - template bool any_internal_region_slmplify_slice_contains(const T& item) const { - for (const LayerRegion* layerm : m_regions) if (layerm->slices_simplified.any_internal_contains(item)) return true; - return false; - } template bool any_bottom_region_slice_contains(const T &item) const { for (const LayerRegion *layerm : m_regions) if (layerm->slices.any_bottom_contains(item)) return true; return false; diff --git a/src/libslic3r/SLAPrintSteps.cpp b/src/libslic3r/SLAPrintSteps.cpp index 7dae5072ed..ba6fb7032e 100644 --- a/src/libslic3r/SLAPrintSteps.cpp +++ b/src/libslic3r/SLAPrintSteps.cpp @@ -335,6 +335,7 @@ remove_unconnected_vertices(const indexed_triangle_set &its) // Drill holes into the hollowed/original mesh. void SLAPrint::Steps::drill_holes(SLAPrintObject &po) { + /* bool needs_drilling = ! po.m_model_object->sla_drain_holes.empty(); bool is_hollowed = (po.m_hollowing_data && po.m_hollowing_data->interior && @@ -465,6 +466,7 @@ void SLAPrint::Steps::drill_holes(SLAPrintObject &po) if (hole_fail) po.active_step_add_warning(PrintStateBase::WarningLevel::NON_CRITICAL, L("Failed to drill some holes into the model")); + */ } // The slicing will be performed on an imaginary 1D grid which starts from From db86541df79d3c2765f2ab6076210d1d95359f0e Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Mon, 6 Mar 2023 16:11:52 +0800 Subject: [PATCH 042/339] FIX: show label function display chinese incorrectly STUDIO-2097 https://jira.bambooolab.com/browse/STUDIO-2097 Change-Id: Ia2e213b08e184c0363a30967f84e7cb5e3bb3642 --- src/slic3r/GUI/GLCanvas3D.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index b661ea5666..d8b8a7526f 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -796,8 +796,6 @@ void GLCanvas3D::Labels::render(const std::vector& sorted_ imgui.begin(owner.title, ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoMove); ImGui::BringWindowToDisplayFront(ImGui::GetCurrentWindow()); float win_w = ImGui::GetWindowWidth(); - float label_len = imgui.calc_text_size(owner.label).x; - ImGui::SetCursorPosX(0.5f * (win_w - label_len)); ImGui::AlignTextToFramePadding(); imgui.text(owner.label); From 1278cbf461442fd0c0962c93c90dfc29683d9dd7 Mon Sep 17 00:00:00 2001 From: "salt.wei" Date: Wed, 8 Mar 2023 19:51:25 +0800 Subject: [PATCH 043/339] ENH: remove tbb simplify in gcode export Useless after importing AABB tree. Signed-off-by: salt.wei Change-Id: Iaec9bef4a2a6bc4d097c6fd75720cb69d9cf314f --- src/libslic3r/GCode.cpp | 16 ---------------- .../GCode/RetractWhenCrossingPerimeters.cpp | 2 +- src/libslic3r/Layer.hpp | 7 ------- src/libslic3r/libslic3r.h | 2 -- 4 files changed, 1 insertion(+), 26 deletions(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 279eeae57a..96058aa5a3 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -1461,22 +1461,6 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato m_enable_cooling_markers = true; this->apply_print_config(print.config()); - //BBS: generate simplified_slices if necessary - if (m_config.reduce_infill_retraction) { - for (auto object : print.objects()) { - tbb::parallel_for( - tbb::blocked_range(0, object->layers().size()), - [object](const tbb::blocked_range& range) { - for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++ layer_idx) { - Layer* layer = object->layers()[layer_idx]; - if (layer) - layer->simplify_reagon_final_slices(); - } - } - ); - } - } - //m_volumetric_speed = DoExport::autospeed_volumetric_limit(print); print.throw_if_canceled(); diff --git a/src/libslic3r/GCode/RetractWhenCrossingPerimeters.cpp b/src/libslic3r/GCode/RetractWhenCrossingPerimeters.cpp index 3d3b54d454..776091adfb 100644 --- a/src/libslic3r/GCode/RetractWhenCrossingPerimeters.cpp +++ b/src/libslic3r/GCode/RetractWhenCrossingPerimeters.cpp @@ -15,7 +15,7 @@ bool RetractWhenCrossingPerimeters::travel_inside_internal_regions(const Layer & m_aabbtree_internal_islands.clear(); // Collect expolygons of internal slices. for (const LayerRegion *layerm : layer.regions()) - for (const Surface &surface : layerm->get_slices_simplified().surfaces) + for (const Surface &surface : layerm->get_slices().surfaces) if (surface.is_internal()) m_internal_islands.emplace_back(&surface.expolygon); // Calculate bounding boxes of internal slices. diff --git a/src/libslic3r/Layer.hpp b/src/libslic3r/Layer.hpp index 0db7fc58c6..74a7d6291f 100644 --- a/src/libslic3r/Layer.hpp +++ b/src/libslic3r/Layer.hpp @@ -31,13 +31,10 @@ public: const PrintRegion& region() const { return *m_region; } const SurfaceCollection& get_slices() const { return slices; } - const SurfaceCollection& get_slices_simplified() const { return slices_simplified; } // collection of surfaces generated by slicing the original geometry // divided by type top/bottom/internal SurfaceCollection slices; - //BBS: simplifed final slices data to accelerate - SurfaceCollection slices_simplified; // Backed up slices before they are split into top/bottom/internal. // Only backed up for multi-region layers or layers with elephant foot compensation. //FIXME Review whether not to simplify the code by keeping the raw_slices all the time. @@ -78,8 +75,6 @@ public: void slices_to_fill_surfaces_clipped(); void prepare_fill_surfaces(); //BBS - inline void simplify_final_slices() { this->slices_simplified.set(this->slices); this->slices_simplified.simplify(scaled(SIMPLIFY_SLICES_RESOLUTION));} - //BBS void make_perimeters(const SurfaceCollection &slices, SurfaceCollection* fill_surfaces, ExPolygons* fill_no_overlap); void process_external_surfaces(const Layer *lower_layer, const Polygons *lower_layer_covered); double infill_area_threshold() const; @@ -196,8 +191,6 @@ public: void simplify_extrusion_path() { for (auto layerm : m_regions) layerm->simplify_extrusion_entity();} //BBS: this function calculate the maximum void grid area of sparse infill of this layer. Just estimated value coordf_t get_sparse_infill_max_void_area(); - //BBS - inline void simplify_reagon_final_slices() { for (auto* region : this->m_regions) region->simplify_final_slices();} protected: friend class PrintObject; diff --git a/src/libslic3r/libslic3r.h b/src/libslic3r/libslic3r.h index f482184945..8589d705fb 100644 --- a/src/libslic3r/libslic3r.h +++ b/src/libslic3r/libslic3r.h @@ -76,8 +76,6 @@ static constexpr double BRIDGE_INFILL_MARGIN = 1; //inline coord_t scale_(coordf_t v) { return coord_t(floor(v / SCALING_FACTOR + 0.5f)); } #define scale_(val) ((val) / SCALING_FACTOR) #define unscale_(val) ((val) * SCALING_FACTOR) -//BBS -static constexpr double SIMPLIFY_SLICES_RESOLUTION = 0.1; //BBS: BBS only support relative E and can't been changed by user at the moment. because //BBS need to support skip object when printing. From a8488f65b2f69acbb21d6944a0a1c139d518edc3 Mon Sep 17 00:00:00 2001 From: "qing.zhang" Date: Wed, 8 Mar 2023 16:40:11 +0800 Subject: [PATCH 044/339] ENH: add Bambu PET-CF & modify slow down layer time of Bambu PLA-CF Signed-off-by: qing.zhang Change-Id: I8396840eca762def30cb794f4c29808f2f71adfa --- resources/profiles/BBL.json | 10 +++- .../BBL/filament/Bambu PET-CF @BBL X1C.json | 11 ++-- .../BBL/filament/Bambu PET-CF @base.json | 59 +++++++++++++++++-- .../BBL/filament/Bambu PETG-CF @base.json | 32 +++++++++- .../BBL/filament/Bambu PLA-CF @BBL X1C.json | 3 - .../BBL/filament/Bambu PLA-CF @base.json | 3 + .../BBL/filament/Generic PETG-CF @base.json | 32 +++++++++- .../filament/P1P/Bambu PET-CF @BBL P1P.json | 25 ++++++++ .../filament/P1P/Bambu PLA-CF @BBL P1P.json | 3 - 9 files changed, 160 insertions(+), 18 deletions(-) create mode 100644 resources/profiles/BBL/filament/P1P/Bambu PET-CF @BBL P1P.json diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index dff263ccb5..8cd6772411 100644 --- a/resources/profiles/BBL.json +++ b/resources/profiles/BBL.json @@ -1,7 +1,7 @@ { "name": "Bambulab", "url": "http://www.bambulab.com/Parameters/vendor/BBL.json", - "version": "01.05.00.18", + "version": "01.05.00.19", "force_update": "0", "description": "the initial version of BBL configurations", "machine_model_list": [ @@ -820,6 +820,14 @@ { "name":"Bambu PLA-CF @BBL P1P 0.8 nozzle", "sub_path":"filament/P1P/Bambu PLA-CF @BBL P1P 0.8 nozzle.json" + }, + { + "name": "Bambu PET-CF @BBL X1C", + "sub_path": "filament/Bambu PET-CF @BBL X1C.json" + }, + { + "name": "Bambu PET-CF @BBL P1P", + "sub_path": "filament/P1P/Bambu PET-CF @BBL P1P.json" } ], "machine_list": [ diff --git a/resources/profiles/BBL/filament/Bambu PET-CF @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PET-CF @BBL X1C.json index cee8aaa10d..d44d01115d 100644 --- a/resources/profiles/BBL/filament/Bambu PET-CF @BBL X1C.json +++ b/resources/profiles/BBL/filament/Bambu PET-CF @BBL X1C.json @@ -1,6 +1,6 @@ { "type": "filament", - "setting_id": "GFST00", + "setting_id": "GFST01", "name": "Bambu PET-CF @BBL X1C", "from": "system", "instantiation": "true", @@ -11,9 +11,6 @@ "reduce_fan_stop_start_freq": [ "0" ], - "fan_cooling_layer_time": [ - "4" - ], "slow_down_min_speed": [ "20" ], @@ -22,6 +19,10 @@ ], "compatible_printers": [ "Bambu Lab X1 Carbon 0.4 nozzle", - "Bambu Lab X1 0.4 nozzle" + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1 0.8 nozzle" ] } diff --git a/resources/profiles/BBL/filament/Bambu PET-CF @base.json b/resources/profiles/BBL/filament/Bambu PET-CF @base.json index 1b8dc18c4b..fbc45a3fb6 100644 --- a/resources/profiles/BBL/filament/Bambu PET-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PET-CF @base.json @@ -1,10 +1,55 @@ { "type": "filament", - "filament_id": "GFT00", + "filament_id": "GFT01", "name": "Bambu PET-CF @base", "from": "system", "instantiation": "false", "inherits": "fdm_filament_pet", + "overhang_fan_threshold": [ + "0%" + ], + "overhang_fan_speed": [ + "40" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "slow_down_layer_time": [ + "2" + ], + "fan_cooling_layer_time": [ + "5" + ], + "cool_plate_temp" : [ + "0" + ], + "eng_plate_temp" : [ + "80" + ], + "hot_plate_temp" : [ + "100" + ], + "textured_plate_temp" : [ + "100" + ], + "cool_plate_temp_initial_layer" : [ + "0" + ], + "eng_plate_temp_initial_layer" : [ + "80" + ], + "hot_plate_temp_initial_layer" : [ + "100" + ], + "textured_plate_temp_initial_layer" : [ + "100" + ], "required_nozzle_HRC": [ "40" ], @@ -14,16 +59,22 @@ "filament_type": [ "PET-CF" ], + "filament_cost": [ + "84.99" + ], + "filament_density": [ + "1.29" + ], "nozzle_temperature_range_low": [ "260" ], "nozzle_temperature_range_high": [ - "300" + "290" ], "nozzle_temperature_initial_layer": [ - "280" + "270" ], "nozzle_temperature": [ - "280" + "270" ] } diff --git a/resources/profiles/BBL/filament/Bambu PETG-CF @base.json b/resources/profiles/BBL/filament/Bambu PETG-CF @base.json index 7bdf4dd0bb..da424e2826 100644 --- a/resources/profiles/BBL/filament/Bambu PETG-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PETG-CF @base.json @@ -5,6 +5,36 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_pet", + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "90" + ], + "cool_plate_temp" : [ + "0" + ], + "eng_plate_temp" : [ + "70" + ], + "hot_plate_temp" : [ + "70" + ], + "textured_plate_temp" : [ + "70" + ], + "cool_plate_temp_initial_layer" : [ + "0" + ], + "eng_plate_temp_initial_layer" : [ + "70" + ], + "hot_plate_temp_initial_layer" : [ + "70" + ], + "textured_plate_temp_initial_layer" : [ + "70" + ], "required_nozzle_HRC": [ "40" ], @@ -30,7 +60,7 @@ "34.99" ], "filament_density": [ - "1.04" + "1.25" ], "fan_max_speed": [ "30" diff --git a/resources/profiles/BBL/filament/Bambu PLA-CF @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PLA-CF @BBL X1C.json index c93d5803da..a6cd2e53ae 100644 --- a/resources/profiles/BBL/filament/Bambu PLA-CF @BBL X1C.json +++ b/resources/profiles/BBL/filament/Bambu PLA-CF @BBL X1C.json @@ -8,9 +8,6 @@ "filament_max_volumetric_speed": [ "15" ], - "slow_down_layer_time": [ - "2" - ], "nozzle_temperature_initial_layer": [ "230" ], diff --git a/resources/profiles/BBL/filament/Bambu PLA-CF @base.json b/resources/profiles/BBL/filament/Bambu PLA-CF @base.json index 23eea64440..c9d8349c4d 100644 --- a/resources/profiles/BBL/filament/Bambu PLA-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA-CF @base.json @@ -20,6 +20,9 @@ "required_nozzle_HRC": [ "40" ], + "slow_down_layer_time": [ + "8" + ], "nozzle_temperature_range_low": [ "210" ], diff --git a/resources/profiles/BBL/filament/Generic PETG-CF @base.json b/resources/profiles/BBL/filament/Generic PETG-CF @base.json index b836ea162a..605f2a5109 100644 --- a/resources/profiles/BBL/filament/Generic PETG-CF @base.json +++ b/resources/profiles/BBL/filament/Generic PETG-CF @base.json @@ -5,6 +5,36 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_pet", + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "90" + ], + "cool_plate_temp" : [ + "0" + ], + "eng_plate_temp" : [ + "70" + ], + "hot_plate_temp" : [ + "70" + ], + "textured_plate_temp" : [ + "70" + ], + "cool_plate_temp_initial_layer" : [ + "0" + ], + "eng_plate_temp_initial_layer" : [ + "70" + ], + "hot_plate_temp_initial_layer" : [ + "70" + ], + "textured_plate_temp_initial_layer" : [ + "70" + ], "required_nozzle_HRC": [ "40" ], @@ -30,7 +60,7 @@ "34.99" ], "filament_density": [ - "1.04" + "1.25" ], "fan_max_speed": [ "30" diff --git a/resources/profiles/BBL/filament/P1P/Bambu PET-CF @BBL P1P.json b/resources/profiles/BBL/filament/P1P/Bambu PET-CF @BBL P1P.json new file mode 100644 index 0000000000..649cda5ae0 --- /dev/null +++ b/resources/profiles/BBL/filament/P1P/Bambu PET-CF @BBL P1P.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "setting_id": "GFST01_10", + "name": "Bambu PET-CF @BBL P1P", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PET-CF @base", + "slow_down_for_layer_cooling": [ + "1" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "slow_down_min_speed": [ + "20" + ], + "slow_down_layer_time": [ + "2" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" +] +} diff --git a/resources/profiles/BBL/filament/P1P/Bambu PLA-CF @BBL P1P.json b/resources/profiles/BBL/filament/P1P/Bambu PLA-CF @BBL P1P.json index 66eca224d2..18536780ed 100644 --- a/resources/profiles/BBL/filament/P1P/Bambu PLA-CF @BBL P1P.json +++ b/resources/profiles/BBL/filament/P1P/Bambu PLA-CF @BBL P1P.json @@ -8,9 +8,6 @@ "filament_max_volumetric_speed": [ "15" ], - "slow_down_layer_time": [ - "2" - ], "hot_plate_temp" : [ "65" ], From cafd8e7f7e8bc07786e1d9a65ae62d1d4d286427 Mon Sep 17 00:00:00 2001 From: "qing.zhang" Date: Thu, 9 Mar 2023 14:18:28 +0800 Subject: [PATCH 045/339] ENH: modify temperature_temp of PET-CF Signed-off-by: qing.zhang Change-Id: I2e361b79620cbc5e7df7d5a657f8b26e285d3538 --- resources/profiles/BBL/filament/Bambu PET-CF @base.json | 3 +++ resources/profiles/BBL/filament/Bambu PETG-CF @base.json | 3 +++ resources/profiles/BBL/filament/Generic PETG-CF @base.json | 3 +++ 3 files changed, 9 insertions(+) diff --git a/resources/profiles/BBL/filament/Bambu PET-CF @base.json b/resources/profiles/BBL/filament/Bambu PET-CF @base.json index fbc45a3fb6..325f991443 100644 --- a/resources/profiles/BBL/filament/Bambu PET-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PET-CF @base.json @@ -5,6 +5,9 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_pet", + "temperature_vitrification": [ + "185" + ], "overhang_fan_threshold": [ "0%" ], diff --git a/resources/profiles/BBL/filament/Bambu PETG-CF @base.json b/resources/profiles/BBL/filament/Bambu PETG-CF @base.json index da424e2826..d037da45d4 100644 --- a/resources/profiles/BBL/filament/Bambu PETG-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PETG-CF @base.json @@ -5,6 +5,9 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_pet", + "temperature_vitrification": [ + "75" + ], "overhang_fan_threshold": [ "25%" ], diff --git a/resources/profiles/BBL/filament/Generic PETG-CF @base.json b/resources/profiles/BBL/filament/Generic PETG-CF @base.json index 605f2a5109..69538b3ae9 100644 --- a/resources/profiles/BBL/filament/Generic PETG-CF @base.json +++ b/resources/profiles/BBL/filament/Generic PETG-CF @base.json @@ -5,6 +5,9 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_pet", + "temperature_vitrification": [ + "75" + ], "overhang_fan_threshold": [ "25%" ], From 4651927869ef9b0b47542fd6ed0d8527bed327da Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Thu, 9 Mar 2023 10:48:22 +0800 Subject: [PATCH 046/339] FIX: CLI: fix the filament_type not correct issue for support-w 1. filament_type not correct in slicedinfo 2. missing serveral information in bbox Change-Id: I0393ebc887591548a5a1d883661b28876b9ede6e --- src/BambuStudio.cpp | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/src/BambuStudio.cpp b/src/BambuStudio.cpp index 4ab0a6e619..55b5f15191 100644 --- a/src/BambuStudio.cpp +++ b/src/BambuStudio.cpp @@ -2101,9 +2101,10 @@ int CLI::run(int argc, char **argv) for (int i = 0; i < plate_data_list.size(); i++) { PlateData *plate_data = plate_data_list[i]; for (auto it = plate_data->slice_filaments_info.begin(); it != plate_data->slice_filaments_info.end(); it++) { - it->type = filament_types?filament_types->get_at(it->id):"PLA"; - it->color = filament_color?filament_color->get_at(it->id):"#FFFFFF"; //it->filament_id = filament_id?filament_id->get_at(it->id):"unknown"; + std::string display_filament_type; + it->type = m_print_config.get_filament_type(display_filament_type, it->id); + it->color = filament_color ? filament_color->get_at(it->id) : "#FFFFFF"; } if (!plate_data->plate_thumbnail.is_valid()) { @@ -2318,9 +2319,36 @@ int CLI::run(int argc, char **argv) PlateBBoxData* plate_bbox = new PlateBBoxData(); std::vector& id_bboxes = plate_bbox->bbox_objs; BoundingBoxf bbox_all; - auto seq_print = m_print_config.option>("print_sequence"); - if ( seq_print && (seq_print->value == PrintSequence::ByObject)) + PrintSequence curr_plate_seq = part_plate->get_print_seq(); + if (curr_plate_seq == PrintSequence::ByDefault) { + auto seq_print = m_print_config.option>("print_sequence"); + if (seq_print && (seq_print->value == PrintSequence::ByObject)) { + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1% print by object, set from global")%(i+1); + plate_bbox->is_seq_print = true; + } + } + else if (curr_plate_seq == PrintSequence::ByObject) { + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1% print by object, set from plate self")%(i+1); plate_bbox->is_seq_print = true; + } + plate_bbox->first_extruder = print->get_tool_ordering().first_extruder(); + //bed type; + BedType plate_bed_type = part_plate->get_bed_type(); + if (plate_bed_type == btDefault) { + auto cur_bed_type = m_print_config.option>("curr_bed_type"); + if (cur_bed_type) { + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1% bed type: %2%, set from global")%(i+1) %cur_bed_type->serialize(); + plate_bbox->bed_type = bed_type_to_gcode_string(cur_bed_type->value); + } + } + else { + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1% bed type: %2%, set from plate self")%(i+1) %plate_bed_type; + plate_bbox->bed_type = bed_type_to_gcode_string(plate_bed_type); + } + // get nozzle diameter + auto opt_nozzle_diameters = m_print_config.option("nozzle_diameter"); + if (opt_nozzle_diameters != nullptr) + plate_bbox->nozzle_diameter = float(opt_nozzle_diameters->get_at(plate_bbox->first_extruder)); auto objects = print->objects(); auto orig = part_plate->get_origin(); @@ -2357,6 +2385,12 @@ int CLI::run(int argc, char **argv) } } plate_bbox->bbox_all = { bbox_all.min.x(),bbox_all.min.y(),bbox_all.max.x(),bbox_all.max.y() }; + + PlateData *plate_data = plate_data_list[i]; + for (auto it = plate_data->slice_filaments_info.begin(); it != plate_data->slice_filaments_info.end(); it++) { + plate_bbox->filament_ids.push_back(it->id); + plate_bbox->filament_colors.push_back(it->color); + } plate_bboxes.push_back(plate_bbox); } From 31f803442245b2d41fe5f081da40c9b447f42e1f Mon Sep 17 00:00:00 2001 From: "salt.wei" Date: Thu, 9 Mar 2023 15:35:23 +0800 Subject: [PATCH 047/339] ENH: force to use . as decimal point "std::cout << float number" is unsafe which may use , as decimal point when switch language. Signed-off-by: salt.wei Change-Id: I8a379117168eab0111dc93987b1d6130a741ade6 --- src/libslic3r/GCode/WipeTower.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index 130496b6c2..c0e88255ca 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -49,7 +49,7 @@ public: { // adds tag for analyzer: std::ostringstream str; - str << ";" << GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Height) << m_layer_height << "\n"; // don't rely on GCodeAnalyzer knowing the layer height - it knows nothing at priming + str << ";" << GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Height) << std::to_string(m_layer_height) << "\n"; // don't rely on GCodeAnalyzer knowing the layer height - it knows nothing at priming str << ";" << GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Role) << ExtrusionEntity::role_to_string(erWipeTower) << "\n"; m_gcode += str.str(); change_analyzer_line_width(line_width); @@ -58,7 +58,7 @@ public: WipeTowerWriter& change_analyzer_line_width(float line_width) { // adds tag for analyzer: std::stringstream str; - str << ";" << GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Width) << line_width << "\n"; + str << ";" << GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Width) << std::to_string(line_width) << "\n"; m_gcode += str.str(); return *this; } From 0c00243cbff073696ab7fd4adf8baa55b943b6ef Mon Sep 17 00:00:00 2001 From: "salt.wei" Date: Fri, 10 Mar 2023 11:39:54 +0800 Subject: [PATCH 048/339] ENH: remove useless code Signed-off-by: salt.wei Change-Id: I1dca5e366c2c681a4137c2187ecc7d59663e3b86 --- src/libslic3r/PrintObjectSlice.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libslic3r/PrintObjectSlice.cpp b/src/libslic3r/PrintObjectSlice.cpp index 9dcdbe044e..e381aabdc8 100644 --- a/src/libslic3r/PrintObjectSlice.cpp +++ b/src/libslic3r/PrintObjectSlice.cpp @@ -737,6 +737,7 @@ void PrintObject::slice() m_layers = new_layers(this, generate_object_layers(m_slicing_params, layer_height_profile)); this->slice_volumes(); m_print->throw_if_canceled(); +#if 0 // Fix the model. //FIXME is this the right place to do? It is done repeateadly at the UI and now here at the backend. std::string warning = fix_slicing_errors(this, m_layers, [this](){ m_print->throw_if_canceled(); }); @@ -746,6 +747,7 @@ void PrintObject::slice() BOOST_LOG_TRIVIAL(info) << warning; this->active_step_add_warning(PrintStateBase::WarningLevel::CRITICAL, warning, PrintStateBase::SlicingReplaceInitEmptyLayers); } +#endif // Update bounding boxes, back up raw slices of complex models. tbb::parallel_for( tbb::blocked_range(0, m_layers.size()), From a11cce7b26bd3c4833474f9f1546e3c80b26351b Mon Sep 17 00:00:00 2001 From: tao wang Date: Wed, 8 Mar 2023 15:06:28 +0800 Subject: [PATCH 049/339] ENH:optimize ams humidity display Change-Id: Ied40225c6618d6961f5fd8c357bb227b512437ea --- src/slic3r/GUI/AmsMappingPopup.cpp | 41 ++++++++++++++------------- src/slic3r/GUI/Widgets/AMSControl.cpp | 5 ++-- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index 0c2c2dfd4f..2b8f551e89 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -772,50 +772,51 @@ AmsHumidityTipPopup::AmsHumidityTipPopup(wxWindow* parent) wxBoxSizer* m_sizer_tips = new wxBoxSizer(wxVERTICAL); m_staticText1 = new Label(this, _L("Cabin humidity")); - m_staticText1->SetForegroundColour(wxColour(0x352F2D)); m_staticText1->SetFont(::Label::Head_13); m_staticText2 = new Label(this, _L("Green means that AMS humidity is normal, orange represent humidity is high, red represent humidity is too high.(Hygrometer: lower the better.)")); m_staticText2->SetFont(::Label::Body_13); - m_staticText2->SetSize(wxSize(FromDIP(360), -1)); - m_staticText2->SetMinSize(wxSize(FromDIP(360), -1)); - m_staticText2->SetMaxSize(wxSize(FromDIP(360), -1)); - m_staticText2->Wrap(FromDIP(360)); + m_staticText2->SetSize(wxSize(FromDIP(357), -1)); + m_staticText2->SetMinSize(wxSize(FromDIP(357), -1)); + m_staticText2->SetMaxSize(wxSize(FromDIP(357), -1)); + m_staticText2->Wrap(FromDIP(357)); m_staticText3 = new Label(this, _L("Desiccant status")); - m_staticText3->SetForegroundColour(wxColour(0x352F2D)); m_staticText3->SetFont(::Label::Head_13); m_staticText4 = new Label(this, _L("A desiccant status lower than two bars indicates that desiccant may be inactive. Please change the desiccant.(The bars: higher the better.)")); m_staticText4->SetFont(::Label::Body_13); - m_staticText4->SetSize(wxSize(FromDIP(360), -1)); - m_staticText4->SetMinSize(wxSize(FromDIP(360), -1)); - m_staticText4->SetMaxSize(wxSize(FromDIP(360), -1)); - m_staticText4->Wrap(FromDIP(360)); + m_staticText4->SetSize(wxSize(FromDIP(357), -1)); + m_staticText4->SetMinSize(wxSize(FromDIP(357), -1)); + m_staticText4->SetMaxSize(wxSize(FromDIP(357), -1)); + m_staticText4->Wrap(FromDIP(357)); - m_sizer_tips->Add(m_staticText1, 0, wxALL, 3); - m_sizer_tips->Add(m_staticText2, 0, wxALL, 3); - m_sizer_tips->Add(m_staticText3, 0, wxALL, 3); - m_sizer_tips->Add(m_staticText4, 0, wxALL, 3); + m_sizer_tips->Add(m_staticText1, 0, wxLEFT|wxRIGHT, 3); + m_sizer_tips->Add(0,0,0,wxTOP,2); + m_sizer_tips->Add(m_staticText2, 0, wxLEFT|wxRIGHT, 3); + m_sizer_tips->Add(0,0,0,wxTOP,8); + m_sizer_tips->Add(m_staticText3, 0, wxLEFT|wxRIGHT, 3); + m_sizer_tips->Add(0,0,0,wxTOP,2); + m_sizer_tips->Add(m_staticText4, 0, wxLEFT|wxRIGHT, 3); m_sizer_body->Add(m_sizer_tips, 0, wxEXPAND, 0); - main_sizer->Add(m_sizer_body, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(30)); + main_sizer->Add(m_sizer_body, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(20)); m_staticText_note = new Label(this, _L("Note: When the lid is open or the desiccant pack is changed, it can take hours or a night to absorb the moisture. Low temperatures also slow down the process. During this time, the indicator may not represent the chamber accurately.")); m_staticText4->SetFont(::Label::Body_13); - m_staticText_note->SetMinSize(wxSize(FromDIP(536), -1)); - m_staticText_note->SetMaxSize(wxSize(FromDIP(536), -1)); - m_staticText_note->Wrap(FromDIP(536)); - main_sizer->Add(m_staticText_note, 0, wxALL | wxLEFT | wxRIGHT, 34); + m_staticText_note->SetMinSize(wxSize(FromDIP(523), -1)); + m_staticText_note->SetMaxSize(wxSize(FromDIP(523), -1)); + m_staticText_note->Wrap(FromDIP(523)); + main_sizer->Add(m_staticText_note, 0, wxALL | wxLEFT | wxRIGHT, 22); m_button_confirm = new Button(this, _L("OK")); - StateColor btn_bg_green(std::pair(wxColour(27, 136, 68), StateColor::Pressed), std::pair(wxColour(0, 174, 66), StateColor::Normal)); + StateColor btn_bg_green(std::pair(wxColour(0, 174, 66), StateColor::Pressed), std::pair(wxColour(0, 174, 66), StateColor::Normal)); m_button_confirm->SetBackgroundColor(btn_bg_green); m_button_confirm->SetBorderColor(wxColour(0, 174, 66)); m_button_confirm->SetTextColor(wxColour(0xFFFFFE)); diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index d9cb7fcd6e..7bbd2a2f6b 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -820,7 +820,7 @@ AMSRoad::AMSRoad(wxWindow *parent, wxWindowID id, Caninfo info, int canindex, in Bind(wxEVT_PAINT, &AMSRoad::paintEvent, this); wxWindow::SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); - Bind(wxEVT_MOTION, [this](wxMouseEvent& e) { + Bind(wxEVT_LEFT_UP, [this](wxMouseEvent& e) { if (m_canindex == 3 && m_show_humidity) { auto mouse_pos = ClientToScreen(e.GetPosition()); auto rect = ClientToScreen(wxPoint(0, 0)); @@ -1940,10 +1940,9 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons Bind(EVT_AMS_SHOW_HUMIDITY_TIPS, [this](wxCommandEvent& evt) { wxPoint img_pos = ClientToScreen(wxPoint(0, 0)); - wxPoint popup_pos(img_pos.x, img_pos.y + GetRect().height); + wxPoint popup_pos(img_pos.x - m_Humidity_tip_popup.GetSize().GetWidth() + FromDIP(150), img_pos.y); m_Humidity_tip_popup.Position(popup_pos, wxSize(0, 0)); m_Humidity_tip_popup.Popup(); - m_Humidity_tip_popup.GetParent()->SetFocus(); }); From 252f035d51ab86d3717ce29f846d7f972eb52729 Mon Sep 17 00:00:00 2001 From: tao wang Date: Mon, 6 Mar 2023 17:20:14 +0800 Subject: [PATCH 050/339] FIX:fixed the wrong radio state of saving preset Change-Id: I9b185b79fd39654decd2cf2aa900b79ac3d23e61 --- src/slic3r/GUI/SavePresetDialog.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/slic3r/GUI/SavePresetDialog.cpp b/src/slic3r/GUI/SavePresetDialog.cpp index 6ddb83e616..85a5ebab93 100644 --- a/src/slic3r/GUI/SavePresetDialog.cpp +++ b/src/slic3r/GUI/SavePresetDialog.cpp @@ -250,6 +250,9 @@ void SavePresetDialog::Item::update() } else { m_radio_user->Enable(); m_radio_project->Enable(); + + m_radio_user->SetValue(!m_save_to_project); + m_radio_project->SetValue(m_save_to_project); } m_valid_label->SetLabel(info_line); From d352677f0822f808c1bcfe2f18991ddffdb55d20 Mon Sep 17 00:00:00 2001 From: tao wang Date: Mon, 27 Feb 2023 10:13:40 +0800 Subject: [PATCH 051/339] ENH:modift the title of options in ams settings Change-Id: Ib5ed8b402713124561c1e1a285b3f1db46d00725 --- src/slic3r/GUI/AMSSetting.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/AMSSetting.cpp b/src/slic3r/GUI/AMSSetting.cpp index b1377aa665..0818f5445e 100644 --- a/src/slic3r/GUI/AMSSetting.cpp +++ b/src/slic3r/GUI/AMSSetting.cpp @@ -163,7 +163,7 @@ void AMSSetting::create() m_checkbox_switch_filament->Bind(wxEVT_TOGGLEBUTTON, &AMSSetting::on_switch_filament, this); m_sizer_switch_filament->Add(m_checkbox_switch_filament, 0, wxTOP, 1); m_sizer_switch_filament->Add(0, 0, 0, wxLEFT, 12); - m_title_switch_filament = new wxStaticText(m_panel_body, wxID_ANY, _L("AMS auto switch filament"), wxDefaultPosition, wxDefaultSize, 0); + m_title_switch_filament = new wxStaticText(m_panel_body, wxID_ANY, _L("AMS filament backup"), wxDefaultPosition, wxDefaultSize, 0); m_title_switch_filament->SetFont(::Label::Head_13); m_title_switch_filament->SetForegroundColour(AMS_SETTING_GREY800); m_title_switch_filament->Wrap(AMS_SETTING_BODY_WIDTH); From cc994a349264dbf323a8cad8e0b08ea8571f2ab4 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Tue, 7 Mar 2023 10:50:17 +0800 Subject: [PATCH 052/339] FIX: [STUDIO-2241] show error dialog later for param value error Change-Id: I16ffc92cb0701b8e3d984b783618549a5b237f70 --- src/slic3r/GUI/GUI.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/GUI.cpp b/src/slic3r/GUI/GUI.cpp index 3765eef2ca..f4d4c51cbc 100644 --- a/src/slic3r/GUI/GUI.cpp +++ b/src/slic3r/GUI/GUI.cpp @@ -221,8 +221,10 @@ void change_opt_value(DynamicPrintConfig& config, const t_config_option_key& opt void show_error(wxWindow* parent, const wxString& message, bool monospaced_font) { - ErrorDialog msg(parent, message, monospaced_font); - msg.ShowModal(); + wxGetApp().CallAfter([=] { + ErrorDialog msg(parent, message, monospaced_font); + msg.ShowModal(); + }); } void show_error(wxWindow* parent, const char* message, bool monospaced_font) From 0f152c635c3f613dc7c4c340f53257ef143e5462 Mon Sep 17 00:00:00 2001 From: "tao.jin" Date: Fri, 10 Mar 2023 10:11:56 +0800 Subject: [PATCH 053/339] FIX: [STUDIO-169] handle text baseline on Mac Change-Id: I13bde2dcd6d19107f5fe6fb66aa35d2aa55ab03d --- src/slic3r/GUI/Widgets/Button.cpp | 27 +++++++++++++++++++++------ src/slic3r/GUI/Widgets/Button.hpp | 4 +++- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/slic3r/GUI/Widgets/Button.cpp b/src/slic3r/GUI/Widgets/Button.cpp index 6356eb63a6..37709e9772 100644 --- a/src/slic3r/GUI/Widgets/Button.cpp +++ b/src/slic3r/GUI/Widgets/Button.cpp @@ -65,6 +65,14 @@ void Button::SetLabel(const wxString& label) Refresh(); } +bool Button::SetFont(const wxFont& font) +{ + wxWindow::SetFont(font); + messureSize(); + Refresh(); + return true; +} + void Button::SetIcon(const wxString& icon) { if (!icon.IsEmpty()) { @@ -166,7 +174,7 @@ void Button::render(wxDC& dc) dc.SetBrush(*wxTRANSPARENT_BRUSH); // calc content size wxSize szIcon; - wxSize szContent = textSize; + wxSize szContent = textSize.GetSize(); ScalableBitmap icon; if (m_selected || ((states & (int)StateColor::State::Hovered) != 0)) @@ -205,11 +213,18 @@ void Button::render(wxDC& dc) } auto text = GetLabel(); if (!text.IsEmpty()) { - if (pt.x + textSize.x > size.x) + if (pt.x + textSize.width > size.x) text = wxControl::Ellipsize(text, dc, wxELLIPSIZE_END, size.x - pt.x); - pt.y += (rcContent.height - textSize.y) / 2; - dc.SetFont(GetFont()); + pt.y += (rcContent.height - textSize.height) / 2; dc.SetTextForeground(text_color.colorForStates(states)); +#if 0 + dc.SetBrush(*wxLIGHT_GREY); + dc.SetPen(wxPen(*wxLIGHT_GREY)); + dc.DrawRectangle(pt, textSize.GetSize()); +#endif +#ifdef __WXOSX__ + pt.y -= textSize.x / 2; +#endif dc.DrawText(text, pt); } } @@ -217,12 +232,12 @@ void Button::render(wxDC& dc) void Button::messureSize() { wxClientDC dc(this); - textSize = dc.GetTextExtent(GetLabel()); + dc.GetTextExtent(GetLabel(), &textSize.width, &textSize.height, &textSize.x, &textSize.y); if (minSize.GetWidth() > 0) { wxWindow::SetMinSize(minSize); return; } - wxSize szContent = textSize; + wxSize szContent = textSize.GetSize(); if (this->active_icon.bmp().IsOk()) { if (szContent.y > 0) { //BBS norrow size between text and icon diff --git a/src/slic3r/GUI/Widgets/Button.hpp b/src/slic3r/GUI/Widgets/Button.hpp index 56e46ca8f3..100b430e6d 100644 --- a/src/slic3r/GUI/Widgets/Button.hpp +++ b/src/slic3r/GUI/Widgets/Button.hpp @@ -6,7 +6,7 @@ class Button : public StaticBox { - wxSize textSize; + wxRect textSize; wxSize minSize; // set by outer wxSize paddingSize; ScalableBitmap active_icon; @@ -30,6 +30,8 @@ public: void SetLabel(const wxString& label) override; + bool SetFont(const wxFont& font) override; + void SetIcon(const wxString& icon); void SetInactiveIcon(const wxString& icon); From 670114c1b3eb995bcf6ff3a386daf4409a397477 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Tue, 7 Mar 2023 20:07:42 +0800 Subject: [PATCH 054/339] FIX: [STUDIO-2289] impl processname on linux Change-Id: I0acb5e002b5c945bb8ca6272ad95d602fde17cfb --- src/libslic3r/utils.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/utils.cpp b/src/libslic3r/utils.cpp index 46b9c111de..15bca1f0b2 100644 --- a/src/libslic3r/utils.cpp +++ b/src/libslic3r/utils.cpp @@ -37,6 +37,7 @@ #include #include #include + #include #endif #endif @@ -1150,7 +1151,16 @@ std::string get_process_name(int pid) while (auto q = strchr(p + 1, '/')) p = q; return p; #else - return {}; + char pathbuf[512] = {0}; + char proc_path[32] = "/proc/self/exe"; + if (pid != 0) { snprintf(proc_path, sizeof(proc_path), "/proc/%d/exe", pid); } + if (readlink(proc_path, pathbuf, sizeof(pathbuf)) < 0) { + perror(NULL); + return {}; + } + char *p = pathbuf; + while (auto q = strchr(p + 1, '/')) p = q; + return p; #endif } From 89fc178dd0a037ae5cfa95ae15b5c45917598e72 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Wed, 8 Mar 2023 14:32:19 +0800 Subject: [PATCH 055/339] FIX: [STUDIO-2425] default filament color Change-Id: I85871885e5e6976e6479410a93a5f14ccd61a8cd --- src/libslic3r/PresetBundle.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 04aca8bac6..b7b7160040 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -1306,7 +1306,7 @@ void PresetBundle::load_selections(AppConfig &config, const PresetPreferences& p if (config.has("presets", "filament_colors")) { boost::algorithm::split(filament_colors, config.get("presets", "filament_colors"), boost::algorithm::is_any_of(",")); } - filament_colors.resize(filament_presets.size()); + filament_colors.resize(filament_presets.size(), "#00AE42"); project_config.option("filament_colour")->values = filament_colors; std::vector matrix; if (config.has("presets", "flush_volumes_matrix")) { From bd29ac769c52cd4656b8e65074330ee97d059e79 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Tue, 7 Mar 2023 19:05:10 +0800 Subject: [PATCH 056/339] FIX: [STUDIO-2295] update dynamic filament list on color change Change-Id: I6a90e3ed6007b41ea38b50fac96b929d058dddfa --- src/slic3r/GUI/Plater.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index a5ff0443d8..0d9ee3c2c7 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -10184,6 +10184,7 @@ void Plater::on_config_change(const DynamicPrintConfig &config) if (update_filament_colors_in_full_config()) { p->sidebar->obj_list()->update_filament_colors(); + dynamic_filament_list.update(); continue; } } From db65fd6e834aabef3eeda493042ec5e33772fcd4 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Wed, 8 Mar 2023 15:37:46 +0800 Subject: [PATCH 057/339] FIX: [STUDIO-1940] hide edit ctrl on scroll in ObjectList Change-Id: I9936ecff241d468f14e3dda0c12e4458cad8c237 --- src/slic3r/GUI/GUI_ObjectList.cpp | 6 +++++- src/slic3r/Utils/MacDarkMode.mm | 23 ++++++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 104dc40003..587d4dc33a 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -265,7 +265,8 @@ ObjectList::ObjectList(wxWindow* parent) : this->CallAfter([this]() { ensure_current_item_visible(); }); #endif e.Skip(); - })); + })); + } ObjectList::~ObjectList() @@ -4925,6 +4926,9 @@ void ObjectList::OnEditingStarted(wxDataViewEvent &event) if (col == colName) // TODO: for colName editing, disable shortcuts SetAcceleratorTable(wxNullAcceleratorTable); } +#ifdef __WXOSX__ + SetCustomRendererPtr(dynamic_cast(renderer)); +#endif #endif //__WXMSW__ } diff --git a/src/slic3r/Utils/MacDarkMode.mm b/src/slic3r/Utils/MacDarkMode.mm index 10248fd0fa..e539053c1d 100644 --- a/src/slic3r/Utils/MacDarkMode.mm +++ b/src/slic3r/Utils/MacDarkMode.mm @@ -208,7 +208,7 @@ void openFolderForFile(wxString const & file) @end -/* edit column for wxTableView */ +/* edit column for wxCocoaOutlineView */ #include #include @@ -216,8 +216,20 @@ void openFolderForFile(wxString const & file) @implementation wxCocoaOutlineView (Edit) +bool addObserver = false; + - (BOOL)outlineView: (NSOutlineView*) view shouldEditTableColumn:(nullable NSTableColumn *)tableColumn item:(nonnull id)item { + NSClipView * clipView = [[self enclosingScrollView] contentView]; + if (!addObserver) { + addObserver = true; + clipView.postsBoundsChangedNotifications = YES; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(synchronizedViewContentBoundsDidChange:) + name:NSViewBoundsDidChangeNotification + object:clipView]; + } + wxDataViewColumn* const col((wxDataViewColumn *)[tableColumn getColumnPointer]); wxDataViewItem item2([static_cast(item) pointer]); @@ -227,9 +239,18 @@ void openFolderForFile(wxString const & file) dvc->GetEventHandler()->ProcessEvent( event ); if( !event.IsAllowed() ) return NO; + return YES; } +- (void)synchronizedViewContentBoundsDidChange:(NSNotification *)notification +{ + wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl(); + wxDataViewCustomRenderer * r = dvc->GetCustomRendererPtr(); + if (r) + r->FinishEditing(); +} + @end /* Font for wxTextCtrl */ From 9f3a89320bb1cdbb932b3a59d14f825f7561455e Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Thu, 9 Mar 2023 17:09:30 +0800 Subject: [PATCH 058/339] FIX: [STUDIO-1033] rm webview script handler on webview destory Change-Id: If1465ba6bf997bf17b8a33bc33d0f20d34fcbdc7 --- src/slic3r/GUI/MainFrame.cpp | 6 +++--- src/slic3r/GUI/MediaPlayCtrl.cpp | 4 ++-- src/slic3r/GUI/Widgets/WebView.cpp | 6 +++++- src/slic3r/GUI/wxMediaCtrl2.cpp | 8 ++++---- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index e755ff4da8..0550f8ac4c 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -2349,7 +2349,7 @@ void MainFrame::init_menubar_as_editor() // } // case ConfigMenuPreferences: // { -// wxGetApp().CallAfter([this] { +// CallAfter([this] { // PreferencesDialog dlg(this); // dlg.ShowModal(); //#if ENABLE_GCODE_LINES_ID_IN_H_SLIDER @@ -2386,7 +2386,7 @@ void MainFrame::init_menubar_as_editor() // Slic3r::GUI::about(); // break; // case BambuStudioMenuPreferences: - // wxGetApp().CallAfter([this] { + // CallAfter([this] { // PreferencesDialog dlg(this); // dlg.ShowModal(); //#if ENABLE_GCODE_LINES_ID_IN_H_SLIDER @@ -3030,7 +3030,7 @@ void MainFrame::open_recent_project(size_t file_id, wxString const & filename) file_id = m_recent_projects.FindFileInHistory(filename); } if (wxFileExists(filename)) { - wxGetApp().CallAfter([this, filename] { + CallAfter([this, filename] { if (wxGetApp().can_load_project()) m_plater->load_project(filename); }); diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp index 407e89530f..797e12be4c 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.cpp +++ b/src/slic3r/GUI/MediaPlayCtrl.cpp @@ -311,7 +311,7 @@ void MediaPlayCtrl::ToggleStream() { return std::make_shared(pri); } void on_finish() override { - wxGetApp().CallAfter([ctrl = this->ctrl] { ctrl->ToggleStream(); }); + ctrl->CallAfter([ctrl = this->ctrl] { ctrl->ToggleStream(); }); EndModal(wxID_CLOSE); } }; @@ -585,7 +585,7 @@ void wxMediaCtrl2::DoSetSize(int x, int y, int width, int height, int sizeFlags) if (maxHeight != GetMaxHeight()) { // BOOST_LOG_TRIVIAL(info) << "wxMediaCtrl2::DoSetSize: width: " << width << ", height: " << height << ", maxHeight: " << maxHeight; SetMaxSize({-1, maxHeight}); - Slic3r::GUI::wxGetApp().CallAfter([this] { + CallAfter([this] { if (auto p = GetParent()) { p->Layout(); p->Refresh(); diff --git a/src/slic3r/GUI/Widgets/WebView.cpp b/src/slic3r/GUI/Widgets/WebView.cpp index 59b1a866ac..ed1c30067a 100644 --- a/src/slic3r/GUI/Widgets/WebView.cpp +++ b/src/slic3r/GUI/Widgets/WebView.cpp @@ -180,14 +180,18 @@ wxWebView* WebView::CreateWebView(wxWindow * parent, wxString const & url) Slic3r::GUI::WKWebView_setTransparentBackground(wkWebView); #endif #ifndef __WIN32__ - Slic3r::GUI::wxGetApp().CallAfter([webView] { + webView->CallAfter([webView] { #endif BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": begin to add script message handler for wx."; Slic3r::GUI::wxGetApp().set_adding_script_handler(true); + webView->Bind(wxEVT_DESTROY, [webView] (auto & e) { + webView->RemoveScriptMessageHandler("wx"); + }); if (!webView->AddScriptMessageHandler("wx")) wxLogError("Could not add script message handler"); Slic3r::GUI::wxGetApp().set_adding_script_handler(false); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": finished add script message handler for wx."; + #ifndef __WIN32__ }); #endif diff --git a/src/slic3r/GUI/wxMediaCtrl2.cpp b/src/slic3r/GUI/wxMediaCtrl2.cpp index 6ef78eec61..fd792c9c79 100644 --- a/src/slic3r/GUI/wxMediaCtrl2.cpp +++ b/src/slic3r/GUI/wxMediaCtrl2.cpp @@ -43,7 +43,7 @@ void wxMediaCtrl2::Load(wxURI url) { #ifdef __WIN32__ if (m_imp == nullptr) { - Slic3r::GUI::wxGetApp().CallAfter([] { + CallAfter([] { auto res = wxMessageBox(_L("Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?"), _L("Error"), wxOK | wxCANCEL); if (res == wxOK) { wxString url = IsWindows10OrGreater() @@ -73,7 +73,7 @@ void wxMediaCtrl2::Load(wxURI url) boost::filesystem::path data_dir_path(data_dir_str); auto dll_path = data_dir_path / "plugins" / "BambuSource.dll"; if (boost::filesystem::exists(dll_path)) { - Slic3r::GUI::wxGetApp().CallAfter( + CallAfter( [dll_path] { int res = wxMessageBox(_L("BambuSource has not correctly been registered for media playing! Press Yes to re-register it."), _L("Error"), wxYES_NO); if (res == wxYES) { @@ -82,7 +82,7 @@ void wxMediaCtrl2::Load(wxURI url) } }); } else { - Slic3r::GUI::wxGetApp().CallAfter([] { + CallAfter([] { wxMessageBox(_L("Missing BambuSource component registered for media playing! Please re-install BambuStutio or seek after-sales help."), _L("Error"), wxOK); }); } @@ -131,7 +131,7 @@ void wxMediaCtrl2::Load(wxURI url) } if (!hasplugins) { - Slic3r::GUI::wxGetApp().CallAfter([] { + CallAfter([] { wxMessageBox(_L("Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Bambu Studio?)"), _L("Error"), wxOK); }); m_error = 101; From c65a5f8bf5177a35e52810e431dd361bca32b8d4 Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Wed, 8 Mar 2023 11:27:26 +0800 Subject: [PATCH 059/339] ENH: thumbnail: add top_view thumbnails and picking thumbnails 1. add top view thumbnail for each plate 2. add picking thumbnails for each plate 3. save model object id for picking Change-Id: I1d7f6ade22726ff12c282cb12e4a78e6b444a070 --- src/BambuStudio.cpp | 332 +++++++++++++++++++++++++------ src/BambuStudio.hpp | 3 +- src/libslic3r/Format/bbs_3mf.cpp | 199 +++++++++++++----- src/libslic3r/Format/bbs_3mf.hpp | 13 +- src/libslic3r/Model.hpp | 3 +- src/libslic3r/Print.cpp | 33 +-- src/libslic3r/PrintConfig.cpp | 6 + src/libslic3r/Utils.hpp | 1 + src/slic3r/GUI/3DScene.cpp | 8 +- src/slic3r/GUI/3DScene.hpp | 5 +- src/slic3r/GUI/GLCanvas3D.cpp | 163 +++++++++++---- src/slic3r/GUI/GLCanvas3D.hpp | 18 +- src/slic3r/GUI/PartPlate.cpp | 47 ++++- src/slic3r/GUI/PartPlate.hpp | 11 +- src/slic3r/GUI/Plater.cpp | 69 ++++++- 15 files changed, 716 insertions(+), 195 deletions(-) diff --git a/src/BambuStudio.cpp b/src/BambuStudio.cpp index 55b5f15191..ba8baff121 100644 --- a/src/BambuStudio.cpp +++ b/src/BambuStudio.cpp @@ -372,17 +372,18 @@ int CLI::run(int argc, char **argv) /*BOOST_LOG_TRIVIAL(info) << "begin to setup params, argc=" << argc << std::endl; for (int index=0; index < argc; index++) BOOST_LOG_TRIVIAL(info) << "index="<< index <<", arg is "<< argv[index] <setup(debug_argc, debug_argv))*/ if (!this->setup(argc, argv)) @@ -412,11 +413,13 @@ int CLI::run(int argc, char **argv) bool translate_old = false; int current_width, current_depth, current_height; - const std::vector &load_configs = m_config.option("load_settings", true)->values; + const std::vector &load_configs = m_config.option("load_settings", true)->values; //BBS: always use ForwardCompatibilitySubstitutionRule::Enable //const ForwardCompatibilitySubstitutionRule config_substitution_rule = m_config.option>("config_compatibility", true)->value; const ForwardCompatibilitySubstitutionRule config_substitution_rule = ForwardCompatibilitySubstitutionRule::Enable; - const std::vector &load_filaments = m_config.option("load_filaments", true)->values; + const std::vector &load_filaments = m_config.option("load_filaments", true)->values; + const std::vector &skip_objects = m_config.option("skip_objects", true)->values; + bool need_skip = (skip_objects.size() > 0)?true:false; if (start_gui) { BOOST_LOG_TRIVIAL(info) << "no action, start gui directly" << std::endl; @@ -1029,7 +1032,7 @@ int CLI::run(int argc, char **argv) boost::nowide::cerr << __FUNCTION__<<": can not found option " <def(). @@ -1218,11 +1223,7 @@ int CLI::run(int argc, char **argv) } ConfigOptionVectorBase* opt_vec_dst = static_cast(opt); const ConfigOptionVectorBase* opt_vec_src = static_cast(source_opt); - if (opt_key == "compatible_prints" || opt_key == "compatible_printers" || opt_key == "model_id" || opt_key == "dev_model_name" || opt_key == "filament_settings_id") - continue; - else { - opt_vec_dst->set_at(opt_vec_src, filament_index-1, 0); - } + opt_vec_dst->set_at(opt_vec_src, filament_index-1, 0); } } } @@ -1338,6 +1339,7 @@ int CLI::run(int argc, char **argv) partplate_list.reset_size(current_width, current_depth, current_height, true, true); } } + /*for (ModelObject *model_object : m_models[0].objects) for (ModelInstance *model_instance : model_object->instances) { @@ -1804,6 +1806,17 @@ int CLI::run(int argc, char **argv) if (partplate_list.get_plate_count() == 1) pre_check = false; bool finished = false; + + //skip model object + std::map skip_maps; + if (need_skip) { + BOOST_LOG_TRIVIAL(info) << boost::format("need to skip objects, size %1%:")%skip_objects.size(); + for (int index = 0; index < skip_objects.size(); index++) + { + skip_maps[skip_objects[index]] = false; + BOOST_LOG_TRIVIAL(info) << boost::format("object %1%, id %2%")%index %skip_objects[index]; + } + } /*if (opt_key == "export_gcode" && printer_technology == ptSLA) { boost::nowide::cerr << "error: cannot export G-code for an FFF configuration" << std::endl; flush_and_exit(1); @@ -1839,6 +1852,7 @@ int CLI::run(int argc, char **argv) BOOST_LOG_TRIVIAL(info) << "Skip plate " << index+1 << std::endl; continue; } + BOOST_LOG_TRIVIAL(info) << boost::format("Plate %1%: pre_check %2%, start")%(index+1)%pre_check; long long start_time = 0, end_time = 0; start_time = (long long)Slic3r::Utils::get_current_time_utc(); //get the current partplate @@ -1863,18 +1877,45 @@ int CLI::run(int argc, char **argv) % print_volume.min(2) % print_volume.max(0) % print_volume.max(1) % print_volume.max(2) << std::endl; #else BuildVolume build_volume(part_plate->get_shape(), print_height); - model.update_print_volume_state(build_volume); + //model.update_print_volume_state(build_volume); unsigned int count = model.update_print_volume_state(build_volume); if (count == 0) { BOOST_LOG_TRIVIAL(error) << "plate "<< index+1<< ": Nothing to be sliced, Either the print is empty or no object is fully inside the print volume before apply." << std::endl; flush_and_exit(CLI_NO_SUITABLE_OBJECTS); } - else { + else if ((plate_to_slice != 0) || pre_check) { long long triangle_count = 0; + int printable_instances = 0; + int skipped_count = 0; for (ModelObject* model_object : model.objects) for (ModelInstance *i : model_object->instances) { + if (skip_maps.find(i->loaded_id) != skip_maps.end()) { + skip_maps[i->loaded_id] = true; + i->printable = false; + if (i->print_volume_state == ModelInstancePVS_Inside) { + skipped_count++; + BOOST_LOG_TRIVIAL(info) << boost::format("Plate %1%: skip object %2%.")%(index+1)%i->loaded_id; + //need to regenerate the thumbnail + if (plate_data_src.size() > index) { + if (!plate_data_src[index]->thumbnail_file.empty()) { + BOOST_LOG_TRIVIAL(info) << boost::format("Plate %1%: clear loaded thumbnail %2%.")%(index+1)%plate_data_src[index]->thumbnail_file; + plate_data_src[index]->thumbnail_file.clear(); + } + if (!plate_data_src[index]->top_file.empty()) { + BOOST_LOG_TRIVIAL(info) << boost::format("Plate %1%: clear loaded top_thumbnail %2%.")%(index+1)%plate_data_src[index]->top_file; + plate_data_src[index]->top_file.clear(); + } + if (!plate_data_src[index]->pick_file.empty()) { + BOOST_LOG_TRIVIAL(info) << boost::format("Plate %1%: clear loaded pick_thumbnail %2%.")%(index+1)%plate_data_src[index]->pick_file; + plate_data_src[index]->pick_file.clear(); + } + } + } + continue; + } + if (i->print_volume_state == ModelInstancePVS_Partly_Outside) { BOOST_LOG_TRIVIAL(error) << "plate "<< index+1<< ": Found Object " << model_object->name <<" partly inside, can not be sliced." << std::endl; @@ -1896,7 +1937,15 @@ int CLI::run(int argc, char **argv) } } } + + if (i->print_volume_state == ModelInstancePVS_Inside) + printable_instances++; } + + if (printable_instances == 0) { + BOOST_LOG_TRIVIAL(error) << "plate "<< index+1<< ": Nothing to be sliced, after skipping "<{%4%, %5%, %6%}, has %7% printables") % print_volume.min(0) % print_volume.min(1) @@ -2017,7 +2066,7 @@ int CLI::run(int argc, char **argv) } } } catch (const std::exception &ex) { - BOOST_LOG_TRIVIAL(info) << "found slicing or export error for partplate "< thumbnails; + std::vector thumbnails, top_thumbnails, pick_thumbnails; std::vector plate_bboxes; PlateDataPtrs plate_data_list; partplate_list.store_to_3mf_structure(plate_data_list); @@ -2093,6 +2142,9 @@ int CLI::run(int argc, char **argv) #endif bool need_regenerate_thumbnail = oriented_or_arranged; + bool need_regenerate_top_thumbnail = oriented_or_arranged; + bool need_create_thumbnail_group = false, need_create_top_group = false; + // get type and color for platedata auto* filament_types = dynamic_cast(m_print_config.option("filament_type")); const ConfigOptionStrings* filament_color = dynamic_cast(m_print_config.option("filament_colour")); @@ -2100,6 +2152,8 @@ int CLI::run(int argc, char **argv) for (int i = 0; i < plate_data_list.size(); i++) { PlateData *plate_data = plate_data_list[i]; + bool skip_this_plate = ((plate_to_slice != 0) && (plate_to_slice != (i + 1)))?true:false; + for (auto it = plate_data->slice_filaments_info.begin(); it != plate_data->slice_filaments_info.end(); it++) { //it->filament_id = filament_id?filament_id->get_at(it->id):"unknown"; std::string display_filament_type; @@ -2113,15 +2167,41 @@ int CLI::run(int argc, char **argv) BOOST_LOG_TRIVIAL(info) << boost::format("thumbnails stage: plate %1%'s thumbnail data is invalid, check the file %2% exist or not")%(i+1) %plate_data->thumbnail_file; if (plate_data->thumbnail_file.empty() || (!boost::filesystem::exists(plate_data->thumbnail_file))) { BOOST_LOG_TRIVIAL(info) << boost::format("thumbnails stage: plate %1%'s thumbnail file also not there, need to regenerate")%(i+1); - need_regenerate_thumbnail = true; + if (!skip_this_plate) { + need_regenerate_thumbnail = true; + need_create_thumbnail_group = true; + } } else { BOOST_LOG_TRIVIAL(info) << boost::format("thumbnails stage: plate %1%'s thumbnail file exists, no need to regenerate")%(i+1); } } + else { + if (!skip_this_plate) { + need_create_thumbnail_group = true; + } + } + + if (plate_data->top_file.empty() || plate_data->pick_file.empty()) { + if (plate_data_src.size() > i) { + plate_data->top_file = plate_data_src[i]->top_file; + plate_data->pick_file = plate_data_src[i]->pick_file; + } + if (plate_data->top_file.empty()|| plate_data->pick_file.empty() + || (!boost::filesystem::exists(plate_data->top_file)) || (!boost::filesystem::exists(plate_data->pick_file))) { + BOOST_LOG_TRIVIAL(info) << boost::format("thumbnails stage: plate %1%'s top_file %2% also not there, need to regenerate")%(i+1)%plate_data->top_file; + if (!skip_this_plate) { + need_regenerate_top_thumbnail = true; + need_create_top_group = true; + } + } + else { + BOOST_LOG_TRIVIAL(info) << boost::format("thumbnails stage: plate %1%'s top_thumbnail file exists, no need to regenerate")%(i+1); + } + } } - if (need_regenerate_thumbnail) { + if (need_regenerate_thumbnail || need_regenerate_top_thumbnail) { std::vector colors; if (filament_color) { colors= filament_color->vserialize(); @@ -2199,7 +2279,7 @@ int CLI::run(int argc, char **argv) // continue; for (int instance_idx = 0; instance_idx < (int)model_object.instances.size(); ++ instance_idx) { const ModelInstance &model_instance = *model_object.instances[instance_idx]; - glvolume_collection.load_object_volume(&model_object, obj_idx, volume_idx, instance_idx, "volume", true); + glvolume_collection.load_object_volume(&model_object, obj_idx, volume_idx, instance_idx, "volume", true, false, true); //glvolume_collection.volumes.back()->geometry_id = key.geometry_id; std::string color = filament_color?filament_color->get_at(extruder_id - 1):"#00FF00"; @@ -2213,6 +2293,7 @@ int CLI::run(int argc, char **argv) new_color[2] = float(rgb_color[2]) / 255.f; new_color[3] = 1.f; glvolume_collection.volumes.back()->set_color(new_color); + glvolume_collection.volumes.back()->printable = model_instance.printable; } } } @@ -2227,39 +2308,145 @@ int CLI::run(int argc, char **argv) Slic3r::GUI::PartPlate *part_plate = partplate_list.get_plate(i); PlateData *plate_data = plate_data_list[i]; if (plate_data->plate_thumbnail.is_valid()) { - thumbnails.push_back(&plate_data->plate_thumbnail); - BOOST_LOG_TRIVIAL(info) << boost::format("plate %1% has a valid thumbnail, width %2%, height %3%, directly using it")%(i+1) %plate_data->plate_thumbnail.width %plate_data->plate_thumbnail.height; - continue; + if ((plate_to_slice != 0) && (plate_to_slice != (i + 1))) { + BOOST_LOG_TRIVIAL(info) << boost::format("Line %1%: regenerate thumbnail, reset plate %2%'s thumbnail.")%__LINE__%(i+1); + plate_data->plate_thumbnail.reset(); + } + else + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1% has a valid thumbnail, width %2%, height %3%, directly using it")%(i+1) %plate_data->plate_thumbnail.width %plate_data->plate_thumbnail.height; } - BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s thumbnail, need to regenerate")%(i+1); - ThumbnailData * thumbnail_data = new ThumbnailData(); - unsigned int thumbnail_width = 512, thumbnail_height = 512; - const ThumbnailsParams thumbnail_params = {{}, false, true, true, true, i}; - - switch (Slic3r::GUI::OpenGLManager::get_framebuffers_type()) + else if (!plate_data->thumbnail_file.empty() && (boost::filesystem::exists(plate_data->thumbnail_file))) { - case Slic3r::GUI::OpenGLManager::EFramebufferType::Arb: - { - BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: ARB"); - Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer(*thumbnail_data, - thumbnail_width, thumbnail_height, thumbnail_params, - partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho); - break; - } - case Slic3r::GUI::OpenGLManager::EFramebufferType::Ext: - { - BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: EXT"); - Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer_ext(*thumbnail_data, - thumbnail_width, thumbnail_height, thumbnail_params, - partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho); - break; - } - default: - BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: unknown"); - break; + if ((plate_to_slice != 0) && (plate_to_slice != (i + 1))) { + BOOST_LOG_TRIVIAL(info) << boost::format("Line %1%: regenerate thumbnail, clear plate %2%'s thumbnail file path to empty.")%__LINE__%(i+1); + plate_data->thumbnail_file.clear(); + } + else + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1% has a valid thumbnail %2% extracted from 3mf, directly using it")%(i+1) %plate_data->thumbnail_file; + } + else { + ThumbnailData* thumbnail_data = &plate_data->plate_thumbnail; + + if ((plate_to_slice != 0) && (plate_to_slice != (i + 1))) { + BOOST_LOG_TRIVIAL(info) << boost::format("Line %1%: regenerate thumbnail, Skip plate %2%.")%__LINE__%(i+1); + } + else { + unsigned int thumbnail_width = 512, thumbnail_height = 512; + const ThumbnailsParams thumbnail_params = {{}, false, true, true, true, i}; + + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s thumbnail, need to regenerate")%(i+1); + switch (Slic3r::GUI::OpenGLManager::get_framebuffers_type()) + { + case Slic3r::GUI::OpenGLManager::EFramebufferType::Arb: + { + BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: ARB"); + Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer(*thumbnail_data, + thumbnail_width, thumbnail_height, thumbnail_params, + partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho); + break; + } + case Slic3r::GUI::OpenGLManager::EFramebufferType::Ext: + { + BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: EXT"); + Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer_ext(*thumbnail_data, + thumbnail_width, thumbnail_height, thumbnail_params, + partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho); + break; + } + default: + BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: unknown"); + break; + } + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s thumbnail,finished rendering")%(i+1); + } + } + if (need_create_thumbnail_group) { + thumbnails.push_back(&plate_data->plate_thumbnail); + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%: add thumbnail data into group")%(i+1); + } + + //top thumbnails + /*if (part_plate->top_thumbnail_data.is_valid() && part_plate->pick_thumbnail_data.is_valid()) { + if ((plate_to_slice != 0) && (plate_to_slice != (i + 1))) { + BOOST_LOG_TRIVIAL(info) << boost::format("Line %1%: regenerate thumbnail, reset plate %2%'s top/pick thumbnail.")%__LINE__%(i+1); + part_plate->top_thumbnail_data.reset(); + part_plate->pick_thumbnail_data.reset(); + plate_data->top_file.clear(); + plate_data->pick_file.clear(); + } + else { + plate_data->top_file = "valid_top"; + plate_data->pick_file = "valid_pick"; + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1% has a valid top/pick thumbnail data, directly using it")%(i+1); + } + } + else*/ + if ((!plate_data->top_file.empty() && (boost::filesystem::exists(plate_data->top_file))) + &&(!plate_data->pick_file.empty() && (boost::filesystem::exists(plate_data->pick_file)))) + { + if ((plate_to_slice != 0) && (plate_to_slice != (i + 1))) { + BOOST_LOG_TRIVIAL(info) << boost::format("Line %1%: regenerate thumbnail, clear plate %2%'s top/pick thumbnail file path to empty.")%__LINE__%(i+1); + plate_data->top_file.clear(); + plate_data->pick_file.clear(); + } + else + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1% has valid top/pick thumbnail extracted from 3mf, directly using it")%(i+1); + } + else{ + ThumbnailData* top_thumbnail = &part_plate->top_thumbnail_data; + ThumbnailData* picking_thumbnail = &part_plate->pick_thumbnail_data; + if ((plate_to_slice != 0) && (plate_to_slice != (i + 1))) { + BOOST_LOG_TRIVIAL(info) << boost::format("Line %1%: regenerate thumbnail, Skip plate %2%.")%__LINE__%(i+1); + part_plate->top_thumbnail_data.reset(); + part_plate->pick_thumbnail_data.reset(); + plate_data->top_file.clear(); + plate_data->pick_file.clear(); + } + else { + unsigned int thumbnail_width = 512, thumbnail_height = 512; + const ThumbnailsParams thumbnail_params = { {}, false, true, false, true, i }; + + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s top/pick thumbnail missed, need to regenerate")%(i+1); + + switch (Slic3r::GUI::OpenGLManager::get_framebuffers_type()) + { + case Slic3r::GUI::OpenGLManager::EFramebufferType::Arb: + { + BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: ARB"); + Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer(*top_thumbnail, + thumbnail_width, thumbnail_height, thumbnail_params, + partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, false); + Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer(*picking_thumbnail, + thumbnail_width, thumbnail_height, thumbnail_params, + partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, true); + break; + } + case Slic3r::GUI::OpenGLManager::EFramebufferType::Ext: + { + BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: EXT"); + Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer_ext(*top_thumbnail, + thumbnail_width, thumbnail_height, thumbnail_params, + partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, false); + Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer_ext(*picking_thumbnail, + thumbnail_width, thumbnail_height, thumbnail_params, + partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, true); + break; + } + default: + BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: unknown"); + break; + } + plate_data->top_file = "valid_top"; + plate_data->pick_file = "valid_pick"; + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s top_thumbnail,finished rendering")%(i+1); + } + } + + if (need_create_top_group) { + top_thumbnails.push_back(&part_plate->top_thumbnail_data); + pick_thumbnails.push_back(&part_plate->pick_thumbnail_data); + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%: add thumbnail data for top and pick into group")%(i+1); } - thumbnails.push_back(thumbnail_data); - BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s thumbnail,finished rendering")%(i+1); } } } @@ -2267,17 +2454,42 @@ int CLI::run(int argc, char **argv) glfwTerminate(); } else { + BOOST_LOG_TRIVIAL(info) << boost::format("use previous thumbnails, no need to regenerate"); for (int i = 0; i < partplate_list.get_plate_count(); i++) { PlateData *plate_data = plate_data_list[i]; - if (plate_data->plate_thumbnail.is_valid()) { + bool skip_this_plate = ((plate_to_slice != 0) && (plate_to_slice != (i + 1)))?true:false; + Slic3r::GUI::PartPlate *part_plate = partplate_list.get_plate(i); + + if (skip_this_plate) { + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s all the thumbnails skipped, reset here")%(i+1); + plate_data->plate_thumbnail.reset(); + plate_data->thumbnail_file.clear(); + part_plate->top_thumbnail_data.reset(); + part_plate->pick_thumbnail_data.reset(); + plate_data->top_file.clear(); + plate_data->pick_file.clear(); + } + + if (need_create_thumbnail_group) { thumbnails.push_back(&plate_data->plate_thumbnail); - BOOST_LOG_TRIVIAL(info) << boost::format("plate %1% has a valid thumbnail data, width %2%, height %3%, directly using it")%(i+1) %plate_data->plate_thumbnail.width %plate_data->plate_thumbnail.height; + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%: add thumbnail data into group")%(i+1); + } + + if (need_create_top_group) { + top_thumbnails.push_back(&part_plate->top_thumbnail_data); + pick_thumbnails.push_back(&part_plate->pick_thumbnail_data); + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%: add thumbnail data for top and pick into group")%(i+1); } } } //generate first layer bboxes for (int i = 0; i < partplate_list.get_plate_count(); i++) { + if ((plate_to_slice != 0) && (plate_to_slice != (i + 1))) { + BOOST_LOG_TRIVIAL(info) << boost::format("Line %1%: generate bbox, Skip plate %2%.")%__LINE__%(i+1); + plate_bboxes.push_back(new PlateBBoxData()); + continue; + } Slic3r::GUI::PartPlate *part_plate = partplate_list.get_plate(i); //render calibration thumbnail if (!part_plate->get_slice_result() || !part_plate->is_slice_result_valid()) { @@ -2403,14 +2615,19 @@ int CLI::run(int argc, char **argv) #endif BOOST_LOG_TRIVIAL(info) << "will export 3mf to " << export_3mf_file << std::endl; - if (! this->export_project(&m_models[0], export_3mf_file, plate_data_list, project_presets, thumbnails, calibration_thumbnails, plate_bboxes, &m_print_config)) + if (! this->export_project(&m_models[0], export_3mf_file, plate_data_list, project_presets, thumbnails, top_thumbnails, pick_thumbnails, + calibration_thumbnails, plate_bboxes, &m_print_config)) { release_PlateData_list(plate_data_list); flush_and_exit(CLI_EXPORT_3MF_ERROR); } release_PlateData_list(plate_data_list); for (unsigned int i = 0; i < thumbnails.size(); i++) - delete thumbnails[i]; + thumbnails[i]->reset(); + for (unsigned int i = 0; i < top_thumbnails.size(); i++) + top_thumbnails[i]->reset(); + for (unsigned int i = 0; i < pick_thumbnails.size(); i++) + pick_thumbnails[i]->reset(); for (unsigned int i = 0; i < calibration_thumbnails.size(); i++) delete calibration_thumbnails[i]; @@ -2589,7 +2806,8 @@ bool CLI::export_models(IO::ExportFormat format) //BBS: add export_project function bool CLI::export_project(Model *model, std::string& path, PlateDataPtrs &partplate_data, - std::vector& project_presets, std::vector& thumbnails, std::vector& calibration_thumbnails, std::vector& plate_bboxes, const DynamicPrintConfig* config) + std::vector& project_presets, std::vector& thumbnails, std::vector& top_thumbnails, std::vector& pick_thumbnails, + std::vector& calibration_thumbnails, std::vector& plate_bboxes, const DynamicPrintConfig* config) { //const std::string path = this->output_filepath(*model, IO::TMF); bool success = false; @@ -2601,9 +2819,11 @@ bool CLI::export_project(Model *model, std::string& path, PlateDataPtrs &partpla store_params.project_presets = project_presets; store_params.config = (DynamicPrintConfig*)config; store_params.thumbnail_data = thumbnails; + store_params.top_thumbnail_data = top_thumbnails; + store_params.pick_thumbnail_data = pick_thumbnails; store_params.calibration_thumbnail_data = calibration_thumbnails; store_params.id_bboxes = plate_bboxes; - store_params.strategy = SaveStrategy::Silence|SaveStrategy::WithGcode|SaveStrategy::SplitModel; + store_params.strategy = SaveStrategy::Silence|SaveStrategy::WithGcode|SaveStrategy::SplitModel|SaveStrategy::UseLoadedId; success = Slic3r::store_bbs_3mf(store_params); diff --git a/src/BambuStudio.hpp b/src/BambuStudio.hpp index f5c5e6b734..c7fc5ae3e1 100644 --- a/src/BambuStudio.hpp +++ b/src/BambuStudio.hpp @@ -39,7 +39,8 @@ private: bool export_models(IO::ExportFormat format); //BBS: add export_project function bool export_project(Model *model, std::string& path, PlateDataPtrs &partplate_data, std::vector& project_presets, - std::vector& thumbnails, std::vector& calibration_thumbnails, + std::vector& thumbnails, std::vector& top_thumbnails, std::vector& pick_thumbnails, + std::vector& calibration_thumbnails, std::vector& plate_bboxes, const DynamicPrintConfig* config); bool has_print_action() const { return m_config.opt_bool("export_gcode") || m_config.opt_bool("export_sla"); } diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 8cc21b43e5..769abf8202 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -250,11 +250,13 @@ static constexpr const char* BED_TYPE_ATTR = "bed_type"; static constexpr const char* PRINT_SEQUENCE_ATTR = "print_sequence"; static constexpr const char* GCODE_FILE_ATTR = "gcode_file"; static constexpr const char* THUMBNAIL_FILE_ATTR = "thumbnail_file"; +static constexpr const char* TOP_FILE_ATTR = "top_file"; +static constexpr const char* PICK_FILE_ATTR = "pick_file"; static constexpr const char* PATTERN_FILE_ATTR = "pattern_file"; static constexpr const char* PATTERN_BBOX_FILE_ATTR = "pattern_bbox_file"; static constexpr const char* OBJECT_ID_ATTR = "object_id"; static constexpr const char* INSTANCEID_ATTR = "instance_id"; -static constexpr const char* ARRANGE_ORDER_ATTR = "arrange_order"; +static constexpr const char* IDENTIFYID_ATTR = "identify_id"; static constexpr const char* PLATERID_ATTR = "plater_id"; static constexpr const char* PLATE_IDX_ATTR = "index"; static constexpr const char* SLICE_PREDICTION_ATTR = "prediction"; @@ -614,7 +616,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) { int object_id; int instance_id; - int arrange_order; + int identify_id; }; struct Instance @@ -859,7 +861,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) std::string m_Profile_description; std::string m_profile_user_id; std::string m_profile_user_name; - + XML_Parser m_xml_parser; // Error code returned by the application side of the parser. In that case the expat may not reliably deliver the error state // after returning from XML_Parse() function, thus we keep the error state here. @@ -1139,7 +1141,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) m_plater_data.clear(); m_curr_instance.object_id = -1; m_curr_instance.instance_id = -1; - m_curr_instance.arrange_order = 0; + m_curr_instance.identify_id = 0; clear_errors(); // restore @@ -1794,12 +1796,15 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) plate_data_list[it->first-1]->slice_filaments_info = it->second->slice_filaments_info; plate_data_list[it->first-1]->warnings = it->second->warnings; plate_data_list[it->first-1]->thumbnail_file = (m_load_restore || it->second->thumbnail_file.empty()) ? it->second->thumbnail_file : m_backup_path + "/" + it->second->thumbnail_file; - plate_data_list[it->first-1]->pattern_file = (m_load_restore || it->second->pattern_file.empty()) ? it->second->pattern_file : m_backup_path + "/" + it->second->pattern_file; + //plate_data_list[it->first-1]->pattern_file = (m_load_restore || it->second->pattern_file.empty()) ? it->second->pattern_file : m_backup_path + "/" + it->second->pattern_file; + plate_data_list[it->first-1]->top_file = (m_load_restore || it->second->top_file.empty()) ? it->second->top_file : m_backup_path + "/" + it->second->top_file; + plate_data_list[it->first-1]->pick_file = (m_load_restore || it->second->pick_file.empty()) ? it->second->pick_file : m_backup_path + "/" + it->second->pick_file; plate_data_list[it->first-1]->pattern_bbox_file = (m_load_restore || it->second->pattern_bbox_file.empty()) ? it->second->pattern_bbox_file : m_backup_path + "/" + it->second->pattern_bbox_file; plate_data_list[it->first-1]->config = it->second->config; current_plate_data = plate_data_list[it->first - 1]; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(", plate %1%, thumbnail_file=%2%")%it->first %plate_data_list[it->first-1]->thumbnail_file; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(", top_thumbnail_file=%1%, pick_thumbnail_file=%2%")%plate_data_list[it->first-1]->top_file %plate_data_list[it->first-1]->pick_file; it++; //update the arrange order @@ -1835,7 +1840,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) continue; } ModelInstance* inst = obj->instances[inst_index]; - inst->arrange_order = map_it->second.second; + inst->loaded_id = map_it->second.second; map_it++; } } @@ -3525,10 +3530,18 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) { m_curr_plater->thumbnail_file = value; } - else if (key == PATTERN_FILE_ATTR) + else if (key == TOP_FILE_ATTR) { - m_curr_plater->pattern_file = value; + m_curr_plater->top_file = value; } + else if (key == PICK_FILE_ATTR) + { + m_curr_plater->pick_file = value; + } + //else if (key == PATTERN_FILE_ATTR) + //{ + // m_curr_plater->pattern_file = value; + //} else if (key == PATTERN_BBOX_FILE_ATTR) { m_curr_plater->pattern_bbox_file = value; @@ -3537,9 +3550,9 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) { m_curr_instance.instance_id = atoi(value.c_str()); } - else if (key == ARRANGE_ORDER_ATTR) + else if (key == IDENTIFYID_ATTR) { - m_curr_instance.arrange_order = atoi(value.c_str()); + m_curr_instance.identify_id = atoi(value.c_str()); } else if (key == OBJECT_ID_ATTR) { @@ -3694,13 +3707,13 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) //add_error("invalid object id/instance id"); //skip this instance m_curr_instance.object_id = m_curr_instance.instance_id = -1; - m_curr_instance.arrange_order = 0; + m_curr_instance.identify_id = 0; return true; } - m_curr_plater->obj_inst_map.emplace(m_curr_instance.object_id, std::make_pair(m_curr_instance.instance_id, m_curr_instance.arrange_order)); + m_curr_plater->obj_inst_map.emplace(m_curr_instance.object_id, std::make_pair(m_curr_instance.instance_id, m_curr_instance.identify_id)); m_curr_instance.object_id = m_curr_instance.instance_id = -1; - m_curr_instance.arrange_order = 0; + m_curr_instance.identify_id = 0; return true; } @@ -4744,6 +4757,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) bool m_save_gcode { false }; // whether to save gcode for normal save bool m_skip_model { false }; // skip model when exporting .gcode.3mf bool m_skip_auxiliary { false }; // skip normal axuiliary files + bool m_use_loaded_id { false }; // whether to use loaded id for identify_id public: //BBS: add plate data related logic @@ -4762,6 +4776,8 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) std::vector& project_presets, const DynamicPrintConfig* config, const std::vector& thumbnail_data, + const std::vector& top_thumbnail_data, + const std::vector& pick_thumbnail_data, Export3mfProgressFn proFn, const std::vector& calibration_data, const std::vector& id_bboxes, @@ -4772,7 +4788,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) bool _add_content_types_file_to_archive(mz_zip_archive& archive); - bool _add_thumbnail_file_to_archive(mz_zip_archive& archive, const ThumbnailData& thumbnail_data, int index); + bool _add_thumbnail_file_to_archive(mz_zip_archive& archive, const ThumbnailData& thumbnail_data, const char* local_path, int index); bool _add_calibration_file_to_archive(mz_zip_archive& archive, const ThumbnailData& thumbnail_data, int index); bool _add_bbox_file_to_archive(mz_zip_archive& archive, const PlateBBoxData& id_bboxes, int index); bool _add_relationships_file_to_archive(mz_zip_archive & archive, @@ -4795,7 +4811,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) bool _add_project_config_file_to_archive(mz_zip_archive& archive, const DynamicPrintConfig &config, Model& model); //BBS: add project embedded preset files bool _add_project_embedded_presets_to_archive(mz_zip_archive& archive, Model& model, std::vector project_presets); - bool _add_model_config_file_to_archive(mz_zip_archive& archive, const Model& model, PlateDataPtrs& plate_data_list, const IdToObjectDataMap &objects_data, int export_plate_idx = -1, bool save_gcode = true); + bool _add_model_config_file_to_archive(mz_zip_archive& archive, const Model& model, PlateDataPtrs& plate_data_list, const IdToObjectDataMap &objects_data, int export_plate_idx = -1, bool save_gcode = true, bool use_loaded_id = false); bool _add_slice_info_config_file_to_archive(mz_zip_archive& archive, const Model& model, PlateDataPtrs& plate_data_list); bool _add_gcode_file_to_archive(mz_zip_archive& archive, const Model& model, PlateDataPtrs& plate_data_list, Export3mfProgressFn proFn = nullptr); bool _add_custom_gcode_per_print_z_file_to_archive(mz_zip_archive& archive, Model& model, const DynamicPrintConfig* config); @@ -4829,12 +4845,15 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) m_skip_model = store_params.strategy & SaveStrategy::SkipModel; m_skip_auxiliary = store_params.strategy & SaveStrategy::SkipAuxiliary; + m_use_loaded_id = store_params.strategy & SaveStrategy::UseLoadedId; + boost::system::error_code ec; std::string filename = std::string(store_params.path); boost::filesystem::remove(filename + ".tmp", ec); bool result = _save_model_to_file(filename + ".tmp", *store_params.model, store_params.plate_data_list, store_params.project_presets, store_params.config, - store_params.thumbnail_data, store_params.proFn, store_params.calibration_thumbnail_data, store_params.id_bboxes, store_params.project, store_params.export_plate_idx); + store_params.thumbnail_data, store_params.top_thumbnail_data, store_params.pick_thumbnail_data, store_params.proFn, + store_params.calibration_thumbnail_data, store_params.id_bboxes, store_params.project, store_params.export_plate_idx); if (result) { boost::filesystem::rename(filename + ".tmp", filename, ec); if (ec) { @@ -4902,6 +4921,8 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) std::vector& project_presets, const DynamicPrintConfig* config, const std::vector& thumbnail_data, + const std::vector& top_thumbnail_data, + const std::vector& pick_thumbnail_data, Export3mfProgressFn proFn, const std::vector& calibration_data, const std::vector& id_bboxes, @@ -4916,7 +4937,8 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) bool cb_cancel = false; //BBS progress point - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" <<__LINE__ << boost::format(",before open zip writer, m_skip_static %1%, m_save_gcode %2%\n")%m_skip_static %m_save_gcode; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" <<__LINE__ << + boost::format(",before open zip writer, m_skip_static %1%, m_save_gcode %2%, m_use_loaded_id %3%")%m_skip_static %m_save_gcode %m_use_loaded_id; if (proFn) { proFn(EXPORT_STAGE_OPEN_3MF, 0, 1, cb_cancel); if (cb_cancel) @@ -4955,43 +4977,115 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) } //BBS progress point - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(",before add thumbnails, count %1%\n") % thumbnail_data.size(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(",before add thumbnails, count %1%") % thumbnail_data.size(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" <<__LINE__ << boost::format(",top&&pick thumbnails, count %1%")%top_thumbnail_data.size(); //BBS: add thumbnail for each plate - if (!m_skip_static && thumbnail_data.size() > 0) { - // Adds the file Metadata/thumbnail.png. + if (!m_skip_static) { + std::vector thumbnail_status(plate_data_list.size(), false); + std::vector top_thumbnail_status(plate_data_list.size(), false); + std::vector pick_thumbnail_status(plate_data_list.size(), false); + + if ((thumbnail_data.size() > 0)&&(thumbnail_data.size() > plate_data_list.size())) { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ":" << __LINE__ << boost::format(", thumbnail_data size %1% > plate count %2%") + % thumbnail_data.size() %plate_data_list.size(); + return false; + } + if ((top_thumbnail_data.size() > 0)&&(top_thumbnail_data.size() > plate_data_list.size())) { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ":" << __LINE__ << boost::format(", top_thumbnail_data size %1% > plate count %2%") + % top_thumbnail_data.size() %plate_data_list.size(); + return false; + } + if ((pick_thumbnail_data.size() > 0)&&(pick_thumbnail_data.size() > plate_data_list.size())) { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ":" << __LINE__ << boost::format(", pick_thumbnail_data size %1% > plate count %2%") + % pick_thumbnail_data.size() %plate_data_list.size(); + return false; + } + if (top_thumbnail_data.size() != pick_thumbnail_data.size()) { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ":" << __LINE__ << boost::format(", top_thumbnail_data size %1% != pick_thumbnail_data size %2%") + % top_thumbnail_data.size() %pick_thumbnail_data.size(); + return false; + } + + if (proFn) { + proFn(EXPORT_STAGE_ADD_THUMBNAILS, 0, plate_data_list.size(), cb_cancel); + if (cb_cancel) + return false; + } + for (unsigned int index = 0; index < thumbnail_data.size(); index++) { - if (proFn) { - proFn(EXPORT_STAGE_ADD_THUMBNAILS, index, thumbnail_data.size(), cb_cancel); - if (cb_cancel) - return false; - } - if (thumbnail_data[index]->is_valid()) { - if (!_add_thumbnail_file_to_archive(archive, *thumbnail_data[index], index)) { + if (!_add_thumbnail_file_to_archive(archive, *thumbnail_data[index], "Metadata/plate", index)) { return false; } + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" <<__LINE__ << boost::format(",add thumbnail %1%'s data into 3mf")%(index+1); + thumbnail_status[index] = true; } } - } - else if (!m_skip_static && plate_data_list.size() > 0) { + + // Adds the file Metadata/top_i.png and Metadata/pick_i.png + for (unsigned int index = 0; index < top_thumbnail_data.size(); index++) + { + if (top_thumbnail_data[index]->is_valid()) + { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" <<__LINE__ << boost::format(",add top thumbnail %1%'s data into 3mf")%(index+1); + if (!_add_thumbnail_file_to_archive(archive, *top_thumbnail_data[index], "Metadata/top", index)) { + return false; + } + top_thumbnail_status[index] = true; + } + + if (pick_thumbnail_data[index]->is_valid()) + { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" <<__LINE__ << boost::format(",add pick thumbnail %1%'s data into 3mf")%(index+1); + if (!_add_thumbnail_file_to_archive(archive, *pick_thumbnail_data[index], "Metadata/pick", index)) { + return false; + } + pick_thumbnail_status[index] = true; + } + } + for (int i = 0; i < plate_data_list.size(); i++) { PlateData *plate_data = plate_data_list[i]; - if (proFn) { - proFn(EXPORT_STAGE_ADD_THUMBNAILS, i, plate_data_list.size(), cb_cancel); - if (cb_cancel) - return false; - } - if (!plate_data->thumbnail_file.empty() && (boost::filesystem::exists(plate_data->thumbnail_file))){ + + if (!thumbnail_status[i] && !plate_data->thumbnail_file.empty() && (boost::filesystem::exists(plate_data->thumbnail_file))){ std::string dst_in_3mf = (boost::format("Metadata/plate_%1%.png") % (i + 1)).str(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" <<__LINE__ << boost::format(", add thumbnail %1% from file %2%") % (i+1) %plate_data->thumbnail_file; if (!_add_file_to_archive(archive, dst_in_3mf, plate_data->thumbnail_file)) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ":" << __LINE__ << boost::format(", add thumbnail %1% from file %2% failed\n") % (i+1) %plate_data->thumbnail_file; return false; } } + + if (!top_thumbnail_status[i] && !plate_data->top_file.empty() && (boost::filesystem::exists(plate_data->top_file))){ + std::string dst_in_3mf = (boost::format("Metadata/top_%1%.png") % (i + 1)).str(); + + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" <<__LINE__ << boost::format(", add top thumbnail %1% from file %2%") % (i+1) %plate_data->top_file; + if (!_add_file_to_archive(archive, dst_in_3mf, plate_data->top_file)) { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ":" << __LINE__ << boost::format(", add top thumbnail %1% failed") % (i+1); + return false; + } + top_thumbnail_status[i] = true; + } + + if (!pick_thumbnail_status[i] && !plate_data->pick_file.empty() && (boost::filesystem::exists(plate_data->pick_file))){ + std::string dst_in_3mf = (boost::format("Metadata/pick_%1%.png") % (i + 1)).str(); + + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" <<__LINE__ << boost::format(", add pick thumbnail %1% from file %2%") % (i+1) %plate_data->pick_file; + if (!_add_file_to_archive(archive, dst_in_3mf, plate_data->pick_file)) { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ":" << __LINE__ << boost::format(", add pick thumbnail %1% failed") % (i+1); + return false; + } + pick_thumbnail_status[i] = true; + } + } + if (proFn) { + proFn(EXPORT_STAGE_ADD_THUMBNAILS, plate_data_list.size(), plate_data_list.size(), cb_cancel); + if (cb_cancel) + return false; } } @@ -5183,7 +5277,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) // This file contains all the attributes of all ModelObjects and their ModelVolumes (names, parameter overrides). // As there is just a single Indexed Triangle Set data stored per ModelObject, offsets of volumes into their respective Indexed Triangle Set data // is stored here as well. - if (!_add_model_config_file_to_archive(archive, model, plate_data_list, objects_data, export_plate_idx, m_save_gcode)) { + if (!_add_model_config_file_to_archive(archive, model, plate_data_list, objects_data, export_plate_idx, m_save_gcode, m_use_loaded_id)) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ":" << __LINE__ << boost::format(", _add_model_config_file_to_archive failed\n"); return false; } @@ -5295,14 +5389,14 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) return true; } - bool _BBS_3MF_Exporter::_add_thumbnail_file_to_archive(mz_zip_archive& archive, const ThumbnailData& thumbnail_data, int index) + bool _BBS_3MF_Exporter::_add_thumbnail_file_to_archive(mz_zip_archive& archive, const ThumbnailData& thumbnail_data, const char* local_path, int index) { bool res = false; size_t png_size = 0; void* png_data = tdefl_write_image_to_png_file_in_memory_ex((const void*)thumbnail_data.pixels.data(), thumbnail_data.width, thumbnail_data.height, 4, &png_size, MZ_DEFAULT_COMPRESSION, 1); if (png_data != nullptr) { - std::string thumbnail_name = (boost::format("Metadata/plate_%1%.png") % (index + 1)).str(); + std::string thumbnail_name = (boost::format("%1%_%2%.png")%local_path % (index + 1)).str(); res = mz_zip_writer_add_mem(&archive, thumbnail_name.c_str(), (const void*)png_data, png_size, MZ_NO_COMPRESSION); mz_free(png_data); } @@ -5319,7 +5413,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) { bool res = false; - size_t png_size = 0; + /*size_t png_size = 0; void* png_data = tdefl_write_image_to_png_file_in_memory_ex((const void*)thumbnail_data.pixels.data(), thumbnail_data.width, thumbnail_data.height, 4, &png_size, MZ_DEFAULT_COMPRESSION, 1); if (png_data != nullptr) { std::string thumbnail_name = (boost::format(PATTERN_FILE_FORMAT) % (index + 1)).str(); @@ -5330,7 +5424,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) if (!res) { add_error("Unable to add thumbnail file to archive"); BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ":" << __LINE__ << boost::format(", Unable to add thumbnail file to archive\n"); - } + }*/ return res; } @@ -6332,7 +6426,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) return true; } - bool _BBS_3MF_Exporter::_add_model_config_file_to_archive(mz_zip_archive& archive, const Model& model, PlateDataPtrs& plate_data_list, const IdToObjectDataMap &objects_data, int export_plate_idx, bool save_gcode) + bool _BBS_3MF_Exporter::_add_model_config_file_to_archive(mz_zip_archive& archive, const Model& model, PlateDataPtrs& plate_data_list, const IdToObjectDataMap &objects_data, int export_plate_idx, bool save_gcode, bool use_loaded_id) { std::stringstream stream; std::map shared_meshes; @@ -6493,10 +6587,20 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << THUMBNAIL_FILE_ATTR << "\" " << VALUE_ATTR << "=\"" << std::boolalpha << thumbnail_file_in_3mf << "\"/>\n"; } - if (!plate_data->pattern_file.empty()) { + if (!plate_data->top_file.empty()) { + std::string top_file_in_3mf = (boost::format(TOP_FILE_FORMAT) % (plate_data->plate_index + 1)).str(); + stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << TOP_FILE_ATTR << "\" " << VALUE_ATTR << "=\"" << std::boolalpha << top_file_in_3mf << "\"/>\n"; + } + + if (!plate_data->pick_file.empty()) { + std::string pick_file_in_3mf = (boost::format(PICK_FILE_FORMAT) % (plate_data->plate_index + 1)).str(); + stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << PICK_FILE_ATTR << "\" " << VALUE_ATTR << "=\"" << std::boolalpha << pick_file_in_3mf << "\"/>\n"; + } + + /*if (!plate_data->pattern_file.empty()) { std::string pattern_file_in_3mf = (boost::format(PATTERN_FILE_FORMAT) % (plate_data->plate_index + 1)).str(); stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << PATTERN_FILE_ATTR << "\" " << VALUE_ATTR << "=\"" << std::boolalpha << pattern_file_in_3mf << "\"/>\n"; - } + }*/ if (!plate_data->pattern_bbox_file.empty()) { std::string pattern_bbox_file_in_3mf = (boost::format(PATTERN_CONFIG_FILE_FORMAT) % (plate_data->plate_index + 1)).str(); stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << PATTERN_BBOX_FILE_ATTR << "\" " << VALUE_ATTR << "=\"" << std::boolalpha << pattern_bbox_file_in_3mf << "\"/>\n"; @@ -6509,7 +6613,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) stream << " <" << INSTANCE_TAG << ">\n"; int obj_id = plate_data->objects_and_instances[j].first; int inst_id = plate_data->objects_and_instances[j].second; - int arrange_o = 0; + int identify_id = 0; ModelObject* obj = NULL; ModelInstance* inst = NULL; if (obj_id >= model.objects.size()) { @@ -6523,7 +6627,10 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) } else if (obj){ inst = obj->instances[inst_id]; - arrange_o = inst->arrange_order; + if (use_loaded_id && (inst->loaded_id > 0)) + identify_id = inst->loaded_id; + else + identify_id = inst->id().id; } if (m_skip_static && obj) { obj_id = obj->get_backup_id(); @@ -6534,7 +6641,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << OBJECT_ID_ATTR << "\" " << VALUE_ATTR << "=\"" << obj_id << "\"/>\n"; stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << INSTANCEID_ATTR << "\" " << VALUE_ATTR << "=\"" << inst_id << "\"/>\n"; - stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << ARRANGE_ORDER_ATTR << "\" " << VALUE_ATTR << "=\"" << arrange_o << "\"/>\n"; + stream << " <" << METADATA_TAG << " " << KEY_ATTR << "=\"" << IDENTIFYID_ATTR << "\" " << VALUE_ATTR << "=\"" << identify_id << "\"/>\n"; stream << " \n"; } } diff --git a/src/libslic3r/Format/bbs_3mf.hpp b/src/libslic3r/Format/bbs_3mf.hpp index e0914f6774..4989b5a899 100644 --- a/src/libslic3r/Format/bbs_3mf.hpp +++ b/src/libslic3r/Format/bbs_3mf.hpp @@ -16,7 +16,9 @@ struct ThumbnailData; #define GCODE_FILE_FORMAT "Metadata/plate_%1%.gcode" #define THUMBNAIL_FILE_FORMAT "Metadata/plate_%1%.png" -#define PATTERN_FILE_FORMAT "Metadata/plate_%1%_pattern_layer_0.png" +#define TOP_FILE_FORMAT "Metadata/top_%1%.png" +#define PICK_FILE_FORMAT "Metadata/pick_%1%.png" +//#define PATTERN_FILE_FORMAT "Metadata/plate_%1%_pattern_layer_0.png" #define PATTERN_CONFIG_FILE_FORMAT "Metadata/plate_%1%.json" #define EMBEDDED_PRINT_FILE_FORMAT "Metadata/process_settings_%1%.config" #define EMBEDDED_FILAMENT_FILE_FORMAT "Metadata/filament_settings_%1%.config" @@ -65,8 +67,10 @@ struct PlateData std::string gcode_file_md5; std::string thumbnail_file; ThumbnailData plate_thumbnail; - ThumbnailData pattern_thumbnail; - std::string pattern_file; + std::string top_file; + std::string pick_file; + //ThumbnailData pattern_thumbnail; + //std::string pattern_file; std::string pattern_bbox_file; std::string gcode_prediction; std::string gcode_weight; @@ -102,6 +106,7 @@ enum class SaveStrategy SkipModel = 1 << 7, WithSliceInfo = 1 << 8, SkipAuxiliary = 1 << 9, + UseLoadedId = 1 << 10, SplitModel = 0x1000 | ProductionExt, Encrypted = SecureContentExt | SplitModel, @@ -194,6 +199,8 @@ struct StoreParams std::vector project_presets; DynamicPrintConfig* config; std::vector thumbnail_data; + std::vector top_thumbnail_data; + std::vector pick_thumbnail_data; std::vector calibration_thumbnail_data; SaveStrategy strategy = SaveStrategy::Zip64; Export3mfProgressFn proFn = nullptr; diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index 0560840a0a..e260c200fa 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -1070,6 +1070,7 @@ public: // Whether or not this instance is printable bool printable; int arrange_order = 0; // BBS + size_t loaded_id = 0; // BBS ModelObject* get_object() const { return this->object; } @@ -1262,7 +1263,7 @@ class ModelProfileInfo { public: std::string ProfileTile; - std::string ProfileCover; + std::string ProfileCover; std::string ProfileDescription; std::string ProfileUserId; std::string ProfileUserName; diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 394e735740..daf6b08e63 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1442,14 +1442,20 @@ void Print::process(bool use_cache) for (int index = 0; index < object_count; index++) { PrintObject *obj = m_objects[index]; + bool found_shared = false; if (need_slicing_objects.find(obj) == need_slicing_objects.end()) { for (PrintObject *slicing_obj : need_slicing_objects) { if (is_print_object_the_same(obj, slicing_obj)) { obj->set_shared_object(slicing_obj); + found_shared = true; break; } } + if (!found_shared) { + BOOST_LOG_TRIVIAL(error) << boost::format("Also can not find the shared object, identify_id %1%")%obj->model_object()->instances[0]->loaded_id; + throw Slic3r::SlicingError("Can not find the cached data."); + } } } } @@ -2207,7 +2213,7 @@ std::string PrintStatistics::finalize_output_path(const std::string &path_in) co #define JSON_EXPOLYGON "expolygon" #define JSON_ARC_FITTING "arc_fitting" #define JSON_OBJECT_NAME "name" -#define JSON_ARRANGE_ORDER "arrange_order" +#define JSON_IDENTIFY_ID "identify_id" #define JSON_LAYERS "layers" @@ -2943,18 +2949,19 @@ int Print::export_cached_data(const std::string& directory, bool with_space) BOOST_LOG_TRIVIAL(info) << boost::format("shared object %1%, skip directly")%model_obj->name; continue; } - BOOST_LOG_TRIVIAL(info) << boost::format("begin to dump object %1%")%model_obj->name; const PrintInstance &print_instance = obj->instances()[0]; const ModelInstance *model_instance = print_instance.model_instance; - int arrange_order = model_instance->arrange_order; - std::string file_name = directory +"/obj_"+std::to_string(arrange_order)+".json"; + size_t identify_id = (model_instance->loaded_id > 0)?model_instance->loaded_id: model_instance->id().id; + std::string file_name = directory +"/obj_"+std::to_string(identify_id)+".json"; + + BOOST_LOG_TRIVIAL(info) << boost::format("begin to dump object %1%, identify_id %2% to %3%")%model_obj->name %identify_id %file_name; try { json root_json, layers_json = json::array(), support_layers_json = json::array(); root_json[JSON_OBJECT_NAME] = model_obj->name; - root_json[JSON_ARRANGE_ORDER] = arrange_order; + root_json[JSON_IDENTIFY_ID] = identify_id; //export the layers std::vector layers_json_vector(obj->layer_count()); @@ -3139,12 +3146,14 @@ int Print::load_cached_data(const std::string& directory) obj->clear_layers(); obj->clear_support_layers(); - int arrange_order = model_instance->arrange_order; - if (arrange_order <= 0) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< boost::format(": object %1% has invalid arrange_order %2%, can not load cached_data")%model_obj->name %arrange_order; - continue; + int identify_id = model_instance->loaded_id; + if (identify_id <= 0) { + //for old 3mf + identify_id = model_instance->id().id; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< boost::format(": object %1%'s loaded_id is 0, need to use the instance_id %2%")%model_obj->name %identify_id; + //continue; } - std::string file_name = directory +"/obj_"+std::to_string(arrange_order)+".json"; + std::string file_name = directory +"/obj_"+std::to_string(identify_id)+".json"; if (!fs::exists(file_name)) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__<> root_json; std::string name = root_json.at(JSON_OBJECT_NAME); - int order = root_json.at(JSON_ARRANGE_ORDER); + int identify_id = root_json.at(JSON_IDENTIFY_ID); int layer_count = 0, support_layer_count = 0; layer_count = root_json[JSON_LAYERS].size(); support_layer_count = root_json[JSON_SUPPORT_LAYERS].size(); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__<cli_params = "\"filament1.json;filament2.json;...\""; def->set_default_value(new ConfigOptionStrings()); + def = this->add("skip_objects", coStrings); + def->label = L("Skip Objects"); + def->tooltip = L("Skip some objects in this print"); + def->cli_params = "\"3;5;10;77\""; + def->set_default_value(new ConfigOptionInts()); + /*def = this->add("output", coString); def->label = L("Output File"); def->tooltip = L("The file where the output will be written (if not specified, it will be based on the input file)."); diff --git a/src/libslic3r/Utils.hpp b/src/libslic3r/Utils.hpp index 71dacf6d28..b04628e65a 100644 --- a/src/libslic3r/Utils.hpp +++ b/src/libslic3r/Utils.hpp @@ -47,6 +47,7 @@ #define CLI_IMPORT_CACHE_LOAD_FAILED -57 #define CLI_SLICING_TIME_EXCEEDS_LIMIT -58 #define CLI_TRIANGLE_COUNT_EXCEEDS_LIMIT -59 +#define CLI_NO_SUITABLE_OBJECTS_AFTER_SKIP -60 #define CLI_SLICING_ERROR -100 diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp index 3494b94ccd..d13cbefb27 100644 --- a/src/slic3r/GUI/3DScene.cpp +++ b/src/slic3r/GUI/3DScene.cpp @@ -1044,7 +1044,8 @@ int GLVolumeCollection::load_object_volume( int instance_idx, const std::string &color_by, bool opengl_initialized, - bool in_assemble_view) + bool in_assemble_view, + bool use_loaded_id) { const ModelVolume *model_volume = model_object->volumes[volume_idx]; const int extruder_id = model_volume->extruder_id(); @@ -1079,6 +1080,11 @@ int GLVolumeCollection::load_object_volume( else v.set_instance_transformation(instance->get_transformation()); v.set_volume_transformation(model_volume->get_transformation()); + //use object's instance id + if (use_loaded_id && (instance->loaded_id > 0)) + v.model_object_ID = instance->loaded_id; + else + v.model_object_ID = instance->id().id; return int(this->volumes.size() - 1); } diff --git a/src/slic3r/GUI/3DScene.hpp b/src/slic3r/GUI/3DScene.hpp index bf6af2ee36..c61a4eb284 100644 --- a/src/slic3r/GUI/3DScene.hpp +++ b/src/slic3r/GUI/3DScene.hpp @@ -357,6 +357,8 @@ public: // An ID containing the extruder ID (used to select color). int extruder_id; + size_t model_object_ID{0}; + // Various boolean flags. struct { // Is this object selected? @@ -634,7 +636,8 @@ public: int instance_idx, const std::string &color_by, bool opengl_initialized, - bool in_assemble_view = false); + bool in_assemble_view = false, + bool use_loaded_id = false); // Load SLA auxiliary GLVolumes (for support trees or pad). void load_object_auxiliary( diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index d8b8a7526f..85094b6891 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1971,12 +1971,13 @@ void GLCanvas3D::render(bool only_init) m_render_stats.increment_fps_counter(); } -void GLCanvas3D::render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, Camera::EType camera_type) +void GLCanvas3D::render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, Camera::EType camera_type, bool use_top_view, bool for_picking) { - render_thumbnail(thumbnail_data, w, h, thumbnail_params, m_volumes, camera_type); + render_thumbnail(thumbnail_data, w, h, thumbnail_params, m_volumes, camera_type, use_top_view, for_picking); } -void GLCanvas3D::render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, const GLVolumeCollection& volumes, Camera::EType camera_type) +void GLCanvas3D::render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, + const GLVolumeCollection& volumes, Camera::EType camera_type, bool use_top_view, bool for_picking) { GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light"); ModelObjectPtrs& model_objects = GUI::wxGetApp().model().objects; @@ -1985,10 +1986,10 @@ void GLCanvas3D::render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, { case OpenGLManager::EFramebufferType::Arb: { render_thumbnail_framebuffer(thumbnail_data, w, h, thumbnail_params, - wxGetApp().plater()->get_partplate_list(), model_objects, volumes, colors, shader, camera_type); break; } + wxGetApp().plater()->get_partplate_list(), model_objects, volumes, colors, shader, camera_type, use_top_view, for_picking); break; } case OpenGLManager::EFramebufferType::Ext: { render_thumbnail_framebuffer_ext(thumbnail_data, w, h, thumbnail_params, - wxGetApp().plater()->get_partplate_list(), model_objects, volumes, colors, shader, camera_type); break; } + wxGetApp().plater()->get_partplate_list(), model_objects, volumes, colors, shader, camera_type, use_top_view, for_picking); break; } default: { render_thumbnail_legacy(thumbnail_data, w, h, thumbnail_params, wxGetApp().plater()->get_partplate_list(), model_objects, volumes, colors, shader, camera_type); break; } @@ -5375,7 +5376,9 @@ static void debug_output_thumbnail(const ThumbnailData& thumbnail_data) } #endif // ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT -void GLCanvas3D::render_thumbnail_internal(ThumbnailData& thumbnail_data, const ThumbnailsParams& thumbnail_params, PartPlateList& partplate_list, ModelObjectPtrs& model_objects, const GLVolumeCollection& volumes, std::vector>& extruder_colors, GLShaderProgram* shader, Camera::EType camera_type) +void GLCanvas3D::render_thumbnail_internal(ThumbnailData& thumbnail_data, const ThumbnailsParams& thumbnail_params, + PartPlateList& partplate_list, ModelObjectPtrs& model_objects, const GLVolumeCollection& volumes, std::vector>& extruder_colors, + GLShaderProgram* shader, Camera::EType camera_type, bool use_top_view, bool for_picking) { //BBS modify visible calc function int plate_idx = thumbnail_params.plate_id; @@ -5418,7 +5421,7 @@ void GLCanvas3D::render_thumbnail_internal(ThumbnailData& thumbnail_data, const } } - BOOST_LOG_TRIVIAL(info) << boost::format("render_thumbnail: plate_idx %1% volumes size %2%, shader %3%") % plate_idx % visible_volumes.size() %shader; + BOOST_LOG_TRIVIAL(info) << boost::format("render_thumbnail: plate_idx %1% volumes size %2%, shader %3%, use_top_view=%4%, for_picking=%5%") % plate_idx % visible_volumes.size() %shader %use_top_view %for_picking; //BoundingBoxf3 volumes_box = plate_build_volume; BoundingBoxf3 volumes_box; volumes_box.min.z() = 0; @@ -5448,11 +5451,29 @@ void GLCanvas3D::render_thumbnail_internal(ThumbnailData& thumbnail_data, const //BoundingBoxf3 plate_box = plate->get_bounding_box(false); //plate_box.min.z() = 0.0; //plate_box.max.z() = 0.0; - camera.zoom_to_box(volumes_box); - const Vec3d& target = camera.get_target(); - double distance = camera.get_distance(); - //camera.select_view("topfront"); - camera.look_at(target - 0.707 * distance * Vec3d::UnitY() + 0.3 * distance * Vec3d::UnitZ(), target, Vec3d::UnitY() + Vec3d::UnitZ()); + + if (use_top_view) { + float center_x = (plate_build_volume.max(0) + plate_build_volume.min(0))/2; + float center_y = (plate_build_volume.max(1) + plate_build_volume.min(1))/2; + float distance_z = plate_build_volume.max(2) - plate_build_volume.min(2); + Vec3d center(center_x, center_y, 0.f); + double zoom_ratio, scale_x, scale_y; + + scale_x = ((double)thumbnail_data.width)/(plate_build_volume.max(0) - plate_build_volume.min(0)); + scale_y = ((double)thumbnail_data.height)/(plate_build_volume.max(1) - plate_build_volume.min(1)); + zoom_ratio = (scale_x <= scale_y)?scale_x:scale_y; + camera.look_at(center + distance_z * Vec3d::UnitZ(), center, Vec3d::UnitY()); + camera.set_zoom(zoom_ratio); + //camera.select_view("top"); + } + else { + camera.zoom_to_box(volumes_box); + + const Vec3d& target = camera.get_target(); + double distance = camera.get_distance(); + camera.look_at(target - 0.707 * distance * Vec3d::UnitY() + 0.3 * distance * Vec3d::UnitZ(), target, Vec3d::UnitY() + Vec3d::UnitZ()); + } + camera.apply_view_matrix(); camera.apply_projection(plate_build_volume); @@ -5462,44 +5483,94 @@ void GLCanvas3D::render_thumbnail_internal(ThumbnailData& thumbnail_data, const //camera.apply_projection(volumes_box, near_z, far_z); //GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light"); - if (shader == nullptr) { - BOOST_LOG_TRIVIAL(info) << boost::format("render_thumbnail: shader is null, return directly"); + if (!for_picking && (shader == nullptr)) { + BOOST_LOG_TRIVIAL(info) << boost::format("render_thumbnail with no picking: shader is null, return directly"); return; } //if (thumbnail_params.transparent_background) - glsafe(::glClearColor(0.906f, 0.906f, 0.906f, 1.0f)); + if (for_picking) + glsafe(::glClearColor(0.f, 0.f, 0.f, 0.f)); + else + glsafe(::glClearColor(0.906f, 0.906f, 0.906f, 1.0f)); glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)); glsafe(::glEnable(GL_DEPTH_TEST)); - shader->start_using(); - shader->set_uniform("emission_factor", 0.0f); + if (for_picking) { + //if (OpenGLManager::can_multisample()) + // This flag is often ignored by NVIDIA drivers if rendering into a screen buffer. + // glsafe(::glDisable(GL_MULTISAMPLE)); - for (GLVolume* vol : visible_volumes) { - //BBS set render color for thumbnails - curr_color[0] = vol->color[0]; - curr_color[1] = vol->color[1]; - curr_color[2] = vol->color[2]; - curr_color[3] = vol->color[3]; + glsafe(::glDisable(GL_BLEND)); - shader->set_uniform("uniform_color", curr_color); - //BBS set all volume to orange - //shader->set_uniform("uniform_color", orange); - /*if (plate_idx > 0) { - shader->set_uniform("uniform_color", orange); + static const GLfloat INV_255 = 1.0f / 255.0f; + + // do not cull backfaces to show broken geometry, if any + glsafe(::glDisable(GL_CULL_FACE)); + + //glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); + //glsafe(::glEnableClientState(GL_NORMAL_ARRAY)); + + for (GLVolume* vol : visible_volumes) { + // Object picking mode. Render the object with a color encoding the object index. + // we reserve color = (0,0,0) for occluders (as the printbed) + // so we shift volumes' id by 1 to get the proper color + //BBS: remove the bed picking logic + unsigned int id = vol->model_object_ID; + //unsigned int id = 1 + volume.second.first; + unsigned int r = (id & (0x000000FF << 0)) >> 0; + unsigned int g = (id & (0x000000FF << 8)) >> 8; + unsigned int b = (id & (0x000000FF << 16)) >> 16; + unsigned int a = 0xFF; + glsafe(::glColor4f((GLfloat)r * INV_255, (GLfloat)g * INV_255, (GLfloat)b * INV_255, (GLfloat)a * INV_255)); + /*curr_color[0] = (GLfloat)r * INV_255; + curr_color[1] = (GLfloat)g * INV_255; + curr_color[2] = (GLfloat)b * INV_255; + curr_color[3] = (GLfloat)a * INV_255; + shader->set_uniform("uniform_color", curr_color);*/ + + bool is_active = vol->is_active; + vol->is_active = true; + vol->simple_render(nullptr, model_objects, extruder_colors); + vol->is_active = is_active; } - else { - shader->set_uniform("uniform_color", (vol->printable && !vol->is_outside) ? orange : gray); - }*/ - // the volume may have been deactivated by an active gizmo - bool is_active = vol->is_active; - vol->is_active = true; - vol->simple_render(shader, model_objects, extruder_colors); - vol->is_active = is_active; - } - shader->stop_using(); + //glsafe(::glDisableClientState(GL_NORMAL_ARRAY)); + //glsafe(::glDisableClientState(GL_VERTEX_ARRAY)); + + glsafe(::glEnable(GL_CULL_FACE)); + + //if (OpenGLManager::can_multisample()) + // glsafe(::glEnable(GL_MULTISAMPLE)); + } + else { + shader->start_using(); + shader->set_uniform("emission_factor", 0.0f); + for (GLVolume* vol : visible_volumes) { + //BBS set render color for thumbnails + curr_color[0] = vol->color[0]; + curr_color[1] = vol->color[1]; + curr_color[2] = vol->color[2]; + curr_color[3] = vol->color[3]; + + shader->set_uniform("uniform_color", curr_color); + //BBS set all volume to orange + //shader->set_uniform("uniform_color", orange); + /*if (plate_idx > 0) { + shader->set_uniform("uniform_color", orange); + } + else { + shader->set_uniform("uniform_color", (vol->printable && !vol->is_outside) ? orange : gray); + }*/ + // the volume may have been deactivated by an active gizmo + bool is_active = vol->is_active; + vol->is_active = true; + vol->simple_render(shader, model_objects, extruder_colors); + vol->is_active = is_active; + } + shader->stop_using(); + } glsafe(::glDisable(GL_DEPTH_TEST)); @@ -5512,7 +5583,9 @@ void GLCanvas3D::render_thumbnail_internal(ThumbnailData& thumbnail_data, const BOOST_LOG_TRIVIAL(info) << boost::format("render_thumbnail: finished"); } -void GLCanvas3D::render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, PartPlateList& partplate_list, ModelObjectPtrs& model_objects, const GLVolumeCollection& volumes, std::vector>& extruder_colors, GLShaderProgram* shader, Camera::EType camera_type) +void GLCanvas3D::render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, + PartPlateList& partplate_list, ModelObjectPtrs& model_objects, const GLVolumeCollection& volumes, std::vector>& extruder_colors, + GLShaderProgram* shader, Camera::EType camera_type, bool use_top_view, bool for_picking) { thumbnail_data.set(w, h); if (!thumbnail_data.is_valid()) @@ -5563,7 +5636,7 @@ void GLCanvas3D::render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, uns glsafe(::glDrawBuffers(1, drawBufs)); if (::glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE) { - render_thumbnail_internal(thumbnail_data, thumbnail_params, partplate_list, model_objects, volumes, extruder_colors, shader, camera_type); + render_thumbnail_internal(thumbnail_data, thumbnail_params, partplate_list, model_objects, volumes, extruder_colors, shader, camera_type, use_top_view, for_picking); if (multisample) { GLuint resolve_fbo; @@ -5616,7 +5689,9 @@ void GLCanvas3D::render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, uns BOOST_LOG_TRIVIAL(info) << boost::format("render_thumbnail prepare: finished"); } -void GLCanvas3D::render_thumbnail_framebuffer_ext(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, PartPlateList& partplate_list, ModelObjectPtrs& model_objects, const GLVolumeCollection& volumes, std::vector>& extruder_colors, GLShaderProgram* shader, Camera::EType camera_type) +void GLCanvas3D::render_thumbnail_framebuffer_ext(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, + PartPlateList& partplate_list, ModelObjectPtrs& model_objects, const GLVolumeCollection& volumes, std::vector>& extruder_colors, + GLShaderProgram* shader, Camera::EType camera_type, bool use_top_view, bool for_picking) { thumbnail_data.set(w, h); if (!thumbnail_data.is_valid()) @@ -5666,7 +5741,7 @@ void GLCanvas3D::render_thumbnail_framebuffer_ext(ThumbnailData& thumbnail_data, glsafe(::glDrawBuffers(1, drawBufs)); if (::glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_COMPLETE_EXT) { - render_thumbnail_internal(thumbnail_data, thumbnail_params, partplate_list, model_objects, volumes, extruder_colors, shader, camera_type); + render_thumbnail_internal(thumbnail_data, thumbnail_params, partplate_list, model_objects, volumes, extruder_colors, shader, camera_type, use_top_view, for_picking); if (multisample) { GLuint resolve_fbo; @@ -7339,7 +7414,7 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() if (item->selected) { ImGui::PushStyleColor(ImGuiCol_Button, button_active); ImGui::PushStyleColor(ImGuiCol_ButtonHovered, button_active); - } + } else { ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(128.0f, 128.0f, 128.0f, 0.0f)); ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.42f, 0.42f, 0.42f, 1.0f)); @@ -7615,7 +7690,7 @@ void GLCanvas3D::_render_paint_toolbar() const Slic3r::GUI::BitmapCache::parse_color(colors[i], rgb); float gray = 0.299 * rgb[0] + 0.587 * rgb[1] + 0.114 * rgb[2]; ImVec4 text_color = gray < 80 ? ImVec4(255, 255, 255, 255) : ImVec4(0, 0, 0, 255); - + ImVec2 number_label_size = ImGui::CalcTextSize(std::to_string(i + 1).c_str()); ImGui::SetCursorPosY(cursor_y + text_offset_y); ImGui::SetCursorPosX(item_spacing + i * (item_spacing + button_size) + (button_size - number_label_size.x) / 2); diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index e1b0787e3d..601f801ec5 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -832,13 +832,21 @@ public: // printable_only == false -> render also non printable volumes as grayed // parts_only == false -> render also sla support and pad - void render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, Camera::EType camera_type); - void render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, const GLVolumeCollection& volumes, Camera::EType camera_type); - static void render_thumbnail_internal(ThumbnailData& thumbnail_data, const ThumbnailsParams& thumbnail_params, PartPlateList& partplate_list, ModelObjectPtrs& model_objects, const GLVolumeCollection& volumes, std::vector>& extruder_colors, GLShaderProgram* shader, Camera::EType camera_type); + void render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, + Camera::EType camera_type, bool use_top_view = false, bool for_picking = false); + void render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, + const GLVolumeCollection& volumes, Camera::EType camera_type, bool use_top_view = false, bool for_picking = false); + static void render_thumbnail_internal(ThumbnailData& thumbnail_data, const ThumbnailsParams& thumbnail_params, PartPlateList& partplate_list, ModelObjectPtrs& model_objects, + const GLVolumeCollection& volumes, std::vector>& extruder_colors, + GLShaderProgram* shader, Camera::EType camera_type, bool use_top_view = false, bool for_picking = false); // render thumbnail using an off-screen framebuffer - static void render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, PartPlateList& partplate_list, ModelObjectPtrs& model_objects, const GLVolumeCollection& volumes, std::vector>& extruder_colors, GLShaderProgram* shader, Camera::EType camera_type); + static void render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, + PartPlateList& partplate_list, ModelObjectPtrs& model_objects, const GLVolumeCollection& volumes, std::vector>& extruder_colors, + GLShaderProgram* shader, Camera::EType camera_type, bool use_top_view = false, bool for_picking = false); // render thumbnail using an off-screen framebuffer when GLEW_EXT_framebuffer_object is supported - static void render_thumbnail_framebuffer_ext(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, PartPlateList& partplate_list, ModelObjectPtrs& model_objects, const GLVolumeCollection& volumes, std::vector>& extruder_colors, GLShaderProgram* shader, Camera::EType camera_type); + static void render_thumbnail_framebuffer_ext(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, + PartPlateList& partplate_list, ModelObjectPtrs& model_objects, const GLVolumeCollection& volumes, std::vector>& extruder_colors, + GLShaderProgram* shader, Camera::EType camera_type, bool use_top_view = false, bool for_picking = false); //BBS use gcoder viewer render calibration thumbnails void render_calibration_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params); diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 57b24fea8d..aa83adfbd3 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -2348,7 +2348,7 @@ int PartPlate::load_gcode_from_file(const std::string& filename) return ret; } -int PartPlate::load_thumbnail_data(std::string filename) +int PartPlate::load_thumbnail_data(std::string filename, ThumbnailData& thumb_data) { bool result = true; wxImage img; @@ -2357,11 +2357,11 @@ int PartPlate::load_thumbnail_data(std::string filename) img = img.Mirror(false); } if (result) { - thumbnail_data.set(img.GetWidth(), img.GetHeight()); + thumb_data.set(img.GetWidth(), img.GetHeight()); for (int i = 0; i < img.GetWidth() * img.GetHeight(); i++) { - memcpy(&thumbnail_data.pixels[4 * i], (unsigned char*)(img.GetData() + 3 * i), 3); + memcpy(&thumb_data.pixels[4 * i], (unsigned char*)(img.GetData() + 3 * i), 3); if (img.HasAlpha()) { - thumbnail_data.pixels[4 * i + 3] = *(unsigned char*)(img.GetAlpha() + i); + thumb_data.pixels[4 * i + 3] = *(unsigned char*)(img.GetAlpha() + i); } } } else { @@ -2372,7 +2372,7 @@ int PartPlate::load_thumbnail_data(std::string filename) int PartPlate::load_pattern_thumbnail_data(std::string filename) { - bool result = true; + /*bool result = true; wxImage img; result = load_image(filename, img); if (result) { @@ -2386,7 +2386,7 @@ int PartPlate::load_pattern_thumbnail_data(std::string filename) } else { return -1; - } + }*/ return 0; } @@ -3428,6 +3428,8 @@ int PartPlateList::notify_instance_update(int obj_id, int instance_id) PartPlate* plate = m_plate_list[obj_id - 1000]; plate->update_slice_result_valid_state( false ); plate->thumbnail_data.reset(); + plate->top_thumbnail_data.reset(); + plate->pick_thumbnail_data.reset(); return 0; } @@ -3456,10 +3458,14 @@ int PartPlateList::notify_instance_update(int obj_id, int instance_id) plate->update_states(); plate->update_slice_result_valid_state(); plate->thumbnail_data.reset(); + plate->top_thumbnail_data.reset(); + plate->pick_thumbnail_data.reset(); return 0; } plate->update_slice_result_valid_state(); plate->thumbnail_data.reset(); + plate->top_thumbnail_data.reset(); + plate->pick_thumbnail_data.reset(); } else if (unprintable_plate.contain_instance(obj_id, instance_id)) { @@ -3490,6 +3496,8 @@ int PartPlateList::notify_instance_update(int obj_id, int instance_id) plate->add_instance(obj_id, instance_id, false, &boundingbox); plate->update_slice_result_valid_state(); plate->thumbnail_data.reset(); + plate->top_thumbnail_data.reset(); + plate->pick_thumbnail_data.reset(); BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": add it to new plate %1%") % i; return 0; } @@ -3525,6 +3533,8 @@ int PartPlateList::notify_instance_removed(int obj_id, int instance_id) plate->remove_instance(obj_id, instance_to_delete); plate->update_slice_result_valid_state(); plate->thumbnail_data.reset(); + plate->top_thumbnail_data.reset(); + plate->pick_thumbnail_data.reset(); } if (unprintable_plate.contain_instance(obj_id, instance_to_delete)) @@ -4416,6 +4426,11 @@ int PartPlateList::store_to_3mf_structure(PlateDataPtrs& plate_data_list, bool w %(i+1) %plate_data_item->plate_thumbnail.width %plate_data_item->plate_thumbnail.height %plate_data_item->plate_thumbnail.pixels.size(); plate_data_item->config.apply(*m_plate_list[i]->config()); + if (m_plate_list[i]->top_thumbnail_data.is_valid()) + plate_data_item->top_file = "valid_top"; + if (m_plate_list[i]->pick_thumbnail_data.is_valid()) + plate_data_item->pick_file = "valid_pick"; + if (m_plate_list[i]->obj_to_instance_set.size() > 0) { for (std::set>::iterator it = m_plate_list[i]->obj_to_instance_set.begin(); it != m_plate_list[i]->obj_to_instance_set.end(); ++it) @@ -4430,8 +4445,8 @@ int PartPlateList::store_to_3mf_structure(PlateDataPtrs& plate_data_list, bool w // BBS only include current palte_idx if (plate_idx == i || plate_idx == PLATE_CURRENT_IDX || plate_idx == PLATE_ALL_IDX) { //load calibration thumbnail - if (m_plate_list[i]->cali_thumbnail_data.is_valid()) - plate_data_item->pattern_file = "valid_pattern"; + //if (m_plate_list[i]->cali_thumbnail_data.is_valid()) + // plate_data_item->pattern_file = "valid_pattern"; if (m_plate_list[i]->cali_bboxes_data.is_valid()) plate_data_item->pattern_bbox_file = "valid_pattern_bbox"; plate_data_item->gcode_file = m_plate_list[i]->m_gcode_result->filename; @@ -4513,17 +4528,29 @@ int PartPlateList::load_from_3mf_structure(PlateDataPtrs& plate_data_list) if (m_plater && !plate_data_list[i]->thumbnail_file.empty()) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": plate %1%, load thumbnail from %2%.")%(i+1) %plate_data_list[i]->thumbnail_file; if (boost::filesystem::exists(plate_data_list[i]->thumbnail_file)) { - m_plate_list[index]->load_thumbnail_data(plate_data_list[i]->thumbnail_file); + m_plate_list[index]->load_thumbnail_data(plate_data_list[i]->thumbnail_file, m_plate_list[index]->thumbnail_data); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ <thumbnail_data.width %m_plate_list[index]->thumbnail_data.height %m_plate_list[index]->thumbnail_data.pixels.size(); } } - if (m_plater && !plate_data_list[i]->pattern_file.empty()) { + /*if (m_plater && !plate_data_list[i]->pattern_file.empty()) { if (boost::filesystem::exists(plate_data_list[i]->pattern_file)) { //no need to load pattern data currently //m_plate_list[index]->load_pattern_thumbnail_data(plate_data_list[i]->pattern_file); } + }*/ + if (m_plater && !plate_data_list[i]->top_file.empty()) { + if (boost::filesystem::exists(plate_data_list[i]->top_file)) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": plate %1%, load top_thumbnail from %2%.")%(i+1) %plate_data_list[i]->top_file; + m_plate_list[index]->load_thumbnail_data(plate_data_list[i]->top_file, m_plate_list[index]->top_thumbnail_data); + } + } + if (m_plater && !plate_data_list[i]->pick_file.empty()) { + if (boost::filesystem::exists(plate_data_list[i]->pick_file)) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": plate %1%, load pick_thumbnail from %2%.")%(i+1) %plate_data_list[i]->pick_file; + m_plate_list[index]->load_thumbnail_data(plate_data_list[i]->pick_file, m_plate_list[index]->pick_thumbnail_data); + } } if (m_plater && !plate_data_list[i]->pattern_bbox_file.empty()) { if (boost::filesystem::exists(plate_data_list[i]->pattern_bbox_file)) { diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index 0a188a346e..4076df6fa6 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -231,10 +231,13 @@ public: static const int plate_thumbnail_width = 512; static const int plate_thumbnail_height = 512; - ThumbnailData cali_thumbnail_data; + ThumbnailData top_thumbnail_data; + ThumbnailData pick_thumbnail_data; + + //ThumbnailData cali_thumbnail_data; PlateBBoxData cali_bboxes_data; - static const int cali_thumbnail_width = 2560; - static const int cali_thumbnail_height = 2560; + //static const int cali_thumbnail_width = 2560; + //static const int cali_thumbnail_height = 2560; //set the plate's index void set_index(int index); @@ -410,7 +413,7 @@ public: //load gcode from file int load_gcode_from_file(const std::string& filename); //load thumbnail data from file - int load_thumbnail_data(std::string filename); + int load_thumbnail_data(std::string filename, ThumbnailData& thumb_data); //load pattern thumbnail data from file int load_pattern_thumbnail_data(std::string filename); //load pattern box data from file diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 0d9ee3c2c7..13e12f0908 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -2109,7 +2109,8 @@ struct Plater::priv #endif // ENABLE_ENHANCED_PRINT_VOLUME_FIT //BBS: add plate_id for thumbnail - void generate_thumbnail(ThumbnailData& data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, Camera::EType camera_type); + void generate_thumbnail(ThumbnailData& data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, + Camera::EType camera_type, bool use_top_view = false, bool for_picking = false); ThumbnailsList generate_thumbnails(const ThumbnailsParams& params, Camera::EType camera_type); //BBS void generate_calibration_thumbnail(ThumbnailData& data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params); @@ -6440,9 +6441,10 @@ void Plater::priv::on_3dcanvas_mouse_dragging_finished(SimpleEvent&) } //BBS: add plate id for thumbnail generate param -void Plater::priv::generate_thumbnail(ThumbnailData& data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, Camera::EType camera_type) +void Plater::priv::generate_thumbnail(ThumbnailData& data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, + Camera::EType camera_type, bool use_top_view, bool for_picking) { - view3D->get_canvas3d()->render_thumbnail(data, w, h, thumbnail_params, camera_type); + view3D->get_canvas3d()->render_thumbnail(data, w, h, thumbnail_params, camera_type, use_top_view, for_picking); } //BBS: add plate id for thumbnail generate param @@ -9523,6 +9525,7 @@ void Plater::export_stl(bool extended, bool selection_only) // BBS: backup int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy strategy, int export_plate_idx, Export3mfProgressFn proFn) { + int ret = 0; //if (p->model.objects.empty()) { // MessageDialog dialog(nullptr, _L("No objects to export."), _L("Save project"), wxYES); // if (dialog.ShowModal() == wxYES) @@ -9548,6 +9551,8 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy //BBS: add plate logic for thumbnail generate std::vector thumbnails; std::vector calibration_thumbnails; + std::vector top_thumbnails; + std::vector picking_thumbnails; std::vector plate_bboxes; // BBS: backup if (!(strategy & SaveStrategy::Backup)) { @@ -9560,22 +9565,50 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy else { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": re-generate thumbnail for plate %1%") % i; const ThumbnailsParams thumbnail_params = { {}, false, true, true, true, i }; - p->generate_thumbnail(p->partplate_list.get_plate(i)->thumbnail_data, THUMBNAIL_SIZE_3MF.first, THUMBNAIL_SIZE_3MF.second, thumbnail_params, Camera::EType::Ortho); + p->generate_thumbnail(p->partplate_list.get_plate(i)->thumbnail_data, THUMBNAIL_SIZE_3MF.first, THUMBNAIL_SIZE_3MF.second, + thumbnail_params, Camera::EType::Ortho); } thumbnails.push_back(thumbnail_data); - ThumbnailData* calibration_data = &p->partplate_list.get_plate(i)->cali_thumbnail_data; - calibration_thumbnails.push_back(calibration_data); + //ThumbnailData* calibration_data = &p->partplate_list.get_plate(i)->cali_thumbnail_data; + //calibration_thumbnails.push_back(calibration_data); PlateBBoxData* plate_bbox_data = &p->partplate_list.get_plate(i)->cali_bboxes_data; plate_bboxes.push_back(plate_bbox_data); + + //generate top and picking thumbnails + ThumbnailData* top_thumbnail = &p->partplate_list.get_plate(i)->top_thumbnail_data; + if (top_thumbnail->is_valid() && using_exported_file()) { + //no need to generate thumbnail + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": non need to re-generate top_thumbnail for gcode/exported mode of plate %1%")%i; + } + else { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": re-generate top_thumbnail for plate %1%") % i; + const ThumbnailsParams thumbnail_params = { {}, false, true, false, true, i }; + p->generate_thumbnail(p->partplate_list.get_plate(i)->top_thumbnail_data, THUMBNAIL_SIZE_3MF.first, THUMBNAIL_SIZE_3MF.second, + thumbnail_params, Camera::EType::Ortho, true, false); + } + top_thumbnails.push_back(top_thumbnail); + + ThumbnailData* picking_thumbnail = &p->partplate_list.get_plate(i)->pick_thumbnail_data; + if (picking_thumbnail->is_valid() && using_exported_file()) { + //no need to generate thumbnail + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": non need to re-generate pick_thumbnail for gcode/exported mode of plate %1%")%i; + } + else { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": re-generate pick_thumbnail for plate %1%") % i; + const ThumbnailsParams thumbnail_params = { {}, false, true, false, true, i }; + p->generate_thumbnail(p->partplate_list.get_plate(i)->pick_thumbnail_data, THUMBNAIL_SIZE_3MF.first, THUMBNAIL_SIZE_3MF.second, + thumbnail_params, Camera::EType::Ortho, true, true); + } + picking_thumbnails.push_back(picking_thumbnail); } if (p->partplate_list.get_curr_plate()->is_slice_result_valid()) { //BBS generate BBS calibration thumbnails int index = p->partplate_list.get_curr_plate_index(); - ThumbnailData* calibration_data = calibration_thumbnails[index]; - const ThumbnailsParams calibration_params = { {}, false, true, true, true, p->partplate_list.get_curr_plate_index() }; - p->generate_calibration_thumbnail(*calibration_data, PartPlate::cali_thumbnail_width, PartPlate::cali_thumbnail_height, calibration_params); + //ThumbnailData* calibration_data = calibration_thumbnails[index]; + //const ThumbnailsParams calibration_params = { {}, false, true, true, true, p->partplate_list.get_curr_plate_index() }; + //p->generate_calibration_thumbnail(*calibration_data, PartPlate::cali_thumbnail_width, PartPlate::cali_thumbnail_height, calibration_params); if (using_exported_file()) { //do nothing } @@ -9600,6 +9633,8 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy store_params.project_presets = project_presets; store_params.config = export_config ? &cfg : nullptr; store_params.thumbnail_data = thumbnails; + store_params.top_thumbnail_data = top_thumbnails; + store_params.pick_thumbnail_data = picking_thumbnails; store_params.calibration_thumbnail_data = calibration_thumbnails; store_params.proFn = proFn; store_params.id_bboxes = plate_bboxes;//BBS @@ -9661,7 +9696,7 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy } } else { - return -1; + ret = -1; } if (project_presets.size() > 0) @@ -9680,8 +9715,20 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy //release the data here, as it will always be generated when export calibration_thumbnails[i]->reset(); } + for (unsigned int i = 0; i < top_thumbnails.size(); i++) + { + //release the data here, as it will always be generated when export + top_thumbnails[i]->reset(); + } + top_thumbnails.clear(); + for (unsigned int i = 0; i < picking_thumbnails.size(); i++) + { + //release the data here, as it will always be generated when export + picking_thumbnails[i]->reset();; + } + picking_thumbnails.clear(); - return 0; + return ret; } void Plater::publish_project() From ad43a54e3d4fd45988c23f838cd6970fc7436f81 Mon Sep 17 00:00:00 2001 From: "salt.wei" Date: Fri, 10 Mar 2023 17:35:24 +0800 Subject: [PATCH 060/339] ENH: fix compiling issue Don't know why this file is missing when cherry-pick... Signed-off-by: salt.wei Change-Id: Iddfba50ef885fa08078bb9723a6ae2d5d5d0289d --- src/libslic3r/Line.hpp | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/Line.hpp b/src/libslic3r/Line.hpp index 781d8cb140..118a921355 100644 --- a/src/libslic3r/Line.hpp +++ b/src/libslic3r/Line.hpp @@ -54,11 +54,11 @@ double distance_to_squared(const L &line, const Vec, Scalar> &point, V // We find projection of this point onto the line. // It falls where t = [(this-a) . (b-a)] / |b-a|^2 const double t = va.dot(v) / l2; - if (t < 0.0) { + if (t <= 0.0) { // beyond the 'a' end of the segment *nearest_point = get_a(line); return va.squaredNorm(); - } else if (t > 1.0) { + } else if (t >= 1.0) { // beyond the 'b' end of the segment *nearest_point = get_b(line); return (point - get_b(line)).template cast().squaredNorm(); @@ -120,6 +120,33 @@ double distance_to_infinite(const L &line, const Vec, Scalar> &point) return std::sqrt(distance_to_infinite_squared(line, point)); } +template bool intersection(const L &l1, const L &l2, Vec, Scalar> *intersection_pt) +{ + using Floating = typename std::conditional>::value, Scalar, double>::type; + using VecType = const Vec, Floating>; + const VecType v1 = (l1.b - l1.a).template cast(); + const VecType v2 = (l2.b - l2.a).template cast(); + Floating denom = cross2(v1, v2); + if (fabs(denom) < EPSILON) +#if 0 + // Lines are collinear. Return true if they are coincident (overlappign). + return ! (fabs(nume_a) < EPSILON && fabs(nume_b) < EPSILON); +#else + return false; +#endif + const VecType v12 = (l1.a - l2.a).template cast(); + Floating nume_a = cross2(v2, v12); + Floating nume_b = cross2(v1, v12); + Floating t1 = nume_a / denom; + Floating t2 = nume_b / denom; + if (t1 >= 0 && t1 <= 1.0f && t2 >= 0 && t2 <= 1.0f) { + // Get the intersection point. + (*intersection_pt) = (l1.a.template cast() + t1 * v1).template cast>(); + return true; + } + return false; // not intersecting +} + } // namespace line_alg class Line From c098e01b225fbe9b6079f4b37e8f1660441baf7c Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Fri, 10 Mar 2023 18:14:17 +0800 Subject: [PATCH 061/339] FIX: modify plate print sequence, the wipe tower is not update STUDIO-2279 STUDIO-2280 Change-Id: I9a65ae4c02afc48666131b37d0282d59aa25c560 --- src/slic3r/GUI/GLCanvas3D.cpp | 8 ++++++-- src/slic3r/GUI/Plater.cpp | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 85094b6891..7756d3680e 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2556,8 +2556,12 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re if (wt && (timelapse_enabled || filaments_count > 1)) { for (int plate_id = 0; plate_id < n_plates; plate_id++) { // If print ByObject and there is only one object in the plate, the wipe tower is allowed to be generated. - if (co != nullptr && co->value == PrintSequence::ByObject && ppl.get_plate(plate_id)->printable_instance_size() != 1) - continue; + PartPlate* part_plate = ppl.get_plate(plate_id); + if (part_plate->get_print_seq() == PrintSequence::ByObject || + (part_plate->get_print_seq() == PrintSequence::ByDefault && co != nullptr && co->value == PrintSequence::ByObject)) { + if (ppl.get_plate(plate_id)->printable_instance_size() != 1) + continue; + } DynamicPrintConfig& proj_cfg = wxGetApp().preset_bundle->project_config; float x = dynamic_cast(proj_cfg.option("wipe_tower_x"))->get_at(plate_id); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 13e12f0908..6f0b862521 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -11205,6 +11205,7 @@ int Plater::select_plate_by_hover_id(int hover_id, bool right_click) BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format("select print sequence %1% for plate %2% at plate side")%ps_sel %plate_index; auto plate_config = *(curr_plate->config()); wxGetApp().plater()->config_change_notification(plate_config, std::string("print_sequence")); + update(); }); dlg.ShowModal(); From f227a8f8da7b328e6a234e50473001b6e08d278f Mon Sep 17 00:00:00 2001 From: Arthur Date: Fri, 10 Mar 2023 20:14:42 +0800 Subject: [PATCH 062/339] FIX: sequential_print_clearance_valid may crash due to clipper's bug offset may give empty results. Jira: STUDIO-2452 Change-Id: I4da9689dc3e22afcb2340ce0f9956237e4aab434 (cherry picked from commit 3f33979a79c720fcaddb5b850ec278b3deaf2417) --- src/libslic3r/Print.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index daf6b08e63..de7e40cda4 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -460,14 +460,17 @@ StringObjectException Print::sequential_print_clearance_valid(const Print &print // Now we check that no instance of convex_hull intersects any of the previously checked object instances. for (const PrintInstance &instance : print_object->instances()) { Polygon convex_hull_no_offset = convex_hull0, convex_hull; - convex_hull = offset(convex_hull_no_offset, + auto tmp = offset(convex_hull_no_offset, // Shrink the extruder_clearance_radius a tiny bit, so that if the object arrangement algorithm placed the objects // exactly by satisfying the extruder_clearance_radius, this test will not trigger collision. float(scale_(0.5 * print.config().extruder_clearance_max_radius.value - EPSILON)), - jtRound, scale_(0.1)).front(); - // instance.shift is a position of a centered object, while model object may not be centered. - // Convert the shift from the PrintObject's coordinates into ModelObject's coordinates by removing the centering offset. - convex_hull.translate(instance.shift - print_object->center_offset()); + jtRound, scale_(0.1)); + if (!tmp.empty()) { // tmp may be empty due to clipper's bug, see STUDIO-2452 + convex_hull = tmp.front(); + // instance.shift is a position of a centered object, while model object may not be centered. + // Convert the shift from the PrintObject's coordinates into ModelObject's coordinates by removing the centering offset. + convex_hull.translate(instance.shift - print_object->center_offset()); + } convex_hull_no_offset.translate(instance.shift - print_object->center_offset()); //juedge the exclude area if (!intersection(exclude_polys, convex_hull_no_offset).empty()) { From aebbe807f2d7b9d4c7ed001638e58210b25dedfa Mon Sep 17 00:00:00 2001 From: Arthur Date: Fri, 10 Mar 2023 21:01:39 +0800 Subject: [PATCH 063/339] FIX: update_sequential_clearance may crash due to clipper's bug offset may give empty results. The previous patch solved the issue that the studio crashes immediately when selecting by-object printing. This patch solves the issue that the studio crashes when moving objects with mouse after selecting by-object printing. Jira: STUDIO-2452 Change-Id: Iacd69e67386b0750f24e5af2799ff9c0da130e88 (cherry picked from commit 8ea4379d0b6d61e91bd6704e4b1e8309cb42b924) --- src/slic3r/GUI/GLCanvas3D.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 7756d3680e..b0f9b54843 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -4964,17 +4964,19 @@ void GLCanvas3D::update_sequential_clearance() for (size_t i = 0; i < m_model->objects.size(); ++i) { ModelObject* model_object = m_model->objects[i]; ModelInstance* model_instance0 = model_object->instances.front(); - Polygon hull_2d = offset(model_object->convex_hull_2d(Geometry::assemble_transform({ 0.0, 0.0, model_instance0->get_offset().z() }, model_instance0->get_rotation(), + auto tmp = offset(model_object->convex_hull_2d(Geometry::assemble_transform({ 0.0, 0.0, model_instance0->get_offset().z() }, model_instance0->get_rotation(), model_instance0->get_scaling_factor(), model_instance0->get_mirror())), // Shrink the extruder_clearance_radius a tiny bit, so that if the object arrangement algorithm placed the objects // exactly by satisfying the extruder_clearance_radius, this test will not trigger collision. shrink_factor, - jtRound, mitter_limit).front(); - - Pointf3s& cache_hull_2d = m_sequential_print_clearance.m_hull_2d_cache.emplace_back(Pointf3s()); - cache_hull_2d.reserve(hull_2d.points.size()); - for (const Point& p : hull_2d.points) { - cache_hull_2d.emplace_back(unscale(p.x()), unscale(p.y()), 0.0); + jtRound, mitter_limit); + if (!tmp.empty()) { // tmp may be empty due to clipper's bug, see STUDIO-2452 + Polygon hull_2d = tmp.front(); + Pointf3s& cache_hull_2d = m_sequential_print_clearance.m_hull_2d_cache.emplace_back(Pointf3s()); + cache_hull_2d.reserve(hull_2d.points.size()); + for (const Point& p : hull_2d.points) { + cache_hull_2d.emplace_back(unscale(p.x()), unscale(p.y()), 0.0); + } } } m_sequential_print_clearance_first_displacement = false; From 8be8f20f7528cd9ca4ddd5c7b2b9f00b69dbaca5 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Thu, 9 Mar 2023 14:23:42 +0800 Subject: [PATCH 064/339] FIX: [STUDIO-2364] use generic render for item selection Change-Id: Iebda6269b736e25802798fcc128230d4bb87c760 --- src/slic3r/GUI/GUI_ObjectList.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 587d4dc33a..22f2dff124 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -34,6 +34,7 @@ #ifdef __WXMSW__ #include "wx/uiaction.h" +#include #endif /* __WXMSW__ */ namespace Slic3r @@ -73,6 +74,17 @@ static void take_snapshot(const std::string& snapshot_name) plater->take_snapshot(snapshot_name); } +class wxRenderer : public wxDelegateRendererNative +{ +public: + wxRenderer() : wxDelegateRendererNative(wxRendererNative::Get()) {} + virtual void DrawItemSelectionRect(wxWindow *win, + wxDC& dc, + const wxRect& rect, + int flags = 0) wxOVERRIDE + { GetGeneric().DrawItemSelectionRect(win, dc, rect, flags); } +}; + ObjectList::ObjectList(wxWindow* parent) : wxDataViewCtrl(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxDV_MULTIPLE) { @@ -80,6 +92,8 @@ ObjectList::ObjectList(wxWindow* parent) : SetFont(Label::sysFont(13)); #ifdef __WXMSW__ GenericGetHeader()->SetFont(Label::sysFont(13)); + static auto render = new wxRenderer; + wxRendererNative::Set(render); #endif // create control From 304e29529b00c39c6dcca4f3be0a1affe954b9e5 Mon Sep 17 00:00:00 2001 From: tao wang Date: Wed, 8 Mar 2023 17:14:09 +0800 Subject: [PATCH 065/339] ENH:optimize ams ui layout and add vams load/unload display Change-Id: I17db70fe01f3fd00b60804e9a076248eb14fa845 --- src/slic3r/GUI/StatusPanel.cpp | 15 +- src/slic3r/GUI/Widgets/AMSControl.cpp | 336 +++++++++++++++++++++----- src/slic3r/GUI/Widgets/AMSControl.hpp | 66 ++++- 3 files changed, 341 insertions(+), 76 deletions(-) diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 920a81462a..109fd1647b 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -1964,26 +1964,27 @@ void StatusPanel::update_ams(MachineObject *obj) is_vt_tray = true; // set segment 1, 2 - if ( obj->m_ams_id != curr_ams_id || obj->m_tray_now == std::to_string(VIRTUAL_TRAY_ID) ) { - m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + if (obj->m_tray_now == std::to_string(VIRTUAL_TRAY_ID) ) { + m_ams_control->SetAmsStep(obj->m_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); } else { if (obj->m_tray_now != "255" && obj->is_filament_at_extruder() && !obj->m_tray_id.empty()) { - m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2); + m_ams_control->SetAmsStep(obj->m_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2); } else if (obj->m_tray_now != "255") { - m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1); + m_ams_control->SetAmsStep(obj->m_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1); } else { - m_ams_control->SetAmsStep(curr_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + m_ams_control->SetAmsStep(obj->m_ams_id, obj->m_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); } } // set segment 3 if (obj->m_tray_now == std::to_string(VIRTUAL_TRAY_ID)) { - m_ams_control->SetExtruder(obj->is_filament_at_extruder(), obj->vt_tray.get_color()); + m_ams_control->SetExtruder(obj->is_filament_at_extruder(), true, obj->vt_tray.get_color()); } else { - m_ams_control->SetExtruder(obj->is_filament_at_extruder(), m_ams_control->GetCanColour(obj->m_ams_id, obj->m_tray_id)); + m_ams_control->SetExtruder(obj->is_filament_at_extruder(), false, m_ams_control->GetCanColour(obj->m_ams_id, obj->m_tray_id)); + } if (obj->ams_status_main == AMS_STATUS_MAIN_FILAMENT_CHANGE) { diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index 7bbd2a2f6b..c640b9bbe7 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -401,12 +401,87 @@ void AMSextruder::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, co m_bitmap_panel->SetSizer(m_bitmap_sizer); m_bitmap_panel->Layout(); + m_sizer_body->Add( 0, 0, 1, wxEXPAND, 0 ); m_sizer_body->Add(m_bitmap_panel, 0, wxALIGN_CENTER, 0); SetSizer(m_sizer_body); + + Bind(wxEVT_PAINT, &AMSextruder::paintEvent, this); Layout(); } +void AMSextruder::OnVamsLoading(bool load, wxColour col) +{ + m_vams_loading = load; + if (load)m_current_colur = col; + Refresh(); +} + +void AMSextruder::OnAmsLoading(bool load, wxColour col /*= AMS_CONTROL_GRAY500*/) +{ + m_ams_loading = load; + if (load)m_current_colur = col; + Refresh(); +} + +void AMSextruder::paintEvent(wxPaintEvent& evt) +{ + wxPaintDC dc(this); + render(dc); +} + +void AMSextruder::render(wxDC& dc) +{ +#ifdef __WXMSW__ + wxSize size = GetSize(); + wxMemoryDC memdc; + wxBitmap bmp(size.x, size.y); + memdc.SelectObject(bmp); + memdc.Blit({ 0, 0 }, size, &dc, { 0, 0 }); + + { + wxGCDC dc2(memdc); + doRender(dc2); + } + + memdc.SelectObject(wxNullBitmap); + dc.DrawBitmap(bmp, 0, 0); +#else + doRender(dc); +#endif + +} + +void AMSextruder::doRender(wxDC& dc) +{ + //m_current_colur = + wxSize size = GetSize(); + dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID)); + dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); + dc.DrawLine(size.x / 2, -1, size.x / 2, size.y * 0.6 - 1); + + if (m_has_vams) { + dc.DrawRoundedRectangle(-size.x / 2, FromDIP(8), size.x, size.y, 4); + + if (m_vams_loading) { + dc.SetPen(wxPen(m_current_colur, 6, wxSOLID)); + dc.DrawRoundedRectangle(-size.x / 2, FromDIP(8), size.x, size.y, 4); + } + + if (m_ams_loading) { + dc.SetPen(wxPen(m_current_colur, 6, wxSOLID)); + dc.DrawLine(size.x / 2, -1, size.x / 2, size.y * 0.6 - 1); + } + } + else { + if (m_ams_loading) { + dc.SetPen(wxPen(m_current_colur, 6, wxSOLID)); + dc.DrawLine(size.x / 2, -1, size.x / 2, size.y * 0.6 - 1); + } + } + +} + void AMSextruder::msw_rescale() { m_amsSextruder->msw_rescale(); @@ -415,6 +490,82 @@ void AMSextruder::msw_rescale() Refresh(); } +/************************************************* +Description:AMSVirtualRoad +**************************************************/ + +AMSVirtualRoad::AMSVirtualRoad(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size) { create(parent, id, pos, size); } + +AMSVirtualRoad::~AMSVirtualRoad() {} + +void AMSVirtualRoad::OnVamsLoading(bool load, wxColour col) +{ + m_vams_loading = load; + if (load)m_current_color = col; + Refresh(); +} + +void AMSVirtualRoad::create(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size) +{ + wxWindow::Create(parent, id, pos, wxDefaultSize, wxBORDER_NONE); + SetBackgroundColour(AMS_CONTROL_WHITE_COLOUR); + Layout(); + Bind(wxEVT_PAINT, &AMSVirtualRoad::paintEvent, this); +} + +void AMSVirtualRoad::paintEvent(wxPaintEvent& evt) +{ + wxPaintDC dc(this); + render(dc); +} + +void AMSVirtualRoad::render(wxDC& dc) +{ +#ifdef __WXMSW__ + wxSize size = GetSize(); + wxMemoryDC memdc; + wxBitmap bmp(size.x, size.y); + memdc.SelectObject(bmp); + memdc.Blit({ 0, 0 }, size, &dc, { 0, 0 }); + + { + wxGCDC dc2(memdc); + doRender(dc2); + } + + memdc.SelectObject(wxNullBitmap); + dc.DrawBitmap(bmp, 0, 0); +#else + doRender(dc); +#endif +} + +void AMSVirtualRoad::doRender(wxDC& dc) +{ + if (!m_has_vams) return; + + wxSize size = GetSize(); + if (m_vams_loading) { + dc.SetPen(wxPen(m_current_color, 6, wxSOLID)); + } + else { + dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID)); + } + + dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); + + dc.DrawRoundedRectangle(size.x / 2, -FromDIP(9), size.x, FromDIP(18), 4); +} + + +void AMSVirtualRoad::msw_rescale() +{ + Layout(); + Update(); + Refresh(); +} + + /************************************************* Description:AMSLib **************************************************/ @@ -805,6 +956,8 @@ AMSRoad::AMSRoad(wxWindow *parent, wxWindowID id, Caninfo info, int canindex, in m_rode_mode = AMSRoadMode::AMS_ROAD_MODE_LEFT_RIGHT; } else if (m_canindex == (maxcan - 1)) { m_rode_mode = AMSRoadMode::AMS_ROAD_MODE_LEFT; + } else if (m_canindex == -1 && maxcan == -1) { + m_rode_mode = AMSRoadMode::AMS_ROAD_MODE_VIRTUAL_TRAY; } else { m_rode_mode = AMSRoadMode::AMS_ROAD_MODE_NONE_ANY_ROAD; @@ -854,6 +1007,13 @@ void AMSRoad::Update(AMSinfo amsinfo, Caninfo info, int canindex, int maxcan) Refresh(); } +void AMSRoad::OnVamsLoading(bool load, wxColour col /*= AMS_CONTROL_GRAY500*/) +{ + m_vams_loading = load; + if(load)m_road_color = col; + Refresh(); +} + void AMSRoad::SetPassRoadColour(wxColour col) { m_road_color = col; } void AMSRoad::SetMode(AMSRoadMode mode) @@ -927,6 +1087,12 @@ void AMSRoad::doRender(wxDC &dc) // dc.DrawLine(size.x / 2, size.y * 0.6 - 1, size.x, size.y * 0.6 - 1); } + //virtual road + if (m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_VIRTUAL_TRAY) { + dc.SetBrush(wxBrush(m_road_def_color)); + dc.DrawLine(size.x / 2, -1, size.x / 2, size.y - 1); + } + // mode none // if (m_pass_rode_mode.size() == 1 && m_pass_rode_mode[0] == AMSPassRoadMode::AMS_ROAD_MODE_NONE) return; @@ -950,6 +1116,10 @@ void AMSRoad::doRender(wxDC &dc) } } + if (m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_VIRTUAL_TRAY && m_vams_loading) { + dc.DrawLine(size.x / 2, -1, size.x / 2, size.y - 1); + } + // end mode if (m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_END || m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_END_ONLY) { dc.SetPen(wxPen(m_road_def_color, 2, wxSOLID)); @@ -1036,8 +1206,6 @@ void AMSRoad::OnPassRoad(std::vector prord_list) } } } - - //Refresh(); } /************************************************* @@ -1367,6 +1535,16 @@ void AmsCans::SelectCan(std::string canid) } } +wxColour AmsCans::GetTagColr(wxString canid) +{ + auto tag_colour = *wxWHITE; + for (auto i = 0; i < m_can_lib_list.GetCount(); i++) { + CanLibs* lib = m_can_lib_list[i]; + if (canid == lib->canLib->m_info.can_id) tag_colour = lib->canLib->GetLibColour(); + } + return tag_colour; +} + void AmsCans::SetAmsStep(wxString canid, AMSPassRoadType type, AMSPassRoadSTEP step) { @@ -1505,6 +1683,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons wxBoxSizer *m_sizer_body = new wxBoxSizer(wxVERTICAL); m_amswin = new wxWindow(this, wxID_ANY, wxDefaultPosition, wxSize(-1, AMS_CAN_ITEM_HEIGHT_SIZE)); m_amswin->SetBackgroundColour(*wxWHITE); + // top - ams tag m_simplebook_amsitems = new wxSimplebook(m_amswin, wxID_ANY); m_simplebook_amsitems->SetSize(wxSize(-1, AMS_CAN_ITEM_HEIGHT_SIZE)); @@ -1624,21 +1803,31 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_extruder = new AMSextruder(extruder_pane, wxID_ANY, wxDefaultPosition, AMS_EXTRUDER_SIZE); sizer_sextruder->Add(m_extruder, 0, wxALIGN_CENTER, 0); - m_sizer_left_bottom->Add(extruder_pane, 0, wxLEFT, FromDIP(10)); + m_sizer_left_bottom->Add(extruder_pane, 0, wxALL,0); //m_sizer_left_bottom->Add(0, 0, 0, wxEXPAND, 0); - StateColor btn_bg_green(std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Disabled),std::pair(wxColour(27, 136, 68), StateColor::Pressed), std::pair(wxColour(61, 203, 115), StateColor::Hovered), + StateColor btn_bg_green(std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Disabled), + std::pair(wxColour(27, 136, 68), StateColor::Pressed), + std::pair(wxColour(61, 203, 115), StateColor::Hovered), std::pair(AMS_CONTROL_BRAND_COLOUR, StateColor::Normal)); - StateColor btn_bg_white(std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Disabled), std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Pressed), - std::pair(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, StateColor::Hovered), - std::pair(AMS_CONTROL_WHITE_COLOUR, StateColor::Normal)); + StateColor btn_bg_white(std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Disabled), + std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Pressed), + std::pair(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, StateColor::Hovered), + std::pair(AMS_CONTROL_WHITE_COLOUR, StateColor::Normal)); - StateColor btn_bd_green(std::pair(AMS_CONTROL_WHITE_COLOUR, StateColor::Disabled), std::pair(AMS_CONTROL_BRAND_COLOUR, StateColor::Enabled)); - StateColor btn_bd_white(std::pair(AMS_CONTROL_WHITE_COLOUR, StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); - StateColor btn_text_green(std::pair(*wxBLACK, StateColor::Disabled), std::pair(AMS_CONTROL_WHITE_COLOUR, StateColor::Enabled)); - //m_sizer_left_bottom->AddStretchSpacer(); + StateColor btn_bd_green(std::pair(wxColour(255,255,254), StateColor::Disabled), + std::pair(AMS_CONTROL_BRAND_COLOUR, StateColor::Enabled)); + + StateColor btn_bd_white(std::pair(wxColour(255,255,254), StateColor::Disabled), + std::pair(wxColour(38, 46, 48), StateColor::Enabled)); + + StateColor btn_text_green(std::pair(wxColour(255,255,254), StateColor::Disabled), + std::pair(wxColour(255,255,254), StateColor::Enabled)); + + StateColor btn_text_white(std::pair(wxColour(255, 255, 254), StateColor::Disabled), + std::pair(wxColour(38, 46, 48), StateColor::Enabled)); m_button_area = new wxWindow(m_amswin, wxID_ANY); m_button_area->SetBackgroundColour(m_amswin->GetBackgroundColour()); @@ -1654,12 +1843,13 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_button_extruder_feed = new Button(m_button_area, _L("Load Filament")); m_button_extruder_feed->SetBackgroundColor(btn_bg_green); m_button_extruder_feed->SetBorderColor(btn_bd_green); - m_button_extruder_feed->SetTextColor(wxColour("#FFFFFE")); + m_button_extruder_feed->SetTextColor(btn_text_green); m_button_extruder_feed->SetFont(Label::Body_13); m_button_extruder_back = new Button(m_button_area, _L("Unload Filament")); m_button_extruder_back->SetBackgroundColor(btn_bg_white); m_button_extruder_back->SetBorderColor(btn_bd_white); + m_button_extruder_back->SetTextColor(btn_text_white); m_button_extruder_back->SetFont(Label::Body_13); m_sizer_button_area->Add(0, 0, 1, wxEXPAND, 0); @@ -1684,9 +1874,10 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_vams_info.material_state = AMSCanType::AMS_CAN_TYPE_VIRTUAL; m_vams_info.can_id = wxString::Format("%d", VIRTUAL_TRAY_ID).ToStdString(); + auto vams_panel = new wxWindow(m_panel_virtual, wxID_ANY); vams_panel->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); - //m_vams_refresh = new AMSrefresh(vams_panel, wxID_ANY, 0, m_vams_info); + m_vams_lib = new AMSLib(vams_panel, wxID_ANY, m_vams_info); m_vams_road = new AMSRoad(vams_panel, wxID_ANY, m_vams_info, -1, -1, wxDefaultPosition, AMS_CAN_ROAD_SIZE); @@ -1705,20 +1896,25 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons }); Bind(EVT_AMS_UNSELETED_VAMS, [this](wxCommandEvent& e) { + if (m_current_ams == e.GetString().ToStdString()) { + return; + } m_current_ams = e.GetString().ToStdString(); SwitchAms(m_current_ams); m_vams_lib->UnSelected(); e.Skip(); }); - wxBoxSizer* m_sizer_vams = new wxBoxSizer(wxVERTICAL); - m_sizer_vams->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(14)); - //m_sizer_vams->Add(m_vams_refresh, 0, wxALIGN_CENTER_HORIZONTAL, 0); - m_sizer_vams->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(2) + AMS_REFRESH_SIZE.y); - m_sizer_vams->Add(m_vams_lib, 1, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, FromDIP(4)); - m_sizer_vams->Add(m_vams_road, 0, wxALL, 0); + wxBoxSizer* m_vams_top_sizer = new wxBoxSizer(wxVERTICAL); - vams_panel->SetSizer(m_sizer_vams); + m_vams_top_sizer->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(14)); + m_vams_top_sizer->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(2) + AMS_REFRESH_SIZE.y); + m_vams_top_sizer->Add(m_vams_lib, 1, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, FromDIP(4)); + m_vams_top_sizer->Add(m_vams_road, 0, wxALL, 0); + + //extra road + + vams_panel->SetSizer(m_vams_top_sizer); vams_panel->Layout(); vams_panel->Fit(); @@ -1728,11 +1924,10 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_panel_virtual->SetSizer(m_sizer_vams_panel); m_panel_virtual->Layout(); m_panel_virtual->Fit(); - //virtual ams m_vams_sizer = new wxBoxSizer(wxVERTICAL); - m_sizer_vams_tips = new wxBoxSizer(wxHORIZONTAL); + auto m_vams_tip = new wxStaticText(m_amswin, wxID_ANY, _L("Ext Spool")); m_vams_tip->SetFont(::Label::Body_12); m_vams_tip->SetBackgroundColour(*wxWHITE); @@ -1750,54 +1945,59 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_ams_introduce_popup.Dismiss(); }); - - m_sizer_vams_tips->Add(m_vams_tip, 0, wxALIGN_CENTER, 0); m_sizer_vams_tips->Add(img_vams_tip, 0, wxALL, FromDIP(2)); + m_vams_extra_road = new AMSVirtualRoad(m_amswin, wxID_ANY); + m_vams_extra_road->SetMinSize(wxSize(m_panel_virtual->GetSize().x + FromDIP(16), -1)); + m_vams_sizer->Add(m_sizer_vams_tips, 0, wxALIGN_CENTER, 0); m_vams_sizer->Add(m_panel_virtual, 0, wxALIGN_CENTER, 0); + m_vams_sizer->Add(m_vams_extra_road, 1, wxEXPAND, 0); - m_sizer_bottom->Add(m_vams_sizer, 0, wxEXPAND, 0); - m_sizer_bottom->Add(0, 0, 0, wxEXPAND | wxLEFT, FromDIP(10)); - m_sizer_bottom->Add(m_sizer_left, 0, wxEXPAND, 0); - m_sizer_bottom->Add(0, 0, 0, wxEXPAND | wxLEFT, FromDIP(23)); + //Right wxBoxSizer *m_sizer_right = new wxBoxSizer(wxVERTICAL); m_simplebook_right = new wxSimplebook(m_amswin, wxID_ANY); - m_simplebook_right->SetMinSize(AMS_STEP_SIZE); - m_simplebook_right->SetSize(AMS_STEP_SIZE); + m_simplebook_right->SetMinSize(wxSize(AMS_STEP_SIZE.x, AMS_STEP_SIZE.y + FromDIP(19))); + m_simplebook_right->SetMaxSize(wxSize(AMS_STEP_SIZE.x, AMS_STEP_SIZE.y + FromDIP(19))); m_simplebook_right->SetBackgroundColour(*wxWHITE); + m_sizer_right->Add(m_simplebook_right, 0, wxALL, 0); auto tip_right = new wxPanel(m_simplebook_right, wxID_ANY, wxDefaultPosition, AMS_STEP_SIZE, wxTAB_TRAVERSAL); m_sizer_right_tip = new wxBoxSizer(wxVERTICAL); + m_tip_right_top = new wxStaticText(tip_right, wxID_ANY, _L("Tips"), wxDefaultPosition, wxDefaultSize, 0); m_tip_right_top->SetFont(::Label::Head_13); m_tip_right_top->SetForegroundColour(AMS_CONTROL_BRAND_COLOUR); m_tip_right_top->Wrap(AMS_STEP_SIZE.x); - m_sizer_right_tip->Add(m_tip_right_top, 0, 0, 0); - m_sizer_right_tip->Add(0, 0, 0, wxTOP, FromDIP(10)); + + m_tip_load_info = new wxStaticText(tip_right, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); m_tip_load_info->SetFont(::Label::Body_13); m_tip_load_info->SetForegroundColour(AMS_CONTROL_GRAY700); + + m_sizer_right_tip->Add(m_tip_right_top, 0, 0, 0); + m_sizer_right_tip->Add(0, 0, 0, wxEXPAND, FromDIP(10)); m_sizer_right_tip->Add(m_tip_load_info, 0, 0, 0); + tip_right->SetSizer(m_sizer_right_tip); tip_right->Layout(); m_filament_load_step = new ::StepIndicator(m_simplebook_right, wxID_ANY); m_filament_load_step->SetMinSize(AMS_STEP_SIZE); - m_filament_load_step->SetSize(AMS_STEP_SIZE); + m_filament_load_step->SetMaxSize(AMS_STEP_SIZE); m_filament_load_step->SetBackgroundColour(*wxWHITE); m_filament_unload_step = new ::StepIndicator(m_simplebook_right, wxID_ANY); m_filament_unload_step->SetMinSize(AMS_STEP_SIZE); - m_filament_unload_step->SetSize(AMS_STEP_SIZE); + m_filament_unload_step->SetMaxSize(AMS_STEP_SIZE); m_filament_unload_step->SetBackgroundColour(*wxWHITE); m_filament_vt_load_step = new ::StepIndicator(m_simplebook_right, wxID_ANY); m_filament_vt_load_step->SetMinSize(AMS_STEP_SIZE); - m_filament_vt_load_step->SetSize(AMS_STEP_SIZE); + m_filament_vt_load_step->SetMaxSize(AMS_STEP_SIZE); m_filament_vt_load_step->SetBackgroundColour(*wxWHITE); m_simplebook_right->AddPage(tip_right, wxEmptyString, false); @@ -1818,6 +2018,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_button_guide->SetFont(Label::Body_13); m_button_guide->SetCornerRadius(FromDIP(12)); m_button_guide->SetBorderColor(btn_bd_white); + m_button_guide->SetTextColor(btn_text_white); m_button_guide->SetMinSize(wxSize(-1, FromDIP(24))); m_button_guide->SetBackgroundColor(btn_bg_white); @@ -1825,6 +2026,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_button_retry->SetFont(Label::Body_13); m_button_retry->SetCornerRadius(FromDIP(12)); m_button_retry->SetBorderColor(btn_bd_white); + m_button_retry->SetTextColor(btn_text_white); m_button_retry->SetMinSize(wxSize(-1, FromDIP(24))); m_button_retry->SetBackgroundColor(btn_bg_white); @@ -1832,7 +2034,12 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_sizer_right_bottom->Add(m_button_guide, 0, wxLEFT, FromDIP(10)); m_sizer_right_bottom->Add(m_button_retry, 0, wxLEFT, FromDIP(10)); m_sizer_right->Add(m_sizer_right_bottom, 0, wxEXPAND | wxTOP, FromDIP(20)); - m_sizer_bottom->Add(m_sizer_right, 0, wxEXPAND, FromDIP(5)); + + + m_sizer_bottom->Add(m_vams_sizer, 0, wxEXPAND, 0); + m_sizer_bottom->Add(m_sizer_left, 0, wxEXPAND, 0); + m_sizer_bottom->Add(0, 0, 0, wxLEFT, FromDIP(15)); + m_sizer_bottom->Add(m_sizer_right, 0, wxEXPAND, FromDIP(0)); m_sizer_body->Add(m_simplebook_amsitems, 0, wxEXPAND, 0); m_sizer_body->Add(0, 0, 1, wxEXPAND | wxTOP, FromDIP(18)); @@ -1981,13 +2188,6 @@ std::string AMSControl::GetCurrentCan(std::string amsid) } } return current_can; - /*std::string current_can_id = ""; - for (auto i = 0; i < m_ams_info.size(); i++) { - if (m_ams_info[i].ams_id == m_current_ams) { - current_can_id = m_ams_info[i].current_can_id; - } - } - return current_can_id;*/ } wxColour AMSControl::GetCanColour(std::string amsid, std::string canid) @@ -2198,8 +2398,9 @@ void AMSControl::Reset() std::vector ams_info{ams1, ams2, ams3, ams4}; std::vector::iterator it; UpdateAms(ams_info, false); - m_current_ams = ""; - m_current_senect = ""; + m_current_show_ams = ""; + m_current_ams = ""; + m_current_senect = ""; } void AMSControl::show_noams_mode(bool show, bool support_virtual_tray, bool support_vt_load) @@ -2219,6 +2420,8 @@ void AMSControl::show_vams(bool show) { m_panel_virtual->Show(show); m_vams_sizer->Show(show); + m_vams_extra_road->Show(show); + m_extruder->has_ams(show); show_vams_kn_value(show); Layout(); @@ -2346,22 +2549,26 @@ void AMSControl::AddAms(AMSinfo info, bool refresh) void AMSControl::SwitchAms(std::string ams_id) { + if (ams_id != std::to_string(VIRTUAL_TRAY_ID)) { + m_current_show_ams = ams_id; + + } + for (auto i = 0; i < m_ams_item_list.GetCount(); i++) { AmsItems *item = m_ams_item_list[i]; - if (item->amsItem->m_amsinfo.ams_id == ams_id) { + if (item->amsItem->m_amsinfo.ams_id == m_current_show_ams) { item->amsItem->OnSelected(); //item->amsItem->ShowHumidity(); + m_current_senect = ams_id; - if (m_current_ams == std::to_string(VIRTUAL_TRAY_ID)) { - for (auto i = 0; i < m_ams_cans_list.GetCount(); i++) { - AmsCansWindow* ams = m_ams_cans_list[i]; - if (ams->amsCans->m_info.ams_id == ams_id) { - ams->amsCans->SetDefSelectCan(); - } + for (auto i = 0; i < m_ams_cans_list.GetCount(); i++) { + AmsCansWindow* ams = m_ams_cans_list[i]; + if (ams->amsCans->m_info.ams_id == ams_id) { + ams->amsCans->SetDefSelectCan(); + m_vams_lib->UnSelected(); } } - m_current_senect = ams_id; } else { item->amsItem->UnSelected(); //item->amsItem->HideHumidity(); @@ -2374,9 +2581,15 @@ void AMSControl::SwitchAms(std::string ams_id) AmsCansWindow *cans = m_ams_cans_list[i]; if (cans->amsCans->m_info.ams_id == ams_id) { m_simplebook_cans->SetSelection(cans->amsCans->m_selection); } } + + m_current_ams = ams_id; + + SetAmsStep(m_current_show_ams, "-1", AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + // update extruder + m_extruder->OnAmsLoading(false); for (auto i = 0; i < m_ams_info.size(); i++) { if (m_ams_info[i].ams_id == m_current_ams) { switch (m_ams_info[i].current_step) { @@ -2390,8 +2603,6 @@ void AMSControl::SwitchAms(std::string ams_id) } } } - - // update buttons } void AMSControl::SetFilamentStep(int item_idx, FilamentStepType f_type) @@ -2491,13 +2702,22 @@ bool AMSControl::Enable(bool enable) return wxWindow::Enable(enable); } -void AMSControl::SetExtruder(bool on_off, wxColour col) +void AMSControl::SetExtruder(bool on_off, bool is_vams, wxColour col) { if (!on_off) { m_extruder->TurnOff(); + m_vams_extra_road->OnVamsLoading(false); + m_extruder->OnVamsLoading(false); + m_vams_road->OnVamsLoading(false); } else { m_extruder->TurnOn(col); } + + if (is_vams && on_off) { + m_vams_extra_road->OnVamsLoading(true, col); + m_extruder->OnVamsLoading(true, col); + m_vams_road->OnVamsLoading(true, col); + } } void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadType type, AMSPassRoadSTEP step) @@ -2518,21 +2738,25 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) { cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + m_extruder->OnAmsLoading(false); } if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1) { cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1); + m_extruder->OnAmsLoading(false); } if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2) { cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1); cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2); + if (m_current_show_ams == ams_id) {m_extruder->OnAmsLoading(true, cans->amsCans->GetTagColr(canid));} } if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3) { cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1); cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2); cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_3); + if (m_current_show_ams == ams_id) {m_extruder->OnAmsLoading(true, cans->amsCans->GetTagColr(canid));} } for (auto i = 0; i < m_ams_info.size(); i++) { diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index 9f65a31f7e..d0967113cd 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -49,6 +49,7 @@ enum class AMSRoadMode : int { AMS_ROAD_MODE_END_ONLY, AMS_ROAD_MODE_NONE, AMS_ROAD_MODE_NONE_ANY_ROAD, + AMS_ROAD_MODE_VIRTUAL_TRAY }; enum class AMSPassRoadMode : int { @@ -121,9 +122,9 @@ enum FilamentStepType { #define AMS_CAN_ITEM_HEIGHT_SIZE FromDIP(27) #define AMS_CANS_SIZE wxSize(FromDIP(284), FromDIP(186)) #define AMS_CANS_WINDOW_SIZE wxSize(FromDIP(264), FromDIP(186)) -#define AMS_STEP_SIZE wxSize(FromDIP(172), FromDIP(180)) +#define AMS_STEP_SIZE wxSize(FromDIP(172), FromDIP(186)) #define AMS_REFRESH_SIZE wxSize(FromDIP(30), FromDIP(30)) -#define AMS_EXTRUDER_SIZE wxSize(FromDIP(66), FromDIP(55)) +#define AMS_EXTRUDER_SIZE wxSize(FromDIP(86), FromDIP(72)) #define AMS_EXTRUDER_BITMAP_SIZE wxSize(FromDIP(36), FromDIP(55)) struct Caninfo @@ -229,7 +230,18 @@ public: void TurnOn(wxColour col); void TurnOff(); void create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size); + void OnVamsLoading(bool load, wxColour col = AMS_CONTROL_GRAY500); + void OnAmsLoading(bool load, wxColour col = AMS_CONTROL_GRAY500); + void paintEvent(wxPaintEvent& evt); + void render(wxDC& dc); + void doRender(wxDC& dc); void msw_rescale(); + void has_ams(bool hams) {m_has_vams = hams; Refresh();}; + + bool m_has_vams{false}; + bool m_vams_loading{false}; + bool m_ams_loading{false}; + wxColour m_current_colur; wxBoxSizer * m_bitmap_sizer{nullptr}; wxPanel * m_bitmap_panel{nullptr}; @@ -239,6 +251,27 @@ public: ~AMSextruder(); }; +class AMSVirtualRoad : public wxWindow +{ +public: + AMSVirtualRoad(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); + ~AMSVirtualRoad(); + +private: + bool m_has_vams{ true }; + bool m_vams_loading{ false }; + wxColour m_current_color; + +public: + void OnVamsLoading(bool load, wxColour col = AMS_CONTROL_GRAY500); + void SetHasVams(bool hvams) { m_has_vams = hvams; }; + void create(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size); + void paintEvent(wxPaintEvent& evt); + void render(wxDC& dc); + void doRender(wxDC& dc); + void msw_rescale(); +}; + /************************************************* Description:AMSLib **************************************************/ @@ -248,16 +281,17 @@ public: AMSLib(wxWindow *parent, wxWindowID id, Caninfo info, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize); void create(wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize); public: + wxColour GetLibColour(); + Caninfo m_info; int m_can_index; void Update(Caninfo info, bool refresh = true); void UnableSelected() { m_unable_selected = true; }; void EableSelected() { m_unable_selected = false; }; - wxColour GetLibColour(); void OnSelected(); void UnSelected(); + bool is_selected() {return m_selected;}; virtual bool Enable(bool enable = true); void post_event(wxCommandEvent &&event); - Caninfo m_info; void show_kn_value(bool show) { m_show_kn = show; }; protected: @@ -314,9 +348,12 @@ public: ScalableBitmap ams_humidity_2; ScalableBitmap ams_humidity_3; ScalableBitmap ams_humidity_4; - bool m_show_humidity = { false }; - int m_humidity = { 0 }; + int m_humidity = { 0 }; + bool m_show_humidity = { false }; + bool m_vams_loading{false}; + + void OnVamsLoading(bool load, wxColour col = AMS_CONTROL_GRAY500); void SetPassRoadColour(wxColour col); void SetMode(AMSRoadMode mode); void OnPassRoad(std::vector prord_list); @@ -407,8 +444,9 @@ public: void Update(AMSinfo info); void create(wxWindow *parent, wxWindowID id, AMSinfo info, const wxPoint &pos, const wxSize &size); void AddCan(Caninfo caninfo, int canindex, int maxcan); - void SetDefSelectCan(); + void SetDefSelectCan(); void SelectCan(std::string canid); + wxColour GetTagColr(wxString canid); void SetAmsStep(wxString canid, AMSPassRoadType type, AMSPassRoadSTEP step); //wxColour GetCanColour(wxString canid); void PlayRridLoading(wxString canid); @@ -473,6 +511,8 @@ protected: std::vector m_ams_info; std::string m_current_ams; + std::string m_current_show_ams; + AmsItemsHash m_ams_item_list; AmsCansHash m_ams_cans_list; @@ -496,11 +536,11 @@ protected: wxBoxSizer* m_vams_sizer = {nullptr}; wxBoxSizer* m_sizer_vams_tips = {nullptr}; - Caninfo m_vams_info; - StaticBox* m_panel_virtual = {nullptr}; - AMSrefresh* m_vams_refresh = {nullptr}; - AMSLib* m_vams_lib = {nullptr}; - AMSRoad* m_vams_road = {nullptr}; + Caninfo m_vams_info; + StaticBox* m_panel_virtual = {nullptr}; + AMSLib* m_vams_lib = {nullptr}; + AMSRoad* m_vams_road = {nullptr}; + AMSVirtualRoad* m_vams_extra_road = {nullptr}; StaticBox * m_panel_can = {nullptr}; wxBoxSizer *m_sizer_top = {nullptr}; @@ -552,7 +592,7 @@ public: void CreateAms(); void UpdateAms(std::vector info, bool keep_selection = true, bool has_extrusion_cali = true); void AddAms(AMSinfo info, bool refresh = true); - void SetExtruder(bool on_off, wxColour col); + void SetExtruder(bool on_off, bool is_vams, wxColour col); void SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadType type, AMSPassRoadSTEP step); void SwitchAms(std::string ams_id); From e4f6315da0b61a6f4e3a0fb0af5ddcd81e640a67 Mon Sep 17 00:00:00 2001 From: Arthur Date: Fri, 10 Mar 2023 21:15:26 +0800 Subject: [PATCH 066/339] FIX: update_sequential_clearance may crash due to clipper's bug m_hull_2d_cache must be set since later on we'll use its point number, which is a very large number when not inited. This will cause a fatal out-of-memory error. Jira: STUDIO-2452 Change-Id: I9b397a53bdcdf555eccf745f1b96786010ebe309 (cherry picked from commit 6802be53709649e75a1562d29e14559c766d427b) --- src/slic3r/GUI/GLCanvas3D.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index b0f9b54843..b44c002c04 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -4964,20 +4964,20 @@ void GLCanvas3D::update_sequential_clearance() for (size_t i = 0; i < m_model->objects.size(); ++i) { ModelObject* model_object = m_model->objects[i]; ModelInstance* model_instance0 = model_object->instances.front(); - auto tmp = offset(model_object->convex_hull_2d(Geometry::assemble_transform({ 0.0, 0.0, model_instance0->get_offset().z() }, model_instance0->get_rotation(), - model_instance0->get_scaling_factor(), model_instance0->get_mirror())), + Polygon hull_no_offset = model_object->convex_hull_2d(Geometry::assemble_transform({ 0.0, 0.0, model_instance0->get_offset().z() }, model_instance0->get_rotation(), + model_instance0->get_scaling_factor(), model_instance0->get_mirror())); + auto tmp = offset(hull_no_offset, // Shrink the extruder_clearance_radius a tiny bit, so that if the object arrangement algorithm placed the objects // exactly by satisfying the extruder_clearance_radius, this test will not trigger collision. shrink_factor, jtRound, mitter_limit); - if (!tmp.empty()) { // tmp may be empty due to clipper's bug, see STUDIO-2452 - Polygon hull_2d = tmp.front(); - Pointf3s& cache_hull_2d = m_sequential_print_clearance.m_hull_2d_cache.emplace_back(Pointf3s()); - cache_hull_2d.reserve(hull_2d.points.size()); - for (const Point& p : hull_2d.points) { - cache_hull_2d.emplace_back(unscale(p.x()), unscale(p.y()), 0.0); - } - } + Polygon hull_2d = !tmp.empty() ? tmp.front() : hull_no_offset;// tmp may be empty due to clipper's bug, see STUDIO-2452 + + Pointf3s& cache_hull_2d = m_sequential_print_clearance.m_hull_2d_cache.emplace_back(Pointf3s()); + cache_hull_2d.reserve(hull_2d.points.size()); + for (const Point& p : hull_2d.points) { + cache_hull_2d.emplace_back(unscale(p.x()), unscale(p.y()), 0.0); + } } m_sequential_print_clearance_first_displacement = false; } From 00a815e507086aa899e9abd2353be14b4cef7cc8 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Thu, 16 Feb 2023 19:07:34 +0800 Subject: [PATCH 067/339] FIX: use ppath tag in main 3mf model Change-Id: I9a91eaa80f4fe5640aec0c954b6b22b144a1812c --- src/libslic3r/Format/bbs_3mf.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 769abf8202..21b6a608e9 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -3098,7 +3098,8 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) bool _BBS_3MF_Importer::_handle_start_component(const char** attributes, unsigned int num_attributes) { - int object_id = bbs_get_attribute_value_int(attributes, num_attributes, OBJECTID_ATTR); + std::string path = bbs_get_attribute_value_string(attributes, num_attributes, PPATH_ATTR); + int object_id = bbs_get_attribute_value_int(attributes, num_attributes, OBJECTID_ATTR); Transform3d transform = bbs_get_transform_from_3mf_specs_string(bbs_get_attribute_value_string(attributes, num_attributes, TRANSFORM_ATTR)); /*Id id = std::make_pair(m_sub_model_path, object_id); @@ -3112,7 +3113,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) }*/ if (m_curr_object) { - Id id = std::make_pair(m_sub_model_path, object_id); + Id id = std::make_pair(m_sub_model_path.empty() ? path : m_sub_model_path, object_id); m_curr_object->components.emplace_back(id, transform); } From 0ce72dfcb7a53f740d48891be657e2d05a2225db Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Fri, 10 Mar 2023 14:07:18 +0800 Subject: [PATCH 068/339] ENH: Revert "remove the sinking logic" This reverts commit 17dded5d4aa54a330174788f3d6fbd583f63f8e1. Change-Id: I51816d8357076a07c500a1bd006b08c15d7467e6 --- src/slic3r/GUI/3DScene.cpp | 10 ++++------ src/slic3r/GUI/GLCanvas3D.cpp | 34 +++++++++++----------------------- 2 files changed, 15 insertions(+), 29 deletions(-) diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp index d13cbefb27..87a1ac4fde 100644 --- a/src/slic3r/GUI/3DScene.cpp +++ b/src/slic3r/GUI/3DScene.cpp @@ -1272,14 +1272,13 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab #endif // ENABLE_MODIFIERS_ALWAYS_TRANSPARENT // render sinking contours of non-hovered volumes - //BBS: remove sinking logic - /*if (m_show_sinking_contours) + if (m_show_sinking_contours) if (volume.first->is_sinking() && !volume.first->is_below_printbed() && volume.first->hover == GLVolume::HS_None && !volume.first->force_sinking_contours) { shader->stop_using(); volume.first->render_sinking_contours(); shader->start_using(); - }*/ + } glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); glsafe(::glEnableClientState(GL_NORMAL_ARRAY)); @@ -1335,8 +1334,7 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab glsafe(::glDisableClientState(GL_NORMAL_ARRAY)); } - //BBS: remove sinking logic - /*if (m_show_sinking_contours) { + if (m_show_sinking_contours) { for (GLVolumeWithIdAndZ& volume : to_render) { // render sinking contours of hovered/displaced volumes if (volume.first->is_sinking() && !volume.first->is_below_printbed() && @@ -1348,7 +1346,7 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab shader->start_using(); } } - }*/ + } if (disable_cullface) glsafe(::glEnable(GL_CULL_FACE)); diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index b44c002c04..876f16a30a 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -4399,9 +4399,7 @@ void GLCanvas3D::do_move(const std::string& snapshot_type) ModelObject* m = m_model->objects[i.first]; const double shift_z = m->get_instance_min_z(i.second); //BBS: don't call translate if the z is zero - //BBS: removing sinking logic - if (shift_z != 0.0f) { - //if ((current_printer_technology() == ptSLA || shift_z > SINKING_Z_THRESHOLD) && (shift_z != 0.0f)) { + if ((current_printer_technology() == ptSLA || shift_z > SINKING_Z_THRESHOLD) && (shift_z != 0.0f)) { const Vec3d shift(0.0, 0.0, -shift_z); m_selection.translate(i.first, i.second, shift); m->translate_instance(i.second, shift); @@ -4447,9 +4445,8 @@ void GLCanvas3D::do_rotate(const std::string& snapshot_type) if (!snapshot_type.empty()) wxGetApp().plater()->take_snapshot(snapshot_type); - //BBS: removing sinking logic // stores current min_z of instances - /*std::map, double> min_zs; + std::map, double> min_zs; for (int i = 0; i < static_cast(m_model->objects.size()); ++i) { const ModelObject* obj = m_model->objects[i]; for (int j = 0; j < static_cast(obj->instances.size()); ++j) { @@ -4462,7 +4459,7 @@ void GLCanvas3D::do_rotate(const std::string& snapshot_type) min_zs[{ i, j }] = obj->instance_bounding_box(j).min.z(); } - }*/ + } std::set> done; // keeps track of modified instances @@ -4507,9 +4504,7 @@ void GLCanvas3D::do_rotate(const std::string& snapshot_type) //BBS: don't call translate if the z is zero const double shift_z = m->get_instance_min_z(i.second); // leave sinking instances as sinking - //BBS: removing sinking logic - if (shift_z != 0.0f) { - //if ((min_zs.find({ i.first, i.second })->second >= SINKING_Z_THRESHOLD || shift_z > SINKING_Z_THRESHOLD)&&(shift_z != 0.0f)) { + if ((min_zs.find({ i.first, i.second })->second >= SINKING_Z_THRESHOLD || shift_z > SINKING_Z_THRESHOLD)&&(shift_z != 0.0f)) { const Vec3d shift(0.0, 0.0, -shift_z); m_selection.translate(i.first, i.second, shift); m->translate_instance(i.second, shift); @@ -4536,9 +4531,8 @@ void GLCanvas3D::do_scale(const std::string& snapshot_type) if (!snapshot_type.empty()) wxGetApp().plater()->take_snapshot(snapshot_type); - //BBS: removing sinking logic // stores current min_z of instances - /*std::map, double> min_zs; + std::map, double> min_zs; if (!snapshot_type.empty()) { for (int i = 0; i < static_cast(m_model->objects.size()); ++i) { const ModelObject* obj = m_model->objects[i]; @@ -4546,7 +4540,7 @@ void GLCanvas3D::do_scale(const std::string& snapshot_type) min_zs[{ i, j }] = obj->instance_bounding_box(j).min.z(); } } - }*/ + } std::set> done; // keeps track of modified instances @@ -4592,9 +4586,7 @@ void GLCanvas3D::do_scale(const std::string& snapshot_type) //BBS: don't call translate if the z is zero double shift_z = m->get_instance_min_z(i.second); // leave sinking instances as sinking - //BBS: removing sinking logic - if (shift_z != 0.0f) { - //if ((min_zs.empty() || min_zs.find({ i.first, i.second })->second >= SINKING_Z_THRESHOLD || shift_z > SINKING_Z_THRESHOLD) && (shift_z != 0.0f)) { + if ((min_zs.empty() || min_zs.find({ i.first, i.second })->second >= SINKING_Z_THRESHOLD || shift_z > SINKING_Z_THRESHOLD) && (shift_z != 0.0f)) { Vec3d shift(0.0, 0.0, -shift_z); m_selection.translate(i.first, i.second, shift); m->translate_instance(i.second, shift); @@ -4639,9 +4631,8 @@ void GLCanvas3D::do_mirror(const std::string& snapshot_type) if (!snapshot_type.empty()) wxGetApp().plater()->take_snapshot(snapshot_type); - //BBS: removing sinking logic // stores current min_z of instances - /*std::map, double> min_zs; + std::map, double> min_zs; if (!snapshot_type.empty()) { for (int i = 0; i < static_cast(m_model->objects.size()); ++i) { const ModelObject* obj = m_model->objects[i]; @@ -4649,7 +4640,7 @@ void GLCanvas3D::do_mirror(const std::string& snapshot_type) min_zs[{ i, j }] = obj->instance_bounding_box(j).min.z(); } } - }*/ + } std::set> done; // keeps track of modified instances @@ -4692,9 +4683,7 @@ void GLCanvas3D::do_mirror(const std::string& snapshot_type) //BBS: don't call translate if the z is zero double shift_z = m->get_instance_min_z(i.second); // leave sinking instances as sinking - //BBS: removing sinking logic - if (shift_z != 0.0f) { - //if ((min_zs.empty() || min_zs.find({ i.first, i.second })->second >= SINKING_Z_THRESHOLD || shift_z > SINKING_Z_THRESHOLD)&&(shift_z != 0.0f)) { + if ((min_zs.empty() || min_zs.find({ i.first, i.second })->second >= SINKING_Z_THRESHOLD || shift_z > SINKING_Z_THRESHOLD)&&(shift_z != 0.0f)) { Vec3d shift(0.0, 0.0, -shift_z); m_selection.translate(i.first, i.second, shift); m->translate_instance(i.second, shift); @@ -6649,8 +6638,7 @@ void GLCanvas3D::_render_objects(GLVolumeCollection::ERenderType type, bool with else { m_volumes.set_clipping_plane(m_camera_clipping_plane.get_data()); } - //BBS: remove sinking logic - //m_volumes.set_show_sinking_contours(! m_gizmos.is_hiding_instances()); + m_volumes.set_show_sinking_contours(! m_gizmos.is_hiding_instances()); GLShaderProgram* shader = wxGetApp().get_shader("gouraud"); ECanvasType canvas_type = this->m_canvas_type; From dbe1f3f5b197ee1e08357033d84f870f7330a3d8 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Fri, 10 Mar 2023 16:45:02 +0800 Subject: [PATCH 069/339] ENH: [STUDIO-2437] new object sinking interaction Change-Id: Ia93f3ee92abc7cd2ff5d623c6e1edfe7233e31d4 --- resources/images/objlist_sinking.svg | 7 +-- src/slic3r/GUI/GUI_ObjectList.cpp | 70 +++++++++++++++++++++++++- src/slic3r/GUI/GUI_ObjectList.hpp | 1 + src/slic3r/GUI/ObjectDataViewModel.cpp | 32 ++++++++++++ src/slic3r/GUI/ObjectDataViewModel.hpp | 11 +++- src/slic3r/GUI/PartPlate.cpp | 1 + src/slic3r/GUI/Plater.cpp | 4 +- 7 files changed, 117 insertions(+), 9 deletions(-) diff --git a/resources/images/objlist_sinking.svg b/resources/images/objlist_sinking.svg index c1309ee7b1..a5f948f442 100644 --- a/resources/images/objlist_sinking.svg +++ b/resources/images/objlist_sinking.svg @@ -1,4 +1,5 @@ - - - + + + + diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 22f2dff124..1edb3914e3 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -342,10 +342,11 @@ void ObjectList::create_objects_ctrl() const int em = wxGetApp().em_unit(); m_columns_width.resize(colCount); - m_columns_width[colName] = 25; + m_columns_width[colName] = 22; m_columns_width[colPrint] = 3; m_columns_width[colFilament] = 5; m_columns_width[colSupportPaint] = 3; + m_columns_width[colSinking] = 3; m_columns_width[colColorPaint] = 3; m_columns_width[colEditing] = 3; @@ -385,6 +386,8 @@ void ObjectList::create_objects_ctrl() wxALIGN_CENTER_HORIZONTAL, 0); AppendBitmapColumn(" ", colColorPaint, wxOSX ? wxDATAVIEW_CELL_EDITABLE : wxDATAVIEW_CELL_INERT, m_columns_width[colColorPaint] * em, wxALIGN_CENTER_HORIZONTAL, 0); + AppendBitmapColumn(" ", colSinking, wxOSX ? wxDATAVIEW_CELL_EDITABLE : wxDATAVIEW_CELL_INERT, m_columns_width[colSinking] * em, + wxALIGN_CENTER_HORIZONTAL, 0); // column ItemEditing of the view control: AppendBitmapColumn(" ", colEditing, wxOSX ? wxDATAVIEW_CELL_EDITABLE : wxDATAVIEW_CELL_INERT, m_columns_width[colEditing] * em, @@ -569,6 +572,10 @@ void ObjectList::set_tooltip_for_item(const wxPoint& pt) if (node->HasColorPainting()) tooltip = _(L("Click the icon to edit color painting of the object")); } + else if (col->GetModelColumn() == (unsigned int)colSinking) { + if (node->HasSinking()) + tooltip = _(L("Click the icon to shift this object to the bed")); + } else if (col->GetModelColumn() == (unsigned int)colName && (pt.x >= 2 * wxGetApp().em_unit() && pt.x <= 4 * wxGetApp().em_unit())) { if (const ItemType type = m_objects_model->GetItemType(item); @@ -825,6 +832,12 @@ void ObjectList::set_support_paint_hidden(const bool hide) const update_name_column_width(); } +void GUI::ObjectList::set_sinking_hidden(const bool hide) const +{ + GetColumn(colSinking)->SetHidden(hide); + update_name_column_width(); +} + void ObjectList::update_filament_in_config(const wxDataViewItem& item) { if (m_prevent_update_filament_in_config) @@ -1188,6 +1201,17 @@ void ObjectList::list_manipulation(const wxPoint& mouse_pos, bool evt_context_me gizmos_mgr.reset_all_states(); } } + else if (col_num == colSinking) { + Plater * plater = wxGetApp().plater(); + GLCanvas3D *cnv = plater->canvas3D(); + Plater::TakeSnapshot(plater, "Shift objects to bed"); + int obj_idx, vol_idx; + get_selected_item_indexes(obj_idx, vol_idx, item); + (*m_objects)[obj_idx]->ensure_on_bed(); + cnv->reload_scene(true, true); + update_info_items(obj_idx); + notify_instance_updated(obj_idx); + } else if (col_num == colEditing) { //show_context_menu(evt_context_menu); int obj_idx, vol_idx; @@ -3168,6 +3192,18 @@ void ObjectList::update_info_items(size_t obj_idx, wxDataViewItemArray* selectio } } + { + bool shows = m_objects_model->IsSinked(item_obj); + bool should_show = printer_technology() == ptFFF + && wxGetApp().plater()->canvas3D()->is_object_sinking(obj_idx); + if (shows && !should_show) { + m_objects_model->SetSinkState(false, item_obj); + } + else if (!shows && should_show) { + m_objects_model->SetSinkState(true, item_obj); + } + } + { bool shows = this->GetColumn(colSupportPaint)->IsShown(); bool should_show = false; @@ -3211,6 +3247,26 @@ void ObjectList::update_info_items(size_t obj_idx, wxDataViewItemArray* selectio this->set_color_paint_hidden(false); } } + + { + bool shows = this->GetColumn(colSinking)->IsShown(); + bool should_show = false; + for (int i = 0; i < m_objects->size(); ++i) { + if (wxGetApp().plater()->canvas3D()->is_object_sinking(i)) { + should_show = true; + break; + } + if (should_show) + break; + } + + if (shows && !should_show) { + this->set_sinking_hidden(true); + } + else if (!shows && should_show) { + this->set_sinking_hidden(false); + } + } } @@ -4860,6 +4916,7 @@ void ObjectList::msw_rescale() // BBS GetColumn(colSupportPaint)->SetWidth(3 * em); GetColumn(colColorPaint)->SetWidth(3 * em); + GetColumn(colSinking)->SetWidth(3 * em); GetColumn(colEditing )->SetWidth( 3 * em); // rescale/update existing items with bitmaps @@ -4922,6 +4979,17 @@ void ObjectList::OnEditingStarted(wxDataViewEvent &event) } return; } + else if (col == colSinking) { + Plater * plater = wxGetApp().plater(); + GLCanvas3D *cnv = plater->canvas3D(); + Plater::TakeSnapshot(plater, "Shift objects to bed"); + int obj_idx, vol_idx; + get_selected_item_indexes(obj_idx, vol_idx, item); + (*m_objects)[obj_idx]->ensure_on_bed(); + cnv->reload_scene(true, true); + update_info_items(obj_idx); + notify_instance_updated(obj_idx); + } else if (col == colEditing) { //show_context_menu(evt_context_menu); int obj_idx, vol_idx; diff --git a/src/slic3r/GUI/GUI_ObjectList.hpp b/src/slic3r/GUI/GUI_ObjectList.hpp index 1ec7c0bdd5..332ab45828 100644 --- a/src/slic3r/GUI/GUI_ObjectList.hpp +++ b/src/slic3r/GUI/GUI_ObjectList.hpp @@ -225,6 +225,7 @@ public: // BBS void set_color_paint_hidden(const bool hide) const; void set_support_paint_hidden(const bool hide) const; + void set_sinking_hidden(const bool hide) const; // update extruder in current config void update_filament_in_config(const wxDataViewItem& item); diff --git a/src/slic3r/GUI/ObjectDataViewModel.cpp b/src/slic3r/GUI/ObjectDataViewModel.cpp index 9df38a4b83..6895b50e03 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.cpp +++ b/src/slic3r/GUI/ObjectDataViewModel.cpp @@ -222,6 +222,15 @@ void ObjectDataViewModelNode::set_support_icon(bool enable) m_support_icon = create_scaled_bitmap("dot"); } +void ObjectDataViewModelNode::set_sinking_icon(bool enable) +{ + m_sink_enable = enable; + if ((m_type & itObject) && enable) + m_sinking_icon = create_scaled_bitmap("objlist_sinking"); + else + m_sinking_icon = create_scaled_bitmap("dot"); +} + void ObjectDataViewModelNode::set_warning_icon(const std::string& warning_icon_name) { m_warning_icon_name = warning_icon_name; @@ -302,6 +311,9 @@ bool ObjectDataViewModelNode::SetValue(const wxVariant& variant, unsigned col) case colSupportPaint: m_support_icon << variant; break; + case colSinking: + m_sinking_icon << variant; + break; case colColorPaint: m_color_icon << variant; break; @@ -1557,6 +1569,9 @@ void ObjectDataViewModel::GetValue(wxVariant &variant, const wxDataViewItem &ite case colSupportPaint: variant << node->m_support_icon; break; + case colSinking: + variant << node->m_sinking_icon; + break; case colColorPaint: variant << node->m_color_icon; break; @@ -2081,6 +2096,14 @@ bool ObjectDataViewModel::IsSupportPainted(wxDataViewItem& item) const return node->m_support_enable; } +bool ObjectDataViewModel::IsSinked(wxDataViewItem &item) const +{ + ObjectDataViewModelNode *node = static_cast(item.GetID()); + if (!node) return false; + + return node->m_sink_enable; +} + void ObjectDataViewModel::SetColorPaintState(const bool painted, wxDataViewItem obj_item) { ObjectDataViewModelNode* node = static_cast(obj_item.GetID()); @@ -2101,6 +2124,15 @@ void ObjectDataViewModel::SetSupportPaintState(const bool painted, wxDataViewIte ItemChanged(obj_item); } +void ObjectDataViewModel::SetSinkState(const bool painted, wxDataViewItem obj_item) +{ + ObjectDataViewModelNode *node = static_cast(obj_item.GetID()); + if (!node) return; + + node->set_sinking_icon(painted); + ItemChanged(obj_item); +} + void ObjectDataViewModel::Rescale() { m_volume_bmps = MenuFactory::get_volume_bitmaps(); diff --git a/src/slic3r/GUI/ObjectDataViewModel.hpp b/src/slic3r/GUI/ObjectDataViewModel.hpp index ec7eac522d..ec98162273 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.hpp +++ b/src/slic3r/GUI/ObjectDataViewModel.hpp @@ -42,6 +42,7 @@ enum ColumnNumber // BBS colSupportPaint , colColorPaint , + colSinking , colEditing , // item editing colCount , }; @@ -87,6 +88,7 @@ class ObjectDataViewModelNode // BBS wxBitmap m_support_icon; wxBitmap m_color_icon; + wxBitmap m_sinking_icon; PrintIndicator m_printable {piUndef}; wxBitmap m_printable_icon; std::string m_warning_icon_name{ "" }; @@ -98,6 +100,7 @@ class ObjectDataViewModelNode // BBS bool m_support_enable = false; bool m_color_enable = false; + bool m_sink_enable = false; public: PartPlate* m_part_plate; @@ -236,7 +239,8 @@ public: PrintIndicator IsPrintable() const { return m_printable; } // BBS bool HasColorPainting() const { return m_color_enable; } - bool HasSupportPainting() const { return m_support_enable; } + bool HasSupportPainting() const { return m_support_enable; } + bool HasSinking() const { return m_sink_enable; } bool IsActionEnabled() const { return m_action_enable; } void UpdateExtruderAndColorIcon(wxString extruder = ""); @@ -278,6 +282,7 @@ public: // BBS void set_color_icon(bool enable); void set_support_icon(bool enable); + void set_sinking_icon(bool enable); // Set warning icon for node void set_warning_icon(const std::string& warning_icon); @@ -442,9 +447,11 @@ public: wxDataViewItem SetObjectPrintableState(PrintIndicator printable, wxDataViewItem obj_item); // BBS bool IsColorPainted(wxDataViewItem& item) const; - bool IsSupportPainted(wxDataViewItem& item) const; + bool IsSupportPainted(wxDataViewItem &item) const; + bool IsSinked(wxDataViewItem &item) const; void SetColorPaintState(const bool painted, wxDataViewItem obj_item); void SetSupportPaintState(const bool painted, wxDataViewItem obj_item); + void SetSinkState(const bool painted, wxDataViewItem obj_item); void SetAssociatedControl(wxDataViewCtrl* ctrl) { m_ctrl = ctrl; } // Rescale bitmaps for existing Items diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index aa83adfbd3..266a170f09 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -1596,6 +1596,7 @@ bool PartPlate::check_outside(int obj_id, int instance_id, BoundingBoxf3* boundi Polygon hull = instance->convex_hull_2d(); Vec3d up_point(m_origin.x() + m_width + Slic3r::BuildVolume::SceneEpsilon, m_origin.y() + m_depth + Slic3r::BuildVolume::SceneEpsilon, m_origin.z() + m_height + Slic3r::BuildVolume::SceneEpsilon); Vec3d low_point(m_origin.x() - Slic3r::BuildVolume::SceneEpsilon, m_origin.y() - Slic3r::BuildVolume::SceneEpsilon, m_origin.z() - Slic3r::BuildVolume::SceneEpsilon); + if (instance_box.max.z() > low_point.z()) low_point.z() += instance_box.min.z(); // not considering outsize if sinking BoundingBoxf3 plate_box(low_point, up_point); if (plate_box.contains(instance_box)) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 6f0b862521..403edc4bf1 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -3529,9 +3529,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ q->model().load_from(model); load_auxiliary_files(); } - // BBS: don't allow negative_z when load model objects - // auto loaded_idxs = load_model_objects(model.objects, is_project_file); - auto loaded_idxs = load_model_objects(model.objects); + auto loaded_idxs = load_model_objects(model.objects, is_project_file); obj_idxs.insert(obj_idxs.end(), loaded_idxs.begin(), loaded_idxs.end()); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format("import 3mf IMPORT_LOAD_MODEL_OBJECTS \n"); From 246ff2653dcc26d042c8205a26c6c22b36b768ab Mon Sep 17 00:00:00 2001 From: Arthur Date: Fri, 10 Mar 2023 20:44:07 +0800 Subject: [PATCH 070/339] ENH: improve bridge direction detection Thanks to Prusa. Jira: STUDIO-2453 Change-Id: Iadcc59df44d5abc552f5d558a500fd9bcd66d43f (cherry picked from commit c19156fd037df4231f3e0cb1e9a899c9b7525372) --- src/libslic3r/BridgeDetector.cpp | 3 +- src/libslic3r/BridgeDetector.hpp | 61 ++++++++++- src/libslic3r/CMakeLists.txt | 2 + src/libslic3r/LayerRegion.cpp | 10 ++ src/libslic3r/PrincipalComponents2D.cpp | 140 ++++++++++++++++++++++++ src/libslic3r/PrincipalComponents2D.hpp | 24 ++++ 6 files changed, 238 insertions(+), 2 deletions(-) create mode 100644 src/libslic3r/PrincipalComponents2D.cpp create mode 100644 src/libslic3r/PrincipalComponents2D.hpp diff --git a/src/libslic3r/BridgeDetector.cpp b/src/libslic3r/BridgeDetector.cpp index a60f45f11a..09a2c2dc3b 100644 --- a/src/libslic3r/BridgeDetector.cpp +++ b/src/libslic3r/BridgeDetector.cpp @@ -160,7 +160,8 @@ bool BridgeDetector::detect_angle(double bridge_direction_override) // if any other direction is within extrusion width of coverage, prefer it if shorter // TODO: There are two options here - within width of the angle with most coverage, or within width of the currently perferred? size_t i_best = 0; - for (size_t i = 1; i < candidates.size() && abs(candidates[i_best].archored_percent - candidates[i].archored_percent) < EPSILON; ++ i) +// for (size_t i = 1; i < candidates.size() && abs(candidates[i_best].archored_percent - candidates[i].archored_percent) < EPSILON; ++ i) + for (size_t i = 1; i < candidates.size() && candidates[i_best].coverage - candidates[i].coverage < this->spacing; ++ i) if (candidates[i].max_length < candidates[i_best].max_length) i_best = i; diff --git a/src/libslic3r/BridgeDetector.hpp b/src/libslic3r/BridgeDetector.hpp index d422949cd7..064e40dd51 100644 --- a/src/libslic3r/BridgeDetector.hpp +++ b/src/libslic3r/BridgeDetector.hpp @@ -1,6 +1,12 @@ #ifndef slic3r_BridgeDetector_hpp_ #define slic3r_BridgeDetector_hpp_ +#include "ClipperUtils.hpp" +#include "Line.hpp" +#include "Point.hpp" +#include "Polygon.hpp" +#include "Polyline.hpp" +#include "PrincipalComponents2D.hpp" #include "libslic3r.h" #include "ExPolygon.hpp" #include @@ -48,7 +54,7 @@ private: // the best direction is the one causing most lines to be bridged (thus most coverage) bool operator<(const BridgeDirection &other) const { // Initial sort by coverage only - comparator must obey strict weak ordering - return this->archored_percent > other.archored_percent; + return this->coverage > other.coverage;//this->archored_percent > other.archored_percent; }; double angle; double coverage; @@ -65,6 +71,59 @@ private: ExPolygons _anchor_regions; }; + +//return ideal bridge direction and unsupported bridge endpoints distance. +inline std::tuple detect_bridging_direction(const Polygons &to_cover, const Polygons &anchors_area) +{ + Polygons overhang_area = diff(to_cover, anchors_area); + Polylines floating_polylines = diff_pl(to_polylines(overhang_area), expand(anchors_area, float(SCALED_EPSILON))); + + if (floating_polylines.empty()) { + // consider this area anchored from all sides, pick bridging direction that will likely yield shortest bridges + auto [pc1, pc2] = compute_principal_components(overhang_area); + if (pc2 == Vec2f::Zero()) { // overhang may be smaller than resolution. In this case, any direction is ok + return {Vec2d{1.0,0.0}, 0.0}; + } else { + return {pc2.normalized().cast(), 0.0}; + } + } + + // Overhang is not fully surrounded by anchors, in that case, find such direction that will minimize the number of bridge ends/180turns in the air + Lines floating_edges = to_lines(floating_polylines); + std::unordered_map directions{}; + for (const Line &l : floating_edges) { + Vec2d normal = l.normal().cast().normalized(); + double quantized_angle = std::ceil(std::atan2(normal.y(),normal.x()) * 1000.0); + directions.emplace(quantized_angle, normal); + } + std::vector> direction_costs{}; + // it is acutally cost of a perpendicular bridge direction - we find the minimal cost and then return the perpendicular dir + for (const auto& d : directions) { + direction_costs.emplace_back(d.second, 0.0); + } + + for (const Line &l : floating_edges) { + Vec2d line = (l.b - l.a).cast(); + for (auto &dir_cost : direction_costs) { + // the dot product already contains the length of the line. dir_cost.first is normalized. + dir_cost.second += std::abs(line.dot(dir_cost.first)); + } + } + + Vec2d result_dir = Vec2d::Ones(); + double min_cost = std::numeric_limits::max(); + for (const auto &cost : direction_costs) { + if (cost.second < min_cost) { + // now flip the orientation back and return the direction of the bridge extrusions + result_dir = Vec2d{cost.first.y(), -cost.first.x()}; + min_cost = cost.second; + } + } + + return {result_dir, min_cost}; +}; + + } #endif diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index 43d10b5a28..419f1c2455 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -220,6 +220,8 @@ set(lisbslic3r_sources PresetBundle.hpp ProjectTask.cpp ProjectTask.hpp + PrincipalComponents2D.hpp + PrincipalComponents2D.cpp AppConfig.cpp AppConfig.hpp Print.cpp diff --git a/src/libslic3r/LayerRegion.cpp b/src/libslic3r/LayerRegion.cpp index f66ba002c3..63e32a8a9b 100644 --- a/src/libslic3r/LayerRegion.cpp +++ b/src/libslic3r/LayerRegion.cpp @@ -305,6 +305,15 @@ void LayerRegion::process_external_surfaces(const Layer *lower_layer, const Poly // would get merged into a single one while they need different directions // also, supply the original expolygon instead of the grown one, because in case // of very thin (but still working) anchors, the grown expolygon would go beyond them + double custom_angle = Geometry::deg2rad(this->region().config().bridge_angle.value); + if (custom_angle > 0.0) { + bridges[idx_last].bridge_angle = custom_angle; + } else { + auto [bridging_dir, unsupported_dist] = detect_bridging_direction(to_polygons(initial), to_polygons(lower_layer->lslices)); + bridges[idx_last].bridge_angle = PI + std::atan2(bridging_dir.y(), bridging_dir.x()); + } + + /* BridgeDetector bd(initial, lower_layer->lslices, this->bridging_flow(frInfill, object_config.thick_bridges).scaled_width()); #ifdef SLIC3R_DEBUG printf("Processing bridge at layer %zu:\n", this->layer()->id()); @@ -321,6 +330,7 @@ void LayerRegion::process_external_surfaces(const Layer *lower_layer, const Poly // using a bridging flow, therefore it makes sense to respect the custom bridging direction. bridges[idx_last].bridge_angle = custom_angle; } + */ // without safety offset, artifacts are generated (GH #2494) surfaces_append(bottom, union_safety_offset_ex(grown), bridges[idx_last]); } diff --git a/src/libslic3r/PrincipalComponents2D.cpp b/src/libslic3r/PrincipalComponents2D.cpp new file mode 100644 index 0000000000..7bdf793157 --- /dev/null +++ b/src/libslic3r/PrincipalComponents2D.cpp @@ -0,0 +1,140 @@ +#include "PrincipalComponents2D.hpp" +#include "Point.hpp" + +namespace Slic3r { + + + +// returns triangle area, first_moment_of_area_xy, second_moment_of_area_xy, second_moment_of_area_covariance +// none of the values is divided/normalized by area. +// The function computes intgeral over the area of the triangle, with function f(x,y) = x for first moments of area (y is analogous) +// f(x,y) = x^2 for second moment of area +// and f(x,y) = x*y for second moment of area covariance +std::tuple compute_moments_of_area_of_triangle(const Vec2f &a, const Vec2f &b, const Vec2f &c) +{ + // based on the following guide: + // Denote the vertices of S by a, b, c. Then the map + // g:(u,v)↦a+u(b−a)+v(c−a) , + // which in coordinates appears as + // g:(u,v)↦{x(u,v)y(u,v)=a1+u(b1−a1)+v(c1−a1)=a2+u(b2−a2)+v(c2−a2) ,(1) + // obviously maps S′ bijectively onto S. Therefore the transformation formula for multiple integrals steps into action, and we obtain + // ∫Sf(x,y)d(x,y)=∫S′f(x(u,v),y(u,v))∣∣Jg(u,v)∣∣ d(u,v) . + // In the case at hand the Jacobian determinant is a constant: From (1) we obtain + // Jg(u,v)=det[xuyuxvyv]=(b1−a1)(c2−a2)−(c1−a1)(b2−a2) . + // Therefore we can write + // ∫Sf(x,y)d(x,y)=∣∣Jg∣∣∫10∫1−u0f~(u,v) dv du , + // where f~ denotes the pullback of f to S′: + // f~(u,v):=f(x(u,v),y(u,v)) . + // Don't forget taking the absolute value of Jg! + + float jacobian_determinant_abs = std::abs((b.x() - a.x()) * (c.y() - a.y()) - (c.x() - a.x()) * (b.y() - a.y())); + + // coordinate transform: gx(u,v) = a.x + u * (b.x - a.x) + v * (c.x - a.x) + // coordinate transform: gy(u,v) = a.y + u * (b.y - a.y) + v * (c.y - a.y) + // second moment of area for x: f(x, y) = x^2; + // f(gx(u,v), gy(u,v)) = gx(u,v)^2 = ... (long expanded form) + + // result is Int_T func = jacobian_determinant_abs * Int_0^1 Int_0^1-u func(gx(u,v), gy(u,v)) dv du + // integral_0^1 integral_0^(1 - u) (a + u (b - a) + v (c - a))^2 dv du = 1/12 (a^2 + a (b + c) + b^2 + b c + c^2) + + Vec2f second_moment_of_area_xy = jacobian_determinant_abs * + (a.cwiseProduct(a) + b.cwiseProduct(b) + b.cwiseProduct(c) + c.cwiseProduct(c) + + a.cwiseProduct(b + c)) / + 12.0f; + // second moment of area covariance : f(x, y) = x*y; + // f(gx(u,v), gy(u,v)) = gx(u,v)*gy(u,v) = ... (long expanded form) + //(a_1 + u * (b_1 - a_1) + v * (c_1 - a_1)) * (a_2 + u * (b_2 - a_2) + v * (c_2 - a_2)) + // == (a_1 + u (b_1 - a_1) + v (c_1 - a_1)) (a_2 + u (b_2 - a_2) + v (c_2 - a_2)) + + // intermediate result: integral_0^(1 - u) (a_1 + u (b_1 - a_1) + v (c_1 - a_1)) (a_2 + u (b_2 - a_2) + v (c_2 - a_2)) dv = + // 1/6 (u - 1) (-c_1 (u - 1) (a_2 (u - 1) - 3 b_2 u) - c_2 (u - 1) (a_1 (u - 1) - 3 b_1 u + 2 c_1 (u - 1)) + 3 b_1 u (a_2 (u - 1) - 2 + // b_2 u) + a_1 (u - 1) (3 b_2 u - 2 a_2 (u - 1))) result = integral_0^1 1/6 (u - 1) (-c_1 (u - 1) (a_2 (u - 1) - 3 b_2 u) - c_2 (u - + // 1) (a_1 (u - 1) - 3 b_1 u + 2 c_1 (u - 1)) + 3 b_1 u (a_2 (u - 1) - 2 b_2 u) + a_1 (u - 1) (3 b_2 u - 2 a_2 (u - 1))) du = + // 1/24 (a_2 (b_1 + c_1) + a_1 (2 a_2 + b_2 + c_2) + b_2 c_1 + b_1 c_2 + 2 b_1 b_2 + 2 c_1 c_2) + // result is Int_T func = jacobian_determinant_abs * Int_0^1 Int_0^1-u func(gx(u,v), gy(u,v)) dv du + float second_moment_of_area_covariance = jacobian_determinant_abs * (1.0f / 24.0f) * + (a.y() * (b.x() + c.x()) + a.x() * (2.0f * a.y() + b.y() + c.y()) + b.y() * c.x() + + b.x() * c.y() + 2.0f * b.x() * b.y() + 2.0f * c.x() * c.y()); + + float area = jacobian_determinant_abs * 0.5f; + + Vec2f first_moment_of_area_xy = jacobian_determinant_abs * (a + b + c) / 6.0f; + + return {area, first_moment_of_area_xy, second_moment_of_area_xy, second_moment_of_area_covariance}; +}; + +// returns two eigenvectors of the area covered by given polygons. The vectors are sorted by their corresponding eigenvalue, largest first +std::tuple compute_principal_components(const Polygons &polys) +{ + Vec2f centroid_accumulator = Vec2f::Zero(); + Vec2f second_moment_of_area_accumulator = Vec2f::Zero(); + float second_moment_of_area_covariance_accumulator = 0.0f; + float area = 0.0f; + + for (const Polygon &poly : polys) { + Vec2f p0 = unscaled(poly.first_point()).cast(); + for (size_t i = 2; i < poly.points.size(); i++) { + Vec2f p1 = unscaled(poly.points[i - 1]).cast(); + Vec2f p2 = unscaled(poly.points[i]).cast(); + + float sign = cross2(p1 - p0, p2 - p1) > 0 ? 1.0f : -1.0f; + + auto [triangle_area, first_moment_of_area, second_moment_area, + second_moment_of_area_covariance] = compute_moments_of_area_of_triangle(p0, p1, p2); + area += sign * triangle_area; + centroid_accumulator += sign * first_moment_of_area; + second_moment_of_area_accumulator += sign * second_moment_area; + second_moment_of_area_covariance_accumulator += sign * second_moment_of_area_covariance; + } + } + + if (area <= 0.0) { + return {Vec2f::Zero(), Vec2f::Zero()}; + } + + Vec2f centroid = centroid_accumulator / area; + Vec2f variance = second_moment_of_area_accumulator / area - centroid.cwiseProduct(centroid); + double covariance = second_moment_of_area_covariance_accumulator / area - centroid.x() * centroid.y(); +#if 0 + std::cout << "area : " << area << std::endl; + std::cout << "variancex : " << variance.x() << std::endl; + std::cout << "variancey : " << variance.y() << std::endl; + std::cout << "covariance : " << covariance << std::endl; +#endif + if (abs(covariance) < EPSILON) { + std::tuple result{Vec2f{variance.x(), 0.0}, Vec2f{0.0, variance.y()}}; + if (variance.y() > variance.x()) { + return {std::get<1>(result), std::get<0>(result)}; + } else + return result; + } + + // now we find the first principal component of the covered area by computing max eigenvalue and the correspoding eigenvector of + // covariance matrix + // covaraince matrix C is : | VarX Cov | + // | Cov VarY | + // Eigenvalues are solutions to det(C - lI) = 0, where l is the eigenvalue and I unit matrix + // Eigenvector for eigenvalue l is any vector v such that Cv = lv + + float eigenvalue_a = 0.5f * (variance.x() + variance.y() + + sqrt((variance.x() - variance.y()) * (variance.x() - variance.y()) + 4.0f * covariance * covariance)); + float eigenvalue_b = 0.5f * (variance.x() + variance.y() - + sqrt((variance.x() - variance.y()) * (variance.x() - variance.y()) + 4.0f * covariance * covariance)); + Vec2f eigenvector_a{(eigenvalue_a - variance.y()) / covariance, 1.0f}; + Vec2f eigenvector_b{(eigenvalue_b - variance.y()) / covariance, 1.0f}; + +#if 0 + std::cout << "eigenvalue_a: " << eigenvalue_a << std::endl; + std::cout << "eigenvalue_b: " << eigenvalue_b << std::endl; + std::cout << "eigenvectorA: " << eigenvector_a.x() << " " << eigenvector_a.y() << std::endl; + std::cout << "eigenvectorB: " << eigenvector_b.x() << " " << eigenvector_b.y() << std::endl; +#endif + + if (eigenvalue_a > eigenvalue_b) { + return {eigenvector_a, eigenvector_b}; + } else { + return {eigenvector_b, eigenvector_a}; + } +} + +} \ No newline at end of file diff --git a/src/libslic3r/PrincipalComponents2D.hpp b/src/libslic3r/PrincipalComponents2D.hpp new file mode 100644 index 0000000000..dc8897a7a7 --- /dev/null +++ b/src/libslic3r/PrincipalComponents2D.hpp @@ -0,0 +1,24 @@ +#ifndef slic3r_PrincipalComponents2D_hpp_ +#define slic3r_PrincipalComponents2D_hpp_ + +#include "AABBTreeLines.hpp" +#include "BoundingBox.hpp" +#include "libslic3r.h" +#include +#include "Polygon.hpp" + +namespace Slic3r { + +// returns triangle area, first_moment_of_area_xy, second_moment_of_area_xy, second_moment_of_area_covariance +// none of the values is divided/normalized by area. +// The function computes intgeral over the area of the triangle, with function f(x,y) = x for first moments of area (y is analogous) +// f(x,y) = x^2 for second moment of area +// and f(x,y) = x*y for second moment of area covariance +std::tuple compute_moments_of_area_of_triangle(const Vec2f &a, const Vec2f &b, const Vec2f &c); + +// returns two eigenvectors of the area covered by given polygons. The vectors are sorted by their corresponding eigenvalue, largest first +std::tuple compute_principal_components(const Polygons &polys); + +} + +#endif \ No newline at end of file From 0cc953ad41cccaf8c513dc5229b66a83cb6d9f98 Mon Sep 17 00:00:00 2001 From: "qing.zhang" Date: Wed, 8 Mar 2023 15:10:57 +0800 Subject: [PATCH 071/339] ENH: speed up one wall top generate Signed-off-by: qing.zhang Change-Id: I141565bea3ca4d3fbcc9569b175af5d4f5cdd40e --- src/libslic3r/ClipperUtils.cpp | 12 ++++++++++++ src/libslic3r/ClipperUtils.hpp | 1 + src/libslic3r/PerimeterGenerator.cpp | 19 +++++++++++++++---- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/ClipperUtils.cpp b/src/libslic3r/ClipperUtils.cpp index 19bd2850e8..2619247c3d 100644 --- a/src/libslic3r/ClipperUtils.cpp +++ b/src/libslic3r/ClipperUtils.cpp @@ -147,6 +147,18 @@ void clip_clipper_polygon_with_subject_bbox(const Polygon &src, const BoundingBo out.erase(std::remove_if(out.begin(), out.end(), [](const Polygon &polygon) { return polygon.empty(); }), out.end()); return out; } +[[nodiscard]] Polygons clip_clipper_polygons_with_subject_bbox(const ExPolygons &src, const BoundingBox &bbox) +{ + Polygons out; + out.reserve(number_polygons(src)); + for (const ExPolygon &p : src) { + Polygons temp = clip_clipper_polygons_with_subject_bbox(p, bbox); + out.insert(out.end(), temp.begin(), temp.end()); + } + + out.erase(std::remove_if(out.begin(), out.end(), [](const Polygon &polygon) {return polygon.empty(); }), out.end()); + return out; +} } static ExPolygons PolyTreeToExPolygons(ClipperLib::PolyTree &&polytree) diff --git a/src/libslic3r/ClipperUtils.hpp b/src/libslic3r/ClipperUtils.hpp index d7e0fcc4c8..18a8ebb115 100644 --- a/src/libslic3r/ClipperUtils.hpp +++ b/src/libslic3r/ClipperUtils.hpp @@ -313,6 +313,7 @@ namespace ClipperUtils { [[nodiscard]] Polygon clip_clipper_polygon_with_subject_bbox(const Polygon &src, const BoundingBox &bbox); [[nodiscard]] Polygons clip_clipper_polygons_with_subject_bbox(const Polygons &src, const BoundingBox &bbox); [[nodiscard]] Polygons clip_clipper_polygons_with_subject_bbox(const ExPolygon &src, const BoundingBox &bbox); + [[nodiscard]] Polygons clip_clipper_polygons_with_subject_bbox(const ExPolygons &src, const BoundingBox &bbox); } diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index ff7d94a6e1..31b505379a 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -846,7 +846,16 @@ void PerimeterGenerator::process_classic() offset_top_surface = 0; //don't takes into account too thin areas double min_width_top_surface = std::max(double(ext_perimeter_spacing / 2 + 10), 1.0 * (double(perimeter_width))); - ExPolygons grown_upper_slices = offset_ex(*this->upper_slices, min_width_top_surface); + + Polygons grown_upper_slices = offset(*this->upper_slices, min_width_top_surface); + + //BBS: get boungding box of last + BoundingBox last_box = get_extents(last); + last_box.offset(SCALED_EPSILON); + + // BBS: get the Polygons upper the polygon this layer + Polygons upper_polygons_series_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(grown_upper_slices, last_box); + //set the clip to a virtual "second perimeter" fill_clip = offset_ex(last, -double(ext_perimeter_spacing)); // get the real top surface @@ -854,13 +863,15 @@ void PerimeterGenerator::process_classic() ExPolygons bridge_checker; // BBS: check whether surface be bridge or not if (this->lower_slices != NULL) { - grown_lower_slices =*this->lower_slices; + // BBS: get the Polygons below the polygon this layer + Polygons lower_polygons_series_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(*this->lower_slices, last_box); + double bridge_offset = std::max(double(ext_perimeter_spacing), (double(perimeter_width))); - bridge_checker = offset_ex(diff_ex(last, grown_lower_slices, ApplySafetyOffset::Yes), 1.5 * bridge_offset); + bridge_checker = offset_ex(diff_ex(last, lower_polygons_series_clipped, ApplySafetyOffset::Yes), 1.5 * bridge_offset); } ExPolygons delete_bridge = diff_ex(last, bridge_checker, ApplySafetyOffset::Yes); - ExPolygons top_polygons = diff_ex(delete_bridge, grown_upper_slices, ApplySafetyOffset::Yes); + ExPolygons top_polygons = diff_ex(delete_bridge, upper_polygons_series_clipped, ApplySafetyOffset::Yes); //get the not-top surface, from the "real top" but enlarged by external_infill_margin (and the min_width_top_surface we removed a bit before) ExPolygons temp_gap = diff_ex(top_polygons, fill_clip); ExPolygons inner_polygons = diff_ex(last, From b4ffa91cb43590ef322cee06f4f3d962b3f1a986 Mon Sep 17 00:00:00 2001 From: "zorro.zhang" Date: Fri, 17 Feb 2023 19:51:28 +0800 Subject: [PATCH 072/339] ENH: model info display UI Change-Id: I066c0e7f8ce87ec00b1141a1b44430444a819b42 (cherry picked from commit 05907a1a42da82737090d55046974d401f8af057) --- resources/web/data/text.js | 46 +- resources/web/include/globalapi.js | 407 + resources/web/include/jquery-2.1.1.min.js | 4 + resources/web/include/jquery-3.6.0.min.js | 2 + resources/web/include/json2.js | 185 + resources/web/include/swiper/LICENSE | 20 + resources/web/include/swiper/README.md | 11 + .../angular/angular/src/public-api.d.ts | 3 + .../angular/src/swiper-slide.directive.d.ts | 26 + .../angular/angular/src/swiper.component.d.ts | 252 + .../angular/angular/src/swiper.module.d.ts | 9 + .../angular/angular/src/utils/get-params.d.ts | 6 + .../angular/src/utils/params-list.d.ts | 1 + .../angular/angular/src/utils/utils.d.ts | 6 + .../angular/bundles/swiper_angular.umd.js | 1830 +++ .../angular/bundles/swiper_angular.umd.js.map | 1 + .../angular/esm2015/angular/src/public-api.js | 7 + .../angular/src/swiper-slide.directive.js | 60 + .../esm2015/angular/src/swiper.component.js | 1126 ++ .../esm2015/angular/src/swiper.module.js | 19 + .../esm2015/angular/src/utils/get-params.js | 38 + .../esm2015/angular/src/utils/params-list.js | 115 + .../esm2015/angular/src/utils/utils.js | 49 + .../swiper/angular/esm2015/swiper-angular.js | 2 + .../swiper/angular/esm2015/swiper_angular.js | 5 + .../swiper/angular/fesm2015/swiper_angular.js | 1402 +++ .../angular/fesm2015/swiper_angular.js.map | 1 + .../web/include/swiper/angular/package.json | 19 + .../swiper/angular/swiper-angular.d.ts | 1 + .../swiper/angular/swiper_angular.d.ts | 5 + .../swiper/core/breakpoints/getBreakpoint.js | 40 + .../include/swiper/core/breakpoints/index.js | 6 + .../swiper/core/breakpoints/setBreakpoint.js | 72 + .../swiper/core/check-overflow/index.js | 38 + .../include/swiper/core/classes/addClasses.js | 52 + .../web/include/swiper/core/classes/index.js | 6 + .../swiper/core/classes/removeClasses.js | 9 + resources/web/include/swiper/core/core.js | 610 + resources/web/include/swiper/core/defaults.js | 120 + .../web/include/swiper/core/events-emitter.js | 108 + .../web/include/swiper/core/events/index.js | 97 + .../web/include/swiper/core/events/onClick.js | 13 + .../include/swiper/core/events/onResize.js | 43 + .../include/swiper/core/events/onScroll.js | 35 + .../include/swiper/core/events/onTouchEnd.js | 143 + .../include/swiper/core/events/onTouchMove.js | 222 + .../swiper/core/events/onTouchStart.js | 114 + .../include/swiper/core/grab-cursor/index.js | 6 + .../swiper/core/grab-cursor/setGrabCursor.js | 9 + .../core/grab-cursor/unsetGrabCursor.js | 9 + .../web/include/swiper/core/images/index.js | 6 + .../include/swiper/core/images/loadImage.js | 37 + .../swiper/core/images/preloadImages.js | 19 + .../web/include/swiper/core/loop/index.js | 8 + .../include/swiper/core/loop/loopCreate.js | 59 + .../include/swiper/core/loop/loopDestroy.js | 10 + .../web/include/swiper/core/loop/loopFix.js | 41 + .../include/swiper/core/moduleExtendParams.js | 38 + .../swiper/core/modules/observer/observer.js | 75 + .../swiper/core/modules/resize/resize.js | 68 + .../web/include/swiper/core/slide/index.js | 16 + .../include/swiper/core/slide/slideNext.js | 26 + .../include/swiper/core/slide/slidePrev.js | 59 + .../include/swiper/core/slide/slideReset.js | 5 + .../web/include/swiper/core/slide/slideTo.js | 189 + .../swiper/core/slide/slideToClickedSlide.js | 39 + .../swiper/core/slide/slideToClosest.js | 32 + .../include/swiper/core/slide/slideToLoop.js | 10 + .../include/swiper/core/transition/index.js | 8 + .../swiper/core/transition/setTransition.js | 9 + .../swiper/core/transition/transitionEmit.js | 33 + .../swiper/core/transition/transitionEnd.js | 16 + .../swiper/core/transition/transitionStart.js | 19 + .../swiper/core/translate/getTranslate.js | 22 + .../include/swiper/core/translate/index.js | 12 + .../swiper/core/translate/maxTranslate.js | 3 + .../swiper/core/translate/minTranslate.js | 3 + .../swiper/core/translate/setTranslate.js | 48 + .../swiper/core/translate/translateTo.js | 85 + .../web/include/swiper/core/update/index.js | 20 + .../swiper/core/update/updateActiveIndex.js | 70 + .../swiper/core/update/updateAutoHeight.js | 49 + .../swiper/core/update/updateClickedSlide.js | 36 + .../swiper/core/update/updateProgress.js | 50 + .../include/swiper/core/update/updateSize.js | 33 + .../swiper/core/update/updateSlides.js | 309 + .../swiper/core/update/updateSlidesClasses.js | 64 + .../swiper/core/update/updateSlidesOffset.js | 8 + .../core/update/updateSlidesProgress.js | 44 + .../web/include/swiper/modules/a11y/a11y.js | 283 + .../web/include/swiper/modules/a11y/a11y.less | 9 + .../include/swiper/modules/a11y/a11y.min.css | 1 + .../web/include/swiper/modules/a11y/a11y.scss | 9 + .../swiper/modules/autoplay/autoplay.js | 222 + .../swiper/modules/autoplay/autoplay.less | 0 .../swiper/modules/autoplay/autoplay.min.css | 0 .../swiper/modules/autoplay/autoplay.scss | 0 .../swiper/modules/controller/controller.js | 191 + .../swiper/modules/controller/controller.less | 0 .../modules/controller/controller.min.css | 0 .../swiper/modules/controller/controller.scss | 0 .../modules/effect-cards/effect-cards.js | 125 + .../modules/effect-cards/effect-cards.less | 8 + .../modules/effect-cards/effect-cards.min.css | 1 + .../modules/effect-cards/effect-cards.scss | 7 + .../effect-coverflow/effect-coverflow.js | 103 + .../effect-coverflow/effect-coverflow.less | 2 + .../effect-coverflow/effect-coverflow.min.css | 0 .../effect-coverflow/effect-coverflow.scss | 2 + .../effect-creative/effect-creative.js | 154 + .../effect-creative/effect-creative.less | 7 + .../effect-creative/effect-creative.min.css | 1 + .../effect-creative/effect-creative.scss | 7 + .../swiper/modules/effect-cube/effect-cube.js | 180 + .../modules/effect-cube/effect-cube.less | 59 + .../modules/effect-cube/effect-cube.min.css | 1 + .../modules/effect-cube/effect-cube.scss | 59 + .../swiper/modules/effect-fade/effect-fade.js | 70 + .../modules/effect-fade/effect-fade.less | 20 + .../modules/effect-fade/effect-fade.min.css | 1 + .../modules/effect-fade/effect-fade.scss | 20 + .../swiper/modules/effect-flip/effect-flip.js | 102 + .../modules/effect-flip/effect-flip.less | 24 + .../modules/effect-flip/effect-flip.min.css | 1 + .../modules/effect-flip/effect-flip.scss | 24 + .../swiper/modules/free-mode/free-mode.js | 245 + .../swiper/modules/free-mode/free-mode.less | 4 + .../modules/free-mode/free-mode.min.css | 1 + .../swiper/modules/free-mode/free-mode.scss | 4 + .../web/include/swiper/modules/grid/grid.js | 116 + .../web/include/swiper/modules/grid/grid.less | 7 + .../include/swiper/modules/grid/grid.min.css | 1 + .../web/include/swiper/modules/grid/grid.scss | 7 + .../hash-navigation/hash-navigation.js | 96 + .../hash-navigation/hash-navigation.less | 2 + .../hash-navigation/hash-navigation.min.css | 0 .../hash-navigation/hash-navigation.scss | 0 .../include/swiper/modules/history/history.js | 150 + .../swiper/modules/history/history.less | 0 .../swiper/modules/history/history.min.css | 0 .../swiper/modules/history/history.scss | 0 .../swiper/modules/keyboard/keyboard.js | 131 + .../swiper/modules/keyboard/keyboard.less | 0 .../swiper/modules/keyboard/keyboard.min.css | 0 .../swiper/modules/keyboard/keyboard.scss | 0 .../web/include/swiper/modules/lazy/lazy.js | 283 + .../web/include/swiper/modules/lazy/lazy.less | 34 + .../include/swiper/modules/lazy/lazy.min.css | 1 + .../web/include/swiper/modules/lazy/lazy.scss | 34 + .../modules/manipulation/manipulation.js | 16 + .../modules/manipulation/manipulation.less | 0 .../modules/manipulation/manipulation.min.css | 0 .../modules/manipulation/manipulation.scss | 0 .../modules/manipulation/methods/addSlide.js | 64 + .../manipulation/methods/appendSlide.js | 27 + .../manipulation/methods/prependSlide.js | 34 + .../manipulation/methods/removeAllSlides.js | 10 + .../manipulation/methods/removeSlide.js | 47 + .../swiper/modules/mousewheel/mousewheel.js | 422 + .../swiper/modules/mousewheel/mousewheel.less | 0 .../modules/mousewheel/mousewheel.min.css | 0 .../swiper/modules/mousewheel/mousewheel.scss | 0 .../swiper/modules/navigation/navigation.js | 185 + .../swiper/modules/navigation/navigation.less | 55 + .../modules/navigation/navigation.min.css | 1 + .../swiper/modules/navigation/navigation.scss | 56 + .../swiper/modules/pagination/pagination.js | 410 + .../swiper/modules/pagination/pagination.less | 163 + .../modules/pagination/pagination.min.css | 1 + .../swiper/modules/pagination/pagination.scss | 163 + .../swiper/modules/parallax/parallax.js | 114 + .../swiper/modules/parallax/parallax.less | 0 .../swiper/modules/parallax/parallax.min.css | 0 .../swiper/modules/parallax/parallax.scss | 0 .../swiper/modules/scrollbar/scrollbar.js | 361 + .../swiper/modules/scrollbar/scrollbar.less | 38 + .../modules/scrollbar/scrollbar.min.css | 1 + .../swiper/modules/scrollbar/scrollbar.scss | 38 + .../include/swiper/modules/thumbs/thumbs.js | 204 + .../include/swiper/modules/thumbs/thumbs.less | 5 + .../swiper/modules/thumbs/thumbs.min.css | 0 .../include/swiper/modules/thumbs/thumbs.scss | 5 + .../include/swiper/modules/virtual/virtual.js | 291 + .../swiper/modules/virtual/virtual.less | 17 + .../swiper/modules/virtual/virtual.min.css | 1 + .../swiper/modules/virtual/virtual.scss | 17 + .../web/include/swiper/modules/zoom/zoom.js | 612 + .../web/include/swiper/modules/zoom/zoom.less | 20 + .../include/swiper/modules/zoom/zoom.min.css | 1 + .../web/include/swiper/modules/zoom/zoom.scss | 20 + .../include/swiper/node_modules/dom7/LICENSE | 21 + .../swiper/node_modules/dom7/README.md | 47 + .../swiper/node_modules/dom7/dom7.d.ts | 628 + .../swiper/node_modules/dom7/dom7.esm.js | 1478 +++ .../include/swiper/node_modules/dom7/dom7.js | 1768 +++ .../swiper/node_modules/dom7/dom7.js.map | 1 + .../swiper/node_modules/dom7/dom7.min.js | 13 + .../swiper/node_modules/dom7/dom7.min.js.map | 1 + .../swiper/node_modules/dom7/package.json | 60 + .../swiper/node_modules/ssr-window/LICENSE | 21 + .../swiper/node_modules/ssr-window/README.md | 59 + .../node_modules/ssr-window/package.json | 55 + .../node_modules/ssr-window/ssr-window.esm.js | 148 + .../node_modules/ssr-window/ssr-window.umd.js | 163 + .../ssr-window/ssr-window.umd.js.map | 1 + .../ssr-window/ssr-window.umd.min.js | 13 + .../ssr-window/ssr-window.umd.min.js.map | 1 + .../ssr-window/types/document.d.ts | 36 + .../node_modules/ssr-window/types/extend.d.ts | 2 + .../ssr-window/types/ssr-window.d.ts | 4 + .../node_modules/ssr-window/types/window.d.ts | 72 + resources/web/include/swiper/package.json | 191 + resources/web/include/swiper/postinstall.js | 36 + .../swiper/react/get-changed-params.js | 43 + .../web/include/swiper/react/get-children.js | 46 + .../web/include/swiper/react/get-params.js | 46 + .../web/include/swiper/react/init-swiper.js | 36 + resources/web/include/swiper/react/loop.js | 78 + .../web/include/swiper/react/params-list.js | 4 + .../include/swiper/react/swiper-react.d.ts | 467 + .../web/include/swiper/react/swiper-react.js | 15 + .../web/include/swiper/react/swiper-slide.js | 79 + resources/web/include/swiper/react/swiper.js | 202 + .../web/include/swiper/react/update-swiper.js | 131 + .../react/use-isomorphic-layout-effect.js | 9 + resources/web/include/swiper/react/utils.js | 37 + resources/web/include/swiper/react/virtual.js | 33 + .../swiper/shared/classes-to-selector.js | 4 + .../shared/create-element-if-not-defined.js | 23 + .../include/swiper/shared/create-shadow.js | 13 + resources/web/include/swiper/shared/dom.js | 46 + .../web/include/swiper/shared/effect-init.js | 31 + .../include/swiper/shared/effect-target.js | 10 + .../shared/effect-virtual-transition-end.js | 35 + .../web/include/swiper/shared/get-browser.js | 26 + .../web/include/swiper/shared/get-device.js | 57 + .../web/include/swiper/shared/get-support.js | 41 + resources/web/include/swiper/shared/utils.js | 197 + .../swiper/svelte/get-changed-params.js | 39 + .../web/include/swiper/svelte/get-params.js | 44 + .../web/include/swiper/svelte/init-swiper.js | 36 + .../web/include/swiper/svelte/params-list.js | 4 + .../include/swiper/svelte/swiper-slide.svelte | 95 + .../include/swiper/svelte/swiper-svelte.d.ts | 431 + .../include/swiper/svelte/swiper-svelte.js | 15 + .../web/include/swiper/svelte/swiper.svelte | 178 + .../include/swiper/svelte/update-swiper.js | 132 + resources/web/include/swiper/svelte/utils.js | 37 + .../web/include/swiper/swiper-bundle.css | 613 + .../swiper/swiper-bundle.esm.browser.js | 10060 +++++++++++++++ .../swiper/swiper-bundle.esm.browser.js.map | 1 + .../swiper/swiper-bundle.esm.browser.min.js | 14 + .../swiper-bundle.esm.browser.min.js.map | 1 + .../web/include/swiper/swiper-bundle.esm.js | 42 + resources/web/include/swiper/swiper-bundle.js | 10068 ++++++++++++++++ .../web/include/swiper/swiper-bundle.js.map | 1 + .../web/include/swiper/swiper-bundle.min.css | 13 + .../web/include/swiper/swiper-bundle.min.js | 14 + .../include/swiper/swiper-bundle.min.js.map | 1 + resources/web/include/swiper/swiper-vars.less | 1 + resources/web/include/swiper/swiper-vars.scss | 1 + resources/web/include/swiper/swiper.d.ts | 58 + resources/web/include/swiper/swiper.esm.js | 37 + resources/web/include/swiper/swiper.less | 169 + resources/web/include/swiper/swiper.min.css | 13 + resources/web/include/swiper/swiper.scss | 170 + resources/web/include/swiper/types/index.d.ts | 5 + .../include/swiper/types/modules/a11y.d.ts | 89 + .../swiper/types/modules/autoplay.d.ts | 101 + .../swiper/types/modules/controller.d.ts | 35 + .../swiper/types/modules/effect-cards.d.ts | 20 + .../types/modules/effect-coverflow.d.ts | 50 + .../swiper/types/modules/effect-creative.d.ts | 93 + .../swiper/types/modules/effect-cube.d.ts | 30 + .../swiper/types/modules/effect-fade.d.ts | 20 + .../swiper/types/modules/effect-flip.d.ts | 26 + .../swiper/types/modules/free-mode.d.ts | 59 + .../include/swiper/types/modules/grid.d.ts | 21 + .../swiper/types/modules/hash-navigation.d.ts | 32 + .../include/swiper/types/modules/history.d.ts | 29 + .../swiper/types/modules/keyboard.d.ts | 46 + .../include/swiper/types/modules/lazy.d.ts | 82 + .../swiper/types/modules/manipulation.d.ts | 70 + .../swiper/types/modules/mousewheel.d.ts | 75 + .../swiper/types/modules/navigation.d.ts | 86 + .../swiper/types/modules/pagination.d.ts | 285 + .../swiper/types/modules/parallax.d.ts | 12 + .../swiper/types/modules/public-api.d.ts | 24 + .../swiper/types/modules/scrollbar.d.ts | 115 + .../include/swiper/types/modules/thumbs.d.ts | 54 + .../include/swiper/types/modules/virtual.d.ts | 122 + .../include/swiper/types/modules/zoom.d.ts | 79 + .../web/include/swiper/types/shared.d.ts | 3 + .../include/swiper/types/swiper-class.d.ts | 472 + .../include/swiper/types/swiper-events.d.ts | 362 + .../include/swiper/types/swiper-options.d.ts | 1205 ++ .../include/swiper/vue/get-changed-params.js | 43 + .../web/include/swiper/vue/get-children.js | 41 + .../web/include/swiper/vue/get-params.js | 48 + .../web/include/swiper/vue/init-swiper.js | 36 + resources/web/include/swiper/vue/loop.js | 79 + .../web/include/swiper/vue/params-list.js | 4 + .../web/include/swiper/vue/swiper-slide.js | 83 + .../web/include/swiper/vue/swiper-vue.d.ts | 859 ++ .../web/include/swiper/vue/swiper-vue.js | 15 + resources/web/include/swiper/vue/swiper.js | 640 + .../web/include/swiper/vue/update-swiper.js | 131 + resources/web/include/swiper/vue/utils.js | 37 + resources/web/include/swiper/vue/virtual.js | 35 + .../web/include/viewer/viewer-jquery.min.js | 10 + resources/web/include/viewer/viewer.css | 456 + resources/web/include/viewer/viewer.js | 3117 +++++ resources/web/include/viewer/viewer.min.css | 9 + resources/web/model/css/dark.css | 55 + resources/web/model/img/by-nc-nd.png | Bin 0 -> 3932 bytes resources/web/model/img/by-nc-sa.png | Bin 0 -> 4067 bytes resources/web/model/img/by-nc.png | Bin 0 -> 3379 bytes resources/web/model/img/by-nd.png | Bin 0 -> 3219 bytes resources/web/model/img/by-sa.png | Bin 0 -> 3370 bytes resources/web/model/img/by.png | Bin 0 -> 2527 bytes resources/web/model/img/cc-zero.png | Bin 0 -> 2481 bytes resources/web/model/img/default.png | Bin 0 -> 450 bytes resources/web/model/img/excel.png | Bin 0 -> 587 bytes resources/web/model/img/file_g.svg | 7 + resources/web/model/img/file_h.svg | 7 + resources/web/model/img/info_g.svg | 4 + resources/web/model/img/info_h.svg | 4 + resources/web/model/img/null.png | Bin 0 -> 11593 bytes resources/web/model/img/null2.png | Bin 0 -> 13120 bytes resources/web/model/img/p1.png | Bin 0 -> 325265 bytes resources/web/model/img/p2.png | Bin 0 -> 706151 bytes resources/web/model/img/p3.png | Bin 0 -> 574149 bytes resources/web/model/img/p4.png | Bin 0 -> 107902 bytes resources/web/model/img/p5.png | Bin 0 -> 349567 bytes resources/web/model/img/p6.png | Bin 0 -> 550955 bytes resources/web/model/img/pdf.png | Bin 0 -> 770 bytes resources/web/model/img/profile_g.svg | 8 + resources/web/model/img/profile_h.svg | 8 + resources/web/model/img/s.svg | 3 + resources/web/model/index.html | 247 + resources/web/model/model.css | 320 + resources/web/model/model.js | 586 + resources/web/model/test.js | 124 + 343 files changed, 54828 insertions(+), 2 deletions(-) create mode 100644 resources/web/include/globalapi.js create mode 100644 resources/web/include/jquery-2.1.1.min.js create mode 100644 resources/web/include/jquery-3.6.0.min.js create mode 100644 resources/web/include/json2.js create mode 100644 resources/web/include/swiper/LICENSE create mode 100644 resources/web/include/swiper/README.md create mode 100644 resources/web/include/swiper/angular/angular/src/public-api.d.ts create mode 100644 resources/web/include/swiper/angular/angular/src/swiper-slide.directive.d.ts create mode 100644 resources/web/include/swiper/angular/angular/src/swiper.component.d.ts create mode 100644 resources/web/include/swiper/angular/angular/src/swiper.module.d.ts create mode 100644 resources/web/include/swiper/angular/angular/src/utils/get-params.d.ts create mode 100644 resources/web/include/swiper/angular/angular/src/utils/params-list.d.ts create mode 100644 resources/web/include/swiper/angular/angular/src/utils/utils.d.ts create mode 100644 resources/web/include/swiper/angular/bundles/swiper_angular.umd.js create mode 100644 resources/web/include/swiper/angular/bundles/swiper_angular.umd.js.map create mode 100644 resources/web/include/swiper/angular/esm2015/angular/src/public-api.js create mode 100644 resources/web/include/swiper/angular/esm2015/angular/src/swiper-slide.directive.js create mode 100644 resources/web/include/swiper/angular/esm2015/angular/src/swiper.component.js create mode 100644 resources/web/include/swiper/angular/esm2015/angular/src/swiper.module.js create mode 100644 resources/web/include/swiper/angular/esm2015/angular/src/utils/get-params.js create mode 100644 resources/web/include/swiper/angular/esm2015/angular/src/utils/params-list.js create mode 100644 resources/web/include/swiper/angular/esm2015/angular/src/utils/utils.js create mode 100644 resources/web/include/swiper/angular/esm2015/swiper-angular.js create mode 100644 resources/web/include/swiper/angular/esm2015/swiper_angular.js create mode 100644 resources/web/include/swiper/angular/fesm2015/swiper_angular.js create mode 100644 resources/web/include/swiper/angular/fesm2015/swiper_angular.js.map create mode 100644 resources/web/include/swiper/angular/package.json create mode 100644 resources/web/include/swiper/angular/swiper-angular.d.ts create mode 100644 resources/web/include/swiper/angular/swiper_angular.d.ts create mode 100644 resources/web/include/swiper/core/breakpoints/getBreakpoint.js create mode 100644 resources/web/include/swiper/core/breakpoints/index.js create mode 100644 resources/web/include/swiper/core/breakpoints/setBreakpoint.js create mode 100644 resources/web/include/swiper/core/check-overflow/index.js create mode 100644 resources/web/include/swiper/core/classes/addClasses.js create mode 100644 resources/web/include/swiper/core/classes/index.js create mode 100644 resources/web/include/swiper/core/classes/removeClasses.js create mode 100644 resources/web/include/swiper/core/core.js create mode 100644 resources/web/include/swiper/core/defaults.js create mode 100644 resources/web/include/swiper/core/events-emitter.js create mode 100644 resources/web/include/swiper/core/events/index.js create mode 100644 resources/web/include/swiper/core/events/onClick.js create mode 100644 resources/web/include/swiper/core/events/onResize.js create mode 100644 resources/web/include/swiper/core/events/onScroll.js create mode 100644 resources/web/include/swiper/core/events/onTouchEnd.js create mode 100644 resources/web/include/swiper/core/events/onTouchMove.js create mode 100644 resources/web/include/swiper/core/events/onTouchStart.js create mode 100644 resources/web/include/swiper/core/grab-cursor/index.js create mode 100644 resources/web/include/swiper/core/grab-cursor/setGrabCursor.js create mode 100644 resources/web/include/swiper/core/grab-cursor/unsetGrabCursor.js create mode 100644 resources/web/include/swiper/core/images/index.js create mode 100644 resources/web/include/swiper/core/images/loadImage.js create mode 100644 resources/web/include/swiper/core/images/preloadImages.js create mode 100644 resources/web/include/swiper/core/loop/index.js create mode 100644 resources/web/include/swiper/core/loop/loopCreate.js create mode 100644 resources/web/include/swiper/core/loop/loopDestroy.js create mode 100644 resources/web/include/swiper/core/loop/loopFix.js create mode 100644 resources/web/include/swiper/core/moduleExtendParams.js create mode 100644 resources/web/include/swiper/core/modules/observer/observer.js create mode 100644 resources/web/include/swiper/core/modules/resize/resize.js create mode 100644 resources/web/include/swiper/core/slide/index.js create mode 100644 resources/web/include/swiper/core/slide/slideNext.js create mode 100644 resources/web/include/swiper/core/slide/slidePrev.js create mode 100644 resources/web/include/swiper/core/slide/slideReset.js create mode 100644 resources/web/include/swiper/core/slide/slideTo.js create mode 100644 resources/web/include/swiper/core/slide/slideToClickedSlide.js create mode 100644 resources/web/include/swiper/core/slide/slideToClosest.js create mode 100644 resources/web/include/swiper/core/slide/slideToLoop.js create mode 100644 resources/web/include/swiper/core/transition/index.js create mode 100644 resources/web/include/swiper/core/transition/setTransition.js create mode 100644 resources/web/include/swiper/core/transition/transitionEmit.js create mode 100644 resources/web/include/swiper/core/transition/transitionEnd.js create mode 100644 resources/web/include/swiper/core/transition/transitionStart.js create mode 100644 resources/web/include/swiper/core/translate/getTranslate.js create mode 100644 resources/web/include/swiper/core/translate/index.js create mode 100644 resources/web/include/swiper/core/translate/maxTranslate.js create mode 100644 resources/web/include/swiper/core/translate/minTranslate.js create mode 100644 resources/web/include/swiper/core/translate/setTranslate.js create mode 100644 resources/web/include/swiper/core/translate/translateTo.js create mode 100644 resources/web/include/swiper/core/update/index.js create mode 100644 resources/web/include/swiper/core/update/updateActiveIndex.js create mode 100644 resources/web/include/swiper/core/update/updateAutoHeight.js create mode 100644 resources/web/include/swiper/core/update/updateClickedSlide.js create mode 100644 resources/web/include/swiper/core/update/updateProgress.js create mode 100644 resources/web/include/swiper/core/update/updateSize.js create mode 100644 resources/web/include/swiper/core/update/updateSlides.js create mode 100644 resources/web/include/swiper/core/update/updateSlidesClasses.js create mode 100644 resources/web/include/swiper/core/update/updateSlidesOffset.js create mode 100644 resources/web/include/swiper/core/update/updateSlidesProgress.js create mode 100644 resources/web/include/swiper/modules/a11y/a11y.js create mode 100644 resources/web/include/swiper/modules/a11y/a11y.less create mode 100644 resources/web/include/swiper/modules/a11y/a11y.min.css create mode 100644 resources/web/include/swiper/modules/a11y/a11y.scss create mode 100644 resources/web/include/swiper/modules/autoplay/autoplay.js create mode 100644 resources/web/include/swiper/modules/autoplay/autoplay.less create mode 100644 resources/web/include/swiper/modules/autoplay/autoplay.min.css create mode 100644 resources/web/include/swiper/modules/autoplay/autoplay.scss create mode 100644 resources/web/include/swiper/modules/controller/controller.js create mode 100644 resources/web/include/swiper/modules/controller/controller.less create mode 100644 resources/web/include/swiper/modules/controller/controller.min.css create mode 100644 resources/web/include/swiper/modules/controller/controller.scss create mode 100644 resources/web/include/swiper/modules/effect-cards/effect-cards.js create mode 100644 resources/web/include/swiper/modules/effect-cards/effect-cards.less create mode 100644 resources/web/include/swiper/modules/effect-cards/effect-cards.min.css create mode 100644 resources/web/include/swiper/modules/effect-cards/effect-cards.scss create mode 100644 resources/web/include/swiper/modules/effect-coverflow/effect-coverflow.js create mode 100644 resources/web/include/swiper/modules/effect-coverflow/effect-coverflow.less create mode 100644 resources/web/include/swiper/modules/effect-coverflow/effect-coverflow.min.css create mode 100644 resources/web/include/swiper/modules/effect-coverflow/effect-coverflow.scss create mode 100644 resources/web/include/swiper/modules/effect-creative/effect-creative.js create mode 100644 resources/web/include/swiper/modules/effect-creative/effect-creative.less create mode 100644 resources/web/include/swiper/modules/effect-creative/effect-creative.min.css create mode 100644 resources/web/include/swiper/modules/effect-creative/effect-creative.scss create mode 100644 resources/web/include/swiper/modules/effect-cube/effect-cube.js create mode 100644 resources/web/include/swiper/modules/effect-cube/effect-cube.less create mode 100644 resources/web/include/swiper/modules/effect-cube/effect-cube.min.css create mode 100644 resources/web/include/swiper/modules/effect-cube/effect-cube.scss create mode 100644 resources/web/include/swiper/modules/effect-fade/effect-fade.js create mode 100644 resources/web/include/swiper/modules/effect-fade/effect-fade.less create mode 100644 resources/web/include/swiper/modules/effect-fade/effect-fade.min.css create mode 100644 resources/web/include/swiper/modules/effect-fade/effect-fade.scss create mode 100644 resources/web/include/swiper/modules/effect-flip/effect-flip.js create mode 100644 resources/web/include/swiper/modules/effect-flip/effect-flip.less create mode 100644 resources/web/include/swiper/modules/effect-flip/effect-flip.min.css create mode 100644 resources/web/include/swiper/modules/effect-flip/effect-flip.scss create mode 100644 resources/web/include/swiper/modules/free-mode/free-mode.js create mode 100644 resources/web/include/swiper/modules/free-mode/free-mode.less create mode 100644 resources/web/include/swiper/modules/free-mode/free-mode.min.css create mode 100644 resources/web/include/swiper/modules/free-mode/free-mode.scss create mode 100644 resources/web/include/swiper/modules/grid/grid.js create mode 100644 resources/web/include/swiper/modules/grid/grid.less create mode 100644 resources/web/include/swiper/modules/grid/grid.min.css create mode 100644 resources/web/include/swiper/modules/grid/grid.scss create mode 100644 resources/web/include/swiper/modules/hash-navigation/hash-navigation.js create mode 100644 resources/web/include/swiper/modules/hash-navigation/hash-navigation.less create mode 100644 resources/web/include/swiper/modules/hash-navigation/hash-navigation.min.css create mode 100644 resources/web/include/swiper/modules/hash-navigation/hash-navigation.scss create mode 100644 resources/web/include/swiper/modules/history/history.js create mode 100644 resources/web/include/swiper/modules/history/history.less create mode 100644 resources/web/include/swiper/modules/history/history.min.css create mode 100644 resources/web/include/swiper/modules/history/history.scss create mode 100644 resources/web/include/swiper/modules/keyboard/keyboard.js create mode 100644 resources/web/include/swiper/modules/keyboard/keyboard.less create mode 100644 resources/web/include/swiper/modules/keyboard/keyboard.min.css create mode 100644 resources/web/include/swiper/modules/keyboard/keyboard.scss create mode 100644 resources/web/include/swiper/modules/lazy/lazy.js create mode 100644 resources/web/include/swiper/modules/lazy/lazy.less create mode 100644 resources/web/include/swiper/modules/lazy/lazy.min.css create mode 100644 resources/web/include/swiper/modules/lazy/lazy.scss create mode 100644 resources/web/include/swiper/modules/manipulation/manipulation.js create mode 100644 resources/web/include/swiper/modules/manipulation/manipulation.less create mode 100644 resources/web/include/swiper/modules/manipulation/manipulation.min.css create mode 100644 resources/web/include/swiper/modules/manipulation/manipulation.scss create mode 100644 resources/web/include/swiper/modules/manipulation/methods/addSlide.js create mode 100644 resources/web/include/swiper/modules/manipulation/methods/appendSlide.js create mode 100644 resources/web/include/swiper/modules/manipulation/methods/prependSlide.js create mode 100644 resources/web/include/swiper/modules/manipulation/methods/removeAllSlides.js create mode 100644 resources/web/include/swiper/modules/manipulation/methods/removeSlide.js create mode 100644 resources/web/include/swiper/modules/mousewheel/mousewheel.js create mode 100644 resources/web/include/swiper/modules/mousewheel/mousewheel.less create mode 100644 resources/web/include/swiper/modules/mousewheel/mousewheel.min.css create mode 100644 resources/web/include/swiper/modules/mousewheel/mousewheel.scss create mode 100644 resources/web/include/swiper/modules/navigation/navigation.js create mode 100644 resources/web/include/swiper/modules/navigation/navigation.less create mode 100644 resources/web/include/swiper/modules/navigation/navigation.min.css create mode 100644 resources/web/include/swiper/modules/navigation/navigation.scss create mode 100644 resources/web/include/swiper/modules/pagination/pagination.js create mode 100644 resources/web/include/swiper/modules/pagination/pagination.less create mode 100644 resources/web/include/swiper/modules/pagination/pagination.min.css create mode 100644 resources/web/include/swiper/modules/pagination/pagination.scss create mode 100644 resources/web/include/swiper/modules/parallax/parallax.js create mode 100644 resources/web/include/swiper/modules/parallax/parallax.less create mode 100644 resources/web/include/swiper/modules/parallax/parallax.min.css create mode 100644 resources/web/include/swiper/modules/parallax/parallax.scss create mode 100644 resources/web/include/swiper/modules/scrollbar/scrollbar.js create mode 100644 resources/web/include/swiper/modules/scrollbar/scrollbar.less create mode 100644 resources/web/include/swiper/modules/scrollbar/scrollbar.min.css create mode 100644 resources/web/include/swiper/modules/scrollbar/scrollbar.scss create mode 100644 resources/web/include/swiper/modules/thumbs/thumbs.js create mode 100644 resources/web/include/swiper/modules/thumbs/thumbs.less create mode 100644 resources/web/include/swiper/modules/thumbs/thumbs.min.css create mode 100644 resources/web/include/swiper/modules/thumbs/thumbs.scss create mode 100644 resources/web/include/swiper/modules/virtual/virtual.js create mode 100644 resources/web/include/swiper/modules/virtual/virtual.less create mode 100644 resources/web/include/swiper/modules/virtual/virtual.min.css create mode 100644 resources/web/include/swiper/modules/virtual/virtual.scss create mode 100644 resources/web/include/swiper/modules/zoom/zoom.js create mode 100644 resources/web/include/swiper/modules/zoom/zoom.less create mode 100644 resources/web/include/swiper/modules/zoom/zoom.min.css create mode 100644 resources/web/include/swiper/modules/zoom/zoom.scss create mode 100644 resources/web/include/swiper/node_modules/dom7/LICENSE create mode 100644 resources/web/include/swiper/node_modules/dom7/README.md create mode 100644 resources/web/include/swiper/node_modules/dom7/dom7.d.ts create mode 100644 resources/web/include/swiper/node_modules/dom7/dom7.esm.js create mode 100644 resources/web/include/swiper/node_modules/dom7/dom7.js create mode 100644 resources/web/include/swiper/node_modules/dom7/dom7.js.map create mode 100644 resources/web/include/swiper/node_modules/dom7/dom7.min.js create mode 100644 resources/web/include/swiper/node_modules/dom7/dom7.min.js.map create mode 100644 resources/web/include/swiper/node_modules/dom7/package.json create mode 100644 resources/web/include/swiper/node_modules/ssr-window/LICENSE create mode 100644 resources/web/include/swiper/node_modules/ssr-window/README.md create mode 100644 resources/web/include/swiper/node_modules/ssr-window/package.json create mode 100644 resources/web/include/swiper/node_modules/ssr-window/ssr-window.esm.js create mode 100644 resources/web/include/swiper/node_modules/ssr-window/ssr-window.umd.js create mode 100644 resources/web/include/swiper/node_modules/ssr-window/ssr-window.umd.js.map create mode 100644 resources/web/include/swiper/node_modules/ssr-window/ssr-window.umd.min.js create mode 100644 resources/web/include/swiper/node_modules/ssr-window/ssr-window.umd.min.js.map create mode 100644 resources/web/include/swiper/node_modules/ssr-window/types/document.d.ts create mode 100644 resources/web/include/swiper/node_modules/ssr-window/types/extend.d.ts create mode 100644 resources/web/include/swiper/node_modules/ssr-window/types/ssr-window.d.ts create mode 100644 resources/web/include/swiper/node_modules/ssr-window/types/window.d.ts create mode 100644 resources/web/include/swiper/package.json create mode 100644 resources/web/include/swiper/postinstall.js create mode 100644 resources/web/include/swiper/react/get-changed-params.js create mode 100644 resources/web/include/swiper/react/get-children.js create mode 100644 resources/web/include/swiper/react/get-params.js create mode 100644 resources/web/include/swiper/react/init-swiper.js create mode 100644 resources/web/include/swiper/react/loop.js create mode 100644 resources/web/include/swiper/react/params-list.js create mode 100644 resources/web/include/swiper/react/swiper-react.d.ts create mode 100644 resources/web/include/swiper/react/swiper-react.js create mode 100644 resources/web/include/swiper/react/swiper-slide.js create mode 100644 resources/web/include/swiper/react/swiper.js create mode 100644 resources/web/include/swiper/react/update-swiper.js create mode 100644 resources/web/include/swiper/react/use-isomorphic-layout-effect.js create mode 100644 resources/web/include/swiper/react/utils.js create mode 100644 resources/web/include/swiper/react/virtual.js create mode 100644 resources/web/include/swiper/shared/classes-to-selector.js create mode 100644 resources/web/include/swiper/shared/create-element-if-not-defined.js create mode 100644 resources/web/include/swiper/shared/create-shadow.js create mode 100644 resources/web/include/swiper/shared/dom.js create mode 100644 resources/web/include/swiper/shared/effect-init.js create mode 100644 resources/web/include/swiper/shared/effect-target.js create mode 100644 resources/web/include/swiper/shared/effect-virtual-transition-end.js create mode 100644 resources/web/include/swiper/shared/get-browser.js create mode 100644 resources/web/include/swiper/shared/get-device.js create mode 100644 resources/web/include/swiper/shared/get-support.js create mode 100644 resources/web/include/swiper/shared/utils.js create mode 100644 resources/web/include/swiper/svelte/get-changed-params.js create mode 100644 resources/web/include/swiper/svelte/get-params.js create mode 100644 resources/web/include/swiper/svelte/init-swiper.js create mode 100644 resources/web/include/swiper/svelte/params-list.js create mode 100644 resources/web/include/swiper/svelte/swiper-slide.svelte create mode 100644 resources/web/include/swiper/svelte/swiper-svelte.d.ts create mode 100644 resources/web/include/swiper/svelte/swiper-svelte.js create mode 100644 resources/web/include/swiper/svelte/swiper.svelte create mode 100644 resources/web/include/swiper/svelte/update-swiper.js create mode 100644 resources/web/include/swiper/svelte/utils.js create mode 100644 resources/web/include/swiper/swiper-bundle.css create mode 100644 resources/web/include/swiper/swiper-bundle.esm.browser.js create mode 100644 resources/web/include/swiper/swiper-bundle.esm.browser.js.map create mode 100644 resources/web/include/swiper/swiper-bundle.esm.browser.min.js create mode 100644 resources/web/include/swiper/swiper-bundle.esm.browser.min.js.map create mode 100644 resources/web/include/swiper/swiper-bundle.esm.js create mode 100644 resources/web/include/swiper/swiper-bundle.js create mode 100644 resources/web/include/swiper/swiper-bundle.js.map create mode 100644 resources/web/include/swiper/swiper-bundle.min.css create mode 100644 resources/web/include/swiper/swiper-bundle.min.js create mode 100644 resources/web/include/swiper/swiper-bundle.min.js.map create mode 100644 resources/web/include/swiper/swiper-vars.less create mode 100644 resources/web/include/swiper/swiper-vars.scss create mode 100644 resources/web/include/swiper/swiper.d.ts create mode 100644 resources/web/include/swiper/swiper.esm.js create mode 100644 resources/web/include/swiper/swiper.less create mode 100644 resources/web/include/swiper/swiper.min.css create mode 100644 resources/web/include/swiper/swiper.scss create mode 100644 resources/web/include/swiper/types/index.d.ts create mode 100644 resources/web/include/swiper/types/modules/a11y.d.ts create mode 100644 resources/web/include/swiper/types/modules/autoplay.d.ts create mode 100644 resources/web/include/swiper/types/modules/controller.d.ts create mode 100644 resources/web/include/swiper/types/modules/effect-cards.d.ts create mode 100644 resources/web/include/swiper/types/modules/effect-coverflow.d.ts create mode 100644 resources/web/include/swiper/types/modules/effect-creative.d.ts create mode 100644 resources/web/include/swiper/types/modules/effect-cube.d.ts create mode 100644 resources/web/include/swiper/types/modules/effect-fade.d.ts create mode 100644 resources/web/include/swiper/types/modules/effect-flip.d.ts create mode 100644 resources/web/include/swiper/types/modules/free-mode.d.ts create mode 100644 resources/web/include/swiper/types/modules/grid.d.ts create mode 100644 resources/web/include/swiper/types/modules/hash-navigation.d.ts create mode 100644 resources/web/include/swiper/types/modules/history.d.ts create mode 100644 resources/web/include/swiper/types/modules/keyboard.d.ts create mode 100644 resources/web/include/swiper/types/modules/lazy.d.ts create mode 100644 resources/web/include/swiper/types/modules/manipulation.d.ts create mode 100644 resources/web/include/swiper/types/modules/mousewheel.d.ts create mode 100644 resources/web/include/swiper/types/modules/navigation.d.ts create mode 100644 resources/web/include/swiper/types/modules/pagination.d.ts create mode 100644 resources/web/include/swiper/types/modules/parallax.d.ts create mode 100644 resources/web/include/swiper/types/modules/public-api.d.ts create mode 100644 resources/web/include/swiper/types/modules/scrollbar.d.ts create mode 100644 resources/web/include/swiper/types/modules/thumbs.d.ts create mode 100644 resources/web/include/swiper/types/modules/virtual.d.ts create mode 100644 resources/web/include/swiper/types/modules/zoom.d.ts create mode 100644 resources/web/include/swiper/types/shared.d.ts create mode 100644 resources/web/include/swiper/types/swiper-class.d.ts create mode 100644 resources/web/include/swiper/types/swiper-events.d.ts create mode 100644 resources/web/include/swiper/types/swiper-options.d.ts create mode 100644 resources/web/include/swiper/vue/get-changed-params.js create mode 100644 resources/web/include/swiper/vue/get-children.js create mode 100644 resources/web/include/swiper/vue/get-params.js create mode 100644 resources/web/include/swiper/vue/init-swiper.js create mode 100644 resources/web/include/swiper/vue/loop.js create mode 100644 resources/web/include/swiper/vue/params-list.js create mode 100644 resources/web/include/swiper/vue/swiper-slide.js create mode 100644 resources/web/include/swiper/vue/swiper-vue.d.ts create mode 100644 resources/web/include/swiper/vue/swiper-vue.js create mode 100644 resources/web/include/swiper/vue/swiper.js create mode 100644 resources/web/include/swiper/vue/update-swiper.js create mode 100644 resources/web/include/swiper/vue/utils.js create mode 100644 resources/web/include/swiper/vue/virtual.js create mode 100644 resources/web/include/viewer/viewer-jquery.min.js create mode 100644 resources/web/include/viewer/viewer.css create mode 100644 resources/web/include/viewer/viewer.js create mode 100644 resources/web/include/viewer/viewer.min.css create mode 100644 resources/web/model/css/dark.css create mode 100644 resources/web/model/img/by-nc-nd.png create mode 100644 resources/web/model/img/by-nc-sa.png create mode 100644 resources/web/model/img/by-nc.png create mode 100644 resources/web/model/img/by-nd.png create mode 100644 resources/web/model/img/by-sa.png create mode 100644 resources/web/model/img/by.png create mode 100644 resources/web/model/img/cc-zero.png create mode 100644 resources/web/model/img/default.png create mode 100644 resources/web/model/img/excel.png create mode 100644 resources/web/model/img/file_g.svg create mode 100644 resources/web/model/img/file_h.svg create mode 100644 resources/web/model/img/info_g.svg create mode 100644 resources/web/model/img/info_h.svg create mode 100644 resources/web/model/img/null.png create mode 100644 resources/web/model/img/null2.png create mode 100644 resources/web/model/img/p1.png create mode 100644 resources/web/model/img/p2.png create mode 100644 resources/web/model/img/p3.png create mode 100644 resources/web/model/img/p4.png create mode 100644 resources/web/model/img/p5.png create mode 100644 resources/web/model/img/p6.png create mode 100644 resources/web/model/img/pdf.png create mode 100644 resources/web/model/img/profile_g.svg create mode 100644 resources/web/model/img/profile_h.svg create mode 100644 resources/web/model/img/s.svg create mode 100644 resources/web/model/index.html create mode 100644 resources/web/model/model.css create mode 100644 resources/web/model/model.js create mode 100644 resources/web/model/test.js diff --git a/resources/web/data/text.js b/resources/web/data/text.js index 90f8a03a7b..6ea1cd37ae 100644 --- a/resources/web/data/text.js +++ b/resources/web/data/text.js @@ -83,7 +83,21 @@ var LangText={ "t88": "Remove", "t89": "Open Containing Folder", "t90": "3D Model", - "t91": "Download 3D models" + "t91": "Download 3D models", + "t92": "Create by", + "t93": "Remixed by", + "t94": "Shared by", + "t95": "Model Information", + "t96": "Accessories", + "t97": "Profile Information", + "t98": "Model name", + "t100":"Model description", + "t101":"BOM", + "t102":"Assembly Guide", + "t103":"Other", + "t104":"Profile name", + "t105":"Profile Author", + "t106":"Profile description" }, "zh_CN": { "t1": "欢迎使用Bambu Studio", @@ -170,6 +184,20 @@ var LangText={ "t89": "打开所在的文件夹", "t90": "3D 模型", "t91": "下载3D模型", + "t92": "创作", + "t93": "修改", + "t94": "分享", + "t95": "模型信息", + "t96": "附件", + "t97": "配置信息", + "t98": "模型名称", + "t100":"模型介绍", + "t101":"物料清单", + "t102":"装备指导", + "t103":"其他", + "t104":"配置名称", + "t105":"配置作者", + "t106":"配置介绍", "wk1": "快速入门指南", "wk2": "本文介绍了Bambu Studio的最基本用法。它指导用户配置软件,创建项目,并逐步完成第一个打印任务。", "wk3": "基于项目的工作流", @@ -271,7 +299,21 @@ var LangText={ "t88": "削除", "t89": "フォルダを開く", "t90": "3Dモデル", - "t91": "モデルをダウンロード" + "t91": "モデルをダウンロード", + "t92": "創作", + "t93": "修正", + "t94": "共有", + "t95": "モデル情報", + "t96": "添付ファイル", + "t97": "構成情報", + "t98": "モデル名", + "t100":"モデルの紹介", + "t101":"BOM", + "t102":"装備指導", + "t103":"その他", + "t104":"構成名", + "t105":"構成著者", + "t106":"構成の概要", } }; diff --git a/resources/web/include/globalapi.js b/resources/web/include/globalapi.js new file mode 100644 index 0000000000..706d122665 --- /dev/null +++ b/resources/web/include/globalapi.js @@ -0,0 +1,407 @@ + +/*------------------ Date Function ------------------------*/ +function GetFullToday( ) +{ + var d=new Date(); + + var nday=d.getDate(); + var nmonth=d.getMonth()+1; + var nyear=d.getFullYear(); + + var strM=nmonth+''; + if( nmonth<10 ) + strM='0'+nmonth; + + var strD=nday+''; + if( nday<10 ) + strD='0'+nday; + + return nyear+'-'+strM+'-'+strD; +} + +function GetFullDate() +{ + var d=new Date(); + + var tDate={}; + + tDate.nyear=d.getFullYear(); + tDate.nmonth=d.getMonth()+1; + tDate.nday=d.getDate(); + + tDate.nhour=d.getHours(); + tDate.nminute=d.getMinutes(); + tDate.nsecond=d.getSeconds(); + + tDate.nweek=d.getDay(); + tDate.ndate=d.getDate(); + + var strM=tDate.nmonth+''; + if( tDate.nmonth<10 ) + strM='0'+tDate.nmonth; + + var strD=tDate.nday+''; + if( tDate.nday<10 ) + strD='0'+tDate.nday; + + var strH=tDate.nhour+''; + if( tDate.nhour<10 ) + strH='0'+tDate.nhour; + + var strMin=tDate.nminute+''; + if( tDate.nminute<10 ) + strMin='0'+tDate.nminute; + + var strS=tDate.nsecond+''; + if( tDate.nsecond<10 ) + strS='0'+tDate.nsecond; + + tDate.strdate=tDate.nyear+'-'+strM+'-'+strD; + tDate.strFulldate=tDate.strdate+' '+strH+':'+strMin+':'+strS; + + return tDate; +} + + +function Unixtimestamp2Date( nSecond ) +{ + var d=new Date(nSecond*1000); + + var tDate={}; + + tDate.nyear=d.getFullYear(); + tDate.nmonth=d.getMonth()+1; + tDate.nday=d.getDate(); + + tDate.nhour=d.getHours(); + tDate.nminute=d.getMinutes(); + tDate.nsecond=d.getSeconds(); + + tDate.nweek=d.getDay(); + tDate.ndate=d.getDate(); + + var strM=tDate.nmonth+''; + if( tDate.nmonth<10 ) + strM='0'+tDate.nmonth; + + var strD=tDate.nday+''; + if( tDate.nday<10 ) + strD='0'+tDate.nday; + + tDate.strdate=tDate.nyear+'-'+strM+'-'+strD; + + return tDate.strdate; +} + + +//------------Array Function------------- +Array.prototype.in_array = function (e) { + let sArray= ',' + this.join(this.S) + ','; + let skey=','+e+','; + + if(sArray.indexOf(skey)>=0) + return true; + else + return false; + } + + + +//------------String Function------------------ +/** +* Delete Left/Right Side Blank +*/ +String.prototype.trim=function() +{ + return this.replace(/(^\s*)|(\s*$)/g, ''); +} +/** +* Delete Left Side Blank +*/ +String.prototype.ltrim=function() +{ + return this.replace(/(^\s*)/g,''); +} +/** +* Delete Right Side Blank +*/ +String.prototype.rtrim=function() +{ + return this.replace(/(\s*$)/g,''); +} + + +//----------------Get Param------------- +function GetQueryString(name) +{ + var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); + var r = window.location.search.substr(1).match(reg); + if (r!=null) + { + return unescape(r[2]); + } + else + { + return null; + } +} + +function GetGetStr() +{ + let strGet=""; + + //获取当前URL + let url = document.location.href; + + //获取?的位置 + let index = url.indexOf("?") + if(index != -1) { + //截取出?后面的字符串 + strGet = url.substr(index + 1); + } + + return strGet; +} + +/*--------------File Function--------------*/ +function getFileName(path) +{ + var pos1 = path.lastIndexOf('/'); + var pos2 = path.lastIndexOf('\\'); + var pos = Math.max(pos1, pos2); + if (pos < 0) { + return null; + } + else + { + return path.substring(pos + 1); + } +} + +function getFileTail(path) +{ + var pos = path.lastIndexOf('.'); + if (pos < 0) { + return null; + } + else + { + return path.substring(pos + 1); + } +} + +/*--------------String Function-----------*/ +function html_encode(str) +{ + var s = ""; + if (str.length == 0) return ""; + s = str.replace(/&/g, "&"); + s = s.replace(//g, ">"); + s = s.replace(/ /g, " "); + s = s.replace(/\'/g, "'"); + s = s.replace(/\"/g, """); + s = s.replace(/\n/g, "
"); + + return s; +} + +function html_decode(str) +{ + var s = ""; + if (str.length == 0) return ""; + s = str.replace(/&/g, "&"); + s = s.replace(/</g, "<"); + s = s.replace(/>/g, ">"); + s = s.replace(/ /g, " "); + s = s.replace(/'/g, "\'"); + s = s.replace(/"/g, "\""); + s = s.replace(//g, "\n"); + + return s; +} + +/*--------------------JSON Function------------*/ + +/* +功能:检查一个字符串是不是标准的JSON格式 +参数: strJson 被检查的字符串 +返回值: 如果字符串是一个标准的JSON格式,则返回JSON对象 + 如果字符串不是标准JSON格式,则返回null +*/ +function IsJson( strJson ) +{ + var tJson=null; + try + { + tJson=JSON.parse(strJson); + } + catch(exception) + { + return null; + } + + return tJson; +} + +/*-----------------------Ajax Function--------------------*/ +/*对JQuery的Ajax函数的封装,只支持异步 +参数说明: + url 目标地址 + action post/get + data 字符串格式的发送内容 + asyn true---异步模式;false-----同步模式; +*/ +function HttpReq( url,action, data,callbackfunc) +{ + var strAction=action.toLowerCase(); + + if( strAction=="post") + { + $.post(url,data,callbackfunc); + } + else if( strAction=="get") + { + $.get(url,callbackfunc); + } +} + +/*---------------Cookie Function-------------------*/ +function setCookie(name, value, time='',path='') { + if(time && path){ + var strsec = time * 1000; + var exp = new Date(); + exp.setTime(exp.getTime() + strsec * 1); + document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString() + ";path="+path; + }else if(time){ + var strsec = time * 1000; + var exp = new Date(); + exp.setTime(exp.getTime() + strsec * 1); + document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString(); + }else if(path){ + document.cookie = name + "=" + escape(value) + ";path="+path; + }else{ + document.cookie = name + "=" + escape(value); + } +} + +function getCookie(c_name) +{ + if(document.cookie.length > 0) { + c_start = document.cookie.indexOf(c_name + "=");//获取字符串的起点 + if(c_start != -1) { + c_start = c_start + c_name.length + 1;//获取值的起点 + c_end = document.cookie.indexOf(";", c_start);//获取结尾处 + if(c_end == -1) c_end = document.cookie.length;//如果是最后一个,结尾就是cookie字符串的结尾 + return decodeURI(document.cookie.substring(c_start, c_end));//截取字符串返回 + } + } + + return ""; +} + +function checkCookie(c_name) { + username = getCookie(c_name); + console.log(username); + if (username != null && username != "") + { return true; } + else + { return false; } +} + +function clearCookie(name) { + setCookie(name, "", -1); +} + + +/*--------Studio WX Message-------*/ +function IsInSlicer() +{ + let bMatch=navigator.userAgent.match( RegExp('BBL-Slicer','i') ); + + return bMatch; +} + + + +function SendWXMessage( strMsg ) +{ + let bCheck=IsInSlicer(); + + if(bCheck!=null) + { + window.wx.postMessage(strMsg); + } +} + +function SendWXDebugInfo( strMsg ) +{ + var tSend={}; + tSend['sequence_id']=Math.round(new Date() / 1000); + tSend['command']="debug_info"; + tSend['msg']=strMsg; + + SendWXMessage( JSON.stringify(tSend) ); +} + + +/*------CSS Link Control----*/ +function RemoveCssLink( LinkPath ) +{ + let pNow=$("head link[href='"+LinkPath+"']"); + + let nTotal=pNow.length; + for( let n=0;n0) + RemoveCssLink(DarkCssPath); + } + else + { + if(nNow==0) + AddCssLink(DarkCssPath); + } +} + +SwitchDarkMode( "./css/dark.css" ); \ No newline at end of file diff --git a/resources/web/include/jquery-2.1.1.min.js b/resources/web/include/jquery-2.1.1.min.js new file mode 100644 index 0000000000..e3bf4d1b61 --- /dev/null +++ b/resources/web/include/jquery-2.1.1.min.js @@ -0,0 +1,4 @@ +/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b) +},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthx",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*\s*$/g,ib={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("--> + + + + +
+
+ Accessories (0) +
+ + +
+
BOM (0)
+
+ +
+
+ +
+
Assembly Guide (0)
+
+ +
+
+ +
+
Other (0)
+
+ +
+
+ +
+ +
+
+
+
Profile name:xxxxxxxxxxx
+
Profile Author:xxxxxx
+
+
+ +
+
+ +
+
+
+
+
+ +
+
Profile description
+
+ +
+
+
+ +
 
+ + + + + + diff --git a/resources/web/model/model.css b/resources/web/model/model.css new file mode 100644 index 0000000000..fba044b35d --- /dev/null +++ b/resources/web/model/model.css @@ -0,0 +1,320 @@ +* +{ + margin:0px; + padding: 0px; + border: 0px; + font-family: "system-ui", "Segoe UI", Roboto, Oxygen, Ubuntu, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-sans; +} + +html +{ + height: 100%; +} + +body +{ + min-width: 1280px; + height: 100%; + display:flex; + flex-direction: column; + justify-content: center; + align-items: center; + background-color: #F4F4F4; + font-size: 14px; + color: #595959; + line-height: 24px; +} + +#EmptyArea +{ + min-width: 1280px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + display: flex; +} + + +#WholeArea +{ + height: 100%; + position: relative; + overflow-y: hidden; + display: none; +} + +.TopBottomBar +{ + height: 24px; +} + +.FloorBottomBar +{ + height: 300px; +} + + +/*----Basic----*/ +.Text_Title +{ + font-size: 16px; + font-weight: 700; + color: black; +} + +.Text_Value +{ + color: black; +} + +.Text_Bold +{ + font-weight: 700; +} + +.Text_TitleBoard +{ + border-bottom: 1px solid #DDDDDD; + padding: 16px 0px; +} + +.Text_TitleArea div +{ + height: 32px; + line-height: 32px +} + +.Block_BKGA +{ + background-color: white; +} + +.Block_BKGB +{ + background-color: #F4F4F4; +} + +/*---Swiper---*/ +.swiper +{ + --swiper-theme-color: #ff6600;/* 设置Swiper风格 */ + --swiper-navigation-color: #00AE42;/* 单独设置按钮颜色 */ + --swiper-navigation-size: 30px;/* 设置按钮大小 */ +} + +/*---Left---*/ +#LeftProcessBlock +{ + position:fixed; + top: 24px; + width: 264px; + height: 120px; + flex-shrink: 0; +} + +.LeftProcessBar +{ + border-left: 2px solid #DDDDDD; + height: 40px; + display: flex; + align-items: center; + cursor: pointer; +} + +.LeftProcessBar img +{ + margin-left:18px; +} + +.LeftProcessBar span +{ + margin-left: 20px; +} + +.LeftTipIcon +{ + width: 20px; + height: 20px; +} + +.ProcessBarSelected +{ + border-left-color:#00AE42; +} + +.ProcessBarSelected span +{ + color:#00AE42; +} + +#Info_ProcessBar.ProcessBarSelected img +{ + content:url("img/info_g.svg"); +} + +#File_ProcessBar.ProcessBarSelected img +{ + content:url("img/file_g.svg"); +} + +#Profile_ProcessBar.ProcessBarSelected img +{ + content:url("img/profile_g.svg"); +} + + + +/*---Right---*/ + +/*--Basic Info--*/ +#Info_Inside_Board +{ + display: flex; + height: calc(100% - 24px); + overflow-y:auto; +} + +.InfoBlock +{ + background-color: white; + padding: 20px 40px; +} + +.InfoBlock:nth-child(n+2) +{ + margin-top: 8px; +} + +#ModelInfoBlock +{ + width: 1000px; +} + +#Model_Name_Area { + display: flex; + justify-content: space-between; + align-items: flex-end; +} + +#Model_Preview_Image +{ + height: 480px; +} + +.swiper +{ + margin: 24px 0px; +} + +.swiper-slide +{ + cursor:pointer; + display: flex; + align-content: center; + justify-content: center; +} + +.swiper-slide img +{ + max-width:100%; + max-height:100%; +} + +/*---Document---*/ +#Model_Accessories +{ +} + +.File_Board +{ + background-color: #F4F4F4; + padding: 12px 15px; +} + +.File_Board:nth-child(n+2) +{ + margin-top: 16px; +} + +.FileListBoard +{ + display: flex; + flex-wrap: wrap; +} + +.FileItem +{ + width:406px; + background-color: white; + display: flex; + align-items: center; + padding: 12px 15px; + margin: 4px 0px; +} + +.FileItem:nth-child(2n+1) +{ + margin-right: 16px; +} + + +.FileIcon img +{ + width: 36px; + height: 42px; +} + +.ImageIcon img +{ + width: 36px; + height: 42px; + object-fit: cover; +} + +.FileText +{ + width: 306px; + height: 40px; + line-height: 20px; + padding: 0px 16px; + display: flex; + align-items: center; +} + +.FileSize +{ + display:none; +} + +.FileName +{ + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.FileMenu +{ + height: 32px; + width: 32px; + display: flex; + cursor: pointer; + align-items: center; + justify-content: center; +} + +.FileMenu img +{ + width: 24px; +} + + +/*---Profile---*/ +#Profile_Preview_Image +{ + height: 480px; +} + + diff --git a/resources/web/model/model.js b/resources/web/model/model.js new file mode 100644 index 0000000000..fc6135d10b --- /dev/null +++ b/resources/web/model/model.js @@ -0,0 +1,586 @@ +var ModelSwiper=null; +var ProfileSwiper=null; + +function OnInit() +{ + console.log(" 页面加载完成 "); + //翻译页面 + TranslatePage(); + + //获取数据 + RequestProjectInfo(); + + //图片滚动器的初始化 +// mySwiper = new Swiper('.swiper', { +// loop:true, +// slidesPerView : 4, +// slidesPerGroup : 1, +// spaceBetween: 8, +// navigation: { +// slidesPerGroup :4, +// nextEl: '.swiper-button-next', +// prevEl: '.swiper-button-prev', +// }, +// autoplay: { +// delay: 3000, +// stopOnLastSlide: false, +// disableOnInteraction: true, +// disableOnInteraction: false +// } +// }); + + //锚点跟踪 + AddScrollEvent(); + + //测试代码 + //ShowProjectInfo(null); + //ShowProjectInfo(TestProjectData); + //ShowProjectInfo(null); + //ShowProjectInfo(TestProjectData); +// $('#ModelPreviewList').viewer({ +// title: false, +// fullsreen: false, +// zIndex: 999999, +// interval: 3000 +// }); +// $('#ModelPreviewList').viewer('update'); +} + +function AddScrollEvent() +{ + //跟踪页面位置 + $('#Info_Inside_Board').scroll(function(){ + //checkElementDistance("Info_Inside_Board", 'Model_Basic') + //checkElementDistance("Info_Inside_Board", 'Model_Accessories'); + //checkElementDistance("Info_Inside_Board", 'Model_Profile'); + let ParentItem=$('#Info_Inside_Board'); + + let BItem=$('#Model_Basic'); + let AItem=$('#Model_Accessories'); + let PItem=$('#Model_Profile'); + + let BTop=Math.abs(BItem.offset().top - ParentItem.offset().top); + let BBottom=Math.abs(BItem.offset().top + BItem.innerHeight() - ParentItem.offset().top); + let ATop=Math.abs(AItem.offset().top - ParentItem.offset().top); + let ABottom=Math.abs(AItem.offset().top + AItem.innerHeight() - ParentItem.offset().top); + let PTop=Math.abs(PItem.offset().top - ParentItem.offset().top); + let PBottom=Math.abs(PItem.offset().top + PItem.innerHeight() - ParentItem.offset().top); + + console.log('------positon-----'); + console.log("B: "+BTop+'-'+BBottom); + console.log("A: "+ATop+'-'+ABottom); + console.log("P: "+PTop+'-'+PBottom); + + let nMin=Math.min(BTop,BBottom,ATop,ABottom,PTop,PBottom ); + + if( nMin==BTop || nMin==BBottom) + { + OnMenuSelected('Model_Basic'); + } + else if( nMin==ATop || nMin==ABottom) + { + OnMenuSelected('Model_Accessories'); + } + else if( nMin==PTop || nMin==PBottom) + { + OnMenuSelected('Model_Profile'); + } + + }); +} + +function OnMenuClick( strID ) +{ + scrollLocation("Info_Inside_Board",strID); + + //OnMenuSelected(strID); +} + +function OnMenuSelected(strID) +{ + console.log("MenuSelected: "+strID); + + //UI + $('.LeftProcessBar').removeClass('ProcessBarSelected'); + switch(strID) + { + case 'Model_Basic': + $('#Info_ProcessBar').addClass('ProcessBarSelected'); + break; + case 'Model_Accessories': + $('#File_ProcessBar').addClass('ProcessBarSelected'); + break; + case 'Model_Profile': + $('#Profile_ProcessBar').addClass('ProcessBarSelected'); + break; + } +} + + +/*-------------自动滚动跟踪效果---------*/ +function scrollLocation(FatherID, ChildID) +{ + let FItem=$('#'+FatherID); + let CItem=$('#'+ChildID); + + let Tmp=CItem.offset().top - FItem.offset().top + FItem.scrollTop(); + + // father.scrollTop( + // scrollTo.offset().top - father.offset().top + father.scrollTop() + // ); + // Or you can animate the scrolling: + FItem.animate({scrollTop:Tmp}, 400); +}; + +/*----------处理C++的消息-------*/ +function Request3MFInfo() +{ + var tSend={}; + tSend['sequence_id']=Math.round(new Date() / 1000); + tSend['command']="request_3mf_info"; + + SendWXMessage( JSON.stringify(tSend) ); +} + +function HandleStudio(pVal) +{ + let strCmd=pVal['command']; + + if(strCmd=='show_3mf_info') + { + ShowProjectInfo( pVal['model'] ); + } + else if(strCmd=='clear_3mf_info') + { + ShowProjectInfo( null ); + } +} + + +function ShowProjectInfo( p3MF ) +{ + if(p3MF==null) + { + $('#EmptyArea').css('display','flex'); + $('#WholeArea').hide(); + return; + } + + //Check Data + let pModel=p3MF['model']; + let pFile=p3MF['file']; + let pProfile=p3MF['profile']; + + ShowModelInfo( pModel ); + ShowFileInfo( pFile ); + ShowProfilelInfo(pProfile); + + TranslatePage(); + $('#EmptyArea').hide(); + $('#WholeArea').show(); + +// mySwiper = new Swiper('.swiper', { +// loop:true, +// spaceBetween: 8, +// navigation: { +// slidesPerGroup :4, +// nextEl: '.swiper-button-next', +// prevEl: '.swiper-button-prev', +// }, +// autoplay: { +// delay: 3000, +// stopOnLastSlide: false, +// disableOnInteraction: true, +// disableOnInteraction: false +// } +// }); + + AddScrollEvent(); +} + +function ShowModelInfo( pModel ) +{ + //==========Model Info========== + let sModelName=decodeURIComponent(pModel.name); + let sModelAuthor=decodeURIComponent(pModel.author); + let UploadType=pModel.upload_type.toUpperCase(); + let sLicence=pModel.license.toUpperCase(); + let sModelDesc=decodeURIComponent(pModel.description); + + SendWXDebugInfo("Model Name: "+sModelName); + + $('#ModelName').html(sModelName); + $('#ModelAuthorName').html(sModelAuthor); + + switch(UploadType) + { + case 'remix': + $('#ModelAthorType').attr('tid','t93'); + break; + case 'shared': + $('#ModelAthorType').attr('tid','t94'); + break; + case 'origin': + case 'profile': + default: + $('#ModelAthorType').attr('tid','t92'); + break; + } + + switch(sLicence) + { + case 'CC0': + $('#ModelLicenceImg img').attr('src','img/cc-zero.png'); + $('#ModelLicenceImg').show(); + break; + case 'BY': + $('#ModelLicenceImg img').attr('src','img/by.png'); + $('#ModelLicenceImg').show(); + break; + case 'BY-SA': + $('#ModelLicenceImg img').attr('src','img/by-sa.png'); + $('#ModelLicenceImg').show(); + break; + case 'BY-ND': + $('#ModelLicenceImg img').attr('src','img/by-nd.png'); + $('#ModelLicenceImg').show(); + break; + case 'BY-NC': + $('#ModelLicenceImg img').attr('src','img/by-nc.png'); + $('#ModelLicenceImg').show(); + break; + case 'BY-NC-SA': + $('#ModelLicenceImg img').attr('src','img/by-nc-sa.png'); + $('#ModelLicenceImg').show(); + break; + case 'BY-NC-ND': + $('#ModelLicenceImg img').attr('src','img/by-nc-nd.png'); + $('#ModelLicenceImg').show(); + break; + default: + $('#ModelLicenceImg').hide(); + break; + } + + $('#Model_Desc').html( html_decode(sModelDesc) ); + + let ModelPreviewList=pModel.preview_img; + let TotalPreview=ModelPreviewList.length; + + if( ModelSwiper!=null ) + { + ModelSwiper.destroy(true,true); + ModelSwiper=null; + } + + if(TotalPreview>0) + { + let htmlPreview=''; + for(let pn=0;pn'; + } + + $('#ModelPreviewList').html(htmlPreview); + $('#ModelPreviewList').viewer({ + title: false, + fullsreen: false, + zIndex: 999999, + interval: 3000 + }); + $('#ModelPreviewList').viewer('update'); + + //Initial Swiper + if(TotalPreview==1) + { + ModelSwiper = new Swiper('#Model_Preview_Image.swiper', { + spaceBetween: 8 + }); + + $('#Model_Preview_Image .swiper-button-prev').hide(); + $('#Model_Preview_Image .swiper-button-next').hide(); + $('#Model_Preview_Image .swiper-pagination').hide(); + } + else + { + $('#Model_Preview_Image .swiper-button-prev').show(); + $('#Model_Preview_Image .swiper-button-next').show(); + $('#Model_Preview_Image .swiper-pagination').show(); + + ModelSwiper = new Swiper('#Model_Preview_Image.swiper', { + loop:true, + spaceBetween: 8, + navigation: { + nextEl: '.swiper-button-next', + prevEl: '.swiper-button-prev', + }, + autoplay: { + delay: 3000, + stopOnLastSlide: false, + disableOnInteraction: true, + disableOnInteraction: false + }, + pagination: { + el: '.swiper-pagination', + } + }); + } + + + } + else + { + $('#ModelPreviewList').hide(); + } +} + +function ShowFileInfo( pFile ) +{ + let pBOM=pFile['BOM']; + let pAssembly=pFile['Assembly']; + let pOther=pFile['Other']; + + let BTotal=pBOM.length; + let ATotal=pAssembly.length; + let OTotal=pOther.length; + let fTotal=BTotal+ATotal+OTotal; + + //Total Number + $('#FileTotalNum').html(fTotal); + $('#BOMTotalNum').html(BTotal); + $('#AssemblyTotalNum').html(ATotal); + $('#OtherFileTotalNum').html(OTotal); + + //BOM + if(BTotal==0) + { + $('#FILE_BOM_List').hide(); + } + else + { + ConstructFileHtml('FILE_BOM_List',pBOM); + } + + //Assembly + if(ATotal==0) + { + $('#FILE_ASSEMBLY_List').hide(); + } + else + { + ConstructFileHtml('FILE_ASSEMBLY_List',pAssembly); + } + + //Other + if(OTotal==0) + { + $('#FILE_OTHER_List').hide(); + } + else + { + ConstructFileHtml('FILE_OTHER_List',pOther); + } + + //zIndex + $('.ImageIcon').viewer({ + title: false, + fullsreen: false, + zIndex: 999999, + interval: 3000 + }); + $('.ImageIcon').viewer('update'); +} + + +var ExcelTail=['xlsx','xlsm','xlsb','csv','xls','xltx','xltm','xlt','xlam','xla']; +var PdfTail=['pdf','fdf','xfdf','xdp','ppdf','ofd']; +var ImgTail=['jpg','jpeg','bmp','gif','svg','png','bmp']; + +var ImgID=0; + +function ConstructFileHtml( ID, pItem ) +{ + let fTotal=pItem.length; + + let strHtml=''; + for( let f=0;f=0 ) + { + strClass='ImageIcon'; + + ImgPath=tPath; + } + else if( $.inArray( sTail, ExcelTail )>=0 ) + { + ImgPath='img/excel.png'; + } + else if( $.inArray( sTail, PdfTail )>=0 ) + { + ImgPath='img/pdf.png'; + } + else + { + ImgPath='img/default.png'; + } + + //Add html + if( strClass!='ImageIcon' ) + { + strHtml+='
'+ + '
'+ + '
'+ + '
'+tName+'
'+ + '
'+ + '
'+ + '
'; + } + else + { + ImgID++; + let TmpImgID="AF"+ImgID; + + strHtml+='
'+ + '
'+ + '
'+ + '
'+tName+'
'+ + '
'+ + '
'+ + '
'; + } + } + + $('#'+ID+' .FileListBoard').html(strHtml); +} + + +function ShowProfilelInfo( pProfile ) +{ + //==========Profile Info========== + let sProfileName=decodeURIComponent(pProfile.name); + let sProfileAuthor=decodeURIComponent(pProfile.author); + let sProfileDesc=decodeURIComponent(pProfile.description); + + $('#ProfileName').html(sProfileName); + $('#ProfileAuthor').html(sProfileAuthor); + + $('#Profile_Desc').html( html_decode(sProfileDesc) ); + + let ProfilePreviewList=pProfile.preview_img; + let TotalPreview=ProfilePreviewList.length; + + if( ProfileSwiper!=null ) + { + ProfileSwiper.destroy(true,true); + ProfileSwiper=null; + } + + if(TotalPreview>0) + { + let htmlPreview=''; + for(let pn=0;pn'; + } + + $('#ProfilePreviewList').html(htmlPreview); + $('#ProfilePreviewList').viewer({ + title: false, + fullsreen: false, + zIndex: 999999, + interval: 3000 + }); + $('#ProfilePreviewList').viewer("update"); + + //Init Profile Swiper + if(TotalPreview==1) + { + ProfileSwiper = new Swiper('#Profile_Preview_Image.swiper', { + spaceBetween: 8 + }); + + $('#Profile_Preview_Image .swiper-button-prev').hide(); + $('#Profile_Preview_Image .swiper-button-next').hide(); + $('#Profile_Preview_Image .swiper-pagination').hide(); + } + else + { + $('#Profile_Preview_Image .swiper-button-prev').show(); + $('#Profile_Preview_Image .swiper-button-next').show(); + $('#Profile_Preview_Image .swiper-pagination').show(); + + ProfileSwiper = new Swiper('#Profile_Preview_Image.swiper', { + loop:true, + spaceBetween: 8, + navigation: { + nextEl: '.swiper-button-next', + prevEl: '.swiper-button-prev', + }, + autoplay: { + delay: 3000, + stopOnLastSlide: false, + disableOnInteraction: true, + disableOnInteraction: false + }, + pagination: { + el: '.swiper-pagination', + } + }); + } + } + else + { + $('#ProfilePreviewList').hide(); + } +} + + +//Push Command to C++ +function RequestProjectInfo() +{ + var tSend={}; + tSend['sequence_id']=Math.round(new Date() / 1000); + tSend['command']="request_3mf_info"; + + SendWXMessage( JSON.stringify(tSend) ); +} + +function OnClickOpenFile( strFullPath ) +{ + var tSend={}; + tSend['sequence_id']=Math.round(new Date() / 1000); + tSend['command']="open_3mf_accessory"; + tSend['accessory_path']=strFullPath; + + SendWXMessage( JSON.stringify(tSend) ); + SendWXDebugInfo('----open accessory: '+strFullPath); +} + +function OnClickOpenImage( F_ID ) +{ + $("img#"+F_ID).click(); +} + + + + + + + + diff --git a/resources/web/model/test.js b/resources/web/model/test.js new file mode 100644 index 0000000000..3566871401 --- /dev/null +++ b/resources/web/model/test.js @@ -0,0 +1,124 @@ +var TestProjectData={ + "model": { + "name": "xxxxxxxxxxxxxxxxxxxxxxxxx easy print", + "author": "Zorro Zhang", + "upload_type": "share", + "license": "CC0", + "cover_img": "p1.png", + "preview_img": [ + { + "filepath": "http://bambuhtml.liuyishou.vip/img/p1.png", + "filename": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pdf", + "size": "232MB" + }, + { + "filepath": "http://bambuhtml.liuyishou.vip/img/p2.png", + "filename": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pdf", + "size": "232MB" + }, + { + "filepath": "http://bambuhtml.liuyishou.vip/img/m1.jpg", + "filename": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pdf", + "size": "232MB" + }, + { + "filepath": "http://bambuhtml.liuyishou.vip/img/m2.jpg", + "filename": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pdf", + "size": "232MB" + }, + { + "filepath": "http://bambuhtml.liuyishou.vip/img/m3.jpg", + "filename": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pdf", + "size": "232MB" + }, + { + "filepath": "http://bambuhtml.liuyishou.vip/img/m4.jpg", + "filename": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pdf", + "size": "232MB" + }, + { + "filepath": "http://bambuhtml.liuyishou.vip/img/m5.jpg", + "filename": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pdf", + "size": "232MB" + } + ], + "description": "This is a Description" + }, + "file": { + "BOM": [ + { + "filepath": "D:/AAA/bamboo_model/Tue_Feb_14/15_07_23#42936#55/Auxiliaries/Assembly Guide/XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pdf", + "filename": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pdf", + "size": "232MB" + }, + { + "filepath": "D:/AAA/bamboo_model/Tue_Feb_14/15_07_23#42936#55/Auxiliaries/Assembly Guide/Assembly Guide Pretty.xlsx", + "filename": "Assembly Guide Pretty.xlsx", + "size": "232MB" + }, + { + "filepath": "file://d:/preview.png", + "filename": "preview.png", + "size": "232MB" + } + ], + "Assembly": [ + { + "filepath": "D:/AAA/bamboo_model/Tue_Feb_14/15_07_23#42936#55/Auxiliaries/Assembly Guide/XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pdf", + "filename": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pdf", + "size": "232MB" + }, + { + "filepath": "D:/AAA/bamboo_model/Tue_Feb_14/15_07_23#42936#55/Auxiliaries/Assembly Guide/Assembly Guide Pretty.xlsx", + "filename": "Assembly Guide Pretty.xlsx", + "size": "232MB" + }, + { + "filepath": "D:/AAA/bamboo_model/Tue_Feb_14/15_07_23#42936#55/Auxiliaries/Assembly Guide/Assembly Guide Pretty.xlsx", + "filename": "Assembly Guide Pretty.xlsx", + "size": "232MB" + }, + { + "filepath": "file://d:/p2.png", + "filename": "p2.png", + "size": "232MB" + } + ], + "Other": [ + { + "filepath": "D:/AAA/bamboo_model/Tue_Feb_14/15_07_23#42936#55/Auxiliaries/Assembly Guide/XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pdf", + "filename": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pdf", + "size": "232MB" + }, + { + "filepath": "D:/AAA/bamboo_model/Tue_Feb_14/15_07_23#42936#55/Auxiliaries/Assembly Guide/Assembly Guide Pretty.xlsx", + "filename": "Assembly Guide Pretty.xlsx", + "size": "232MB" + }, + { + "filepath": "D:/AAA/bamboo_model/Tue_Feb_14/15_07_23#42936#55/Auxiliaries/Assembly Guide/BBB Guide Pretty.pdf", + "filename": "BBB Guide Pretty.pdf", + "size": "232MB" + }, + { + "filepath": "file://d:/p3.png", + "filename": "p3.png", + "size": "232MB" + } + ] + }, + "profile": { + "name": "xxxxxxxxxxxxxxxxxxxxxxxxx easy print", + "author": "Hally Potter", + "upload_type": "origin", + "cover_img": "p1.png", + "preview_img": [ + { + "filepath": "http://bambuhtml.liuyishou.vip/img/m1.jpg", + "filename": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pdf", + "size": "232MB" + } + ], + "description": "This is a profile Description" + } +}; \ No newline at end of file From 61b271f37929a7273ca3dae3a84ee424f8aec28e Mon Sep 17 00:00:00 2001 From: "salt.wei" Date: Mon, 13 Mar 2023 17:33:02 +0800 Subject: [PATCH 073/339] ENH: fix for STUDIO-881 Thanks prusa Signed-off-by: salt.wei Change-Id: I2e1c1088d29dd5401016ca41d3ed6dec87e0acd1 --- src/libslic3r/CMakeLists.txt | 2 - src/libslic3r/ClipperUtils.cpp | 10 + src/libslic3r/ClipperUtils.hpp | 14 +- src/libslic3r/EdgeGrid.cpp | 5 - src/libslic3r/EdgeGrid.hpp | 5 +- src/libslic3r/ExPolygon.cpp | 137 ++++++---- src/libslic3r/ExPolygon.hpp | 208 ++++++++++---- src/libslic3r/ExtrusionEntity.cpp | 10 +- src/libslic3r/ExtrusionEntity.hpp | 11 +- src/libslic3r/Fill/FillRectilinear.cpp | 4 +- src/libslic3r/GCode.cpp | 6 +- .../GCode/AvoidCrossingPerimeters.cpp | 4 +- src/libslic3r/Geometry/ConvexHull.cpp | 34 ++- src/libslic3r/Geometry/ConvexHull.hpp | 8 + src/libslic3r/Geometry/MedialAxis.cpp | 255 ++++++++---------- src/libslic3r/Geometry/MedialAxis.hpp | 39 ++- src/libslic3r/Layer.hpp | 6 +- src/libslic3r/Line.cpp | 32 +-- src/libslic3r/Line.hpp | 2 +- src/libslic3r/PerimeterGenerator.cpp | 4 +- src/libslic3r/Polygon.cpp | 250 ++++++++++++----- src/libslic3r/Polygon.hpp | 91 ++++--- src/libslic3r/Polyline.cpp | 1 - src/libslic3r/Print.cpp | 4 +- src/libslic3r/SLA/Pad.cpp | 2 +- src/libslic3r/SLA/SupportPointGenerator.cpp | 4 +- src/libslic3r/SVG.cpp | 8 +- src/libslic3r/SupportMaterial.cpp | 2 +- src/libslic3r/SurfaceCollection.cpp | 9 +- src/libslic3r/TreeSupport.cpp | 5 +- src/slic3r/GUI/PartPlate.cpp | 2 +- 31 files changed, 703 insertions(+), 471 deletions(-) diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index 419f1c2455..0e5fd059ac 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -53,8 +53,6 @@ set(lisbslic3r_sources enum_bitmask.hpp ExPolygon.cpp ExPolygon.hpp - ExPolygonCollection.cpp - ExPolygonCollection.hpp Extruder.cpp Extruder.hpp ExtrusionEntity.cpp diff --git a/src/libslic3r/ClipperUtils.cpp b/src/libslic3r/ClipperUtils.cpp index 2619247c3d..d9aa9e7c9e 100644 --- a/src/libslic3r/ClipperUtils.cpp +++ b/src/libslic3r/ClipperUtils.cpp @@ -660,6 +660,8 @@ Slic3r::Polygons diff(const Slic3r::Surfaces &subject, const Slic3r::Polygons &c { return _clipper(ClipperLib::ctDifference, ClipperUtils::SurfacesProvider(subject), ClipperUtils::PolygonsProvider(clip), do_safety_offset); } Slic3r::Polygons intersection(const Slic3r::Polygon &subject, const Slic3r::Polygon &clip, ApplySafetyOffset do_safety_offset) { return _clipper(ClipperLib::ctIntersection, ClipperUtils::SinglePathProvider(subject.points), ClipperUtils::SinglePathProvider(clip.points), do_safety_offset); } +Slic3r::Polygons intersection(const Slic3r::Polygons &subject, const Slic3r::ExPolygon &clip, ApplySafetyOffset do_safety_offset) + { return _clipper(ClipperLib::ctIntersection, ClipperUtils::PolygonsProvider(subject), ClipperUtils::ExPolygonProvider(clip), do_safety_offset); } Slic3r::Polygons intersection(const Slic3r::Polygons &subject, const Slic3r::Polygons &clip, ApplySafetyOffset do_safety_offset) { return _clipper(ClipperLib::ctIntersection, ClipperUtils::PolygonsProvider(subject), ClipperUtils::PolygonsProvider(clip), do_safety_offset); } Slic3r::Polygons intersection(const Slic3r::ExPolygon &subject, const Slic3r::ExPolygon &clip, ApplySafetyOffset do_safety_offset) @@ -746,10 +748,16 @@ Slic3r::ExPolygons intersection_ex(const Slic3r::Polygons &subject, const Slic3r { return _clipper_ex(ClipperLib::ctIntersection, ClipperUtils::PolygonsProvider(subject), ClipperUtils::PolygonsProvider(clip), do_safety_offset); } Slic3r::ExPolygons intersection_ex(const Slic3r::ExPolygon &subject, const Slic3r::Polygons &clip, ApplySafetyOffset do_safety_offset) { return _clipper_ex(ClipperLib::ctIntersection, ClipperUtils::ExPolygonProvider(subject), ClipperUtils::PolygonsProvider(clip), do_safety_offset); } +Slic3r::ExPolygons intersection_ex(const Slic3r::ExPolygon& subject, const Slic3r::ExPolygon& clip, ApplySafetyOffset do_safety_offset) + { return _clipper_ex(ClipperLib::ctIntersection, ClipperUtils::ExPolygonProvider(subject), ClipperUtils::ExPolygonProvider(clip), do_safety_offset); } Slic3r::ExPolygons intersection_ex(const Slic3r::Polygons &subject, const Slic3r::ExPolygons &clip, ApplySafetyOffset do_safety_offset) { return _clipper_ex(ClipperLib::ctIntersection, ClipperUtils::PolygonsProvider(subject), ClipperUtils::ExPolygonsProvider(clip), do_safety_offset); } Slic3r::ExPolygons intersection_ex(const Slic3r::ExPolygons &subject, const Slic3r::Polygons &clip, ApplySafetyOffset do_safety_offset) { return _clipper_ex(ClipperLib::ctIntersection, ClipperUtils::ExPolygonsProvider(subject), ClipperUtils::PolygonsProvider(clip), do_safety_offset); } +Slic3r::ExPolygons intersection_ex(const Slic3r::ExPolygons& subject, const Slic3r::ExPolygon& clip, ApplySafetyOffset do_safety_offset) + { return _clipper_ex(ClipperLib::ctIntersection, ClipperUtils::ExPolygonsProvider(subject), ClipperUtils::ExPolygonProvider(clip), do_safety_offset);} +Slic3r::ExPolygons intersection_ex(const Slic3r::ExPolygon& subject, const Slic3r::ExPolygons& clip, ApplySafetyOffset do_safety_offset) + { return _clipper_ex(ClipperLib::ctIntersection, ClipperUtils::ExPolygonProvider(subject), ClipperUtils::ExPolygonsProvider(clip), do_safety_offset);} Slic3r::ExPolygons intersection_ex(const Slic3r::ExPolygons &subject, const Slic3r::ExPolygons &clip, ApplySafetyOffset do_safety_offset) { return _clipper_ex(ClipperLib::ctIntersection, ClipperUtils::ExPolygonsProvider(subject), ClipperUtils::ExPolygonsProvider(clip), do_safety_offset); } Slic3r::ExPolygons intersection_ex(const Slic3r::Surfaces &subject, const Slic3r::Polygons &clip, ApplySafetyOffset do_safety_offset) @@ -859,6 +867,8 @@ Slic3r::Polylines diff_pl(const Slic3r::Polygons &subject, const Slic3r::Polygon { return _clipper_pl_closed(ClipperLib::ctDifference, ClipperUtils::PolygonsProvider(subject), ClipperUtils::PolygonsProvider(clip)); } Slic3r::Polylines intersection_pl(const Slic3r::Polylines &subject, const Slic3r::Polygon &clip) { return _clipper_pl_open(ClipperLib::ctIntersection, ClipperUtils::PolylinesProvider(subject), ClipperUtils::SinglePathProvider(clip.points)); } +Slic3r::Polylines intersection_pl(const Slic3r::Polylines &subject, const Slic3r::ExPolygon &clip) + { return _clipper_pl_open(ClipperLib::ctIntersection, ClipperUtils::PolylinesProvider(subject), ClipperUtils::ExPolygonProvider(clip)); } Slic3r::Polylines intersection_pl(const Slic3r::Polyline &subject, const Slic3r::Polygons &clip) { return _clipper_pl_open(ClipperLib::ctIntersection, ClipperUtils::SinglePathProvider(subject.points), ClipperUtils::PolygonsProvider(clip)); } Slic3r::Polylines intersection_pl(const Slic3r::Polylines &subject, const Slic3r::Polygons &clip) diff --git a/src/libslic3r/ClipperUtils.hpp b/src/libslic3r/ClipperUtils.hpp index 18a8ebb115..8fd9782f83 100644 --- a/src/libslic3r/ClipperUtils.hpp +++ b/src/libslic3r/ClipperUtils.hpp @@ -472,6 +472,7 @@ inline Slic3r::Lines diff_ln(const Slic3r::Lines &subject, const Slic3r::Polygon // Safety offset is applied to the clipping polygons only. Slic3r::Polygons intersection(const Slic3r::Polygon &subject, const Slic3r::Polygon &clip, ApplySafetyOffset do_safety_offset = ApplySafetyOffset::No); +Slic3r::Polygons intersection(const Slic3r::Polygons &subject, const Slic3r::ExPolygon &clip, ApplySafetyOffset do_safety_offset = ApplySafetyOffset::No); Slic3r::Polygons intersection(const Slic3r::Polygons &subject, const Slic3r::Polygons &clip, ApplySafetyOffset do_safety_offset = ApplySafetyOffset::No); Slic3r::Polygons intersection(const Slic3r::ExPolygon &subject, const Slic3r::ExPolygon &clip, ApplySafetyOffset do_safety_offset = ApplySafetyOffset::No); Slic3r::Polygons intersection(const Slic3r::ExPolygons &subject, const Slic3r::Polygons &clip, ApplySafetyOffset do_safety_offset = ApplySafetyOffset::No); @@ -482,28 +483,23 @@ Slic3r::Polygons intersection(const Slic3r::Surfaces &subject, const Slic3r::E Slic3r::Polygons intersection(const Slic3r::Polygons& subject, const Slic3r::Polygon& clip, ApplySafetyOffset do_safety_offset = ApplySafetyOffset::No); Slic3r::ExPolygons intersection_ex(const Slic3r::Polygons &subject, const Slic3r::Polygons &clip, ApplySafetyOffset do_safety_offset = ApplySafetyOffset::No); Slic3r::ExPolygons intersection_ex(const Slic3r::ExPolygon &subject, const Slic3r::Polygons &clip, ApplySafetyOffset do_safety_offset = ApplySafetyOffset::No); +Slic3r::ExPolygons intersection_ex(const Slic3r::ExPolygon& subject, const Slic3r::ExPolygon& clip, ApplySafetyOffset do_safety_offset = ApplySafetyOffset::No); Slic3r::ExPolygons intersection_ex(const Slic3r::Polygons &subject, const Slic3r::ExPolygons &clip, ApplySafetyOffset do_safety_offset = ApplySafetyOffset::No); Slic3r::ExPolygons intersection_ex(const Slic3r::ExPolygons &subject, const Slic3r::Polygons &clip, ApplySafetyOffset do_safety_offset = ApplySafetyOffset::No); +Slic3r::ExPolygons intersection_ex(const Slic3r::ExPolygons& subject, const Slic3r::ExPolygon& clip, ApplySafetyOffset do_safety_offset = ApplySafetyOffset::No); +Slic3r::ExPolygons intersection_ex(const Slic3r::ExPolygon& subject, const Slic3r::ExPolygons& clip, ApplySafetyOffset do_safety_offset = ApplySafetyOffset::No); Slic3r::ExPolygons intersection_ex(const Slic3r::ExPolygons &subject, const Slic3r::ExPolygons &clip, ApplySafetyOffset do_safety_offset = ApplySafetyOffset::No); Slic3r::ExPolygons intersection_ex(const Slic3r::Surfaces &subject, const Slic3r::Polygons &clip, ApplySafetyOffset do_safety_offset = ApplySafetyOffset::No); Slic3r::ExPolygons intersection_ex(const Slic3r::Surfaces &subject, const Slic3r::ExPolygons &clip, ApplySafetyOffset do_safety_offset = ApplySafetyOffset::No); Slic3r::ExPolygons intersection_ex(const Slic3r::Surfaces &subject, const Slic3r::Surfaces &clip, ApplySafetyOffset do_safety_offset = ApplySafetyOffset::No); Slic3r::ExPolygons intersection_ex(const Slic3r::SurfacesPtr &subject, const Slic3r::ExPolygons &clip, ApplySafetyOffset do_safety_offset = ApplySafetyOffset::No); Slic3r::Polylines intersection_pl(const Slic3r::Polylines &subject, const Slic3r::Polygon &clip); +Slic3r::Polylines intersection_pl(const Slic3r::Polylines& subject, const Slic3r::ExPolygon& clip); Slic3r::Polylines intersection_pl(const Slic3r::Polyline &subject, const Slic3r::Polygons &clip); Slic3r::Polylines intersection_pl(const Slic3r::Polylines &subject, const Slic3r::Polygons &clip); Slic3r::Polylines intersection_pl(const Slic3r::Polylines &subject, const Slic3r::ExPolygons &clip); Slic3r::Polylines intersection_pl(const Slic3r::Polygons &subject, const Slic3r::Polygons &clip); -// BBS -inline Slic3r::ExPolygons intersection_ex(const Slic3r::ExPolygon& subject, const Slic3r::ExPolygons& clip, ApplySafetyOffset do_safety_offset = ApplySafetyOffset::No) -{ - Slic3r::ExPolygons subject_temp; - subject_temp.push_back(subject); - - return intersection_ex(subject_temp, clip, do_safety_offset); -} - inline Slic3r::Lines intersection_ln(const Slic3r::Lines &subject, const Slic3r::Polygons &clip) { return _clipper_ln(ClipperLib::ctIntersection, subject, clip); diff --git a/src/libslic3r/EdgeGrid.cpp b/src/libslic3r/EdgeGrid.cpp index 1385a51d8d..4985b788e4 100644 --- a/src/libslic3r/EdgeGrid.cpp +++ b/src/libslic3r/EdgeGrid.cpp @@ -136,11 +136,6 @@ void EdgeGrid::Grid::create(const ExPolygons &expolygons, coord_t resolution) create_from_m_contours(resolution); } -void EdgeGrid::Grid::create(const ExPolygonCollection &expolygons, coord_t resolution) -{ - create(expolygons.expolygons, resolution); -} - // m_contours has been initialized. Now fill in the edge grid. void EdgeGrid::Grid::create_from_m_contours(coord_t resolution) { diff --git a/src/libslic3r/EdgeGrid.hpp b/src/libslic3r/EdgeGrid.hpp index 3c99291498..4be2bdd07c 100644 --- a/src/libslic3r/EdgeGrid.hpp +++ b/src/libslic3r/EdgeGrid.hpp @@ -7,7 +7,6 @@ #include "Point.hpp" #include "BoundingBox.hpp" #include "ExPolygon.hpp" -#include "ExPolygonCollection.hpp" namespace Slic3r { namespace EdgeGrid { @@ -112,7 +111,6 @@ public: void create(const std::vector &polygons, coord_t resolution) { this->create(polygons, resolution, false); } void create(const ExPolygon &expoly, coord_t resolution); void create(const ExPolygons &expolygons, coord_t resolution); - void create(const ExPolygonCollection &expolygons, coord_t resolution); const std::vector& contours() const { return m_contours; } @@ -123,7 +121,6 @@ public: bool intersect(const Polygons &polygons) { for (size_t i = 0; i < polygons.size(); ++ i) if (intersect(polygons[i])) return true; return false; } bool intersect(const ExPolygon &expoly) { if (intersect(expoly.contour)) return true; for (size_t i = 0; i < expoly.holes.size(); ++ i) if (intersect(expoly.holes[i])) return true; return false; } bool intersect(const ExPolygons &expolygons) { for (size_t i = 0; i < expolygons.size(); ++ i) if (intersect(expolygons[i])) return true; return false; } - bool intersect(const ExPolygonCollection &expolygons) { return intersect(expolygons.expolygons); } // Test, whether a point is inside a contour. bool inside(const Point &pt); @@ -391,7 +388,7 @@ protected: // Referencing the source contours. // This format allows one to work with any Slic3r fixed point contour format - // (Polygon, ExPolygon, ExPolygonCollection etc). + // (Polygon, ExPolygon, ExPolygons etc). std::vector m_contours; // Referencing a contour and a line segment of m_contours. diff --git a/src/libslic3r/ExPolygon.cpp b/src/libslic3r/ExPolygon.cpp index 98a9362c48..3b7cc91e58 100644 --- a/src/libslic3r/ExPolygon.cpp +++ b/src/libslic3r/ExPolygon.cpp @@ -12,27 +12,6 @@ namespace Slic3r { -ExPolygon::operator Points() const -{ - Points points; - Polygons pp = *this; - for (Polygons::const_iterator poly = pp.begin(); poly != pp.end(); ++poly) { - for (Points::const_iterator point = poly->points.begin(); point != poly->points.end(); ++point) - points.push_back(*point); - } - return points; -} - -ExPolygon::operator Polygons() const -{ - return to_polygons(*this); -} - -ExPolygon::operator Polylines() const -{ - return to_polylines(*this); -} - void ExPolygon::scale(double factor) { contour.scale(factor); @@ -40,6 +19,13 @@ void ExPolygon::scale(double factor) hole.scale(factor); } +void ExPolygon::scale(double factor_x, double factor_y) +{ + contour.scale(factor_x, factor_y); + for (Polygon &hole : holes) + hole.scale(factor_x, factor_y); +} + void ExPolygon::translate(const Point &p) { contour.translate(p); @@ -118,34 +104,53 @@ bool ExPolygon::contains(const Polylines &polylines) const return pl_out.empty(); } -bool ExPolygon::contains(const Point &point) const +bool ExPolygon::contains(const Point &point, bool border_result /* = true */) const { - if (! this->contour.contains(point)) + if (! Slic3r::contains(contour, point, border_result)) + // Outside the outer contour, not on the contour boundary. return false; for (const Polygon &hole : this->holes) - if (hole.contains(point)) + if (Slic3r::contains(hole, point, ! border_result)) + // Inside a hole, not on the hole boundary. return false; return true; } -// inclusive version of contains() that also checks whether point is on boundaries -bool ExPolygon::contains_b(const Point &point) const +bool ExPolygon::on_boundary(const Point &point, double eps) const { - return this->contains(point) || this->has_boundary_point(point); + if (this->contour.on_boundary(point, eps)) + return true; + for (const Polygon &hole : this->holes) + if (hole.on_boundary(point, eps)) + return true; + return false; } -bool -ExPolygon::has_boundary_point(const Point &point) const +// Projection of a point onto the polygon. +Point ExPolygon::point_projection(const Point &point) const { - if (this->contour.has_boundary_point(point)) return true; - for (Polygons::const_iterator h = this->holes.begin(); h != this->holes.end(); ++h) { - if (h->has_boundary_point(point)) return true; + if (this->holes.empty()) { + return this->contour.point_projection(point); + } else { + double dist_min2 = std::numeric_limits::max(); + Point closest_pt_min; + for (size_t i = 0; i < this->num_contours(); ++ i) { + Point closest_pt = this->contour_or_hole(i).point_projection(point); + double d2 = (closest_pt - point).cast().squaredNorm(); + if (d2 < dist_min2) { + dist_min2 = d2; + closest_pt_min = closest_pt; + } + } + return closest_pt_min; } - return false; } bool ExPolygon::overlaps(const ExPolygon &other) const { + if (this->empty() || other.empty()) + return false; + #if 0 BoundingBox bbox = get_extents(other); bbox.merge(get_extents(*this)); @@ -155,61 +160,62 @@ bool ExPolygon::overlaps(const ExPolygon &other) const svg.draw_outline(*this); svg.draw_outline(other, "blue"); #endif - Polylines pl_out = intersection_pl((Polylines)other, *this); + + Polylines pl_out = intersection_pl(to_polylines(other), *this); + #if 0 svg.draw(pl_out, "red"); #endif - if (! pl_out.empty()) - return true; - //FIXME ExPolygon::overlaps() shall be commutative, it is not! - return ! other.contour.points.empty() && this->contains_b(other.contour.points.front()); + + // See unit test SCENARIO("Clipper diff with polyline", "[Clipper]") + // for in which case the intersection_pl produces any intersection. + return ! pl_out.empty() || + // If *this is completely inside other, then pl_out is empty, but the expolygons overlap. Test for that situation. + other.contains(this->contour.points.front()); } -void ExPolygon::simplify_p(double tolerance, Polygons* polygons, SimplifyMethod method) const +void ExPolygon::simplify_p(double tolerance, Polygons* polygons) const { - Polygons pp = this->simplify_p(tolerance, method); + Polygons pp = this->simplify_p(tolerance); polygons->insert(polygons->end(), pp.begin(), pp.end()); } -Polygons ExPolygon::simplify_p(double tolerance, SimplifyMethod method) const +Polygons ExPolygon::simplify_p(double tolerance) const { Polygons pp; pp.reserve(this->holes.size() + 1); - std::map> method_list = { {SimplifyMethodDP, MultiPoint::_douglas_peucker}, {SimplifyMethodVisvalingam, MultiPoint::visivalingam},{SimplifyMethodConcave, MultiPoint::concave_hull_2d} }; // contour { Polygon p = this->contour; p.points.push_back(p.points.front()); - p.points = method_list[method](p.points, tolerance); + p.points = MultiPoint::_douglas_peucker(p.points, tolerance); p.points.pop_back(); pp.emplace_back(std::move(p)); } // holes for (Polygon p : this->holes) { p.points.push_back(p.points.front()); - p.points = method_list[method](p.points, tolerance); + p.points = MultiPoint::_douglas_peucker(p.points, tolerance); p.points.pop_back(); pp.emplace_back(std::move(p)); } return simplify_polygons(pp); } -ExPolygons ExPolygon::simplify(double tolerance, SimplifyMethod method) const +ExPolygons ExPolygon::simplify(double tolerance) const { - return union_ex(this->simplify_p(tolerance, method)); + return union_ex(this->simplify_p(tolerance)); } -void ExPolygon::simplify(double tolerance, ExPolygons* expolygons, SimplifyMethod method) const +void ExPolygon::simplify(double tolerance, ExPolygons* expolygons) const { - append(*expolygons, this->simplify(tolerance, method)); + append(*expolygons, this->simplify(tolerance)); } -void -ExPolygon::medial_axis(double max_width, double min_width, ThickPolylines* polylines) const +void ExPolygon::medial_axis(double min_width, double max_width, ThickPolylines* polylines) const { // init helper object - Slic3r::Geometry::MedialAxis ma(max_width, min_width, this); - ma.lines = this->lines(); + Slic3r::Geometry::MedialAxis ma(min_width, max_width, *this); // compute the Voronoi diagram and extract medial axis polylines ThickPolylines pp; @@ -240,7 +246,7 @@ ExPolygon::medial_axis(double max_width, double min_width, ThickPolylines* polyl call, so we keep the inner point until we perform the second intersection() as well */ Point new_front = polyline.points.front(); Point new_back = polyline.points.back(); - if (polyline.endpoints.first && !this->has_boundary_point(new_front)) { + if (polyline.endpoints.first && !this->on_boundary(new_front, SCALED_EPSILON)) { Vec2d p1 = polyline.points.front().cast(); Vec2d p2 = polyline.points[1].cast(); // prevent the line from touching on the other side, otherwise intersection() might return that solution @@ -250,7 +256,7 @@ ExPolygon::medial_axis(double max_width, double min_width, ThickPolylines* polyl p1 -= (p2 - p1).normalized() * max_width; this->contour.intersection(Line(p1.cast(), p2.cast()), &new_front); } - if (polyline.endpoints.second && !this->has_boundary_point(new_back)) { + if (polyline.endpoints.second && !this->on_boundary(new_back, SCALED_EPSILON)) { Vec2d p1 = (polyline.points.end() - 2)->cast(); Vec2d p2 = polyline.points.back().cast(); // prevent the line from touching on the other side, otherwise intersection() might return that solution @@ -312,16 +318,17 @@ ExPolygon::medial_axis(double max_width, double min_width, ThickPolylines* polyl } } } - + polylines->insert(polylines->end(), pp.begin(), pp.end()); } -void -ExPolygon::medial_axis(double max_width, double min_width, Polylines* polylines) const +void ExPolygon::medial_axis(double min_width, double max_width, Polylines* polylines) const { ThickPolylines tp; - this->medial_axis(max_width, min_width, &tp); - polylines->insert(polylines->end(), tp.begin(), tp.end()); + this->medial_axis(min_width, max_width, &tp); + polylines->reserve(polylines->size() + tp.size()); + for (auto &pl : tp) + polylines->emplace_back(pl.points); } Lines ExPolygon::lines() const @@ -334,6 +341,18 @@ Lines ExPolygon::lines() const return lines; } +// Do expolygons match? If they match, they must have the same topology, +// however their contours may be rotated. +bool expolygons_match(const ExPolygon &l, const ExPolygon &r) +{ + if (l.holes.size() != r.holes.size() || ! polygons_match(l.contour, r.contour)) + return false; + for (size_t hole_idx = 0; hole_idx < l.holes.size(); ++ hole_idx) + if (! polygons_match(l.holes[hole_idx], r.holes[hole_idx])) + return false; + return true; +} + BoundingBox get_extents(const ExPolygon &expolygon) { return get_extents(expolygon.contour); diff --git a/src/libslic3r/ExPolygon.hpp b/src/libslic3r/ExPolygon.hpp index eac2d44a55..83b264803c 100644 --- a/src/libslic3r/ExPolygon.hpp +++ b/src/libslic3r/ExPolygon.hpp @@ -1,6 +1,7 @@ #ifndef slic3r_ExPolygon_hpp_ #define slic3r_ExPolygon_hpp_ +#include "Point.hpp" #include "libslic3r.h" #include "Polygon.hpp" #include "Polyline.hpp" @@ -9,13 +10,7 @@ namespace Slic3r { class ExPolygon; -typedef std::vector ExPolygons; - -typedef enum SimplifyMethod_ { - SimplifyMethodDP=0, - SimplifyMethodVisvalingam, - SimplifyMethodConcave -}SimplifyMethod; +using ExPolygons = std::vector; class ExPolygon { @@ -37,14 +32,12 @@ public: ExPolygon& operator=(const ExPolygon &other) = default; ExPolygon& operator=(ExPolygon &&other) = default; - Polygon contour; - Polygons holes; + Polygon contour; //CCW + Polygons holes; //CW - operator Points() const; - operator Polygons() const; - operator Polylines() const; void clear() { contour.points.clear(); holes.clear(); } void scale(double factor); + void scale(double factor_x, double factor_y); void translate(double x, double y) { this->translate(Point(coord_t(x), coord_t(y))); } void translate(const Point &vector); void rotate(double angle); @@ -58,21 +51,29 @@ public: bool contains(const Line &line) const; bool contains(const Polyline &polyline) const; bool contains(const Polylines &polylines) const; - bool contains(const Point &point) const; - bool contains_b(const Point &point) const; - bool has_boundary_point(const Point &point) const; + bool contains(const Point &point, bool border_result = true) const; + // Approximate on boundary test. + bool on_boundary(const Point &point, double eps) const; + // Projection of a point onto the polygon. + Point point_projection(const Point &point) const; // Does this expolygon overlap another expolygon? // Either the ExPolygons intersect, or one is fully inside the other, // and it is not inside a hole of the other expolygon. + // The test may not be commutative if the two expolygons touch by a boundary only, + // see unit test SCENARIO("Clipper diff with polyline", "[Clipper]"). + // Namely expolygons touching at a vertical boundary are considered overlapping, while expolygons touching + // at a horizontal boundary are NOT considered overlapping. bool overlaps(const ExPolygon &other) const; - void simplify_p(double tolerance, Polygons* polygons, SimplifyMethod method = SimplifyMethodDP) const; - Polygons simplify_p(double tolerance, SimplifyMethod method = SimplifyMethodDP) const; - ExPolygons simplify(double tolerance, SimplifyMethod method = SimplifyMethodDP) const; - void simplify(double tolerance, ExPolygons* expolygons, SimplifyMethod method = SimplifyMethodDP) const; - void medial_axis(double max_width, double min_width, ThickPolylines* polylines) const; - void medial_axis(double max_width, double min_width, Polylines* polylines) const; + void simplify_p(double tolerance, Polygons* polygons) const; + Polygons simplify_p(double tolerance) const; + ExPolygons simplify(double tolerance) const; + void simplify(double tolerance, ExPolygons* expolygons) const; + void medial_axis(double min_width, double max_width, ThickPolylines* polylines) const; + void medial_axis(double min_width, double max_width, Polylines* polylines) const; + Polylines medial_axis(double min_width, double max_width) const + { Polylines out; this->medial_axis(min_width, max_width, &out); return out; } Lines lines() const; // Number of contours (outer contour with holes). @@ -84,6 +85,25 @@ public: inline bool operator==(const ExPolygon &lhs, const ExPolygon &rhs) { return lhs.contour == rhs.contour && lhs.holes == rhs.holes; } inline bool operator!=(const ExPolygon &lhs, const ExPolygon &rhs) { return lhs.contour != rhs.contour || lhs.holes != rhs.holes; } +inline size_t count_points(const ExPolygons &expolys) +{ + size_t n_points = 0; + for (const auto &expoly : expolys) { + n_points += expoly.contour.points.size(); + for (const auto &hole : expoly.holes) + n_points += hole.points.size(); + } + return n_points; +} + +inline size_t count_points(const ExPolygon &expoly) +{ + size_t n_points = expoly.contour.points.size(); + for (const auto &hole : expoly.holes) + n_points += hole.points.size(); + return n_points; +} + // Count a nuber of polygons stored inside the vector of expolygons. // Useful for allocating space for polygons when converting expolygons to polygons. inline size_t number_polygons(const ExPolygons &expolys) @@ -96,11 +116,8 @@ inline size_t number_polygons(const ExPolygons &expolys) inline Lines to_lines(const ExPolygon &src) { - size_t n_lines = src.contour.points.size(); - for (size_t i = 0; i < src.holes.size(); ++ i) - n_lines += src.holes[i].points.size(); Lines lines; - lines.reserve(n_lines); + lines.reserve(count_points(src)); for (size_t i = 0; i <= src.holes.size(); ++ i) { const Polygon &poly = (i == 0) ? src.contour : src.holes[i - 1]; for (Points::const_iterator it = poly.points.begin(); it != poly.points.end()-1; ++it) @@ -112,14 +129,8 @@ inline Lines to_lines(const ExPolygon &src) inline Lines to_lines(const ExPolygons &src) { - size_t n_lines = 0; - for (ExPolygons::const_iterator it_expoly = src.begin(); it_expoly != src.end(); ++ it_expoly) { - n_lines += it_expoly->contour.points.size(); - for (size_t i = 0; i < it_expoly->holes.size(); ++ i) - n_lines += it_expoly->holes[i].points.size(); - } Lines lines; - lines.reserve(n_lines); + lines.reserve(count_points(src)); for (ExPolygons::const_iterator it_expoly = src.begin(); it_expoly != src.end(); ++ it_expoly) { for (size_t i = 0; i <= it_expoly->holes.size(); ++ i) { const Points &points = ((i == 0) ? it_expoly->contour : it_expoly->holes[i - 1]).points; @@ -131,6 +142,70 @@ inline Lines to_lines(const ExPolygons &src) return lines; } +// Line is from point index(see to_points) to next point. +// Next point of last point in polygon is first polygon point. +inline Linesf to_linesf(const ExPolygons &src, uint32_t count_lines = 0) +{ + assert(count_lines == 0 || count_lines == count_points(src)); + if (count_lines == 0) count_lines = count_points(src); + Linesf lines; + lines.reserve(count_lines); + Vec2d prev_pd; + auto to_lines = [&lines, &prev_pd](const Points &pts) { + assert(pts.size() >= 3); + if (pts.size() < 2) return; + bool is_first = true; + for (const Point &p : pts) { + Vec2d pd = p.cast(); + if (is_first) is_first = false; + else lines.emplace_back(prev_pd, pd); + prev_pd = pd; + } + lines.emplace_back(prev_pd, pts.front().cast()); + }; + for (const ExPolygon& expoly: src) { + to_lines(expoly.contour.points); + for (const Polygon &hole : expoly.holes) + to_lines(hole.points); + } + assert(lines.size() == count_lines); + return lines; +} + +inline Linesf to_unscaled_linesf(const ExPolygons &src) +{ + Linesf lines; + lines.reserve(count_points(src)); + for (ExPolygons::const_iterator it_expoly = src.begin(); it_expoly != src.end(); ++ it_expoly) { + for (size_t i = 0; i <= it_expoly->holes.size(); ++ i) { + const Points &points = ((i == 0) ? it_expoly->contour : it_expoly->holes[i - 1]).points; + Vec2d unscaled_a = unscaled(points.front()); + Vec2d unscaled_b = unscaled_a; + for (Points::const_iterator it = points.begin()+1; it != points.end(); ++it){ + unscaled_b = unscaled(*(it)); + lines.push_back(Linef(unscaled_a, unscaled_b)); + unscaled_a = unscaled_b; + } + lines.push_back(Linef(unscaled_a, unscaled(points.front()))); + } + } + return lines; +} + + +inline Points to_points(const ExPolygons &src) +{ + Points points; + size_t count = count_points(src); + points.reserve(count); + for (const ExPolygon &expolygon : src) { + append(points, expolygon.contour.points); + for (const Polygon &hole : expolygon.holes) + append(points, hole.points); + } + return points; +} + inline Polylines to_polylines(const ExPolygon &src) { Polylines polylines; @@ -175,10 +250,10 @@ inline Polylines to_polylines(ExPolygon &&src) Polyline &pl = polylines[idx ++]; pl.points = std::move(src.contour.points); pl.points.push_back(pl.points.front()); - for (Polygons::const_iterator ith = src.holes.begin(); ith != src.holes.end(); ++ith) { + for (auto ith = src.holes.begin(); ith != src.holes.end(); ++ith) { Polyline &pl = polylines[idx ++]; pl.points = std::move(ith->points); - pl.points.push_back(ith->points.front()); + pl.points.push_back(pl.points.front()); } assert(idx == polylines.size()); return polylines; @@ -189,14 +264,14 @@ inline Polylines to_polylines(ExPolygons &&src) Polylines polylines; polylines.assign(number_polygons(src), Polyline()); size_t idx = 0; - for (ExPolygons::const_iterator it = src.begin(); it != src.end(); ++it) { + for (auto it = src.begin(); it != src.end(); ++it) { Polyline &pl = polylines[idx ++]; pl.points = std::move(it->contour.points); pl.points.push_back(pl.points.front()); - for (Polygons::const_iterator ith = it->holes.begin(); ith != it->holes.end(); ++ith) { + for (auto ith = it->holes.begin(); ith != it->holes.end(); ++ith) { Polyline &pl = polylines[idx ++]; pl.points = std::move(ith->points); - pl.points.push_back(ith->points.front()); + pl.points.push_back(pl.points.front()); } } assert(idx == polylines.size()); @@ -250,8 +325,9 @@ inline Polygons to_polygons(ExPolygon &&src) Polygons polygons; polygons.reserve(src.holes.size() + 1); polygons.push_back(std::move(src.contour)); - std::move(std::begin(src.holes), std::end(src.holes), std::back_inserter(polygons)); - src.holes.clear(); + polygons.insert(polygons.end(), + std::make_move_iterator(src.holes.begin()), + std::make_move_iterator(src.holes.end())); return polygons; } @@ -259,10 +335,11 @@ inline Polygons to_polygons(ExPolygons &&src) { Polygons polygons; polygons.reserve(number_polygons(src)); - for (ExPolygons::iterator it = src.begin(); it != src.end(); ++it) { - polygons.push_back(std::move(it->contour)); - std::move(std::begin(it->holes), std::end(it->holes), std::back_inserter(polygons)); - it->holes.clear(); + for (ExPolygon& expoly: src) { + polygons.push_back(std::move(expoly.contour)); + polygons.insert(polygons.end(), + std::make_move_iterator(expoly.holes.begin()), + std::make_move_iterator(expoly.holes.end())); } return polygons; } @@ -285,6 +362,16 @@ inline ExPolygons to_expolygons(Polygons &&polys) return ex_polys; } +inline Points to_points(const ExPolygon &expoly) +{ + Points out; + out.reserve(count_points(expoly)); + append(out, expoly.contour.points); + for (const Polygon &hole : expoly.holes) + append(out, hole.points); + return out; +} + inline void polygons_append(Polygons &dst, const ExPolygon &src) { dst.reserve(dst.size() + src.holes.size() + 1); @@ -304,18 +391,20 @@ inline void polygons_append(Polygons &dst, const ExPolygons &src) inline void polygons_append(Polygons &dst, ExPolygon &&src) { dst.reserve(dst.size() + src.holes.size() + 1); - dst.push_back(std::move(src.contour)); - std::move(std::begin(src.holes), std::end(src.holes), std::back_inserter(dst)); - src.holes.clear(); + dst.push_back(std::move(src.contour)); + dst.insert(dst.end(), + std::make_move_iterator(src.holes.begin()), + std::make_move_iterator(src.holes.end())); } inline void polygons_append(Polygons &dst, ExPolygons &&src) { dst.reserve(dst.size() + number_polygons(src)); - for (ExPolygons::iterator it = src.begin(); it != src.end(); ++ it) { - dst.push_back(std::move(it->contour)); - std::move(std::begin(it->holes), std::end(it->holes), std::back_inserter(dst)); - it->holes.clear(); + for (ExPolygon& expoly: src) { + dst.push_back(std::move(expoly.contour)); + dst.insert(dst.end(), + std::make_move_iterator(expoly.holes.begin()), + std::make_move_iterator(expoly.holes.end())); } } @@ -329,21 +418,22 @@ inline void expolygons_append(ExPolygons &dst, ExPolygons &&src) if (dst.empty()) { dst = std::move(src); } else { - std::move(std::begin(src), std::end(src), std::back_inserter(dst)); - src.clear(); + dst.insert(dst.end(), + std::make_move_iterator(src.begin()), + std::make_move_iterator(src.end())); } } inline void expolygons_rotate(ExPolygons &expolys, double angle) { - for (ExPolygons::iterator p = expolys.begin(); p != expolys.end(); ++p) - p->rotate(angle); + for (ExPolygon &expoly : expolys) + expoly.rotate(angle); } -inline bool expolygons_contain(ExPolygons &expolys, const Point &pt) +inline bool expolygons_contain(ExPolygons &expolys, const Point &pt, bool border_result = true) { - for (ExPolygons::iterator p = expolys.begin(); p != expolys.end(); ++p) - if (p->contains(pt)) + for (const ExPolygon &expoly : expolys) + if (expoly.contains(pt, border_result)) return true; return false; } @@ -357,6 +447,10 @@ inline ExPolygons expolygons_simplify(const ExPolygons &expolys, double toleranc return out; } +// Do expolygons match? If they match, they must have the same topology, +// however their contours may be rotated. +bool expolygons_match(const ExPolygon &l, const ExPolygon &r); + BoundingBox get_extents(const ExPolygon &expolygon); BoundingBox get_extents(const ExPolygons &expolygons); BoundingBox get_extents_rotated(const ExPolygon &poly, double angle); diff --git a/src/libslic3r/ExtrusionEntity.cpp b/src/libslic3r/ExtrusionEntity.cpp index 537adfdcc8..65182c3d90 100644 --- a/src/libslic3r/ExtrusionEntity.cpp +++ b/src/libslic3r/ExtrusionEntity.cpp @@ -1,6 +1,6 @@ #include "ExtrusionEntity.hpp" #include "ExtrusionEntityCollection.hpp" -#include "ExPolygonCollection.hpp" +#include "ExPolygon.hpp" #include "ClipperUtils.hpp" #include "Extruder.hpp" #include "Flow.hpp" @@ -12,14 +12,14 @@ namespace Slic3r { -void ExtrusionPath::intersect_expolygons(const ExPolygonCollection &collection, ExtrusionEntityCollection* retval) const +void ExtrusionPath::intersect_expolygons(const ExPolygons &collection, ExtrusionEntityCollection* retval) const { - this->_inflate_collection(intersection_pl(Polylines{ polyline }, collection.expolygons), retval); + this->_inflate_collection(intersection_pl(Polylines{ polyline }, collection), retval); } -void ExtrusionPath::subtract_expolygons(const ExPolygonCollection &collection, ExtrusionEntityCollection* retval) const +void ExtrusionPath::subtract_expolygons(const ExPolygons &collection, ExtrusionEntityCollection* retval) const { - this->_inflate_collection(diff_pl(Polylines{ this->polyline }, collection.expolygons), retval); + this->_inflate_collection(diff_pl(Polylines{ this->polyline }, collection), retval); } void ExtrusionPath::clip_end(double distance) diff --git a/src/libslic3r/ExtrusionEntity.hpp b/src/libslic3r/ExtrusionEntity.hpp index dc34ef5004..40ee736723 100644 --- a/src/libslic3r/ExtrusionEntity.hpp +++ b/src/libslic3r/ExtrusionEntity.hpp @@ -11,7 +11,8 @@ namespace Slic3r { -class ExPolygonCollection; +class ExPolygon; +using ExPolygons = std::vector; class ExtrusionEntityCollection; class Extruder; @@ -178,12 +179,12 @@ public: size_t size() const { return this->polyline.size(); } bool empty() const { return this->polyline.empty(); } bool is_closed() const { return ! this->empty() && this->polyline.points.front() == this->polyline.points.back(); } - // Produce a list of extrusion paths into retval by clipping this path by ExPolygonCollection. + // Produce a list of extrusion paths into retval by clipping this path by ExPolygons. // Currently not used. - void intersect_expolygons(const ExPolygonCollection &collection, ExtrusionEntityCollection* retval) const; - // Produce a list of extrusion paths into retval by removing parts of this path by ExPolygonCollection. + void intersect_expolygons(const ExPolygons &collection, ExtrusionEntityCollection* retval) const; + // Produce a list of extrusion paths into retval by removing parts of this path by ExPolygons. // Currently not used. - void subtract_expolygons(const ExPolygonCollection &collection, ExtrusionEntityCollection* retval) const; + void subtract_expolygons(const ExPolygons &collection, ExtrusionEntityCollection* retval) const; void clip_end(double distance); void simplify(double tolerance); double length() const override; diff --git a/src/libslic3r/Fill/FillRectilinear.cpp b/src/libslic3r/Fill/FillRectilinear.cpp index 0d7f5940fc..e0ac77e478 100644 --- a/src/libslic3r/Fill/FillRectilinear.cpp +++ b/src/libslic3r/Fill/FillRectilinear.cpp @@ -415,7 +415,7 @@ public: // bool sticks_removed = remove_sticks(polygons_src); // if (sticks_removed) BOOST_LOG_TRIVIAL(error) << "Sticks removed!"; - polygons_outer = aoffset1 == 0 ? polygons_src : offset(polygons_src, float(aoffset1), ClipperLib::jtMiter, miterLimit); + polygons_outer = aoffset1 == 0 ? to_polygons(polygons_src) : offset(polygons_src, float(aoffset1), ClipperLib::jtMiter, miterLimit); if (aoffset2 < 0) polygons_inner = shrink(polygons_outer, float(aoffset1 - aoffset2), ClipperLib::jtMiter, miterLimit); // Filter out contours with zero area or small area, contours with 2 points only. @@ -3165,7 +3165,7 @@ void FillMonotonicLineWGapFill::fill_surface_extrusion(const Surface* surface, c for (ExPolygon& ex : gaps_ex_sorted) { //BBS: Use DP simplify to avoid duplicated points and accelerate medial-axis calculation as well. ex.douglas_peucker(SCALED_RESOLUTION * 0.1); - ex.medial_axis(max, min, &polylines); + ex.medial_axis(min, max, &polylines); } if (!polylines.empty() && !is_bridge(params.extrusion_role)) { diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 96058aa5a3..dd0ca6c268 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -4035,11 +4035,13 @@ bool GCode::needs_retraction(const Polyline &travel, ExtrusionRole role, LiftTyp if (role == erSupportMaterial || role == erSupportTransition) { const SupportLayer* support_layer = dynamic_cast(m_layer); //FIXME support_layer->support_islands.contains should use some search structure! - if (support_layer != NULL && support_layer->support_islands.contains(travel)) + if (support_layer != NULL) // skip retraction if this is a travel move inside a support material island //FIXME not retracting over a long path may cause oozing, which in turn may result in missing material // at the end of the extrusion path! - return false; + for (const ExPolygon& support_island : support_layer->support_islands) + if (support_island.contains(travel)) + return false; //reduce the retractions in lightning infills for tree support if (support_layer != NULL && support_layer->support_type==stInnerTree) for (auto &area : support_layer->base_areas) diff --git a/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp b/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp index aca9fdf6ea..4d9f3dcf1b 100644 --- a/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp +++ b/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp @@ -1010,7 +1010,7 @@ static ExPolygons get_boundary(const Layer &layer) ExPolygons boundary = union_ex(inner_offset(layer.lslices, 1.5 * perimeter_spacing)); if(support_layer) { #ifdef INCLUDE_SUPPORTS_IN_BOUNDARY - append(boundary, inner_offset(support_layer->support_islands.expolygons, 1.5 * perimeter_spacing)); + append(boundary, inner_offset(support_layer->support_islands, 1.5 * perimeter_spacing)); #endif auto *layer_below = layer.object()->get_first_layer_bellow_printz(layer.print_z, EPSILON); if (layer_below) @@ -1063,7 +1063,7 @@ static Polygons get_boundary_external(const Layer &layer) for (const ExPolygon &island : layer_below->lslices) append(holes_per_obj, island.holes); #ifdef INCLUDE_SUPPORTS_IN_BOUNDARY - append(supports_per_obj, support_layer->support_islands.expolygons); + append(supports_per_obj, support_layer->support_islands); #endif } diff --git a/src/libslic3r/Geometry/ConvexHull.cpp b/src/libslic3r/Geometry/ConvexHull.cpp index b1ff77f801..b8bf5eb696 100644 --- a/src/libslic3r/Geometry/ConvexHull.cpp +++ b/src/libslic3r/Geometry/ConvexHull.cpp @@ -1,6 +1,7 @@ #include "libslic3r.h" #include "ConvexHull.hpp" #include "BoundingBox.hpp" +#include "../Geometry.hpp" #include @@ -19,13 +20,13 @@ Polygon convex_hull(Points pts) hull.points.resize(2 * n); // Build lower hull for (int i = 0; i < n; ++ i) { - while (k >= 2 && pts[i].ccw(hull[k-2], hull[k-1]) <= 0) + while (k >= 2 && Geometry::orient(pts[i], hull[k-2], hull[k-1]) != Geometry::ORIENTATION_CCW) -- k; hull[k ++] = pts[i]; } // Build upper hull for (int i = n-2, t = k+1; i >= 0; i--) { - while (k >= t && pts[i].ccw(hull[k-2], hull[k-1]) <= 0) + while (k >= t && Geometry::orient(pts[i], hull[k-2], hull[k-1]) != Geometry::ORIENTATION_CCW) -- k; hull[k ++] = pts[i]; } @@ -58,7 +59,7 @@ Pointf3s convex_hull(Pointf3s points) Point k1 = Point::new_scale(hull[k - 1](0), hull[k - 1](1)); Point k2 = Point::new_scale(hull[k - 2](0), hull[k - 2](1)); - if (p.ccw(k2, k1) <= 0) + if (Geometry::orient(p, k2, k1) != Geometry::ORIENTATION_CCW) --k; else break; @@ -76,7 +77,7 @@ Pointf3s convex_hull(Pointf3s points) Point k1 = Point::new_scale(hull[k - 1](0), hull[k - 1](1)); Point k2 = Point::new_scale(hull[k - 2](0), hull[k - 2](1)); - if (p.ccw(k2, k1) <= 0) + if (Geometry::orient(p, k2, k1) != Geometry::ORIENTATION_CCW) --k; else break; @@ -103,6 +104,29 @@ Polygon convex_hull(const Polygons &polygons) return convex_hull(std::move(pp)); } +Polygon convex_hull(const ExPolygons &expolygons) +{ + Points pp; + size_t sz = 0; + for (const auto &expoly : expolygons) + sz += expoly.contour.size(); + pp.reserve(sz); + for (const auto &expoly : expolygons) + pp.insert(pp.end(), expoly.contour.points.begin(), expoly.contour.points.end()); + return convex_hull(pp); +} + +Polygon convex_hulll(const Polylines &polylines) +{ + Points pp; + size_t sz = 0; + for (const auto &polyline : polylines) + sz += polyline.points.size(); + pp.reserve(sz); + for (const auto &polyline : polylines) + pp.insert(pp.end(), polyline.points.begin(), polyline.points.end()); + return convex_hull(pp); +} namespace rotcalip { @@ -374,7 +398,7 @@ bool inside_convex_polygon(const std::pair, std::vectorx()); assert(pt.x() == it_top->x()); - assert(it_bottom->y() <= pt.y() <= it_top->y()); + assert(it_bottom->y() <= pt.y() && pt.y() <= it_top->y()); return pt.y() >= it_bottom->y() && pt.y() <= it_top->y(); } diff --git a/src/libslic3r/Geometry/ConvexHull.hpp b/src/libslic3r/Geometry/ConvexHull.hpp index 03f00af6ae..eb0be4fe1f 100644 --- a/src/libslic3r/Geometry/ConvexHull.hpp +++ b/src/libslic3r/Geometry/ConvexHull.hpp @@ -1,14 +1,22 @@ #ifndef slic3r_Geometry_ConvexHull_hpp_ #define slic3r_Geometry_ConvexHull_hpp_ +#include + #include "../Polygon.hpp" namespace Slic3r { + +class ExPolygon; +using ExPolygons = std::vector; + namespace Geometry { Pointf3s convex_hull(Pointf3s points); Polygon convex_hull(Points points); Polygon convex_hull(const Polygons &polygons); +Polygon convex_hull(const ExPolygons &expolygons); +Polygon convex_hulll(const Polylines &polylines); // Returns true if the intersection of the two convex polygons A and B // is not an empty set. diff --git a/src/libslic3r/Geometry/MedialAxis.cpp b/src/libslic3r/Geometry/MedialAxis.cpp index 9abf524415..39677c9285 100644 --- a/src/libslic3r/Geometry/MedialAxis.cpp +++ b/src/libslic3r/Geometry/MedialAxis.cpp @@ -1,6 +1,7 @@ #include "MedialAxis.hpp" #include "clipper.hpp" +#include "VoronoiOffset.hpp" #ifdef SLIC3R_DEBUG namespace boost { namespace polygon { @@ -392,8 +393,7 @@ inline const typename VD::point_type retrieve_cell_point(const typename VD::cell } template -inline std::pair -measure_edge_thickness(const VD &vd, const typename VD::edge_type& edge, const SEGMENTS &segments) +inline std::pair measure_edge_thickness(const VD &vd, const typename VD::edge_type& edge, const SEGMENTS &segments) { typedef typename VD::coord_type T; const typename VD::point_type pa(edge.vertex0()->x(), edge.vertex0()->y()); @@ -442,15 +442,21 @@ private: const Lines &lines; }; -void -MedialAxis::build(ThickPolylines* polylines) +MedialAxis::MedialAxis(double min_width, double max_width, const ExPolygon &expolygon) : + m_expolygon(expolygon), m_lines(expolygon.lines()), m_min_width(min_width), m_max_width(max_width) +{} + +void MedialAxis::build(ThickPolylines* polylines) { - construct_voronoi(this->lines.begin(), this->lines.end(), &this->vd); + construct_voronoi(m_lines.begin(), m_lines.end(), &m_vd); + Slic3r::Voronoi::annotate_inside_outside(m_vd, m_lines); +// static constexpr double threshold_alpha = M_PI / 12.; // 30 degrees +// std::vector skeleton_edges = Slic3r::Voronoi::skeleton_edges_rough(vd, lines, threshold_alpha); /* // DEBUG: dump all Voronoi edges { - for (VD::const_edge_iterator edge = this->vd.edges().begin(); edge != this->vd.edges().end(); ++edge) { + for (VD::const_edge_iterator edge = m_vd.edges().begin(); edge != m_vd.edges().end(); ++edge) { if (edge->is_infinite()) continue; ThickPolyline polyline; @@ -462,74 +468,57 @@ MedialAxis::build(ThickPolylines* polylines) } */ - //typedef const VD::vertex_type vert_t; - typedef const VD::edge_type edge_t; - // collect valid edges (i.e. prune those not belonging to MAT) // note: this keeps twins, so it inserts twice the number of the valid edges - this->valid_edges.clear(); - { - std::set seen_edges; - for (VD::const_edge_iterator edge = this->vd.edges().begin(); edge != this->vd.edges().end(); ++edge) { - // if we only process segments representing closed loops, none if the - // infinite edges (if any) would be part of our MAT anyway - if (edge->is_secondary() || edge->is_infinite()) continue; - - // don't re-validate twins - if (seen_edges.find(&*edge) != seen_edges.end()) continue; // TODO: is this needed? - seen_edges.insert(&*edge); - seen_edges.insert(edge->twin()); - - if (!this->validate_edge(&*edge)) continue; - this->valid_edges.insert(&*edge); - this->valid_edges.insert(edge->twin()); + m_edge_data.assign(m_vd.edges().size() / 2, EdgeData{}); + for (VD::const_edge_iterator edge = m_vd.edges().begin(); edge != m_vd.edges().end(); edge += 2) + if (edge->is_primary() && edge->is_finite() && + (Voronoi::vertex_category(edge->vertex0()) == Voronoi::VertexCategory::Inside || + Voronoi::vertex_category(edge->vertex1()) == Voronoi::VertexCategory::Inside) && + this->validate_edge(&*edge)) { + // Valid skeleton edge. + this->edge_data(*edge).first.active = true; } - } - this->edges = this->valid_edges; // iterate through the valid edges to build polylines - while (!this->edges.empty()) { - const edge_t* edge = *this->edges.begin(); + ThickPolyline reverse_polyline; + for (VD::const_edge_iterator seed_edge = m_vd.edges().begin(); seed_edge != m_vd.edges().end(); seed_edge += 2) + if (EdgeData &seed_edge_data = this->edge_data(*seed_edge).first; seed_edge_data.active) { + // Mark this edge as visited. + seed_edge_data.active = false; + + // Start a polyline. + ThickPolyline polyline; + polyline.points.emplace_back(seed_edge->vertex0()->x(), seed_edge->vertex0()->y()); + polyline.points.emplace_back(seed_edge->vertex1()->x(), seed_edge->vertex1()->y()); + polyline.width.emplace_back(seed_edge_data.width_start); + polyline.width.emplace_back(seed_edge_data.width_end); + // Grow the polyline in a forward direction. + this->process_edge_neighbors(&*seed_edge, &polyline); + assert(polyline.width.size() == polyline.points.size() * 2 - 2); - // start a polyline - ThickPolyline polyline; - polyline.points.push_back(Point( edge->vertex0()->x(), edge->vertex0()->y() )); - polyline.points.push_back(Point( edge->vertex1()->x(), edge->vertex1()->y() )); - polyline.width.push_back(this->thickness[edge].first); - polyline.width.push_back(this->thickness[edge].second); + // Grow the polyline in a backward direction. + reverse_polyline.clear(); + this->process_edge_neighbors(seed_edge->twin(), &reverse_polyline); + polyline.points.insert(polyline.points.begin(), reverse_polyline.points.rbegin(), reverse_polyline.points.rend()); + polyline.width.insert(polyline.width.begin(), reverse_polyline.width.rbegin(), reverse_polyline.width.rend()); + polyline.endpoints.first = reverse_polyline.endpoints.second; + assert(polyline.width.size() == polyline.points.size() * 2 - 2); - // remove this edge and its twin from the available edges - (void)this->edges.erase(edge); - (void)this->edges.erase(edge->twin()); - - // get next points - this->process_edge_neighbors(edge, &polyline); - - // get previous points - { - ThickPolyline rpolyline; - this->process_edge_neighbors(edge->twin(), &rpolyline); - polyline.points.insert(polyline.points.begin(), rpolyline.points.rbegin(), rpolyline.points.rend()); - polyline.width.insert(polyline.width.begin(), rpolyline.width.rbegin(), rpolyline.width.rend()); - polyline.endpoints.first = rpolyline.endpoints.second; + // Prevent loop endpoints from being extended. + if (polyline.first_point() == polyline.last_point()) { + polyline.endpoints.first = false; + polyline.endpoints.second = false; + } + + // Append polyline to result. + polylines->emplace_back(std::move(polyline)); } - - assert(polyline.width.size() == polyline.points.size()*2 - 2); - - // prevent loop endpoints from being extended - if (polyline.first_point() == polyline.last_point()) { - polyline.endpoints.first = false; - polyline.endpoints.second = false; - } - - // append polyline to result - polylines->push_back(polyline); - } #ifdef SLIC3R_DEBUG { static int iRun = 0; - dump_voronoi_to_svg(this->lines, this->vd, polylines, debug_out_path("MedialAxis-%d.svg", iRun ++).c_str()); + dump_voronoi_to_svg(m_lines, m_vd, polylines, debug_out_path("MedialAxis-%d.svg", iRun ++).c_str()); printf("Thick lines: "); for (ThickPolylines::const_iterator it = polylines->begin(); it != polylines->end(); ++ it) { ThickLines lines = it->thicklines(); @@ -542,56 +531,68 @@ MedialAxis::build(ThickPolylines* polylines) #endif /* SLIC3R_DEBUG */ } -void -MedialAxis::build(Polylines* polylines) +void MedialAxis::build(Polylines* polylines) { ThickPolylines tp; this->build(&tp); - polylines->insert(polylines->end(), tp.begin(), tp.end()); + polylines->reserve(polylines->size() + tp.size()); + for (auto &pl : tp) + polylines->emplace_back(pl.points); } -void -MedialAxis::process_edge_neighbors(const VD::edge_type* edge, ThickPolyline* polyline) +void MedialAxis::process_edge_neighbors(const VD::edge_type *edge, ThickPolyline* polyline) { - while (true) { + for (;;) { // Since rot_next() works on the edge starting point but we want // to find neighbors on the ending point, we just swap edge with // its twin. - const VD::edge_type* twin = edge->twin(); + const VD::edge_type *twin = edge->twin(); // count neighbors for this edge - std::vector neighbors; - for (const VD::edge_type* neighbor = twin->rot_next(); neighbor != twin; - neighbor = neighbor->rot_next()) { - if (this->valid_edges.count(neighbor) > 0) neighbors.push_back(neighbor); - } + size_t num_neighbors = 0; + const VD::edge_type *first_neighbor = nullptr; + for (const VD::edge_type *neighbor = twin->rot_next(); neighbor != twin; neighbor = neighbor->rot_next()) + if (this->edge_data(*neighbor).first.active) { + if (num_neighbors == 0) + first_neighbor = neighbor; + ++ num_neighbors; + } // if we have a single neighbor then we can continue recursively - if (neighbors.size() == 1) { - const VD::edge_type* neighbor = neighbors.front(); - - // break if this is a closed loop - if (this->edges.count(neighbor) == 0) return; - - Point new_point(neighbor->vertex1()->x(), neighbor->vertex1()->y()); - polyline->points.push_back(new_point); - polyline->width.push_back(this->thickness[neighbor].first); - polyline->width.push_back(this->thickness[neighbor].second); - (void)this->edges.erase(neighbor); - (void)this->edges.erase(neighbor->twin()); - edge = neighbor; - } else if (neighbors.size() == 0) { + if (num_neighbors == 1) { + if (std::pair neighbor_data = this->edge_data(*first_neighbor); + neighbor_data.first.active) { + neighbor_data.first.active = false; + polyline->points.emplace_back(first_neighbor->vertex1()->x(), first_neighbor->vertex1()->y()); + if (neighbor_data.second) { + polyline->width.push_back(neighbor_data.first.width_end); + polyline->width.push_back(neighbor_data.first.width_start); + } else { + polyline->width.push_back(neighbor_data.first.width_start); + polyline->width.push_back(neighbor_data.first.width_end); + } + edge = first_neighbor; + // Continue chaining. + continue; + } + } else if (num_neighbors == 0) { polyline->endpoints.second = true; - return; } else { - // T-shaped or star-shaped joint - return; + // T-shaped or star-shaped joint } + // Stop chaining. + break; } } bool MedialAxis::validate_edge(const VD::edge_type* edge) { + auto retrieve_segment = [this](const VD::cell_type* cell) -> const Line& { return m_lines[cell->source_index()]; }; + auto retrieve_endpoint = [retrieve_segment](const VD::cell_type* cell) -> const Point& { + const Line &line = retrieve_segment(cell); + return cell->source_category() == boost::polygon::SOURCE_CATEGORY_SEGMENT_START_POINT ? line.a : line.b; + }; + // prevent overflows and detect almost-infinite edges #ifndef CLIPPERLIB_INT32 if (std::abs(edge->vertex0()->x()) > double(CLIPPER_MAX_COORD_UNSCALED) || @@ -602,32 +603,18 @@ bool MedialAxis::validate_edge(const VD::edge_type* edge) #endif // CLIPPERLIB_INT32 // construct the line representing this edge of the Voronoi diagram - const Line line( - Point( edge->vertex0()->x(), edge->vertex0()->y() ), - Point( edge->vertex1()->x(), edge->vertex1()->y() ) - ); - - // discard edge if it lies outside the supplied shape - // this could maybe be optimized (checking inclusion of the endpoints - // might give false positives as they might belong to the contour itself) - if (this->expolygon != NULL) { - if (line.a == line.b) { - // in this case, contains(line) returns a false positive - if (!this->expolygon->contains(line.a)) return false; - } else { - if (!this->expolygon->contains(line)) return false; - } - } + const Line line({ edge->vertex0()->x(), edge->vertex0()->y() }, + { edge->vertex1()->x(), edge->vertex1()->y() }); // retrieve the original line segments which generated the edge we're checking const VD::cell_type* cell_l = edge->cell(); const VD::cell_type* cell_r = edge->twin()->cell(); - const Line &segment_l = this->retrieve_segment(cell_l); - const Line &segment_r = this->retrieve_segment(cell_r); + const Line &segment_l = retrieve_segment(cell_l); + const Line &segment_r = retrieve_segment(cell_r); /* SVG svg("edge.svg"); - svg.draw(*this->expolygon); + svg.draw(m_expolygon); svg.draw(line); svg.draw(segment_l, "red"); svg.draw(segment_r, "blue"); @@ -651,62 +638,48 @@ bool MedialAxis::validate_edge(const VD::edge_type* edge) coordf_t w0 = cell_r->contains_segment() ? segment_r.distance_to(line.a)*2 - : (this->retrieve_endpoint(cell_r) - line.a).cast().norm()*2; + : (retrieve_endpoint(cell_r) - line.a).cast().norm()*2; coordf_t w1 = cell_l->contains_segment() ? segment_l.distance_to(line.b)*2 - : (this->retrieve_endpoint(cell_l) - line.b).cast().norm()*2; + : (retrieve_endpoint(cell_l) - line.b).cast().norm()*2; if (cell_l->contains_segment() && cell_r->contains_segment()) { // calculate the relative angle between the two boundary segments double angle = fabs(segment_r.orientation() - segment_l.orientation()); - if (angle > PI) angle = 2*PI - angle; + if (angle > PI) + angle = 2. * PI - angle; assert(angle >= 0 && angle <= PI); - + // fabs(angle) ranges from 0 (collinear, same direction) to PI (collinear, opposite direction) // we're interested only in segments close to the second case (facing segments) // so we allow some tolerance. // this filter ensures that we're dealing with a narrow/oriented area (longer than thick) // we don't run it on edges not generated by two segments (thus generated by one segment // and the endpoint of another segment), since their orientation would not be meaningful - if (PI - angle > PI/8) { + if (PI - angle > PI / 8.) { // angle is not narrow enough - // only apply this filter to segments that are not too short otherwise their // angle could possibly be not meaningful - if (w0 < SCALED_EPSILON || w1 < SCALED_EPSILON || line.length() >= this->min_width) + if (w0 < SCALED_EPSILON || w1 < SCALED_EPSILON || line.length() >= m_min_width) return false; } } else { if (w0 < SCALED_EPSILON || w1 < SCALED_EPSILON) return false; } - //BBS - if (w0 < this->min_width || w1 < this->min_width) - return false; - //BBS - if (w0 > this->max_width || w1 > this->max_width) - return false; - this->thickness[edge] = std::make_pair(w0, w1); - this->thickness[edge->twin()] = std::make_pair(w1, w0); - - return true; -} - -const Line& MedialAxis::retrieve_segment(const VD::cell_type* cell) const -{ - return this->lines[cell->source_index()]; -} - -const Point& MedialAxis::retrieve_endpoint(const VD::cell_type* cell) const -{ - const Line& line = this->retrieve_segment(cell); - if (cell->source_category() == boost::polygon::SOURCE_CATEGORY_SEGMENT_START_POINT) { - return line.a; - } else { - return line.b; + if ((w0 >= m_min_width || w1 >= m_min_width) && + (w0 <= m_max_width || w1 <= m_max_width)) { + std::pair ed = this->edge_data(*edge); + if (ed.second) + std::swap(w0, w1); + ed.first.width_start = w0; + ed.first.width_end = w1; + return true; } + + return false; } } } // namespace Slicer::Geometry diff --git a/src/libslic3r/Geometry/MedialAxis.hpp b/src/libslic3r/Geometry/MedialAxis.hpp index cfbb5f0805..b1354ddb2f 100644 --- a/src/libslic3r/Geometry/MedialAxis.hpp +++ b/src/libslic3r/Geometry/MedialAxis.hpp @@ -4,30 +4,43 @@ #include "Voronoi.hpp" #include "../ExPolygon.hpp" -namespace Slic3r { namespace Geometry { +namespace Slic3r::Geometry { class MedialAxis { public: - Lines lines; - const ExPolygon* expolygon; - double max_width; - double min_width; - MedialAxis(double _max_width, double _min_width, const ExPolygon* _expolygon = NULL) - : expolygon(_expolygon), max_width(_max_width), min_width(_min_width) {}; + MedialAxis(double min_width, double max_width, const ExPolygon &expolygon); void build(ThickPolylines* polylines); void build(Polylines* polylines); private: + // Input + const ExPolygon &m_expolygon; + Lines m_lines; + // for filtering of the skeleton edges + double m_min_width; + double m_max_width; + + // Voronoi Diagram. using VD = VoronoiDiagram; - VD vd; - std::set edges, valid_edges; - std::map > thickness; + VD m_vd; + + // Annotations of the VD skeleton edges. + struct EdgeData { + bool active { false }; + double width_start { 0 }; + double width_end { 0 }; + }; + // Returns a reference to EdgeData and a "reversed" boolean. + std::pair edge_data(const VD::edge_type &edge) { + size_t edge_id = &edge - &m_vd.edges().front(); + return { m_edge_data[edge_id / 2], (edge_id & 1) != 0 }; + } + std::vector m_edge_data; + void process_edge_neighbors(const VD::edge_type* edge, ThickPolyline* polyline); bool validate_edge(const VD::edge_type* edge); - const Line& retrieve_segment(const VD::cell_type* cell) const; - const Point& retrieve_endpoint(const VD::cell_type* cell) const; }; -} } // namespace Slicer::Geometry +} // namespace Slicer::Geometry #endif // slic3r_Geometry_MedialAxis_hpp_ diff --git a/src/libslic3r/Layer.hpp b/src/libslic3r/Layer.hpp index 74a7d6291f..8a89de15af 100644 --- a/src/libslic3r/Layer.hpp +++ b/src/libslic3r/Layer.hpp @@ -5,9 +5,11 @@ #include "Flow.hpp" #include "SurfaceCollection.hpp" #include "ExtrusionEntityCollection.hpp" -#include "ExPolygonCollection.hpp" namespace Slic3r { + +class ExPolygon; +using ExPolygons = std::vector; class Layer; using LayerPtrs = std::vector; class LayerRegion; @@ -226,7 +228,7 @@ class SupportLayer : public Layer public: // Polygons covered by the supports: base, interface and contact areas. // Used to suppress retraction if moving for a support extrusion over these support_islands. - ExPolygonCollection support_islands; + ExPolygons support_islands; // Extrusion paths for the support base and for the support interface and contacts. ExtrusionEntityCollection support_fills; SupportInnerType support_type = stInnerNormal; diff --git a/src/libslic3r/Line.cpp b/src/libslic3r/Line.cpp index 3a180f7478..7e75d56322 100644 --- a/src/libslic3r/Line.cpp +++ b/src/libslic3r/Line.cpp @@ -29,7 +29,14 @@ bool Line::intersection_infinite(const Line &other, Point* point) const if (std::fabs(denom) < EPSILON) return false; double t1 = cross2(v12, v2) / denom; - *point = (a1 + t1 * v1).cast(); + Vec2d result = (a1 + t1 * v1); + if (result.x() > std::numeric_limits::max() || result.x() < std::numeric_limits::lowest() || + result.y() > std::numeric_limits::max() || result.y() < std::numeric_limits::lowest()) { + // Intersection has at least one of the coordinates much bigger (or smaller) than coord_t maximum value (or minimum). + // So it can not be stored into the Point without integer overflows. That could mean that input lines are parallel or near parallel. + return false; + } + *point = (result).cast(); return true; } @@ -84,28 +91,7 @@ bool Line::perpendicular_to(const Line& line) const bool Line::intersection(const Line &l2, Point *intersection) const { - const Line &l1 = *this; - const Vec2d v1 = (l1.b - l1.a).cast(); - const Vec2d v2 = (l2.b - l2.a).cast(); - double denom = cross2(v1, v2); - if (fabs(denom) < EPSILON) -#if 0 - // Lines are collinear. Return true if they are coincident (overlappign). - return ! (fabs(nume_a) < EPSILON && fabs(nume_b) < EPSILON); -#else - return false; -#endif - const Vec2d v12 = (l1.a - l2.a).cast(); - double nume_a = cross2(v2, v12); - double nume_b = cross2(v1, v12); - double t1 = nume_a / denom; - double t2 = nume_b / denom; - if (t1 >= 0 && t1 <= 1.0f && t2 >= 0 && t2 <= 1.0f) { - // Get the intersection point. - (*intersection) = (l1.a.cast() + t1 * v1).cast(); - return true; - } - return false; // not intersecting + return line_alg::intersection(*this, l2, intersection); } bool Line::clip_with_bbox(const BoundingBox &bbox) diff --git a/src/libslic3r/Line.hpp b/src/libslic3r/Line.hpp index 118a921355..90f5648980 100644 --- a/src/libslic3r/Line.hpp +++ b/src/libslic3r/Line.hpp @@ -179,7 +179,6 @@ public: Vector vector() const { return this->b - this->a; } Vector normal() const { return Vector((this->b(1) - this->a(1)), -(this->b(0) - this->a(0))); } bool intersection(const Line& line, Point* intersection) const; - double ccw(const Point& point) const { return point.ccw(*this); } // Clip a line with a bounding box. Returns false if the line is completely outside of the bounding box. bool clip_with_bbox(const BoundingBox &bbox); // Extend the line from both sides by an offset. @@ -238,6 +237,7 @@ public: static const constexpr int Dim = 2; using Scalar = Vec2d::Scalar; }; +using Linesf = std::vector; class Linef3 { diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 31b505379a..d7e79180e4 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -722,7 +722,7 @@ void PerimeterGenerator::process_classic() float(min_width / 2.)); // the maximum thickness of our thin wall area is equal to the minimum thickness of a single loop for (ExPolygon &ex : expp) - ex.medial_axis(ext_perimeter_width + ext_perimeter_spacing2, min_width, &thin_walls); + ex.medial_axis(min_width, ext_perimeter_width + ext_perimeter_spacing2, &thin_walls); } else { coord_t ext_perimeter_smaller_width = this->smaller_ext_perimeter_flow.scaled_width(); for (const ExPolygon& expolygon : last) { @@ -1004,7 +1004,7 @@ void PerimeterGenerator::process_classic() for (ExPolygon& ex : gaps_ex) { //BBS: Use DP simplify to avoid duplicated points and accelerate medial-axis calculation as well. ex.douglas_peucker(surface_simplify_resolution); - ex.medial_axis(max, min, &polylines); + ex.medial_axis(min, max, &polylines); } #ifdef GAPS_OF_PERIMETER_DEBUG_TO_SVG diff --git a/src/libslic3r/Polygon.cpp b/src/libslic3r/Polygon.cpp index 1ecd4537e3..aaf60bd4d3 100644 --- a/src/libslic3r/Polygon.cpp +++ b/src/libslic3r/Polygon.cpp @@ -6,6 +6,17 @@ namespace Slic3r { +double Polygon::length() const +{ + double l = 0; + if (this->points.size() > 1) { + l = (this->points.back() - this->points.front()).cast().norm(); + for (size_t i = 1; i < this->points.size(); ++ i) + l += (this->points[i] - this->points[i - 1]).cast().norm(); + } + return l; +} + Lines Polygon::lines() const { return to_lines(*this); @@ -88,36 +99,11 @@ void Polygon::douglas_peucker(double tolerance) this->points = std::move(p); } -// Does an unoriented polygon contain a point? -// Tested by counting intersections along a horizontal line. -bool Polygon::contains(const Point &point) const -{ - // http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html - bool result = false; - Points::const_iterator i = this->points.begin(); - Points::const_iterator j = this->points.end() - 1; - for (; i != this->points.end(); j = i++) { - //FIXME this test is not numerically robust. Particularly, it does not handle horizontal segments at y == point(1) well. - // Does the ray with y == point(1) intersect this line segment? -#if 1 - if ( (((*i)(1) > point(1)) != ((*j)(1) > point(1))) - && ((double)point(0) < (double)((*j)(0) - (*i)(0)) * (double)(point(1) - (*i)(1)) / (double)((*j)(1) - (*i)(1)) + (double)(*i)(0)) ) - result = !result; -#else - if (((*i)(1) > point(1)) != ((*j)(1) > point(1))) { - // Orientation predicated relative to i-th point. - double orient = (double)(point(0) - (*i)(0)) * (double)((*j)(1) - (*i)(1)) - (double)(point(1) - (*i)(1)) * (double)((*j)(0) - (*i)(0)); - if (((*i)(1) > (*j)(1)) ? (orient > 0.) : (orient < 0.)) - result = !result; - } -#endif - } - return result; -} - -// this only works on CCW polygons as CW will be ripped out by Clipper's simplify_polygons() Polygons Polygon::simplify(double tolerance) const { + // Works on CCW polygons only, CW contour will be reoriented to CCW by Clipper's simplify_polygons()! + assert(this->is_counter_clockwise()); + // repeat first point at the end in order to apply Douglas-Peucker // on the whole polygon Points points = this->points; @@ -130,13 +116,6 @@ Polygons Polygon::simplify(double tolerance) const return simplify_polygons(pp); } -void Polygon::simplify(double tolerance, Polygons &polygons) const -{ - Polygons pp = this->simplify(tolerance); - polygons.reserve(polygons.size() + pp.size()); - polygons.insert(polygons.end(), pp.begin(), pp.end()); -} - // Only call this on convex polygons or it will return invalid results void Polygon::triangulate_convex(Polygons* polygons) const { @@ -171,50 +150,114 @@ Point Polygon::centroid() const return Point(Vec2d(c / (3. * area_sum))); } -// find all concave vertices (i.e. having an internal angle greater than the supplied angle) -// (external = right side, thus we consider ccw orientation) -Points Polygon::concave_points(double angle) const +bool Polygon::intersection(const Line &line, Point *intersection) const { - Points points; - angle = 2. * PI - angle + EPSILON; - - // check whether first point forms a concave angle - if (this->points.front().ccw_angle(this->points.back(), *(this->points.begin()+1)) <= angle) - points.push_back(this->points.front()); - - // check whether points 1..(n-1) form concave angles - for (Points::const_iterator p = this->points.begin()+1; p != this->points.end()-1; ++ p) - if (p->ccw_angle(*(p-1), *(p+1)) <= angle) - points.push_back(*p); - - // check whether last point forms a concave angle - if (this->points.back().ccw_angle(*(this->points.end()-2), this->points.front()) <= angle) - points.push_back(this->points.back()); - - return points; + if (this->points.size() < 2) + return false; + if (Line(this->points.front(), this->points.back()).intersection(line, intersection)) + return true; + for (size_t i = 1; i < this->points.size(); ++ i) + if (Line(this->points[i - 1], this->points[i]).intersection(line, intersection)) + return true; + return false; } -// find all convex vertices (i.e. having an internal angle smaller than the supplied angle) -// (external = right side, thus we consider ccw orientation) -Points Polygon::convex_points(double angle) const +bool Polygon::first_intersection(const Line& line, Point* intersection) const { - Points points; - angle = 2*PI - angle - EPSILON; - - // check whether first point forms a convex angle - if (this->points.front().ccw_angle(this->points.back(), *(this->points.begin()+1)) >= angle) - points.push_back(this->points.front()); - - // check whether points 1..(n-1) form convex angles - for (Points::const_iterator p = this->points.begin()+1; p != this->points.end()-1; ++p) { - if (p->ccw_angle(*(p-1), *(p+1)) >= angle) points.push_back(*p); + if (this->points.size() < 2) + return false; + + bool found = false; + double dmin = 0.; + Line l(this->points.back(), this->points.front()); + for (size_t i = 0; i < this->points.size(); ++ i) { + l.b = this->points[i]; + Point ip; + if (l.intersection(line, &ip)) { + if (! found) { + found = true; + dmin = (line.a - ip).cast().squaredNorm(); + *intersection = ip; + } else { + double d = (line.a - ip).cast().squaredNorm(); + if (d < dmin) { + dmin = d; + *intersection = ip; + } + } + } + l.a = l.b; + } + return found; +} + +bool Polygon::intersections(const Line &line, Points *intersections) const +{ + if (this->points.size() < 2) + return false; + + size_t intersections_size = intersections->size(); + Line l(this->points.back(), this->points.front()); + for (size_t i = 0; i < this->points.size(); ++ i) { + l.b = this->points[i]; + Point intersection; + if (l.intersection(line, &intersection)) + intersections->emplace_back(std::move(intersection)); + l.a = l.b; + } + return intersections->size() > intersections_size; +} + +// Filter points from poly to the output with the help of FilterFn. +// filter function receives two vectors: +// v1: this_point - previous_point +// v2: next_point - this_point +// and returns true if the point is to be copied to the output. +template +Points filter_points_by_vectors(const Points &poly, FilterFn filter) +{ + // Last point is the first point visited. + Point p1 = poly.back(); + // Previous vector to p1. + Vec2d v1 = (p1 - *(poly.end() - 2)).cast(); + + Points out; + for (Point p2 : poly) { + // p2 is next point to the currently visited point p1. + Vec2d v2 = (p2 - p1).cast(); + if (filter(v1, v2)) + out.emplace_back(p2); + v1 = v2; + p1 = p2; } - // check whether last point forms a convex angle - if (this->points.back().ccw_angle(*(this->points.end()-2), this->points.front()) >= angle) - points.push_back(this->points.back()); - - return points; + return out; +} + +template +Points filter_convex_concave_points_by_angle_threshold(const Points &poly, double angle_threshold, ConvexConcaveFilterFn convex_concave_filter) +{ + assert(angle_threshold >= 0.); + if (angle_threshold < EPSILON) { + double cos_angle = cos(angle_threshold); + return filter_points_by_vectors(poly, [convex_concave_filter, cos_angle](const Vec2d &v1, const Vec2d &v2){ + return convex_concave_filter(v1, v2) && v1.normalized().dot(v2.normalized()) < cos_angle; + }); + } else { + return filter_points_by_vectors(poly, [convex_concave_filter](const Vec2d &v1, const Vec2d &v2){ + return convex_concave_filter(v1, v2); + }); + } +} + +Points Polygon::convex_points(double angle_threshold) const +{ + return filter_convex_concave_points_by_angle_threshold(this->points, angle_threshold, [](const Vec2d &v1, const Vec2d &v2){ return cross2(v1, v2) > 0.; }); +} + +Points Polygon::concave_points(double angle_threshold) const +{ + return filter_convex_concave_points_by_angle_threshold(this->points, angle_threshold, [](const Vec2d &v1, const Vec2d &v2){ return cross2(v1, v2) < 0.; }); } // Projection of a point onto the polygon. @@ -540,4 +583,65 @@ void remove_collinear(Polygons &polys) remove_collinear(poly); } +Polygons polygons_simplify(const Polygons &source_polygons, double tolerance) +{ + Polygons out; + out.reserve(source_polygons.size()); + for (const Polygon &source_polygon : source_polygons) { + // Run Douglas / Peucker simplification algorithm on an open polyline (by repeating the first point at the end of the polyline), + Points simplified = MultiPoint::_douglas_peucker(to_polyline(source_polygon).points, tolerance); + // then remove the last (repeated) point. + simplified.pop_back(); + // Simplify the decimated contour by ClipperLib. + bool ccw = ClipperLib::Area(simplified) > 0.; + for (Points &path : ClipperLib::SimplifyPolygons(ClipperUtils::SinglePathProvider(simplified), ClipperLib::pftNonZero)) { + if (! ccw) + // ClipperLib likely reoriented negative area contours to become positive. Reverse holes back to CW. + std::reverse(path.begin(), path.end()); + out.emplace_back(std::move(path)); + } + } + return out; } + +// Do polygons match? If they match, they must have the same topology, +// however their contours may be rotated. +bool polygons_match(const Polygon &l, const Polygon &r) +{ + if (l.size() != r.size()) + return false; + auto it_l = std::find(l.points.begin(), l.points.end(), r.points.front()); + if (it_l == l.points.end()) + return false; + auto it_r = r.points.begin(); + for (; it_l != l.points.end(); ++ it_l, ++ it_r) + if (*it_l != *it_r) + return false; + it_l = l.points.begin(); + for (; it_r != r.points.end(); ++ it_l, ++ it_r) + if (*it_l != *it_r) + return false; + return true; +} + +bool contains(const Polygon &polygon, const Point &p, bool border_result) +{ + if (const int poly_count_inside = ClipperLib::PointInPolygon(p, polygon.points); + poly_count_inside == -1) + return border_result; + else + return (poly_count_inside % 2) == 1; +} + +bool contains(const Polygons &polygons, const Point &p, bool border_result) +{ + int poly_count_inside = 0; + for (const Polygon &poly : polygons) { + const int is_inside_this_poly = ClipperLib::PointInPolygon(p, poly.points); + if (is_inside_this_poly == -1) + return border_result; + poly_count_inside += is_inside_this_poly; + } + return (poly_count_inside % 2) == 1; +} +} \ No newline at end of file diff --git a/src/libslic3r/Polygon.hpp b/src/libslic3r/Polygon.hpp index 16126f94a0..1628054855 100644 --- a/src/libslic3r/Polygon.hpp +++ b/src/libslic3r/Polygon.hpp @@ -15,11 +15,14 @@ using Polygons = std::vector; using PolygonPtrs = std::vector; using ConstPolygonPtrs = std::vector; +// Returns true if inside. Returns border_result if on boundary. +bool contains(const Polygon& polygon, const Point& p, bool border_result = true); +bool contains(const Polygons& polygons, const Point& p, bool border_result = true); + class Polygon : public MultiPoint { public: Polygon() = default; - virtual ~Polygon() = default; explicit Polygon(const Points &points) : MultiPoint(points) {} Polygon(std::initializer_list points) : MultiPoint(points) {} Polygon(const Polygon &other) : MultiPoint(other.points) {} @@ -38,9 +41,10 @@ public: const Point& operator[](Points::size_type idx) const { return this->points[idx]; } // last point == first point for polygons - const Point& last_point() const override { return this->points.front(); } + const Point& last_point() const { return this->points.front(); } - Lines lines() const override; + double length() const; + Lines lines() const; Polyline split_at_vertex(const Point &point) const; // Split a closed polygon into an open polyline, with the split point duplicated at both ends. Polyline split_at_index(int index) const; @@ -58,15 +62,26 @@ public: void douglas_peucker(double tolerance); // Does an unoriented polygon contain a point? - // Tested by counting intersections along a horizontal line. - bool contains(const Point &point) const; + bool contains(const Point &point) const { return Slic3r::contains(*this, point, true); } + // Approximate on boundary test. + bool on_boundary(const Point &point, double eps) const + { return (this->point_projection(point) - point).cast().squaredNorm() < eps * eps; } + + // Works on CCW polygons only, CW contour will be reoriented to CCW by Clipper's simplify_polygons()! Polygons simplify(double tolerance) const; - void simplify(double tolerance, Polygons &polygons) const; void densify(float min_length, std::vector* lengths = nullptr); void triangulate_convex(Polygons* polygons) const; Point centroid() const; - Points concave_points(double angle = PI) const; - Points convex_points(double angle = PI) const; + + bool intersection(const Line& line, Point* intersection) const; + bool first_intersection(const Line& line, Point* intersection) const; + bool intersections(const Line &line, Points *intersections) const; + + // Considering CCW orientation of this polygon, find all convex resp. concave points + // with the angle at the vertex larger than a threshold. + // Zero angle_threshold means to accept all convex resp. concave points. + Points convex_points(double angle_threshold = 0.) const; + Points concave_points(double angle_threshold = 0.) const; // Projection of a point onto the polygon. Point point_projection(const Point &point) const; std::vector parameter_by_length() const; @@ -136,14 +151,7 @@ inline void polygons_append(Polygons &dst, Polygons &&src) } } -inline Polygons polygons_simplify(const Polygons &polys, double tolerance) -{ - Polygons out; - out.reserve(polys.size()); - for (const Polygon &p : polys) - polygons_append(out, p.simplify(tolerance)); - return out; -} +Polygons polygons_simplify(const Polygons &polys, double tolerance); inline void polygons_rotate(Polygons &polys, double angle) { @@ -164,13 +172,16 @@ inline Points to_points(const Polygon &poly) return poly.points; } +inline size_t count_points(const Polygons &polys) { + size_t n_points = 0; + for (const auto &poly: polys) n_points += poly.points.size(); + return n_points; +} + inline Points to_points(const Polygons &polys) { - size_t n_points = 0; - for (size_t i = 0; i < polys.size(); ++ i) - n_points += polys[i].points.size(); Points points; - points.reserve(n_points); + points.reserve(count_points(polys)); for (const Polygon &poly : polys) append(points, poly.points); return points; @@ -190,11 +201,8 @@ inline Lines to_lines(const Polygon &poly) inline Lines to_lines(const Polygons &polys) { - size_t n_lines = 0; - for (size_t i = 0; i < polys.size(); ++ i) - n_lines += polys[i].points.size(); Lines lines; - lines.reserve(n_lines); + lines.reserve(count_points(polys)); for (size_t i = 0; i < polys.size(); ++ i) { const Polygon &poly = polys[i]; for (Points::const_iterator it = poly.points.begin(); it != poly.points.end()-1; ++it) @@ -204,18 +212,22 @@ inline Lines to_lines(const Polygons &polys) return lines; } -inline Polylines to_polylines(const Polygons &polys) +inline Polyline to_polyline(const Polygon &polygon) { - Polylines polylines; - polylines.assign(polys.size(), Polyline()); - size_t idx = 0; - for (Polygons::const_iterator it = polys.begin(); it != polys.end(); ++ it) { - Polyline &pl = polylines[idx ++]; - pl.points = it->points; - pl.points.push_back(it->points.front()); - } - assert(idx == polylines.size()); - return polylines; + Polyline out; + out.points.reserve(polygon.size() + 1); + out.points.assign(polygon.points.begin(), polygon.points.end()); + out.points.push_back(polygon.points.front()); + return out; +} + +inline Polylines to_polylines(const Polygons &polygons) +{ + Polylines out; + out.reserve(polygons.size()); + for (const Polygon &polygon : polygons) + out.emplace_back(to_polyline(polygon)); + return out; } inline Polylines to_polylines(Polygons &&polys) @@ -223,10 +235,10 @@ inline Polylines to_polylines(Polygons &&polys) Polylines polylines; polylines.assign(polys.size(), Polyline()); size_t idx = 0; - for (Polygons::const_iterator it = polys.begin(); it != polys.end(); ++ it) { + for (auto it = polys.begin(); it != polys.end(); ++ it) { Polyline &pl = polylines[idx ++]; pl.points = std::move(it->points); - pl.points.push_back(it->points.front()); + pl.points.push_back(pl.points.front()); } assert(idx == polylines.size()); return polylines; @@ -245,11 +257,14 @@ inline Polygons to_polygons(std::vector &&paths) { Polygons out; out.reserve(paths.size()); - for (const Points &path : paths) + for (Points &path : paths) out.emplace_back(std::move(path)); return out; } +// Do polygons match? If they match, they must have the same topology, +// however their contours may be rotated. +bool polygons_match(const Polygon &l, const Polygon &r); } // Slic3r // start Boost diff --git a/src/libslic3r/Polyline.cpp b/src/libslic3r/Polyline.cpp index df28742360..383e36604a 100644 --- a/src/libslic3r/Polyline.cpp +++ b/src/libslic3r/Polyline.cpp @@ -2,7 +2,6 @@ #include "Polyline.hpp" #include "Exception.hpp" #include "ExPolygon.hpp" -#include "ExPolygonCollection.hpp" #include "Line.hpp" #include "Polygon.hpp" #include diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index de7e40cda4..6eb2b068e5 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -2874,7 +2874,7 @@ void extract_support_layer(const json& support_layer_json, SupportLayer& support ExPolygon polygon; polygon = support_layer_json[JSON_SUPPORT_LAYER_ISLANDS][islands_index]; - support_layer.support_islands.expolygons.push_back(std::move(polygon)); + support_layer.support_islands.push_back(std::move(polygon)); } //support_fills @@ -3009,7 +3009,7 @@ int Print::export_cached_data(const std::string& directory, bool with_space) support_layer_json[JSON_SUPPORT_LAYER_TYPE] = support_layer->support_type; //support_islands - for (const ExPolygon& support_island : support_layer->support_islands.expolygons) { + for (const ExPolygon& support_island : support_layer->support_islands) { json support_island_json = support_island; support_islands_json.push_back(std::move(support_island_json)); } diff --git a/src/libslic3r/SLA/Pad.cpp b/src/libslic3r/SLA/Pad.cpp index 1e5de51589..447a416341 100644 --- a/src/libslic3r/SLA/Pad.cpp +++ b/src/libslic3r/SLA/Pad.cpp @@ -204,7 +204,7 @@ public: void add(const ExPolygon &ep) { m_polys.emplace_back(ep); - m_index.insert(BoundingBox{ep}, unsigned(m_index.size())); + m_index.insert(get_extents(ep), unsigned(m_index.size())); } // Check an arbitrary polygon for intersection with the indexed polygons diff --git a/src/libslic3r/SLA/SupportPointGenerator.cpp b/src/libslic3r/SLA/SupportPointGenerator.cpp index c32da04319..c7a1b65c6b 100644 --- a/src/libslic3r/SLA/SupportPointGenerator.cpp +++ b/src/libslic3r/SLA/SupportPointGenerator.cpp @@ -4,6 +4,7 @@ #include #include "SupportPointGenerator.hpp" +#include "Geometry/ConvexHull.hpp" #include "Concurrency.hpp" #include "Model.hpp" #include "ExPolygon.hpp" @@ -11,7 +12,6 @@ #include "Point.hpp" #include "ClipperUtils.hpp" #include "Tesselate.hpp" -#include "ExPolygonCollection.hpp" #include "MinAreaBoundingBox.hpp" #include "libslic3r.h" @@ -550,7 +550,7 @@ void SupportPointGenerator::uniformly_cover(const ExPolygons& islands, Structure // auto bb = get_extents(islands); if (flags & icfIsNew) { - auto chull = ExPolygonCollection{islands}.convex_hull(); + auto chull = Geometry::convex_hull(islands); auto rotbox = MinAreaBoundigBox{chull, MinAreaBoundigBox::pcConvex}; Vec2d bbdim = {unscaled(rotbox.width()), unscaled(rotbox.height())}; diff --git a/src/libslic3r/SVG.cpp b/src/libslic3r/SVG.cpp index 51c7c7ff3f..c951380f63 100644 --- a/src/libslic3r/SVG.cpp +++ b/src/libslic3r/SVG.cpp @@ -88,10 +88,8 @@ void SVG::draw(const ExPolygon &expolygon, std::string fill, const float fill_op this->fill = fill; std::string d; - Polygons pp = expolygon; - for (Polygons::const_iterator p = pp.begin(); p != pp.end(); ++p) { - d += this->get_path_d(*p, true) + " "; - } + for (const Polygon &p : to_polygons(expolygon)) + d += this->get_path_d(p, true) + " "; this->path(d, true, 0, fill_opacity); } @@ -392,7 +390,7 @@ void SVG::export_expolygons(const char *path, const std::vector 0) for (const ExPolygon &expoly : exp_with_attr.first) - svg.draw((Points)expoly, exp_with_attr.second.color_points, exp_with_attr.second.radius_points); + svg.draw(to_points(expoly), exp_with_attr.second.color_points, exp_with_attr.second.radius_points); // Export legend. // 1st row diff --git a/src/libslic3r/SupportMaterial.cpp b/src/libslic3r/SupportMaterial.cpp index 0e7a85ad3b..e7deaa26a2 100644 --- a/src/libslic3r/SupportMaterial.cpp +++ b/src/libslic3r/SupportMaterial.cpp @@ -4670,7 +4670,7 @@ void PrintObjectSupportMaterial::generate_toolpaths( std::stable_sort(layer_cache_item.overlapping.begin(), layer_cache_item.overlapping.end(), [](auto *l1, auto *l2) { return *l1 < *l2; }); } if (! polys.empty()) - expolygons_append(support_layer.support_islands.expolygons, union_ex(polys)); + expolygons_append(support_layer.support_islands, union_ex(polys)); } // for each support_layer_id }); diff --git a/src/libslic3r/SurfaceCollection.cpp b/src/libslic3r/SurfaceCollection.cpp index ec847d2a3f..f2f0b3f97e 100644 --- a/src/libslic3r/SurfaceCollection.cpp +++ b/src/libslic3r/SurfaceCollection.cpp @@ -67,12 +67,9 @@ SurfacesPtr SurfaceCollection::filter_by_types(const SurfaceType *types, int nty void SurfaceCollection::filter_by_type(SurfaceType type, Polygons* polygons) { - for (Surfaces::iterator surface = this->surfaces.begin(); surface != this->surfaces.end(); ++surface) { - if (surface->surface_type == type) { - Polygons pp = surface->expolygon; - polygons->insert(polygons->end(), pp.begin(), pp.end()); - } - } + for (const Surface &surface : this->surfaces) + if (surface.surface_type == type) + polygons_append(*polygons, to_polygons(surface.expolygon)); } void SurfaceCollection::keep_type(const SurfaceType type) diff --git a/src/libslic3r/TreeSupport.cpp b/src/libslic3r/TreeSupport.cpp index e1606a4b75..5d5479b1a6 100644 --- a/src/libslic3r/TreeSupport.cpp +++ b/src/libslic3r/TreeSupport.cpp @@ -2244,7 +2244,7 @@ void TreeSupport::draw_circles(const std::vector>& contact_no if (SQUARE_SUPPORT) { // simplify support contours ExPolygons base_areas_simplified; - for (auto &area : base_areas) { area.simplify(scale_(line_width / 2), &base_areas_simplified, SimplifyMethodDP); } + for (auto &area : base_areas) { area.simplify(scale_(line_width / 2), &base_areas_simplified); } base_areas = std::move(base_areas_simplified); } //Subtract support floors. We can only compute floor_areas here instead of with roof_areas, @@ -2337,7 +2337,8 @@ void TreeSupport::draw_circles(const std::vector>& contact_no { Polygon rev_hole = hole; rev_hole.make_counter_clockwise(); - ExPolygons ex_hole = to_expolygons(ExPolygon(rev_hole)); + ExPolygons ex_hole; + ex_hole.emplace_back(std::move(ExPolygon(rev_hole))); for (auto& other_area : base_areas) //if (&other_area != &base_area) ex_hole = std::move(diff_ex(ex_hole, other_area)); diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 266a170f09..073c0c796c 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -3977,7 +3977,7 @@ void PartPlateList::postprocess_arrange_polygon(arrangement::ArrangePolygon& arr { // outarea for large object arrange_polygon.bed_idx = m_plate_list.size(); - BoundingBox apbox(arrange_polygon.poly); + BoundingBox apbox = get_extents(arrange_polygon.poly); auto apbox_size = apbox.size(); //arrange_polygon.translation(X) = scaled(0.5 * plate_stride_x()); From 223291452b9577bf13ca4b3d29a960233e704d34 Mon Sep 17 00:00:00 2001 From: "zorro.zhang" Date: Mon, 6 Mar 2023 20:03:34 +0800 Subject: [PATCH 074/339] FIX: Some bug in modelinfo webpage Change-Id: I182fd0006f92975018012cb52a7093373153f80e (cherry picked from commit c8341df9b548c0eed8769cb6b6dc80aab10b8827) --- resources/web/model/css/dark.css | 8 ++++++++ resources/web/model/index.html | 6 +++--- resources/web/model/model.css | 23 ++++++++++++++++++++++- resources/web/model/model.js | 19 ++++++++++++------- 4 files changed, 45 insertions(+), 11 deletions(-) diff --git a/resources/web/model/css/dark.css b/resources/web/model/css/dark.css index 08e5baf817..52cd4df2db 100644 --- a/resources/web/model/css/dark.css +++ b/resources/web/model/css/dark.css @@ -4,6 +4,14 @@ body color: #B3B3B5; } +.ZScrol::-webkit-scrollbar-thumb {/*滚动条里面小方块*/ + background-color: #939594; +} + +.ZScrol::-webkit-scrollbar-track {/*滚动条里面轨道*/ + background: #161817; +} + #EmptyArea img { content:url(../img/null2.png); diff --git a/resources/web/model/index.html b/resources/web/model/index.html index d2e3f894a3..37933f60b2 100644 --- a/resources/web/model/index.html +++ b/resources/web/model/index.html @@ -31,7 +31,7 @@
 
-
+
Model Information @@ -46,12 +46,12 @@
-
+
Model name:xxxxxxxxxx
-
Model Author:xxxxxxx
+
Model Author:xxxxxxx
diff --git a/resources/web/model/model.css b/resources/web/model/model.css index fba044b35d..6f7d3b92ac 100644 --- a/resources/web/model/model.css +++ b/resources/web/model/model.css @@ -44,6 +44,27 @@ body display: none; } +.ZScrol::-webkit-scrollbar {/*滚动条整体样式*/ + width: 8px; /*高宽分别对应横竖滚动条的尺寸*/ + height: 8px; + padding: 2px; +} + +.ZScrol::-webkit-scrollbar-thumb {/*滚动条里面小方块*/ + border-radius: 6px; + -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2); + box-shadow: inset 0 0 5px rgba(0,0,0,0.2); + background-color: #AAAAAA; +} + +.ZScrol::-webkit-scrollbar-track {/*滚动条里面轨道*/ + -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2); + box-shadow: inset 0 0 5px rgba(0,0,0,0.2); + border-radius: 10px; + background: #EDEDED; +} + + .TopBottomBar { height: 24px; @@ -51,7 +72,7 @@ body .FloorBottomBar { - height: 300px; + height: 100px; } diff --git a/resources/web/model/model.js b/resources/web/model/model.js index fc6135d10b..caa91d29d5 100644 --- a/resources/web/model/model.js +++ b/resources/web/model/model.js @@ -203,7 +203,7 @@ function ShowModelInfo( pModel ) //==========Model Info========== let sModelName=decodeURIComponent(pModel.name); let sModelAuthor=decodeURIComponent(pModel.author); - let UploadType=pModel.upload_type.toUpperCase(); + let UploadType=pModel.upload_type.toLowerCase(); let sLicence=pModel.license.toUpperCase(); let sModelDesc=decodeURIComponent(pModel.description); @@ -215,15 +215,15 @@ function ShowModelInfo( pModel ) switch(UploadType) { case 'remix': - $('#ModelAthorType').attr('tid','t93'); + $('#ModelAuthorType').attr('tid','t93'); break; case 'shared': - $('#ModelAthorType').attr('tid','t94'); + $('#ModelAuthorType').attr('tid','t94'); break; case 'origin': case 'profile': default: - $('#ModelAthorType').attr('tid','t92'); + $('#ModelAuthorType').attr('tid','t92'); break; } @@ -329,11 +329,11 @@ function ShowModelInfo( pModel ) }); } - + $('#Model_Preview_Image').show(); } else { - $('#ModelPreviewList').hide(); + $('#Model_Preview_Image').hide(); } } @@ -465,6 +465,9 @@ function ConstructFileHtml( ID, pItem ) } $('#'+ID+' .FileListBoard').html(strHtml); + + if( fTotal>0 ) + $('#'+ID).show(); } @@ -543,10 +546,12 @@ function ShowProfilelInfo( pProfile ) } }); } + + $('#Profile_Preview_Image').show(); } else { - $('#ProfilePreviewList').hide(); + $('#Profile_Preview_Image').hide(); } } From 03e031fe5c5ce965fc55b388b28006f8fe8e9208 Mon Sep 17 00:00:00 2001 From: "salt.wei" Date: Mon, 13 Mar 2023 19:45:35 +0800 Subject: [PATCH 075/339] ENH: fix hang issue for archimedean chords pattern This is fix for STUDIO-2079 that slicer may hang when generated archimedean chords pattern lines. Thanks prusa. Signed-off-by: salt.wei Change-Id: I923c1ef48f093b2ab9576cb04beb4787c903ca00 --- src/libslic3r/ClipperUtils.cpp | 2 + src/libslic3r/ClipperUtils.hpp | 3 +- src/libslic3r/Fill/FillPlanePath.cpp | 205 ++++++++++++++++++++------- src/libslic3r/Fill/FillPlanePath.hpp | 39 +++-- 4 files changed, 186 insertions(+), 63 deletions(-) diff --git a/src/libslic3r/ClipperUtils.cpp b/src/libslic3r/ClipperUtils.cpp index d9aa9e7c9e..bbe98890b0 100644 --- a/src/libslic3r/ClipperUtils.cpp +++ b/src/libslic3r/ClipperUtils.cpp @@ -867,6 +867,8 @@ Slic3r::Polylines diff_pl(const Slic3r::Polygons &subject, const Slic3r::Polygon { return _clipper_pl_closed(ClipperLib::ctDifference, ClipperUtils::PolygonsProvider(subject), ClipperUtils::PolygonsProvider(clip)); } Slic3r::Polylines intersection_pl(const Slic3r::Polylines &subject, const Slic3r::Polygon &clip) { return _clipper_pl_open(ClipperLib::ctIntersection, ClipperUtils::PolylinesProvider(subject), ClipperUtils::SinglePathProvider(clip.points)); } +Slic3r::Polylines intersection_pl(const Slic3r::Polyline &subject, const Slic3r::ExPolygon &clip) + { return _clipper_pl_open(ClipperLib::ctIntersection, ClipperUtils::SinglePathProvider(subject.points), ClipperUtils::ExPolygonProvider(clip)); } Slic3r::Polylines intersection_pl(const Slic3r::Polylines &subject, const Slic3r::ExPolygon &clip) { return _clipper_pl_open(ClipperLib::ctIntersection, ClipperUtils::PolylinesProvider(subject), ClipperUtils::ExPolygonProvider(clip)); } Slic3r::Polylines intersection_pl(const Slic3r::Polyline &subject, const Slic3r::Polygons &clip) diff --git a/src/libslic3r/ClipperUtils.hpp b/src/libslic3r/ClipperUtils.hpp index 8fd9782f83..aa9a73dd26 100644 --- a/src/libslic3r/ClipperUtils.hpp +++ b/src/libslic3r/ClipperUtils.hpp @@ -494,7 +494,8 @@ Slic3r::ExPolygons intersection_ex(const Slic3r::Surfaces &subject, const Slic3r Slic3r::ExPolygons intersection_ex(const Slic3r::Surfaces &subject, const Slic3r::Surfaces &clip, ApplySafetyOffset do_safety_offset = ApplySafetyOffset::No); Slic3r::ExPolygons intersection_ex(const Slic3r::SurfacesPtr &subject, const Slic3r::ExPolygons &clip, ApplySafetyOffset do_safety_offset = ApplySafetyOffset::No); Slic3r::Polylines intersection_pl(const Slic3r::Polylines &subject, const Slic3r::Polygon &clip); -Slic3r::Polylines intersection_pl(const Slic3r::Polylines& subject, const Slic3r::ExPolygon& clip); +Slic3r::Polylines intersection_pl(const Slic3r::Polyline &subject, const Slic3r::ExPolygon &clip); +Slic3r::Polylines intersection_pl(const Slic3r::Polylines &subject, const Slic3r::ExPolygon &clip); Slic3r::Polylines intersection_pl(const Slic3r::Polyline &subject, const Slic3r::Polygons &clip); Slic3r::Polylines intersection_pl(const Slic3r::Polylines &subject, const Slic3r::Polygons &clip); Slic3r::Polylines intersection_pl(const Slic3r::Polylines &subject, const Slic3r::ExPolygons &clip); diff --git a/src/libslic3r/Fill/FillPlanePath.cpp b/src/libslic3r/Fill/FillPlanePath.cpp index 49b02b5428..b867ee83a0 100644 --- a/src/libslic3r/Fill/FillPlanePath.cpp +++ b/src/libslic3r/Fill/FillPlanePath.cpp @@ -6,6 +6,66 @@ namespace Slic3r { +class InfillPolylineClipper : public InfillPolylineOutput { +public: + InfillPolylineClipper(const BoundingBox bbox, const double scale_out) : InfillPolylineOutput(scale_out), m_bbox(bbox) {} + + void add_point(const Vec2d &pt); + Points&& result() { return std::move(m_out); } + bool clips() const override { return true; } + +private: + enum class Side { + Left = 1, + Right = 2, + Top = 4, + Bottom = 8 + }; + + int sides(const Point &p) const { + return int(p.x() < m_bbox.min.x()) * int(Side::Left) + + int(p.x() > m_bbox.max.x()) * int(Side::Right) + + int(p.y() < m_bbox.min.y()) * int(Side::Bottom) + + int(p.y() > m_bbox.max.y()) * int(Side::Top); + }; + + // Bounding box to clip the polyline with. + BoundingBox m_bbox; + + // Classification of the two last points processed. + int m_sides_prev; + int m_sides_this; +}; + +void InfillPolylineClipper::add_point(const Vec2d &fpt) +{ + const Point pt{ this->scaled(fpt) }; + + if (m_out.size() < 2) { + // Collect the two first points and their status. + (m_out.empty() ? m_sides_prev : m_sides_this) = sides(pt); + m_out.emplace_back(pt); + } else { + // Classify the last inserted point, possibly remove it. + int sides_next = sides(pt); + if (// This point is inside. Take it. + m_sides_this == 0 || + // Either this point is outside and previous or next is inside, or + // the edge possibly cuts corner of the bounding box. + (m_sides_prev & m_sides_this & sides_next) == 0) { + // Keep the last point. + m_sides_prev = m_sides_this; + } else { + // All the three points (this, prev, next) are outside at the same side. + // Ignore the last point. + m_out.pop_back(); + } + // And save the current point. + m_out.emplace_back(pt); + m_sides_this = sides_next; + } +} + void FillPlanePath::_fill_surface_single( const FillParams ¶ms, unsigned int thickness_layers, @@ -13,37 +73,52 @@ void FillPlanePath::_fill_surface_single( ExPolygon expolygon, Polylines &polylines_out) { - expolygon.rotate(- direction.first); + expolygon.rotate(-direction.first); - coord_t distance_between_lines = coord_t(scale_(this->spacing) / params.density); - - // align infill across layers using the object's bounding box - // Rotated bounding box of the whole object. - BoundingBox bounding_box = this->bounding_box.rotated(- direction.first); - - Point shift = this->_centered() ? + //FIXME Vojtech: We are not sure whether the user expects the fill patterns on visible surfaces to be aligned across all the islands of a single layer. + // One may align for this->centered() to align the patterns for Archimedean Chords and Octagram Spiral patterns. + const bool align = params.density < 0.995; + + BoundingBox snug_bounding_box = get_extents(expolygon).inflated(SCALED_EPSILON); + + // Rotated bounding box of the area to fill in with the pattern. + BoundingBox bounding_box = align ? + // Sparse infill needs to be aligned across layers. Align infill across layers using the object's bounding box. + this->bounding_box.rotated(-direction.first) : + // Solid infill does not need to be aligned across layers, generate the infill pattern + // around the clipping expolygon only. + snug_bounding_box; + + Point shift = this->centered() ? bounding_box.center() : bounding_box.min; expolygon.translate(-shift.x(), -shift.y()); bounding_box.translate(-shift.x(), -shift.y()); - Pointfs pts = _generate( - coord_t(ceil(coordf_t(bounding_box.min.x()) / distance_between_lines)), - coord_t(ceil(coordf_t(bounding_box.min.y()) / distance_between_lines)), - coord_t(ceil(coordf_t(bounding_box.max.x()) / distance_between_lines)), - coord_t(ceil(coordf_t(bounding_box.max.y()) / distance_between_lines)), - params.resolution); + Polyline polyline; + { + auto distance_between_lines = scaled(this->spacing) / params.density; + auto min_x = coord_t(ceil(coordf_t(bounding_box.min.x()) / distance_between_lines)); + auto min_y = coord_t(ceil(coordf_t(bounding_box.min.y()) / distance_between_lines)); + auto max_x = coord_t(ceil(coordf_t(bounding_box.max.x()) / distance_between_lines)); + auto max_y = coord_t(ceil(coordf_t(bounding_box.max.y()) / distance_between_lines)); + auto resolution = scaled(params.resolution) / distance_between_lines; + if (align) { + // Filling in a bounding box over the whole object, clip generated polyline against the snug bounding box. + snug_bounding_box.translate(-shift.x(), -shift.y()); + InfillPolylineClipper output(snug_bounding_box, distance_between_lines); + this->generate(min_x, min_y, max_x, max_y, resolution, output); + polyline.points = std::move(output.result()); + } else { + // Filling in a snug bounding box, no need to clip. + InfillPolylineOutput output(distance_between_lines); + this->generate(min_x, min_y, max_x, max_y, resolution, output); + polyline.points = std::move(output.result()); + } + } - if (pts.size() >= 2) { - // Convert points to a polyline, upscale. - Polylines polylines(1, Polyline()); - Polyline &polyline = polylines.front(); - polyline.points.reserve(pts.size()); - for (const Vec2d &pt : pts) - polyline.points.emplace_back( - coord_t(floor(pt.x() * distance_between_lines + 0.5)), - coord_t(floor(pt.y() * distance_between_lines + 0.5))); - polylines = intersection_pl(polylines, expolygon); + if (polyline.size() >= 2) { + Polylines polylines = intersection_pl(polyline, expolygon); Polylines chained; if (params.dont_connect() || params.density > 0.5 || polylines.size() <= 1) chained = chain_polylines(std::move(polylines)); @@ -59,7 +134,8 @@ void FillPlanePath::_fill_surface_single( } // Follow an Archimedean spiral, in polar coordinates: r=a+b\theta -Pointfs FillArchimedeanChords::_generate(coord_t min_x, coord_t min_y, coord_t max_x, coord_t max_y, const double resolution) +template +static void generate_archimedean_chords(coord_t min_x, coord_t min_y, coord_t max_x, coord_t max_y, const double resolution, Output &output) { // Radius to achieve. coordf_t rmax = std::sqrt(coordf_t(max_x)*coordf_t(max_x)+coordf_t(max_y)*coordf_t(max_y)) * std::sqrt(2.) + 1.5; @@ -70,15 +146,22 @@ Pointfs FillArchimedeanChords::_generate(coord_t min_x, coord_t min_y, coord_t m coordf_t r = 1; Pointfs out; //FIXME Vojtech: If used as a solid infill, there is a gap left at the center. - out.emplace_back(0, 0); - out.emplace_back(1, 0); + output.add_point({ 0, 0 }); + output.add_point({ 1, 0 }); while (r < rmax) { // Discretization angle to achieve a discretization error lower than resolution. theta += 2. * acos(1. - resolution / r); r = a + b * theta; - out.emplace_back(r * cos(theta), r * sin(theta)); + output.add_point({ r * cos(theta), r * sin(theta) }); } - return out; +} + +void FillArchimedeanChords::generate(coord_t min_x, coord_t min_y, coord_t max_x, coord_t max_y, const double resolution, InfillPolylineOutput &output) +{ + if (output.clips()) + generate_archimedean_chords(min_x, min_y, max_x, max_y, resolution, static_cast(output)); + else + generate_archimedean_chords(min_x, min_y, max_x, max_y, resolution, output); } // Adapted from @@ -126,7 +209,8 @@ static inline Point hilbert_n_to_xy(const size_t n) return Point(x, y); } -Pointfs FillHilbertCurve::_generate(coord_t min_x, coord_t min_y, coord_t max_x, coord_t max_y, const double /* resolution */) +template +static void generate_hilbert_curve(coord_t min_x, coord_t min_y, coord_t max_x, coord_t max_y, Output &output) { // Minimum power of two square to fit the domain. size_t sz = 2; @@ -140,46 +224,59 @@ Pointfs FillHilbertCurve::_generate(coord_t min_x, coord_t min_y, coord_t max_x, } size_t sz2 = sz * sz; - Pointfs line; - line.reserve(sz2); + output.reserve(sz2); for (size_t i = 0; i < sz2; ++ i) { Point p = hilbert_n_to_xy(i); - line.emplace_back(p.x() + min_x, p.y() + min_y); + output.add_point({ p.x() + min_x, p.y() + min_y }); } - return line; } -Pointfs FillOctagramSpiral::_generate(coord_t min_x, coord_t min_y, coord_t max_x, coord_t max_y, const double /* resolution */) +void FillHilbertCurve::generate(coord_t min_x, coord_t min_y, coord_t max_x, coord_t max_y, const double /* resolution */, InfillPolylineOutput &output) +{ + if (output.clips()) + generate_hilbert_curve(min_x, min_y, max_x, max_y, static_cast(output)); + else + generate_hilbert_curve(min_x, min_y, max_x, max_y, output); +} + +template +static void generate_octagram_spiral(coord_t min_x, coord_t min_y, coord_t max_x, coord_t max_y, Output &output) { // Radius to achieve. coordf_t rmax = std::sqrt(coordf_t(max_x)*coordf_t(max_x)+coordf_t(max_y)*coordf_t(max_y)) * std::sqrt(2.) + 1.5; // Now unwind the spiral. coordf_t r = 0; coordf_t r_inc = sqrt(2.); - Pointfs out; - out.emplace_back(0., 0.); + output.add_point({ 0., 0. }); while (r < rmax) { r += r_inc; coordf_t rx = r / sqrt(2.); coordf_t r2 = r + rx; - out.emplace_back( r, 0.); - out.emplace_back( r2, rx); - out.emplace_back( rx, rx); - out.emplace_back( rx, r2); - out.emplace_back( 0., r); - out.emplace_back(-rx, r2); - out.emplace_back(-rx, rx); - out.emplace_back(-r2, rx); - out.emplace_back(- r, 0.); - out.emplace_back(-r2, -rx); - out.emplace_back(-rx, -rx); - out.emplace_back(-rx, -r2); - out.emplace_back( 0., -r); - out.emplace_back( rx, -r2); - out.emplace_back( rx, -rx); - out.emplace_back( r2+r_inc, -rx); + output.add_point({ r, 0. }); + output.add_point({ r2, rx }); + output.add_point({ rx, rx }); + output.add_point({ rx, r2 }); + output.add_point({ 0., r }); + output.add_point({-rx, r2 }); + output.add_point({-rx, rx }); + output.add_point({-r2, rx }); + output.add_point({- r, 0. }); + output.add_point({-r2, -rx }); + output.add_point({-rx, -rx }); + output.add_point({-rx, -r2 }); + output.add_point({ 0., -r }); + output.add_point({ rx, -r2 }); + output.add_point({ rx, -rx }); + output.add_point({ r2+r_inc, -rx }); } - return out; +} + +void FillOctagramSpiral::generate(coord_t min_x, coord_t min_y, coord_t max_x, coord_t max_y, const double /* resolution */, InfillPolylineOutput &output) +{ + if (output.clips()) + generate_octagram_spiral(min_x, min_y, max_x, max_y, static_cast(output)); + else + generate_octagram_spiral(min_x, min_y, max_x, max_y, output); } } // namespace Slic3r diff --git a/src/libslic3r/Fill/FillPlanePath.hpp b/src/libslic3r/Fill/FillPlanePath.hpp index 075f174336..f05f3209aa 100644 --- a/src/libslic3r/Fill/FillPlanePath.hpp +++ b/src/libslic3r/Fill/FillPlanePath.hpp @@ -13,6 +13,26 @@ namespace Slic3r { // http://user42.tuxfamily.org/math-planepath/ // http://user42.tuxfamily.org/math-planepath/gallery.html +class InfillPolylineOutput { +public: + InfillPolylineOutput(const double scale_out) : m_scale_out(scale_out) {} + + void reserve(size_t n) { m_out.reserve(n); } + void add_point(const Vec2d& pt) { m_out.emplace_back(this->scaled(pt)); } + Points&& result() { return std::move(m_out); } + virtual bool clips() const { return false; } + +protected: + const Point scaled(const Vec2d& fpt) const { return { coord_t(floor(fpt.x() * m_scale_out + 0.5)), coord_t(floor(fpt.y() * m_scale_out + 0.5)) }; } + + // Output polyline. + Points m_out; + +private: + // Scaling coefficient of the generated points before tested against m_bbox and clipped by bbox. + double m_scale_out; +}; + class FillPlanePath : public Fill { public: @@ -27,8 +47,11 @@ protected: Polylines &polylines_out) override; float _layer_angle(size_t idx) const override { return 0.f; } - virtual bool _centered() const = 0; - virtual Pointfs _generate(coord_t min_x, coord_t min_y, coord_t max_x, coord_t max_y, const double resolution) = 0; + virtual bool centered() const = 0; + + friend class InfillPolylineClipper; + + virtual void generate(coord_t min_x, coord_t min_y, coord_t max_x, coord_t max_y, const double resolution, InfillPolylineOutput &output) = 0; }; class FillArchimedeanChords : public FillPlanePath @@ -38,8 +61,8 @@ public: ~FillArchimedeanChords() override = default; protected: - bool _centered() const override { return true; } - Pointfs _generate(coord_t min_x, coord_t min_y, coord_t max_x, coord_t max_y, const double resolution) override; + bool centered() const override { return true; } + void generate(coord_t min_x, coord_t min_y, coord_t max_x, coord_t max_y, const double resolution, InfillPolylineOutput &output) override; }; class FillHilbertCurve : public FillPlanePath @@ -49,8 +72,8 @@ public: ~FillHilbertCurve() override = default; protected: - bool _centered() const override { return false; } - Pointfs _generate(coord_t min_x, coord_t min_y, coord_t max_x, coord_t max_y, const double resolution) override; + bool centered() const override { return false; } + void generate(coord_t min_x, coord_t min_y, coord_t max_x, coord_t max_y, const double resolution, InfillPolylineOutput &output) override; }; class FillOctagramSpiral : public FillPlanePath @@ -60,8 +83,8 @@ public: ~FillOctagramSpiral() override = default; protected: - bool _centered() const override { return true; } - Pointfs _generate(coord_t min_x, coord_t min_y, coord_t max_x, coord_t max_y, const double resolution) override; + bool centered() const override { return true; } + void generate(coord_t min_x, coord_t min_y, coord_t max_x, coord_t max_y, const double resolution, InfillPolylineOutput &output) override; }; } // namespace Slic3r From 9f71a8c5dd76857ecbcff68ca270cfc3f0c5e632 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Tue, 14 Mar 2023 19:27:56 +0800 Subject: [PATCH 076/339] FIX: fix third-party login Change-Id: Ib4699ecec1a6c72a9bc4967751d07b75f6b52d3a Signed-off-by: Stone Li --- src/slic3r/GUI/HttpServer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/HttpServer.cpp b/src/slic3r/GUI/HttpServer.cpp index 1c2c27f1dd..44b6ffa4ea 100644 --- a/src/slic3r/GUI/HttpServer.cpp +++ b/src/slic3r/GUI/HttpServer.cpp @@ -48,8 +48,8 @@ std::string http_headers::get_response() std::string user_avatar; try { json user_j = json::parse(http_body); - if (user_j.contains("uid")) - user_id = std::to_string(user_j["uid"].get()); + if (user_j.contains("uidStr")) + user_id = user_j["uidStr"].get(); if (user_j.contains("name")) user_name = user_j["name"].get(); if (user_j.contains("avatar")) From cd4cddfca43697994267a40c4b05e0d2f70c18e2 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Tue, 14 Mar 2023 10:42:42 +0800 Subject: [PATCH 077/339] ENH: Cut optimization, support for custom connectors Change-Id: I65163314374fb74f0b16df47dacae82caa6fab0d (cherry picked from commit 7bacc2c2a89be471f6fee51dd07a42222a28b55a) --- resources/images/collapse_btn.svg | 12 + resources/images/cut_.svg | 26 + resources/images/cut_connectors.svg | 20 + resources/images/expand_btn.svg | 13 + resources/images/revert_btn.svg | 12 + resources/shaders/gouraud_light_uniform.fs | 14 + resources/shaders/gouraud_light_uniform.vs | 45 + src/imgui/imconfig.h | 4 + src/libslic3r/Format/bbs_3mf.cpp | 157 +- src/libslic3r/Geometry.cpp | 14 + src/libslic3r/Geometry.hpp | 9 + src/libslic3r/Model.cpp | 559 +++++- src/libslic3r/Model.hpp | 149 +- src/libslic3r/ObjectID.hpp | 64 +- src/libslic3r/Point.hpp | 3 + src/libslic3r/TriangleMesh.cpp | 55 + src/libslic3r/TriangleMesh.hpp | 1 + src/slic3r/CMakeLists.txt | 2 + src/slic3r/GUI/CameraUtils.cpp | 131 ++ src/slic3r/GUI/CameraUtils.hpp | 69 + src/slic3r/GUI/GLCanvas3D.cpp | 10 + src/slic3r/GUI/GLShadersManager.cpp | 4 + src/slic3r/GUI/GUI_Factories.cpp | 15 + src/slic3r/GUI/GUI_Factories.hpp | 2 + src/slic3r/GUI/GUI_ObjectList.cpp | 507 ++++- src/slic3r/GUI/GUI_ObjectList.hpp | 18 +- src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp | 1749 +++++++++++++++--- src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.hpp | 129 +- src/slic3r/GUI/Gizmos/GLGizmoBase.hpp | 2 + src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp | 2 +- src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp | 4 +- src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp | 10 + src/slic3r/GUI/Gizmos/GLGizmoScale.cpp | 10 +- src/slic3r/GUI/Gizmos/GLGizmoScale.hpp | 1 + src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp | 2 +- src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp | 19 + src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp | 4 + src/slic3r/GUI/Gizmos/GLGizmosManager.cpp | 34 +- src/slic3r/GUI/Gizmos/GLGizmosManager.hpp | 3 +- src/slic3r/GUI/ImGuiWrapper.cpp | 35 + src/slic3r/GUI/ImGuiWrapper.hpp | 2 + src/slic3r/GUI/MeshUtils.cpp | 36 + src/slic3r/GUI/MeshUtils.hpp | 18 + src/slic3r/GUI/MsgDialog.cpp | 2 +- src/slic3r/GUI/NotificationManager.cpp | 1 + src/slic3r/GUI/ObjectDataViewModel.cpp | 66 +- src/slic3r/GUI/ObjectDataViewModel.hpp | 12 +- src/slic3r/GUI/Plater.cpp | 59 +- src/slic3r/GUI/Plater.hpp | 2 +- src/slic3r/GUI/Widgets/Button.cpp | 8 +- src/slic3r/GUI/Widgets/Button.hpp | 4 +- 51 files changed, 3663 insertions(+), 466 deletions(-) create mode 100644 resources/images/collapse_btn.svg create mode 100644 resources/images/cut_.svg create mode 100644 resources/images/cut_connectors.svg create mode 100644 resources/images/expand_btn.svg create mode 100644 resources/images/revert_btn.svg create mode 100644 resources/shaders/gouraud_light_uniform.fs create mode 100644 resources/shaders/gouraud_light_uniform.vs create mode 100644 src/slic3r/GUI/CameraUtils.cpp create mode 100644 src/slic3r/GUI/CameraUtils.hpp diff --git a/resources/images/collapse_btn.svg b/resources/images/collapse_btn.svg new file mode 100644 index 0000000000..32d7f99595 --- /dev/null +++ b/resources/images/collapse_btn.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/resources/images/cut_.svg b/resources/images/cut_.svg new file mode 100644 index 0000000000..0919e39522 --- /dev/null +++ b/resources/images/cut_.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + diff --git a/resources/images/cut_connectors.svg b/resources/images/cut_connectors.svg new file mode 100644 index 0000000000..504df0a419 --- /dev/null +++ b/resources/images/cut_connectors.svg @@ -0,0 +1,20 @@ + + + + + + + + + diff --git a/resources/images/expand_btn.svg b/resources/images/expand_btn.svg new file mode 100644 index 0000000000..4ee221a44a --- /dev/null +++ b/resources/images/expand_btn.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/images/revert_btn.svg b/resources/images/revert_btn.svg new file mode 100644 index 0000000000..fbc580d884 --- /dev/null +++ b/resources/images/revert_btn.svg @@ -0,0 +1,12 @@ + + + + + + + + + diff --git a/resources/shaders/gouraud_light_uniform.fs b/resources/shaders/gouraud_light_uniform.fs new file mode 100644 index 0000000000..342642bcba --- /dev/null +++ b/resources/shaders/gouraud_light_uniform.fs @@ -0,0 +1,14 @@ +#version 140 + +uniform vec4 uniform_color; +uniform float emission_factor; + +// x = tainted, y = specular; +in vec2 intensity; + +out vec4 out_color; + +void main() +{ + out_color = uniform_color; +} diff --git a/resources/shaders/gouraud_light_uniform.vs b/resources/shaders/gouraud_light_uniform.vs new file mode 100644 index 0000000000..fad848f8bd --- /dev/null +++ b/resources/shaders/gouraud_light_uniform.vs @@ -0,0 +1,45 @@ +#version 140 + +#define INTENSITY_CORRECTION 0.6 + +// normalized values for (-0.6/1.31, 0.6/1.31, 1./1.31) +const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); +#define LIGHT_TOP_DIFFUSE (0.8 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SPECULAR (0.125 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SHININESS 20.0 + +// normalized values for (1./1.43, 0.2/1.43, 1./1.43) +const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074); +#define LIGHT_FRONT_DIFFUSE (0.3 * INTENSITY_CORRECTION) + +#define INTENSITY_AMBIENT 0.3 + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; +uniform mat3 view_normal_matrix; + +in vec3 v_position; +in vec3 v_normal; + +// x = tainted, y = specular; +out vec2 intensity; + +void main() +{ + // First transform the normal into camera space and normalize the result. + vec3 normal = normalize(view_normal_matrix * v_normal); + + // Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex. + // Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range. + float NdotL = max(dot(normal, LIGHT_TOP_DIR), 0.0); + + intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; + vec4 position = view_model_matrix * vec4(v_position, 1.0); + intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(position.xyz), reflect(-LIGHT_TOP_DIR, normal)), 0.0), LIGHT_TOP_SHININESS); + + // Perform the same lighting calculation for the 2nd light source (no specular applied). + NdotL = max(dot(normal, LIGHT_FRONT_DIR), 0.0); + intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; + + gl_Position = projection_matrix * position; +} diff --git a/src/imgui/imconfig.h b/src/imgui/imconfig.h index 51aa772cdb..cdb6275cec 100644 --- a/src/imgui/imconfig.h +++ b/src/imgui/imconfig.h @@ -189,6 +189,10 @@ namespace ImGui const wchar_t TextSearchIcon = 0x0828; const wchar_t TextSearchCloseIcon = 0x0829; + const wchar_t ExpandBtn = 0x0830; + const wchar_t CollapseBtn = 0x0831; + const wchar_t RevertBtn = 0x0832; + // void MyFunction(const char* name, const MyMatrix44& v); } diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 21b6a608e9..eb6bbe8ad9 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -163,7 +163,7 @@ const std::string PROJECT_EMBEDDED_PRINT_PRESETS_FILE = "Metadata/print_setting_ const std::string PROJECT_EMBEDDED_SLICE_PRESETS_FILE = "Metadata/process_settings_"; const std::string PROJECT_EMBEDDED_FILAMENT_PRESETS_FILE = "Metadata/filament_settings_"; const std::string PROJECT_EMBEDDED_PRINTER_PRESETS_FILE = "Metadata/machine_settings_"; - +const std::string CUT_INFORMATION_FILE = "Metadata/cut_information.xml"; const unsigned int AUXILIARY_STR_LEN = 12; const unsigned int METADATA_STR_LEN = 9; @@ -680,6 +680,19 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) VolumeMetadataList volumes; }; + struct CutObjectInfo + { + struct Connector + { + int volume_id; + int type; + float r_tolerance; + float h_tolerance; + }; + CutObjectBase id; + std::vector connectors; + }; + // Map from a 1 based 3MF object ID to a 0 based ModelObject index inside m_model->objects. //typedef std::pair Id; // BBS: encrypt typedef std::map IdToCurrentObjectMap; @@ -688,6 +701,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) //typedef std::map IdToAliasesMap; typedef std::vector InstancesList; typedef std::map IdToMetadataMap; + typedef std::map IdToCutObjectInfoMap; //typedef std::map IdToGeometryMap; typedef std::map> IdToLayerHeightsProfileMap; /*typedef std::map IdToLayerConfigRangesMap; @@ -879,6 +893,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) //IdToGeometryMap m_orig_geometries; // backup & restore CurrentConfig m_curr_config; IdToMetadataMap m_objects_metadata; + IdToCutObjectInfoMap m_cut_object_infos; IdToLayerHeightsProfileMap m_layer_heights_profiles; /*IdToLayerConfigRangesMap m_layer_config_ranges; IdToSlaSupportPointsMap m_sla_support_points; @@ -937,6 +952,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) bool _extract_xml_from_archive(mz_zip_archive& archive, std::string const & path, XML_StartElementHandler start_handler, XML_EndElementHandler end_handler); bool _extract_xml_from_archive(mz_zip_archive& archive, const mz_zip_archive_file_stat& stat, XML_StartElementHandler start_handler, XML_EndElementHandler end_handler); bool _extract_model_from_archive(mz_zip_archive& archive, const mz_zip_archive_file_stat& stat); + void _extract_cut_information_from_archive(mz_zip_archive &archive, const mz_zip_archive_file_stat &stat, ConfigSubstitutionContext &config_substitutions); void _extract_layer_heights_profile_config_from_archive(mz_zip_archive& archive, const mz_zip_archive_file_stat& stat); void _extract_layer_config_ranges_from_archive(mz_zip_archive& archive, const mz_zip_archive_file_stat& stat, ConfigSubstitutionContext& config_substitutions); void _extract_sla_support_points_from_archive(mz_zip_archive& archive, const mz_zip_archive_file_stat& stat); @@ -1466,6 +1482,10 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) // extract slic3r print config file _extract_project_config_from_archive(archive, stat, config, config_substitutions, model); } + else if (boost::algorithm::iequals(name, CUT_INFORMATION_FILE)) { + // extract object cut info + _extract_cut_information_from_archive(archive, stat, config_substitutions); + } //BBS: project embedded presets else if (!dont_load_config && boost::algorithm::istarts_with(name, PROJECT_EMBEDDED_PRINT_PRESETS_FILE)) { // extract slic3r layer config ranges file @@ -1689,6 +1709,19 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) if (!_generate_volumes_new(*model_object, object_id_list, *volumes_ptr, config_substitutions)) return false; + + // Apply cut information for object if any was loaded + // m_cut_object_ids are indexed by a 1 based model object index. + IdToCutObjectInfoMap::iterator cut_object_info = m_cut_object_infos.find(object.second + 1); + if (cut_object_info != m_cut_object_infos.end()) { + model_object->cut_id = cut_object_info->second.id; + + for (auto connector : cut_object_info->second.connectors) { + assert(0 <= connector.volume_id && connector.volume_id <= int(model_object->volumes.size())); + model_object->volumes[connector.volume_id]->cut_info = + ModelVolume::CutInfo(CutConnectorType(connector.type), connector.r_tolerance, connector.h_tolerance, true); + } + } } // If instances contain a single volume, the volume offset should be 0,0,0 @@ -2045,6 +2078,61 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) return true; } + void _BBS_3MF_Importer::_extract_cut_information_from_archive(mz_zip_archive &archive, const mz_zip_archive_file_stat &stat, ConfigSubstitutionContext &config_substitutions) + { + if (stat.m_uncomp_size > 0) { + std::string buffer((size_t) stat.m_uncomp_size, 0); + mz_bool res = mz_zip_reader_extract_file_to_mem(&archive, stat.m_filename, (void *) buffer.data(), (size_t) stat.m_uncomp_size, 0); + if (res == 0) { + add_error("Error while reading cut information data to buffer"); + return; + } + + std::istringstream iss(buffer); // wrap returned xml to istringstream + pt::ptree objects_tree; + pt::read_xml(iss, objects_tree); + + for (const auto &object : objects_tree.get_child("objects")) { + pt::ptree object_tree = object.second; + int obj_idx = object_tree.get(".id", -1); + if (obj_idx <= 0) { + add_error("Found invalid object id"); + continue; + } + + IdToCutObjectInfoMap::iterator object_item = m_cut_object_infos.find(obj_idx); + if (object_item != m_cut_object_infos.end()) { + add_error("Found duplicated cut_object_id"); + continue; + } + + CutObjectBase cut_id; + std::vector connectors; + + for (const auto &obj_cut_info : object_tree) { + if (obj_cut_info.first == "cut_id") { + pt::ptree cut_id_tree = obj_cut_info.second; + cut_id = CutObjectBase(ObjectID(cut_id_tree.get(".id")), cut_id_tree.get(".check_sum"), + cut_id_tree.get(".connectors_cnt")); + } + if (obj_cut_info.first == "connectors") { + pt::ptree cut_connectors_tree = obj_cut_info.second; + for (const auto &cut_connector : cut_connectors_tree) { + if (cut_connector.first != "connector") continue; + pt::ptree connector_tree = cut_connector.second; + CutObjectInfo::Connector connector = {connector_tree.get(".volume_id"), connector_tree.get(".type"), + connector_tree.get(".r_tolerance"), connector_tree.get(".h_tolerance")}; + connectors.emplace_back(connector); + } + } + } + + CutObjectInfo cut_info{cut_id, connectors}; + m_cut_object_infos.insert({obj_idx, cut_info}); + } + } + } + void _BBS_3MF_Importer::_extract_print_config_from_archive(mz_zip_archive& archive, const mz_zip_archive_file_stat& stat, DynamicPrintConfig& config, ConfigSubstitutionContext& config_substitutions, const std::string& archive_filename) { if (stat.m_uncomp_size > 0) { @@ -4813,6 +4901,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) //BBS: add project embedded preset files bool _add_project_embedded_presets_to_archive(mz_zip_archive& archive, Model& model, std::vector project_presets); bool _add_model_config_file_to_archive(mz_zip_archive& archive, const Model& model, PlateDataPtrs& plate_data_list, const IdToObjectDataMap &objects_data, int export_plate_idx = -1, bool save_gcode = true, bool use_loaded_id = false); + bool _add_cut_information_file_to_archive(mz_zip_archive &archive, Model &model); bool _add_slice_info_config_file_to_archive(mz_zip_archive& archive, const Model& model, PlateDataPtrs& plate_data_list); bool _add_gcode_file_to_archive(mz_zip_archive& archive, const Model& model, PlateDataPtrs& plate_data_list, Export3mfProgressFn proFn = nullptr); bool _add_custom_gcode_per_print_z_file_to_archive(mz_zip_archive& archive, Model& model, const DynamicPrintConfig* config); @@ -5283,6 +5372,11 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) return false; } + if (!_add_cut_information_file_to_archive(archive, model)) { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ":" << __LINE__ << boost::format(", _add_cut_information_file_to_archive failed\n"); + return false; + } + //BBS progress point BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" <<__LINE__ << boost::format(", before add sliced info to 3mf\n"); if (proFn) { @@ -6699,6 +6793,67 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) return true; } + bool _BBS_3MF_Exporter::_add_cut_information_file_to_archive(mz_zip_archive &archive, Model &model) + { + std::string out = ""; + pt::ptree tree; + + unsigned int object_cnt = 0; + for (const ModelObject *object : model.objects) { + object_cnt++; + pt::ptree &obj_tree = tree.add("objects.object", ""); + + obj_tree.put(".id", object_cnt); + + // Store info for cut_id + pt::ptree &cut_id_tree = obj_tree.add("cut_id", ""); + + // store cut_id atributes + cut_id_tree.put(".id", object->cut_id.id().id); + cut_id_tree.put(".check_sum", object->cut_id.check_sum()); + cut_id_tree.put(".connectors_cnt", object->cut_id.connectors_cnt()); + + int volume_idx = -1; + for (const ModelVolume *volume : object->volumes) { + ++volume_idx; + if (volume->is_cut_connector()) { + pt::ptree &connectors_tree = obj_tree.add("connectors.connector", ""); + connectors_tree.put(".volume_id", volume_idx); + connectors_tree.put(".type", int(volume->cut_info.connector_type)); + connectors_tree.put(".r_tolerance", volume->cut_info.radius_tolerance); + connectors_tree.put(".h_tolerance", volume->cut_info.height_tolerance); + } + } + } + + if (!tree.empty()) { + std::ostringstream oss; + pt::write_xml(oss, tree); + out = oss.str(); + + // Post processing("beautification") of the output string for a better preview + boost::replace_all(out, ">\n \n ", ">\n "); + boost::replace_all(out, ">\n ", ">\n "); + boost::replace_all(out, ">\n ", ">\n "); + boost::replace_all(out, ">", ">\n "); + // OR just + boost::replace_all(out, "><", ">\n<"); + } + + if (!out.empty()) { + if (!mz_zip_writer_add_mem(&archive, CUT_INFORMATION_FILE.c_str(), (const void *) out.data(), out.length(), MZ_DEFAULT_COMPRESSION)) { + add_error("Unable to add cut information file to archive"); + return false; + } + } + + return true; + } + bool _BBS_3MF_Exporter::_add_slice_info_config_file_to_archive(mz_zip_archive& archive, const Model& model, PlateDataPtrs& plate_data_list) { std::stringstream stream; diff --git a/src/libslic3r/Geometry.cpp b/src/libslic3r/Geometry.cpp index ca92c241ea..a2c59ec17d 100644 --- a/src/libslic3r/Geometry.cpp +++ b/src/libslic3r/Geometry.cpp @@ -409,6 +409,20 @@ void rotation_from_two_vectors(Vec3d from, Vec3d to, Vec3d& rotation_axis, doubl } } +Transform3d translation_transform(const Vec3d &translation) +{ + Transform3d transform = Transform3d::Identity(); + transform.translate(translation); + return transform; +} + +Transform3d rotation_transform(const Vec3d& rotation) +{ + Transform3d transform = Transform3d::Identity(); + transform.rotate(Eigen::AngleAxisd(rotation.z(), Vec3d::UnitZ()) * Eigen::AngleAxisd(rotation.y(), Vec3d::UnitY()) * Eigen::AngleAxisd(rotation.x(), Vec3d::UnitX())); + return transform; +} + Transformation::Flags::Flags() : dont_translate(true) , dont_rotate(true) diff --git a/src/libslic3r/Geometry.hpp b/src/libslic3r/Geometry.hpp index fde3815eac..8eb6195a10 100644 --- a/src/libslic3r/Geometry.hpp +++ b/src/libslic3r/Geometry.hpp @@ -348,6 +348,15 @@ Vec3d extract_euler_angles(const Transform3d& transform); // Euler angles can be obtained by extract_euler_angles() void rotation_from_two_vectors(Vec3d from, Vec3d to, Vec3d& rotation_axis, double& phi, Matrix3d* rotation_matrix = nullptr); +// Returns the transform obtained by assembling the given translation +Transform3d translation_transform(const Vec3d &translation); + +// Returns the transform obtained by assembling the given rotations in the following order: +// 1) rotate X +// 2) rotate Y +// 3) rotate Z +Transform3d rotation_transform(const Vec3d &rotation); + class Transformation { struct Flags diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index 8fd3d3ce86..a9df179dca 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -670,8 +670,21 @@ bool Model::looks_like_imperial_units() const return false; for (ModelObject* obj : this->objects) - if (obj->get_object_stl_stats().volume < volume_threshold_inches) - return true; + if (obj->get_object_stl_stats().volume < volume_threshold_inches) { + if (!obj->is_cut()) + return true; + bool all_cut_parts_look_like_imperial_units = true; + for (ModelObject* obj_other : this->objects) { + if (obj_other == obj) + continue; + if (obj_other->cut_id.is_equal(obj->cut_id) && obj_other->get_object_stl_stats().volume >= volume_threshold_inches) { + all_cut_parts_look_like_imperial_units = false; + break; + } + } + if (all_cut_parts_look_like_imperial_units) + return true; + } return false; } @@ -930,6 +943,7 @@ ModelObject& ModelObject::assign_copy(const ModelObject &rhs) this->layer_height_profile = rhs.layer_height_profile; this->printable = rhs.printable; this->origin_translation = rhs.origin_translation; + this->cut_id.copy(rhs.cut_id); m_bounding_box = rhs.m_bounding_box; m_bounding_box_valid = rhs.m_bounding_box_valid; m_raw_bounding_box = rhs.m_raw_bounding_box; @@ -1042,6 +1056,9 @@ ModelVolume* ModelObject::add_volume(const ModelVolume &other, ModelVolumeType t ModelVolume* v = new ModelVolume(this, other); if (type != ModelVolumeType::INVALID && v->type() != type) v->set_type(type); + + v->cut_info = other.cut_info; + this->volumes.push_back(v); // The volume should already be centered at this point of time when copying shared pointers of the triangle mesh and convex hull. // v->center_geometry_after_creation(); @@ -1591,6 +1608,344 @@ size_t ModelObject::parts_count() const return num; } +bool ModelObject::has_connectors() const +{ + assert(is_cut()); + for (const ModelVolume *v : this->volumes) + if (v->cut_info.is_connector) return true; + + return false; +} + +indexed_triangle_set ModelObject::get_connector_mesh(CutConnectorAttributes connector_attributes) +{ + indexed_triangle_set connector_mesh; + + int sectorCount {1}; + switch (CutConnectorShape(connector_attributes.shape)) { + case CutConnectorShape::Triangle: + sectorCount = 3; + break; + case CutConnectorShape::Square: + sectorCount = 4; + break; + case CutConnectorShape::Circle: + sectorCount = 360; + break; + case CutConnectorShape::Hexagon: + sectorCount = 6; + break; + default: + break; + } + + if (connector_attributes.style == CutConnectorStyle::Prizm) + connector_mesh = its_make_cylinder(1.0, 1.0, (2 * PI / sectorCount)); + else if (connector_attributes.type == CutConnectorType::Plug) + connector_mesh = its_make_cone(1.0, 1.0, (2 * PI / sectorCount)); + else + connector_mesh = its_make_frustum_dowel(1.0, 1.0, sectorCount); + + return connector_mesh; +} + +void ModelObject::apply_cut_connectors(const std::string &name) +{ + if (cut_connectors.empty()) + return; + + using namespace Geometry; + + size_t connector_id = cut_id.connectors_cnt(); + for (const CutConnector &connector : cut_connectors) { + TriangleMesh mesh = TriangleMesh(get_connector_mesh(connector.attribs)); + // Mesh will be centered when loading. + ModelVolume *new_volume = add_volume(std::move(mesh), ModelVolumeType::NEGATIVE_VOLUME); + + Transform3d translate_transform = Transform3d::Identity(); + translate_transform.translate(connector.pos); + Transform3d scale_transform = Transform3d::Identity(); + scale_transform.scale(Vec3f(connector.radius, connector.radius, connector.height).cast()); + + // Transform the new modifier to be aligned inside the instance + new_volume->set_transformation(translate_transform * connector.rotation_m * scale_transform); + + new_volume->cut_info = {connector.attribs.type, connector.radius_tolerance, connector.height_tolerance}; + new_volume->name = name + "-" + std::to_string(++connector_id); + } + cut_id.increase_connectors_cnt(cut_connectors.size()); + + // delete all connectors + cut_connectors.clear(); +} + +void ModelObject::invalidate_cut() +{ + this->cut_id.invalidate(); + for (ModelVolume *volume : this->volumes) + volume->invalidate_cut_info(); +} + +void ModelObject::delete_connectors() +{ + for (int id = int(this->volumes.size()) - 1; id >= 0; id--) { + if (volumes[id]->is_cut_connector()) + this->delete_volume(size_t(id)); + } +} + +void ModelObject::synchronize_model_after_cut() +{ + for (ModelObject *obj : m_model->objects) { + if (obj == this || obj->cut_id.is_equal(this->cut_id)) continue; + if (obj->is_cut() && obj->cut_id.has_same_id(this->cut_id)) + obj->cut_id.copy(this->cut_id); + } +} + +void ModelObject::apply_cut_attributes(ModelObjectCutAttributes attributes) +{ + // we don't save cut information, if result will not contains all parts of initial object + if (!attributes.has(ModelObjectCutAttribute::KeepUpper) || !attributes.has(ModelObjectCutAttribute::KeepLower)) + return; + + if (cut_id.id().invalid()) + cut_id.init(); + + { + int cut_obj_cnt = -1; + if (attributes.has(ModelObjectCutAttribute::KeepUpper)) + cut_obj_cnt++; + if (attributes.has(ModelObjectCutAttribute::KeepLower)) + cut_obj_cnt++; + if (attributes.has(ModelObjectCutAttribute::CreateDowels)) + cut_obj_cnt++; + if (cut_obj_cnt > 0) + cut_id.increase_check_sum(size_t(cut_obj_cnt)); + } +} + +void ModelObject::clone_for_cut(ModelObject **obj) +{ + (*obj) = ModelObject::new_clone(*this); + (*obj)->set_model(nullptr); + (*obj)->sla_support_points.clear(); + (*obj)->sla_drain_holes.clear(); + (*obj)->sla_points_status = sla::PointsStatus::NoPoints; + (*obj)->clear_volumes(); + (*obj)->input_file.clear(); +} + +Transform3d ModelObject::calculate_cut_plane_inverse_matrix(const std::array& plane_points) +{ + Vec3d mid_point = {0.0, 0.0, 0.0}; + for (auto pt : plane_points) + mid_point += pt; + mid_point /= (double) plane_points.size(); + + Vec3d movement = -mid_point; + + Vec3d v01 = plane_points[1] - plane_points[0]; + Vec3d v12 = plane_points[2] - plane_points[1]; + + Vec3d plane_normal = v01.cross(v12); + plane_normal.normalize(); + + Vec3d axis = {0.0, 0.0, 0.0}; + double phi = 0.0; + Matrix3d matrix; + matrix.setIdentity(); + Geometry::rotation_from_two_vectors(plane_normal, {0.0, 0.0, 1.0}, axis, phi, &matrix); + Vec3d angles = Geometry::extract_euler_angles(matrix); + + movement = matrix * movement; + Transform3d transfo; + transfo.setIdentity(); + transfo.translate(movement); + transfo.rotate(Eigen::AngleAxisd(angles(2), Vec3d::UnitZ()) * Eigen::AngleAxisd(angles(1), Vec3d::UnitY()) * Eigen::AngleAxisd(angles(0), Vec3d::UnitX())); + return transfo; +} + +void ModelObject::process_connector_cut( + ModelVolume *volume, + ModelObjectCutAttributes attributes, + ModelObject *upper, ModelObject *lower, + std::vector &dowels, + Vec3d &local_dowels_displace) +{ + assert(volume->cut_info.is_connector); + volume->cut_info.set_processed(); + + const auto volume_matrix = volume->get_matrix(); + + // ! Don't apply instance transformation for the conntectors. + // This transformation is already there + if (attributes.has(ModelObjectCutAttribute::KeepUpper)) { + ModelVolume *vol = upper->add_volume(*volume); + vol->set_transformation(volume_matrix); + vol->apply_tolerance(); + } + if (attributes.has(ModelObjectCutAttribute::KeepLower)) { + ModelVolume *vol = lower->add_volume(*volume); + vol->set_transformation(volume_matrix); + + if (volume->cut_info.connector_type == CutConnectorType::Dowel) + vol->apply_tolerance(); + else + // for lower part change type of connector from NEGATIVE_VOLUME to MODEL_PART if this connector is a plug + vol->set_type(ModelVolumeType::MODEL_PART); + } + if (volume->cut_info.connector_type == CutConnectorType::Dowel && attributes.has(ModelObjectCutAttribute::CreateDowels)) { + ModelObject *dowel{nullptr}; + // Clone the object to duplicate instances, materials etc. + clone_for_cut(&dowel); + + // add one more solid part same as connector if this connector is a dowel + ModelVolume *vol = dowel->add_volume(*volume); + vol->set_type(ModelVolumeType::MODEL_PART); + + // But discard rotation and Z-offset for this volume + vol->set_rotation(Vec3d::Zero()); + vol->set_offset(Z, 0.0); + + // Compute the displacement (in instance coordinates) to be applied to place the dowels + local_dowels_displace = lower->full_raw_mesh_bounding_box().size().cwiseProduct(Vec3d(1.0, 1.0, 0.0)); + + dowels.push_back(dowel); + } +} + +void ModelObject::process_modifier_cut( + ModelVolume *volume, + const Transform3d &instance_matrix, + const Transform3d &inverse_cut_matrix, + ModelObjectCutAttributes attributes, + ModelObject *upper, + ModelObject *lower) +{ + const auto volume_matrix = instance_matrix * volume->get_matrix(); + + // Modifiers are not cut, but we still need to add the instance transformation + // to the modifier volume transformation to preserve their shape properly. + volume->set_transformation(Geometry::Transformation(volume_matrix)); + + // Some logic for the negative volumes/connectors. Add only needed modifiers + auto bb = volume->mesh().transformed_bounding_box(inverse_cut_matrix * volume_matrix); + bool is_crossed_by_cut = bb.min[Z] <= 0 && bb.max[Z] >= 0; + if (attributes.has(ModelObjectCutAttribute::KeepUpper) && (bb.min[Z] >= 0 || is_crossed_by_cut)) + upper->add_volume(*volume); + if (attributes.has(ModelObjectCutAttribute::KeepLower) && (bb.max[Z] <= 0 || is_crossed_by_cut)) + lower->add_volume(*volume); +} + +void ModelObject::process_solid_part_cut(ModelVolume * volume, + const Transform3d & instance_matrix, + const std::array &plane_points, + ModelObjectCutAttributes attributes, + ModelObject * upper, + ModelObject * lower, + Vec3d & local_displace) +{ + // Transform the mesh by the combined transformation matrix. + // Flip the triangles in case the composite transformation is left handed. + TriangleMesh mesh(volume->mesh()); + mesh.transform(instance_matrix * volume->get_matrix(), true); + volume->reset_mesh(); + // Reset volume transformation except for offset + const Vec3d offset = volume->get_offset(); + volume->set_transformation(Geometry::Transformation()); + volume->set_offset(offset); + + // Perform cut + TriangleMesh upper_mesh, lower_mesh; + { + indexed_triangle_set upper_its, lower_its; + cut_mesh(mesh.its, plane_points, &upper_its, &lower_its); + if (attributes.has(ModelObjectCutAttribute::KeepUpper)) upper_mesh = TriangleMesh(upper_its); + if (attributes.has(ModelObjectCutAttribute::KeepLower)) lower_mesh = TriangleMesh(lower_its); + } + + if (attributes.has(ModelObjectCutAttribute::KeepUpper) && !upper_mesh.empty()) { + ModelVolume *vol = upper->add_volume(upper_mesh); + vol->name = volume->name.substr(0, volume->name.find_last_of('.')) + "_upper"; // BBS + // Don't copy the config's ID. + vol->config.assign_config(volume->config); + assert(vol->config.id().valid()); + assert(vol->config.id() != volume->config.id()); + vol->set_material(volume->material_id(), *volume->material()); + vol->cut_info = volume->cut_info; + } + if (attributes.has(ModelObjectCutAttribute::KeepLower) && !lower_mesh.empty()) { + ModelVolume *vol = lower->add_volume(lower_mesh); + vol->name = volume->name.substr(0, volume->name.find_last_of('.')) + "_lower"; // BBS + // Don't copy the config's ID. + vol->config.assign_config(volume->config); + assert(vol->config.id().valid()); + assert(vol->config.id() != volume->config.id()); + vol->set_material(volume->material_id(), *volume->material()); + vol->cut_info = volume->cut_info; + + // Compute the displacement (in instance coordinates) to be applied to place the upper parts + // The upper part displacement is set to half of the lower part bounding box + // this is done in hope at least a part of the upper part will always be visible and draggable + local_displace = lower->full_raw_mesh_bounding_box().size().cwiseProduct(Vec3d(-0.5, -0.5, 0.0)); + } +} + +static void invalidate_translations(ModelObject* object, const ModelInstance* src_instance) +{ + if (!object->origin_translation.isApprox(Vec3d::Zero()) && src_instance->get_offset().isApprox(Vec3d::Zero())) { + object->center_around_origin(); + object->translate_instances(-object->origin_translation); + object->origin_translation = Vec3d::Zero(); + } + else { + object->invalidate_bounding_box(); + object->center_around_origin(); + } +} + +static void reset_instance_transformation(ModelObject* object, size_t src_instance_idx, const Transform3d& cut_matrix, + bool place_on_cut = false, bool flip = false, Vec3d local_displace = Vec3d::Zero()) +{ + using namespace Geometry; + + // Reset instance transformation except offset and Z-rotation + + for (size_t i = 0; i < object->instances.size(); ++i) { + auto& obj_instance = object->instances[i]; + const Vec3d offset = obj_instance->get_offset(); + const double rot_z = obj_instance->get_rotation().z(); + + obj_instance->set_transformation(Transformation()); + + const Vec3d displace = local_displace.isApprox(Vec3d::Zero()) ? Vec3d::Zero() : + rotation_transform(obj_instance->get_rotation()) * local_displace; + obj_instance->set_offset(offset + displace); + + Vec3d rotation = Vec3d::Zero(); + if (!flip && !place_on_cut) { + if ( i != src_instance_idx) + rotation[Z] = rot_z; + } + else { + Transform3d rotation_matrix = Transform3d::Identity(); + if (flip) + rotation_matrix = rotation_transform(PI * Vec3d::UnitX()); + + if (place_on_cut) + rotation_matrix = rotation_matrix * Transformation(cut_matrix).get_matrix(true, false, true, true).inverse(); + + if (i != src_instance_idx) + rotation_matrix = rotation_transform(rot_z * Vec3d::UnitZ()) * rotation_matrix; + + rotation = Transformation(rotation_matrix).get_rotation(); + } + + obj_instance->set_rotation(rotation); + } +} + // BBS: replace z with plane_points ModelObjectPtrs ModelObject::cut(size_t instance, std::array plane_points, ModelObjectCutAttributes attributes) { @@ -1599,12 +1954,14 @@ ModelObjectPtrs ModelObject::cut(size_t instance, std::array plane_poi BOOST_LOG_TRIVIAL(trace) << "ModelObject::cut - start"; + // apply cut attributes for object + apply_cut_attributes(attributes); + // Clone the object to duplicate instances, materials etc. bool keep_upper = attributes.has(ModelObjectCutAttribute::KeepUpper); bool keep_lower = attributes.has(ModelObjectCutAttribute::KeepLower); - bool cut_to_parts = attributes.has(ModelObjectCutAttribute::CutToParts); ModelObject* upper = keep_upper ? ModelObject::new_clone(*this) : nullptr; - ModelObject* lower = (cut_to_parts&&upper!=nullptr) ? upper : (keep_lower ? ModelObject::new_clone(*this) : nullptr); + ModelObject* lower = keep_lower ? ModelObject::new_clone(*this) : nullptr; if (attributes.has(ModelObjectCutAttribute::KeepUpper)) { upper->set_model(nullptr); @@ -1643,8 +2000,10 @@ ModelObjectPtrs ModelObject::cut(size_t instance, std::array plane_poi point -= instances[instance]->get_offset(); } + std::vector dowels; // Displacement (in instance coordinates) to be applied to place the upper parts Vec3d local_displace = Vec3d::Zero(); + Vec3d local_dowels_displace = Vec3d::Zero(); for (ModelVolume *volume : volumes) { const auto volume_matrix = volume->get_matrix(); @@ -1654,121 +2013,106 @@ ModelObjectPtrs ModelObject::cut(size_t instance, std::array plane_poi volume->mmu_segmentation_facets.reset(); if (! volume->is_model_part()) { - // Modifiers are not cut, but we still need to add the instance transformation - // to the modifier volume transformation to preserve their shape properly. - - volume->set_transformation(Geometry::Transformation(instance_matrix * volume_matrix)); - - if (attributes.has(ModelObjectCutAttribute::KeepUpper)) - upper->add_volume(*volume); - if (attributes.has(ModelObjectCutAttribute::KeepLower)) - lower->add_volume(*volume); + if (volume->cut_info.is_processed) { + // Modifiers are not cut, but we still need to add the instance transformation + // to the modifier volume transformation to preserve their shape properly. + Transform3d inverse_cut_matrix = calculate_cut_plane_inverse_matrix(plane_points); + process_modifier_cut(volume, instance_matrix, inverse_cut_matrix, attributes, upper, lower); + } + else { + process_connector_cut(volume, attributes, upper, lower, dowels, local_dowels_displace); + } } else if (! volume->mesh().empty()) { - // Transform the mesh by the combined transformation matrix. - // Flip the triangles in case the composite transformation is left handed. - TriangleMesh mesh(volume->mesh()); - mesh.transform(instance_matrix * volume_matrix, true); - volume->reset_mesh(); - // Reset volume transformation except for offset - const Vec3d offset = volume->get_offset(); - volume->set_transformation(Geometry::Transformation()); - volume->set_offset(offset); - - // Perform cut - TriangleMesh upper_mesh, lower_mesh; - { - indexed_triangle_set upper_its, lower_its; - cut_mesh(mesh.its, plane_points, &upper_its, &lower_its); - if (attributes.has(ModelObjectCutAttribute::KeepUpper)) - upper_mesh = TriangleMesh(upper_its); - if (attributes.has(ModelObjectCutAttribute::KeepLower)) - lower_mesh = TriangleMesh(lower_its); - } - - if (attributes.has(ModelObjectCutAttribute::KeepUpper) && ! upper_mesh.empty()) { - ModelVolume* vol = upper->add_volume(upper_mesh); - vol->name = volume->name.substr(0, volume->name.find_last_of('.')) + "_upper"; // BBS - // Don't copy the config's ID. - vol->config.assign_config(volume->config); - assert(vol->config.id().valid()); - assert(vol->config.id() != volume->config.id()); - vol->set_material(volume->material_id(), *volume->material()); - } - if (attributes.has(ModelObjectCutAttribute::KeepLower) && ! lower_mesh.empty()) { - ModelVolume* vol = lower->add_volume(lower_mesh); - vol->name = volume->name.substr(0, volume->name.find_last_of('.')) + "_lower"; // BBS - // Don't copy the config's ID. - vol->config.assign_config(volume->config); - assert(vol->config.id().valid()); - assert(vol->config.id() != volume->config.id()); - vol->set_material(volume->material_id(), *volume->material()); - - // Compute the displacement (in instance coordinates) to be applied to place the upper parts - // The upper part displacement is set to half of the lower part bounding box - // this is done in hope at least a part of the upper part will always be visible and draggable - local_displace = lower->full_raw_mesh_bounding_box().size().cwiseProduct(Vec3d(-0.5, -0.5, 0.0)); - } + process_solid_part_cut(volume, instance_matrix, plane_points, attributes, upper, lower, local_displace); } } ModelObjectPtrs res; + Transform3d cut_matrix = calculate_cut_plane_inverse_matrix(plane_points).inverse(); if (attributes.has(ModelObjectCutAttribute::KeepUpper) && upper->volumes.size() > 0) { - if (!upper->origin_translation.isApprox(Vec3d::Zero()) && instances[instance]->get_offset().isApprox(Vec3d::Zero())) { - // BBS: do not move the parts if cut_to_parts - if (!cut_to_parts) { - upper->center_around_origin(); - upper->translate_instances(-upper->origin_translation); - upper->origin_translation = Vec3d::Zero(); - } - } + invalidate_translations(upper, instances[instance]); - // Reset instance transformation except offset and Z-rotation - for (size_t i = 0; i < instances.size(); ++i) { - auto &instance = upper->instances[i]; - const Vec3d offset = instance->get_offset(); - // BBS - //const double rot_z = instance->get_rotation().z(); - // BBS: do not move the parts if cut_to_parts - Vec3d displace(0, 0, 0); - if (!cut_to_parts) - displace = Geometry::assemble_transform(Vec3d::Zero(), instance->get_rotation()) * local_displace; - - instance->set_transformation(Geometry::Transformation()); - instance->set_offset(offset + displace); - // BBS - //instance->set_rotation(Vec3d(0.0, 0.0, rot_z)); - } + reset_instance_transformation(upper, instance, cut_matrix, + attributes.has(ModelObjectCutAttribute::PlaceOnCutUpper), + attributes.has(ModelObjectCutAttribute::FlipUpper), + local_displace); res.push_back(upper); } if (attributes.has(ModelObjectCutAttribute::KeepLower) && lower->volumes.size() > 0) { - if (!lower->origin_translation.isApprox(Vec3d::Zero()) && instances[instance]->get_offset().isApprox(Vec3d::Zero())) { - if (!cut_to_parts) { - lower->center_around_origin(); - lower->translate_instances(-lower->origin_translation); - lower->origin_translation = Vec3d::Zero(); + invalidate_translations(lower, instances[instance]); + + reset_instance_transformation(lower, instance, cut_matrix, + attributes.has(ModelObjectCutAttribute::PlaceOnCutLower), + attributes.has(ModelObjectCutAttribute::PlaceOnCutLower) ? true : attributes.has(ModelObjectCutAttribute::FlipLower)); + + res.push_back(lower); + } + + if (attributes.has(ModelObjectCutAttribute::CreateDowels) && !dowels.empty()) { + auto invalidate_translations = [](ModelObject *object, const ModelInstance *src_instance) { + if (!object->origin_translation.isApprox(Vec3d::Zero()) && src_instance->get_offset().isApprox(Vec3d::Zero())) { + object->center_around_origin(); + object->translate_instances(-object->origin_translation); + object->origin_translation = Vec3d::Zero(); + } else { + object->invalidate_bounding_box(); + object->center_around_origin(); } - } + }; - // Reset instance transformation except offset and Z-rotation - for (auto *instance : lower->instances) { - const Vec3d offset = instance->get_offset(); - // BBS - //const double rot_z = instance->get_rotation().z(); - instance->set_transformation(Geometry::Transformation()); - instance->set_offset(offset); - // BBS - //instance->set_rotation(Vec3d(attributes.has(ModelObjectCutAttribute::FlipLower) ? Geometry::deg2rad(180.0) : 0.0, 0.0, rot_z)); - } + auto reset_instance_transformation = [](ModelObject *object, size_t src_instance_idx, const Transform3d &cut_matrix, + bool place_on_cut = false, bool flip = false, Vec3d local_displace = Vec3d::Zero()) { + using namespace Geometry; + // Reset instance transformation except offset and Z-rotation + for (size_t i = 0; i < object->instances.size(); ++i) { + auto & obj_instance = object->instances[i]; + const Vec3d offset = obj_instance->get_offset(); + const double rot_z = obj_instance->get_rotation().z(); - if(res.empty() || lower != res.back()) - res.push_back(lower); + obj_instance->set_transformation(Transformation()); + + const Vec3d displace = local_displace.isApprox(Vec3d::Zero()) ? Vec3d::Zero() : rotation_transform(obj_instance->get_rotation()) * local_displace; + obj_instance->set_offset(offset + displace); + + Vec3d rotation = Vec3d::Zero(); + if (!flip && !place_on_cut) { + if (i != src_instance_idx) rotation[Z] = rot_z; + } else { + Transform3d rotation_matrix = Transform3d::Identity(); + if (flip) + rotation_matrix = rotation_transform(PI * Vec3d::UnitX()); + + if (place_on_cut) + rotation_matrix = rotation_matrix * Transformation(cut_matrix).get_matrix(true, false, true, true).inverse(); + + if (i != src_instance_idx) + rotation_matrix = rotation_transform(rot_z * Vec3d::UnitZ()) * rotation_matrix; + + rotation = Transformation(rotation_matrix).get_rotation(); + } + + obj_instance->set_rotation(rotation); + } + }; + + for (auto dowel : dowels) { + invalidate_translations(dowel, instances[instance]); + + reset_instance_transformation(dowel, instance, Transform3d::Identity(), false, false, local_dowels_displace); + + local_dowels_displace += dowel->full_raw_mesh_bounding_box().size().cwiseProduct(Vec3d(-1.5, -1.5, 0.0)); + dowel->name += "-Dowel-" + dowel->volumes[0]->name; + res.push_back(dowel); + } } BOOST_LOG_TRIVIAL(trace) << "ModelObject::cut - end"; + synchronize_model_after_cut(); + return res; } @@ -2386,6 +2730,23 @@ bool ModelVolume::is_splittable() const return m_is_splittable == 1; } +void ModelVolume::apply_tolerance() +{ + assert(cut_info.is_connector); + if (cut_info.is_processed) + return; + + Vec3d sf = get_scaling_factor(); + // make a "hole" wider + sf[X] *= 1. + double(cut_info.radius_tolerance); + sf[Y] *= 1. + double(cut_info.radius_tolerance); + + // make a "hole" dipper + sf[Z] *= 1. + double(cut_info.height_tolerance); + + set_scaling_factor(sf); +} + // BBS std::vector ModelVolume::get_extruders() const { diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index e260c200fa..9188017012 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -232,6 +232,80 @@ private: friend class ModelObject; }; +enum class CutConnectorType : int { + Plug, + Dowel, + Undef +}; + +enum class CutConnectorStyle : int { + Prizm, + Frustum, + Undef + //,Claw +}; + +enum class CutConnectorShape : int { + Triangle, + Square, + Hexagon, + Circle, + Undef + //,D-shape +}; + +struct CutConnectorAttributes +{ + CutConnectorType type{CutConnectorType::Plug}; + CutConnectorStyle style{CutConnectorStyle::Prizm}; + CutConnectorShape shape{CutConnectorShape::Circle}; + + CutConnectorAttributes() {} + + CutConnectorAttributes(CutConnectorType t, CutConnectorStyle st, CutConnectorShape sh) : type(t), style(st), shape(sh) {} + + CutConnectorAttributes(const CutConnectorAttributes &rhs) : CutConnectorAttributes(rhs.type, rhs.style, rhs.shape) {} + + bool operator==(const CutConnectorAttributes &other) const; + + bool operator!=(const CutConnectorAttributes &other) const { return !(other == (*this)); } + + bool operator<(const CutConnectorAttributes &other) const + { + return this->type < other.type || (this->type == other.type && this->style < other.style) || + (this->type == other.type && this->style == other.style && this->shape < other.shape); + } + + template inline void serialize(Archive &ar) { ar(type, style, shape); } +}; + +struct CutConnector +{ + Vec3d pos; + Transform3d rotation_m; + float radius; + float height; + float radius_tolerance; // [0.f : 1.f] + float height_tolerance; // [0.f : 1.f] + CutConnectorAttributes attribs; + + CutConnector() : pos(Vec3d::Zero()), rotation_m(Transform3d::Identity()), radius(5.f), height(10.f), radius_tolerance(0.f), height_tolerance(0.1f) {} + + CutConnector(Vec3d p, Transform3d rot, float r, float h, float rt, float ht, CutConnectorAttributes attributes) + : pos(p), rotation_m(rot), radius(r), height(h), radius_tolerance(rt), height_tolerance(ht), attribs(attributes) + {} + + CutConnector(const CutConnector &rhs) : CutConnector(rhs.pos, rhs.rotation_m, rhs.radius, rhs.height, rhs.radius_tolerance, rhs.height_tolerance, rhs.attribs) {} + + bool operator==(const CutConnector &other) const; + + bool operator!=(const CutConnector &other) const { return !(other == (*this)); } + + template inline void serialize(Archive &ar) { ar(pos, rotation_m, radius, height, radius_tolerance, height_tolerance, attribs); } +}; + +using CutConnectors = std::vector; + // Declared outside of ModelVolume, so it could be forward declared. enum class ModelVolumeType : int { INVALID = -1, @@ -242,7 +316,7 @@ enum class ModelVolumeType : int { SUPPORT_ENFORCER }; -enum class ModelObjectCutAttribute : int { KeepUpper, KeepLower, FlipLower, CutToParts }; +enum class ModelObjectCutAttribute : int { KeepUpper, KeepLower, FlipUpper, FlipLower, PlaceOnCutUpper, PlaceOnCutLower, CreateDowels }; using ModelObjectCutAttributes = enum_bitmask; ENABLE_ENUM_BITMASK_OPERATORS(ModelObjectCutAttribute); @@ -293,6 +367,10 @@ public: // BBS: save for compare with new load volumes std::vector volume_ids; + // Connectors to be added into the object before cut and are used to create a solid/negative volumes during a cut perform + CutConnectors cut_connectors; + CutObjectBase cut_id; + Model* get_model() { return m_model; } const Model* get_model() const { return m_model; } // BBS: production extension @@ -383,6 +461,38 @@ public: size_t materials_count() const; size_t facets_count() const; size_t parts_count() const; + + bool is_cut() const { return cut_id.id().valid(); } + bool has_connectors() const; + static indexed_triangle_set get_connector_mesh(CutConnectorAttributes connector_attributes); + void apply_cut_connectors(const std::string &name); + // invalidate cut state for this object and its connectors/volumes + void invalidate_cut(); + // delete volumes which are marked as connector for this object + void delete_connectors(); + void synchronize_model_after_cut(); + void apply_cut_attributes(ModelObjectCutAttributes attributes); + void clone_for_cut(ModelObject **obj); + Transform3d calculate_cut_plane_inverse_matrix(const std::array &plane_points); + void process_connector_cut(ModelVolume *volume, + ModelObjectCutAttributes attributes, + ModelObject *upper, ModelObject *lower, + std::vector &dowels, + Vec3d &local_dowels_displace); + void process_modifier_cut(ModelVolume * volume, + const Transform3d & instance_matrix, + const Transform3d & inverse_cut_matrix, + ModelObjectCutAttributes attributes, + ModelObject * upper, + ModelObject * lower); + void process_solid_part_cut(ModelVolume * volume, + const Transform3d & instance_matrix, + const std::array &plane_points, + ModelObjectCutAttributes attributes, + ModelObject * upper, + ModelObject * lower, + Vec3d & local_displace); + // BBS: replace z with plane_points ModelObjectPtrs cut(size_t instance, std::array plane_points, ModelObjectCutAttributes attributes); // BBS @@ -531,7 +641,8 @@ private: Internal::StaticSerializationWrapper layer_heigth_profile_wrapper(layer_height_profile); ar(name, module_name, input_file, instances, volumes, config_wrapper, layer_config_ranges, layer_heigth_profile_wrapper, sla_support_points, sla_points_status, sla_drain_holes, printable, origin_translation, - m_bounding_box, m_bounding_box_valid, m_raw_bounding_box, m_raw_bounding_box_valid, m_raw_mesh_bounding_box, m_raw_mesh_bounding_box_valid); + m_bounding_box, m_bounding_box_valid, m_raw_bounding_box, m_raw_bounding_box_valid, m_raw_mesh_bounding_box, m_raw_mesh_bounding_box_valid, + cut_connectors, cut_id); } template void load(Archive& ar) { ar(cereal::base_class(this)); @@ -541,7 +652,8 @@ private: SaveObjectGaurd gaurd(*this); ar(name, module_name, input_file, instances, volumes, config_wrapper, layer_config_ranges, layer_heigth_profile_wrapper, sla_support_points, sla_points_status, sla_drain_holes, printable, origin_translation, - m_bounding_box, m_bounding_box_valid, m_raw_bounding_box, m_raw_bounding_box_valid, m_raw_mesh_bounding_box, m_raw_mesh_bounding_box_valid); + m_bounding_box, m_bounding_box_valid, m_raw_bounding_box, m_raw_bounding_box_valid, m_raw_mesh_bounding_box, m_raw_mesh_bounding_box_valid, + cut_connectors, cut_id); std::vector volume_ids2; std::transform(volumes.begin(), volumes.end(), std::back_inserter(volume_ids2), std::mem_fn(&ObjectBase::id)); if (volume_ids != volume_ids2) @@ -708,6 +820,31 @@ public: }; Source source; + // struct used by cut command + // It contains information about connetors + struct CutInfo + { + bool is_connector{false}; + bool is_processed{true}; + CutConnectorType connector_type{CutConnectorType::Plug}; + float radius_tolerance{0.f}; // [0.f : 1.f] + float height_tolerance{0.f}; // [0.f : 1.f] + + CutInfo() = default; + CutInfo(CutConnectorType type, float rad_tolerance, float h_tolerance, bool processed = false) + : is_connector(true), is_processed(processed), connector_type(type), radius_tolerance(rad_tolerance), height_tolerance(h_tolerance) + {} + + void set_processed() { is_processed = true; } + void invalidate() { is_connector = false; } + + template inline void serialize(Archive &ar) { ar(is_connector, is_processed, connector_type, radius_tolerance, height_tolerance); } + }; + CutInfo cut_info; + + bool is_cut_connector() const { return cut_info.is_processed && cut_info.is_connector; } + void invalidate_cut_info() { cut_info.invalidate(); } + // The triangular model. const TriangleMesh& mesh() const { return *m_mesh.get(); } const TriangleMesh* mesh_ptr() const { return m_mesh.get(); } @@ -758,6 +895,8 @@ public: bool is_splittable() const; + void apply_tolerance(); + // BBS std::vector get_extruders() const; void update_extruder_count(size_t extruder_count); @@ -999,7 +1138,7 @@ private: // BBS: add backup, check modify bool mesh_changed = false; auto tr = m_transformation; - ar(name, source, m_mesh, m_type, m_material_id, m_transformation, m_is_splittable, has_convex_hull, m_text_info); + ar(name, source, m_mesh, m_type, m_material_id, m_transformation, m_is_splittable, has_convex_hull, m_text_info, cut_info); mesh_changed |= !(tr == m_transformation); if (mesh_changed) m_transformation.get_matrix(true, true, true, true); // force dirty auto t = supported_facets.timestamp(); @@ -1025,7 +1164,7 @@ private: } template void save(Archive &ar) const { bool has_convex_hull = m_convex_hull.get() != nullptr; - ar(name, source, m_mesh, m_type, m_material_id, m_transformation, m_is_splittable, has_convex_hull, m_text_info); + ar(name, source, m_mesh, m_type, m_material_id, m_transformation, m_is_splittable, has_convex_hull, m_text_info, cut_info); cereal::save_by_value(ar, supported_facets); cereal::save_by_value(ar, seam_facets); cereal::save_by_value(ar, mmu_segmentation_facets); diff --git a/src/libslic3r/ObjectID.hpp b/src/libslic3r/ObjectID.hpp index 1030171e7f..b4e0507f41 100644 --- a/src/libslic3r/ObjectID.hpp +++ b/src/libslic3r/ObjectID.hpp @@ -65,6 +65,8 @@ protected: // Constructor with ignored int parameter to assign an invalid ID, to be replaced // by an existing ID copied from elsewhere. ObjectBase(int) : m_id(ObjectID(0)) {} + + ObjectBase(const ObjectID id) : m_id(id) {} // The class tree will have virtual tables and type information. virtual ~ObjectBase() = default; @@ -89,7 +91,6 @@ private: friend class cereal::access; friend class Slic3r::UndoRedo::StackImpl; template void serialize(Archive &ar) { ar(m_id); } - ObjectBase(const ObjectID id) : m_id(id) {} template static void load_and_construct(Archive & ar, cereal::construct &construct) { ObjectID id; ar(id); construct(id); } }; @@ -128,6 +129,67 @@ private: template void serialize(Archive &ar) { ar(m_timestamp); } }; +class CutObjectBase : public ObjectBase +{ + // check sum of CutParts in initial Object + size_t m_check_sum{1}; + // connectors count + size_t m_connectors_cnt{0}; + +public: + // Default Constructor to assign an invalid ID + CutObjectBase() : ObjectBase(-1) {} + // Constructor with ignored int parameter to assign an invalid ID, to be replaced + // by an existing ID copied from elsewhere. + CutObjectBase(int) : ObjectBase(-1) {} + // Constructor to initialize full information from 3mf + CutObjectBase(ObjectID id, size_t check_sum, size_t connectors_cnt) : ObjectBase(id), m_check_sum(check_sum), m_connectors_cnt(connectors_cnt) {} + // The class tree will have virtual tables and type information. + virtual ~CutObjectBase() = default; + + bool operator<(const CutObjectBase &other) const { return other.id() > this->id(); } + bool operator==(const CutObjectBase &other) const { return other.id() == this->id(); } + + void copy(const CutObjectBase &rhs) + { + this->copy_id(rhs); + this->m_check_sum = rhs.check_sum(); + this->m_connectors_cnt = rhs.connectors_cnt(); + } + CutObjectBase &operator=(const CutObjectBase &other) + { + this->copy(other); + return *this; + } + + void invalidate() + { + set_invalid_id(); + m_check_sum = 1; + m_connectors_cnt = 0; + } + + void init() { this->set_new_unique_id(); } + bool has_same_id(const CutObjectBase &rhs) { return this->id() == rhs.id(); } + bool is_equal(const CutObjectBase &rhs) { return this->id() == rhs.id() && this->check_sum() == rhs.check_sum() && this->connectors_cnt() == rhs.connectors_cnt(); } + + size_t check_sum() const { return m_check_sum; } + void set_check_sum(size_t cs) { m_check_sum = cs; } + void increase_check_sum(size_t cnt) { m_check_sum += cnt; } + + size_t connectors_cnt() const { return m_connectors_cnt; } + void increase_connectors_cnt(size_t connectors_cnt) { m_connectors_cnt += connectors_cnt; } + +private: + friend class cereal::access; + template void serialize(Archive &ar) + { + ar(cereal::base_class(this)); + ar(m_check_sum, m_connectors_cnt); + } +}; + + // Unique object / instance ID for the wipe tower. extern ObjectID wipe_tower_object_id(); extern ObjectID wipe_tower_instance_id(); diff --git a/src/libslic3r/Point.hpp b/src/libslic3r/Point.hpp index c72bedafb0..b291157626 100644 --- a/src/libslic3r/Point.hpp +++ b/src/libslic3r/Point.hpp @@ -566,6 +566,9 @@ namespace cereal { template void load(Archive& archive, Slic3r::Matrix2f &m) { archive.loadBinary((char*)m.data(), sizeof(float) * 4); } template void save(Archive& archive, Slic3r::Matrix2f &m) { archive.saveBinary((char*)m.data(), sizeof(float) * 4); } + + template void load(Archive &archive, Slic3r::Transform3d &m) { archive.loadBinary((char *) m.data(), sizeof(double) * 16); } + template void save(Archive &archive, const Slic3r::Transform3d &m) { archive.saveBinary((char *) m.data(), sizeof(double) * 16); } } // To be able to use Vec<> and Mat<> in range based for loops: diff --git a/src/libslic3r/TriangleMesh.cpp b/src/libslic3r/TriangleMesh.cpp index 5fa3611192..b5d0d10883 100644 --- a/src/libslic3r/TriangleMesh.cpp +++ b/src/libslic3r/TriangleMesh.cpp @@ -984,6 +984,61 @@ indexed_triangle_set its_make_cone(double r, double h, double fa) return mesh; } +// Generates mesh for a frustum dowel centered about the origin, using the count of sectors +// Note: This function uses code for sphere generation, but for stackCount = 2; +indexed_triangle_set its_make_frustum_dowel(double radius, double h, int sectorCount) +{ + int stackCount = 2; + float sectorStep = float(2. * M_PI / sectorCount); + float stackStep = float(M_PI / stackCount); + + indexed_triangle_set mesh; + auto& vertices = mesh.vertices; + vertices.reserve((stackCount - 1) * sectorCount + 2); + for (int i = 0; i <= stackCount; ++i) { + // from pi/2 to -pi/2 + double stackAngle = 0.5 * M_PI - stackStep * i; + double xy = radius * cos(stackAngle); + double z = radius * sin(stackAngle); + if (i == 0 || i == stackCount) + vertices.emplace_back(Vec3f(float(xy), 0.f, float(h * sin(stackAngle)))); + else + for (int j = 0; j < sectorCount; ++j) { + // from 0 to 2pi + double sectorAngle = sectorStep * j + 0.25 * M_PI; + vertices.emplace_back(Vec3d(xy * std::cos(sectorAngle), xy * std::sin(sectorAngle), z).cast()); + } + } + + auto& facets = mesh.indices; + facets.reserve(2 * (stackCount - 1) * sectorCount); + for (int i = 0; i < stackCount; ++i) { + // Beginning of current stack. + int k1 = (i == 0) ? 0 : (1 + (i - 1) * sectorCount); + int k1_first = k1; + // Beginning of next stack. + int k2 = (i == 0) ? 1 : (k1 + sectorCount); + int k2_first = k2; + for (int j = 0; j < sectorCount; ++j) { + // 2 triangles per sector excluding first and last stacks + int k1_next = k1; + int k2_next = k2; + if (i != 0) { + k1_next = (j + 1 == sectorCount) ? k1_first : (k1 + 1); + facets.emplace_back(k1, k2, k1_next); + } + if (i + 1 != stackCount) { + k2_next = (j + 1 == sectorCount) ? k2_first : (k2 + 1); + facets.emplace_back(k1_next, k2, k2_next); + } + k1 = k1_next; + k2 = k2_next; + } + } + + return mesh; +} + indexed_triangle_set its_make_pyramid(float base, float height) { float a = base / 2.f; diff --git a/src/libslic3r/TriangleMesh.hpp b/src/libslic3r/TriangleMesh.hpp index 79aac12cc6..9afaddd4eb 100644 --- a/src/libslic3r/TriangleMesh.hpp +++ b/src/libslic3r/TriangleMesh.hpp @@ -337,6 +337,7 @@ indexed_triangle_set its_make_cube(double x, double y, double z); indexed_triangle_set its_make_prism(float width, float length, float height); indexed_triangle_set its_make_cylinder(double r, double h, double fa=(2*PI/360)); indexed_triangle_set its_make_cone(double r, double h, double fa=(2*PI/360)); +indexed_triangle_set its_make_frustum_dowel(double r, double h, int sectorCount); indexed_triangle_set its_make_pyramid(float base, float height); indexed_triangle_set its_make_sphere(double radius, double fa); diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 3d60c924d1..f33eb3df15 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -265,6 +265,8 @@ set(SLIC3R_GUI_SOURCES GUI/3DBed.hpp GUI/Camera.cpp GUI/Camera.hpp + GUI/CameraUtils.cpp + GUI/CameraUtils.hpp GUI/wxExtensions.cpp GUI/wxExtensions.hpp GUI/WipeTowerDialog.cpp diff --git a/src/slic3r/GUI/CameraUtils.cpp b/src/slic3r/GUI/CameraUtils.cpp new file mode 100644 index 0000000000..99d022e4bc --- /dev/null +++ b/src/slic3r/GUI/CameraUtils.cpp @@ -0,0 +1,131 @@ +#include "CameraUtils.hpp" +#include // projecting points +#include + +#include "slic3r/GUI/3DScene.hpp" // GLVolume +#include "libslic3r/Geometry/ConvexHull.hpp" + +using namespace Slic3r; +using namespace GUI; + +Points CameraUtils::project(const Camera & camera, + const std::vector &points) +{ + Vec4i viewport(camera.get_viewport().data()); + + // Convert our std::vector to Eigen dynamic matrix. + Eigen::Matrix + pts(points.size(), 3); + for (size_t i = 0; i < points.size(); ++i) + pts.block<1, 3>(i, 0) = points[i]; + + // Get the projections. + Eigen::Matrix projections; + igl::project(pts, camera.get_view_matrix().matrix(), + camera.get_projection_matrix().matrix(), viewport, projections); + + Points result; + result.reserve(points.size()); + int window_height = viewport[3]; + + // convert to points --> loss precision + for (int i = 0; i < projections.rows(); ++i) { + double x = projections(i, 0); + double y = projections(i, 1); + // opposit direction o Y + result.emplace_back(x, window_height - y); + } + return result; +} + +Point CameraUtils::project(const Camera &camera, const Vec3d &point) +{ + // IMPROVE: do it faster when you need it (inspire in project multi point) + return project(camera, std::vector{point}).front(); +} + +Slic3r::Polygon CameraUtils::create_hull2d(const Camera & camera, + const GLVolume &volume) +{ + std::vector vertices; + const TriangleMesh *hull = volume.convex_hull(); + if (hull != nullptr) { + const indexed_triangle_set &its = hull->its; + vertices.reserve(its.vertices.size()); + // cast vector + for (const Vec3f &vertex : its.vertices) + vertices.emplace_back(vertex.cast()); + } else { + // Negative volume doesn't have convex hull so use bounding box + auto bb = volume.bounding_box(); + Vec3d &min = bb.min; + Vec3d &max = bb.max; + vertices = {min, + Vec3d(min.x(), min.y(), max.z()), + Vec3d(min.x(), max.y(), min.z()), + Vec3d(min.x(), max.y(), max.z()), + Vec3d(max.x(), min.y(), min.z()), + Vec3d(max.x(), min.y(), max.z()), + Vec3d(max.x(), max.y(), min.z()), + max}; + } + + const Transform3d &trafoMat = + volume.get_instance_transformation().get_matrix() * + volume.get_volume_transformation().get_matrix(); + for (Vec3d &vertex : vertices) + vertex = trafoMat * vertex.cast(); + + Points vertices_2d = project(camera, vertices); + return Geometry::convex_hull(vertices_2d); +} + +void CameraUtils::ray_from_screen_pos(const Camera &camera, const Vec2d &position, Vec3d &point, Vec3d &direction) { + switch (camera.get_type()) { + case Camera::EType::Ortho: return ray_from_ortho_screen_pos(camera, position, point, direction); + case Camera::EType::Perspective: return ray_from_persp_screen_pos(camera, position, point, direction); + default: break; + } +} + +Vec3d CameraUtils::screen_point(const Camera &camera, const Vec2d &position) +{ + double height = camera.get_viewport().data()[3]; + // Y coordinate has opposit direction + return Vec3d(position.x(), height - position.y(), 0.); +} + +void CameraUtils::ray_from_ortho_screen_pos(const Camera &camera, const Vec2d &position, Vec3d &point, Vec3d &direction) +{ + assert(camera.get_type() == Camera::EType::Ortho); + Matrix4d modelview = camera.get_view_matrix().matrix(); + Matrix4d projection = camera.get_projection_matrix().matrix(); + Vec4i viewport(camera.get_viewport().data()); + igl::unproject(screen_point(camera,position), modelview, projection, viewport, point); + direction = camera.get_dir_forward(); +} +void CameraUtils::ray_from_persp_screen_pos(const Camera &camera, const Vec2d &position, Vec3d &point, Vec3d &direction) +{ + assert(camera.get_type() == Camera::EType::Perspective); + Matrix4d modelview = camera.get_view_matrix().matrix(); + Matrix4d projection = camera.get_projection_matrix().matrix(); + Vec4i viewport(camera.get_viewport().data()); + igl::unproject(screen_point(camera, position), modelview, projection, viewport, point); + direction = point - camera.get_position(); +} + +Vec2d CameraUtils::get_z0_position(const Camera &camera, const Vec2d & coor) +{ + Vec3d p0, dir; + ray_from_screen_pos(camera, coor, p0, dir); + + // is approx zero + if ((fabs(dir.z()) - 1e-4) < 0) + return Vec2d(std::numeric_limits::max(), + std::numeric_limits::max()); + + // find position of ray cross plane(z = 0) + double t = p0.z() / dir.z(); + Vec3d p = p0 - t * dir; + return Vec2d(p.x(), p.y()); +} diff --git a/src/slic3r/GUI/CameraUtils.hpp b/src/slic3r/GUI/CameraUtils.hpp new file mode 100644 index 0000000000..c3e938ec42 --- /dev/null +++ b/src/slic3r/GUI/CameraUtils.hpp @@ -0,0 +1,69 @@ +#ifndef slic3r_CameraUtils_hpp_ +#define slic3r_CameraUtils_hpp_ + +#include "Camera.hpp" +#include "libslic3r/Point.hpp" +namespace Slic3r { +class GLVolume; +} + +namespace Slic3r::GUI { +/// +/// Help divide camera data and camera functions +/// This utility work with camera data by static funtions +/// +class CameraUtils +{ +public: + CameraUtils() = delete; // only static functions + + /// + /// Project point throw camera to 2d coordinate into imgui window + /// + /// Projection params + /// Point to project. + /// projected points by camera into coordinate of camera. + /// x(from left to right), y(from top to bottom) + static Points project(const Camera& camera, const std::vector &points); + static Point project(const Camera& camera, const Vec3d &point); + + /// + /// Create hull around GLVolume in 2d space of camera + /// + /// Projection params + /// Outline by 3d object + /// Polygon around object + static Polygon create_hull2d(const Camera &camera, const GLVolume &volume); + + /// + /// Create ray(point and direction) for screen coordinate + /// + /// Definition of camera + /// Position on screen(aka mouse position) + /// OUT start of ray + /// OUT direction of ray + static void ray_from_screen_pos(const Camera &camera, const Vec2d &position, Vec3d &point, Vec3d &direction); + static void ray_from_ortho_screen_pos(const Camera &camera, const Vec2d &position, Vec3d &point, Vec3d &direction); + static void ray_from_persp_screen_pos(const Camera &camera, const Vec2d &position, Vec3d &point, Vec3d &direction); + + /// + /// Unproject mouse coordinate to get position in space where z coor is zero + /// Platter surface should be in z == 0 + /// + /// Projection params + /// Mouse position + /// Position on platter under mouse + static Vec2d get_z0_position(const Camera &camera, const Vec2d &coor); + + /// + /// Create 3d screen point from 2d position + /// + /// Define camera viewport + /// Position on screen(aka mouse position) + /// Point represented screen coor in 3d + static Vec3d screen_point(const Camera &camera, const Vec2d &position); + +}; +} // Slic3r::GUI + +#endif /* slic3r_CameraUtils_hpp_ */ diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 876f16a30a..6d5d5babd3 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -3861,6 +3861,11 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) default: { break; } } } + else if (evt.LeftUp() && + m_gizmos.get_current_type() == GLGizmosManager::EType::Scale && + m_gizmos.get_current()->get_state() == GLGizmoBase::EState::On) { + wxGetApp().obj_list()->selection_changed(); + } return; } @@ -6632,9 +6637,14 @@ void GLCanvas3D::_render_objects(GLVolumeCollection::ERenderType type, bool with else m_volumes.set_z_range(-FLT_MAX, FLT_MAX); + GLGizmosManager& gm = get_gizmos_manager(); + GLGizmoBase* current_gizmo = gm.get_current(); if (m_canvas_type == CanvasAssembleView) { m_volumes.set_clipping_plane(m_gizmos.get_assemble_view_clipping_plane().get_data()); } + else if (current_gizmo && !current_gizmo->apply_clipping_plane()) { + m_volumes.set_clipping_plane(ClippingPlane::ClipsNothing().get_data()); + } else { m_volumes.set_clipping_plane(m_camera_clipping_plane.get_data()); } diff --git a/src/slic3r/GUI/GLShadersManager.cpp b/src/slic3r/GUI/GLShadersManager.cpp index 33e5a09540..5f8ee9bc9f 100644 --- a/src/slic3r/GUI/GLShadersManager.cpp +++ b/src/slic3r/GUI/GLShadersManager.cpp @@ -44,6 +44,10 @@ std::pair GLShadersManager::init() valid &= append_shader("gouraud_light_instanced", { "gouraud_light_instanced.vs", "gouraud_light_instanced.fs" }); // used to render extrusion and travel paths as lines in gcode preview valid &= append_shader("toolpaths_lines", { "toolpaths_lines.vs", "toolpaths_lines.fs" }); + + // used to render cut connectors + valid &= append_shader("gouraud_light_uniform", {"gouraud_light_uniform.vs", "gouraud_light_uniform.fs"}); + // used to render objects in 3d editor //if (GUI::wxGetApp().is_gl_version_greater_or_equal_to(3, 0)) { if (0) { diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index 320493ca98..288fd9ada3 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -914,6 +914,20 @@ void MenuFactory::append_menu_items_mirror(wxMenu* menu) []() { return plater()->can_mirror(); }, m_parent); } +void MenuFactory::append_menu_item_invalidate_cut_info(wxMenu *menu) +{ + const wxString menu_name = _L("Invalidate cut info"); + + auto menu_item_id = menu->FindItem(menu_name); + if (menu_item_id != wxNOT_FOUND) + // Delete old menu item if selected object isn't cut + menu->Destroy(menu_item_id); + + if (obj_list()->has_selected_cut_object()) + append_menu_item(menu, wxID_ANY, menu_name, "", [](wxCommandEvent &) { obj_list()->invalidate_cut_info_for_selection(); }, + "", menu, []() { return true; }, m_parent); +} + MenuFactory::MenuFactory() { for (int i = 0; i < mtCount; i++) { @@ -1235,6 +1249,7 @@ wxMenu* MenuFactory::object_menu() append_menu_item_change_filament(&m_object_menu); append_menu_items_convert_unit(&m_object_menu); append_menu_items_flush_options(&m_object_menu); + append_menu_item_invalidate_cut_info(&m_object_menu); return &m_object_menu; } diff --git a/src/slic3r/GUI/GUI_Factories.hpp b/src/slic3r/GUI/GUI_Factories.hpp index a3c01f961f..8e2814b572 100644 --- a/src/slic3r/GUI/GUI_Factories.hpp +++ b/src/slic3r/GUI/GUI_Factories.hpp @@ -136,6 +136,8 @@ private: void append_menu_item_merge_to_single_object(wxMenu* menu); void append_menu_item_merge_parts_to_single_part(wxMenu *menu); void append_menu_items_mirror(wxMenu *menu); + void append_menu_item_invalidate_cut_info(wxMenu *menu); + //void append_menu_items_instance_manipulation(wxMenu *menu); //void update_menu_items_instance_manipulation(MenuType type); //BBS add bbl menu item diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 1edb3914e3..3bd4ea2df5 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -36,6 +36,7 @@ #include "wx/uiaction.h" #include #endif /* __WXMSW__ */ +#include "Gizmos/GLGizmoScale.hpp" namespace Slic3r { @@ -927,6 +928,8 @@ void ObjectList::selection_changed() fix_multiselection_conflicts(); + fix_cut_selection(); + // update object selection on Plater if (!m_prevent_canvas_selection_update) update_selections_on_canvas(); @@ -2264,9 +2267,9 @@ int ObjectList::load_mesh_part(const TriangleMesh &mesh, const wxString &name, c } //BBS -void ObjectList::del_object(const int obj_idx, bool refresh_immediately) +bool ObjectList::del_object(const int obj_idx, bool refresh_immediately) { - wxGetApp().plater()->delete_object_from_model(obj_idx, refresh_immediately); + return wxGetApp().plater()->delete_object_from_model(obj_idx, refresh_immediately); } // Delete subobject @@ -2283,6 +2286,7 @@ void ObjectList::del_subobject_item(wxDataViewItem& item) wxDataViewItem parent = m_objects_model->GetParent(item); + InfoItemType item_info_type = m_objects_model->GetInfoItemType(item); if (type & itSettings) del_settings_from_config(parent); else if (type & itInstanceRoot && obj_idx != -1) @@ -2292,7 +2296,7 @@ void ObjectList::del_subobject_item(wxDataViewItem& item) else if (type & itLayer && obj_idx != -1) del_layer_from_object(obj_idx, m_objects_model->GetLayerRangeByItem(item)); else if (type & itInfo && obj_idx != -1) - del_info_item(obj_idx, m_objects_model->GetInfoItemType(item)); + del_info_item(obj_idx, item_info_type); else if (idx == -1) return; else if (!del_subobject_from_object(obj_idx, idx, type)) @@ -2304,8 +2308,11 @@ void ObjectList::del_subobject_item(wxDataViewItem& item) m_objects_model->UpdateWarningIcon(parent, icon_name); } - m_objects_model->Delete(item); - update_info_items(obj_idx); + if (!(type & itInfo) || item_info_type != InfoItemType::CutConnectors) { + // Connectors Item is already updated/deleted inside the del_info_item() + m_objects_model->Delete(item); + update_info_items(obj_idx); + } } void ObjectList::del_info_item(const int obj_idx, InfoItemType type) @@ -2329,6 +2336,13 @@ void ObjectList::del_info_item(const int obj_idx, InfoItemType type) mv->mmu_segmentation_facets.reset(); break; + case InfoItemType::CutConnectors: + if (!del_from_cut_object(true)) { + // there is no need to post EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS if nothing was changed + return; + } + break; + // BBS: remove Sinking case InfoItemType::Undef : assert(false); break; } @@ -2399,6 +2413,38 @@ void ObjectList::del_layers_from_object(const int obj_idx) changed_object(obj_idx); } +bool ObjectList::del_from_cut_object(bool is_cut_connector, bool is_model_part/* = false*/, bool is_negative_volume/* = false*/) +{ + const long buttons_style = is_cut_connector ? (wxYES | wxNO | wxCANCEL) : (wxYES | wxCANCEL); + + const wxString title = is_cut_connector ? _L("Delete connector from object which is a part of cut") : + is_model_part ? _L("Delete solid part from object which is a part of cut") : + is_negative_volume ? _L("Delete negative volume from object which is a part of cut") : ""; + + const wxString msg_end = is_cut_connector ? ("\n" + _L("To save cut correspondence you can delete all connectors from all related objects.")) : ""; + + InfoDialog dialog(wxGetApp().plater(), title, + _L("This action will break a cut correspondence.\n" + "After that model consistency can't be guaranteed .\n" + "\n" + "To manipulate with solid parts or negative volumes you have to invalidate cut infornation first." + msg_end ), + false, buttons_style | wxCANCEL_DEFAULT | wxICON_WARNING); + + dialog.SetButtonLabel(wxID_YES, _L("Invalidate cut info")); + if (is_cut_connector) + dialog.SetButtonLabel(wxID_NO, _L("Delete all connectors")); + + const int answer = dialog.ShowModal(); + if (answer == wxID_CANCEL) + return false; + + if (answer == wxID_YES) + invalidate_cut_info_for_selection(); + else if (answer == wxID_NO) + delete_all_connectors_for_selection(); + return true; +} + bool ObjectList::del_subobject_from_object(const int obj_idx, const int idx, const int type) { assert(idx >= 0); @@ -2423,6 +2469,11 @@ bool ObjectList::del_subobject_from_object(const int obj_idx, const int idx, con Slic3r::GUI::show_error(nullptr, _L("Deleting the last solid part is not allowed.")); return false; } + if (object->is_cut() && (volume->is_model_part() || volume->is_negative_volume())) { + del_from_cut_object(volume->is_cut_connector(), volume->is_model_part(), volume->is_negative_volume()); + // in any case return false to break the deletion + return false; + } take_snapshot("Delete part"); @@ -2927,6 +2978,9 @@ bool ObjectList::can_split_instances() bool ObjectList::can_merge_to_multipart_object() const { + if (has_selected_cut_object()) + return false; + if (printer_technology() == ptSLA) return false; @@ -2954,6 +3008,97 @@ bool ObjectList::can_merge_to_single_object() const return (*m_objects)[obj_idx]->volumes.size() > 1; } +bool ObjectList::has_selected_cut_object() const +{ + wxDataViewItemArray sels; + GetSelections(sels); + if (sels.IsEmpty()) + return false; + + for (wxDataViewItem item : sels) { + const int obj_idx = m_objects_model->GetObjectIdByItem(item); + if (obj_idx >= 0 && object(obj_idx)->is_cut()) + return true; + } + + return false; +} + +void ObjectList::invalidate_cut_info_for_selection() +{ + const wxDataViewItem item = GetSelection(); + if (item) { + const int obj_idx = m_objects_model->GetObjectIdByItem(item); + if (obj_idx >= 0) + invalidate_cut_info_for_object(size_t(obj_idx)); + } +} + +void ObjectList::invalidate_cut_info_for_object(int obj_idx) +{ + ModelObject *init_obj = object(obj_idx); + if (!init_obj->is_cut()) return; + + take_snapshot("Invalidate cut info"); + + const CutObjectBase cut_id = init_obj->cut_id; + // invalidate cut for related objects (which have the same cut_id) + for (size_t idx = 0; idx < m_objects->size(); idx++) + if (ModelObject *obj = object(int(idx)); obj->cut_id.is_equal(cut_id)) { + obj->invalidate_cut(); + update_info_items(idx); + add_volumes_to_object_in_list(idx); + } + + update_lock_icons_for_model(); +} + +void ObjectList::delete_all_connectors_for_selection() +{ + const wxDataViewItem item = GetSelection(); + if (item) { + const int obj_idx = m_objects_model->GetObjectIdByItem(item); + if (obj_idx >= 0) + delete_all_connectors_for_object(size_t(obj_idx)); + } +} + +void ObjectList::delete_all_connectors_for_object(int obj_idx) +{ + ModelObject *init_obj = object(obj_idx); + if (!init_obj->is_cut()) + return; + + take_snapshot("Delete all connectors"); + + auto has_solid_mesh = [](ModelObject* obj) { + for (const ModelVolume *volume : obj->volumes) + if (volume->is_model_part()) return true; + return false; + }; + + const CutObjectBase cut_id = init_obj->cut_id; + // Delete all connectors for related objects (which have the same cut_id) + Model &model = wxGetApp().plater()->model(); + for (int idx = int(m_objects->size()) - 1; idx >= 0; idx--) + if (ModelObject *obj = object(idx); obj->cut_id.is_equal(cut_id)) { + obj->delete_connectors(); + + if (obj->volumes.empty() || !has_solid_mesh(obj)) { + model.delete_object(idx); + m_objects_model->Delete(m_objects_model->GetItemById(idx)); + continue; + } + + update_info_items(idx); + add_volumes_to_object_in_list(idx); + changed_object(int(idx)); + } + + update_lock_icons_for_model(); +} + + // NO_PARAMETERS function call means that changed object index will be determine from Selection() void ObjectList::changed_object(const int obj_idx/* = -1*/) const { @@ -2972,15 +3117,77 @@ void ObjectList::part_selection_changed() bool update_and_show_settings = false; bool update_and_show_layers = false; + bool enable_manipulation{true}; + bool disable_ss_manipulation{false}; + bool disable_ununiform_scale{false}; + const auto item = GetSelection(); - // BBS - if (item && (m_objects_model->GetItemType(item) & itPlate)) { + if (item && m_objects_model->GetItemType(item) == itInfo && m_objects_model->GetInfoItemType(item) == InfoItemType::CutConnectors) { + og_name = _L("Cut Connectors information"); + + update_and_show_manipulations = true; + enable_manipulation = false; + disable_ununiform_scale = true; + } + else if (item && (m_objects_model->GetItemType(item) & itPlate)) { + // BBS // TODO: og for plate } else if ( multiple_selection() || (item && m_objects_model->GetItemType(item) == itInstanceRoot )) { const Selection& selection = scene_selection(); - // don't show manipulation panel for case of all Object's parts selection - update_and_show_manipulations = !selection.is_single_full_instance(); + + if (selection.is_single_full_object()) { + og_name = _L("Object manipulation"); + update_and_show_manipulations = true; + + obj_idx = selection.get_object_idx(); + ModelObject *object = (*m_objects)[obj_idx]; + m_config = &object->config; + disable_ss_manipulation = object->is_cut(); + } + else { + og_name = _L("Group manipulation"); + + // don't show manipulation panel for case of all Object's parts selection + update_and_show_manipulations = !selection.is_single_full_instance(); + + if (int obj_idx = selection.get_object_idx(); obj_idx >= 0) { + if (selection.is_any_volume() || selection.is_any_modifier()) + enable_manipulation = !(*m_objects)[obj_idx]->is_cut(); + else // if (item && m_objects_model->GetItemType(item) == itInstanceRoot) + disable_ss_manipulation = (*m_objects)[obj_idx]->is_cut(); + } + else { + wxDataViewItemArray sels; + GetSelections(sels); + if (selection.is_single_full_object() || selection.is_multiple_full_instance()) { + int obj_idx = m_objects_model->GetObjectIdByItem(sels.front()); + disable_ss_manipulation = (*m_objects)[obj_idx]->is_cut(); + } else if (selection.is_mixed() || selection.is_multiple_full_object()) { + std::map> cut_objects; + + // find cut objects + for (auto item : sels) { + int obj_idx = m_objects_model->GetObjectIdByItem(item); + const ModelObject *obj = object(obj_idx); + if (obj->is_cut()) { + if (cut_objects.find(obj->cut_id) == cut_objects.end()) + cut_objects[obj->cut_id] = std::set{obj_idx}; + else + cut_objects.at(obj->cut_id).insert(obj_idx); + } + } + + // check if selected cut objects are "full selected" + for (auto cut_object : cut_objects) + if (cut_object.first.check_sum() != cut_object.second.size()) { + disable_ss_manipulation = true; + break; + } + disable_ununiform_scale = !cut_objects.empty(); + } + } + } // BBS: multi config editing update_and_show_settings = true; @@ -3022,34 +3229,44 @@ void ObjectList::part_selection_changed() // BBS: select object to edit config m_config = &(*m_objects)[obj_idx]->config; update_and_show_settings = true; + disable_ss_manipulation = (*m_objects)[obj_idx]->is_cut(); } } else { if (type & itSettings) { if (parent_type & itObject) { + og_name = _L("Object Settings to modify"); m_config = &(*m_objects)[obj_idx]->config; } else if (parent_type & itVolume) { + og_name = _L("Part Settings to modify"); volume_id = m_objects_model->GetVolumeIdByItem(parent); m_config = &(*m_objects)[obj_idx]->volumes[volume_id]->config; } else if (parent_type & itLayer) { + og_name = _L("Layer range Settings to modify"); m_config = &get_item_config(parent); } update_and_show_settings = true; } else if (type & itVolume) { + og_name = _L("Part manipulation"); volume_id = m_objects_model->GetVolumeIdByItem(item); m_config = &(*m_objects)[obj_idx]->volumes[volume_id]->config; update_and_show_manipulations = true; m_config = &(*m_objects)[obj_idx]->volumes[volume_id]->config; update_and_show_settings = true; + + const ModelVolume *volume = (*m_objects)[obj_idx]->volumes[volume_id]; + enable_manipulation = !((*m_objects)[obj_idx]->is_cut() && (volume->is_cut_connector() || volume->is_model_part())); } else if (type & itInstance) { + og_name = _L("Instance manipulation"); update_and_show_manipulations = true; // fill m_config by object's values m_config = &(*m_objects)[obj_idx]->config; + disable_ss_manipulation = (*m_objects)[obj_idx]->is_cut(); } // BBS: remove height range logics } @@ -3068,6 +3285,11 @@ void ObjectList::part_selection_changed() //wxGetApp().obj_manipul()->update_item_name(m_objects_model->GetName(item)); //wxGetApp().obj_manipul()->update_warning_icon_state(get_mesh_errors_info(obj_idx, volume_id)); } + + GLGizmosManager &gizmos_mgr = wxGetApp().plater()->canvas3D()->get_gizmos_manager(); + + if (GLGizmoScale3D *scale = dynamic_cast(gizmos_mgr.get_gizmo(GLGizmosManager::Scale))) + scale->enable_ununiversal_scale(!disable_ununiform_scale); } #if !NEW_OBJECT_SETTING @@ -3162,6 +3384,33 @@ void ObjectList::update_info_items(size_t obj_idx, wxDataViewItemArray* selectio wxDataViewItem item_obj = m_objects_model->GetItemById(obj_idx); assert(item_obj.IsOk()); + // Cut connectors + { + wxDataViewItem item = m_objects_model->GetInfoItemByType(item_obj, InfoItemType::CutConnectors); + bool shows = item.IsOk(); + bool should_show = model_object->is_cut() && model_object->has_connectors() && model_object->volumes.size() > 1; + + if (!shows && should_show) { + m_objects_model->AddInfoChild(item_obj, InfoItemType::CutConnectors); + Expand(item_obj); + if (added_object) + wxGetApp().notification_manager()->push_updated_item_info_notification(InfoItemType::CutConnectors); + } else if (shows && !should_show) { + if (!selections) Unselect(item); + m_objects_model->Delete(item); + if (selections) { + if (selections->Index(item) != wxNOT_FOUND) { + // If info item was deleted from the list, + // it's need to be deleted from selection array, if it was there + selections->Remove(item); + // Select item_obj, if info_item doesn't exist for item anymore, but was selected + if (selections->Index(item_obj) == wxNOT_FOUND) selections->Add(item_obj); + } + } else + Select(item_obj); + } + } + { bool shows = m_objects_model->IsSupportPainted(item_obj); bool should_show = printer_technology() == ptFFF @@ -3285,24 +3534,12 @@ void ObjectList::add_object_to_list(size_t obj_idx, bool call_selection_changed, //const wxString& item_name = from_u8(item_name_str); const wxString& item_name = from_u8(model_object->name); std::string warning_bitmap = get_warning_icon_name(model_object->mesh().stats()); - const auto item = m_objects_model->AddObject(model_object, warning_bitmap); + const auto item = m_objects_model->AddObject(model_object, warning_bitmap, model_object->is_cut()); Expand(m_objects_model->GetParent(item)); update_info_items(obj_idx, nullptr, call_selection_changed); - // add volumes to the object - if (model_object->volumes.size() > 1) { - for (const ModelVolume* volume : model_object->volumes) { - const wxDataViewItem& vol_item = m_objects_model->AddVolumeChild(item, - from_u8(volume->name), - volume->type(), - get_warning_icon_name(volume->mesh().stats()), - volume->config.has("extruder") ? volume->config.extruder() : 0, - false); - add_settings_item(vol_item, &volume->config.get()); - } - Expand(item); - } + add_volumes_to_object_in_list(obj_idx); // add instances to the object, if it has those if (model_object->instances.size()>1) @@ -3336,6 +3573,68 @@ void ObjectList::add_object_to_list(size_t obj_idx, bool call_selection_changed, #endif //__WXMSW__ } +static bool can_add_volumes_to_object(const ModelObject *object) +{ + bool can = object->volumes.size() > 1; + + if (can && object->is_cut()) { + int no_connectors_cnt = 0; + for (const ModelVolume *v : object->volumes) + if (!v->is_cut_connector()) { + if (!v->is_model_part()) + return true; + no_connectors_cnt++; + } + can = no_connectors_cnt > 1; + } + + return can; +} + +wxDataViewItemArray ObjectList::add_volumes_to_object_in_list(size_t obj_idx, std::function add_to_selection /* = nullptr*/) +{ + const bool is_prevent_list_events = m_prevent_list_events; + m_prevent_list_events = true; + + wxDataViewItem object_item = m_objects_model->GetItemById(int(obj_idx)); + m_objects_model->DeleteVolumeChildren(object_item); + + wxDataViewItemArray items; + + const ModelObject *object = (*m_objects)[obj_idx]; + // add volumes to the object + if (can_add_volumes_to_object(object)) { + if (object->volumes.size() > 1) { + wxString obj_item_name = from_u8(object->name); + if (m_objects_model->GetName(object_item) != obj_item_name) + m_objects_model->SetName(obj_item_name, object_item); + } + + int volume_idx{-1}; + for (const ModelVolume *volume : object->volumes) { + ++volume_idx; + if (object->is_cut() && volume->is_cut_connector()) + continue; + + const wxDataViewItem &vol_item = m_objects_model->AddVolumeChild( + object_item, + from_u8(volume->name), + volume->type(), + get_warning_icon_name(volume->mesh().stats()), + volume->config.has("extruder") ? volume->config.extruder() : 0, + false); + add_settings_item(vol_item, &volume->config.get()); + + if (add_to_selection && add_to_selection(volume)) + items.Add(vol_item); + } + Expand(object_item); + } + + m_prevent_list_events = is_prevent_list_events; + return items; +} + void ObjectList::delete_object_from_list() { auto item = GetSelection(); @@ -3370,8 +3669,12 @@ void ObjectList::delete_from_model_and_list(const ItemType type, const int obj_i take_snapshot("Delete selected"); if (type&itObject) { - del_object(obj_idx); - delete_object_from_list(obj_idx); + bool was_cut = object(obj_idx)->is_cut(); + if (del_object(obj_idx)) { + delete_object_from_list(obj_idx); + if (was_cut) + update_lock_icons_for_model(); + } } else { del_subobject_from_object(obj_idx, sub_obj_idx, type); @@ -3398,12 +3701,16 @@ void ObjectList::delete_from_model_and_list(const std::vector& it // refresh after del_object need_update = true; bool refresh_immediately = false; - del_object(item->obj_idx, refresh_immediately); + bool was_cut = object(item->obj_idx)->is_cut(); + if (!del_object(item->obj_idx, refresh_immediately)) + return; m_objects_model->Delete(m_objects_model->GetItemById(item->obj_idx)); + if (was_cut) + update_lock_icons_for_model(); } else { if (!del_subobject_from_object(item->obj_idx, item->sub_obj_idx, item->type)) - continue; + return; //continue; if (item->type&itVolume) { m_objects_model->Delete(m_objects_model->GetItemByVolumeId(item->obj_idx, item->sub_obj_idx)); // BBS @@ -3441,6 +3748,14 @@ void ObjectList::delete_from_model_and_list(const std::vector& it part_selection_changed(); } +void ObjectList::update_lock_icons_for_model() +{ + // update the icon for cut object + for (size_t obj_idx = 0; obj_idx < (*m_objects).size(); ++obj_idx) + if (!(*m_objects)[obj_idx]->is_cut()) + m_objects_model->UpdateCutObjectIcon(m_objects_model->GetItemById(int(obj_idx)), false); +} + void ObjectList::delete_all_objects_from_list() { m_prevent_list_events = true; @@ -3856,6 +4171,25 @@ bool ObjectList::is_selected(const ItemType type) const return false; } +bool ObjectList::is_connectors_item_selected() const +{ + const wxDataViewItem &item = GetSelection(); + if (item) + return m_objects_model->GetItemType(item) == itInfo && m_objects_model->GetInfoItemType(item) == InfoItemType::CutConnectors; + + return false; +} + +bool ObjectList::is_connectors_item_selected(const wxDataViewItemArray &sels) const +{ + for (auto item : sels) + if (m_objects_model->GetItemType(item) == itInfo && m_objects_model->GetInfoItemType(item) == InfoItemType::CutConnectors) + return true; + + return false; +} + + int ObjectList::get_selected_layers_range_idx() const { const wxDataViewItem& item = GetSelection(); @@ -3991,11 +4325,18 @@ void ObjectList::update_selections() else { for (auto idx : selection.get_volume_idxs()) { const auto gl_vol = selection.get_volume(idx); - if (gl_vol->volume_idx() >= 0) + if (gl_vol->volume_idx() >= 0) { // Only add GLVolumes with non-negative volume_ids. GLVolumes with negative volume ids // are not associated with ModelVolumes, but they are temporarily generated by the backend // (for example, SLA supports or SLA pad). - sels.Add(m_objects_model->GetItemByVolumeId(gl_vol->object_idx(), gl_vol->volume_idx())); + int obj_idx = gl_vol->object_idx(); + int vol_idx = gl_vol->volume_idx(); + assert(obj_idx >= 0 && vol_idx >= 0); + if (object(obj_idx)->volumes[vol_idx]->is_cut_connector()) + sels.Add(m_objects_model->GetInfoItemByType(m_objects_model->GetItemById(obj_idx), InfoItemType::CutConnectors)); + else + sels.Add(m_objects_model->GetItemByVolumeId(obj_idx, vol_idx)); + } } m_selection_mode = smVolume; } } @@ -4046,10 +4387,33 @@ void ObjectList::update_selections() if (sels.size() == 0 || m_selection_mode & smSettings) m_selection_mode = smUndef; - select_items(sels); + if (fix_cut_selection(sels) || is_connectors_item_selected(sels)) { + m_prevent_list_events = true; - // Scroll selected Item in the middle of an object list - ensure_current_item_visible(); + // If some part is selected, unselect all items except of selected parts of the current object + UnselectAll(); + SetSelections(sels); + + m_prevent_list_events = false; + + // update object selection on Plater + if (!m_prevent_canvas_selection_update) + update_selections_on_canvas(); + + // to update the toolbar and info sizer + if (!GetSelection() || m_objects_model->GetItemType(GetSelection()) == itObject || is_connectors_item_selected()) { + auto event = SimpleEvent(EVT_OBJ_LIST_OBJECT_SELECT); + event.SetEventObject(this); + wxPostEvent(this, event); + } + part_selection_changed(); + } + else { + select_items(sels); + + // Scroll selected Item in the middle of an object list + ensure_current_item_visible(); + } } void ObjectList::update_selections_on_canvas() @@ -4083,16 +4447,27 @@ void ObjectList::update_selections_on_canvas() volume_idxs.insert(volume_idxs.end(), idxs.begin(), idxs.end()); } else if (type == itInfo) { - // When selecting an info item, select one instance of the - // respective object - a gizmo may want to be opened. - int inst_idx = selection.get_instance_idx(); - int scene_obj_idx = selection.get_object_idx(); - mode = Selection::Instance; - // select first instance, unless an instance of the object is already selected - if (scene_obj_idx == -1 || inst_idx == -1 || scene_obj_idx != obj_idx) - inst_idx = 0; - std::vector idxs = selection.get_volume_idxs_from_instance(obj_idx, inst_idx); - volume_idxs.insert(volume_idxs.end(), idxs.begin(), idxs.end()); + if (m_objects_model->GetInfoItemType(item) == InfoItemType::CutConnectors) { + mode = Selection::Volume; + + // When selecting CutConnectors info item, select all object volumes, which are marked as a connector + const ModelObject *obj = object(obj_idx); + for (unsigned int vol_idx = 0; vol_idx < obj->volumes.size(); vol_idx++) + if (obj->volumes[vol_idx]->is_cut_connector()) { + std::vector idxs = selection.get_volume_idxs_from_volume(obj_idx, std::max(instance_idx, 0), vol_idx); + volume_idxs.insert(volume_idxs.end(), idxs.begin(), idxs.end()); + } + } else { + // When selecting an info item, select one instance of the + // respective object - a gizmo may want to be opened. + int inst_idx = selection.get_instance_idx(); + int scene_obj_idx = selection.get_object_idx(); + mode = Selection::Instance; + // select first instance, unless an instance of the object is already selected + if (scene_obj_idx == -1 || inst_idx == -1 || scene_obj_idx != obj_idx) inst_idx = 0; + std::vector idxs = selection.get_volume_idxs_from_instance(obj_idx, inst_idx); + volume_idxs.insert(volume_idxs.end(), idxs.begin(), idxs.end()); + } } else { @@ -4108,6 +4483,9 @@ void ObjectList::update_selections_on_canvas() if (sel_cnt == 1) { wxDataViewItem item = GetSelection(); + if (m_objects_model->GetInfoItemType(item) == InfoItemType::CutConnectors) + selection.remove_all(); + if (m_objects_model->GetItemType(item) & (itSettings | itInstanceRoot | itLayerRoot | itLayer)) add_to_selection(m_objects_model->GetParent(item), selection, instance_idx, mode); else @@ -4434,6 +4812,51 @@ void ObjectList::fix_multiselection_conflicts() m_prevent_list_events = false; } +void ObjectList::fix_cut_selection() +{ + wxDataViewItemArray sels; + GetSelections(sels); + if (fix_cut_selection(sels)) { + m_prevent_list_events = true; + + // If some part is selected, unselect all items except of selected parts of the current object + UnselectAll(); + SetSelections(sels); + + m_prevent_list_events = false; + } +} + +bool ObjectList::fix_cut_selection(wxDataViewItemArray &sels) +{ + if (wxGetApp().plater()->canvas3D()->get_gizmos_manager().get_current_type() == GLGizmosManager::Scale) { + for (const auto &item : sels) { + if (m_objects_model->GetItemType(item) & (itInstance | itObject) || + (m_objects_model->GetItemType(item) & itSettings && m_objects_model->GetItemType(m_objects_model->GetParent(item)) & itObject)) { + bool is_instance_selection = m_objects_model->GetItemType(item) & itInstance; + + int object_idx = m_objects_model->GetObjectIdByItem(item); + int inst_idx = is_instance_selection ? m_objects_model->GetInstanceIdByItem(item) : 0; + + if (auto obj = object(object_idx); obj->is_cut()) { + sels.Clear(); + + auto cut_id = obj->cut_id; + + int objects_cnt = int((*m_objects).size()); + for (int obj_idx = 0; obj_idx < objects_cnt; ++obj_idx) { + auto object = (*m_objects)[obj_idx]; + if (object->is_cut() && object->cut_id.has_same_id(cut_id)) + sels.Add(is_instance_selection ? m_objects_model->GetItemByInstanceId(obj_idx, inst_idx) : m_objects_model->GetItemById(obj_idx)); + } + return true; + } + } + } + } + return false; +} + ModelVolume* ObjectList::get_selected_model_volume() { wxDataViewItem item = GetSelection(); diff --git a/src/slic3r/GUI/GUI_ObjectList.hpp b/src/slic3r/GUI/GUI_ObjectList.hpp index 332ab45828..da1302ed5b 100644 --- a/src/slic3r/GUI/GUI_ObjectList.hpp +++ b/src/slic3r/GUI/GUI_ObjectList.hpp @@ -286,12 +286,13 @@ public: // BBS void switch_to_object_process(); int load_mesh_part(const TriangleMesh &mesh, const wxString &name, const TextInfo &text_info, bool is_temp); - void del_object(const int obj_idx, bool refresh_immediately = true); + bool del_object(const int obj_idx, bool refresh_immediately = true); void del_subobject_item(wxDataViewItem& item); void del_settings_from_config(const wxDataViewItem& parent_item); void del_instances_from_object(const int obj_idx); void del_layer_from_object(const int obj_idx, const t_layer_height_range& layer_range); void del_layers_from_object(const int obj_idx); + bool del_from_cut_object(bool is_connector, bool is_model_part = false, bool is_negative_volume = false); bool del_subobject_from_object(const int obj_idx, const int idx, const int type); void del_info_item(const int obj_idx, InfoItemType type); void split(); @@ -310,6 +311,12 @@ public: bool can_merge_to_multipart_object() const; bool can_merge_to_single_object() const; + bool has_selected_cut_object() const; + void invalidate_cut_info_for_selection(); + void invalidate_cut_info_for_object(int obj_idx); + void delete_all_connectors_for_selection(); + void delete_all_connectors_for_object(int obj_idx); + wxPoint get_mouse_position_in_control() const { return wxGetMousePosition() - this->GetScreenPosition(); } int get_selected_obj_idx() const; ModelConfig& get_item_config(const wxDataViewItem& item) const; @@ -319,6 +326,9 @@ public: // Add object to the list void add_object_to_list(size_t obj_idx, bool call_selection_changed = true, bool notify_partplate = true); + // Add object's volumes to the list + // Return selected items, if add_to_selection is defined + wxDataViewItemArray add_volumes_to_object_in_list(size_t obj_idx, std::function add_to_selection = nullptr); // Delete object from the list void delete_object_from_list(); void delete_object_from_list(const size_t obj_idx); @@ -326,6 +336,7 @@ public: void delete_instance_from_list(const size_t obj_idx, const size_t inst_idx); void delete_from_model_and_list(const ItemType type, const int obj_idx, const int sub_obj_idx); void delete_from_model_and_list(const std::vector& items_for_delete); + void update_lock_icons_for_model(); // Delete all objects from the list void delete_all_objects_from_list(); // Increase instances count @@ -368,6 +379,8 @@ public: void init(); bool multiple_selection() const ; bool is_selected(const ItemType type) const; + bool is_connectors_item_selected() const; + bool is_connectors_item_selected(const wxDataViewItemArray &sels) const; int get_selected_layers_range_idx() const; void set_selected_layers_range_idx(const int range_idx) { m_selected_layers_range_idx = range_idx; } void set_selection_mode(SELECTION_MODE mode) { m_selection_mode = mode; } @@ -385,6 +398,9 @@ public: bool check_last_selection(wxString& msg_str); // correct current selections to avoid of the possible conflicts void fix_multiselection_conflicts(); + // correct selection in respect to the cut_id if any exists + void fix_cut_selection(); + bool fix_cut_selection(wxDataViewItemArray &sels); ModelVolume* get_selected_model_volume(); void change_part_type(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp index c8e9e8470e..c9833c281b 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp @@ -19,6 +19,56 @@ namespace Slic3r { namespace GUI { + +const double units_in_to_mm = 25.4; +const double units_mm_to_in = 1 / units_in_to_mm; + +const int c_connectors_group_id = 4; +const float UndefFloat = -999.f; + +// connector colors + +using ColorRGBA = std::array; + +static const ColorRGBA BLACK() { return {0.0f, 0.0f, 0.0f, 1.0f}; } +static const ColorRGBA BLUE() { return {0.0f, 0.0f, 1.0f, 1.0f}; } +static const ColorRGBA BLUEISH() { return {0.5f, 0.5f, 1.0f, 1.0f}; } +static const ColorRGBA CYAN() { return {0.0f, 1.0f, 1.0f, 1.0f}; } +static const ColorRGBA DARK_GRAY() { return {0.25f, 0.25f, 0.25f, 1.0f}; } +static const ColorRGBA DARK_YELLOW() { return {0.5f, 0.5f, 0.0f, 1.0f}; } +static const ColorRGBA GRAY() { return {0.5f, 0.5f, 0.5f, 1.0f}; } +static const ColorRGBA GREEN() { return {0.0f, 1.0f, 0.0f, 1.0f}; } +static const ColorRGBA GREENISH() { return {0.5f, 1.0f, 0.5f, 1.0f}; } +static const ColorRGBA LIGHT_GRAY() { return {0.75f, 0.75f, 0.75f, 1.0f}; } +static const ColorRGBA MAGENTA() { return {1.0f, 0.0f, 1.0f, 1.0f}; } +static const ColorRGBA ORANGE() { return {0.923f, 0.504f, 0.264f, 1.0f}; } +static const ColorRGBA RED() { return {1.0f, 0.0f, 0.0f, 1.0f}; } +static const ColorRGBA REDISH() { return {1.0f, 0.5f, 0.5f, 1.0f}; } +static const ColorRGBA YELLOW() { return {1.0f, 1.0f, 0.0f, 1.0f}; } +static const ColorRGBA WHITE() { return {1.0f, 1.0f, 1.0f, 1.0f}; } + +static const ColorRGBA PLAG_COLOR = YELLOW(); +static const ColorRGBA DOWEL_COLOR = DARK_YELLOW(); +static const ColorRGBA HOVERED_PLAG_COLOR = CYAN(); +static const ColorRGBA HOVERED_DOWEL_COLOR = {0.0f, 0.5f, 0.5f, 1.0f}; +static const ColorRGBA SELECTED_PLAG_COLOR = GRAY(); +static const ColorRGBA SELECTED_DOWEL_COLOR = GRAY(); // DARK_GRAY(); +static const ColorRGBA CONNECTOR_DEF_COLOR = {1.0f, 1.0f, 1.0f, 0.5f}; +static const ColorRGBA CONNECTOR_ERR_COLOR = {1.0f, 0.3f, 0.3f, 0.5f}; +static const ColorRGBA HOVERED_ERR_COLOR = {1.0f, 0.3f, 0.3f, 1.0f}; + +static Vec3d rotate_vec3d_around_vec3d_with_rotate_matrix( + const Vec3d& rotate_point, + const Vec3d& origin_point, + const Transform3d& rotate_matrix) +{ + Transform3d translate_to_point = Transform3d::Identity(); + translate_to_point.translate(origin_point); + Transform3d translate_to_zero = Transform3d::Identity(); + translate_to_zero.translate(-origin_point); + return (translate_to_point * rotate_matrix * translate_to_zero) * rotate_point; +} + static inline void rotate_point_2d(double& x, double& y, const double c, const double s) { double xold = x; @@ -63,11 +113,12 @@ GLGizmoAdvancedCut::GLGizmoAdvancedCut(GLCanvas3D& parent, const std::string& ic , m_last_active_id(0) , m_keep_upper(true) , m_keep_lower(true) - , m_rotate_lower(false) - , m_cut_to_parts(false) , m_do_segment(false) , m_segment_smoothing_alpha(0.5) , m_segment_number(5) + , m_connector_type(CutConnectorType::Plug) + , m_connector_style(size_t(CutConnectorStyle::Prizm)) + , m_connector_shape_id(size_t(CutConnectorShape::Circle)) { for (int i = 0; i < 4; i++) m_cut_plane_points[i] = { 0., 0., 0. }; @@ -79,11 +130,140 @@ GLGizmoAdvancedCut::GLGizmoAdvancedCut(GLCanvas3D& parent, const std::string& ic m_buffered_rotation.setZero(); } +bool GLGizmoAdvancedCut::gizmo_event(SLAGizmoEventType action, const Vec2d &mouse_position, bool shift_down, bool alt_down, bool control_down) +{ + CutConnectors &connectors = m_c->selection_info()->model_object()->cut_connectors; + + if (shift_down && !m_connectors_editing && + (action == SLAGizmoEventType::LeftDown || action == SLAGizmoEventType::LeftUp || action == SLAGizmoEventType::Dragging)) { + process_cut_line(action, mouse_position); + return true; + } + + if (action == SLAGizmoEventType::LeftDown) { + if (!m_connectors_editing) + return false; + + if (m_hover_id != -1) { + start_dragging(); + return true; + } + + if (shift_down || alt_down) { + // left down with shift - show the selection rectangle: + //if (m_hover_id == -1) + // m_selection_rectangle.start_dragging(mouse_position, shift_down ? GLSelectionRectangle::EState::Select : GLSelectionRectangle::EState::Deselect); + } else { + // If there is no selection and no hovering, add new point + if (m_hover_id == -1 && !shift_down && !alt_down) + add_connector(connectors, mouse_position); + //m_ldown_mouse_position = mouse_position; + } + return true; + } + else if (action == SLAGizmoEventType::LeftUp) { + if (m_hover_id == -1 && !shift_down && !alt_down) + unselect_all_connectors(); + + is_selection_changed(alt_down, shift_down); + return true; + } + else if (action == SLAGizmoEventType::RightDown) { + if (m_hover_id < c_connectors_group_id) + return false; + + unselect_all_connectors(); + select_connector(m_hover_id - c_connectors_group_id, true); + return delete_selected_connectors(); + } + else if (action == SLAGizmoEventType::RightUp) { + // catch right click event + return true; + } + + return false; +} + +bool GLGizmoAdvancedCut::on_key(wxKeyEvent &evt) +{ + bool ctrl_down = evt.GetModifiers() & wxMOD_CONTROL; + + if (evt.GetKeyCode() == WXK_DELETE) { + return delete_selected_connectors(); + } + else if (ctrl_down + && (evt.GetKeyCode() == 'A' || evt.GetKeyCode() == 'a')) + { + select_all_connectors(); + return true; + } + return false; +} + std::string GLGizmoAdvancedCut::get_tooltip() const { return ""; } +BoundingBoxf3 GLGizmoAdvancedCut::bounding_box() const +{ + BoundingBoxf3 ret; + const Selection & selection = m_parent.get_selection(); + const Selection::IndicesList &idxs = selection.get_volume_idxs(); + for (unsigned int i : idxs) { + const GLVolume *volume = selection.get_volume(i); + // respect just to the solid parts for FFF and ignore pad and supports for SLA + if (!volume->is_modifier && !volume->is_sla_pad() && !volume->is_sla_support()) ret.merge(volume->transformed_convex_hull_bounding_box()); + } + return ret; +} + +bool GLGizmoAdvancedCut::is_looking_forward() const +{ + const Camera &camera = wxGetApp().plater()->get_camera(); + const double dot = camera.get_dir_forward().dot(m_cut_plane_normal); + return dot < 0.05; +} + +// Unprojects the mouse position on the mesh and saves hit point and normal of the facet into pos_and_normal +// Return false if no intersection was found, true otherwise. +bool GLGizmoAdvancedCut::unproject_on_cut_plane(const Vec2d &mouse_pos, Vec3d &pos, Vec3d &pos_world) +{ + const float sla_shift = m_c->selection_info()->get_sla_shift(); + + const ModelObject * mo = m_c->selection_info()->model_object(); + const ModelInstance *mi = mo->instances[m_c->selection_info()->get_active_instance()]; + const Camera & camera = wxGetApp().plater()->get_camera(); + + // Calculate intersection with the clipping plane. + const ClippingPlane *cp = m_c->object_clipper()->get_clipping_plane(); + Vec3d point; + Vec3d direction; + Vec3d hit; + MeshRaycaster::line_from_mouse_pos_static(mouse_pos, Transform3d::Identity(), camera, point, direction); + Vec3d normal = -cp->get_normal().cast(); + double den = normal.dot(direction); + if (den != 0.) { + double t = (-cp->get_offset() - normal.dot(point)) / den; + hit = (point + t * direction); + } else + return false; + + if (!m_c->object_clipper()->is_projection_inside_cut(hit)) + return false; + + // recalculate hit to object's local position + Vec3d hit_d = hit; + hit_d -= mi->get_offset(); + hit_d[Z] -= sla_shift; + + // Return both the point and the facet normal. + pos = hit_d; + pos_world = hit; + + return true; +} + void GLGizmoAdvancedCut::update_plane_points() { Vec3d plane_center = get_plane_center(); @@ -170,7 +350,10 @@ void GLGizmoAdvancedCut::reset_all() m_keep_upper = true; m_keep_lower = true; - m_cut_to_parts = false; + m_place_on_cut_upper = true; + m_place_on_cut_lower = false; + m_rotate_upper = false; + m_rotate_lower = false; } bool GLGizmoAdvancedCut::on_init() @@ -179,6 +362,20 @@ bool GLGizmoAdvancedCut::on_init() return false; m_shortcut_key = WXK_CONTROL_C; + + // initiate info shortcuts + const wxString ctrl = GUI::shortkey_ctrl_prefix(); + const wxString alt = GUI::shortkey_alt_prefix(); + const wxString shift = "Shift+"; + + m_shortcuts.push_back(std::make_pair(_L("Left click"), _L("Add connector"))); + m_shortcuts.push_back(std::make_pair(_L("Right click"), _L("Remove connector"))); + m_shortcuts.push_back(std::make_pair(_L("Drag"), _L("Move connector"))); + m_shortcuts.push_back(std::make_pair(shift + _L("Left click"), _L("Add connector to selection"))); + m_shortcuts.push_back(std::make_pair(alt + _L("Left click"), _L("Remove connector from selection"))); + m_shortcuts.push_back(std::make_pair(ctrl + "A", _L("Select all connectors"))); + + init_connector_shapes(); return true; } @@ -187,14 +384,33 @@ std::string GLGizmoAdvancedCut::on_get_name() const return (_(L("Cut"))).ToUTF8().data(); } +void GLGizmoAdvancedCut::on_load(cereal::BinaryInputArchive &ar) +{ + ar(m_keep_upper, m_keep_lower, m_rotate_lower, m_rotate_upper, m_connectors_editing, + m_cut_plane_points[0], m_cut_plane_points[1], m_cut_plane_points[2], m_cut_plane_points[3]); + + m_parent.request_extra_frame(); +} + +void GLGizmoAdvancedCut::on_save(cereal::BinaryOutputArchive &ar) const +{ + ar(m_keep_upper, m_keep_lower, m_rotate_lower, m_rotate_upper, m_connectors_editing, + m_cut_plane_points[0], m_cut_plane_points[1], m_cut_plane_points[2], m_cut_plane_points[3]); +} + void GLGizmoAdvancedCut::on_set_state() { GLGizmoRotate3D::on_set_state(); // Reset m_cut_z on gizmo activation if (get_state() == On) { + m_connectors_editing = false; reset_cut_plane(); } + else if (get_state() == Off) { + clear_selection(); + m_c->object_clipper()->release(); + } } bool GLGizmoAdvancedCut::on_is_activable() const @@ -203,6 +419,14 @@ bool GLGizmoAdvancedCut::on_is_activable() const return selection.is_single_full_instance() && !selection.is_wipe_tower(); } +CommonGizmosDataID GLGizmoAdvancedCut::on_get_requirements() const +{ + return CommonGizmosDataID(int(CommonGizmosDataID::SelectionInfo) + | int(CommonGizmosDataID::InstancesHider) + | int(CommonGizmosDataID::Raycaster) + | int(CommonGizmosDataID::ObjectClipper)); +} + void GLGizmoAdvancedCut::on_start_dragging() { for (auto gizmo : m_gizmos) { @@ -220,6 +444,18 @@ void GLGizmoAdvancedCut::on_start_dragging() m_start_movement = m_movement; m_start_height = m_height; m_drag_pos = m_move_grabber.center; + + if (m_hover_id >= c_connectors_group_id) + Plater::TakeSnapshot snapshot(wxGetApp().plater(), "Move connector"); +} + +void GLGizmoAdvancedCut::on_stop_dragging() +{ + if (m_hover_id == X || m_hover_id == Y || m_hover_id == Z) { + Plater::TakeSnapshot snapshot(wxGetApp().plater(), "Rotate cut plane"); + } else if (m_hover_id == c_connectors_group_id - 1) { + Plater::TakeSnapshot snapshot(wxGetApp().plater(), "Move cut plane"); + } } void GLGizmoAdvancedCut::on_update(const UpdateData& data) @@ -243,129 +479,32 @@ void GLGizmoAdvancedCut::on_update(const UpdateData& data) Vec3d plane_normal = get_plane_normal(); m_height = m_start_height + plane_normal(2) * move; } + + // dragging connectors + if (m_connectors_editing && m_hover_id >= c_connectors_group_id) { + CutConnectors &connectors = m_c->selection_info()->model_object()->cut_connectors; + Vec3d pos; + Vec3d pos_world; + + if (unproject_on_cut_plane(data.mouse_pos.cast(), pos, pos_world)) { + connectors[m_hover_id - c_connectors_group_id].pos = pos; + } + } } void GLGizmoAdvancedCut::on_render() { - const Selection& selection = m_parent.get_selection(); - const BoundingBoxf3& box = selection.get_bounding_box(); - // box center is the coord of object in the world coordinate - Vec3d object_offset = box.center(); - // plane points is in object coordinate - Vec3d plane_center = get_plane_center(); - - // rotate plane - std::array plane_points_rot; - { - for (int i = 0; i < plane_points_rot.size(); i++) { - plane_points_rot[i] = m_cut_plane_points[i] - plane_center; - } - - if (m_rotation(0) > EPSILON) - rotate_x_3d(plane_points_rot, m_rotation(0)); - if (m_rotation(1) > EPSILON) - rotate_y_3d(plane_points_rot, m_rotation(1)); - if (m_rotation(2) > EPSILON) - rotate_z_3d(plane_points_rot, m_rotation(2)); - - for (int i = 0; i < plane_points_rot.size(); i++) { - plane_points_rot[i] += plane_center; - } + update_clipper(); + if (m_connectors_editing) { + render_connectors(); + render_clipper_cut(); + } + else if(!m_connectors_editing) { + check_conflict_for_all_connectors(); + render_cut_plane_and_grabbers(); } - // move plane - Vec3d plane_normal_rot = calc_plane_normal(plane_points_rot); - for (int i = 0; i < plane_points_rot.size(); i++) { - plane_points_rot[i] += plane_normal_rot * m_movement; - } - - // transfer from object coordindate to the world coordinate - for (Vec3d& point : plane_points_rot) { - point += object_offset; - } - - // draw plane - glsafe(::glEnable(GL_DEPTH_TEST)); - glsafe(::glDisable(GL_CULL_FACE)); - glsafe(::glEnable(GL_BLEND)); - glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); - - ::glBegin(GL_QUADS); - ::glColor4f(0.8f, 0.8f, 0.8f, 0.5f); - for (const Vec3d& point : plane_points_rot) { - ::glVertex3f(point(0), point(1), point(2)); - } - glsafe(::glEnd()); - - glsafe(::glEnable(GL_CULL_FACE)); - glsafe(::glDisable(GL_BLEND)); - - // Draw the grabber and the connecting line - Vec3d plane_center_rot = calc_plane_center(plane_points_rot); - m_move_grabber.center = plane_center_rot + plane_normal_rot * Offset; - //m_move_grabber.angles = m_current_base_rotation + m_rotation; - - glsafe(::glDisable(GL_DEPTH_TEST)); - glsafe(::glLineWidth(m_hover_id != -1 ? 2.0f : 1.5f)); - glsafe(::glColor3f(1.0, 1.0, 0.0)); - glLineStipple(1, 0x0FFF); - glEnable(GL_LINE_STIPPLE); - ::glBegin(GL_LINES); - ::glVertex3dv(plane_center_rot.data()); - ::glVertex3dv(m_move_grabber.center.data()); - glsafe(::glEnd()); - glDisable(GL_LINE_STIPPLE); - - //std::copy(std::begin(GrabberColor), std::end(GrabberColor), m_move_grabber.color); - //m_move_grabber.color = GrabberColor; - //m_move_grabber.hover_color = GrabberHoverColor; - //m_move_grabber.render(m_hover_id == get_group_id(), (float)((box.size()(0) + box.size()(1) + box.size()(2)) / 3.0)); - bool hover = (m_hover_id == get_group_id()); - std::array render_color; - if (hover) { - render_color = GrabberHoverColor; - } - else - render_color = GrabberColor; - - const GLModel& cube = m_move_grabber.get_cube(); - //BBS set to fixed size grabber - //float fullsize = 2 * (dragging ? get_dragging_half_size(size) : get_half_size(size)); - float fullsize = 8.0f; - if (GLGizmoBase::INV_ZOOM > 0) { - fullsize = m_move_grabber.FixedGrabberSize * GLGizmoBase::INV_ZOOM; - } - - const_cast(&cube)->set_color(-1, render_color); - - glsafe(::glPushMatrix()); - glsafe(::glTranslated(m_move_grabber.center.x(), m_move_grabber.center.y(), m_move_grabber.center.z())); - - if (m_rotation(0) > EPSILON) - glsafe(::glRotated(Geometry::rad2deg(m_rotation(0)), 1.0, 0.0, 0.0)); - if (m_rotation(1) > EPSILON) - glsafe(::glRotated(Geometry::rad2deg(m_rotation(1)), 0.0, 1.0, 0.0)); - if (m_rotation(2) > EPSILON) - glsafe(::glRotated(Geometry::rad2deg(m_rotation(2)), 0.0, 0.0, 1.0)); - for (int index = 0; index < m_rotate_cmds.size(); index ++) - { - Rotate_data& data = m_rotate_cmds[index]; - if (data.ax == X) - glsafe(::glRotated(Geometry::rad2deg(data.angle), 1.0, 0.0, 0.0)); - else if (data.ax == Y) - glsafe(::glRotated(Geometry::rad2deg(data.angle), 0.0, 1.0, 0.0)); - else if (data.ax == Z) - glsafe(::glRotated(Geometry::rad2deg(data.angle), 0.0, 0.0, 1.0)); - } - //glsafe(::glRotated(Geometry::rad2deg(angles.z()), 0.0, 0.0, 1.0)); - //glsafe(::glRotated(Geometry::rad2deg(angles.y()), 0.0, 1.0, 0.0)); - //glsafe(::glRotated(Geometry::rad2deg(angles.x()), 1.0, 0.0, 0.0)); - glsafe(::glScaled(fullsize, fullsize, fullsize)); - cube.render(); - glsafe(::glPopMatrix()); - - // Should be placed at last, because GLGizmoRotate3D clears depth buffer - GLGizmoRotate3D::on_render(); + render_cut_line(); } void GLGizmoAdvancedCut::on_render_for_picking() @@ -387,171 +526,95 @@ void GLGizmoAdvancedCut::on_render_for_picking() m_move_grabber.color[2] = color[2]; m_move_grabber.color[3] = color[3]; m_move_grabber.render_for_picking(mean_size); + + glsafe(::glEnable(GL_DEPTH_TEST)); + auto inst_id = m_c->selection_info()->get_active_instance(); + if (inst_id < 0) + return; + + const ModelObject *mo = m_c->selection_info()->model_object(); + const ModelInstance *mi = mo->instances[inst_id]; + const Vec3d & instance_offset = mi->get_offset(); + const double sla_shift = double(m_c->selection_info()->get_sla_shift()); + + const CutConnectors &connectors = mo->cut_connectors; + for (int i = 0; i < connectors.size(); ++i) { + CutConnector connector = connectors[i]; + Vec3d pos = connector.pos + instance_offset + sla_shift * Vec3d::UnitZ(); + float height = connector.height; + + const Camera &camera = wxGetApp().plater()->get_camera(); + if (connector.attribs.type == CutConnectorType::Dowel && connector.attribs.style == CutConnectorStyle::Prizm) { + pos -= height * m_cut_plane_normal; + height *= 2; + } else if (!is_looking_forward()) + pos -= 0.05 * m_cut_plane_normal; + + Transform3d translate_tf = Transform3d::Identity(); + translate_tf.translate(pos); + + Transform3d scale_tf = Transform3d::Identity(); + scale_tf.scale(Vec3f(connector.radius, connector.radius, height).cast()); + + const Transform3d view_model_matrix = camera.get_view_matrix() * translate_tf * m_rotate_matrix * scale_tf; + + + std::array color = picking_color_component(i+1); + render_connector_model(m_shapes[connectors[i].attribs], color, view_model_matrix); + } } void GLGizmoAdvancedCut::on_render_input_window(float x, float y, float bottom_limit) { - //float unit_size = m_imgui->get_style_scaling() * 48.0f; - float space_size = m_imgui->get_style_scaling() * 8; - float movement_cap = m_imgui->calc_text_size(_L("Movement:")).x; - float rotate_cap = m_imgui->calc_text_size(_L("Rotate")).x; - float caption_size = std::max(movement_cap, rotate_cap) + 2 * space_size; - bool imperial_units = wxGetApp().app_config->get("use_inches") == "1"; - unsigned int current_active_id = ImGui::GetActiveID(); - - Vec3d rotation = {Geometry::rad2deg(m_rotation(0)), Geometry::rad2deg(m_rotation(1)), Geometry::rad2deg(m_rotation(2))}; - char buf[3][64]; - float buf_size[3]; - float vec_max = 0, unit_size = 0; - for (int i = 0; i < 3; i++) { - ImGui::DataTypeFormatString(buf[i], IM_ARRAYSIZE(buf[i]), ImGuiDataType_Double, (void *) &rotation[i], "%.2f"); - buf_size[i] = ImGui::CalcTextSize(buf[i]).x; - vec_max = std::max(buf_size[i], vec_max); - } - - float buf_size_max = ImGui::CalcTextSize("-100.00").x ; - if (vec_max < buf_size_max){ - unit_size = buf_size_max + ImGui::GetStyle().FramePadding.x * 2.0f; - } else { - unit_size = vec_max + ImGui::GetStyle().FramePadding.x * 2.0f; - } - GizmoImguiSetNextWIndowPos(x, y, ImGuiCond_Always, 0.0f, 0.0f); - ImGuiWrapper::push_toolbar_style(m_parent.get_scale()); + GizmoImguiBegin(on_get_name(), + ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar); - GizmoImguiBegin(on_get_name(), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar); - - ImGui::PushItemWidth(caption_size); - ImGui::Dummy(ImVec2(caption_size, -1)); - ImGui::SameLine(caption_size + 1 * space_size); - ImGui::PushItemWidth(unit_size); - ImGui::TextAlignCenter("X"); - ImGui::SameLine(caption_size + 1 * unit_size + 2 * space_size); - ImGui::PushItemWidth(unit_size); - ImGui::TextAlignCenter("Y"); - ImGui::SameLine(caption_size + 2 * unit_size + 3 * space_size); - ImGui::PushItemWidth(unit_size); - ImGui::TextAlignCenter("Z"); - - ImGui::AlignTextToFramePadding(); - - // Rotation input box - ImGui::PushItemWidth(caption_size); - m_imgui->text(_L("Rotation") + " "); - ImGui::SameLine(caption_size + 1 * space_size); - ImGui::PushItemWidth(unit_size); - ImGui::BBLInputDouble("##cut_rotation_x", &rotation[0], 0.0f, 0.0f, "%.2f"); - ImGui::SameLine(caption_size + 1 * unit_size + 2 * space_size); - ImGui::PushItemWidth(unit_size); - ImGui::BBLInputDouble("##cut_rotation_y", &rotation[1], 0.0f, 0.0f, "%.2f"); - ImGui::SameLine(caption_size + 2 * unit_size + 3 * space_size); - ImGui::PushItemWidth(unit_size); - ImGui::BBLInputDouble("##cut_rotation_z", &rotation[2], 0.0f, 0.0f, "%.2f"); - if (current_active_id != m_last_active_id) { - if (std::abs(Geometry::rad2deg(m_rotation(0)) - m_buffered_rotation(0)) > EPSILON || - std::abs(Geometry::rad2deg(m_rotation(1)) - m_buffered_rotation(1)) > EPSILON || - std::abs(Geometry::rad2deg(m_rotation(2)) - m_buffered_rotation(2)) > EPSILON) - { - m_rotation = m_buffered_rotation; - m_buffered_rotation.setZero(); - update_plane_points(); - m_parent.post_event(SimpleEvent(wxEVT_PAINT)); - } - } - else { - m_buffered_rotation(0) = Geometry::deg2rad(rotation(0)); - m_buffered_rotation(1) = Geometry::deg2rad(rotation(1)); - m_buffered_rotation(2) = Geometry::deg2rad(rotation(2)); + if (m_connectors_editing) { + init_connectors_input_window_data(); + render_connectors_input_window(x, y, bottom_limit); } + else + render_cut_plane_input_window(x, y, bottom_limit); - ImGui::Separator(); - ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(4.0f, 10.0f)); - // Movement input box - double movement = m_movement; - ImGui::PushItemWidth(caption_size); - ImGui::AlignTextToFramePadding(); - m_imgui->text(_L("Movement") + " "); - ImGui::SameLine(caption_size + 1 * space_size); - ImGui::PushItemWidth(3 * unit_size + 2 * space_size); - ImGui::BBLInputDouble("##cut_movement", &movement, 0.0f, 0.0f, "%.2f"); - if (current_active_id != m_last_active_id) { - if (std::abs(m_buffered_movement - m_movement) > EPSILON) { - m_movement = m_buffered_movement; - m_buffered_movement = 0.0; + render_input_window_warning(); - // update absolute height - Vec3d plane_normal = get_plane_normal(); - m_height_delta = plane_normal(2) * m_movement; - m_height += m_height_delta; - m_buffered_height = m_height; - - update_plane_points(); - m_parent.post_event(SimpleEvent(wxEVT_PAINT)); - } - } else { - m_buffered_movement = movement; - } - - // height input box - double height = m_height; - ImGui::PushItemWidth(caption_size); - ImGui::AlignTextToFramePadding(); - // only allow setting height when cut plane is horizontal - Vec3d plane_normal = get_plane_normal(); - m_imgui->disabled_begin(std::abs(plane_normal(0)) > EPSILON || std::abs(plane_normal(1)) > EPSILON); - m_imgui->text(_L("Height") + " "); - ImGui::SameLine(caption_size + 1 * space_size); - ImGui::PushItemWidth(3 * unit_size + 2 * space_size); - ImGui::BBLInputDouble("##cut_height", &height, 0.0f, 0.0f, "%.2f"); - if (current_active_id != m_last_active_id) { - if (std::abs(m_buffered_height - m_height) > EPSILON) { - m_height_delta = m_buffered_height - m_height; - m_height = m_buffered_height; - update_plane_points(); - m_parent.post_event(SimpleEvent(wxEVT_PAINT)); - } - } - else { - m_buffered_height = height; - } - ImGui::PopStyleVar(1); - m_imgui->disabled_end(); - ImGui::Separator(); - // Part selection - m_imgui->bbl_checkbox(_L("Keep upper part"), m_keep_upper); - m_imgui->bbl_checkbox(_L("Keep lower part"), m_keep_lower); - m_imgui->bbl_checkbox(_L("Cut to parts"), m_cut_to_parts); - -#if 0 - // Auto segment input - ImGui::PushItemWidth(m_imgui->get_style_scaling() * 150.0); - m_imgui->checkbox(_L("Auto Segment"), m_do_segment); - m_imgui->disabled_begin(!m_do_segment); - ImGui::InputDouble("smoothing_alpha", &m_segment_smoothing_alpha, 0.0f, 0.0f, "%.2f"); - m_segment_smoothing_alpha = std::max(0.1, std::min(100.0, m_segment_smoothing_alpha)); - ImGui::InputInt("segment number", &m_segment_number); - m_segment_number = std::max(1, m_segment_number); - m_imgui->disabled_end(); - - ImGui::Separator(); -#endif - - // Cut button - m_imgui->disabled_begin((!m_keep_upper && !m_keep_lower && !m_cut_to_parts && !m_do_segment)); - const bool cut_clicked = m_imgui->button(_L("Perform cut")); - m_imgui->disabled_end(); - ImGui::SameLine(); - const bool reset_clicked = m_imgui->button(_L("Reset")); - if (reset_clicked) { reset_all(); } GizmoImguiEnd(); ImGuiWrapper::pop_toolbar_style(); +} - // Perform cut - if (cut_clicked && (m_keep_upper || m_keep_lower || m_cut_to_parts || m_do_segment)) - perform_cut(m_parent.get_selection()); +void GLGizmoAdvancedCut::show_tooltip_information(float x, float y) +{ + float caption_max = 0.f; + for (const auto& short_cut : m_shortcuts) { + caption_max = std::max(caption_max, m_imgui->calc_text_size(short_cut.first).x); + } - m_last_active_id = current_active_id; + ImTextureID normal_id = m_parent.get_gizmos_manager().get_icon_texture_id(GLGizmosManager::MENU_ICON_NAME::IC_TOOLBAR_TOOLTIP); + ImTextureID hover_id = m_parent.get_gizmos_manager().get_icon_texture_id(GLGizmosManager::MENU_ICON_NAME::IC_TOOLBAR_TOOLTIP_HOVER); + + caption_max += m_imgui->calc_text_size(": ").x + 35.f; + + float font_size = ImGui::GetFontSize(); + ImVec2 button_size = ImVec2(font_size * 1.8, font_size * 1.3); + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, {0, ImGui::GetStyle().FramePadding.y}); + ImGui::ImageButton3(normal_id, hover_id, button_size); + + if (ImGui::IsItemHovered()) { + ImGui::BeginTooltip2(ImVec2(x, y)); + auto draw_text_with_caption = [this, &caption_max](const wxString &caption, const wxString &text) { + m_imgui->text_colored(ImGuiWrapper::COL_ACTIVE, caption); + ImGui::SameLine(caption_max); + m_imgui->text_colored(ImGuiWrapper::COL_WINDOW_BG, text); + }; + + for (const auto& short_cut : m_shortcuts) + draw_text_with_caption(short_cut.first + ": ", short_cut.second); + ImGui::EndTooltip(); + } + ImGui::PopStyleVar(2); } void GLGizmoAdvancedCut::set_movement(double movement) const @@ -561,6 +624,9 @@ void GLGizmoAdvancedCut::set_movement(double movement) const void GLGizmoAdvancedCut::perform_cut(const Selection& selection) { + if (!can_perform_cut()) + return; + const int instance_idx = selection.get_instance_idx(); const int object_idx = selection.get_object_idx(); @@ -569,17 +635,86 @@ void GLGizmoAdvancedCut::perform_cut(const Selection& selection) // m_cut_z is the distance from the bed. Subtract possible SLA elevation. const GLVolume* first_glvolume = selection.get_volume(*selection.get_volume_idxs().begin()); - // BBS: do segment - if (m_do_segment) + // perform cut { - wxGetApp().plater()->segment(object_idx, instance_idx, m_segment_smoothing_alpha, m_segment_number); + Plater::TakeSnapshot snapshot(wxGetApp().plater(), "Cut by Plane"); + + ModelObject *mo = wxGetApp().plater()->model().objects[object_idx]; + const bool has_connectors = !mo->cut_connectors.empty(); + + bool create_dowels_as_separate_object = false; + // update connectors pos as offset of its center before cut performing + apply_connectors_in_model(mo, create_dowels_as_separate_object); + + // BBS: do segment + if (m_do_segment) { + wxGetApp().plater()->segment(object_idx, instance_idx, m_segment_smoothing_alpha, m_segment_number); + } else { + wxGetApp().plater()->cut(object_idx, instance_idx, get_plane_points_world_coord(), + only_if(m_keep_upper, ModelObjectCutAttribute::KeepUpper) | + only_if(m_keep_lower, ModelObjectCutAttribute::KeepLower) | + only_if(m_place_on_cut_upper, ModelObjectCutAttribute::PlaceOnCutUpper) | + only_if(m_place_on_cut_lower, ModelObjectCutAttribute::PlaceOnCutLower) | + only_if(m_rotate_upper, ModelObjectCutAttribute::FlipUpper) | + only_if(m_rotate_lower, ModelObjectCutAttribute::FlipLower) | + only_if(create_dowels_as_separate_object, ModelObjectCutAttribute::CreateDowels)); + } } - else { - wxGetApp().plater()->cut(object_idx, instance_idx, get_plane_points_world_coord(), - only_if(m_keep_upper, ModelObjectCutAttribute::KeepUpper) | - only_if(m_keep_lower, ModelObjectCutAttribute::KeepLower) | - only_if(m_cut_to_parts, ModelObjectCutAttribute::CutToParts)); +} + +bool GLGizmoAdvancedCut::can_perform_cut() const +{ + if (m_has_invalid_connector || (!m_keep_upper && !m_keep_lower) || m_connectors_editing) + return false; + + return true; + //const auto clipper = m_c->object_clipper(); + //return clipper && clipper->has_valid_contour(); +} + +void GLGizmoAdvancedCut::apply_connectors_in_model(ModelObject *mo, bool &create_dowels_as_separate_object) +{ + clear_selection(); + + for (CutConnector &connector : mo->cut_connectors) { + connector.rotation_m = m_rotate_matrix; + + if (connector.attribs.type == CutConnectorType::Dowel) { + if (connector.attribs.style == CutConnectorStyle::Prizm) connector.height *= 2; + create_dowels_as_separate_object = true; + } else { + // culculate shift of the connector center regarding to the position on the cut plane + Vec3d shifted_center = m_cut_plane_center + Vec3d::UnitZ(); + shifted_center = rotate_vec3d_around_vec3d_with_rotate_matrix(shifted_center, m_cut_plane_center, m_rotate_matrix); + Vec3d norm = (shifted_center - m_cut_plane_center).normalized(); + connector.pos += norm * 0.5 * double(connector.height); + } } + + mo->apply_cut_connectors(_u8L("Connector")); +} + +bool GLGizmoAdvancedCut::is_selection_changed(bool alt_down, bool shift_down) +{ + if (m_hover_id >= c_connectors_group_id) { + if (alt_down) + select_connector(m_hover_id - c_connectors_group_id, false); + else { + if (!shift_down) unselect_all_connectors(); + select_connector(m_hover_id - c_connectors_group_id, true); + } + return true; + } + return false; +} + +void GLGizmoAdvancedCut::select_connector(int idx, bool select) +{ + m_selected[idx] = select; + if (select) + ++m_selected_count; + else + --m_selected_count; } Vec3d GLGizmoAdvancedCut::calc_plane_normal(const std::array& plane_points) const @@ -630,5 +765,1061 @@ void GLGizmoAdvancedCut::finish_rotation() update_plane_points(); } + +void GLGizmoAdvancedCut::put_connectors_on_cut_plane(const Vec3d &cp_normal, double cp_offset) +{ + ModelObject *mo = m_c->selection_info()->model_object(); + if (CutConnectors &connectors = mo->cut_connectors; !connectors.empty()) { + const float sla_shift = m_c->selection_info()->get_sla_shift(); + const Vec3d &instance_offset = mo->instances[m_c->selection_info()->get_active_instance()]->get_offset(); + + for (auto &connector : connectors) { + // convert connetor pos to the world coordinates + Vec3d pos = connector.pos + instance_offset; + pos[Z] += sla_shift; + // scalar distance from point to plane along the normal + double distance = -cp_normal.dot(pos) + cp_offset; + // move connector + connector.pos += distance * cp_normal; + } + } +} + +void GLGizmoAdvancedCut::update_clipper() +{ + BoundingBoxf3 box = bounding_box(); + double radius = box.radius(); + Vec3d plane_center = m_cut_plane_center; + + Vec3d begin, end = begin = plane_center; + begin[Z] = box.center().z() - radius; + end[Z] = box.center().z() + radius; + + double phi; + Vec3d rotation_axis; + Matrix3d rotation_matrix; + Geometry::rotation_from_two_vectors(Vec3d::UnitZ(), m_cut_plane_normal, rotation_axis, phi, &rotation_matrix); + + m_rotate_matrix.setIdentity(); + m_rotate_matrix = rotation_matrix * m_rotate_matrix; + + begin = rotate_vec3d_around_vec3d_with_rotate_matrix(begin, plane_center, m_rotate_matrix); + end = rotate_vec3d_around_vec3d_with_rotate_matrix(end, plane_center, m_rotate_matrix); + + Vec3d normal = end - begin; + + if (!is_looking_forward()) { + end = begin = plane_center; + begin[Z] = box.center().z() + radius; + end[Z] = box.center().z() - radius; + + begin = rotate_vec3d_around_vec3d_with_rotate_matrix(begin, plane_center, m_rotate_matrix); + end = rotate_vec3d_around_vec3d_with_rotate_matrix(end, plane_center, m_rotate_matrix); + + // recalculate normal for clipping plane, if camera is looking downward to cut plane + normal = end - begin; + if (normal == Vec3d::Zero()) + return; + } + + // calculate normal and offset for clipping plane + double dist = (plane_center - begin).norm(); + dist = std::clamp(dist, 0.0001, normal.norm()); + normal.normalize(); + const double offset = normal.dot(begin) + dist; + + m_c->object_clipper()->set_range_and_pos(normal, offset, dist); + + put_connectors_on_cut_plane(normal, offset); +} + +void GLGizmoAdvancedCut::render_cut_plane_and_grabbers() +{ + const Selection & selection = m_parent.get_selection(); + const BoundingBoxf3 &box = selection.get_bounding_box(); + // box center is the coord of object in the world coordinate + Vec3d object_offset = box.center(); + // plane points is in object coordinate + Vec3d plane_center = get_plane_center(); + + m_cut_plane_center = object_offset + plane_center; + + // rotate plane + std::array plane_points_rot; + { + for (int i = 0; i < plane_points_rot.size(); i++) { + plane_points_rot[i] = m_cut_plane_points[i] - plane_center; + } + + if (m_rotation(0) > EPSILON) + rotate_x_3d(plane_points_rot, m_rotation(0)); + if (m_rotation(1) > EPSILON) + rotate_y_3d(plane_points_rot, m_rotation(1)); + if (m_rotation(2) > EPSILON) + rotate_z_3d(plane_points_rot, m_rotation(2)); + + for (int i = 0; i < plane_points_rot.size(); i++) { + plane_points_rot[i] += plane_center; + } + } + + // move plane + Vec3d plane_normal_rot = calc_plane_normal(plane_points_rot); + m_cut_plane_normal = plane_normal_rot; + for (int i = 0; i < plane_points_rot.size(); i++) { + plane_points_rot[i] += plane_normal_rot * m_movement; + } + + // transfer from object coordindate to the world coordinate + for (Vec3d& point : plane_points_rot) { + point += object_offset; + } + + // draw plane + glsafe(::glEnable(GL_DEPTH_TEST)); + glsafe(::glDisable(GL_CULL_FACE)); + glsafe(::glEnable(GL_BLEND)); + glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); + + ::glBegin(GL_QUADS); + ::glColor4f(0.8f, 0.8f, 0.8f, 0.5f); + for (const Vec3d& point : plane_points_rot) { + ::glVertex3f(point(0), point(1), point(2)); + } + glsafe(::glEnd()); + + glsafe(::glEnable(GL_CULL_FACE)); + glsafe(::glDisable(GL_BLEND)); + + // Draw the grabber and the connecting line + Vec3d plane_center_rot = calc_plane_center(plane_points_rot); + m_move_grabber.center = plane_center_rot + plane_normal_rot * Offset; + // m_move_grabber.angles = m_current_base_rotation + m_rotation; + + glsafe(::glDisable(GL_DEPTH_TEST)); + glsafe(::glLineWidth(m_hover_id != -1 ? 2.0f : 1.5f)); + glsafe(::glColor3f(1.0, 1.0, 0.0)); + glLineStipple(1, 0x0FFF); + glEnable(GL_LINE_STIPPLE); + ::glBegin(GL_LINES); + ::glVertex3dv(plane_center_rot.data()); + ::glVertex3dv(m_move_grabber.center.data()); + glsafe(::glEnd()); + glDisable(GL_LINE_STIPPLE); + + // std::copy(std::begin(GrabberColor), std::end(GrabberColor), m_move_grabber.color); + // m_move_grabber.color = GrabberColor; + // m_move_grabber.hover_color = GrabberHoverColor; + // m_move_grabber.render(m_hover_id == get_group_id(), (float)((box.size()(0) + box.size()(1) + box.size()(2)) / 3.0)); + bool hover = (m_hover_id == get_group_id()); + std::array render_color; + if (hover) { + render_color = GrabberHoverColor; + } + else + render_color = GrabberColor; + + const GLModel &cube = m_move_grabber.get_cube(); + // BBS set to fixed size grabber + // float fullsize = 2 * (dragging ? get_dragging_half_size(size) : get_half_size(size)); + float fullsize = 8.0f; + if (GLGizmoBase::INV_ZOOM > 0) { + fullsize = m_move_grabber.FixedGrabberSize * GLGizmoBase::INV_ZOOM; + } + + const_cast(&cube)->set_color(-1, render_color); + + glsafe(::glPushMatrix()); + glsafe(::glTranslated(m_move_grabber.center.x(), m_move_grabber.center.y(), m_move_grabber.center.z())); + glsafe(::glMultMatrixd(m_rotate_matrix.data())); + + glsafe(::glScaled(fullsize, fullsize, fullsize)); + cube.render(); + glsafe(::glPopMatrix()); + + // Should be placed at last, because GLGizmoRotate3D clears depth buffer + set_center(m_cut_plane_center); + GLGizmoRotate3D::on_render(); +} + +void GLGizmoAdvancedCut::render_connectors() +{ + ::glEnable(GL_DEPTH_TEST); + + const ModelObject *mo = m_c->selection_info()->model_object(); + auto inst_id = m_c->selection_info()->get_active_instance(); + if (inst_id < 0) + return; + + const CutConnectors &connectors = mo->cut_connectors; + if (connectors.size() != m_selected.size()) { + clear_selection(); + m_selected.resize(connectors.size(), false); + } + + const ModelInstance *mi = mo->instances[inst_id]; + const Vec3d & instance_offset = mi->get_offset(); + const double sla_shift = double(m_c->selection_info()->get_sla_shift()); + + m_has_invalid_connector = false; + m_info_stats.invalidate(); + + ColorRGBA render_color = CONNECTOR_DEF_COLOR; + for (size_t i = 0; i < connectors.size(); ++i) { + const CutConnector &connector = connectors[i]; + + float height = connector.height; + // recalculate connector position to world position + Vec3d pos = connector.pos + instance_offset + sla_shift * Vec3d::UnitZ(); + + // First decide about the color of the point. + const bool conflict_connector = is_conflict_for_connector(i, connectors, pos); + if (conflict_connector) { + m_has_invalid_connector = true; + render_color = CONNECTOR_ERR_COLOR; + } else // default connector color + render_color = connector.attribs.type == CutConnectorType::Dowel ? DOWEL_COLOR : PLAG_COLOR; + + if (!m_connectors_editing) + render_color = CONNECTOR_ERR_COLOR; + else if (size_t(m_hover_id - 4) == i) + render_color = conflict_connector ? HOVERED_ERR_COLOR : connector.attribs.type == CutConnectorType::Dowel ? HOVERED_DOWEL_COLOR : HOVERED_PLAG_COLOR; + else if (m_selected[i]) + render_color = connector.attribs.type == CutConnectorType::Dowel ? SELECTED_DOWEL_COLOR : SELECTED_PLAG_COLOR; + + const Camera &camera = wxGetApp().plater()->get_camera(); + if (connector.attribs.type == CutConnectorType::Dowel && connector.attribs.style == CutConnectorStyle::Prizm) { + pos -= height * m_cut_plane_normal; + height *= 2; + } else if (!is_looking_forward()) + pos -= 0.05 * m_cut_plane_normal; + + Transform3d translate_tf = Transform3d::Identity(); + translate_tf.translate(pos); + + Transform3d scale_tf = Transform3d::Identity(); + scale_tf.scale(Vec3f(connector.radius, connector.radius, height).cast()); + + const Transform3d view_model_matrix = camera.get_view_matrix() * translate_tf * m_rotate_matrix * scale_tf; + + //render_color = {1.f, 0.f, 0.f, 1.f}; + render_connector_model(m_shapes[connector.attribs], render_color, view_model_matrix); + } +} + +void GLGizmoAdvancedCut::render_clipper_cut() +{ + m_c->object_clipper()->render_cut(); +} + +void GLGizmoAdvancedCut::render_cut_line() +{ + if (!cut_line_processing() || m_cut_line_end == Vec3d::Zero()) + return; + + glsafe(::glEnable(GL_DEPTH_TEST)); + glsafe(::glClear(GL_DEPTH_BUFFER_BIT)); + glsafe(::glColor3f(0.0, 1.0, 0.0)); + glEnable(GL_LINE_STIPPLE); + ::glBegin(GL_LINES); + ::glVertex3dv(m_cut_line_begin.data()); + ::glVertex3dv(m_cut_line_end.data()); + glsafe(::glEnd()); + glDisable(GL_LINE_STIPPLE); +} + +void GLGizmoAdvancedCut::render_connector_model(GLModel &model, const std::array& color, Transform3d view_model_matrix) +{ + GLShaderProgram *shader = wxGetApp().get_shader("gouraud_light_uniform"); + if (shader) { + shader->start_using(); + + shader->set_uniform("view_model_matrix", view_model_matrix); + shader->set_uniform("projection_matrix", wxGetApp().plater()->get_camera().get_projection_matrix()); + + model.set_color(-1, color); + model.render(); + + shader->stop_using(); + } +} + +void GLGizmoAdvancedCut::clear_selection() +{ + m_selected.clear(); + m_selected_count = 0; +} + +void GLGizmoAdvancedCut::init_connector_shapes() +{ + for (const CutConnectorType &type : {CutConnectorType::Dowel, CutConnectorType::Plug}) + for (const CutConnectorStyle &style : {CutConnectorStyle::Frustum, CutConnectorStyle::Prizm}) + for (const CutConnectorShape &shape : {CutConnectorShape::Circle, CutConnectorShape::Hexagon, CutConnectorShape::Square, CutConnectorShape::Triangle}) { + const CutConnectorAttributes attribs = {type, style, shape}; + const indexed_triangle_set its = ModelObject::get_connector_mesh(attribs); + m_shapes[attribs].init_from(its); + } +} + +void GLGizmoAdvancedCut::set_connectors_editing(bool connectors_editing) +{ + m_connectors_editing = connectors_editing; + // todo: zhimin need a better method + // after change render mode, need update for scene + on_render(); +} + +void GLGizmoAdvancedCut::reset_connectors() +{ + m_c->selection_info()->model_object()->cut_connectors.clear(); + clear_selection(); +} + +void GLGizmoAdvancedCut::update_connector_shape() +{ + CutConnectorAttributes attribs = {m_connector_type, CutConnectorStyle(m_connector_style), CutConnectorShape(m_connector_shape_id)}; + + const indexed_triangle_set its = ModelObject::get_connector_mesh(attribs); + m_connector_mesh.clear(); + m_connector_mesh = TriangleMesh(its); +} + +void GLGizmoAdvancedCut::apply_selected_connectors(std::function apply_fn) +{ + for (size_t idx = 0; idx < m_selected.size(); idx++) + if (m_selected[idx]) + apply_fn(idx); +} + +void GLGizmoAdvancedCut::select_all_connectors() +{ + std::fill(m_selected.begin(), m_selected.end(), true); + m_selected_count = int(m_selected.size()); +} + +void GLGizmoAdvancedCut::unselect_all_connectors() +{ + std::fill(m_selected.begin(), m_selected.end(), false); + m_selected_count = 0; + validate_connector_settings(); +} + +void GLGizmoAdvancedCut::validate_connector_settings() +{ + if (m_connector_depth_ratio < 0.f) + m_connector_depth_ratio = 3.f; + if (m_connector_depth_ratio_tolerance < 0.f) + m_connector_depth_ratio_tolerance = 0.1f; + if (m_connector_size < 0.f) + m_connector_size = 2.5f; + if (m_connector_size_tolerance < 0.f) + m_connector_size_tolerance = 0.f; + + if (m_connector_type == CutConnectorType::Undef) + m_connector_type = CutConnectorType::Plug; + if (m_connector_style == size_t(CutConnectorStyle::Undef)) + m_connector_style = size_t(CutConnectorStyle::Prizm); + if (m_connector_shape_id == size_t(CutConnectorShape::Undef)) + m_connector_shape_id = size_t(CutConnectorShape::Circle); +} + +bool GLGizmoAdvancedCut::add_connector(CutConnectors &connectors, const Vec2d &mouse_position) +{ + if (!m_connectors_editing) + return false; + + Vec3d pos; + Vec3d pos_world; + if (unproject_on_cut_plane(mouse_position.cast(), pos, pos_world)) { + Plater::TakeSnapshot snapshot(wxGetApp().plater(), "Add connector"); + unselect_all_connectors(); + + connectors.emplace_back(pos, m_rotate_matrix, m_connector_size * 0.5f, m_connector_depth_ratio, m_connector_size_tolerance, m_connector_depth_ratio_tolerance, + CutConnectorAttributes(CutConnectorType(m_connector_type), CutConnectorStyle(m_connector_style), CutConnectorShape(m_connector_shape_id))); + m_selected.push_back(true); + m_selected_count = 1; + assert(m_selected.size() == connectors.size()); + m_parent.set_as_dirty(); + + return true; + } + return false; +} + +bool GLGizmoAdvancedCut::delete_selected_connectors() +{ + CutConnectors &connectors = m_c->selection_info()->model_object()->cut_connectors; + if (connectors.empty()) + return false; + + Plater::TakeSnapshot snapshot(wxGetApp().plater(), "Delete connector"); + + // remove connectors + for (int i = int(connectors.size()) - 1; i >= 0; i--) + if (m_selected[i]) connectors.erase(connectors.begin() + i); + // remove selections + m_selected.erase(std::remove_if(m_selected.begin(), m_selected.end(), + [](const auto &selected) { + return selected;}), + m_selected.end()); + + m_selected_count = 0; + + assert(m_selected.size() == connectors.size()); + m_parent.set_as_dirty(); + return true; +} + +bool GLGizmoAdvancedCut::is_outside_of_cut_contour(size_t idx, const CutConnectors &connectors, const Vec3d cur_pos) +{ + // check if connector pos is out of clipping plane + if (m_c->object_clipper() && !m_c->object_clipper()->is_projection_inside_cut(cur_pos)) { + m_info_stats.outside_cut_contour++; + return true; + } + + // check if connector bottom contour is out of clipping plane + const CutConnector & cur_connector = connectors[idx]; + const CutConnectorShape shape = CutConnectorShape(cur_connector.attribs.shape); + const int sectorCount = shape == CutConnectorShape::Triangle ? 3 : + shape == CutConnectorShape::Square ? 4 : + shape == CutConnectorShape::Circle ? 60: // supposably, 60 points are enough for conflict detection + shape == CutConnectorShape::Hexagon ? 6 : 1 ; + + indexed_triangle_set mesh; + auto & vertices = mesh.vertices; + vertices.reserve(sectorCount + 1); + + float fa = 2 * PI / sectorCount; + auto vec = Eigen::Vector2f(0, cur_connector.radius); + for (float angle = 0; angle < 2.f * PI; angle += fa) { + Vec2f p = Eigen::Rotation2Df(angle) * vec; + vertices.emplace_back(Vec3f(p(0), p(1), 0.f)); + } + + Transform3d transform = Transform3d::Identity(); + transform.translate(cur_pos); + its_transform(mesh, transform * m_rotate_matrix); + + for (auto vertex : vertices) { + if (m_c->object_clipper() && !m_c->object_clipper()->is_projection_inside_cut(vertex.cast())) { + m_info_stats.outside_cut_contour++; + return true; + } + } + + return false; +} + +bool GLGizmoAdvancedCut::is_conflict_for_connector(size_t idx, const CutConnectors &connectors, const Vec3d cur_pos) +{ + if (is_outside_of_cut_contour(idx, connectors, cur_pos)) + return true; + + const CutConnector &cur_connector = connectors[idx]; + + Transform3d translate_tf = Transform3d::Identity(); + translate_tf.translate(cur_pos); + Transform3d scale_tf = Transform3d::Identity(); + scale_tf.scale(Vec3f(cur_connector.radius, cur_connector.radius, cur_connector.height).cast()); + const Transform3d matrix = translate_tf * m_rotate_matrix * scale_tf; + + const BoundingBoxf3 cur_tbb = m_shapes[cur_connector.attribs].get_bounding_box().transformed(matrix); + + // check if connector's bounding box is inside the object's bounding box + if (!bounding_box().contains(cur_tbb)) { + m_info_stats.outside_bb++; + return true; + } + + // check if connectors are overlapping + for (size_t i = 0; i < connectors.size(); ++i) { + if (i == idx) continue; + const CutConnector &connector = connectors[i]; + + if ((connector.pos - cur_connector.pos).norm() < double(connector.radius + cur_connector.radius)) { + m_info_stats.is_overlap = true; + return true; + } + } + + return false; +} + +void GLGizmoAdvancedCut::check_conflict_for_all_connectors() +{ + const ModelObject *mo = m_c->selection_info()->model_object(); + auto inst_id = m_c->selection_info()->get_active_instance(); + if (inst_id < 0) + return; + + const CutConnectors &connectors = mo->cut_connectors; + const ModelInstance *mi = mo->instances[inst_id]; + const Vec3d & instance_offset = mi->get_offset(); + const double sla_shift = double(m_c->selection_info()->get_sla_shift()); + + m_has_invalid_connector = false; + m_info_stats.invalidate(); + + for (size_t i = 0; i < connectors.size(); ++i) { + const CutConnector &connector = connectors[i]; + + Vec3d pos = connector.pos + instance_offset + sla_shift * Vec3d::UnitZ(); + + // First decide about the color of the point. + const bool conflict_connector = is_conflict_for_connector(i, connectors, pos); + if (conflict_connector) { + m_has_invalid_connector = true; + } + } +} + +void GLGizmoAdvancedCut::render_cut_plane_input_window(float x, float y, float bottom_limit) +{ + // float unit_size = m_imgui->get_style_scaling() * 48.0f; + float space_size = m_imgui->get_style_scaling() * 8; + float movement_cap = m_imgui->calc_text_size(_L("Movement:")).x; + float rotate_cap = m_imgui->calc_text_size(_L("Rotate")).x; + float caption_size = std::max(movement_cap, rotate_cap) + 2 * space_size; + bool imperial_units = wxGetApp().app_config->get("use_inches") == "1"; + unsigned int current_active_id = ImGui::GetActiveID(); + + Vec3d rotation = {Geometry::rad2deg(m_rotation(0)), Geometry::rad2deg(m_rotation(1)), Geometry::rad2deg(m_rotation(2))}; + char buf[3][64]; + float buf_size[3]; + float vec_max = 0, unit_size = 0; + for (int i = 0; i < 3; i++) { + ImGui::DataTypeFormatString(buf[i], IM_ARRAYSIZE(buf[i]), ImGuiDataType_Double, (void *) &rotation[i], "%.2f"); + buf_size[i] = ImGui::CalcTextSize(buf[i]).x; + vec_max = std::max(buf_size[i], vec_max); + } + + float buf_size_max = ImGui::CalcTextSize("-100.00").x; + if (vec_max < buf_size_max) { + unit_size = buf_size_max + ImGui::GetStyle().FramePadding.x * 2.0f; + } else { + unit_size = vec_max + ImGui::GetStyle().FramePadding.x * 2.0f; + } + + ImGui::PushItemWidth(caption_size); + ImGui::Dummy(ImVec2(caption_size, -1)); + ImGui::SameLine(caption_size + 1 * space_size); + ImGui::PushItemWidth(unit_size); + ImGui::TextAlignCenter("X"); + ImGui::SameLine(caption_size + 1 * unit_size + 2 * space_size); + ImGui::PushItemWidth(unit_size); + ImGui::TextAlignCenter("Y"); + ImGui::SameLine(caption_size + 2 * unit_size + 3 * space_size); + ImGui::PushItemWidth(unit_size); + ImGui::TextAlignCenter("Z"); + + ImGui::AlignTextToFramePadding(); + + // Rotation input box + ImGui::PushItemWidth(caption_size); + m_imgui->text(_L("Rotation") + " "); + ImGui::SameLine(caption_size + 1 * space_size); + ImGui::PushItemWidth(unit_size); + ImGui::BBLInputDouble("##cut_rotation_x", &rotation[0], 0.0f, 0.0f, "%.2f"); + ImGui::SameLine(caption_size + 1 * unit_size + 2 * space_size); + ImGui::PushItemWidth(unit_size); + ImGui::BBLInputDouble("##cut_rotation_y", &rotation[1], 0.0f, 0.0f, "%.2f"); + ImGui::SameLine(caption_size + 2 * unit_size + 3 * space_size); + ImGui::PushItemWidth(unit_size); + ImGui::BBLInputDouble("##cut_rotation_z", &rotation[2], 0.0f, 0.0f, "%.2f"); + if (current_active_id != m_last_active_id) { + if (std::abs(Geometry::rad2deg(m_rotation(0)) - m_buffered_rotation(0)) > EPSILON || std::abs(Geometry::rad2deg(m_rotation(1)) - m_buffered_rotation(1)) > EPSILON || + std::abs(Geometry::rad2deg(m_rotation(2)) - m_buffered_rotation(2)) > EPSILON) { + m_rotation = m_buffered_rotation; + m_buffered_rotation.setZero(); + update_plane_points(); + m_parent.post_event(SimpleEvent(wxEVT_PAINT)); + } + } else { + m_buffered_rotation(0) = Geometry::deg2rad(rotation(0)); + m_buffered_rotation(1) = Geometry::deg2rad(rotation(1)); + m_buffered_rotation(2) = Geometry::deg2rad(rotation(2)); + } + + ImGui::Separator(); + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(4.0f, 10.0f)); + // Movement input box + double movement = m_movement; + ImGui::PushItemWidth(caption_size); + ImGui::AlignTextToFramePadding(); + m_imgui->text(_L("Movement") + " "); + ImGui::SameLine(caption_size + 1 * space_size); + ImGui::PushItemWidth(3 * unit_size + 2 * space_size); + ImGui::BBLInputDouble("##cut_movement", &movement, 0.0f, 0.0f, "%.2f"); + if (current_active_id != m_last_active_id) { + if (std::abs(m_buffered_movement - m_movement) > EPSILON) { + m_movement = m_buffered_movement; + m_buffered_movement = 0.0; + + // update absolute height + Vec3d plane_normal = get_plane_normal(); + m_height_delta = plane_normal(2) * m_movement; + m_height += m_height_delta; + m_buffered_height = m_height; + + update_plane_points(); + m_parent.post_event(SimpleEvent(wxEVT_PAINT)); + } + } else { + m_buffered_movement = movement; + } + + // height input box + double height = m_height; + ImGui::PushItemWidth(caption_size); + ImGui::AlignTextToFramePadding(); + // only allow setting height when cut plane is horizontal + Vec3d plane_normal = get_plane_normal(); + m_imgui->disabled_begin(std::abs(plane_normal(0)) > EPSILON || std::abs(plane_normal(1)) > EPSILON); + m_imgui->text(_L("Height") + " "); + ImGui::SameLine(caption_size + 1 * space_size); + ImGui::PushItemWidth(3 * unit_size + 2 * space_size); + ImGui::BBLInputDouble("##cut_height", &height, 0.0f, 0.0f, "%.2f"); + if (current_active_id != m_last_active_id) { + if (std::abs(m_buffered_height - m_height) > EPSILON) { + m_height_delta = m_buffered_height - m_height; + m_height = m_buffered_height; + update_plane_points(); + m_parent.post_event(SimpleEvent(wxEVT_PAINT)); + } + } else { + m_buffered_height = height; + } + ImGui::PopStyleVar(1); + m_imgui->disabled_end(); + + m_imgui->disabled_begin(!m_keep_upper || !m_keep_lower); + if (m_imgui->button(_L("Add/Edit connectors"))) set_connectors_editing(true); + m_imgui->disabled_end(); + + ImGui::Separator(); + + float label_width = 0; + for (const wxString& label : {_L("Upper part"), _L("Lower part")}) { + const float width = m_imgui->calc_text_size(label).x + m_imgui->scaled(1.5f); + if (label_width < width) + label_width = width; + } + + auto render_part_action_line = [this, label_width](const wxString& label, const wxString& suffix, bool& keep_part, bool& place_on_cut_part, bool& rotate_part) { + CutConnectors &connectors = m_c->selection_info()->model_object()->cut_connectors; + + bool keep = true; + ImGui::AlignTextToFramePadding(); + m_imgui->text(label); + + ImGui::SameLine(label_width); + + m_imgui->disabled_begin(!connectors.empty()); + m_imgui->bbl_checkbox(_L("Keep") + suffix, connectors.empty() ? keep_part : keep); + m_imgui->disabled_end(); + + ImGui::SameLine(); + + m_imgui->disabled_begin(!keep_part); + if (m_imgui->bbl_checkbox(_L("Place on cut") + suffix, place_on_cut_part)) + rotate_part = false; + ImGui::SameLine(); + if (m_imgui->bbl_checkbox(_L("Flip") + suffix, rotate_part)) + place_on_cut_part = false; + m_imgui->disabled_end(); + }; + + m_imgui->text(_L("After cut") + ": "); + render_part_action_line( _L("Upper part"), "##upper", m_keep_upper, m_place_on_cut_upper, m_rotate_upper); + render_part_action_line( _L("Lower part"), "##lower", m_keep_lower, m_place_on_cut_lower, m_rotate_lower); + + +#if 0 + // Auto segment input + ImGui::PushItemWidth(m_imgui->get_style_scaling() * 150.0); + m_imgui->checkbox(_L("Auto Segment"), m_do_segment); + m_imgui->disabled_begin(!m_do_segment); + ImGui::InputDouble("smoothing_alpha", &m_segment_smoothing_alpha, 0.0f, 0.0f, "%.2f"); + m_segment_smoothing_alpha = std::max(0.1, std::min(100.0, m_segment_smoothing_alpha)); + ImGui::InputInt("segment number", &m_segment_number); + m_segment_number = std::max(1, m_segment_number); + m_imgui->disabled_end(); + + ImGui::Separator(); +#endif + + // Cut button + m_imgui->disabled_begin(!can_perform_cut()); + if (m_imgui->button(_L("Perform cut"))) + perform_cut(m_parent.get_selection()); + m_imgui->disabled_end(); + ImGui::SameLine(); + const bool reset_clicked = m_imgui->button(_L("Reset")); + if (reset_clicked) { reset_all(); } + + m_last_active_id = current_active_id; +} + +void GLGizmoAdvancedCut::init_connectors_input_window_data() +{ + CutConnectors &connectors = m_c->selection_info()->model_object()->cut_connectors; + + m_label_width = m_imgui->get_font_size() * 6.f; + m_control_width = m_imgui->get_font_size() * 9.f; + + if (m_connectors_editing && m_selected_count > 0) { + float depth_ratio {UndefFloat}; + float depth_ratio_tolerance {UndefFloat}; + float radius {UndefFloat}; + float radius_tolerance {UndefFloat}; + CutConnectorType type{CutConnectorType::Undef}; + CutConnectorStyle style{CutConnectorStyle::Undef}; + CutConnectorShape shape{CutConnectorShape::Undef}; + + bool is_init = false; + for (size_t idx = 0; idx < m_selected.size(); idx++) + if (m_selected[idx]) { + const CutConnector &connector = connectors[idx]; + if (!is_init) { + depth_ratio = connector.height; + depth_ratio_tolerance = connector.height_tolerance; + radius = connector.radius; + radius_tolerance = connector.radius_tolerance; + type = connector.attribs.type; + style = connector.attribs.style; + shape = connector.attribs.shape; + + if (m_selected_count == 1) break; + is_init = true; + } else { + if (!is_approx(depth_ratio, connector.height)) + depth_ratio = UndefFloat; + if (!is_approx(depth_ratio_tolerance, connector.height_tolerance)) + depth_ratio_tolerance = UndefFloat; + if (!is_approx(radius, connector.radius)) + radius = UndefFloat; + if (!is_approx(radius_tolerance, connector.radius_tolerance)) + radius_tolerance = UndefFloat; + + if (type != connector.attribs.type) + type = CutConnectorType::Undef; + if (style != connector.attribs.style) + style = CutConnectorStyle::Undef; + if (shape != connector.attribs.shape) + shape = CutConnectorShape::Undef; + } + } + + m_connector_depth_ratio = depth_ratio; + m_connector_depth_ratio_tolerance = depth_ratio_tolerance; + m_connector_size = 2.f * radius; + m_connector_size_tolerance = radius_tolerance; + m_connector_type = type; + m_connector_style = size_t(style); + m_connector_shape_id = size_t(shape); + } +} + +void GLGizmoAdvancedCut::render_connectors_input_window(float x, float y, float bottom_limit) +{ + CutConnectors &connectors = m_c->selection_info()->model_object()->cut_connectors; + + // update when change input window + m_imgui->set_requires_extra_frame(); + + ImGui::AlignTextToFramePadding(); + m_imgui->text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, _L("Connectors")); + + m_imgui->disabled_begin(connectors.empty()); + ImGui::SameLine(m_label_width); + if (render_reset_button("connectors", _u8L("Remove connectors"))) + reset_connectors(); + m_imgui->disabled_end(); + + m_imgui->text(_L("Type")); + ImGui::PushStyleColor(ImGuiCol_CheckMark, ImVec4(0.00f, 0.00f, 0.00f, 1.00f)); + bool type_changed = render_connect_type_radio_button(CutConnectorType::Plug); + type_changed |= render_connect_type_radio_button(CutConnectorType::Dowel); + if (type_changed) + apply_selected_connectors([this, &connectors](size_t idx) { connectors[idx].attribs.type = CutConnectorType(m_connector_type); }); + ImGui::PopStyleColor(1); + + std::vector connector_styles = {_u8L("Prizm"), _u8L("Frustum")}; + std::vector connector_shapes = { _u8L("Triangle"), _u8L("Square"), _u8L("Hexagon"), _u8L("Circle") }; + + m_imgui->disabled_begin(m_connector_type == CutConnectorType::Dowel); + if (type_changed && m_connector_type == CutConnectorType::Dowel) { + m_connector_style = size_t(CutConnectorStyle::Prizm); + apply_selected_connectors([this, &connectors](size_t idx) { connectors[idx].attribs.style = CutConnectorStyle(m_connector_style); }); + } + + ImGuiWrapper::push_combo_style(m_parent.get_scale()); + if (render_combo(_u8L("Style"), connector_styles, m_connector_style)) + apply_selected_connectors([this, &connectors](size_t idx) { connectors[idx].attribs.style = CutConnectorStyle(m_connector_style); }); + m_imgui->disabled_end(); + + if (render_combo(_u8L("Shape"), connector_shapes, m_connector_shape_id)) + apply_selected_connectors([this, &connectors](size_t idx) { connectors[idx].attribs.shape = CutConnectorShape(m_connector_shape_id); }); + ImGuiWrapper::pop_combo_style(); + + if (render_slider_double_input(_u8L("Depth ratio"), m_connector_depth_ratio, m_connector_depth_ratio_tolerance)) + apply_selected_connectors([this, &connectors](size_t idx) { + if (m_connector_depth_ratio > 0) + connectors[idx].height = m_connector_depth_ratio; + if (m_connector_depth_ratio_tolerance >= 0) + connectors[idx].height_tolerance = m_connector_depth_ratio_tolerance; + }); + + if (render_slider_double_input(_u8L("Size"), m_connector_size, m_connector_size_tolerance)) + apply_selected_connectors([this, &connectors](size_t idx) { + if (m_connector_size > 0) + connectors[idx].radius = 0.5f * m_connector_size; + if (m_connector_size_tolerance >= 0) + connectors[idx].radius_tolerance = m_connector_size_tolerance; + }); + + ImGui::Separator(); + + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(6.0f, 10.0f)); + float get_cur_y = ImGui::GetContentRegionMax().y + ImGui::GetFrameHeight() + y; + show_tooltip_information(x, get_cur_y); + + float f_scale = m_parent.get_gizmos_manager().get_layout_scale(); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(6.0f, 4.0f * f_scale)); + + ImGui::SameLine(); + if (m_imgui->button(_L("Confirm connectors"))) { + unselect_all_connectors(); + set_connectors_editing(false); + } + + ImGui::SameLine(2.75f * m_label_width); + + if (m_imgui->button(_L("Cancel"))) { + reset_connectors(); + set_connectors_editing(false); + } + + ImGui::PopStyleVar(2); +} + +void GLGizmoAdvancedCut::render_input_window_warning() const +{ + if (m_has_invalid_connector) { + wxString out = /*wxString(ImGui::WarningMarkerSmall)*/ "Warning: " + _L("Invalid connectors detected") + ":"; + if (m_info_stats.outside_cut_contour > size_t(0)) + out += "\n - " + std::to_string(m_info_stats.outside_cut_contour) + + (m_info_stats.outside_cut_contour == 1 ? L("connector is out of cut contour") : L("connectors are out of cut contour")); + if (m_info_stats.outside_bb > size_t(0)) + out += "\n - " + std::to_string(m_info_stats.outside_bb) + + (m_info_stats.outside_bb == 1 ? L("connector is out of object") : L("connectors is out of object")); + if (m_info_stats.is_overlap) + out += "\n - " + _L("Some connectors are overlapped"); + m_imgui->text(out); + } + if (!m_keep_upper && !m_keep_lower) m_imgui->text(/*wxString(ImGui::WarningMarkerSmall)*/"Warning: " + _L("Invalid state. \nNo one part is selected for keep after cut")); +} + +bool GLGizmoAdvancedCut::render_reset_button(const std::string &label_id, const std::string &tooltip) const +{ + const ImGuiStyle &style = ImGui::GetStyle(); + + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, {1, style.ItemSpacing.y}); + + ImGui::PushStyleColor(ImGuiCol_Button, {0.25f, 0.25f, 0.25f, 0.0f}); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, {0.4f, 0.4f, 0.4f, 1.0f}); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, {0.4f, 0.4f, 0.4f, 1.0f}); + + bool revert = m_imgui->button(wxString(ImGui::RevertBtn)); + + ImGui::PopStyleColor(3); + + if (ImGui::IsItemHovered()) + m_imgui->tooltip(tooltip.c_str(), ImGui::GetFontSize() * 20.0f); + + ImGui::PopStyleVar(); + + return revert; +} + +bool GLGizmoAdvancedCut::render_connect_type_radio_button(CutConnectorType type) +{ + ImGui::SameLine(type == CutConnectorType::Plug ? m_label_width : 2 * m_label_width); + ImGui::PushItemWidth(m_control_width); + + wxString radio_name; + switch (type) { + case CutConnectorType::Plug: + radio_name = L("Plug"); + break; + case CutConnectorType::Dowel: + radio_name = L("Dowel"); + break; + default: + break; + } + + if (m_imgui->radio_button(radio_name, m_connector_type == type)) { + m_connector_type = type; + update_connector_shape(); + return true; + } + return false; +} + +bool GLGizmoAdvancedCut::render_combo(const std::string &label, const std::vector &lines, size_t &selection_idx) +{ + ImGui::AlignTextToFramePadding(); + m_imgui->text(label); + ImGui::SameLine(m_label_width); + ImGui::PushItemWidth(m_control_width); + + size_t selection_out = selection_idx; + // It is necessary to use BeginGroup(). Otherwise, when using SameLine() is called, then other items will be drawn inside the combobox. + ImGui::BeginGroup(); + ImVec2 combo_pos = ImGui::GetCursorScreenPos(); + if (ImGui::BeginCombo(("##" + label).c_str(), "")) { + for (size_t line_idx = 0; line_idx < lines.size(); ++line_idx) { + ImGui::PushID(int(line_idx)); + if (ImGui::Selectable("", line_idx == selection_idx)) selection_out = line_idx; + + ImGui::SameLine(); + ImGui::Text("%s", lines[line_idx].c_str()); + ImGui::PopID(); + } + + ImGui::EndCombo(); + } + + ImVec2 backup_pos = ImGui::GetCursorScreenPos(); + ImGuiStyle &style = ImGui::GetStyle(); + + ImGui::SetCursorScreenPos(ImVec2(combo_pos.x + style.FramePadding.x, combo_pos.y + style.FramePadding.y)); + std::string str_line = selection_out < lines.size() ? lines[selection_out] : " "; + ImGui::Text("%s", str_line.c_str()); + ImGui::SetCursorScreenPos(backup_pos); + ImGui::EndGroup(); + + bool is_changed = selection_idx != selection_out; + selection_idx = selection_out; + + if (is_changed) update_connector_shape(); + + return is_changed; +} + +bool GLGizmoAdvancedCut::render_slider_double_input(const std::string &label, float &value_in, float &tolerance_in) +{ + ImGui::AlignTextToFramePadding(); + m_imgui->text(label); + ImGui::SameLine(m_label_width); + ImGui::PushItemWidth(m_control_width * 0.85f); + + bool m_imperial_units = false; + + float value = value_in; + if (m_imperial_units) value *= float(units_mm_to_in); + float old_val = value; + + constexpr float UndefMinVal = -0.1f; + + const BoundingBoxf3 bbox = bounding_box(); + float mean_size = float((bbox.size().x() + bbox.size().y() + bbox.size().z()) / 9.0); + float min_size = value_in < 0.f ? UndefMinVal : 2.f; + if (m_imperial_units) { + mean_size *= float(units_mm_to_in); + min_size *= float(units_mm_to_in); + } + std::string format = value_in < 0.f ? " " : m_imperial_units ? "%.4f " + _u8L("in") : "%.2f " + _u8L("mm"); + + m_imgui->slider_float(("##" + label).c_str(), &value, min_size, mean_size, format.c_str()); + value_in = value * float(m_imperial_units ? units_in_to_mm : 1.0); + + ImGui::SameLine(m_label_width + m_control_width + 3); + ImGui::PushItemWidth(m_control_width * 0.3f); + + float old_tolerance, tolerance = old_tolerance = tolerance_in * 100.f; + std::string format_t = tolerance_in < 0.f ? " " : "%.f %%"; + float min_tolerance = tolerance_in < 0.f ? UndefMinVal : 0.f; + + m_imgui->slider_float(("##tolerance_" + label).c_str(), &tolerance, min_tolerance, 20.f, format_t.c_str(), 1.f, true, _L("Tolerance")); + tolerance_in = tolerance * 0.01f; + + return !is_approx(old_val, value) || !is_approx(old_tolerance, tolerance); +} + +bool GLGizmoAdvancedCut::cut_line_processing() const +{ + return m_cut_line_begin != Vec3d::Zero(); +} + +void GLGizmoAdvancedCut::discard_cut_line_processing() +{ + m_cut_line_begin = m_cut_line_end = Vec3d::Zero(); +} + +bool GLGizmoAdvancedCut::process_cut_line(SLAGizmoEventType action, const Vec2d &mouse_position) +{ + const Camera &camera = wxGetApp().plater()->get_camera(); + + Vec3d pt; + Vec3d dir; + MeshRaycaster::line_from_mouse_pos_static(mouse_position, Transform3d::Identity(), camera, pt, dir); + dir.normalize(); + pt += dir; // Move the pt along dir so it is not clipped. + + if (action == SLAGizmoEventType::LeftDown && !cut_line_processing()) { + m_cut_line_begin = pt; + m_cut_line_end = pt; + return true; + } + + if (cut_line_processing()) { + m_cut_line_end = pt; + if (action == SLAGizmoEventType::LeftDown || action == SLAGizmoEventType::LeftUp) { + Vec3d line_dir = m_cut_line_end - m_cut_line_begin; + if (line_dir.norm() < 3.0) + return true; + Plater::TakeSnapshot snapshot(wxGetApp().plater(), "Cut by line"); + + Vec3d cross_dir = line_dir.cross(dir).normalized(); + Eigen::Quaterniond q; + Transform3d m = Transform3d::Identity(); + m.matrix().block(0, 0, 3, 3) = q.setFromTwoVectors(m_cut_plane_normal, cross_dir).toRotationMatrix(); + + m_rotate_matrix = m; + + const ModelObject * mo = m_c->selection_info()->model_object(); + const ModelInstance *mi = mo->instances[m_c->selection_info()->get_active_instance()]; + Vec3d plane_center = get_plane_center(); + + auto update_plane_after_line_cut = [this](const Vec3d &deta_plane_center, const Transform3d& rotate_matrix) { + Vec3d plane_center = get_plane_center(); + + std::array plane_points_rot; + for (int i = 0; i < plane_points_rot.size(); i++) { + plane_points_rot[i] = m_cut_plane_points[i] - plane_center; + } + + for (uint32_t i = 0; i < plane_points_rot.size(); ++i) { + plane_points_rot[i] = rotate_matrix * plane_points_rot[i]; + } + + for (int i = 0; i < plane_points_rot.size(); i++) { + m_cut_plane_points[i] = plane_points_rot[i] + plane_center + deta_plane_center; + } + }; + + update_plane_after_line_cut(cross_dir * (cross_dir.dot(pt - m_cut_plane_center)), m_rotate_matrix); + + discard_cut_line_processing(); + } else if (action == SLAGizmoEventType::Dragging) + this->set_dirty(); + return true; + } + return false; +} + } // namespace GUI } // namespace Slic3r diff --git a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.hpp b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.hpp index a040c8accf..45fe4419a1 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.hpp @@ -3,9 +3,15 @@ #include "GLGizmoBase.hpp" #include "GLGizmoRotate.hpp" +#include "libslic3r/Model.hpp" namespace Slic3r { +enum class CutConnectorType : int; +class ModelVolume; +struct CutConnectorAttributes; + namespace GUI { +enum class SLAGizmoEventType : unsigned char; class GLGizmoAdvancedCut : public GLGizmoRotate3D { @@ -42,8 +48,11 @@ private: bool m_keep_upper; bool m_keep_lower; - bool m_cut_to_parts; - bool m_rotate_lower; + bool m_place_on_cut_upper{true}; + bool m_place_on_cut_lower{false}; + bool m_rotate_upper{false}; + bool m_rotate_lower{false}; + bool m_do_segment; double m_segment_smoothing_alpha; int m_segment_number; @@ -54,25 +63,93 @@ private: unsigned int m_last_active_id; + bool m_connectors_editing{false}; + bool m_show_shortcuts{false}; + + std::vector> m_shortcuts; + double m_label_width{150.0}; + double m_control_width{ 200.0 }; + + CutConnectorType m_connector_type; + size_t m_connector_style; + size_t m_connector_shape_id; + + float m_connector_depth_ratio{3.f}; + float m_connector_depth_ratio_tolerance{0.1f}; + + float m_connector_size{2.5f}; + float m_connector_size_tolerance{0.f}; + + TriangleMesh m_connector_mesh; + bool m_has_invalid_connector{false}; + + // remember the connectors which is selected + mutable std::vector m_selected; + int m_selected_count{0}; + + Vec3d m_cut_plane_center{Vec3d::Zero()}; + Vec3d m_cut_plane_normal{Vec3d::UnitZ()}; + + Vec3d m_cut_line_begin{Vec3d::Zero()}; + Vec3d m_cut_line_end{Vec3d::Zero()}; + + Transform3d m_rotate_matrix{Transform3d::Identity()}; + + std::map m_shapes; + + struct InvalidConnectorsStatistics + { + unsigned int outside_cut_contour; + unsigned int outside_bb; + bool is_overlap; + + void invalidate() + { + outside_cut_contour = 0; + outside_bb = 0; + is_overlap = false; + } + } m_info_stats; + + //GLSelectionRectangle m_selection_rectangle; + public: GLGizmoAdvancedCut(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id); + bool gizmo_event(SLAGizmoEventType action, const Vec2d &mouse_position, bool shift_down, bool alt_down, bool control_down); + bool on_key(wxKeyEvent &evt); + double get_movement() const { return m_movement; } void set_movement(double movement) const; void finish_rotation(); std::string get_tooltip() const override; + BoundingBoxf3 bounding_box() const; + //BoundingBoxf3 transformed_bounding_box(const Vec3d &plane_center, bool revert_move = false) const; + + bool is_looking_forward() const; + + bool unproject_on_cut_plane(const Vec2d &mouse_pos, Vec3d &pos, Vec3d &pos_world); + + virtual bool apply_clipping_plane() { return m_connectors_editing; } + protected: virtual bool on_init(); + virtual void on_load(cereal::BinaryInputArchive &ar) override; + virtual void on_save(cereal::BinaryOutputArchive &ar) const override; virtual std::string on_get_name() const; virtual void on_set_state(); virtual bool on_is_activable() const; - virtual void on_start_dragging(); + virtual CommonGizmosDataID on_get_requirements() const override; + virtual void on_start_dragging() override; + virtual void on_stop_dragging() override; virtual void on_update(const UpdateData& data); virtual void on_render(); virtual void on_render_for_picking(); virtual void on_render_input_window(float x, float y, float bottom_limit); + void show_tooltip_information(float x, float y); + virtual void on_enable_grabber(unsigned int id) { if (id < 3) @@ -97,6 +174,12 @@ protected: private: void perform_cut(const Selection& selection); + bool can_perform_cut() const; + void apply_connectors_in_model(ModelObject *mo, bool &create_dowels_as_separate_object); + + bool is_selection_changed(bool alt_down, bool shift_down); + void select_connector(int idx, bool select); + double calc_projection(const Linef3& mouse_ray) const; Vec3d calc_plane_normal(const std::array& plane_points) const; Vec3d calc_plane_center(const std::array& plane_points) const; @@ -107,6 +190,46 @@ private: std::array get_plane_points_world_coord() const; void reset_cut_plane(); void reset_all(); + + // update the connectors position so that the connectors are on the cut plane + void put_connectors_on_cut_plane(const Vec3d &cp_normal, double cp_offset); + void update_clipper(); + // on render + void render_cut_plane_and_grabbers(); + void render_connectors(); + void render_clipper_cut(); + void render_cut_line(); + void render_connector_model(GLModel &model, const std::array& color, Transform3d view_model_matrix); + + void clear_selection(); + void init_connector_shapes(); + void set_connectors_editing(bool connectors_editing); + void reset_connectors(); + void update_connector_shape(); + void apply_selected_connectors(std::function apply_fn); + void select_all_connectors(); + void unselect_all_connectors(); + void validate_connector_settings(); + bool add_connector(CutConnectors &connectors, const Vec2d &mouse_position); + bool delete_selected_connectors(); + bool is_outside_of_cut_contour(size_t idx, const CutConnectors &connectors, const Vec3d cur_pos); + bool is_conflict_for_connector(size_t idx, const CutConnectors &connectors, const Vec3d cur_pos); + void check_conflict_for_all_connectors(); + + // render input window + void render_cut_plane_input_window(float x, float y, float bottom_limit); + void init_connectors_input_window_data(); + void render_connectors_input_window(float x, float y, float bottom_limit); + void render_input_window_warning() const; + bool render_reset_button(const std::string &label_id, const std::string &tooltip) const; + bool render_connect_type_radio_button(CutConnectorType type); + + bool render_combo(const std::string &label, const std::vector &lines, size_t &selection_idx); + bool render_slider_double_input(const std::string &label, float &value_in, float &tolerance_in); + + bool cut_line_processing() const; + void discard_cut_line_processing(); + bool process_cut_line(SLAGizmoEventType action, const Vec2d &mouse_position); }; } // namespace GUI diff --git a/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp b/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp index 6d4359d437..ba8fd5280b 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp @@ -162,6 +162,8 @@ public: virtual std::string get_action_snapshot_name() { return "Gizmo action"; } void set_common_data_pool(CommonGizmosDataPool* ptr) { m_c = ptr; } + virtual bool apply_clipping_plane() { return true; } + unsigned int get_sprite_id() const { return m_sprite_id; } int get_hover_id() const { return m_hover_id; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp b/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp index 3bced6a352..39bc98d7fb 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp @@ -336,8 +336,8 @@ bool GLGizmoHollow::gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_pos if (action == SLAGizmoEventType::LeftUp) { if (m_wait_for_up_event) { m_wait_for_up_event = false; - return true; } + return true; } // dragging the selection rectangle: diff --git a/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp b/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp index 7fcb4efb73..65479b064e 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp @@ -83,7 +83,7 @@ bool GLGizmoRotate::on_init() void GLGizmoRotate::on_start_dragging() { const BoundingBoxf3& box = m_parent.get_selection().get_bounding_box(); - m_center = box.center(); + m_center = m_custom_center == Vec3d::Zero() ? box.center() : m_custom_center; m_radius = Offset + box.radius(); m_snap_coarse_in_radius = m_radius / 3.0f; m_snap_coarse_out_radius = 2.0f * m_snap_coarse_in_radius; @@ -135,7 +135,7 @@ void GLGizmoRotate::on_render() const BoundingBoxf3& box = selection.get_bounding_box(); if (m_hover_id != 0 && !m_grabbers[0].dragging) { - m_center = box.center(); + m_center = m_custom_center == Vec3d::Zero() ? box.center() : m_custom_center; m_radius = Offset + box.radius(); m_snap_coarse_in_radius = m_radius / 3.0f; m_snap_coarse_out_radius = 2.0f * m_snap_coarse_in_radius; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp b/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp index 25b8eaf533..9862ec2901 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp @@ -34,6 +34,7 @@ private: Axis m_axis; double m_angle; + mutable Vec3d m_custom_center{Vec3d::Zero()}; mutable Vec3d m_center; mutable float m_radius; @@ -52,6 +53,8 @@ public: std::string get_tooltip() const override; + void set_center(const Vec3d &point) { m_custom_center = point; } + protected: bool on_init() override; std::string on_get_name() const override { return ""; } @@ -101,6 +104,13 @@ public: return tooltip; } + void set_center(const Vec3d &point) + { + m_gizmos[X].set_center(point); + m_gizmos[Y].set_center(point); + m_gizmos[Z].set_center(point); + } + protected: bool on_init() override; std::string on_get_name() const override; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp b/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp index 6f61f7ebac..0f98c5dd35 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp @@ -63,6 +63,12 @@ std::string GLGizmoScale3D::get_tooltip() const return ""; } +void GLGizmoScale3D::enable_ununiversal_scale(bool enable) +{ + for (unsigned int i = 0; i < 6; ++i) + m_grabbers[i].enabled = enable; +} + bool GLGizmoScale3D::on_init() { for (int i = 0; i < 10; ++i) @@ -228,9 +234,11 @@ void GLGizmoScale3D::on_render() // BBS: when select multiple objects, uniform scale can be deselected, display the connection(4,5) //if (single_instance || single_volume) { + + if (m_grabbers[4].enabled && m_grabbers[5].enabled) { glsafe(::glColor4fv(m_grabbers[4].color.data())); render_grabbers_connection(4, 5); - //} + } glsafe(::glColor4fv(m_grabbers[2].color.data())); render_grabbers_connection(6, 7); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoScale.hpp b/src/slic3r/GUI/Gizmos/GLGizmoScale.hpp index e1c72370ff..839c7f6823 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoScale.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoScale.hpp @@ -55,6 +55,7 @@ public: std::string get_tooltip() const override; + void enable_ununiversal_scale(bool enable); protected: virtual bool on_init() override; virtual std::string on_get_name() const override; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp index 7c95d087f7..73ed826fc6 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp @@ -427,8 +427,8 @@ bool GLGizmoSlaSupports::gizmo_event(SLAGizmoEventType action, const Vec2d& mous if (action == SLAGizmoEventType::LeftUp) { if (m_wait_for_up_event) { m_wait_for_up_event = false; - return true; } + return true; } // dragging the selection rectangle: diff --git a/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp b/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp index d52969ba5b..524264cd3d 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp @@ -449,7 +449,26 @@ void ObjectClipper::set_position(double pos, bool keep_normal) get_pool()->get_canvas()->set_as_dirty(); } +void ObjectClipper::set_range_and_pos(const Vec3d &cpl_normal, double cpl_offset, double pos) +{ + m_clp.reset(new ClippingPlane(cpl_normal, cpl_offset)); + m_clp_ratio = pos; + get_pool()->get_canvas()->set_as_dirty(); +} +bool ObjectClipper::is_projection_inside_cut(const Vec3d &point) const +{ + return m_clp_ratio != 0. && std::any_of(m_clippers.begin(), m_clippers.end(), [point](const auto &cl) { + return cl->is_projection_inside_cut(point); + }); +} + +bool ObjectClipper::has_valid_contour() const +{ + return m_clp_ratio != 0. && std::any_of(m_clippers.begin(), m_clippers.end(), [](const auto &cl) { + return cl->has_valid_contour(); + }); +} void SupportsClipper::on_update() { diff --git a/src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp b/src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp index 91c1bde44c..f4211dfb59 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosCommon.hpp @@ -266,6 +266,10 @@ public: ClippingPlane* get_clipping_plane() const { return m_clp.get(); } void render_cut() const; + void set_range_and_pos(const Vec3d &cpl_normal, double cpl_offset, double pos); + + bool is_projection_inside_cut(const Vec3d &point_in) const; + bool has_valid_contour() const; protected: void on_update() override; diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index 49f8799330..7575d1dd7d 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -627,6 +627,8 @@ bool GLGizmosManager::gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_p return dynamic_cast(m_gizmos[MmuSegmentation].get())->gizmo_event(action, mouse_position, shift_down, alt_down, control_down); else if (m_current == Text) return dynamic_cast(m_gizmos[Text].get())->gizmo_event(action, mouse_position, shift_down, alt_down, control_down); + else if (m_current == Cut) + return dynamic_cast(m_gizmos[Cut].get())->gizmo_event(action, mouse_position, shift_down, alt_down, control_down); else return false; } @@ -872,7 +874,8 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt) m_tooltip.clear(); if (evt.LeftDown() && (!control_down || grabber_contains_mouse())) { - if ((m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam || m_current == MmuSegmentation || m_current == Text) + if ((m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || + m_current == Seam || m_current == MmuSegmentation || m_current == Text || m_current == Cut) && gizmo_event(SLAGizmoEventType::LeftDown, mouse_pos, evt.ShiftDown(), evt.AltDown())) // the gizmo got the event and took some action, there is no need to do anything more processed = true; @@ -902,7 +905,8 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt) // event was taken care of by the SlaSupports gizmo processed = true; } - else if (evt.RightDown() && !control_down && selected_object_idx != -1 && (m_current == FdmSupports || m_current == Seam || m_current == MmuSegmentation) + else if (evt.RightDown() && !control_down && selected_object_idx != -1 + && (m_current == FdmSupports || m_current == Seam || m_current == MmuSegmentation || m_current == Cut) && gizmo_event(SLAGizmoEventType::RightDown, mouse_pos)) { // event was taken care of by the FdmSupports / Seam / MMUPainting gizmo processed = true; @@ -911,7 +915,8 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt) && (m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam || m_current == MmuSegmentation)) // don't allow dragging objects with the Sla gizmo on processed = true; - else if (evt.Dragging() && !control_down && (m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam || m_current == MmuSegmentation) + else if (evt.Dragging() && !control_down + && (m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam || m_current == MmuSegmentation || m_current == Cut) && gizmo_event(SLAGizmoEventType::Dragging, mouse_pos, evt.ShiftDown(), evt.AltDown())) { // the gizmo got the event and took some action, no need to do anything more here m_parent.set_as_dirty(); @@ -924,10 +929,12 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt) else if (evt.RightIsDown()) gizmo_event(SLAGizmoEventType::RightUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), true); } - else if (evt.LeftUp() && (m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam || m_current == MmuSegmentation) && !m_parent.is_mouse_dragging()) { + else if (evt.LeftUp() + && (m_current == SlaSupports || m_current == Hollow || m_current == FdmSupports || m_current == Seam || m_current == MmuSegmentation || m_current == Cut) + && !m_parent.is_mouse_dragging() + && gizmo_event(SLAGizmoEventType::LeftUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), control_down)) { // in case SLA/FDM gizmo is selected, we just pass the LeftUp event and stop processing - neither // object moving or selecting is suppressed in that case - gizmo_event(SLAGizmoEventType::LeftUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), control_down); processed = true; } else if (evt.LeftUp() && m_current == Flatten && m_gizmos[m_current]->get_hover_id() != -1) { @@ -937,8 +944,9 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt) //wxGetApp().obj_manipul()->set_dirty(); processed = true; } - else if (evt.RightUp() && (m_current == FdmSupports || m_current == Seam || m_current == MmuSegmentation) && !m_parent.is_mouse_dragging()) { - gizmo_event(SLAGizmoEventType::RightUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), control_down); + else if (evt.RightUp() && (m_current == FdmSupports || m_current == Seam || m_current == MmuSegmentation || m_current == Cut) + && !m_parent.is_mouse_dragging() + && gizmo_event(SLAGizmoEventType::RightUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), control_down)) { processed = true; } else if (evt.LeftUp()) { @@ -1111,6 +1119,13 @@ bool GLGizmosManager::on_key(wxKeyEvent& evt) const int keyCode = evt.GetKeyCode(); bool processed = false; + // todo: zhimin Each gizmo should handle key event in it own on_key() function + if (m_current == Cut) { + if (GLGizmoAdvancedCut *gizmo_cut = dynamic_cast(get_current())) { + return gizmo_cut->on_key(evt); + } + } + if (evt.GetEventType() == wxEVT_KEY_UP) { if (m_current == SlaSupports || m_current == Hollow) @@ -1479,6 +1494,11 @@ GLGizmoBase* GLGizmosManager::get_current() const return ((m_current == Undefined) || m_gizmos.empty()) ? nullptr : m_gizmos[m_current].get(); } +GLGizmoBase* GLGizmosManager::get_gizmo(GLGizmosManager::EType type) const +{ + return ((type == Undefined) || m_gizmos.empty()) ? nullptr : m_gizmos[type].get(); +} + GLGizmosManager::EType GLGizmosManager::get_gizmo_from_name(const std::string& gizmo_name) const { std::vector selectable_idxs = get_selectable_idxs(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp index c943bc3888..4d13c3d07f 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp @@ -230,6 +230,7 @@ public: EType get_current_type() const { return m_current; } GLGizmoBase* get_current() const; + GLGizmoBase *get_gizmo(GLGizmosManager::EType type) const; EType get_gizmo_from_name(const std::string& gizmo_name) const; bool is_running() const; @@ -311,7 +312,7 @@ public: //BBS: GUI refactor: GLToolbar adjust float get_scaled_total_height() const; float get_scaled_total_width() const; - //GizmoObjectManipulation& get_object_manipulation() { return m_object_manipulation; } + GizmoObjectManipulation& get_object_manipulation() { return m_object_manipulation; } bool get_uniform_scaling() const { return m_object_manipulation.get_uniform_scaling();} private: diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 027a519154..a14b36c7b6 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -84,6 +84,10 @@ static const std::map font_icons = { {ImGui::TextSearchIcon , "im_text_search" }, {ImGui::TextSearchCloseIcon , "im_text_search_close" }, + + {ImGui::ExpandBtn , "expand_btn" }, + {ImGui::CollapseBtn , "collapse_btn" }, + {ImGui::RevertBtn , "revert_btn" }, }; static const std::map font_icons_large = { {ImGui::CloseNotifButton , "notification_close" }, @@ -2002,6 +2006,37 @@ void ImGuiWrapper::pop_button_disable_style() { ImGui::PopStyleColor(3); } +void ImGuiWrapper::push_combo_style(const float scale) +{ + if (m_is_dark_mode) { + ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0f * scale); + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f * scale); + ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BG_DARK); + ImGui::PushStyleColor(ImGuiCol_BorderActive, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_HeaderHovered, ImVec4(0.00f, 0.68f, 0.26f, 0.0f)); + ImGui::PushStyleColor(ImGuiCol_HeaderActive, ImVec4(0.00f, 0.68f, 0.26f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_Header, ImVec4(0.00f, 0.68f, 0.26f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_ScrollbarBg, ImGuiWrapper::COL_WINDOW_BG_DARK); + ImGui::PushStyleColor(ImGuiCol_Button, {1.00f, 1.00f, 1.00f, 0.0f}); + } else { + ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0f * scale); + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f * scale); + ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BG); + ImGui::PushStyleColor(ImGuiCol_BorderActive, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_HeaderHovered, ImVec4(0.00f, 0.68f, 0.26f, 0.5f)); + ImGui::PushStyleColor(ImGuiCol_HeaderActive, ImVec4(0.00f, 0.68f, 0.26f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_Header, ImVec4(0.00f, 0.68f, 0.26f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_ScrollbarBg, ImGuiWrapper::COL_WINDOW_BG); + ImGui::PushStyleColor(ImGuiCol_Button, {1.00f, 1.00f, 1.00f, 0.0f}); + } +} + +void ImGuiWrapper::pop_combo_style() +{ + ImGui::PopStyleVar(2); + ImGui::PopStyleColor(7); +} + void ImGuiWrapper::init_font(bool compress) { destroy_font(); diff --git a/src/slic3r/GUI/ImGuiWrapper.hpp b/src/slic3r/GUI/ImGuiWrapper.hpp index 001f9bea49..ebc8a69bf2 100644 --- a/src/slic3r/GUI/ImGuiWrapper.hpp +++ b/src/slic3r/GUI/ImGuiWrapper.hpp @@ -213,6 +213,8 @@ public: static void pop_cancel_button_style(); static void push_button_disable_style(); static void pop_button_disable_style(); + static void push_combo_style(const float scale); + static void pop_combo_style(); //BBS static int TOOLBAR_WINDOW_FLAGS; diff --git a/src/slic3r/GUI/MeshUtils.cpp b/src/slic3r/GUI/MeshUtils.cpp index 440b0ec0db..6fd3a54b8e 100644 --- a/src/slic3r/GUI/MeshUtils.cpp +++ b/src/slic3r/GUI/MeshUtils.cpp @@ -11,6 +11,7 @@ #include #include +#include "CameraUtils.hpp" namespace Slic3r { @@ -75,7 +76,24 @@ void MeshClipper::render_cut() m_vertex_array.render(); } +bool MeshClipper::is_projection_inside_cut(const Vec3d &point_in) const +{ + if (!m_result || m_result->cut_islands.empty()) + return false; + Vec3d point = m_result->trafo.inverse() * point_in; + Point pt_2d = Point::new_scale(Vec2d(point.x(), point.y())); + for (const CutIsland &isl : m_result->cut_islands) { + if (isl.expoly_bb.contains(pt_2d) && isl.expoly.contains(pt_2d)) + return true; + } + return false; +} + +bool MeshClipper::has_valid_contour() const +{ + return m_result && std::any_of(m_result->cut_islands.begin(), m_result->cut_islands.end(), [](const CutIsland &isl) { return !isl.expoly.empty(); }); +} void MeshClipper::recalculate_triangles() { @@ -104,6 +122,9 @@ void MeshClipper::recalculate_triangles() tr.rotate(q); tr = m_trafo.get_matrix() * tr; + m_result = ClipResult(); + m_result->trafo = tr; + if (m_limiting_plane != ClippingPlane::ClipsNothing()) { // Now remove whatever ended up below the limiting plane (e.g. sinking objects). @@ -157,6 +178,13 @@ void MeshClipper::recalculate_triangles() } } + for (const ExPolygon &exp : expolys) { + m_result->cut_islands.push_back(CutIsland()); + CutIsland &isl = m_result->cut_islands.back(); + isl.expoly = std::move(exp); + isl.expoly_bb = get_extents(exp); + } + m_triangles2d = triangulate_expolygons_2f(expolys, m_trafo.get_matrix().matrix().determinant() < 0.); tr.pretranslate(0.001 * m_plane.get_normal().normalized()); // to avoid z-fighting @@ -180,6 +208,14 @@ Vec3f MeshRaycaster::get_triangle_normal(size_t facet_idx) const return m_normals[facet_idx]; } +void MeshRaycaster::line_from_mouse_pos_static(const Vec2d &mouse_pos, const Transform3d &trafo, const Camera &camera, Vec3d &point, Vec3d &direction) +{ + CameraUtils::ray_from_screen_pos(camera, mouse_pos, point, direction); + Transform3d inv = trafo.inverse(); + point = inv * point; + direction = inv.linear() * direction; +} + void MeshRaycaster::line_from_mouse_pos(const Vec2d& mouse_pos, const Transform3d& trafo, const Camera& camera, Vec3d& point, Vec3d& direction) const { diff --git a/src/slic3r/GUI/MeshUtils.hpp b/src/slic3r/GUI/MeshUtils.hpp index bb8a1aa618..02c597da3c 100644 --- a/src/slic3r/GUI/MeshUtils.hpp +++ b/src/slic3r/GUI/MeshUtils.hpp @@ -94,6 +94,9 @@ public: // be set in world coords. void render_cut(); + bool is_projection_inside_cut(const Vec3d &point) const; + bool has_valid_contour() const; + private: void recalculate_triangles(); @@ -105,6 +108,18 @@ private: std::vector m_triangles2d; GLIndexedVertexArray m_vertex_array; bool m_triangles_valid = false; + + struct CutIsland + { + ExPolygon expoly; + BoundingBox expoly_bb; + }; + struct ClipResult + { + std::vector cut_islands; + Transform3d trafo; // this rotates the cut into world coords + }; + std::optional m_result; // the cut plane }; @@ -121,6 +136,9 @@ public: { } + static void line_from_mouse_pos_static(const Vec2d &mouse_pos, const Transform3d &trafo, + const Camera &camera, Vec3d &point, Vec3d &direction); + void line_from_mouse_pos(const Vec2d& mouse_pos, const Transform3d& trafo, const Camera& camera, Vec3d& point, Vec3d& direction) const; diff --git a/src/slic3r/GUI/MsgDialog.cpp b/src/slic3r/GUI/MsgDialog.cpp index dd60d6fa65..51ef98f67e 100644 --- a/src/slic3r/GUI/MsgDialog.cpp +++ b/src/slic3r/GUI/MsgDialog.cpp @@ -136,7 +136,7 @@ void MsgDialog::SetButtonLabel(wxWindowID btn_id, const wxString& label, bool se Button* MsgDialog::add_button(wxWindowID btn_id, bool set_focus /*= false*/, const wxString& label/* = wxString()*/) { - Button* btn = new Button(this, label); + Button* btn = new Button(this, label, "", 0, 0, btn_id); ButtonSizeType type; if (label.length() < 5) { diff --git a/src/slic3r/GUI/NotificationManager.cpp b/src/slic3r/GUI/NotificationManager.cpp index 7513d3397e..77d1dc08e6 100644 --- a/src/slic3r/GUI/NotificationManager.cpp +++ b/src/slic3r/GUI/NotificationManager.cpp @@ -1020,6 +1020,7 @@ void NotificationManager::UpdatedItemsInfoNotification::add_type(InfoItemType ty case InfoItemType::MmuSegmentation: text += format(_L_PLURAL("%1$d Object has color painting.", "%1$d Objects have color painting.",(*it).second), (*it).second) + "\n"; break; // BBS //case InfoItemType::Sinking: text += format(("%1$d Object has partial sinking.", "%1$d Objects have partial sinking.", (*it).second), (*it).second) + "\n"; break; + case InfoItemType::CutConnectors: text += format(_L_PLURAL("%1$d object was loaded as a part of cut object.", "%1$d objects were loaded as parts of cut object", (*it).second), (*it).second) + "\n"; break; default: BOOST_LOG_TRIVIAL(error) << "Unknown InfoItemType: " << (*it).second; break; } } diff --git a/src/slic3r/GUI/ObjectDataViewModel.cpp b/src/slic3r/GUI/ObjectDataViewModel.cpp index 6895b50e03..76d9c616bd 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.cpp +++ b/src/slic3r/GUI/ObjectDataViewModel.cpp @@ -37,6 +37,7 @@ static constexpr char LayerRootIcon[] = "blank"; static constexpr char LayerIcon[] = "blank"; static constexpr char WarningIcon[] = "obj_warning"; static constexpr char WarningManifoldIcon[] = "obj_warning"; +static constexpr char LockIcon[] = "cut_"; ObjectDataViewModelNode::ObjectDataViewModelNode(PartPlate* part_plate, wxString name) : m_parent(nullptr), @@ -65,6 +66,7 @@ const std::map INFO_ITEMS{ //{ InfoItemType::CustomSeam, {L("Paint-on seam"), "seam_" }, }, { InfoItemType::MmuSegmentation, {L("Color painting"), "mmu_segmentation"}, }, //{ InfoItemType::Sinking, {L("Sinking"), "objlist_sinking"}, }, + { InfoItemType::CutConnectors, {L("Cut connectors"), "cut_connectors" }, }, }; ObjectDataViewModelNode::ObjectDataViewModelNode(ObjectDataViewModelNode* parent, @@ -411,6 +413,7 @@ ObjectDataViewModel::ObjectDataViewModel() m_volume_bmps = MenuFactory::get_volume_bitmaps(); m_warning_bmp = create_scaled_bitmap(WarningIcon); m_warning_manifold_bmp = create_scaled_bitmap(WarningManifoldIcon); + m_lock_bmp = create_scaled_bitmap(LockIcon); for (auto item : INFO_ITEMS) m_info_bmps[item.first] = create_scaled_bitmap(item.second.bmp_name); @@ -490,7 +493,46 @@ wxDataViewItem ObjectDataViewModel::AddOutsidePlate(bool refresh) return plate_item; } -wxDataViewItem ObjectDataViewModel::AddObject(ModelObject* model_object, std::string warning_bitmap, bool refresh) +void ObjectDataViewModel::UpdateBitmapForNode(ObjectDataViewModelNode *node) +{ + int vol_type = static_cast(node->GetVolumeType()); + bool is_volume_node = vol_type >= 0; + + if (!node->has_warning_icon() && !node->has_lock()) { + node->SetBitmap(is_volume_node ? m_volume_bmps.at(vol_type) : m_empty_bmp); + return; + } + + std::string scaled_bitmap_name = std::string(); + if (node->has_warning_icon()) + scaled_bitmap_name += node->warning_icon_name(); + if (node->has_lock()) + scaled_bitmap_name += LockIcon; + if (is_volume_node) + scaled_bitmap_name += std::to_string(vol_type); + + wxBitmap *bmp = m_bitmap_cache->find(scaled_bitmap_name); + if (!bmp) { + std::vector bmps; + if (node->has_warning_icon()) + bmps.emplace_back(node->warning_icon_name() == WarningIcon ? m_warning_bmp : m_warning_manifold_bmp); + if (node->has_lock()) + bmps.emplace_back(m_lock_bmp); + if (is_volume_node) + bmps.emplace_back(m_volume_bmps[vol_type]); + bmp = m_bitmap_cache->insert(scaled_bitmap_name, bmps); + } + + node->SetBitmap(*bmp); +} + +void ObjectDataViewModel::UpdateBitmapForNode(ObjectDataViewModelNode *node, bool has_lock) +{ + node->SetLock(has_lock); + UpdateBitmapForNode(node); +} + +wxDataViewItem ObjectDataViewModel::AddObject(ModelObject *model_object, std::string warning_bitmap, bool has_lock, bool refresh) { // get object node params wxString name = from_u8(model_object->name); @@ -512,6 +554,7 @@ wxDataViewItem ObjectDataViewModel::AddObject(ModelObject* model_object, std::st const wxString extruder_str = wxString::Format("%d", extruder); auto obj_node = new ObjectDataViewModelNode(name, extruder_str, plate_idx, model_object); obj_node->SetWarningBitmap(GetWarningBitmap(warning_bitmap), warning_bitmap); + UpdateBitmapForNode(obj_node, has_lock); if (plate_node != nullptr) { obj_node->m_parent = plate_node; @@ -2138,6 +2181,7 @@ void ObjectDataViewModel::Rescale() m_volume_bmps = MenuFactory::get_volume_bitmaps(); m_warning_bmp = create_scaled_bitmap(WarningIcon); m_warning_manifold_bmp = create_scaled_bitmap(WarningManifoldIcon); + m_lock_bmp = create_scaled_bitmap(LockIcon); for (auto item : INFO_ITEMS) m_info_bmps[item.first] = create_scaled_bitmap(item.second.bmp_name); @@ -2256,6 +2300,26 @@ void ObjectDataViewModel::UpdateWarningIcon(const wxDataViewItem& item, const st AddWarningIcon(item, warning_icon_name); } +void ObjectDataViewModel::UpdateCutObjectIcon(const wxDataViewItem &item, bool has_lock) +{ + if (!item.IsOk()) + return; + ObjectDataViewModelNode* node = static_cast(item.GetID()); + if (node->has_lock() == has_lock) + return; + + node->SetLock(has_lock); + UpdateBitmapForNode(node); + + if (node->GetType() & itObject) { + wxDataViewItemArray children; + GetChildren(item, children); + for (const wxDataViewItem &child : children) + UpdateCutObjectIcon(child, has_lock); + } + ItemChanged(item); +} + } // namespace GUI } // namespace Slic3r diff --git a/src/slic3r/GUI/ObjectDataViewModel.hpp b/src/slic3r/GUI/ObjectDataViewModel.hpp index ec98162273..9aa40f510b 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.hpp +++ b/src/slic3r/GUI/ObjectDataViewModel.hpp @@ -61,6 +61,7 @@ enum class InfoItemType //CustomSeam, MmuSegmentation, //Sinking + CutConnectors, }; class ObjectDataViewModelNode; @@ -92,6 +93,7 @@ class ObjectDataViewModelNode PrintIndicator m_printable {piUndef}; wxBitmap m_printable_icon; std::string m_warning_icon_name{ "" }; + bool m_has_lock{false}; // for cut object icon std::string m_action_icon_name = ""; ModelVolumeType m_volume_type; @@ -224,6 +226,7 @@ public: void SetBitmap(const wxBitmap &icon) { m_bmp = icon; } void SetExtruder(const wxString &extruder) { m_extruder = extruder; } void SetWarningBitmap(const wxBitmap& icon, const std::string& warning_icon_name) { m_bmp = icon; m_warning_icon_name = warning_icon_name; } + void SetLock(bool has_lock) { m_has_lock = has_lock; } const wxBitmap& GetBitmap() const { return m_bmp; } const wxString& GetName() const { return m_name; } ItemType GetType() const { return m_type; } @@ -297,6 +300,8 @@ public: #endif /* NDEBUG */ bool invalid() const { return m_idx < -1; } bool has_warning_icon() const { return !m_warning_icon_name.empty(); } + std::string warning_icon_name() const { return m_warning_icon_name; } + bool has_lock() const { return m_has_lock; } private: friend class ObjectDataViewModel; @@ -319,6 +324,7 @@ class ObjectDataViewModel :public wxDataViewModel wxBitmap m_empty_bmp; wxBitmap m_warning_bmp; wxBitmap m_warning_manifold_bmp; + wxBitmap m_lock_bmp; ObjectDataViewModelNode* m_plate_outside; @@ -330,7 +336,7 @@ public: void Init(); wxDataViewItem AddPlate(PartPlate* part_plate, wxString name = wxEmptyString, bool refresh = true); - wxDataViewItem AddObject(ModelObject* model_object, std::string warning_bitmap, bool refresh = true); + wxDataViewItem AddObject(ModelObject* model_object, std::string warning_bitmap, bool has_lock = false, bool refresh = true); wxDataViewItem AddVolumeChild( const wxDataViewItem &parent_item, const wxString &name, const Slic3r::ModelVolumeType volume_type, @@ -462,6 +468,7 @@ public: void AddWarningIcon(const wxDataViewItem& item, const std::string& warning_name); void DeleteWarningIcon(const wxDataViewItem& item, const bool unmark_object = false); void UpdateWarningIcon(const wxDataViewItem& item, const std::string& warning_name); + void UpdateCutObjectIcon(const wxDataViewItem &item, bool has_cut_icon); bool HasWarningIcon(const wxDataViewItem& item) const; t_layer_height_range GetLayerRangeByItem(const wxDataViewItem& item) const; @@ -482,6 +489,9 @@ private: wxBitmap& GetWarningBitmap(const std::string& warning_icon_name); void ReparentObject(ObjectDataViewModelNode* plate, ObjectDataViewModelNode* object); wxDataViewItem AddOutsidePlate(bool refresh = true); + + void UpdateBitmapForNode(ObjectDataViewModelNode *node); + void UpdateBitmapForNode(ObjectDataViewModelNode *node, bool has_lock); }; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 403edc4bf1..d42e3d8d25 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1922,7 +1922,7 @@ struct Plater::priv void select_all(); void deselect_all(); void remove(size_t obj_idx); - void delete_object_from_model(size_t obj_idx, bool refresh_immediately = true); //BBS + bool delete_object_from_model(size_t obj_idx, bool refresh_immediately = true); //BBS void delete_all_objects_from_model(); void reset(bool apply_presets_change = false); void center_selection(); @@ -4029,13 +4029,31 @@ void Plater::priv::remove(size_t obj_idx) } -void Plater::priv::delete_object_from_model(size_t obj_idx, bool refresh_immediately) +bool Plater::priv::delete_object_from_model(size_t obj_idx, bool refresh_immediately) { + // check if object isn't cut + // show warning message that "cut consistancy" will not be supported any more + ModelObject *obj = model.objects[obj_idx]; + if (obj->is_cut()) { + InfoDialog dialog(q, _L("Delete object which is a part of cut object"), + _L("You try to delete an object which is a part of a cut object.\n" + "This action will break a cut correspondence.\n" + "After that model consistency can't be guaranteed."), + false, wxYES | wxCANCEL | wxCANCEL_DEFAULT | wxICON_WARNING); + dialog.SetButtonLabel(wxID_YES, _L("Delete")); + if (dialog.ShowModal() == wxID_CANCEL) + return false; + } + std::string snapshot_label = "Delete Object"; - if (! model.objects[obj_idx]->name.empty()) - snapshot_label += ": " + model.objects[obj_idx]->name; + if (!obj->name.empty()) + snapshot_label += ": " + obj->name; Plater::TakeSnapshot snapshot(q, snapshot_label); m_ui_jobs.cancel_all(); + + if (obj->is_cut()) + sidebar->obj_list()->invalidate_cut_info_for_object(obj_idx); + model.delete_object(obj_idx); //BBS: notify partplate the instance removed partplate_list.notify_instance_removed(obj_idx, -1); @@ -4045,6 +4063,8 @@ void Plater::priv::delete_object_from_model(size_t obj_idx, bool refresh_immedia update(); object_list_changed(); } + + return true; } void Plater::priv::delete_all_objects_from_model() @@ -6825,22 +6845,29 @@ bool Plater::priv::has_assemble_view() const bool Plater::priv::can_scale_to_print_volume() const { const BuildVolume::Type type = this->bed.build_volume().type(); - return !view3D->get_canvas3d()->get_selection().is_empty() && (type == BuildVolume::Type::Rectangle || type == BuildVolume::Type::Circle); + return !sidebar->obj_list()->has_selected_cut_object() + && !view3D->get_canvas3d()->get_selection().is_empty() + && (type == BuildVolume::Type::Rectangle || type == BuildVolume::Type::Circle); } #endif // ENABLE_ENHANCED_PRINT_VOLUME_FIT bool Plater::priv::can_mirror() const { - return get_selection().is_from_single_instance(); + return !sidebar->obj_list()->has_selected_cut_object() + && get_selection().is_from_single_instance(); } bool Plater::priv::can_replace_with_stl() const { - return get_selection().get_volume_idxs().size() == 1; + return !sidebar->obj_list()->has_selected_cut_object() + && get_selection().get_volume_idxs().size() == 1; } bool Plater::priv::can_reload_from_disk() const { + if (sidebar->obj_list()->has_selected_cut_object()) + return false; + #if ENABLE_RELOAD_FROM_DISK_REWORK // collect selected reloadable ModelVolumes std::vector> selected_volumes = reloadable_volumes(model, get_selection()); @@ -7049,7 +7076,8 @@ bool Plater::priv::can_increase_instances() const return false; int obj_idx = get_selected_object_idx(); - return (0 <= obj_idx) && (obj_idx < (int)model.objects.size()); + return (0 <= obj_idx) && (obj_idx < (int)model.objects.size()) + && !sidebar->obj_list()->has_selected_cut_object(); } bool Plater::priv::can_decrease_instances() const @@ -7059,7 +7087,8 @@ bool Plater::priv::can_decrease_instances() const return false; int obj_idx = get_selected_object_idx(); - return (0 <= obj_idx) && (obj_idx < (int)model.objects.size()) && (model.objects[obj_idx]->instances.size() > 1); + return (0 <= obj_idx) && (obj_idx < (int)model.objects.size()) && (model.objects[obj_idx]->instances.size() > 1) + && !sidebar->obj_list()->has_selected_cut_object(); } bool Plater::priv::can_split_to_objects() const @@ -8871,7 +8900,7 @@ void Plater::trigger_restore_project(int skip_confirm) } //BBS -void Plater::delete_object_from_model(size_t obj_idx, bool refresh_immediately) { p->delete_object_from_model(obj_idx, refresh_immediately); } +bool Plater::delete_object_from_model(size_t obj_idx, bool refresh_immediately) { return p->delete_object_from_model(obj_idx, refresh_immediately); } //BBS: delete all from model void Plater::delete_all_objects_from_model() @@ -9083,8 +9112,6 @@ void Plater::cut(size_t obj_idx, size_t instance_idx, std::array plane if (! attributes.has(ModelObjectCutAttribute::KeepUpper) && ! attributes.has(ModelObjectCutAttribute::KeepLower)) return; - Plater::TakeSnapshot snapshot(this, "Cut by Plane"); - wxBusyCursor wait; // BBS: replace z with plane_points const auto new_objects = object->cut(instance_idx, plane_points, attributes); @@ -9092,6 +9119,14 @@ void Plater::cut(size_t obj_idx, size_t instance_idx, std::array plane remove(obj_idx); p->load_model_objects(new_objects); + // now process all updates of the 3d scene + update(); + + // Update InfoItems in ObjectList after update() to use of a correct value of the GLCanvas3D::is_sinking(), + // which is updated after a view3D->reload_scene(false, flags & (unsigned int)UpdateParams::FORCE_FULL_SCREEN_REFRESH) call + for (size_t idx = 0; idx < p->model.objects.size(); idx++) + wxGetApp().obj_list()->update_info_items(idx); + Selection& selection = p->get_selection(); size_t last_id = p->model.objects.size() - 1; for (size_t i = 0; i < new_objects.size(); ++i) diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index f6c7420d28..a132f3d38c 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -293,7 +293,7 @@ public: int close_with_confirm(std::function second_check = nullptr); // BBS close project //BBS: trigger a restore project event void trigger_restore_project(int skip_confirm = 0); - void delete_object_from_model(size_t obj_idx, bool refresh_immediately = true); // BBS support refresh immediately + bool delete_object_from_model(size_t obj_idx, bool refresh_immediately = true); // BBS support refresh immediately void delete_all_objects_from_model(); //BBS delete all objects from model void set_selected_visible(bool visible); void remove_selected(); diff --git a/src/slic3r/GUI/Widgets/Button.cpp b/src/slic3r/GUI/Widgets/Button.cpp index 37709e9772..9bd9fbb16b 100644 --- a/src/slic3r/GUI/Widgets/Button.cpp +++ b/src/slic3r/GUI/Widgets/Button.cpp @@ -36,15 +36,15 @@ Button::Button() std::make_pair(*wxBLACK, (int) StateColor::Normal)); } -Button::Button(wxWindow* parent, wxString text, wxString icon, long style, int iconSize) +Button::Button(wxWindow* parent, wxString text, wxString icon, long style, int iconSize, wxWindowID btn_id) : Button() { - Create(parent, text, icon, style, iconSize); + Create(parent, text, icon, style, iconSize, btn_id); } -bool Button::Create(wxWindow* parent, wxString text, wxString icon, long style, int iconSize) +bool Button::Create(wxWindow* parent, wxString text, wxString icon, long style, int iconSize, wxWindowID btn_id) { - StaticBox::Create(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, style); + StaticBox::Create(parent, btn_id, wxDefaultPosition, wxDefaultSize, style); state_handler.attach({&text_color}); state_handler.update_binds(); //BBS set default font diff --git a/src/slic3r/GUI/Widgets/Button.hpp b/src/slic3r/GUI/Widgets/Button.hpp index 100b430e6d..2f5c8eaea0 100644 --- a/src/slic3r/GUI/Widgets/Button.hpp +++ b/src/slic3r/GUI/Widgets/Button.hpp @@ -24,9 +24,9 @@ class Button : public StaticBox public: Button(); - Button(wxWindow* parent, wxString text, wxString icon = "", long style = 0, int iconSize = 0); + Button(wxWindow* parent, wxString text, wxString icon = "", long style = 0, int iconSize = 0, wxWindowID btn_id = wxID_ANY); - bool Create(wxWindow* parent, wxString text, wxString icon = "", long style = 0, int iconSize = 0); + bool Create(wxWindow* parent, wxString text, wxString icon = "", long style = 0, int iconSize = 0, wxWindowID btn_id = wxID_ANY); void SetLabel(const wxString& label) override; From 60f524167d9ba65443dccb156271ce99a05b902c Mon Sep 17 00:00:00 2001 From: tao wang Date: Tue, 14 Mar 2023 14:59:45 +0800 Subject: [PATCH 078/339] ENH:optimize ams material settings Change-Id: I1c6c57570fc7ba37d45854297e30182a0ffcaad4 --- src/slic3r/GUI/AMSMaterialsSetting.cpp | 299 +++++++++++++++++++++++-- src/slic3r/GUI/AMSMaterialsSetting.hpp | 52 ++++- src/slic3r/GUI/SelectMachine.cpp | 24 +- 3 files changed, 348 insertions(+), 27 deletions(-) diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index a4cbd1ee41..42e9de8209 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -4,12 +4,15 @@ #include "GUI_App.hpp" #include "libslic3r/Preset.hpp" #include "I18N.hpp" +#include namespace Slic3r { namespace GUI { -static bool show_flag; + +wxDEFINE_EVENT(EVT_SELECTED_COLOR, wxCommandEvent); AMSMaterialsSetting::AMSMaterialsSetting(wxWindow *parent, wxWindowID id) : DPIDialog(parent, id, _L("AMS Materials Setting"), wxDefaultPosition, wxDefaultSize, wxBORDER_NONE) + , m_color_picker_popup(ColorPickerPopup(this)) { create(); wxGetApp().UpdateDlgDarkUI(this); @@ -96,6 +99,7 @@ void AMSMaterialsSetting::create() }); Bind(wxEVT_PAINT, &AMSMaterialsSetting::paintEvent, this); + Bind(EVT_SELECTED_COLOR, &AMSMaterialsSetting::on_picker_color, this); m_comboBox_filament->Connect(wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler(AMSMaterialsSetting::on_select_filament), NULL, this); } @@ -141,17 +145,12 @@ void AMSMaterialsSetting::create_panel_normal(wxWindow* parent) m_sizer_colour->Add(0, 0, 0, wxEXPAND, 0); - m_clrData = new wxColourData(); - m_clrData->SetChooseFull(true); - m_clrData->SetChooseAlpha(false); + m_clr_picker = new ColorPicker(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_clr_picker->set_show_full(true); + m_clr_picker->SetBackgroundColour(*wxWHITE); - m_clr_picker = new Button(parent, wxEmptyString, wxEmptyString, wxBU_AUTODRAW); - m_clr_picker->SetCanFocus(false); - m_clr_picker->SetSize(FromDIP(50), FromDIP(25)); - m_clr_picker->SetMinSize(wxSize(FromDIP(50), FromDIP(25))); - m_clr_picker->SetCornerRadius(FromDIP(6)); - m_clr_picker->SetBorderColor(wxColour(172, 172, 172)); - m_clr_picker->Bind(wxEVT_BUTTON, &AMSMaterialsSetting::on_clr_picker, this); + + m_clr_picker->Bind(wxEVT_LEFT_DOWN, &AMSMaterialsSetting::on_clr_picker, this); m_sizer_colour->Add(m_clr_picker, 0, 0, 0); wxBoxSizer* m_sizer_temperature = new wxBoxSizer(wxHORIZONTAL); @@ -261,6 +260,7 @@ void AMSMaterialsSetting::create_panel_kn(wxWindow* parent) auto sizer = new wxBoxSizer(wxVERTICAL); // title auto ratio_text = new wxStaticText(parent, wxID_ANY, _L("Factors of dynamic flow cali")); + ratio_text->SetForegroundColour(wxColour(50, 58, 61)); ratio_text->SetFont(Label::Head_14); auto kn_val_sizer = new wxFlexGridSizer(0, 2, 0, 0); @@ -455,7 +455,7 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) long nozzle_temp_min_int, nozzle_temp_max_int; nozzle_temp_min.ToLong(&nozzle_temp_min_int); nozzle_temp_max.ToLong(&nozzle_temp_max_int); - wxColour color = m_clrData->GetColour(); + wxColour color = m_clr_picker->m_colour; char col_buf[10]; sprintf(col_buf, "%02X%02X%02XFF", (int) color.Red(), (int) color.Green(), (int) color.Blue()); ams_filament_id = ""; @@ -529,15 +529,40 @@ void AMSMaterialsSetting::on_select_close(wxCommandEvent &event) void AMSMaterialsSetting::set_color(wxColour color) { - m_clrData->SetColour(color); + //m_clrData->SetColour(color); + m_clr_picker->set_color(color); } -void AMSMaterialsSetting::on_clr_picker(wxCommandEvent & event) +void AMSMaterialsSetting::on_picker_color(wxCommandEvent& event) +{ + unsigned int color_num = event.GetInt(); + set_color(wxColour(color_num>>16&0xFF, color_num>>8&0xFF, color_num&0xFF)); +} + +void AMSMaterialsSetting::on_clr_picker(wxMouseEvent &event) { if(!m_is_third || obj->is_in_printing() || obj->can_resume()) return; - auto clr_dialog = new wxColourDialog(this, m_clrData); - show_flag = true; + + + std::vector ams_colors; + for (auto ams_it = obj->amsList.begin(); ams_it != obj->amsList.end(); ++ams_it) { + for (auto tray_id = ams_it->second->trayList.begin(); tray_id != ams_it->second->trayList.end(); ++tray_id) { + std::vector::iterator iter = find(ams_colors.begin(), ams_colors.end(), AmsTray::decode_color(tray_id->second->color)); + if (iter == ams_colors.end()) { + ams_colors.push_back(AmsTray::decode_color(tray_id->second->color)); + } + } + } + + wxPoint img_pos = m_clr_picker->ClientToScreen(wxPoint(0, 0)); + wxPoint popup_pos(img_pos.x + FromDIP(50), img_pos.y); + m_color_picker_popup.Position(popup_pos, wxSize(0, 0)); + m_color_picker_popup.set_ams_colours(ams_colors); + m_color_picker_popup.set_def_colour(m_clr_picker->m_colour); + m_color_picker_popup.Popup(); + + /*auto clr_dialog = new wxColourDialog(this, m_clrData); if (clr_dialog->ShowModal() == wxID_OK) { m_clrData = &(clr_dialog->GetColourData()); m_clr_picker->SetBackgroundColor(wxColour( @@ -546,7 +571,7 @@ void AMSMaterialsSetting::on_clr_picker(wxCommandEvent & event) m_clrData->GetColour().Blue(), 254 )); - } + }*/ } bool AMSMaterialsSetting::is_virtual_tray() @@ -581,7 +606,7 @@ bool AMSMaterialsSetting::Show(bool show) m_button_confirm->SetMinSize(AMS_MATERIALS_SETTING_BUTTON_SIZE); m_input_nozzle_max->GetTextCtrl()->SetSize(wxSize(-1, FromDIP(20))); m_input_nozzle_min->GetTextCtrl()->SetSize(wxSize(-1, FromDIP(20))); - m_clr_picker->SetBackgroundColour(m_clr_picker->GetParent()->GetBackgroundColour()); + //m_clr_picker->set_color(m_clr_picker->GetParent()->GetBackgroundColour()); } return DPIDialog::Show(show); } @@ -606,12 +631,12 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi ShowModal(); return; } else { - m_clr_picker->SetBackgroundColor(wxColour( + /* m_clr_picker->set_color(wxColour( m_clrData->GetColour().Red(), m_clrData->GetColour().Green(), m_clrData->GetColour().Blue(), 254 - )); + ));*/ if (!m_is_third) { if (obj && obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)) { @@ -800,4 +825,238 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt) void AMSMaterialsSetting::on_dpi_changed(const wxRect &suggested_rect) { this->Refresh(); } +ColorPicker::ColorPicker(wxWindow* parent, wxWindowID id, const wxPoint& pos /*= wxDefaultPosition*/, const wxSize& size /*= wxDefaultSize*/) +{ + SetSize(wxSize(FromDIP(25), FromDIP(25))); + SetMinSize(wxSize(FromDIP(25), FromDIP(25))); + SetMaxSize(wxSize(FromDIP(25), FromDIP(25))); + + wxWindow::Create(parent, id, pos, size); + Bind(wxEVT_PAINT, &ColorPicker::paintEvent, this); +} + +ColorPicker::~ColorPicker(){} + +void ColorPicker::set_color(wxColour col) +{ + m_colour = col; + Refresh(); +} + +void ColorPicker::paintEvent(wxPaintEvent& evt) +{ + wxPaintDC dc(this); + render(dc); +} + +void ColorPicker::render(wxDC& dc) +{ +#ifdef __WXMSW__ + wxSize size = GetSize(); + wxMemoryDC memdc; + wxBitmap bmp(size.x, size.y); + memdc.SelectObject(bmp); + memdc.Blit({ 0, 0 }, size, &dc, { 0, 0 }); + + { + wxGCDC dc2(memdc); + doRender(dc2); + } + + memdc.SelectObject(wxNullBitmap); + dc.DrawBitmap(bmp, 0, 0); +#else + doRender(dc); +#endif +} + +void ColorPicker::doRender(wxDC& dc) +{ + wxSize size = GetSize(); + + auto radius = m_show_full?size.x / 2:size.x / 2 - FromDIP(1); + if (m_selected) radius -= FromDIP(1); + + dc.SetPen(wxPen(m_colour)); + dc.SetBrush(wxBrush(m_colour)); + dc.DrawCircle(size.x / 2, size.x / 2, radius); + + if (m_selected) { + dc.SetPen(wxPen(m_colour)); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.DrawCircle(size.x / 2, size.x / 2, size.x / 2); + } + + if (m_show_full) { + dc.SetPen(wxPen(wxColour(0x6B6B6B))); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.DrawCircle(size.x / 2, size.x / 2, radius); + } +} + +ColorPickerPopup::ColorPickerPopup(wxWindow* parent) + :PopupWindow(parent, wxBORDER_NONE) +{ + m_def_colors.clear(); + m_def_colors.push_back(wxColour(0xFFFFFF)); + m_def_colors.push_back(wxColour(0xfff144)); + m_def_colors.push_back(wxColour(0xDCF478)); + m_def_colors.push_back(wxColour(0x0ACC38)); + m_def_colors.push_back(wxColour(0x057748)); + m_def_colors.push_back(wxColour(0x0d6284)); + m_def_colors.push_back(wxColour(0x0EE2A0)); + m_def_colors.push_back(wxColour(0x76D9F4)); + m_def_colors.push_back(wxColour(0x46a8f9)); + m_def_colors.push_back(wxColour(0x2850E0)); + m_def_colors.push_back(wxColour(0x443089)); + m_def_colors.push_back(wxColour(0xA03CF7)); + m_def_colors.push_back(wxColour(0xF330F9)); + m_def_colors.push_back(wxColour(0xD4B1DD)); + m_def_colors.push_back(wxColour(0xf95d73)); + m_def_colors.push_back(wxColour(0xf72323)); + m_def_colors.push_back(wxColour(0x7c4b00)); + m_def_colors.push_back(wxColour(0xf98c36)); + m_def_colors.push_back(wxColour(0xfcecd6)); + m_def_colors.push_back(wxColour(0xD3C5A3)); + m_def_colors.push_back(wxColour(0xAF7933)); + m_def_colors.push_back(wxColour(0x898989)); + m_def_colors.push_back(wxColour(0xBCBCBC)); + m_def_colors.push_back(wxColour(0x161616)); + + + SetBackgroundColour(wxColour(*wxWHITE)); + + wxBoxSizer* m_sizer_main = new wxBoxSizer(wxVERTICAL); + wxBoxSizer* m_sizer_box = new wxBoxSizer(wxVERTICAL); + + m_def_color_box = new StaticBox(this); + wxBoxSizer* m_sizer_ams = new wxBoxSizer(wxHORIZONTAL); + auto m_title_ams = new wxStaticText(m_def_color_box, wxID_ANY, _L("AMS"), wxDefaultPosition, wxDefaultSize, 0); + m_title_ams->SetFont(::Label::Body_14); + m_title_ams->SetBackgroundColour(GetParent()->GetBackgroundColour()); + m_sizer_ams->Add(m_title_ams, 0, wxALL, 5); + auto ams_line = new wxPanel(m_def_color_box, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); + ams_line->SetBackgroundColour(wxColour(0xCECECE)); + ams_line->SetMinSize(wxSize(-1, 1)); + ams_line->SetMaxSize(wxSize(-1, 1)); + m_sizer_ams->Add(ams_line, 1, wxALIGN_CENTER, 0); + + + m_def_color_box->SetCornerRadius(FromDIP(10)); + m_def_color_box->SetBackgroundColor(StateColor(std::pair(wxColour(238, 238, 238), StateColor::Normal))); + m_def_color_box->SetBorderColor(StateColor(std::pair(wxColour(238, 238, 238), StateColor::Normal))); + + //ams + m_ams_fg_sizer = new wxFlexGridSizer(0, 8, 0, 0); + m_ams_fg_sizer->SetFlexibleDirection(wxBOTH); + m_ams_fg_sizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED); + + //other + wxFlexGridSizer* fg_sizer; + fg_sizer = new wxFlexGridSizer(0, 8, 0, 0); + fg_sizer->SetFlexibleDirection(wxBOTH); + fg_sizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED); + + + for (wxColour col : m_def_colors) { + auto cp = new ColorPicker(m_def_color_box, wxID_ANY, wxDefaultPosition, wxDefaultSize); + cp->set_color(col); + cp->set_selected(false); + m_color_pickers.push_back(cp); + fg_sizer->Add(cp, 0, wxALL, FromDIP(3)); + cp->Bind(wxEVT_LEFT_DOWN, [this, cp](auto& e) { + set_def_colour(cp->m_colour); + }); + } + + wxBoxSizer* m_sizer_other = new wxBoxSizer(wxHORIZONTAL); + auto m_title_other = new wxStaticText(m_def_color_box, wxID_ANY, _L("Other color"), wxDefaultPosition, wxDefaultSize, 0); + m_title_other->SetFont(::Label::Body_14); + m_title_other->SetBackgroundColour(GetParent()->GetBackgroundColour()); + m_sizer_other->Add(m_title_other, 0, wxALL, 5); + auto other_line = new wxPanel(m_def_color_box, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); + other_line->SetMinSize(wxSize(-1, 1)); + other_line->SetMaxSize(wxSize(-1, 1)); + other_line->SetBackgroundColour(wxColour(0xCECECE)); + m_sizer_other->Add(other_line, 1, wxALIGN_CENTER, 0); + + m_sizer_box->Add(0, 0, 0, wxTOP, FromDIP(10)); + m_sizer_box->Add(m_sizer_ams, 1, wxEXPAND|wxLEFT|wxRIGHT, FromDIP(10)); + m_sizer_box->Add(m_ams_fg_sizer, 0, wxEXPAND|wxLEFT|wxRIGHT, FromDIP(10)); + m_sizer_box->Add(m_sizer_other, 1, wxEXPAND|wxLEFT|wxRIGHT, FromDIP(10)); + m_sizer_box->Add(fg_sizer, 0, wxEXPAND|wxLEFT|wxRIGHT, FromDIP(10)); + m_sizer_box->Add(0, 0, 0, wxTOP, FromDIP(10)); + + + m_def_color_box->SetSizer(m_sizer_box); + m_def_color_box->Layout(); + m_def_color_box->Fit(); + + m_sizer_main->Add(m_def_color_box, 0, wxALL | wxEXPAND, 10); + SetSizer(m_sizer_main); + Layout(); + Fit(); + + Bind(wxEVT_PAINT, &ColorPickerPopup::paintEvent, this); + wxGetApp().UpdateDarkUIWin(this); +} + + +void ColorPickerPopup::set_ams_colours(std::vector ams) +{ + m_ams_colors = ams; + + for (wxColour col : m_ams_colors) { + auto cp = new ColorPicker(m_def_color_box, wxID_ANY, wxDefaultPosition, wxDefaultSize); + cp->set_color(col); + cp->set_selected(false); + m_color_pickers.push_back(cp); + m_ams_fg_sizer->Add(cp, 0, wxALL, FromDIP(3)); + cp->Bind(wxEVT_LEFT_DOWN, [this, cp](auto& e) { + set_def_colour(cp->m_colour); + + wxCommandEvent evt(EVT_SELECTED_COLOR); + unsigned long g_col = ((cp->m_colour.Red() & 0xff) << 16) + ((cp->m_colour.Green() & 0xff) << 8) + (cp->m_colour.Blue() & 0xff); + evt.SetInt(g_col); + wxPostEvent(GetParent(), evt); + }); + } + m_ams_fg_sizer->Layout(); + Layout(); + Fit(); +} + +void ColorPickerPopup::set_def_colour(wxColour col) +{ + m_def_col = col; + bool set_already = false; + + for (ColorPicker* cp : m_color_pickers) { + + if (cp->m_selected) { + cp->set_selected(false); + } + + if (cp->m_colour == m_def_col && !set_already) { + cp->set_selected(true); + set_already = true; + } + } + Dismiss(); +} + +void ColorPickerPopup::paintEvent(wxPaintEvent& evt) +{ + wxPaintDC dc(this); + dc.SetPen(wxColour(0xAC, 0xAC, 0xAC)); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y, 0); +} + +void ColorPickerPopup::OnDismiss() {} + +bool ColorPickerPopup::ProcessLeftDown(wxMouseEvent& event) { + return PopupWindow::ProcessLeftDown(event); +} + }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/AMSMaterialsSetting.hpp b/src/slic3r/GUI/AMSMaterialsSetting.hpp index a98140ae40..6080db6801 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.hpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.hpp @@ -28,6 +28,48 @@ namespace Slic3r { namespace GUI { +class ColorPicker : public wxWindow +{ +public: + wxColour m_colour; + bool m_selected{false}; + bool m_show_full{false}; + + ColorPicker(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); + ~ColorPicker(); + + void set_color(wxColour col); + void set_selected(bool sel) {m_selected = sel;Refresh();}; + void set_show_full(bool full) {m_show_full = full;Refresh();}; + + void paintEvent(wxPaintEvent& evt); + void render(wxDC& dc); + void doRender(wxDC& dc); +}; + +class ColorPickerPopup : public PopupWindow +{ +public: + StaticBox* m_def_color_box; + wxFlexGridSizer* m_ams_fg_sizer; + wxColour m_def_col; + std::vector m_def_colors; + std::vector m_ams_colors; + std::vector m_color_pickers; + +public: + ColorPickerPopup(wxWindow* parent); + ~ColorPickerPopup() {}; + void set_ams_colours(std::vector ams); + void set_def_colour(wxColour col); + void paintEvent(wxPaintEvent& evt); + virtual void OnDismiss() wxOVERRIDE; + virtual bool ProcessLeftDown(wxMouseEvent& event) wxOVERRIDE; + +public: +}; + + class AMSMaterialsSetting : public DPIDialog { public: @@ -49,7 +91,8 @@ public: void set_color(wxColour color); - MachineObject *obj{nullptr}; + void on_picker_color(wxCommandEvent& color); + MachineObject* obj{ nullptr }; int ams_id { 0 }; /* 0 ~ 3 */ int tray_id { 0 }; /* 0 ~ 3 */ @@ -62,6 +105,7 @@ public: wxString m_brand_tmp; wxColour m_brand_colour; std::string m_filament_type; + ColorPickerPopup m_color_picker_popup; protected: void create_panel_normal(wxWindow* parent); @@ -70,7 +114,7 @@ protected: void on_select_filament(wxCommandEvent& evt); void on_select_ok(wxCommandEvent &event); void on_select_close(wxCommandEvent &event); - void on_clr_picker(wxCommandEvent &event); + void on_clr_picker(wxMouseEvent &event); bool is_virtual_tray(); void update_widgets(); @@ -90,7 +134,7 @@ protected: Button * m_button_confirm; wxStaticText* m_tip_readonly; Button * m_button_close; - Button * m_clr_picker; + ColorPicker * m_clr_picker; wxColourData * m_clrData; wxPanel * m_panel_kn; @@ -108,6 +152,8 @@ protected: TextInput* m_readonly_filament; }; +wxDECLARE_EVENT(EVT_SELECTED_COLOR, wxCommandEvent); + }} // namespace Slic3r::GUI #endif diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 28999057b3..c8a37be44d 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -1354,7 +1354,7 @@ wxWindow *SelectMachineDialog::create_ams_checkbox(wxString title, wxWindow *par text->SetFont(::Label::Body_13); text->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#323A3C"))); text->Wrap(-1); - sizer_checkbox->Add(text, 0, wxALIGN_CENTER, FromDIP(5)); + sizer_checkbox->Add(text, 0, wxALIGN_CENTER, 0); auto img_ams_tip = new wxStaticBitmap(checkbox, wxID_ANY, create_scaled_bitmap("enable_ams", this, 16), wxDefaultPosition, wxSize(FromDIP(16), FromDIP(16)), 0); sizer_checkbox->Add(img_ams_tip, 0, wxALIGN_CENTER | wxLEFT, FromDIP(5)); @@ -1384,8 +1384,12 @@ wxWindow *SelectMachineDialog::create_ams_checkbox(wxString title, wxWindow *par checkbox->SetToolTip(tooltip); text->SetToolTip(tooltip); - text->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent & event) { - ams_check->SetValue(ams_check->GetValue() ? false : true); + text->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& event) { + ams_check->SetValue(ams_check->GetValue() ? false : true); + }); + + checkbox->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& event) { + ams_check->SetValue(ams_check->GetValue() ? false : true); }); return checkbox; } @@ -1411,7 +1415,7 @@ wxWindow *SelectMachineDialog::create_item_checkbox(wxString title, wxWindow *pa text->Wrap(-1); text->SetMinSize(wxSize(FromDIP(120), -1)); text->SetMaxSize(wxSize(FromDIP(120), -1)); - sizer_checkbox->Add(text, 0, wxBOTTOM | wxEXPAND | wxTOP, FromDIP(5)); + sizer_checkbox->Add(text, 0, wxALIGN_CENTER, 0); checkbox->SetSizer(sizer_checkbox); checkbox->Layout(); @@ -1432,6 +1436,18 @@ wxWindow *SelectMachineDialog::create_item_checkbox(wxString title, wxWindow *pa } e.Skip(); }); + + checkbox->Bind(wxEVT_LEFT_DOWN, [this, check, param](wxMouseEvent&) { + check->SetValue(check->GetValue() ? false : true); + AppConfig* config = wxGetApp().app_config; + if (config) { + if (check->GetValue()) + config->set_str("print", param, "1"); + else + config->set_str("print", param, "0"); + } + }); + text->Bind(wxEVT_LEFT_DOWN, [this, check, param](wxMouseEvent &) { check->SetValue(check->GetValue() ? false : true); AppConfig* config = wxGetApp().app_config; From 6f141ea7405c85ad59e784924bdf0f42dd8d82b0 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Thu, 16 Mar 2023 10:59:10 +0800 Subject: [PATCH 079/339] FIX: crash when open 3mf file the volume type is unreasonable, causing the array to go out of bounds Change-Id: I316b05f277f894b1fd32cda3eca29340d988e01e --- src/slic3r/GUI/ObjectDataViewModel.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/ObjectDataViewModel.cpp b/src/slic3r/GUI/ObjectDataViewModel.cpp index 76d9c616bd..936de904c3 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.cpp +++ b/src/slic3r/GUI/ObjectDataViewModel.cpp @@ -495,8 +495,9 @@ wxDataViewItem ObjectDataViewModel::AddOutsidePlate(bool refresh) void ObjectDataViewModel::UpdateBitmapForNode(ObjectDataViewModelNode *node) { + bool is_volume_node = node->GetType() & itVolume; int vol_type = static_cast(node->GetVolumeType()); - bool is_volume_node = vol_type >= 0; + is_volume_node &= (vol_type >= int(ModelVolumeType::MODEL_PART) && vol_type <= int(ModelVolumeType::SUPPORT_ENFORCER)); if (!node->has_warning_icon() && !node->has_lock()) { node->SetBitmap(is_volume_node ? m_volume_bmps.at(vol_type) : m_empty_bmp); From 7481da52d6ddbd65965047396fbcbf33d9a88b08 Mon Sep 17 00:00:00 2001 From: tao wang Date: Mon, 13 Mar 2023 16:41:17 +0800 Subject: [PATCH 080/339] NEW:support for launching studio from the model web Change-Id: I931fc8633c057228441daf2ab4c9c37f97e898ab --- src/slic3r/GUI/GUI_App.cpp | 113 +++++++++++++++++++---------------- src/slic3r/GUI/GUI_App.hpp | 7 ++- src/slic3r/GUI/ModelMall.cpp | 28 +-------- src/slic3r/GUI/Plater.cpp | 17 +++--- src/slic3r/GUI/Plater.hpp | 2 +- src/slic3r/GUI/Project.cpp | 32 +--------- src/slic3r/GUI/Project.hpp | 3 - 7 files changed, 78 insertions(+), 124 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 373ee1f91c..11713efbfb 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -973,6 +973,20 @@ static void generic_exception_handle() //#endif } +static vector split_str(const string& src, const string& separator) +{ + size_t pos; + size_t start_pos = 0; + vector result_str; + while ((pos = src.find(separator, start_pos)) != string::npos) + { + result_str.emplace_back(src.substr(start_pos, pos - start_pos)); + start_pos = pos + separator.size(); + } + result_str.emplace_back(src.substr(start_pos, src.size() - pos - separator.size())); + return result_str; +} + void GUI_App::post_init() { assert(initialized()); @@ -981,25 +995,47 @@ void GUI_App::post_init() bool switch_to_3d = false; if (!this->init_params->input_files.empty()) { + + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", init with input files, size %1%, input_gcode %2%") %this->init_params->input_files.size() %this->init_params->input_gcode; - switch_to_3d = true; - if (this->init_params->input_gcode) { - mainframe->select_tab(size_t(MainFrame::tp3DEditor)); - plater_->select_view_3D("3D"); - this->plater()->load_gcode(from_u8(this->init_params->input_files.front())); + + + + if (this->init_params->input_files.size() == 1 && + boost::starts_with(this->init_params->input_files.front(), "bambustudio://open")) { + auto input_str_arr = split_str(this->init_params->input_files.front(), "bambustudio://open/?file="); + + std::string download_origin_url; + for (auto input_str:input_str_arr) { + if (!input_str.empty()) download_origin_url = input_str; + } + + std::string download_file_url = url_decode(download_origin_url); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << download_file_url; + if (!download_file_url.empty() && ( boost::starts_with(download_file_url, "http://") || boost::starts_with(download_file_url, "https://")) ) { + request_model_download(download_origin_url); + } } else { - mainframe->select_tab(size_t(MainFrame::tp3DEditor)); - plater_->select_view_3D("3D"); - const std::vector res = this->plater()->load_files(this->init_params->input_files); - if (!res.empty()) { - if (this->init_params->input_files.size() == 1) { - // Update application titlebar when opening a project file - const std::string& filename = this->init_params->input_files.front(); - //BBS: remove amf logic as project - if (boost::algorithm::iends_with(filename, ".3mf")) - this->plater()->set_project_filename(from_u8(filename)); + switch_to_3d = true; + if (this->init_params->input_gcode) { + mainframe->select_tab(size_t(MainFrame::tp3DEditor)); + plater_->select_view_3D("3D"); + this->plater()->load_gcode(from_u8(this->init_params->input_files.front())); + } + else { + mainframe->select_tab(size_t(MainFrame::tp3DEditor)); + plater_->select_view_3D("3D"); + const std::vector res = this->plater()->load_files(this->init_params->input_files); + if (!res.empty()) { + if (this->init_params->input_files.size() == 1) { + // Update application titlebar when opening a project file + const std::string& filename = this->init_params->input_files.front(); + //BBS: remove amf logic as project + if (boost::algorithm::iends_with(filename, ".3mf")) + this->plater()->set_project_filename(from_u8(filename)); + } } } } @@ -3451,22 +3487,6 @@ std::string GUI_App::handle_web_request(std::string cmd) { try { //BBS use nlohmann json format - json j = json::parse(cmd); - - std::string web_cmd = j["command"].get(); - - if (web_cmd == "request_model_download") { - std::string download_url = ""; - if (j["data"].contains("download_url")) - download_url = j["data"]["download_url"].get(); - - std::string filename = ""; - if (j["data"].contains("filename")) - download_url = j["data"]["filename"].get(); - - this->request_model_download(download_url, filename); - } - std::stringstream ss(cmd), oss; pt::ptree root, response; pt::read_json(ss, root); @@ -3646,12 +3666,10 @@ void GUI_App::handle_script_message(std::string msg) } } -void GUI_App::request_model_download(std::string url, std::string filename) +void GUI_App::request_model_download(std::string url) { - if (!check_login()) return; - if (plater_) { - plater_->request_model_download(); + plater_->request_model_download(url); } } @@ -5523,25 +5541,16 @@ void GUI_App::open_publish_page_dialog() wxLaunchDefaultBrowser(link_url); } -std::string GUI_App::url_encode(const std::string& value) { - std::ostringstream escaped; - escaped.fill('0'); - escaped << std::hex; - for (std::string::const_iterator i = value.begin(), n = value.end(); i != n; ++i) { - std::string::value_type c = (*i); +char GUI_App::from_hex(char ch) { + return isdigit(ch) ? ch - '0' : tolower(ch) - 'a' + 10; +} - // Keep alphanumeric and other accepted characters intact - if (isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') { - escaped << c; - continue; - } +std::string GUI_App::url_decode(std::string value) { + return Http::url_decode(value); +} - // Any other characters are percent-encoded - escaped << std::uppercase; - escaped << '%' << std::setw(2) << int((unsigned char)c); - escaped << std::nouppercase; - } - return escaped.str(); +std::string GUI_App::url_encode(std::string value) { + return Http::url_encode(value); } void GUI_App::remove_mall_system_dialog() diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 45465aac9c..41c691a1a0 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -402,7 +402,7 @@ public: int request_user_unbind(std::string dev_id); std::string handle_web_request(std::string cmd); void handle_script_message(std::string msg); - void request_model_download(std::string url, std::string filename); + void request_model_download(std::string url); void download_project(std::string project_id); void request_project_download(std::string project_id); void request_open_project(std::string project_id); @@ -519,13 +519,16 @@ public: void load_url(wxString url); void open_mall_page_dialog(); - std::string url_encode(const std::string& value); void open_publish_page_dialog(); void remove_mall_system_dialog(); void run_script(wxString js); bool is_adding_script_handler() { return m_adding_script_handler; } void set_adding_script_handler(bool status) { m_adding_script_handler = status; } + char from_hex(char ch); + std::string url_encode(std::string value); + std::string url_decode(std::string value); + // Parameters extracted from the command line to be passed to GUI after initialization. GUI_InitParams* init_params { nullptr }; diff --git a/src/slic3r/GUI/ModelMall.cpp b/src/slic3r/GUI/ModelMall.cpp index bcc0a7e554..8fabd073e4 100644 --- a/src/slic3r/GUI/ModelMall.cpp +++ b/src/slic3r/GUI/ModelMall.cpp @@ -127,32 +127,8 @@ namespace GUI { json j = json::parse(strInput); wxString strCmd = j["command"]; - - if (strCmd == "request_model_download") { - - std::string model_id = ""; - if (j["data"].contains("download_url")) - model_id = j["data"]["model_id"].get(); - - std::string profile_id = ""; - if (j["data"].contains("profile_id")) - profile_id = j["data"]["profile_id"].get(); - - std::string download_url = ""; - if (j["data"].contains("download_url")) - download_url = j["data"]["download_url"].get(); - - std::string filename = ""; - if (j["data"].contains("filename")) - filename = j["data"]["filename"].get(); - - if (download_url.empty()) return; - - wxGetApp().set_download_model_url(download_url); - wxGetApp().set_download_model_name(filename); - wxGetApp().plater()->request_model_download(); - } - else if(strCmd == "request_close_publish_window") { + + if(strCmd == "request_close_publish_window") { this->Hide(); } diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index d42e3d8d25..751a233b43 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -7760,15 +7760,13 @@ int Plater::save_project(bool saveAs) //BBS import model by model id void Plater::import_model_id(const std::string& download_info) { - std::string download_url = wxGetApp().get_download_model_url(); - std::string filename = wxGetApp().get_download_model_name(); + std::string download_url; + std::string filename; - /* auto selection_data_arr = wxSplit(download_info, '|'); - - if (selection_data_arr.size() == 2) { - download_url = selection_data_arr[0].ToStdString(); - filename = selection_data_arr[1].ToStdString(); - }*/ + std::string download_origin_url = wxGetApp().url_decode(download_info); + fs::path download_path = fs::path(download_origin_url); + download_url = download_origin_url; + filename = download_path.filename().string(); bool download_ok = false; @@ -7945,9 +7943,10 @@ void Plater::download_project(const wxString& project_id) return; } -void Plater::request_model_download() +void Plater::request_model_download(std::string url) { wxCommandEvent* event = new wxCommandEvent(EVT_IMPORT_MODEL_ID); + event->SetString(url); wxQueueEvent(this, event); } diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index a132f3d38c..130b20f174 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -211,7 +211,7 @@ public: //BBS download project by project id void import_model_id(const std::string& download_info); void download_project(const wxString& project_id); - void request_model_download(); + void request_model_download(std::string url); void request_download_project(std::string project_id); // BBS: check snapshot bool up_to_date(bool saved, bool backup); diff --git a/src/slic3r/GUI/Project.cpp b/src/slic3r/GUI/Project.cpp index 18fb956c8b..57f43d13db 100644 --- a/src/slic3r/GUI/Project.cpp +++ b/src/slic3r/GUI/Project.cpp @@ -170,7 +170,7 @@ void ProjectPanel::OnScriptMessage(wxWebViewEvent& evt) wxString accessory_path = j["accessory_path"]; if (!accessory_path.empty()) { - std::string decode_path = url_decode(accessory_path.ToStdString()); + std::string decode_path = wxGetApp().url_decode(accessory_path.ToStdString()); fs::path path(decode_path); if (fs::exists(path)) { @@ -352,36 +352,6 @@ void ProjectPanel::RunScript(std::string content) WebView::RunScript(m_browser, content); } -char ProjectPanel::from_hex(char ch) { - return isdigit(ch) ? ch - '0' : tolower(ch) - 'a' + 10; -} - -std::string ProjectPanel::url_decode(string text) { - char h; - ostringstream escaped; - escaped.fill('0'); - - for (auto i = text.begin(), n = text.end(); i != n; ++i) { - string::value_type c = (*i); - - if (c == '%') { - if (i[1] && i[2]) { - h = from_hex(i[1]) << 4 | from_hex(i[2]); - escaped << h; - i += 2; - } - } - else if (c == '+') { - escaped << ' '; - } - else { - escaped << c; - } - } - - return escaped.str(); -} - bool ProjectPanel::Show(bool show) { if (show) update_model_data(); diff --git a/src/slic3r/GUI/Project.hpp b/src/slic3r/GUI/Project.hpp index d001f013e1..952f05d2c5 100644 --- a/src/slic3r/GUI/Project.hpp +++ b/src/slic3r/GUI/Project.hpp @@ -85,9 +85,6 @@ public: void OnScriptMessage(wxWebViewEvent& evt); void RunScript(std::string content); - char from_hex(char ch); - std::string url_decode(string text); - std::string url_encode(const std::string& value); std::map> Reload(wxString aux_path); std::string formatBytes(unsigned long bytes); wxString to_base64(std::string path); From d9395e6405a1f0aab3ea66563f1f0c197e3e9610 Mon Sep 17 00:00:00 2001 From: tao wang Date: Tue, 14 Mar 2023 11:32:44 +0800 Subject: [PATCH 081/339] ENH:optimize the switching of multiple AMS and vams Change-Id: I031e3248164aa2fc243c6ebf7418c535119e7ffc --- src/slic3r/GUI/DeviceManager.cpp | 16 +++++++-- src/slic3r/GUI/Widgets/AMSControl.cpp | 50 ++++++++++++++++----------- src/slic3r/GUI/Widgets/AMSControl.hpp | 3 ++ 3 files changed, 46 insertions(+), 23 deletions(-) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 24ae96312f..7f0a7b113f 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -556,9 +556,19 @@ AmsTray *MachineObject::get_curr_tray() Ams* curr_ams = get_curr_Ams(); if (!curr_ams) return nullptr; - auto it = curr_ams->trayList.find(m_tray_now); - if (it != curr_ams->trayList.end()) - return it->second; + try { + int tray_index = atoi(m_tray_now.c_str()); + int ams_index = atoi(curr_ams->id.c_str()); + + std::string tray_now_index = std::to_string(tray_index - ams_index * 4); + auto it = curr_ams->trayList.find(tray_now_index); + if (it != curr_ams->trayList.end()) + return it->second; + } + catch (...) { + ; + } + return nullptr; } diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index c640b9bbe7..c727743793 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -628,10 +628,10 @@ void AMSLib::on_left_down(wxMouseEvent &evt) auto pos = evt.GetPosition(); if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_THIRDBRAND || m_info.material_state == AMSCanType::AMS_CAN_TYPE_BRAND || m_info.material_state == AMSCanType::AMS_CAN_TYPE_VIRTUAL) { - auto left = FromDIP(20); - auto top = (size.y - FromDIP(10) - m_bitmap_editable_light.GetBmpSize().y); - auto right = size.x - FromDIP(20); - auto bottom = size.y - FromDIP(10); + auto left = FromDIP(10); + auto top = (size.y - FromDIP(15) - m_bitmap_editable_light.GetBmpSize().y); + auto right = size.x - FromDIP(10);; + auto bottom = size.y - FromDIP(15); if (pos.x >= left && pos.x <= right && pos.y >= top && top <= bottom) { if (m_selected) { @@ -2385,15 +2385,15 @@ void AMSControl::CreateAms() void AMSControl::Reset() { - auto caninfo0_0 = Caninfo{"def_can_0", "", *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE}; - auto caninfo0_1 = Caninfo{"def_can_1", "", *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE}; - auto caninfo0_2 = Caninfo{"def_can_2", "", *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE}; - auto caninfo0_3 = Caninfo{"def_can_3", "", *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE}; + auto caninfo0_0 = Caninfo{"0", "", *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE}; + auto caninfo0_1 = Caninfo{"1", "", *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE}; + auto caninfo0_2 = Caninfo{"2", "", *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE}; + auto caninfo0_3 = Caninfo{"3", "", *wxWHITE, AMSCanType::AMS_CAN_TYPE_NONE}; - AMSinfo ams1 = AMSinfo{"def_ams_0", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}}; - AMSinfo ams2 = AMSinfo{"def_ams_1", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}}; - AMSinfo ams3 = AMSinfo{"def_ams_2", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}}; - AMSinfo ams4 = AMSinfo{"def_ams_3", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}}; + AMSinfo ams1 = AMSinfo{"0", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}}; + AMSinfo ams2 = AMSinfo{"1", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}}; + AMSinfo ams3 = AMSinfo{"2", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}}; + AMSinfo ams4 = AMSinfo{"3", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}}; std::vector ams_info{ams1, ams2, ams3, ams4}; std::vector::iterator it; @@ -2550,8 +2550,10 @@ void AMSControl::AddAms(AMSinfo info, bool refresh) void AMSControl::SwitchAms(std::string ams_id) { if (ams_id != std::to_string(VIRTUAL_TRAY_ID)) { - m_current_show_ams = ams_id; - + if (m_current_show_ams != ams_id) { + m_current_show_ams = ams_id; + m_extruder->OnAmsLoading(false); + } } for (auto i = 0; i < m_ams_item_list.GetCount(); i++) { @@ -2582,14 +2584,11 @@ void AMSControl::SwitchAms(std::string ams_id) if (cans->amsCans->m_info.ams_id == ams_id) { m_simplebook_cans->SetSelection(cans->amsCans->m_selection); } } - m_current_ams = ams_id; - SetAmsStep(m_current_show_ams, "-1", AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - // update extruder - m_extruder->OnAmsLoading(false); + //m_extruder->OnAmsLoading(false); for (auto i = 0; i < m_ams_info.size(); i++) { if (m_ams_info[i].ams_id == m_current_ams) { switch (m_ams_info[i].current_step) { @@ -2736,6 +2735,15 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy if (notfound) return; if (cans == nullptr) return; + if (!ams_id.empty() && !canid.empty() && (ams_id != m_last_ams_id || m_last_tray_id != canid)) { + SetAmsStep(m_last_ams_id, m_last_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + } + + + m_last_ams_id = ams_id; + m_last_tray_id = canid; + + if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) { cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); m_extruder->OnAmsLoading(false); @@ -2749,14 +2757,16 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2) { cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1); cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2); - if (m_current_show_ams == ams_id) {m_extruder->OnAmsLoading(true, cans->amsCans->GetTagColr(canid));} + if (m_current_show_ams == ams_id) { + m_extruder->OnAmsLoading(true, cans->amsCans->GetTagColr(canid)); + } } if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3) { cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1); cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2); cans->amsCans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_3); - if (m_current_show_ams == ams_id) {m_extruder->OnAmsLoading(true, cans->amsCans->GetTagColr(canid));} + m_extruder->OnAmsLoading(true, cans->amsCans->GetTagColr(canid)); } for (auto i = 0; i < m_ams_info.size(); i++) { diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index d0967113cd..8b996002ef 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -565,6 +565,9 @@ protected: wxHyperlinkCtrl *m_hyperlink = {nullptr}; AmsHumidityTipPopup m_Humidity_tip_popup; + + std::string m_last_ams_id; + std::string m_last_tray_id; public: std::string GetCurentAms(); std::string GetCurrentCan(std::string amsid); From c9635174bdaa70251737e21120b26365180837b3 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Thu, 16 Mar 2023 12:19:49 +0800 Subject: [PATCH 082/339] ENH:display info when in slicing queue Change-Id: I0dc2645e5679af310c8c0558c8ae47c9d62958e1 Signed-off-by: Stone Li --- src/slic3r/GUI/DeviceManager.cpp | 5 +++++ src/slic3r/GUI/DeviceManager.hpp | 3 ++- src/slic3r/GUI/StatusPanel.cpp | 10 +++++++--- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 7f0a7b113f..70c9d0cd7a 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -2469,6 +2469,11 @@ int MachineObject::parse_json(std::string payload) if (jj.contains("gcode_state")) { this->set_print_state(jj["gcode_state"].get()); } + if (jj.contains("queue_number")) { + this->queue_number = jj["queue_number"].get(); + } else { + this->queue_number = 0; + } if (jj.contains("task_id")) { this->task_id_ = jj["task_id"].get(); diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 5464309aaf..51d087f21f 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -605,7 +605,8 @@ public: void parse_status(int flag); /* printing status */ - std::string print_status; /* enum string: FINISH, RUNNING, PAUSE, INIT, FAILED */ + std::string print_status; /* enum string: FINISH, SLICING, RUNNING, PAUSE, INIT, FAILED */ + int queue_number = 0; std::string iot_print_status; /* iot */ PrintingSpeedLevel printing_speed_lvl; int printing_speed_mag = 100; diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 109fd1647b..3d85d412c3 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -2256,9 +2256,13 @@ void StatusPanel::update_subtask(MachineObject *obj) wxString prepare_text; if (obj->is_in_prepare()) prepare_text = wxString::Format(_L("Downloading...")); - else if (obj->print_status == "SLICING") - prepare_text = wxString::Format(_L("Cloud Slicing...")); - else + else if (obj->print_status == "SLICING") { + if (obj->queue_number <= 0) { + prepare_text = wxString::Format(_L("Cloud Slicing...")); + } else { + prepare_text = wxString::Format(_L("In Cloud Slicing Queue, there are %s tasks ahead."), std::to_string(obj->queue_number)); + } + } else prepare_text = wxString::Format(_L("Downloading...")); if (obj->gcode_file_prepare_percent >= 0 && obj->gcode_file_prepare_percent <= 100) From 81daebb5a5f9e723f72dc1615d8fd225728cacae Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Wed, 15 Mar 2023 11:35:07 +0800 Subject: [PATCH 083/339] FIX: the first layer is not printed in the correct order Change-Id: Ia8ad49417e6b59fa10b763cb0e207f5f79b9a4d2 --- src/libslic3r/GCode/ToolOrdering.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index 67e7441b25..042d8d7d28 100644 --- a/src/libslic3r/GCode/ToolOrdering.cpp +++ b/src/libslic3r/GCode/ToolOrdering.cpp @@ -704,11 +704,12 @@ void ToolOrdering::reorder_extruders_for_minimum_flush_volume() wipe_volumes.push_back(std::vector(flush_matrix.begin() + i * number_of_extruders, flush_matrix.begin() + (i + 1) * number_of_extruders)); unsigned int current_extruder_id = -1; - for (LayerTools& lt : m_layer_tools) { + for (int i = 0; i < m_layer_tools.size(); ++i) { + LayerTools& lt = m_layer_tools[i]; if (lt.extruders.empty()) continue; // todo: The algorithm complexity is too high(o(n2)), currently only 8 colors are supported - if (lt.extruders.size() <= 8) { + if (i != 0 && lt.extruders.size() <= 8) { lt.extruders = get_extruders_order(wipe_volumes, lt.extruders, current_extruder_id); } current_extruder_id = lt.extruders.back(); From dda90b18103cb5cebac8e9cd334d9c4c4d35168f Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Wed, 15 Mar 2023 18:05:20 +0800 Subject: [PATCH 084/339] ENH: get start_gcode filament Change-Id: Ia511f758d5c59ddc38c79f251e8c95511de4a235 --- resources/profiles/BBL.json | 2 +- .../BBL/machine/fdm_bbl_3dp_001_common.json | 2 +- src/libslic3r/GCode.cpp | 20 +++++++---- src/libslic3r/GCode.hpp | 1 + src/libslic3r/GCode/GCodeProcessor.cpp | 34 +++++++++++++++++++ src/libslic3r/GCode/GCodeProcessor.hpp | 2 ++ src/libslic3r/PrintConfig.cpp | 4 +-- 7 files changed, 54 insertions(+), 11 deletions(-) diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index 8cd6772411..f9e4543cc2 100644 --- a/resources/profiles/BBL.json +++ b/resources/profiles/BBL.json @@ -1,7 +1,7 @@ { "name": "Bambulab", "url": "http://www.bambulab.com/Parameters/vendor/BBL.json", - "version": "01.05.00.19", + "version": "01.05.00.20", "force_update": "0", "description": "the initial version of BBL configurations", "machine_model_list": [ diff --git a/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json b/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json index f6c9af1ae6..58be0a559c 100644 --- a/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json +++ b/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json @@ -157,7 +157,7 @@ "nozzle_type": "hardened_steel", "silent_mode": "0", "single_extruder_multi_material": "1", - "change_filament_gcode": "M620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1 && (z_hop_types[current_extruder] == 0 || z_hop_types[current_extruder] == 3)}\nG17\nG2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}M104 S[old_filament_temp]{endif}\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\n\nG1 X20 Y50 F21000\nG1 Y-3\n{if toolchange_count == 2}\n; get travel path for change filament\nM620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\nM620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\nM620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n{endif}\nT[next_extruder]\nM620.1 E F{new_filament_e_feedrate}\n\n{if next_extruder < 255}\nM400\n\nG92 E0\n{if flush_length_1 > 1}\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM109 S[nozzle_temperature_range_high]\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n; FLUSH_START\nM400\nM109 S[new_filament_temp]\nG1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\nG1 X80 F15000\nG1 X60 F15000\nG1 X80 F15000\nG1 X60 F15000; shake to put down garbage\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z{max_layer_z + 3.0} F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A", + "change_filament_gcode": "M620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1 && (z_hop_types[current_extruder] == 0 || z_hop_types[current_extruder] == 3)}\nG17\nG2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}M104 S[old_filament_temp]{endif}\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\n\nG1 X20 Y50 F21000\nG1 Y-3\n{if toolchange_count == 2}\n; get travel path for change filament\nM620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\nM620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\nM620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n{endif}\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\n\n{if next_extruder < 255}\nM400\n\nG92 E0\n{if flush_length_1 > 1}\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM109 S[nozzle_temperature_range_high]\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n; FLUSH_START\nM400\nM109 S[new_filament_temp]\nG1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\nG1 X80 F15000\nG1 X60 F15000\nG1 X80 F15000\nG1 X60 F15000; shake to put down garbage\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z{max_layer_z + 3.0} F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A", "layer_change_gcode": "; layer num/total_layer_count: {layer_num+1}/[total_layer_count]\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\n{if timelapse_type == 0} ; timelapse without wipe tower\nM971 S11 C10 O0\n{elsif timelapse_type == 1} ; timelapse with wipe tower\nG92 E0\nG1 E-[retraction_length] F1800\nG17\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F20000 ; spiral lift a little\nG1 X65 Y245 F20000 ; move to safe pos\nG17\nG2 Z{layer_z} I0.86 J0.86 P1 F20000\nG1 Y265 F3000\nM400 P300\nM971 S11 C10 O0\nG92 E0\nG1 E[retraction_length] F300\nG1 X100 F5000\nG1 Y255 F20000\n{endif}\nM623\n; update layer progress\nM73 L{layer_num+1}\nM991 S0 P{layer_num} ;notify layer change", "machine_end_gcode": ";===== date: 20230118 =====================\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 0.5} F900 ; lower z a little\nG1 X65 Y245 F12000 ; move to safe pos \nG1 Y265 F3000\nM991 S0 P-1 ;end smooth timelapse at safe pos\nM400 S2 ;wait for last picture to be taken\n\nG1 X65 Y245 F12000\nG1 Y265 F3000\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\nG1 X100 F12000 ; wipe\n; pull back filament to AMS\nM620 S255\nG1 X20 Y50 F12000\nG1 Y-3\nT255\nG1 X65 F12000\nG1 Y265\nG1 X100 F12000 ; wipe\nM621 S255\nM104 S0 ; turn off hotend\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\n{if (max_layer_z + 100.0) < 250}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z250 F600\n G1 Z248\n{endif}\nM400 P100\nM17 R ; restore z current\n\nG90\nG1 X128 Y250 F3600\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\nM17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\n\n", "machine_pause_gcode": "M400 U1\n", diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index dd0ca6c268..05cf0dd195 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -1744,6 +1744,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato file.writeln(machine_start_gcode); //BBS: gcode writer doesn't know where the real position of extruder is after inserting custom gcode m_writer.set_current_position_clear(false); + m_start_gcode_filament = GCodeProcessor::get_gcode_last_filament(machine_start_gcode); // Process filament-specific gcode. /* if (has_wipe_tower) { @@ -4152,13 +4153,17 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z) int old_filament_temp, old_filament_e_feedrate; float filament_area = float((M_PI / 4.f) * pow(m_config.filament_diameter.get_at(extruder_id), 2)); - - if (m_writer.extruder() != nullptr) { + //BBS: add handling for filament change in start gcode + int previous_extruder_id = -1; + if (m_writer.extruder() != nullptr || m_start_gcode_filament != -1) { std::vector flush_matrix(cast(m_config.flush_volumes_matrix.values)); const unsigned int number_of_extruders = (unsigned int)(sqrt(flush_matrix.size()) + EPSILON); - assert(m_writer.extruder()->id() < number_of_extruders); + if (m_writer.extruder() != nullptr) + assert(m_writer.extruder()->id() < number_of_extruders); + else + assert(m_start_gcode_filament < number_of_extruders); - int previous_extruder_id = m_writer.extruder()->id(); + previous_extruder_id = m_writer.extruder() != nullptr ? m_writer.extruder()->id() : m_start_gcode_filament; old_retract_length = m_config.retraction_length.get_at(previous_extruder_id); old_retract_length_toolchange = m_config.retract_length_toolchange.get_at(previous_extruder_id); old_filament_temp = this->on_first_layer()? m_config.nozzle_temperature_initial_layer.get_at(previous_extruder_id) : m_config.nozzle_temperature.get_at(previous_extruder_id); @@ -4166,8 +4171,9 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z) wipe_volume *= m_config.flush_multiplier; old_filament_e_feedrate = (int)(60.0 * m_config.filament_max_volumetric_speed.get_at(previous_extruder_id) / filament_area); old_filament_e_feedrate = old_filament_e_feedrate == 0 ? 100 : old_filament_e_feedrate; - } - else { + //BBS: must clean m_start_gcode_filament + m_start_gcode_filament = -1; + } else { old_retract_length = 0.f; old_retract_length_toolchange = 0.f; old_filament_temp = 0; @@ -4179,7 +4185,7 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z) new_filament_e_feedrate = new_filament_e_feedrate == 0 ? 100 : new_filament_e_feedrate; DynamicConfig dyn_config; - dyn_config.set_key_value("previous_extruder", new ConfigOptionInt((int)(m_writer.extruder() != nullptr ? m_writer.extruder()->id() : -1))); + dyn_config.set_key_value("previous_extruder", new ConfigOptionInt(previous_extruder_id)); dyn_config.set_key_value("next_extruder", new ConfigOptionInt((int)extruder_id)); dyn_config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index)); dyn_config.set_key_value("layer_z", new ConfigOptionFloat(print_z)); diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp index c16b58bbe9..5bf3b29434 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -486,6 +486,7 @@ private: unsigned int m_toolchange_count; coordf_t m_nominal_z; bool m_need_change_layer_lift_z = false; + int m_start_gcode_filament = -1; static bool gcode_label_objects; diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index 2068b4e2b7..1274fcc1d7 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -1887,6 +1887,40 @@ template } } +int GCodeProcessor::get_gcode_last_filament(const std::string& gcode_str) +{ + int str_size = gcode_str.size(); + int start_index = 0; + int end_index = 0; + int out_filament = -1; + while (end_index < str_size) { + if (gcode_str[end_index] != '\n') { + end_index++; + continue; + } + + if (end_index > start_index) { + std::string line_str = gcode_str.substr(start_index, end_index - start_index); + line_str.erase(0, line_str.find_first_not_of(" ")); + line_str.erase(line_str.find_last_not_of(" ") + 1); + if (line_str.empty() || line_str[0] != 'T') { + start_index = end_index + 1; + end_index = start_index; + continue; + } + + int out = -1; + if (parse_number(line_str.substr(1), out) && out >= 0 && out < 255) + out_filament = out; + } + + start_index = end_index + 1; + end_index = start_index; + } + + return out_filament; +} + void GCodeProcessor::process_tags(const std::string_view comment, bool producers_enabled) { // producers tags diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index 6d03d7d45a..b8915459d9 100644 --- a/src/libslic3r/GCode/GCodeProcessor.hpp +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -237,6 +237,8 @@ namespace Slic3r { // (the first max_count found tags are returned into found_tag) static bool contains_reserved_tags(const std::string& gcode, unsigned int max_count, std::vector& found_tag); + static int get_gcode_last_filament(const std::string &gcode_str); + static const float Wipe_Width; static const float Wipe_Height; diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 91ff260f7f..e265fc9038 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -2509,7 +2509,7 @@ void PrintConfigDef::init_fff_params() def = this->add("support_filament", coInt); def->gui_type = ConfigOptionDef::GUIType::i_enum_open; - def->label = L("Support base"); + def->label = L("Support/raft base"); def->category = L("Support"); def->tooltip = L("Filament to print support base and raft. \"Default\" means no specific filament for support and current filament is used"); def->min = 0; @@ -2534,7 +2534,7 @@ void PrintConfigDef::init_fff_params() def = this->add("support_interface_filament", coInt); def->gui_type = ConfigOptionDef::GUIType::i_enum_open; - def->label = L("Support interface"); + def->label = L("Support/raft interface"); def->category = L("Support"); def->tooltip = L("Filament to print support interface. \"Default\" means no specific filament for support interface and current filament is used"); def->min = 0; From c8729bec8f6dfd2c172214a91fc748401dc27960 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Thu, 16 Mar 2023 18:11:58 +0800 Subject: [PATCH 085/339] FIX: First layer nozzle temperature not working STUDIO-2409 Change-Id: I4a31be809bbf677d0e029c6cdca6b21fd04d066a --- src/libslic3r/GCode.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 05cf0dd195..f0828202d3 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -4148,6 +4148,10 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z) float new_retract_length = m_config.retraction_length.get_at(extruder_id); float new_retract_length_toolchange = m_config.retract_length_toolchange.get_at(extruder_id); int new_filament_temp = this->on_first_layer() ? m_config.nozzle_temperature_initial_layer.get_at(extruder_id): m_config.nozzle_temperature.get_at(extruder_id); + // BBS: if print_z == 0 use first layer temperature + if (abs(print_z) < EPSILON) + new_filament_temp = m_config.nozzle_temperature_initial_layer.get_at(extruder_id); + Vec3d nozzle_pos = m_writer.get_position(); float old_retract_length, old_retract_length_toolchange, wipe_volume; int old_filament_temp, old_filament_e_feedrate; From 47c04e75a72988ddeb745dcab704cac7d0aa9ed1 Mon Sep 17 00:00:00 2001 From: tao wang Date: Mon, 13 Mar 2023 17:48:17 +0800 Subject: [PATCH 086/339] NEW:use new humidity img Change-Id: I8e5b68f929e2638d9c94bab3d9ed6b8d7133d586 --- resources/images/ams_humidity_0.svg | 20 ++++++++++---------- resources/images/ams_humidity_1.svg | 22 +++++++++++----------- resources/images/ams_humidity_2.svg | 22 +++++++++++----------- resources/images/ams_humidity_3.svg | 22 +++++++++++----------- resources/images/ams_humidity_4.svg | 22 +++++++++++----------- resources/images/ams_humidity_tips.svg | 8 ++++---- src/slic3r/GUI/Widgets/AMSControl.cpp | 10 +++++----- 7 files changed, 63 insertions(+), 63 deletions(-) diff --git a/resources/images/ams_humidity_0.svg b/resources/images/ams_humidity_0.svg index 78eafd2efa..d438d503a9 100644 --- a/resources/images/ams_humidity_0.svg +++ b/resources/images/ams_humidity_0.svg @@ -1,11 +1,11 @@ - - - - - - - - - - + + + + + + + + + + diff --git a/resources/images/ams_humidity_1.svg b/resources/images/ams_humidity_1.svg index b5322212d3..caabcbdbe1 100644 --- a/resources/images/ams_humidity_1.svg +++ b/resources/images/ams_humidity_1.svg @@ -1,12 +1,12 @@ - - - - - - - - - - - + + + + + + + + + + + diff --git a/resources/images/ams_humidity_2.svg b/resources/images/ams_humidity_2.svg index ee14bbb224..1ccea8ea3b 100644 --- a/resources/images/ams_humidity_2.svg +++ b/resources/images/ams_humidity_2.svg @@ -1,12 +1,12 @@ - - - - - - - - - - - + + + + + + + + + + + diff --git a/resources/images/ams_humidity_3.svg b/resources/images/ams_humidity_3.svg index 54f2f99da7..18cd50462e 100644 --- a/resources/images/ams_humidity_3.svg +++ b/resources/images/ams_humidity_3.svg @@ -1,12 +1,12 @@ - - - - - - - - - - - + + + + + + + + + + + diff --git a/resources/images/ams_humidity_4.svg b/resources/images/ams_humidity_4.svg index f552f06f04..8d41debf74 100644 --- a/resources/images/ams_humidity_4.svg +++ b/resources/images/ams_humidity_4.svg @@ -1,12 +1,12 @@ - - - - - - - - - - - + + + + + + + + + + + diff --git a/resources/images/ams_humidity_tips.svg b/resources/images/ams_humidity_tips.svg index 240c7b1302..b343abfd39 100644 --- a/resources/images/ams_humidity_tips.svg +++ b/resources/images/ams_humidity_tips.svg @@ -8,9 +8,9 @@ - - - - + + + + diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index c727743793..e9137e1409 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -963,11 +963,11 @@ AMSRoad::AMSRoad(wxWindow *parent, wxWindowID id, Caninfo info, int canindex, in m_rode_mode = AMSRoadMode::AMS_ROAD_MODE_NONE_ANY_ROAD; } - ams_humidity_0 = ScalableBitmap(this, "ams_humidity_0", 18); - ams_humidity_1 = ScalableBitmap(this, "ams_humidity_1", 18); - ams_humidity_2 = ScalableBitmap(this, "ams_humidity_2", 18); - ams_humidity_3 = ScalableBitmap(this, "ams_humidity_3", 18); - ams_humidity_4 = ScalableBitmap(this, "ams_humidity_4", 18); + ams_humidity_0 = ScalableBitmap(this, "ams_humidity_0", 20); + ams_humidity_1 = ScalableBitmap(this, "ams_humidity_1", 20); + ams_humidity_2 = ScalableBitmap(this, "ams_humidity_2", 20); + ams_humidity_3 = ScalableBitmap(this, "ams_humidity_3", 20); + ams_humidity_4 = ScalableBitmap(this, "ams_humidity_4", 20); create(parent, id, pos, size); Bind(wxEVT_PAINT, &AMSRoad::paintEvent, this); From 03819e6f865c021112c4ab39a682288a6ae1694a Mon Sep 17 00:00:00 2001 From: tao wang Date: Thu, 16 Mar 2023 11:33:46 +0800 Subject: [PATCH 087/339] ENH:disable switching printers when sending printing Change-Id: I9004f3de4f0968cc659a769970ff20c1e7f6f0be --- src/slic3r/GUI/AMSMaterialsSetting.cpp | 35 ++++++++++++++++++++++---- src/slic3r/GUI/AMSMaterialsSetting.hpp | 2 ++ src/slic3r/GUI/SelectMachine.cpp | 6 +++++ 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index 42e9de8209..8d6f3bbadb 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -966,6 +966,11 @@ ColorPickerPopup::ColorPickerPopup(wxWindow* parent) fg_sizer->Add(cp, 0, wxALL, FromDIP(3)); cp->Bind(wxEVT_LEFT_DOWN, [this, cp](auto& e) { set_def_colour(cp->m_colour); + + wxCommandEvent evt(EVT_SELECTED_COLOR); + unsigned long g_col = ((cp->m_colour.Red() & 0xff) << 16) + ((cp->m_colour.Green() & 0xff) << 8) + (cp->m_colour.Blue() & 0xff); + evt.SetInt(g_col); + wxPostEvent(GetParent(), evt); }); } @@ -1004,13 +1009,27 @@ ColorPickerPopup::ColorPickerPopup(wxWindow* parent) void ColorPickerPopup::set_ams_colours(std::vector ams) { - m_ams_colors = ams; + if (m_ams_color_pickers.size() > 0) { + for (ColorPicker* col_pick:m_ams_color_pickers) { + std::vector::iterator iter = find(m_color_pickers.begin(), m_color_pickers.end(), col_pick); + if (iter != m_color_pickers.end()) { + col_pick->Destroy(); + m_color_pickers.erase(iter); + } + } + + m_ams_color_pickers.clear(); + } + + + m_ams_colors = ams; for (wxColour col : m_ams_colors) { auto cp = new ColorPicker(m_def_color_box, wxID_ANY, wxDefaultPosition, wxDefaultSize); cp->set_color(col); cp->set_selected(false); m_color_pickers.push_back(cp); + m_ams_color_pickers.push_back(cp); m_ams_fg_sizer->Add(cp, 0, wxALL, FromDIP(3)); cp->Bind(wxEVT_LEFT_DOWN, [this, cp](auto& e) { set_def_colour(cp->m_colour); @@ -1029,19 +1048,20 @@ void ColorPickerPopup::set_ams_colours(std::vector ams) void ColorPickerPopup::set_def_colour(wxColour col) { m_def_col = col; - bool set_already = false; for (ColorPicker* cp : m_color_pickers) { - if (cp->m_selected) { cp->set_selected(false); } + } - if (cp->m_colour == m_def_col && !set_already) { + for (ColorPicker* cp : m_color_pickers) { + if (cp->m_colour == m_def_col) { cp->set_selected(true); - set_already = true; + break; } } + Dismiss(); } @@ -1055,6 +1075,11 @@ void ColorPickerPopup::paintEvent(wxPaintEvent& evt) void ColorPickerPopup::OnDismiss() {} +void ColorPickerPopup::Popup() +{ + PopupWindow::Popup(); +} + bool ColorPickerPopup::ProcessLeftDown(wxMouseEvent& event) { return PopupWindow::ProcessLeftDown(event); } diff --git a/src/slic3r/GUI/AMSMaterialsSetting.hpp b/src/slic3r/GUI/AMSMaterialsSetting.hpp index 6080db6801..d5eaf8535a 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.hpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.hpp @@ -56,6 +56,7 @@ public: std::vector m_def_colors; std::vector m_ams_colors; std::vector m_color_pickers; + std::vector m_ams_color_pickers; public: ColorPickerPopup(wxWindow* parent); @@ -63,6 +64,7 @@ public: void set_ams_colours(std::vector ams); void set_def_colour(wxColour col); void paintEvent(wxPaintEvent& evt); + void Popup(); virtual void OnDismiss() wxOVERRIDE; virtual bool ProcessLeftDown(wxMouseEvent& event) wxOVERRIDE; diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index c8a37be44d..646b081285 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -1490,6 +1490,9 @@ void SelectMachineDialog::update_select_layout(MachineObject *obj) void SelectMachineDialog::prepare_mode() { + // disable combobox + m_comboBox_printer->Enable(); + m_is_in_sending_mode = false; if (m_print_job) { m_print_job->join(); @@ -1510,6 +1513,9 @@ void SelectMachineDialog::prepare_mode() void SelectMachineDialog::sending_mode() { + // disable combobox + m_comboBox_printer->Disable(); + m_is_in_sending_mode = true; if (m_simplebook->GetSelection() != 1){ m_simplebook->SetSelection(1); From c6e49af3fef901424e0cadb1ddca598ae8286d39 Mon Sep 17 00:00:00 2001 From: tao wang Date: Thu, 16 Mar 2023 12:06:53 +0800 Subject: [PATCH 088/339] ENH:add some protection for fan control Change-Id: Ic60deaec60b5238f9307b7b4bb928293701c2fd5 --- src/slic3r/GUI/Widgets/FanControl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Widgets/FanControl.cpp b/src/slic3r/GUI/Widgets/FanControl.cpp index da0a414b22..57f4217fff 100644 --- a/src/slic3r/GUI/Widgets/FanControl.cpp +++ b/src/slic3r/GUI/Widgets/FanControl.cpp @@ -394,7 +394,7 @@ void FanControl::command_control_fan() { if (m_current_speed < 0 || m_current_speed > 10) { return; } int speed = floor(m_current_speed * float(25.5)); - if (m_update_already) { + if (m_update_already && m_obj) { m_obj->command_control_fan_val(m_type, speed); post_event(wxCommandEvent(EVT_FAN_CHANGED)); } From ccfc61492ba4ed0bf9b7c49e216429c940aec0a6 Mon Sep 17 00:00:00 2001 From: tao wang Date: Thu, 16 Mar 2023 15:54:35 +0800 Subject: [PATCH 089/339] ENH:use high contrast icons in dark mode fixed STUDIO-2033 Change-Id: Ibfbc40b02f5333d80d2875d88bb3029109256e4a --- src/slic3r/GUI/Plater.cpp | 1 + src/slic3r/GUI/SelectMachine.cpp | 11 +++++++++++ src/slic3r/GUI/SelectMachine.hpp | 6 +++--- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 751a233b43..51796d8a16 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -10783,6 +10783,7 @@ void Plater::sys_color_changed() p->preview->sys_color_changed(); p->sidebar->sys_color_changed(); p->menus.sys_color_changed(); + if (p->m_select_machine_dlg) p->m_select_machine_dlg->sys_color_changed(); Layout(); GetParent()->Layout(); diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 646b081285..21ba43600a 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -3208,6 +3208,17 @@ void SelectMachineDialog::set_default() m_stext_weight->SetLabel(weight); } +void SelectMachineDialog::sys_color_changed() +{ + if (wxGetApp(). dark_mode()) { + m_rename_button->SetIcon("ams_editable_light"); + } + else { + m_rename_button->SetIcon("ams_editable"); + } + m_rename_button->Refresh(); +} + bool SelectMachineDialog::Show(bool show) { show_status(PrintDialogStatus::PrintStatusInit); diff --git a/src/slic3r/GUI/SelectMachine.hpp b/src/slic3r/GUI/SelectMachine.hpp index 0b141ee950..9da96621b5 100644 --- a/src/slic3r/GUI/SelectMachine.hpp +++ b/src/slic3r/GUI/SelectMachine.hpp @@ -381,8 +381,8 @@ public: PrintDialogStatus get_status() { return m_print_status; } bool is_same_printer_model(); - - bool Show(bool show); + void sys_color_changed(); + bool Show(bool show); /* model */ wxObjectDataPtr machine_model; @@ -431,7 +431,7 @@ protected: void on_set_finish_mapping(wxCommandEvent &evt); void on_print_job_cancel(wxCommandEvent &evt); void set_default(); - void on_timer(wxTimerEvent &event); + void on_timer(wxTimerEvent& event); void on_selection_changed(wxCommandEvent &event); void Enable_Refresh_Button(bool en); void Enable_Send_Button(bool en); From 679ccb658b7c0e1b6852ed8d41405afc80446213 Mon Sep 17 00:00:00 2001 From: tao wang Date: Thu, 16 Mar 2023 19:27:52 +0800 Subject: [PATCH 090/339] FIX:fixed will create crash logs when open object table fixed STUDIO-1983 Change-Id: I1f83f16fdc0677f0d00e79508779584789aaa6fa --- src/slic3r/GUI/GUI_ObjectTable.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/slic3r/GUI/GUI_ObjectTable.cpp b/src/slic3r/GUI/GUI_ObjectTable.cpp index 8928f87d73..9c843e74ca 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.cpp +++ b/src/slic3r/GUI/GUI_ObjectTable.cpp @@ -1384,11 +1384,20 @@ wxString ObjectGridTable::GetValue (int row, int col) } else { try { - ConfigOptionString& option_value = dynamic_cast(option); - if (grid_row->row_type == row_volume) + if (grid_row->row_type == row_volume){ + ConfigOptionString& option_value = dynamic_cast(option); return GUI::from_u8(std::string(" ") + option_value.value); - else - return GUI::from_u8(option_value.value); + } + else { + if (option.type() == coInt) { + ConfigOptionInt& option_value = dynamic_cast(option); + return GUI::from_u8(wxString::Format("%d",option_value.value).ToStdString()); + }else { + ConfigOptionString& option_value = dynamic_cast(option); + return GUI::from_u8(option_value.value); + } + + } } catch(...) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format("row %1%, col %2%, type %3% ")%row %col %grid_col->type; From 0b126dbed640646e7553b541665a763a7f4c6ece Mon Sep 17 00:00:00 2001 From: "salt.wei" Date: Thu, 16 Mar 2023 18:13:12 +0800 Subject: [PATCH 091/339] ENH: fix the floating layer issue Fix for floating layer under multi-color printing while z_hop is zero. Signed-off-by: salt.wei Change-Id: I8cc96bd18020cac8424fe4c3e62fb87da118b826 --- src/libslic3r/GCode.cpp | 38 +++++++++++++---- src/libslic3r/GCode/GCodeProcessor.cpp | 57 ++++++++++++++++++++++++++ src/libslic3r/GCode/GCodeProcessor.hpp | 1 + src/libslic3r/GCodeWriter.cpp | 28 +++++++++---- src/libslic3r/GCodeWriter.hpp | 1 + 5 files changed, 108 insertions(+), 17 deletions(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index f0828202d3..8d8d57e5e1 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -520,9 +520,20 @@ static std::vector get_path_of_change_filament(const Print& print) // retract before toolchange toolchange_gcode_str = toolchange_retract_str + toolchange_gcode_str; - //BBS: current position and fan_speed is unclear after interting change_filament_gcode - toolchange_gcode_str += ";_FORCE_RESUME_FAN_SPEED\n"; - gcodegen.writer().set_current_position_clear(false); + //BBS + { + //BBS: current position and fan_speed is unclear after interting change_filament_gcode + check_add_eol(toolchange_gcode_str); + toolchange_gcode_str += ";_FORCE_RESUME_FAN_SPEED\n"; + gcodegen.writer().set_current_position_clear(false); + //BBS: check whether custom gcode changes the z position. Update if changed + double temp_z_after_tool_change; + if (GCodeProcessor::get_last_z_from_gcode(toolchange_gcode_str, temp_z_after_tool_change)) { + Vec3d pos = gcodegen.writer().get_position(); + pos(2) = temp_z_after_tool_change; + gcodegen.writer().set_position(pos); + } + } // move to start_pos for wiping after toolchange std::string start_pos_str; @@ -4239,12 +4250,23 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z) std::string toolchange_gcode_parsed; if (!change_filament_gcode.empty()) { toolchange_gcode_parsed = placeholder_parser_process("change_filament_gcode", change_filament_gcode, extruder_id, &dyn_config); + check_add_eol(toolchange_gcode_parsed); gcode += toolchange_gcode_parsed; - check_add_eol(gcode); - //BBS: gcode writer doesn't know where the extruder is and whether fan speed is changed after inserting tool change gcode - //Set this flag so that normal lift will be used the first time after tool change. - gcode += ";_FORCE_RESUME_FAN_SPEED\n"; - m_writer.set_current_position_clear(false); + + //BBS + { + //BBS: gcode writer doesn't know where the extruder is and whether fan speed is changed after inserting tool change gcode + //Set this flag so that normal lift will be used the first time after tool change. + gcode += ";_FORCE_RESUME_FAN_SPEED\n"; + m_writer.set_current_position_clear(false); + //BBS: check whether custom gcode changes the z position. Update if changed + double temp_z_after_tool_change; + if (GCodeProcessor::get_last_z_from_gcode(toolchange_gcode_parsed, temp_z_after_tool_change)) { + Vec3d pos = m_writer.get_position(); + pos(2) = temp_z_after_tool_change; + m_writer.set_position(pos); + } + } } // BBS. Reset old extruder E-value. diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index 1274fcc1d7..d3e3c6c7ea 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -12,6 +12,8 @@ #include #include +#include + #include #include @@ -1921,6 +1923,61 @@ int GCodeProcessor::get_gcode_last_filament(const std::string& gcode_str) return out_filament; } +//BBS: get last z position from gcode +bool GCodeProcessor::get_last_z_from_gcode(const std::string& gcode_str, double& z) +{ + int str_size = gcode_str.size(); + int start_index = 0; + int end_index = 0; + bool is_z_changed = false; + while (end_index < str_size) { + //find a full line + if (gcode_str[end_index] != '\n') { + end_index++; + continue; + } + //parse the line + if (end_index > start_index) { + std::string line_str = gcode_str.substr(start_index, end_index - start_index); + line_str.erase(0, line_str.find_first_not_of(" ")); + line_str.erase(line_str.find_last_not_of(";") + 1); + line_str.erase(line_str.find_last_not_of(" ") + 1); + + //command which may have z movement + if (line_str.size() > 5 && (line_str.find("G0 ") == 0 + || line_str.find("G1 ") == 0 + || line_str.find("G2 ") == 0 + || line_str.find("G3 ") == 0)) + { + auto z_pos = line_str.find(" Z"); + double temp_z = 0; + if (z_pos != line_str.npos + && z_pos + 2 < line_str.size()) { + // Try to parse the numeric value. + std::string z_sub = line_str.substr(z_pos + 2); + char* c = &z_sub[0]; + char* end = c + sizeof(z_sub.c_str()); + + auto is_end_of_word = [](char c) { + return c == ' ' || c == '\t' || c == '\r' || c == '\n' || c == 0 || c == ';'; + }; + + auto [pend, ec] = fast_float::from_chars(c, end, temp_z); + if (pend != c && is_end_of_word(*pend)) { + // The axis value has been parsed correctly. + z = temp_z; + is_z_changed = true; + } + } + } + } + //loop to handle next line + start_index = end_index + 1; + end_index = start_index; + } + return is_z_changed; +} + void GCodeProcessor::process_tags(const std::string_view comment, bool producers_enabled) { // producers tags diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index b8915459d9..ed304fc572 100644 --- a/src/libslic3r/GCode/GCodeProcessor.hpp +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -238,6 +238,7 @@ namespace Slic3r { static bool contains_reserved_tags(const std::string& gcode, unsigned int max_count, std::vector& found_tag); static int get_gcode_last_filament(const std::string &gcode_str); + static bool get_last_z_from_gcode(const std::string& gcode_str, double& z); static const float Wipe_Width; static const float Wipe_Height; diff --git a/src/libslic3r/GCodeWriter.cpp b/src/libslic3r/GCodeWriter.cpp index bcd5054efc..04af9f01f5 100644 --- a/src/libslic3r/GCodeWriter.cpp +++ b/src/libslic3r/GCodeWriter.cpp @@ -374,20 +374,30 @@ std::string GCodeWriter::travel_to_xyz(const Vec3d &point, const std::string &co /* In all the other cases, we perform an actual XYZ move and cancel the lift. */ m_lifted = 0; - m_pos = point; } //BBS: take plate offset into consider - this->set_current_position_clear(true); Vec3d point_on_plate = { dest_point(0) - m_x_offset, dest_point(1) - m_y_offset, dest_point(2) }; - m_pos = dest_point; - + std::string out_string; GCodeG1Formatter w; - w.emit_xyz(point_on_plate); - w.emit_f(this->config.travel_speed.value * 60.0); - //BBS - w.emit_comment(GCodeWriter::full_gcode_comment, comment); - return w.string(); + if (!this->is_current_position_clear()) + { + //force to move xy first then z after filament change + w.emit_xy(Vec2d(point_on_plate.x(), point_on_plate.y())); + w.emit_f(this->config.travel_speed.value * 60.0); + w.emit_comment(GCodeWriter::full_gcode_comment, comment); + out_string = w.string() + _travel_to_z(point_on_plate.z(), comment); + } else { + GCodeG1Formatter w; + w.emit_xyz(point_on_plate); + w.emit_f(this->config.travel_speed.value * 60.0); + w.emit_comment(GCodeWriter::full_gcode_comment, comment); + out_string = w.string(); + } + + m_pos = dest_point; + this->set_current_position_clear(true); + return out_string; } std::string GCodeWriter::travel_to_z(double z, const std::string &comment) diff --git a/src/libslic3r/GCodeWriter.hpp b/src/libslic3r/GCodeWriter.hpp index e0b0879e22..e12ae705ae 100644 --- a/src/libslic3r/GCodeWriter.hpp +++ b/src/libslic3r/GCodeWriter.hpp @@ -76,6 +76,7 @@ public: std::string lift(LiftType lift_type = LiftType::NormalLift); std::string unlift(); Vec3d get_position() const { return m_pos; } + void set_position(Vec3d& in) { m_pos = in; } //BBS: set offset for gcode writer void set_xy_offset(double x, double y) { m_x_offset = x; m_y_offset = y; } From c582e64e0da2ee4cefc8501ffdafe07582810ffd Mon Sep 17 00:00:00 2001 From: "yifan.wu" Date: Thu, 16 Mar 2023 22:13:10 +0800 Subject: [PATCH 092/339] FIX: remove trim_overlap to avoid perf issue in some cases Signed-off-by: yifan.wu Change-Id: Id6f54b0421cfdd070971d69a2ed110b7b6430dee --- src/libslic3r/PrintObjectSlice.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/PrintObjectSlice.cpp b/src/libslic3r/PrintObjectSlice.cpp index e381aabdc8..2a33241e16 100644 --- a/src/libslic3r/PrintObjectSlice.cpp +++ b/src/libslic3r/PrintObjectSlice.cpp @@ -343,11 +343,11 @@ static std::vector> slices_to_regions( if (!bbox_a.overlap(bbox_b)) continue; - if (intersection_ex(expoly_a, expoly_b).empty()) + ExPolygons temp = intersection_ex(expoly_b, expoly_a, ApplySafetyOffset::Yes); + if (temp.empty()) continue; - ExPolygons temp = intersection_ex(expoly_b, expoly_a); - if (expoly_a.area() > expoly_b.area()) + if (expoly_a.contour.length() > expoly_b.contour.length()) trimming_a.insert(trimming_a.end(), temp.begin(), temp.end()); else trimming_b.insert(trimming_b.end(), temp.begin(), temp.end()); @@ -395,6 +395,12 @@ static std::vector> slices_to_regions( // Clip every non-zero region preceding it. for (int idx_region2 = 0; idx_region2 < idx_region; ++ idx_region2) if (! temp_slices[idx_region2].expolygons.empty()) { + // Skip trim_overlap for now, because it slow down the performace so much for some special cases +#if 1 + if (const PrintObjectRegions::VolumeRegion& region2 = layer_range.volume_regions[idx_region2]; + !region2.model_volume->is_negative_volume() && overlap_in_xy(*region.bbox, *region2.bbox)) + temp_slices[idx_region2].expolygons = diff_ex(temp_slices[idx_region2].expolygons, temp_slices[idx_region].expolygons); +#else const PrintObjectRegions::VolumeRegion& region2 = layer_range.volume_regions[idx_region2]; if (!region2.model_volume->is_negative_volume() && overlap_in_xy(*region.bbox, *region2.bbox)) //BBS: handle negative_volume seperately, always minus the negative volume and don't need to trim overlap @@ -402,6 +408,7 @@ static std::vector> slices_to_regions( trim_overlap(temp_slices[idx_region2].expolygons, temp_slices[idx_region].expolygons); else temp_slices[idx_region2].expolygons = diff_ex(temp_slices[idx_region2].expolygons, temp_slices[idx_region].expolygons); +#endif } } } From 6f298ac6f18d0e72a0f65bb1e958c32ba7b20495 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Tue, 14 Mar 2023 15:22:29 +0800 Subject: [PATCH 093/339] ENH:add track events Change-Id: I7fb685013f243d6394a94a3c9500016b247ea0a8 --- src/slic3r/GUI/GUI_App.cpp | 83 ++++++++++++++++++++++++++++++++++---- src/slic3r/GUI/Monitor.cpp | 18 +++++++++ 2 files changed, 93 insertions(+), 8 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 11713efbfb..35525dcab2 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1132,6 +1132,34 @@ void GUI_App::post_init() } #endif + //BBS: check crash log + auto log_dir_path = boost::filesystem::path(data_dir()) / "log"; + if (boost::filesystem::exists(log_dir_path)) + { + boost::filesystem::directory_iterator end_iter; + for (boost::filesystem::directory_iterator iter(log_dir_path); iter != end_iter; ++iter) + { + std::string file_name = iter->path().stem().string(); + if (boost::starts_with(file_name, "crash")) { + std::ifstream ifs(iter->path().string(), ios::in); + std::stringstream data; + data << ifs.rdbuf(); + ifs.close(); + + NetworkAgent* agent = wxGetApp().getAgent(); + json j; + j["time"] = file_name.substr(file_name.find("crash") + strlen("crash") + 1); + j["verion"] = std::string(SLIC3R_VERSION); + j["content"] = data.str(); + if (agent) { + agent->track_event("studio_crash", j.dump()); + } + std::string new_file_name = file_name.insert(0, "_done_"); + boost::filesystem::rename(iter->path(), iter->path().parent_path() / boost::filesystem::path(new_file_name + iter->path().extension().string())); + } + } + } + if (m_networking_need_update) { //updating networking int ret = updating_bambu_networking(); @@ -1389,10 +1417,19 @@ static std::string decode(std::string const& extra, std::string const& path = {} int GUI_App::download_plugin(std::string name, std::string package_name, InstallProgressFn pro_fn, WasCancelledFn cancel_fn) { int result = 0; + json j; + std::string err_msg; + // get country_code AppConfig* app_config = wxGetApp().app_config; - if (!app_config) + if (!app_config) { + j["result"] = "failed"; + j["error_msg"] = "app_config is nullptr"; + if (m_agent) { + m_agent->track_event("networkplugin_download", j.dump()); + } return -1; + } BOOST_LOG_TRIVIAL(info) << "[download_plugin]: enter"; m_networking_cancel_update = false; @@ -1452,21 +1489,32 @@ int GUI_App::download_plugin(std::string name, std::string package_name, Install ; } }).on_error( - [&result](std::string body, std::string error, unsigned int status) { + [&result, &err_msg](std::string body, std::string error, unsigned int status) { BOOST_LOG_TRIVIAL(error) << "[download_plugin 1] on_error: " << error<<", body = " << body; + err_msg += "[download_plugin 1] on_error: " + error + ", body = " + body; result = -1; }).perform_sync(); bool cancel = false; if (result < 0) { + j["result"] = "failed"; + j["error_msg"] = err_msg; + if (m_agent) { + m_agent->track_event("networkplugin_download", j.dump()); + } if (pro_fn) pro_fn(InstallStatusDownloadFailed, 0, cancel); return result; } if (download_url.empty()) { - BOOST_LOG_TRIVIAL(info) << "[download_plugin 1]: no availaible plugin found for this app version: " << SLIC3R_VERSION; + BOOST_LOG_TRIVIAL(info) << "[download_plugin 1]: no available plugin found for this app version: " << SLIC3R_VERSION; if (pro_fn) pro_fn(InstallStatusDownloadFailed, 0, cancel); + j["result"] = "failed"; + j["error_msg"] = "[download_plugin 1]: no available plugin found for this app version: " + std::string(SLIC3R_VERSION); + if (m_agent) { + m_agent->track_event("networkplugin_download", j.dump()); + } return -1; } else if (pro_fn) { @@ -1475,6 +1523,11 @@ int GUI_App::download_plugin(std::string name, std::string package_name, Install if (m_networking_cancel_update || cancel) { BOOST_LOG_TRIVIAL(info) << boost::format("[download_plugin 1]: %1%, cancelled by user") % __LINE__; + j["result"] = "failed"; + j["error_msg"] = (boost::format("[download_plugin 1]: %1%, cancelled by user") % __LINE__).str(); + if (m_agent) { + m_agent->track_event("networkplugin_download", j.dump()); + } return -1; } BOOST_LOG_TRIVIAL(info) << "[download_plugin] get_url = " << download_url; @@ -1483,7 +1536,7 @@ int GUI_App::download_plugin(std::string name, std::string package_name, Install Slic3r::Http http = Slic3r::Http::get(download_url); int reported_percent = 0; http.on_progress( - [this, &pro_fn, cancel_fn, &result, &reported_percent](Slic3r::Http::Progress progress, bool& cancel) { + [this, &pro_fn, cancel_fn, &result, &reported_percent, &err_msg](Slic3r::Http::Progress progress, bool& cancel) { int percent = 0; if (progress.dltotal != 0) percent = progress.dlnow * 50 / progress.dltotal; @@ -1498,8 +1551,10 @@ int GUI_App::download_plugin(std::string name, std::string package_name, Install if (cancel_fn()) cancel = true; - if (cancel) + if (cancel) { + err_msg += "[download_plugin] cancel"; result = -1; + } }) .on_complete([&pro_fn, tmp_path, target_file_path](std::string body, unsigned status) { BOOST_LOG_TRIVIAL(info) << "[download_plugin 2] completed"; @@ -1511,13 +1566,19 @@ int GUI_App::download_plugin(std::string name, std::string package_name, Install fs::rename(tmp_path, target_file_path); if (pro_fn) pro_fn(InstallStatusDownloadCompleted, 80, cancel); }) - .on_error([&pro_fn, &result](std::string body, std::string error, unsigned int status) { + .on_error([&pro_fn, &result, &err_msg](std::string body, std::string error, unsigned int status) { bool cancel = false; if (pro_fn) pro_fn(InstallStatusDownloadFailed, 0, cancel); BOOST_LOG_TRIVIAL(error) << "[download_plugin 2] on_error: " << error<<", body = " << body; + err_msg += "[download_plugin 2] on_error: " + error + ", body = " + body; result = -1; }); http.perform_sync(); + j["result"] = result < 0 ? "failed" : "success"; + j["error_msg"] = err_msg; + if (m_agent) { + m_agent->track_event("networkplugin_download", j.dump()); + } return result; } @@ -2544,12 +2605,18 @@ bool GUI_App::on_init_inner() if (m_studio_active != curr_studio_active) { if (curr_studio_active) { BOOST_LOG_TRIVIAL(info) << "studio is active, start to subscribe"; - if (m_agent) + if (m_agent) { + json j = json::object(); m_agent->start_subscribe("app"); + m_agent->track_event("mqtt_active", j.dump()); + } } else { BOOST_LOG_TRIVIAL(info) << "studio is inactive, stop to subscribe"; - if (m_agent) + if (m_agent) { + json j = json::object(); m_agent->stop_subscribe("app"); + m_agent->track_event("mqtt_inactive", j.dump()); + } } m_studio_active = curr_studio_active; } diff --git a/src/slic3r/GUI/Monitor.cpp b/src/slic3r/GUI/Monitor.cpp index 6d6604a723..8754440d14 100644 --- a/src/slic3r/GUI/Monitor.cpp +++ b/src/slic3r/GUI/Monitor.cpp @@ -514,6 +514,24 @@ void MonitorPanel::show_status(int status) if (last_status == status) return; + + if (last_status & (int)MonitorStatus::MONITOR_CONNECTING != 0) { + NetworkAgent* agent = wxGetApp().getAgent(); + json j; + j["dev_id"] = obj ? obj->dev_id : "obj_nullptr"; + if (status & (int)MonitorStatus::MONITOR_DISCONNECTED != 0) { + j["result"] = "failed"; + if (agent) { + agent->track_event("connect_dev", j.dump()); + } + } + else if (status & (int)MonitorStatus::MONITOR_NORMAL != 0) { + j["result"] = "success"; + if (agent) { + agent->track_event("connect_dev", j.dump()); + } + } + } last_status = status; BOOST_LOG_TRIVIAL(info) << "monitor: show_status = " << status; From 6c489808a7bf5807ffa9151be33272885d66f023 Mon Sep 17 00:00:00 2001 From: "arthur.tang" Date: Tue, 14 Mar 2023 17:04:42 +0800 Subject: [PATCH 094/339] ENH: boost is_support_necessary's performance 1. Parallelize the majority of overhang detection, leaving only a small part of sharp tail detection as sequential. This strategy makes is_support_necessary 10 times faster. 2. Use the overlaps function to detect overlapping, instead of using intersection().empty() 3. Control the max recursion depth to prevent crashing due to too deep recursion. Jira: STUDIO-2445, STUDIO-2458 Change-Id: I35283da3e4a22d7afe251b804ce30b90a9d754df (cherry picked from commit 1a6fedd1a0c82906f1807234ea1b816247ca6fd7) --- src/libslic3r/ExPolygon.cpp | 11 + src/libslic3r/ExPolygon.hpp | 2 + src/libslic3r/PrintObject.cpp | 15 +- src/libslic3r/TreeSupport.cpp | 554 +++++++++++++++------------------- src/libslic3r/TreeSupport.hpp | 23 +- 5 files changed, 280 insertions(+), 325 deletions(-) diff --git a/src/libslic3r/ExPolygon.cpp b/src/libslic3r/ExPolygon.cpp index 3b7cc91e58..53b4414cf6 100644 --- a/src/libslic3r/ExPolygon.cpp +++ b/src/libslic3r/ExPolygon.cpp @@ -174,6 +174,17 @@ bool ExPolygon::overlaps(const ExPolygon &other) const other.contains(this->contour.points.front()); } +bool overlaps(const ExPolygons& expolys1, const ExPolygons& expolys2) +{ + for (const ExPolygon& expoly1 : expolys1) { + for (const ExPolygon& expoly2 : expolys2) { + if (expoly1.overlaps(expoly2)) + return true; + } + } + return false; +} + void ExPolygon::simplify_p(double tolerance, Polygons* polygons) const { Polygons pp = this->simplify_p(tolerance); diff --git a/src/libslic3r/ExPolygon.hpp b/src/libslic3r/ExPolygon.hpp index 83b264803c..72bfc7865d 100644 --- a/src/libslic3r/ExPolygon.hpp +++ b/src/libslic3r/ExPolygon.hpp @@ -451,6 +451,8 @@ inline ExPolygons expolygons_simplify(const ExPolygons &expolys, double toleranc // however their contours may be rotated. bool expolygons_match(const ExPolygon &l, const ExPolygon &r); +bool overlaps(const ExPolygons& expolys1, const ExPolygons& expolys2); + BoundingBox get_extents(const ExPolygon &expolygon); BoundingBox get_extents(const ExPolygons &expolygons); BoundingBox get_extents_rotated(const ExPolygon &poly, double angle); diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 41e56bdf92..0988676e4d 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -460,9 +460,20 @@ void PrintObject::generate_support_material() m_print->throw_if_canceled(); } else { // BBS: pop a warning if objects have significant amount of overhangs but support material is not enabled + m_print->set_status(50, L("Checking support necessity")); + typedef std::chrono::high_resolution_clock clock_; + typedef std::chrono::duration > second_; + std::chrono::time_point t0{ clock_::now() }; + SupportNecessaryType sntype = this->is_support_necessary(); + + double duration{ std::chrono::duration_cast(clock_::now() - t0).count() }; + BOOST_LOG_TRIVIAL(info) << std::fixed << std::setprecision(0) + << "is_support_necessary took " << (duration / 60) << " minutes and " + << std::setprecision(3) + << std::fmod(duration, 60.0) << " seconds." << std::endl; + if (sntype != NoNeedSupp) { - m_print->set_status(50, L("Checking support necessity")); if (sntype == SharpTail) { std::string warning_message = format(L("It seems object %s has completely floating regions. Please re-orient the object or enable support generation."), this->model_object()->name); @@ -2655,7 +2666,7 @@ SupportNecessaryType PrintObject::is_support_necessary() #else TreeSupport tree_support(*this, m_slicing_params); tree_support.support_type = SupportType::stTreeAuto; // need to set support type to fully utilize the power of feature detection - tree_support.detect_overhangs(); + tree_support.detect_overhangs(true); this->clear_support_layers(); if (tree_support.has_sharp_tails) return SharpTail; diff --git a/src/libslic3r/TreeSupport.cpp b/src/libslic3r/TreeSupport.cpp index 5d5479b1a6..a4bdf42074 100644 --- a/src/libslic3r/TreeSupport.cpp +++ b/src/libslic3r/TreeSupport.cpp @@ -12,8 +12,6 @@ #include "I18N.hpp" #include -#include "Fill/FillBase.hpp" - #define _L(s) Slic3r::I18N::translate(s) #define USE_PLAN_LAYER_HEIGHTS 1 @@ -722,7 +720,7 @@ TreeSupport::TreeSupport(PrintObject& object, const SlicingParameters &slicing_p #define SUPPORT_SURFACES_OFFSET_PARAMETERS ClipperLib::jtSquare, 0. -void TreeSupport::detect_overhangs() +void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) { // overhangs are already detected if (m_object->support_layer_count() >= m_object->layer_count()) @@ -731,10 +729,8 @@ void TreeSupport::detect_overhangs() // Clear and create Tree Support Layers m_object->clear_support_layers(); m_object->clear_tree_support_preview_cache(); - create_tree_support_layers(); - const PrintObjectConfig& config = m_object->config(); SupportType stype = support_type; const coordf_t radius_sample_resolution = g_config_tree_support_collision_resolution; @@ -750,16 +746,13 @@ void TreeSupport::detect_overhangs() // a region is considered well supported if the number of layers below it exceeds this threshold const int thresh_layers_below = 10 / config.layer_height; double obj_height = m_object->size().z(); + double threshold_rad = (config.support_threshold_angle.value < EPSILON ? 30 : config.support_threshold_angle.value + 1) * M_PI / 180.; - struct ExPolygonComp { - bool operator()(const ExPolygon& a, const ExPolygon& b) const { - return &a < &b; - } - }; // for small overhang removal struct OverhangCluster { std::map layer_overhangs; ExPolygons merged_poly; + BoundingBox merged_bbox; int min_layer = 1e7; int max_layer = 0; coordf_t offset = 0; @@ -774,6 +767,7 @@ void TreeSupport::detect_overhangs() merged_poly = union_ex(merged_poly, dilate1); min_layer = std::min(min_layer, layer_nr); max_layer = std::max(max_layer, layer_nr); + merged_bbox.merge(get_extents(dilate1)); } int height() { return max_layer - min_layer + 1; @@ -786,283 +780,259 @@ void TreeSupport::detect_overhangs() this->offset = offset; auto dilate1 = offset_ex(region, offset); - return !intersection_ex(*overhang, dilate1).empty(); + BoundingBox bbox = get_extents(dilate1); + if (!merged_bbox.overlap(bbox)) + return false; + return overlaps({ *overhang }, dilate1); + } + // it's basically the combination of push_back and intersects, but saves an offset_ex + bool push_back_if_intersects(const ExPolygon& region, int layer_nr, coordf_t offset) { + bool is_intersect = false; + ExPolygons dilate1; + BoundingBox bbox; + do { + if (layer_nr < 1) break; + auto it = layer_overhangs.find(layer_nr - 1); + if (it == layer_overhangs.end()) break; + const ExPolygon* overhang = it->second; + + this->offset = offset; + dilate1 = offset_ex(region, offset); + if (dilate1.empty()) break; + bbox = get_extents(dilate1); + if (!merged_bbox.overlap(bbox)) + break; + is_intersect = overlaps({ *overhang }, dilate1); + } while (0); + if (is_intersect) { + layer_overhangs.emplace(layer_nr, ®ion); + merged_poly = union_ex(merged_poly, dilate1); + min_layer = std::min(min_layer, layer_nr); + max_layer = std::max(max_layer, layer_nr); + merged_bbox.merge(bbox); + } + return is_intersect; } }; std::vector overhangClusters; - std::map overhang2clusterInd; - // for sharp tail detection - struct RegionCluster { - std::map layer_regions; - ExPolygon base; - BoundingBox bbox; - int min_layer = 1e7; - int max_layer = 0; - RegionCluster(const ExPolygon* expoly, int layer_nr) { - push_back(expoly, layer_nr); - } - void push_back(const ExPolygon* expoly, int layer_nr) { - if (layer_regions.empty()) { - base = *expoly; - bbox = get_extents(base); - } - layer_regions.emplace(layer_nr, expoly); - bbox.merge(get_extents(*expoly)); - min_layer = std::min(min_layer, layer_nr); - max_layer = std::max(max_layer, layer_nr); - } - int height() { - return max_layer - min_layer + 1; - } - bool intersects(const ExPolygon& region, int layer_nr, coordf_t offset) { - if (layer_nr < 1) return false; - auto it = layer_regions.find(layer_nr - 1); - if (it == layer_regions.end()) return false; - const ExPolygon* region_lower = it->second; - return !intersection_ex(*region_lower, region).empty(); - } - }; - std::vector regionClusters; - std::map region2clusterInd; - auto find_and_insert_cluster = [](auto& regionClusters, auto& region2clusterInd, const ExPolygon& region, int layer_nr, coordf_t offset) { + auto find_and_insert_cluster = [](auto& regionClusters, const ExPolygon& region, int layer_nr, coordf_t offset) { bool found = false; for (int i = 0; i < regionClusters.size();i++) { auto& cluster = regionClusters[i]; - if (cluster.intersects(region, layer_nr, offset)) { - cluster.push_back(®ion, layer_nr); - region2clusterInd.emplace(®ion, i); + if (cluster.push_back_if_intersects(region, layer_nr, offset)) { found = true; break; } } if (!found) { regionClusters.emplace_back(®ion, layer_nr); - region2clusterInd.emplace(®ion, regionClusters.size() - 1); } }; - // main part of sharptail detections - if (is_tree(stype)) - { - double threshold_rad = (config.support_threshold_angle.value < EPSILON ? 30 : config.support_threshold_angle.value+1) * M_PI / 180.; - ExPolygons regions_well_supported; - std::map region_layers_below; - ExPolygons lower_overhang_dilated; - - for (size_t layer_nr = 0; layer_nr < m_object->layer_count(); layer_nr++){ - if (m_object->print()->canceled()) - break; - - if (!is_auto(stype) && layer_nr > enforce_support_layers) - continue; - Layer* layer = m_object->get_layer(layer_nr); - for (auto& slice : layer->lslices) - find_and_insert_cluster(regionClusters, region2clusterInd, slice, layer_nr, 0); + if (!is_tree(stype)) return; - if (layer->lower_layer == nullptr) { - for (auto& slice : layer->lslices) { - auto bbox_size = get_extents(slice).size(); - if (/*slice.area() > area_thresh_well_supported || */ - (bbox_size.x()>length_thresh_well_supported && bbox_size.y()>length_thresh_well_supported)) - regions_well_supported.emplace_back(slice); - else if(g_config_support_sharp_tails){ - layer->sharp_tails.push_back(slice); - layer->sharp_tails_height.insert({ &slice, layer->height }); + // main part of overhang detection can be parallel + tbb::parallel_for(tbb::blocked_range(0, m_object->layer_count()), + [&](const tbb::blocked_range& range) { + for (size_t layer_nr = range.begin(); layer_nr < range.end(); layer_nr++) { + if (m_object->print()->canceled()) + break; + + if (!is_auto(stype) && layer_nr > enforce_support_layers) + continue; + + Layer* layer = m_object->get_layer(layer_nr); + + if (layer->lower_layer == nullptr) { + for (auto& slice : layer->lslices) { + auto bbox_size = get_extents(slice).size(); + if (!((bbox_size.x() > length_thresh_well_supported && bbox_size.y() > length_thresh_well_supported)) + && g_config_support_sharp_tails) { + layer->sharp_tails.push_back(slice); + layer->sharp_tails_height.insert({ &slice, layer->height }); + } + } + continue; + } + + Layer* lower_layer = layer->lower_layer; + coordf_t lower_layer_offset = layer_nr < enforce_support_layers ? -0.15 * extrusion_width : (float)lower_layer->height / tan(threshold_rad); + coordf_t support_offset_scaled = scale_(lower_layer_offset); + // Filter out areas whose diameter that is smaller than extrusion_width. Do not use offset2() for this purpose! + ExPolygons lower_polys; + for (const ExPolygon& expoly : lower_layer->lslices) { + if (!offset_ex(expoly, -extrusion_width_scaled / 2).empty()) { + lower_polys.emplace_back(expoly); + } + } + ExPolygons curr_polys; + for (const ExPolygon& expoly : layer->lslices) { + if (!offset_ex(expoly, -extrusion_width_scaled / 2).empty()) { + curr_polys.emplace_back(expoly); } } - continue; - } + // normal overhang + ExPolygons lower_layer_offseted = offset_ex(lower_polys, support_offset_scaled, SUPPORT_SURFACES_OFFSET_PARAMETERS); + ExPolygons overhang_areas = std::move(diff_ex(curr_polys, lower_layer_offseted)); + + overhang_areas.erase(std::remove_if(overhang_areas.begin(), overhang_areas.end(), + [extrusion_width_scaled](ExPolygon& area) { return offset_ex(area, -0.1 * extrusion_width_scaled).empty(); }), + overhang_areas.end()); + + + ExPolygons overhangs_sharp_tail; + if (is_auto(stype) && g_config_support_sharp_tails) + { + // BBS detect sharp tail + const ExPolygons& lower_layer_sharptails = lower_layer->sharp_tails; + auto& lower_layer_sharptails_height = lower_layer->sharp_tails_height; + for (ExPolygon& expoly : layer->lslices) { + bool is_sharp_tail = false; + // 1. nothing below + // this is a sharp tail region if it's small but non-ignorable + if (!overlaps({ expoly }, lower_polys)) { + is_sharp_tail = expoly.area() < area_thresh_well_supported && !offset_ex(expoly, -0.5 * extrusion_width_scaled).empty(); + } + + if (is_sharp_tail) { + ExPolygons overhang = diff_ex({ expoly }, lower_layer->lslices); + layer->sharp_tails.push_back(expoly); + layer->sharp_tails_height.insert({ &expoly, layer->height }); + append(overhang_areas, overhang); + + if (!overhang.empty()) + has_sharp_tails = true; +#ifdef SUPPORT_TREE_DEBUG_TO_SVG + SVG svg(get_svg_filename(std::to_string(layer->print_z), "sharp_tail"), m_object->bounding_box()); + if (svg.is_opened()) svg.draw(overhang, "yellow"); +#endif + } + } + } + + + if (max_bridge_length > 0 && overhang_areas.size() > 0) { + // do not break bridge for normal part in TreeHybrid + bool break_bridge = !(config.support_style == smsTreeHybrid && area(overhang_areas) > m_support_params.thresh_big_overhang); + m_object->remove_bridges_from_contacts(lower_layer, layer, extrusion_width_scaled, &overhang_areas, max_bridge_length, break_bridge); + } + + SupportLayer* ts_layer = m_object->get_support_layer(layer_nr + m_raft_layers); + for (ExPolygon& poly : overhang_areas) { + if (!offset_ex(poly, -0.1 * extrusion_width_scaled).empty()) + ts_layer->overhang_areas.emplace_back(poly); + } + + + + } + } + ); // end tbb::parallel_for + + // check if the sharp tails should be extended higher + if (is_auto(stype) && g_config_support_sharp_tails && !detect_first_sharp_tail_only) { + for (size_t layer_nr = 0; layer_nr < m_object->layer_count(); layer_nr++) { + if (m_object->print()->canceled()) + break; + + Layer* layer = m_object->get_layer(layer_nr); + SupportLayer* ts_layer = m_object->get_support_layer(layer_nr + m_raft_layers); Layer* lower_layer = layer->lower_layer; - coordf_t lower_layer_offset = layer_nr < enforce_support_layers ? -0.15 * extrusion_width : (float)lower_layer->height / tan(threshold_rad); - coordf_t support_offset_scaled = scale_(lower_layer_offset); - // Filter out areas whose diameter that is smaller than extrusion_width. Do not use offset2() for this purpose! + // skip if: + // 1) if the current layer is already detected as sharp tails + // 2) lower layer has no sharp tails + if (!lower_layer || layer->sharp_tails.empty() == false || lower_layer->sharp_tails.empty() == true) + continue; ExPolygons lower_polys; for (const ExPolygon& expoly : lower_layer->lslices) { if (!offset_ex(expoly, -extrusion_width_scaled / 2).empty()) { lower_polys.emplace_back(expoly); } } - ExPolygons curr_polys; - for (const ExPolygon& expoly : layer->lslices) { - if (!offset_ex(expoly, -extrusion_width_scaled / 2).empty()) { - curr_polys.emplace_back(expoly); - } - } - // normal overhang - ExPolygons lower_layer_offseted = offset_ex(lower_polys, support_offset_scaled, SUPPORT_SURFACES_OFFSET_PARAMETERS); - ExPolygons overhang_areas = std::move(diff_ex(curr_polys, lower_layer_offseted)); + // BBS detect sharp tail + const ExPolygons& lower_layer_sharptails = lower_layer->sharp_tails; + auto& lower_layer_sharptails_height = lower_layer->sharp_tails_height; + for (ExPolygon& expoly : layer->lslices) { + bool is_sharp_tail = false; + float accum_height = layer->height; + do { + // 2. something below + // check whether this is above a sharp tail region. - overhang_areas.erase(std::remove_if(overhang_areas.begin(), overhang_areas.end(), - [extrusion_width_scaled](ExPolygon &area) { return offset_ex(area, -0.1 * extrusion_width_scaled).empty(); }), - overhang_areas.end()); - + // 2.1 If no sharp tail below, this is considered as common region. + ExPolygons supported_by_lower = intersection_ex({ expoly }, lower_layer_sharptails); + if (supported_by_lower.empty()) { + is_sharp_tail = false; + break; + } - ExPolygons overhangs_sharp_tail; - if (is_auto(stype) && g_config_support_sharp_tails) - { + // 2.2 If sharp tail below, check whether it support this region enough. #if 0 - // detect sharp tail and add more supports around - for (auto& lower_region : lower_layer_offseted) { - auto radius = get_extents(lower_region).radius(); - auto out_of_well_supported_region = offset_ex(diff_ex({ lower_region }, regions_well_supported), -extrusion_width_scaled); - auto bbox_size = get_extents(out_of_well_supported_region).size(); - double area_inter = area(intersection_ex({ lower_region }, regions_well_supported)); - if ((area_inter==0 || - ((bbox_size.x()> extrusion_width_scaled && bbox_size.y() > extrusion_width_scaled) && area_inter < area_thresh_well_supported ) ) - /*&& (obj_height - scale_(layer->slice_z)) > get_extents(lower_region).radius() * 5*/) { - auto lower_region_unoffseted = offset_ex(lower_region, -support_offset_scaled); - if (!lower_region_unoffseted.empty()) - lower_region = lower_region_unoffseted.front(); + // judge by area isn't reliable, failure cases include 45 degree rotated cube + float supported_area = area(supported_by_lower); + if (supported_area > area_thresh_well_supported) { + is_sharp_tail = false; + break; } - } - if (!lower_layer_offseted.empty()) { - overhangs_sharp_tail = std::move(diff_ex(curr_polys, lower_layer_offseted)); - //overhangs_sharp_tail = std::move(offset2_ex(overhangs_sharp_tail, -0.1 * extrusion_width_scaled, 0.1 * extrusion_width_scaled)); - overhangs_sharp_tail = diff_ex(overhangs_sharp_tail, overhang_areas); - } - if (!overhangs_sharp_tail.empty()) { - append(layer->sharp_tails, overhangs_sharp_tail); - overhang_areas = union_ex(overhang_areas, overhangs_sharp_tail); - } -#else - // BBS detect sharp tail - const ExPolygons& lower_layer_sharptails = lower_layer->sharp_tails; - auto& lower_layer_sharptails_height = lower_layer->sharp_tails_height; - for (ExPolygon& expoly : layer->lslices) { - bool is_sharp_tail = false; - float accum_height = layer->height; - do { - // 1. nothing below - // this is a sharp tail region if it's small but non-ignorable - if (intersection_ex({expoly}, lower_polys).empty()) { - is_sharp_tail = expoly.area() < area_thresh_well_supported && !offset_ex(expoly,-0.5*extrusion_width_scaled).empty(); - break; - } - - // 2. something below - // check whether this is above a sharp tail region. - - // 2.1 If no sharp tail below, this is considered as common region. - ExPolygons supported_by_lower = intersection_ex({expoly}, lower_layer_sharptails); - if (supported_by_lower.empty()) { - is_sharp_tail = false; - break; - } - - // 2.2 If sharp tail below, check whether it support this region enough. - float supported_area = area(supported_by_lower); - BoundingBox bbox = get_extents(supported_by_lower); -#if 0 - // judge by area isn't reliable, failure cases include 45 degree rotated cube - if (supported_area > area_thresh_well_supported) { - is_sharp_tail = false; - break; - } #endif - if (bbox.size().x() > length_thresh_well_supported && bbox.size().y() > length_thresh_well_supported) { - is_sharp_tail = false; + BoundingBox bbox = get_extents(supported_by_lower); + if (bbox.size().x() > length_thresh_well_supported && bbox.size().y() > length_thresh_well_supported) { + is_sharp_tail = false; + break; + } + + // 2.3 check whether sharp tail exceed the max height + for (auto& lower_sharp_tail_height : lower_layer_sharptails_height) { + if (lower_sharp_tail_height.first->overlaps(expoly)) { + accum_height += lower_sharp_tail_height.second; break; } + } + if (accum_height >= sharp_tail_max_support_height) { + is_sharp_tail = false; + break; + } - // 2.3 check whether sharp tail exceed the max height - for (auto &lower_sharp_tail_height : lower_layer_sharptails_height) { - if (!intersection_ex(*lower_sharp_tail_height.first, expoly).empty()) { - accum_height += lower_sharp_tail_height.second; - break; - } - } - if (accum_height >= sharp_tail_max_support_height) { - is_sharp_tail = false; - break; - } + // 2.4 if the area grows fast than threshold, it get connected to other part or + // it has a sharp slop and will be auto supported. + ExPolygons new_overhang_expolys = diff_ex({ expoly }, lower_layer_sharptails); + if ((get_extents(new_overhang_expolys).size() - get_extents(lower_layer_sharptails).size()).both_comp(Point(scale_(5), scale_(5)), ">") || !offset_ex(new_overhang_expolys, -5.0 * extrusion_width_scaled).empty()) { + is_sharp_tail = false; + break; + } - // 2.4 if the area grows fast than threshold, it get connected to other part or - // it has a sharp slop and will be auto supported. - ExPolygons new_overhang_expolys = diff_ex({expoly}, lower_layer_sharptails); - if ((get_extents(new_overhang_expolys).size()-get_extents(lower_layer_sharptails).size()).both_comp(Point(scale_(5),scale_(5)),">") || !offset_ex(new_overhang_expolys, -5.0 * extrusion_width_scaled).empty()) { - is_sharp_tail = false; - break; - } + // 2.5 mark the expoly as sharptail + is_sharp_tail = true; + } while (0); - // 2.5 mark the expoly as sharptail - is_sharp_tail = true; - } while (0); + if (is_sharp_tail) { + ExPolygons overhang = diff_ex({ expoly }, lower_layer->lslices); + layer->sharp_tails.push_back(expoly); + layer->sharp_tails_height.insert({ &expoly, accum_height }); + append(ts_layer->overhang_areas, overhang); - if (is_sharp_tail) { - ExPolygons overhang = diff_ex({expoly}, lower_layer->lslices); - layer->sharp_tails.push_back(expoly); - layer->sharp_tails_height.insert({ &expoly, accum_height }); - append(overhang_areas, overhang); - - if (!overhang.empty()) - has_sharp_tails = true; + if (!overhang.empty()) + has_sharp_tails = true; #ifdef SUPPORT_TREE_DEBUG_TO_SVG - SVG svg(get_svg_filename(std::to_string(layer->print_z), "sharp_tail"), m_object->bounding_box()); - if (svg.is_opened()) svg.draw(overhang, "yellow"); + SVG svg(get_svg_filename(std::to_string(layer->print_z), "sharp_tail"), m_object->bounding_box()); + if (svg.is_opened()) svg.draw(overhang, "yellow"); #endif - } - } -#endif - } - - - if (max_bridge_length > 0 && overhang_areas.size()>0) { - // do not break bridge for normal part in TreeHybrid - bool break_bridge = !(config.support_style == smsTreeHybrid && area(overhang_areas) > m_support_params.thresh_big_overhang); - m_object->remove_bridges_from_contacts(lower_layer, layer, extrusion_width_scaled, &overhang_areas, max_bridge_length, break_bridge); - } - - SupportLayer* ts_layer = m_object->get_support_layer(layer_nr + m_raft_layers); - for (ExPolygon& poly : overhang_areas) { - if (!offset_ex(poly, -0.1 * extrusion_width_scaled).empty()) - ts_layer->overhang_areas.emplace_back(poly); - } - - if (is_auto(stype) && g_config_remove_small_overhangs) { - for (auto& overhang : ts_layer->overhang_areas) { - find_and_insert_cluster(overhangClusters, overhang2clusterInd, overhang, layer_nr, extrusion_width_scaled); - } - } - - if (is_auto(stype) && /*g_config_support_sharp_tails*/0) - { // update well supported regions - ExPolygons regions_well_supported2; - // regions intersects with lower regions_well_supported or large support are also well supported - auto inters = intersection_ex(layer->lslices, regions_well_supported); - auto inters2 = intersection_ex(layer->lslices, ts_layer->overhang_areas); - inters.insert(inters.end(), inters2.begin(), inters2.end()); - for (auto inter : inters) { - auto bbox_size = get_extents(inter).size(); - if (inter.area() >= area_thresh_well_supported - || (bbox_size.x()>length_thresh_well_supported && bbox_size.y()>length_thresh_well_supported) ) - { - auto tmp = offset_ex(inter, support_offset_scaled); - if (!tmp.empty()) { - // if inter is a single line with only 2 valid points, clipper will return empty - regions_well_supported2.emplace_back(std::move(tmp[0])); - } - } } - // experimental: regions high enough is also well supported - for (auto& region : layer->lslices) { - auto cluster = regionClusters[region2clusterInd[®ion]]; - if (layer_nr - cluster.min_layer > thresh_layers_below) - regions_well_supported2.push_back(region); - } - - regions_well_supported = union_ex(regions_well_supported2); -#ifdef SUPPORT_TREE_DEBUG_TO_SVG - if (!regions_well_supported.empty()) { - SVG svg(get_svg_filename(std::to_string(layer->print_z), "regions_well_supported"), m_object->bounding_box()); - if (svg.is_opened()) - svg.draw(regions_well_supported, "yellow"); - } -#endif - } + } + } + } + + // group overhang clusters + for (size_t layer_nr = 0; layer_nr < m_object->layer_count(); layer_nr++) { + if (m_object->print()->canceled()) + break; + SupportLayer* ts_layer = m_object->get_support_layer(layer_nr + m_raft_layers); + for (auto& overhang : ts_layer->overhang_areas) { + find_and_insert_cluster(overhangClusters, overhang, layer_nr, extrusion_width_scaled); } } @@ -1133,7 +1103,7 @@ void TreeSupport::detect_overhangs() bool is_sharp_tail = false; for (size_t layer_id = cluster.min_layer; layer_id <= cluster.max_layer; layer_id++) { Layer* layer = m_object->get_layer(layer_id); - if (!intersection_ex(layer->sharp_tails, cluster.merged_poly).empty()) { + if(overlaps(layer->sharp_tails, cluster.merged_poly)) { is_sharp_tail = true; break; } @@ -2488,21 +2458,6 @@ void TreeSupport::draw_circles(const std::vector>& contact_no char fname[10]; sprintf(fname, "%d_%.2f", layer_nr, ts_layer->print_z); draw_contours_and_nodes_to_svg("", base_areas, roof_areas, roof_1st_layer, {}, {}, get_svg_filename(fname, "circles"), {"base", "roof", "roof1st"}); } - - // export layer & print_z log - std::ofstream draw_circles_layer_out; - draw_circles_layer_out.open("./SVG/layer_heights_draw_circles.txt"); - if (draw_circles_layer_out.is_open()) { - for (int layer_nr = m_object->layer_count() - 1; layer_nr > 0; layer_nr--) { - SupportLayer* ts_layer = m_object->get_support_layer(layer_nr + m_raft_layers); - ExPolygons& base_areas = ts_layer->base_areas; - ExPolygons& roof_areas = ts_layer->roof_areas; - ExPolygons& roof_1st_layer = ts_layer->roof_1st_layer; - ExPolygons& floor_areas = ts_layer->floor_areas; - if (base_areas.empty() && roof_areas.empty() && roof_1st_layer.empty()) continue; - draw_circles_layer_out << layer_nr << " " << ts_layer->print_z << " " << ts_layer->height << std::endl; - } - } #endif // SUPPORT_TREE_DEBUG_TO_SVG SupportLayerPtrs& ts_layers = m_object->support_layers(); @@ -3046,27 +3001,6 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) delete node; } to_free_node_set.clear(); - - // Merge empty contact_nodes layers - - -#ifdef SUPPORT_TREE_DEBUG_TO_SVG - // export all print_z and layer height into .txt - std::ofstream layer_heights_out; - layer_heights_out.open("./SVG/layer_heights_drop_nodes.txt"); - //layer_heights_out.open("layer_heights_out.txt"); - if (layer_heights_out.is_open()) { - for (int i = 0; i < layer_heights.size(); i++) { - if (contact_nodes[i].empty()) { - layer_heights_out << 0 << " " << 0 << std::endl; - } - else { - layer_heights_out << contact_nodes[i][0]->print_z << " " << contact_nodes[i][0]->height << std::endl; - } - } - layer_heights_out.close(); - } -#endif } void TreeSupport::smooth_nodes(std::vector> &contact_nodes) @@ -3303,31 +3237,23 @@ std::vector TreeSupport::plan_layer_heights(std::vector= 0; i--) { - if (layer_heights[i].height < EPSILON) continue; - for (int j = i - 1; j >= 0; j--) { + // fill in next_layer_nr + int i = layer_heights.size() - 1, j = i; + for (; j >= 0; i = j) { + if (layer_heights[i].height < EPSILON) { + j--; + continue; + } + for (j = i - 1; j >= 0; j--) { if (layer_heights[j].height > EPSILON) { layer_heights[i].next_layer_nr = j; break; } } + BOOST_LOG_TRIVIAL(info) << "plan_layer_heights print_z, height, layer_nr->next_layer_nr: " << layer_heights[i].print_z << " " << layer_heights[i].height << " " + << i << "->" << layer_heights[i].next_layer_nr << std::endl; } -#ifdef SUPPORT_TREE_DEBUG_TO_SVG - // check bounds - if (1) - { - std::ofstream bounds_out; - bounds_out.open("bounds.txt"); - if (bounds_out.is_open()) { - for (int i = 0; i < bounds.size(); i++) { - bounds_out << bounds[i] << std::endl; - } - } - } -#endif - for (int i = 0; i < layer_heights.size(); i++) { BOOST_LOG_TRIVIAL(info) << "plan_layer_heights print_z, height: "<< layer_heights[i].print_z << " " << layer_heights[i].height << std::endl; } - return layer_heights; } @@ -3573,11 +3499,11 @@ const ExPolygons& TreeSupportData::get_collision(coordf_t radius, size_t layer_n return collision; } -const ExPolygons& TreeSupportData::get_avoidance(coordf_t radius, size_t layer_nr) const +const ExPolygons& TreeSupportData::get_avoidance(coordf_t radius, size_t layer_nr, int recursions) const { profiler.tic(); radius = ceil_radius(radius); - RadiusLayerPair key{radius, layer_nr}; + RadiusLayerPair key{radius, layer_nr, recursions }; const auto it = m_avoidance_cache.find(key); const ExPolygons& avoidance = it != m_avoidance_cache.end() ? it->second : calculate_avoidance(key); @@ -3624,22 +3550,20 @@ coordf_t TreeSupportData::ceil_radius(coordf_t radius) const const ExPolygons& TreeSupportData::calculate_collision(const RadiusLayerPair& key) const { - const auto& radius = key.first; - const auto& layer_nr = key.second; + assert(key.layer_nr < m_layer_outlines.size()); - assert(layer_nr < m_layer_outlines.size()); - - ExPolygons collision_areas = std::move(offset_ex(m_layer_outlines[layer_nr], scale_(radius))); + ExPolygons collision_areas = std::move(offset_ex(m_layer_outlines[key.layer_nr], scale_(key.radius))); const auto ret = m_collision_cache.insert({ key, std::move(collision_areas) }); return ret.first->second; } const ExPolygons& TreeSupportData::calculate_avoidance(const RadiusLayerPair& key) const { - const auto& radius = key.first; - const auto& layer_nr = key.second; + const auto& radius = key.radius; + const auto& layer_nr = key.layer_nr; std::pair::iterator,bool> ret; - if (/*is_slim*/1) { + constexpr auto max_recursion_depth = 100; + if (key.recursions <= max_recursion_depth*2) { if (layer_nr == 0) { m_avoidance_cache[key] = get_collision(radius, 0); return m_avoidance_cache[key]; @@ -3650,19 +3574,17 @@ const ExPolygons& TreeSupportData::calculate_avoidance(const RadiusLayerPair& ke // below the current one exists and if not, forcing the calculation of that layer. This may cause another recursion // if the layer at 2N below the current one but we won't exceed our limit unless there are N*N uncalculated layers // below our current one. - constexpr auto max_recursion_depth = 100; size_t layer_nr_next = layer_nr; - for (int i = 0; i < max_recursion_depth && layer_nr_next>0; i++) { - layer_nr_next = layer_heights[layer_nr_next].next_layer_nr; - } + int layers_below; + for (layers_below = 0; layers_below < max_recursion_depth && layer_nr_next > 0; layers_below++) { layer_nr_next = layer_heights[layer_nr_next].next_layer_nr; } // Check if we would exceed the recursion limit by trying to process this layer - if (layer_nr >= max_recursion_depth && m_avoidance_cache.find({radius, layer_nr_next}) == m_avoidance_cache.end()) { + if (layers_below >= max_recursion_depth && m_avoidance_cache.find({radius, layer_nr_next}) == m_avoidance_cache.end()) { // Force the calculation of the layer `max_recursion_depth` below our current one, ignoring the result. - get_avoidance(radius, layer_nr_next); + get_avoidance(radius, layer_nr_next, key.recursions + 1); } layer_nr_next = layer_heights[layer_nr].next_layer_nr; - ExPolygons avoidance_areas = std::move(offset_ex(get_avoidance(radius, layer_nr_next), scale_(-m_max_move))); + ExPolygons avoidance_areas = std::move(offset_ex(get_avoidance(radius, layer_nr_next, key.recursions+1), scale_(-m_max_move))); const ExPolygons &collision = get_collision(radius, layer_nr); avoidance_areas.insert(avoidance_areas.end(), collision.begin(), collision.end()); avoidance_areas = std::move(union_ex(avoidance_areas)); diff --git a/src/libslic3r/TreeSupport.hpp b/src/libslic3r/TreeSupport.hpp index bb7d1ef470..f2498c8de7 100644 --- a/src/libslic3r/TreeSupport.hpp +++ b/src/libslic3r/TreeSupport.hpp @@ -83,7 +83,7 @@ public: * \param layer The layer of interest * \return Polygons object */ - const ExPolygons& get_avoidance(coordf_t radius, size_t layer_idx) const; + const ExPolygons& get_avoidance(coordf_t radius, size_t layer_idx, int recursions=0) const; Polygons get_contours(size_t layer_nr) const; Polygons get_contours_with_holes(size_t layer_nr) const; @@ -94,11 +94,20 @@ private: /*! * \brief Convenience typedef for the keys to the caches */ - using RadiusLayerPair = std::pair; - + struct RadiusLayerPair { + coordf_t radius; + size_t layer_nr; + int recursions; + + }; + struct RadiusLayerPairEquality { + constexpr bool operator()(const RadiusLayerPair& _Left, const RadiusLayerPair& _Right) const { + return _Left.radius == _Right.radius && _Left.layer_nr == _Right.layer_nr; + } + }; struct RadiusLayerPairHash { size_t operator()(const RadiusLayerPair& elem) const { - return std::hash()(elem.first) ^ std::hash()(elem.second * 7919); + return std::hash()(elem.radius) ^ std::hash()(elem.layer_nr * 7919); } }; @@ -168,8 +177,8 @@ public: * coconut: previously stl::unordered_map is used which seems problematic with tbb::parallel_for. * So we change to tbb::concurrent_unordered_map */ - mutable tbb::concurrent_unordered_map m_collision_cache; - mutable tbb::concurrent_unordered_map m_avoidance_cache; + mutable tbb::concurrent_unordered_map m_collision_cache; + mutable tbb::concurrent_unordered_map m_avoidance_cache; friend TreeSupport; }; @@ -203,7 +212,7 @@ public: */ void generate(); - void detect_overhangs(); + void detect_overhangs(bool detect_first_sharp_tail_only=false); enum NodeType { eCircle, From 1a717573329a78f13b1e55b68e996a98abfca07a Mon Sep 17 00:00:00 2001 From: gerrit Date: Fri, 17 Mar 2023 15:22:28 +0800 Subject: [PATCH 095/339] ci: update build version to 01.05.00.61 Change-Id: Icc5832f25e2c533f5ed3eba87ebfb743462c91f5 --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index 6376bb895b..1fa6a9c219 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.05.00.60") +set(SLIC3R_VERSION "01.05.00.61") From 5b2ef59c9f985ebf80790744da705421d2e95719 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Fri, 17 Mar 2023 12:22:11 +0800 Subject: [PATCH 096/339] ENH:rotate object by pressing page down and page up Change-Id: I888f7c71655548085cd15fe88b16087cf115933a --- src/slic3r/GUI/GLCanvas3D.cpp | 64 +++++++++++++++++------------------ 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 6d5d5babd3..469982ae75 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -3336,27 +3336,27 @@ void GLCanvas3D::on_key(wxKeyEvent& evt) else if (m_gizmos.is_enabled() && !m_selection.is_empty() && m_canvas_type != CanvasAssembleView) { translationProcessor.process(evt); - //switch (keyCode) - //{ - //case WXK_NUMPAD_PAGEUP: case WXK_PAGEUP: - //case WXK_NUMPAD_PAGEDOWN: case WXK_PAGEDOWN: - //{ - // do_rotate(L("Tool Rotate")); - // m_gizmos.update_data(); + switch (keyCode) + { + case WXK_NUMPAD_PAGEUP: case WXK_PAGEUP: + case WXK_NUMPAD_PAGEDOWN: case WXK_PAGEDOWN: + { + do_rotate(L("Tool Rotate")); + m_gizmos.update_data(); - // // BBS - // //wxGetApp().obj_manipul()->set_dirty(); - // // Let the plater know that the dragging finished, so a delayed refresh - // // of the scene with the background processing data should be performed. - // post_event(SimpleEvent(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED)); - // // updates camera target constraints - // refresh_camera_scene_box(); - // m_dirty = true; + // BBS + //wxGetApp().obj_manipul()->set_dirty(); + // Let the plater know that the dragging finished, so a delayed refresh + // of the scene with the background processing data should be performed. + post_event(SimpleEvent(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED)); + // updates camera target constraints + refresh_camera_scene_box(); + m_dirty = true; - // break; - //} - //default: { break; } - //} + break; + } + default: { break; } + } } // BBS: add select view logic @@ -3414,22 +3414,22 @@ void GLCanvas3D::on_key(wxKeyEvent& evt) else if (keyCode == WXK_CONTROL) m_dirty = true; else if (m_gizmos.is_enabled() && !m_selection.is_empty() && m_canvas_type != CanvasAssembleView) { -// auto do_rotate = [this](double angle_z_rad) { -// m_selection.start_dragging(); -// m_selection.rotate(Vec3d(0.0, 0.0, angle_z_rad), TransformationType(TransformationType::World_Relative_Joint)); -// m_selection.stop_dragging(); -// m_dirty = true; -//// wxGetApp().obj_manipul()->set_dirty(); -// }; + auto _do_rotate = [this](double angle_z_rad) { + m_selection.start_dragging(); + m_selection.rotate(Vec3d(0.0, 0.0, angle_z_rad), TransformationType(TransformationType::World_Relative_Joint)); + m_selection.stop_dragging(); + m_dirty = true; +// wxGetApp().obj_manipul()->set_dirty(); + }; translationProcessor.process(evt); - //switch (keyCode) - //{ - //case WXK_NUMPAD_PAGEUP: case WXK_PAGEUP: { do_rotate(0.25 * M_PI); break; } - //case WXK_NUMPAD_PAGEDOWN: case WXK_PAGEDOWN: { do_rotate(-0.25 * M_PI); break; } - //default: { break; } - //} + switch (keyCode) + { + case WXK_NUMPAD_PAGEUP: case WXK_PAGEUP: { _do_rotate(0.25 * M_PI); break; } + case WXK_NUMPAD_PAGEDOWN: case WXK_PAGEDOWN: { _do_rotate(-0.25 * M_PI); break; } + default: { break; } + } } else if (!m_gizmos.is_enabled()) { // DoubleSlider navigation in Preview if (m_canvas_type == CanvasPreview) { From 292f7e2c2195aeecc3afcf946a23d4e3c3818b6f Mon Sep 17 00:00:00 2001 From: gerrit Date: Fri, 17 Mar 2023 16:20:31 +0800 Subject: [PATCH 097/339] ci: update build version to 01.05.00.62 Change-Id: I89651401a9397e1221f3367ee6204f8212d70c7b --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index 1fa6a9c219..984bc5b9c2 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.05.00.61") +set(SLIC3R_VERSION "01.05.00.62") From e0317080437c8b384a8527cf7222ecddd723983b Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Fri, 17 Mar 2023 14:30:58 +0800 Subject: [PATCH 098/339] FIX: translation for cut Change-Id: I31f755b857f07e920fe6e50d48f4aa34a53e07da --- bbl/i18n/BambuStudio.pot | 273 ++++++++++++-- bbl/i18n/de/BambuStudio_de.po | 329 ++++++++++++++--- bbl/i18n/en/BambuStudio_en.po | 328 ++++++++++++++--- bbl/i18n/es/BambuStudio_es.po | 330 ++++++++++++++--- bbl/i18n/fr/BambuStudio_fr.po | 328 ++++++++++++++--- bbl/i18n/hu/BambuStudio_hu.po | 328 ++++++++++++++--- bbl/i18n/it/BambuStudio_it.po | 328 ++++++++++++++--- bbl/i18n/ja/BambuStudio_ja.po | 325 +++++++++++++--- bbl/i18n/nl/BambuStudio_nl.po | 329 ++++++++++++++--- bbl/i18n/sv/BambuStudio_sv.po | 328 ++++++++++++++--- bbl/i18n/zh_cn/BambuStudio_zh_CN.po | 366 +++++++++++++++---- resources/i18n/de/BambuStudio.mo | Bin 237297 -> 236171 bytes resources/i18n/en/BambuStudio.mo | Bin 216949 -> 215932 bytes resources/i18n/es/BambuStudio.mo | Bin 236728 -> 235599 bytes resources/i18n/fr/BambuStudio.mo | Bin 232008 -> 230931 bytes resources/i18n/hu/BambuStudio.mo | Bin 229978 -> 228936 bytes resources/i18n/it/BambuStudio.mo | Bin 218569 -> 217534 bytes resources/i18n/ja/BambuStudio.mo | Bin 226158 -> 225122 bytes resources/i18n/nl/BambuStudio.mo | Bin 233507 -> 232383 bytes resources/i18n/sv/BambuStudio.mo | Bin 223441 -> 222375 bytes resources/i18n/zh_cn/BambuStudio.mo | Bin 203983 -> 207895 bytes src/slic3r/GUI/GUI_ObjectList.cpp | 4 +- src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp | 12 +- src/slic3r/GUI/Widgets/Button.cpp | 10 +- 24 files changed, 3079 insertions(+), 539 deletions(-) diff --git a/bbl/i18n/BambuStudio.pot b/bbl/i18n/BambuStudio.pot index 9ba01411d3..b9a26e239c 100644 --- a/bbl/i18n/BambuStudio.pot +++ b/bbl/i18n/BambuStudio.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-24 10:26+0800\n" +"POT-Creation-Date: 2023-03-17 16:18+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -251,9 +251,39 @@ msgstr "" msgid "uniform scale" msgstr "" +msgid "Left click" +msgstr "" + +msgid "Add connector" +msgstr "" + +msgid "Right click" +msgstr "" + +msgid "Remove connector" +msgstr "" + +msgid "Drag" +msgstr "" + +msgid "Move connector" +msgstr "" + +msgid "Add connector to selection" +msgstr "" + +msgid "Remove connector from selection" +msgstr "" + +msgid "Select all connectors" +msgstr "" + msgid "Cut" msgstr "" +msgid "Connector" +msgstr "" + msgid "Movement:" msgstr "" @@ -263,13 +293,25 @@ msgstr "" msgid "Height" msgstr "" -msgid "Keep upper part" +msgid "Add/Edit connectors" msgstr "" -msgid "Keep lower part" +msgid "Upper part" msgstr "" -msgid "Cut to parts" +msgid "Lower part" +msgstr "" + +msgid "Keep" +msgstr "" + +msgid "Place on cut" +msgstr "" + +msgid "Flip" +msgstr "" + +msgid "After cut" msgstr "" msgid "Auto Segment" @@ -281,6 +323,77 @@ msgstr "" msgid "Reset" msgstr "" +msgid "Connectors" +msgstr "" + +msgid "Remove connectors" +msgstr "" + +msgid "Type" +msgstr "" + +msgid "Prizm" +msgstr "" + +msgid "Frustum" +msgstr "" + +msgid "Square" +msgstr "" + +msgid "Hexagon" +msgstr "" + +msgid "Style" +msgstr "" + +msgid "Shape" +msgstr "" + +msgid "Depth ratio" +msgstr "" + +msgid "Confirm connectors" +msgstr "" + +msgid "Cancel" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "Invalid connectors detected" +msgstr "" + +msgid "connector is out of cut contour" +msgstr "" + +msgid "connectors are out of cut contour" +msgstr "" + +msgid "connector is out of object" +msgstr "" + +msgid "connectors is out of object" +msgstr "" + +msgid "Some connectors are overlapped" +msgstr "" + +msgid "" +"Invalid state. \n" +"No one part is selected for keep after cut" +msgstr "" + +msgid "Plug" +msgstr "" + +msgid "Dowel" +msgstr "" + +msgid "Tolerance" +msgstr "" + msgid "Mesh name" msgstr "" @@ -337,9 +450,6 @@ msgstr "" msgid "Can't apply when proccess preview." msgstr "" -msgid "Cancel" -msgstr "" - msgid "Operation already cancelling. Please wait few seconds." msgstr "" @@ -408,9 +518,6 @@ msgstr "" msgid "Notice" msgstr "" -msgid "Warning" -msgstr "" - msgid "Undefined" msgstr "" @@ -825,6 +932,9 @@ msgstr "" msgid "Mirror object" msgstr "" +msgid "Invalidate cut info" +msgstr "" + msgid "Add Primitive" msgstr "" @@ -972,6 +1082,9 @@ msgstr "" msgid "Click the icon to edit color painting of the object" msgstr "" +msgid "Click the icon to shift this object to the bed" +msgstr "" + msgid "Loading file" msgstr "" @@ -992,6 +1105,31 @@ msgid "" "objects." msgstr "" +msgid "Delete connector from object which is a part of cut" +msgstr "" + +msgid "Delete solid part from object which is a part of cut" +msgstr "" + +msgid "Delete negative volume from object which is a part of cut" +msgstr "" + +msgid "" +"To save cut correspondence you can delete all connectors from all related " +"objects." +msgstr "" + +msgid "" +"This action will break a cut correspondence.\n" +"After that model consistency can't be guaranteed .\n" +"\n" +"To manipulate with solid parts or negative volumes you have to invalidate " +"cut infornation first." +msgstr "" + +msgid "Delete all connectors" +msgstr "" + msgid "Deleting the last solid part is not allowed." msgstr "" @@ -1001,6 +1139,30 @@ msgstr "" msgid "Assembly" msgstr "" +msgid "Cut Connectors information" +msgstr "" + +msgid "Object manipulation" +msgstr "" + +msgid "Group manipulation" +msgstr "" + +msgid "Object Settings to modify" +msgstr "" + +msgid "Part Settings to modify" +msgstr "" + +msgid "Layer range Settings to modify" +msgstr "" + +msgid "Part manipulation" +msgstr "" + +msgid "Instance manipulation" +msgstr "" + msgid "Object" msgstr "" @@ -1599,6 +1761,9 @@ msgstr "" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "" +msgid "Other color" +msgstr "" + msgid "Dynamic flow calibration" msgstr "" @@ -1782,7 +1947,7 @@ msgid "" "automatically." msgstr "" -msgid "AMS auto switch filament" +msgid "AMS filament backup" msgstr "" msgid "" @@ -1904,9 +2069,6 @@ msgstr "" msgid "Custom" msgstr "" -msgid "Shape" -msgstr "" - msgid "Load shape from STL..." msgstr "" @@ -2514,12 +2676,6 @@ msgstr "" msgid "Select Plate" msgstr "" -msgid "All Plates" -msgstr "" - -msgid "Stats" -msgstr "" - msgid "Assembly Return" msgstr "" @@ -3294,6 +3450,10 @@ msgstr "" msgid "Cloud Slicing..." msgstr "" +#, possible-c-format, possible-boost-format +msgid "In Cloud Slicing Queue, there are %s tasks ahead." +msgstr "" + #, possible-c-format, possible-boost-format msgid "Layers: %s" msgstr "" @@ -3442,6 +3602,12 @@ msgid_plural "%1$d Objects have color painting." msgstr[0] "" msgstr[1] "" +#, possible-c-format, possible-boost-format +msgid "%1$d object was loaded as a part of cut object." +msgid_plural "%1$d objects were loaded as parts of cut object" +msgstr[0] "" +msgstr[1] "" + msgid "ERROR" msgstr "" @@ -3490,6 +3656,9 @@ msgstr "" msgid "Color painting" msgstr "" +msgid "Cut connectors" +msgstr "" + msgid "Layers" msgstr "" @@ -3786,6 +3955,15 @@ msgstr "" msgid "Save file as:" msgstr "" +msgid "Delete object which is a part of cut object" +msgstr "" + +msgid "" +"You try to delete an object which is a part of a cut object.\n" +"This action will break a cut correspondence.\n" +"After that model consistency can't be guaranteed." +msgstr "" + msgid "The selected object couldn't be split." msgstr "" @@ -4205,6 +4383,9 @@ msgstr "" msgid "Click to pick filament color" msgstr "" +msgid "Please choose the filament colour" +msgstr "" + msgid "Add/Remove presets" msgstr "" @@ -4370,6 +4551,9 @@ msgstr "" msgid "(LAN)" msgstr "" +msgid "Search" +msgstr "" + msgid "My Device" msgstr "" @@ -4602,7 +4786,8 @@ msgstr "" msgid "" "When using support material for the support interface, We recommend the " "following settings:\n" -"0 top z distance, 0 interface spacing, concentric pattern." +"0 top z distance, 0 interface spacing, concentric pattern and disable " +"independent support layer height" msgstr "" msgid "" @@ -4954,11 +5139,6 @@ msgstr "" msgid "Capabilities" msgstr "" -msgid "" -"The P1P printer does not support smooth timelapse, use traditional timelapse " -"instead." -msgstr "" - msgid "Select presets to compare" msgstr "" @@ -6029,6 +6209,15 @@ msgid "" "the brim width is analysed and calculated automatically." msgstr "" +msgid "Outer brim only" +msgstr "" + +msgid "Inner brim only" +msgstr "" + +msgid "Outer and inner brim" +msgstr "" + msgid "Brim-object gap" msgstr "" @@ -6354,9 +6543,6 @@ msgstr "" msgid "g/cm³" msgstr "" -msgid "Type" -msgstr "" - msgid "The material type of filament" msgstr "" @@ -7154,7 +7340,7 @@ msgstr "" msgid "The z gap between the bottom support interface and object" msgstr "" -msgid "Support base" +msgid "Support/raft base" msgstr "" msgid "" @@ -7172,6 +7358,9 @@ msgid "" "Cover the top contact layer of the supports with loops. Disabled by default." msgstr "" +msgid "Support/raft interface" +msgstr "" + msgid "" "Filament to print support interface. \"Default\" means no specific filament " "for support interface and current filament is used" @@ -7237,9 +7426,6 @@ msgstr "" msgid "Speed of support" msgstr "" -msgid "Style" -msgstr "" - msgid "" "Style and shape of the support. For normal support, projecting the supports " "into a regular grid will create more stable supports (default), while snug " @@ -7266,7 +7452,8 @@ msgstr "" msgid "" "Support layer uses layer height independent with object layer. This is to " -"support customizing z-gap and save print time." +"support customizing z-gap and save print time.This option will be invalid " +"when the prime tower is enabled." msgstr "" msgid "Threshold angle" @@ -7573,6 +7760,18 @@ msgstr "" msgid "Update the configs values of 3mf to latest." msgstr "" +msgid "mtcpp" +msgstr "" + +msgid "max triangle count per plate for slicing." +msgstr "" + +msgid "mstpp" +msgstr "" + +msgid "max slicing time per plate in seconds." +msgstr "" + msgid "Output Model Info" msgstr "" @@ -7621,6 +7820,12 @@ msgstr "" msgid "Load filament settings from the specified file list" msgstr "" +msgid "Skip Objects" +msgstr "" + +msgid "Skip some objects in this print" +msgstr "" + msgid "Output directory" msgstr "" diff --git a/bbl/i18n/de/BambuStudio_de.po b/bbl/i18n/de/BambuStudio_de.po index d323b3b3a8..1827f508db 100644 --- a/bbl/i18n/de/BambuStudio_de.po +++ b/bbl/i18n/de/BambuStudio_de.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-24 10:26+0800\n" +"POT-Creation-Date: 2023-03-17 16:18+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -250,9 +250,39 @@ msgstr "%" msgid "uniform scale" msgstr "einheitliche Skala" +msgid "Left click" +msgstr "" + +msgid "Add connector" +msgstr "" + +msgid "Right click" +msgstr "" + +msgid "Remove connector" +msgstr "" + +msgid "Drag" +msgstr "" + +msgid "Move connector" +msgstr "" + +msgid "Add connector to selection" +msgstr "" + +msgid "Remove connector from selection" +msgstr "" + +msgid "Select all connectors" +msgstr "" + msgid "Cut" msgstr "Schneiden" +msgid "Connector" +msgstr "" + msgid "Movement:" msgstr "Bewegung:" @@ -262,14 +292,26 @@ msgstr "Bewegung" msgid "Height" msgstr "Höhe" -msgid "Keep upper part" -msgstr "Oberen Teil behalten" +msgid "Add/Edit connectors" +msgstr "" -msgid "Keep lower part" -msgstr "Unteren Teil behalten" +msgid "Upper part" +msgstr "" -msgid "Cut to parts" -msgstr "In Einzelteile schneiden" +msgid "Lower part" +msgstr "" + +msgid "Keep" +msgstr "" + +msgid "Place on cut" +msgstr "" + +msgid "Flip" +msgstr "" + +msgid "After cut" +msgstr "" msgid "Auto Segment" msgstr "Automatische Segmentierung" @@ -280,6 +322,77 @@ msgstr "Schnitt ausführen" msgid "Reset" msgstr "Zurücksetzen" +msgid "Connectors" +msgstr "" + +msgid "Remove connectors" +msgstr "" + +msgid "Type" +msgstr "Typ" + +msgid "Prizm" +msgstr "" + +msgid "Frustum" +msgstr "" + +msgid "Square" +msgstr "" + +msgid "Hexagon" +msgstr "" + +msgid "Style" +msgstr "Stil" + +msgid "Shape" +msgstr "Form" + +msgid "Depth ratio" +msgstr "" + +msgid "Confirm connectors" +msgstr "" + +msgid "Cancel" +msgstr "Abbrechen" + +msgid "Warning" +msgstr "Warnung" + +msgid "Invalid connectors detected" +msgstr "" + +msgid "connector is out of cut contour" +msgstr "" + +msgid "connectors are out of cut contour" +msgstr "" + +msgid "connector is out of object" +msgstr "" + +msgid "connectors is out of object" +msgstr "" + +msgid "Some connectors are overlapped" +msgstr "" + +msgid "" +"Invalid state. \n" +"No one part is selected for keep after cut" +msgstr "" + +msgid "Plug" +msgstr "" + +msgid "Dowel" +msgstr "" + +msgid "Tolerance" +msgstr "" + msgid "Mesh name" msgstr "Netzname" @@ -340,9 +453,6 @@ msgstr "%1%" msgid "Can't apply when proccess preview." msgstr "Kann nicht angewendet werden, wenn die Vorschau angezeigt wird." -msgid "Cancel" -msgstr "Abbrechen" - msgid "Operation already cancelling. Please wait few seconds." msgstr "Operation wird bereits abgebrochen. Bitte warten Sie einige Sekunden." @@ -411,9 +521,6 @@ msgstr "" msgid "Notice" msgstr "Hinweis" -msgid "Warning" -msgstr "Warnung" - msgid "Undefined" msgstr "Undefiniert" @@ -849,6 +956,9 @@ msgstr "Spiegeln" msgid "Mirror object" msgstr "Objekt spiegeln" +msgid "Invalidate cut info" +msgstr "" + msgid "Add Primitive" msgstr "Primitiv hinzufügen" @@ -1009,6 +1119,9 @@ msgid "Click the icon to edit color painting of the object" msgstr "" "Klicken Sie auf das Symbol, um die Farbgebung des Objekts zu bearbeiten" +msgid "Click the icon to shift this object to the bed" +msgstr "" + msgid "Loading file" msgstr "Lade Datei" @@ -1033,6 +1146,31 @@ msgstr "" "Wechseln Sie in den Einstellungsmodus pro Objekt, um die " "Prozesseinstellungen der ausgewählten Objekte zu bearbeiten." +msgid "Delete connector from object which is a part of cut" +msgstr "" + +msgid "Delete solid part from object which is a part of cut" +msgstr "" + +msgid "Delete negative volume from object which is a part of cut" +msgstr "" + +msgid "" +"To save cut correspondence you can delete all connectors from all related " +"objects." +msgstr "" + +msgid "" +"This action will break a cut correspondence.\n" +"After that model consistency can't be guaranteed .\n" +"\n" +"To manipulate with solid parts or negative volumes you have to invalidate " +"cut infornation first." +msgstr "" + +msgid "Delete all connectors" +msgstr "" + msgid "Deleting the last solid part is not allowed." msgstr "Das Löschen des letzten festen Teils ist nicht erlaubt." @@ -1042,6 +1180,30 @@ msgstr "Das Zielobjekt enthält nur einen Teil und kann nicht geteilt werden." msgid "Assembly" msgstr "Zusammenbau" +msgid "Cut Connectors information" +msgstr "" + +msgid "Object manipulation" +msgstr "" + +msgid "Group manipulation" +msgstr "" + +msgid "Object Settings to modify" +msgstr "" + +msgid "Part Settings to modify" +msgstr "" + +msgid "Layer range Settings to modify" +msgstr "" + +msgid "Part manipulation" +msgstr "" + +msgid "Instance manipulation" +msgstr "" + msgid "Object" msgstr "Objekt" @@ -1689,6 +1851,9 @@ msgstr "Bitte geben Sie einen gültigen Wert ein (K in 0~0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Bitte geben Sie einen gültigen Wert ein (K in 0~0.5, N in 0.6~2.0)" +msgid "Other color" +msgstr "" + msgid "Dynamic flow calibration" msgstr "Dynamische Druckflusskalibrierung" @@ -1912,8 +2077,8 @@ msgstr "" "Filamentinformationen aktualisiert wurden. Während des Drucks wird die " "verbleibende Kapazität automatisch aktualisiert." -msgid "AMS auto switch filament" -msgstr "Filament in AMS automatisch wechseln" +msgid "AMS filament backup" +msgstr "" msgid "" "AMS will continue to another spool with the same properties of filament " @@ -2054,9 +2219,6 @@ msgstr "Kreisförmig" msgid "Custom" msgstr "Benutzerdefiniert" -msgid "Shape" -msgstr "Form" - msgid "Load shape from STL..." msgstr "Lade Form von STL..." @@ -2745,12 +2907,6 @@ msgstr "Montageansicht" msgid "Select Plate" msgstr "Druckplatte wählen" -msgid "All Plates" -msgstr "" - -msgid "Stats" -msgstr "" - msgid "Assembly Return" msgstr "Zurücksetzen der Montage" @@ -3556,6 +3712,10 @@ msgstr "Herunterladen..." msgid "Cloud Slicing..." msgstr "Cloud Slicing..." +#, c-format, boost-format +msgid "In Cloud Slicing Queue, there are %s tasks ahead." +msgstr "" + #, c-format, boost-format msgid "Layers: %s" msgstr "Schichten: %s" @@ -3710,6 +3870,12 @@ msgid_plural "%1$d Objects have color painting." msgstr[0] "%1$d Objekt hat gemalte Farbe." msgstr[1] "%1$d Objekte haben gemalte Farbe." +#, c-format, boost-format +msgid "%1$d object was loaded as a part of cut object." +msgid_plural "%1$d objects were loaded as parts of cut object" +msgstr[0] "" +msgstr[1] "" + msgid "ERROR" msgstr "Fehler" @@ -3758,6 +3924,9 @@ msgstr "Supports malen" msgid "Color painting" msgstr "Farbe malen" +msgid "Cut connectors" +msgstr "" + msgid "Layers" msgstr "Schichten" @@ -4098,6 +4267,15 @@ msgstr "Exportiere STL Datei:" msgid "Save file as:" msgstr "Speichere Datei als:" +msgid "Delete object which is a part of cut object" +msgstr "" + +msgid "" +"You try to delete an object which is a part of a cut object.\n" +"This action will break a cut correspondence.\n" +"After that model consistency can't be guaranteed." +msgstr "" + msgid "The selected object couldn't be split." msgstr "Das ausgewählte Objekt konnte nicht geteilt werden." @@ -4550,6 +4728,9 @@ msgstr "AMS Filament" msgid "Click to pick filament color" msgstr "Klicken, um die Farbe des Filaments auszuwählen" +msgid "Please choose the filament colour" +msgstr "" + msgid "Add/Remove presets" msgstr "Voreinstellungen hinzufügen/entfernen" @@ -4724,6 +4905,9 @@ msgstr "Offline" msgid "(LAN)" msgstr "" +msgid "Search" +msgstr "" + msgid "My Device" msgstr "Mein Gerät" @@ -5013,11 +5197,9 @@ msgstr "" msgid "" "When using support material for the support interface, We recommend the " "following settings:\n" -"0 top z distance, 0 interface spacing, concentric pattern." +"0 top z distance, 0 interface spacing, concentric pattern and disable " +"independent support layer height" msgstr "" -"Bei der Verwendung von Supportmaterial für die Support-Schnittstelle " -"empfehlen wir die folgenden Einstellungen:\n" -"0 oberer Z-Abstand, 0 Schnittstellenabstand, konzentrisches Muster." msgid "" "When recording timelapse without toolhead, it is recommended to add a " @@ -5425,13 +5607,6 @@ msgstr "Allgemein" msgid "Capabilities" msgstr "Fähigkeiten" -msgid "" -"The P1P printer does not support smooth timelapse, use traditional timelapse " -"instead." -msgstr "" -"Der P1P-Drucker unterstützt keine smoothen Zeitraffer, bitte verwenden Sie " -"stattdessen traditionelle Zeitraffer." - msgid "Select presets to compare" msgstr "" @@ -6661,6 +6836,15 @@ msgid "" "the brim width is analysed and calculated automatically." msgstr "" +msgid "Outer brim only" +msgstr "" + +msgid "Inner brim only" +msgstr "" + +msgid "Outer and inner brim" +msgstr "" + msgid "Brim-object gap" msgstr "Lücke zwischen Rand und Objekt" @@ -7047,9 +7231,6 @@ msgstr "Filamentdichte. Nur für die Statistik" msgid "g/cm³" msgstr "g/cm³" -msgid "Type" -msgstr "Typ" - msgid "The material type of filament" msgstr "Material des Filaments." @@ -7980,8 +8161,8 @@ msgstr "Unterer Z-Abstand" msgid "The z gap between the bottom support interface and object" msgstr "Die Z-Lücke zwischen der unteren Supportschnittstelle und dem Objekt" -msgid "Support base" -msgstr "Supportbasis" +msgid "Support/raft base" +msgstr "" msgid "" "Filament to print support base and raft. \"Default\" means no specific " @@ -8003,6 +8184,9 @@ msgstr "" "Deckt die obere Kontaktschicht der Supports mit Schleifen ab. Standardmäßig " "deaktiviert." +msgid "Support/raft interface" +msgstr "" + msgid "" "Filament to print support interface. \"Default\" means no specific filament " "for support interface and current filament is used" @@ -8077,9 +8261,6 @@ msgstr "" msgid "Speed of support" msgstr "Druckgeschwindigkeit für Supports" -msgid "Style" -msgstr "Stil" - msgid "" "Style and shape of the support. For normal support, projecting the supports " "into a regular grid will create more stable supports (default), while snug " @@ -8114,10 +8295,9 @@ msgstr "Unabhängige Support-Schichthöhe" msgid "" "Support layer uses layer height independent with object layer. This is to " -"support customizing z-gap and save print time." +"support customizing z-gap and save print time.This option will be invalid " +"when the prime tower is enabled." msgstr "" -"Die Supportebene verwendet eine von der Objektebene unabhängige Ebenenhöhe. " -"Dies unterstützt die Anpassung der Z-Lücke und spart Druckzeit." msgid "Threshold angle" msgstr "Schwellenwinkel" @@ -8519,6 +8699,18 @@ msgid "Update the configs values of 3mf to latest." msgstr "" "Aktualisieren Sie die Konfigurationswerte von 3mf auf den neuesten Stand." +msgid "mtcpp" +msgstr "" + +msgid "max triangle count per plate for slicing." +msgstr "" + +msgid "mstpp" +msgstr "" + +msgid "max slicing time per plate in seconds." +msgstr "" + msgid "Output Model Info" msgstr "Ausgabe Modellinformationen" @@ -8567,6 +8759,12 @@ msgstr "Filamenteinstellungen laden" msgid "Load filament settings from the specified file list" msgstr "Filamenteinstellungen aus der angegebenen Dateiliste laden" +msgid "Skip Objects" +msgstr "" + +msgid "Skip some objects in this print" +msgstr "" + msgid "Output directory" msgstr "Ausgabeverzeichnis" @@ -8948,6 +9146,45 @@ msgstr "" "Wussten Sie, dass Sie die Festigkeit des Modells durch mehr Wandschleifen " "und eine höhere Dichte der Füllung verbessern können?" +#~ msgid "Keep upper part" +#~ msgstr "Oberen Teil behalten" + +#~ msgid "Keep lower part" +#~ msgstr "Unteren Teil behalten" + +#~ msgid "Cut to parts" +#~ msgstr "In Einzelteile schneiden" + +#~ msgid "AMS auto switch filament" +#~ msgstr "Filament in AMS automatisch wechseln" + +#~ msgid "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." +#~ msgstr "" +#~ "Bei der Verwendung von Supportmaterial für die Support-Schnittstelle " +#~ "empfehlen wir die folgenden Einstellungen:\n" +#~ "0 oberer Z-Abstand, 0 Schnittstellenabstand, konzentrisches Muster." + +#~ msgid "" +#~ "The P1P printer does not support smooth timelapse, use traditional " +#~ "timelapse instead." +#~ msgstr "" +#~ "Der P1P-Drucker unterstützt keine smoothen Zeitraffer, bitte verwenden " +#~ "Sie stattdessen traditionelle Zeitraffer." + +#~ msgid "Support base" +#~ msgstr "Supportbasis" + +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." +#~ msgstr "" +#~ "Die Supportebene verwendet eine von der Objektebene unabhängige " +#~ "Ebenenhöhe. Dies unterstützt die Anpassung der Z-Lücke und spart " +#~ "Druckzeit." + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/en/BambuStudio_en.po b/bbl/i18n/en/BambuStudio_en.po index 565e27b430..2324280016 100644 --- a/bbl/i18n/en/BambuStudio_en.po +++ b/bbl/i18n/en/BambuStudio_en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-24 10:26+0800\n" +"POT-Creation-Date: 2023-03-17 16:18+0800\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -245,9 +245,39 @@ msgstr "%" msgid "uniform scale" msgstr "Uniform scale" +msgid "Left click" +msgstr "" + +msgid "Add connector" +msgstr "" + +msgid "Right click" +msgstr "" + +msgid "Remove connector" +msgstr "" + +msgid "Drag" +msgstr "" + +msgid "Move connector" +msgstr "" + +msgid "Add connector to selection" +msgstr "" + +msgid "Remove connector from selection" +msgstr "" + +msgid "Select all connectors" +msgstr "" + msgid "Cut" msgstr "Cut" +msgid "Connector" +msgstr "" + msgid "Movement:" msgstr "Movement:" @@ -257,14 +287,26 @@ msgstr "Movement" msgid "Height" msgstr "Height" -msgid "Keep upper part" -msgstr "Keep upper part" +msgid "Add/Edit connectors" +msgstr "" -msgid "Keep lower part" -msgstr "Keep lower part" +msgid "Upper part" +msgstr "" -msgid "Cut to parts" -msgstr "Cut to parts" +msgid "Lower part" +msgstr "" + +msgid "Keep" +msgstr "" + +msgid "Place on cut" +msgstr "" + +msgid "Flip" +msgstr "" + +msgid "After cut" +msgstr "" msgid "Auto Segment" msgstr "Auto Segment" @@ -275,6 +317,77 @@ msgstr "Perform cut" msgid "Reset" msgstr "Reset" +msgid "Connectors" +msgstr "" + +msgid "Remove connectors" +msgstr "" + +msgid "Type" +msgstr "Type" + +msgid "Prizm" +msgstr "" + +msgid "Frustum" +msgstr "" + +msgid "Square" +msgstr "" + +msgid "Hexagon" +msgstr "" + +msgid "Style" +msgstr "Style" + +msgid "Shape" +msgstr "Shape" + +msgid "Depth ratio" +msgstr "" + +msgid "Confirm connectors" +msgstr "" + +msgid "Cancel" +msgstr "Cancel" + +msgid "Warning" +msgstr "Warning" + +msgid "Invalid connectors detected" +msgstr "" + +msgid "connector is out of cut contour" +msgstr "" + +msgid "connectors are out of cut contour" +msgstr "" + +msgid "connector is out of object" +msgstr "" + +msgid "connectors is out of object" +msgstr "" + +msgid "Some connectors are overlapped" +msgstr "" + +msgid "" +"Invalid state. \n" +"No one part is selected for keep after cut" +msgstr "" + +msgid "Plug" +msgstr "" + +msgid "Dowel" +msgstr "" + +msgid "Tolerance" +msgstr "" + msgid "Mesh name" msgstr "Mesh name" @@ -334,9 +447,6 @@ msgstr "%1%" msgid "Can't apply when proccess preview." msgstr "Unable to apply when processing preview" -msgid "Cancel" -msgstr "Cancel" - msgid "Operation already cancelling. Please wait few seconds." msgstr "Operation already cancelling. Please wait few seconds." @@ -405,9 +515,6 @@ msgstr "" msgid "Notice" msgstr "Notice" -msgid "Warning" -msgstr "Warning" - msgid "Undefined" msgstr "Undefined" @@ -835,6 +942,9 @@ msgstr "Mirror" msgid "Mirror object" msgstr "Mirror object" +msgid "Invalidate cut info" +msgstr "" + msgid "Add Primitive" msgstr "Add Primitive" @@ -982,6 +1092,9 @@ msgstr "Click the icon to edit support painting of the object" msgid "Click the icon to edit color painting of the object" msgstr "Click the icon to edit color painting for the object" +msgid "Click the icon to shift this object to the bed" +msgstr "" + msgid "Loading file" msgstr "Loading file" @@ -1004,6 +1117,31 @@ msgstr "" "Switch to per-object setting mode to edit process settings of selected " "objects." +msgid "Delete connector from object which is a part of cut" +msgstr "" + +msgid "Delete solid part from object which is a part of cut" +msgstr "" + +msgid "Delete negative volume from object which is a part of cut" +msgstr "" + +msgid "" +"To save cut correspondence you can delete all connectors from all related " +"objects." +msgstr "" + +msgid "" +"This action will break a cut correspondence.\n" +"After that model consistency can't be guaranteed .\n" +"\n" +"To manipulate with solid parts or negative volumes you have to invalidate " +"cut infornation first." +msgstr "" + +msgid "Delete all connectors" +msgstr "" + msgid "Deleting the last solid part is not allowed." msgstr "Deleting the last solid part is not allowed." @@ -1013,6 +1151,30 @@ msgstr "The target object contains only one part and cannot be split." msgid "Assembly" msgstr "Assembly" +msgid "Cut Connectors information" +msgstr "" + +msgid "Object manipulation" +msgstr "" + +msgid "Group manipulation" +msgstr "" + +msgid "Object Settings to modify" +msgstr "" + +msgid "Part Settings to modify" +msgstr "" + +msgid "Layer range Settings to modify" +msgstr "" + +msgid "Part manipulation" +msgstr "" + +msgid "Instance manipulation" +msgstr "" + msgid "Object" msgstr "Object" @@ -1646,6 +1808,9 @@ msgstr "Please input a valid value (K in 0~0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" +msgid "Other color" +msgstr "" + msgid "Dynamic flow calibration" msgstr "Dynamic flow calibration" @@ -1860,8 +2025,8 @@ msgstr "" "info is updated. During printing, remaining capacity will be updated " "automatically." -msgid "AMS auto switch filament" -msgstr "AMS auto switch filament" +msgid "AMS filament backup" +msgstr "" msgid "" "AMS will continue to another spool with the same properties of filament " @@ -1999,9 +2164,6 @@ msgstr "Circular" msgid "Custom" msgstr "Custom" -msgid "Shape" -msgstr "Shape" - msgid "Load shape from STL..." msgstr "Load shape from STL..." @@ -2674,12 +2836,6 @@ msgstr "Assembly View" msgid "Select Plate" msgstr "Select Plate" -msgid "All Plates" -msgstr "" - -msgid "Stats" -msgstr "" - msgid "Assembly Return" msgstr "Assembly Return" @@ -3478,6 +3634,10 @@ msgstr "Downloading..." msgid "Cloud Slicing..." msgstr "Cloud Slicing..." +#, c-format, boost-format +msgid "In Cloud Slicing Queue, there are %s tasks ahead." +msgstr "" + #, c-format, boost-format msgid "Layers: %s" msgstr "Layers: %s" @@ -3628,6 +3788,12 @@ msgid_plural "%1$d Objects have color painting." msgstr[0] "%1$d Object has color painting." msgstr[1] "%1$d Objects have color painting." +#, c-format, boost-format +msgid "%1$d object was loaded as a part of cut object." +msgid_plural "%1$d objects were loaded as parts of cut object" +msgstr[0] "" +msgstr[1] "" + msgid "ERROR" msgstr "ERROR" @@ -3676,6 +3842,9 @@ msgstr "Support Painting" msgid "Color painting" msgstr "Color Painting" +msgid "Cut connectors" +msgstr "" + msgid "Layers" msgstr "Layers" @@ -4005,6 +4174,15 @@ msgstr "Export STL file:" msgid "Save file as:" msgstr "Save file as" +msgid "Delete object which is a part of cut object" +msgstr "" + +msgid "" +"You try to delete an object which is a part of a cut object.\n" +"This action will break a cut correspondence.\n" +"After that model consistency can't be guaranteed." +msgstr "" + msgid "The selected object couldn't be split." msgstr "The selected object couldn't be split." @@ -4444,6 +4622,9 @@ msgstr "AMS filament" msgid "Click to pick filament color" msgstr "Click to select filament color" +msgid "Please choose the filament colour" +msgstr "" + msgid "Add/Remove presets" msgstr "Add/Remove presets" @@ -4610,6 +4791,9 @@ msgstr "Offline" msgid "(LAN)" msgstr "" +msgid "Search" +msgstr "" + msgid "My Device" msgstr "My Device" @@ -4879,11 +5063,9 @@ msgstr "" msgid "" "When using support material for the support interface, We recommend the " "following settings:\n" -"0 top z distance, 0 interface spacing, concentric pattern." +"0 top z distance, 0 interface spacing, concentric pattern and disable " +"independent support layer height" msgstr "" -"When using support material for the support interface, We recommend the " -"following settings:\n" -"0 top z distance, 0 interface spacing, concentric pattern." msgid "" "When recording timelapse without toolhead, it is recommended to add a " @@ -5276,13 +5458,6 @@ msgstr "General" msgid "Capabilities" msgstr "Capabilities" -msgid "" -"The P1P printer does not support smooth timelapse, use traditional timelapse " -"instead." -msgstr "" -"The P1P printer does not support smooth timelapse, please use traditional " -"timelapse instead." - msgid "Select presets to compare" msgstr "" @@ -6472,6 +6647,15 @@ msgid "" "the brim width is analysed and calculated automatically." msgstr "" +msgid "Outer brim only" +msgstr "" + +msgid "Inner brim only" +msgstr "" + +msgid "Outer and inner brim" +msgstr "" + msgid "Brim-object gap" msgstr "Brim-object gap" @@ -6854,9 +7038,6 @@ msgstr "Filament density, for statistical purposes only." msgid "g/cm³" msgstr "g/cm³" -msgid "Type" -msgstr "Type" - msgid "The material type of filament" msgstr "Filament material type" @@ -7767,8 +7948,8 @@ msgstr "Bottom Z distance" msgid "The z gap between the bottom support interface and object" msgstr "The z gap between the bottom support interface and object" -msgid "Support base" -msgstr "Support base" +msgid "Support/raft base" +msgstr "" msgid "" "Filament to print support base and raft. \"Default\" means no specific " @@ -7789,6 +7970,9 @@ msgstr "" "This covers the top contact layer of the supports with loops. It is disabled " "by default." +msgid "Support/raft interface" +msgstr "" + msgid "" "Filament to print support interface. \"Default\" means no specific filament " "for support interface and current filament is used" @@ -7860,9 +8044,6 @@ msgstr "Expand (+) or shrink (-) the horizontal span of normal support" msgid "Speed of support" msgstr "This is the speed for support." -msgid "Style" -msgstr "Style" - msgid "" "Style and shape of the support. For normal support, projecting the supports " "into a regular grid will create more stable supports (default), while snug " @@ -7895,10 +8076,9 @@ msgstr "Independent support layer height" msgid "" "Support layer uses layer height independent with object layer. This is to " -"support customizing z-gap and save print time." +"support customizing z-gap and save print time.This option will be invalid " +"when the prime tower is enabled." msgstr "" -"Support layer uses layer height independent with object layer. This is to " -"support customizing z-gap and save print time." msgid "Threshold angle" msgstr "Threshold angle" @@ -8284,6 +8464,18 @@ msgstr "UpToDate" msgid "Update the configs values of 3mf to latest." msgstr "Update the configs values of 3mf to latest." +msgid "mtcpp" +msgstr "" + +msgid "max triangle count per plate for slicing." +msgstr "" + +msgid "mstpp" +msgstr "" + +msgid "max slicing time per plate in seconds." +msgstr "" + msgid "Output Model Info" msgstr "Output Model Info" @@ -8332,6 +8524,12 @@ msgstr "Load Filament Settings" msgid "Load filament settings from the specified file list" msgstr "Load filament settings from the specified file list" +msgid "Skip Objects" +msgstr "" + +msgid "Skip some objects in this print" +msgstr "" + msgid "Output directory" msgstr "Output directory" @@ -8704,6 +8902,44 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" +#~ msgid "Keep upper part" +#~ msgstr "Keep upper part" + +#~ msgid "Keep lower part" +#~ msgstr "Keep lower part" + +#~ msgid "Cut to parts" +#~ msgstr "Cut to parts" + +#~ msgid "AMS auto switch filament" +#~ msgstr "AMS auto switch filament" + +#~ msgid "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." +#~ msgstr "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." + +#~ msgid "" +#~ "The P1P printer does not support smooth timelapse, use traditional " +#~ "timelapse instead." +#~ msgstr "" +#~ "The P1P printer does not support smooth timelapse, please use traditional " +#~ "timelapse instead." + +#~ msgid "Support base" +#~ msgstr "Support base" + +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." +#~ msgstr "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/es/BambuStudio_es.po b/bbl/i18n/es/BambuStudio_es.po index 3432d1c027..0e7126267a 100644 --- a/bbl/i18n/es/BambuStudio_es.po +++ b/bbl/i18n/es/BambuStudio_es.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-24 10:26+0800\n" +"POT-Creation-Date: 2023-03-17 16:18+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -250,9 +250,39 @@ msgstr "%" msgid "uniform scale" msgstr "Escala uniforme" +msgid "Left click" +msgstr "" + +msgid "Add connector" +msgstr "" + +msgid "Right click" +msgstr "" + +msgid "Remove connector" +msgstr "" + +msgid "Drag" +msgstr "" + +msgid "Move connector" +msgstr "" + +msgid "Add connector to selection" +msgstr "" + +msgid "Remove connector from selection" +msgstr "" + +msgid "Select all connectors" +msgstr "" + msgid "Cut" msgstr "Cortar" +msgid "Connector" +msgstr "" + msgid "Movement:" msgstr "Movimiento:" @@ -262,14 +292,26 @@ msgstr "Movimiento" msgid "Height" msgstr "Altura" -msgid "Keep upper part" -msgstr "Mantener la parte superior" +msgid "Add/Edit connectors" +msgstr "" -msgid "Keep lower part" -msgstr "Mantener la parte inferior" +msgid "Upper part" +msgstr "" -msgid "Cut to parts" -msgstr "Cortar por partes" +msgid "Lower part" +msgstr "" + +msgid "Keep" +msgstr "" + +msgid "Place on cut" +msgstr "" + +msgid "Flip" +msgstr "" + +msgid "After cut" +msgstr "" msgid "Auto Segment" msgstr "Segmento Automático" @@ -280,6 +322,77 @@ msgstr "Realizar corte" msgid "Reset" msgstr "Reiniciar" +msgid "Connectors" +msgstr "" + +msgid "Remove connectors" +msgstr "" + +msgid "Type" +msgstr "Tipo" + +msgid "Prizm" +msgstr "" + +msgid "Frustum" +msgstr "" + +msgid "Square" +msgstr "" + +msgid "Hexagon" +msgstr "" + +msgid "Style" +msgstr "Estilo" + +msgid "Shape" +msgstr "Forma" + +msgid "Depth ratio" +msgstr "" + +msgid "Confirm connectors" +msgstr "" + +msgid "Cancel" +msgstr "Cancelar" + +msgid "Warning" +msgstr "Peligro" + +msgid "Invalid connectors detected" +msgstr "" + +msgid "connector is out of cut contour" +msgstr "" + +msgid "connectors are out of cut contour" +msgstr "" + +msgid "connector is out of object" +msgstr "" + +msgid "connectors is out of object" +msgstr "" + +msgid "Some connectors are overlapped" +msgstr "" + +msgid "" +"Invalid state. \n" +"No one part is selected for keep after cut" +msgstr "" + +msgid "Plug" +msgstr "" + +msgid "Dowel" +msgstr "" + +msgid "Tolerance" +msgstr "" + msgid "Mesh name" msgstr "Nombre de la malla" @@ -340,9 +453,6 @@ msgstr "%1%" msgid "Can't apply when proccess preview." msgstr "No se puede aplicar cuando la vista previa del proceso." -msgid "Cancel" -msgstr "Cancelar" - msgid "Operation already cancelling. Please wait few seconds." msgstr "Operación ya cancelada. Por favor, espere unos segundos." @@ -411,9 +521,6 @@ msgstr "" msgid "Notice" msgstr "Date cuenta" -msgid "Warning" -msgstr "Peligro" - msgid "Undefined" msgstr "Indefinido" @@ -865,6 +972,9 @@ msgstr "Reflejar" msgid "Mirror object" msgstr "Objeto reflejado" +msgid "Invalidate cut info" +msgstr "" + msgid "Add Primitive" msgstr "Añadir Primitivo" @@ -1022,6 +1132,9 @@ msgstr "Haga clic en el icono para editar la pintura de apoyo del objeto" msgid "Click the icon to edit color painting of the object" msgstr "Haga clic en el icono para editar la pintura de color del objeto" +msgid "Click the icon to shift this object to the bed" +msgstr "" + msgid "Loading file" msgstr "Cargando archivo" @@ -1046,6 +1159,31 @@ msgstr "" "Cambie al modo de configuración por objeto para editar la configuración del " "proceso de los objetos seleccionados." +msgid "Delete connector from object which is a part of cut" +msgstr "" + +msgid "Delete solid part from object which is a part of cut" +msgstr "" + +msgid "Delete negative volume from object which is a part of cut" +msgstr "" + +msgid "" +"To save cut correspondence you can delete all connectors from all related " +"objects." +msgstr "" + +msgid "" +"This action will break a cut correspondence.\n" +"After that model consistency can't be guaranteed .\n" +"\n" +"To manipulate with solid parts or negative volumes you have to invalidate " +"cut infornation first." +msgstr "" + +msgid "Delete all connectors" +msgstr "" + msgid "Deleting the last solid part is not allowed." msgstr "No se permite borrar la última parte sólida." @@ -1055,6 +1193,30 @@ msgstr "El objeto de destino sólo contiene una parte y no se puede dividir." msgid "Assembly" msgstr "Montaje" +msgid "Cut Connectors information" +msgstr "" + +msgid "Object manipulation" +msgstr "" + +msgid "Group manipulation" +msgstr "" + +msgid "Object Settings to modify" +msgstr "" + +msgid "Part Settings to modify" +msgstr "" + +msgid "Layer range Settings to modify" +msgstr "" + +msgid "Part manipulation" +msgstr "" + +msgid "Instance manipulation" +msgstr "" + msgid "Object" msgstr "Objeto" @@ -1755,6 +1917,9 @@ msgstr "Introduzca un valor válido (K en 0~0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Introduzca un valor válido (K en 0~0.5, N en 0.6~2.0)" +msgid "Other color" +msgstr "" + msgid "Dynamic flow calibration" msgstr "Calibración dinámica de flujo" @@ -1980,8 +2145,8 @@ msgstr "" "actualizar la información del filamento. Durante la impresión, la capacidad " "restante se actualizará automáticamente." -msgid "AMS auto switch filament" -msgstr "Cambio automático de filamento AMS" +msgid "AMS filament backup" +msgstr "" msgid "" "AMS will continue to another spool with the same properties of filament " @@ -2122,9 +2287,6 @@ msgstr "Circular" msgid "Custom" msgstr "Personalizado" -msgid "Shape" -msgstr "Forma" - msgid "Load shape from STL..." msgstr "Cargar forma desde STL..." @@ -2829,12 +2991,6 @@ msgstr "Vista de conjunto" msgid "Select Plate" msgstr "Seleccione la placa" -msgid "All Plates" -msgstr "" - -msgid "Stats" -msgstr "" - msgid "Assembly Return" msgstr "Volver a montar" @@ -3647,6 +3803,10 @@ msgstr "Descargando…" msgid "Cloud Slicing..." msgstr "Slicing en la nube..." +#, c-format, boost-format +msgid "In Cloud Slicing Queue, there are %s tasks ahead." +msgstr "" + #, c-format, boost-format msgid "Layers: %s" msgstr "Capas: %s" @@ -3799,6 +3959,12 @@ msgid_plural "%1$d Objects have color painting." msgstr[0] "%1$d El objeto tiene pintura de color." msgstr[1] "%1$d Los objetos tienen pintura de color." +#, c-format, boost-format +msgid "%1$d object was loaded as a part of cut object." +msgid_plural "%1$d objects were loaded as parts of cut object" +msgstr[0] "" +msgstr[1] "" + msgid "ERROR" msgstr "¡Error!" @@ -3849,6 +4015,9 @@ msgstr "Soporte pintado" msgid "Color painting" msgstr "Pintura en color" +msgid "Cut connectors" +msgstr "" + msgid "Layers" msgstr "Capas" @@ -4198,6 +4367,15 @@ msgstr "Exportar archivo STL:" msgid "Save file as:" msgstr "Guardar archivo como:" +msgid "Delete object which is a part of cut object" +msgstr "" + +msgid "" +"You try to delete an object which is a part of a cut object.\n" +"This action will break a cut correspondence.\n" +"After that model consistency can't be guaranteed." +msgstr "" + msgid "The selected object couldn't be split." msgstr "El objeto seleccionado no ha podido ser dividido." @@ -4655,6 +4833,9 @@ msgstr "Filamentos AMS" msgid "Click to pick filament color" msgstr "Haga clic para elegir el color del filamento" +msgid "Please choose the filament colour" +msgstr "" + msgid "Add/Remove presets" msgstr "Añadir/Quitar ajustes preestablecidos" @@ -4831,6 +5012,9 @@ msgstr "Fuera de línea" msgid "(LAN)" msgstr "" +msgid "Search" +msgstr "" + msgid "My Device" msgstr "Mi dispositivo" @@ -5113,11 +5297,9 @@ msgstr "" msgid "" "When using support material for the support interface, We recommend the " "following settings:\n" -"0 top z distance, 0 interface spacing, concentric pattern." +"0 top z distance, 0 interface spacing, concentric pattern and disable " +"independent support layer height" msgstr "" -"Al utilizar material de soporte para la interfaz de soporte, recomendamos " -"los siguientes ajustes:\n" -"Distancia z superior a 0, espaciado de interfaz 0, patrón concéntrico." msgid "" "When recording timelapse without toolhead, it is recommended to add a " @@ -5520,13 +5702,6 @@ msgstr "General" msgid "Capabilities" msgstr "Capacidades" -msgid "" -"The P1P printer does not support smooth timelapse, use traditional timelapse " -"instead." -msgstr "" -"La impresora P1P no admite timelapse fluido; en su lugar, utilice el " -"timelapse tradicional." - msgid "Select presets to compare" msgstr "" @@ -6751,6 +6926,15 @@ msgid "" "the brim width is analysed and calculated automatically." msgstr "" +msgid "Outer brim only" +msgstr "" + +msgid "Inner brim only" +msgstr "" + +msgid "Outer and inner brim" +msgstr "" + msgid "Brim-object gap" msgstr "Espacio borde-objeto" @@ -7139,9 +7323,6 @@ msgstr "Densidad del filamento. Sólo para las estadísticas" msgid "g/cm³" msgstr "g/cm³" -msgid "Type" -msgstr "Tipo" - msgid "The material type of filament" msgstr "El tipo de material del filamento" @@ -8074,8 +8255,8 @@ msgstr "Distancia Z inferior" msgid "The z gap between the bottom support interface and object" msgstr "El espacio z entre la interfaz de soporte inferior y el objeto" -msgid "Support base" -msgstr "Base de soporte" +msgid "Support/raft base" +msgstr "" msgid "" "Filament to print support base and raft. \"Default\" means no specific " @@ -8097,6 +8278,9 @@ msgstr "" "Cubrir la capa de contacto superior de los soportes con bucles. Desactivado " "por defecto." +msgid "Support/raft interface" +msgstr "" + msgid "" "Filament to print support interface. \"Default\" means no specific filament " "for support interface and current filament is used" @@ -8171,9 +8355,6 @@ msgstr "Ampliar (+) o reducir (-) la distancia horizontal de los soportes" msgid "Speed of support" msgstr "Velocidad de la asistencia" -msgid "Style" -msgstr "Estilo" - msgid "" "Style and shape of the support. For normal support, projecting the supports " "into a regular grid will create more stable supports (default), while snug " @@ -8208,11 +8389,9 @@ msgstr "Altura de la capa de soporte independiente" msgid "" "Support layer uses layer height independent with object layer. This is to " -"support customizing z-gap and save print time." +"support customizing z-gap and save print time.This option will be invalid " +"when the prime tower is enabled." msgstr "" -"La capa de soporte utiliza la altura de la capa independientemente de la " -"capa de objetos. Esto es para permitir la personalización de z-gap y ahorrar " -"tiempo de impresión." msgid "Threshold angle" msgstr "Ángulo de umbral" @@ -8610,6 +8789,18 @@ msgstr "Actualizado" msgid "Update the configs values of 3mf to latest." msgstr "Actualice los valores de configuración de 3mf a los más recientes." +msgid "mtcpp" +msgstr "" + +msgid "max triangle count per plate for slicing." +msgstr "" + +msgid "mstpp" +msgstr "" + +msgid "max slicing time per plate in seconds." +msgstr "" + msgid "Output Model Info" msgstr "Información del modelo de salida" @@ -8659,6 +8850,12 @@ msgid "Load filament settings from the specified file list" msgstr "" "Cargar los ajustes del filamento desde la lista de archivos especificada" +msgid "Skip Objects" +msgstr "" + +msgid "Skip some objects in this print" +msgstr "" + msgid "Output directory" msgstr "Directorio de salida" @@ -9034,6 +9231,45 @@ msgstr "" "¿Sabía que puede utilizar más bucles de pared y una densidad de relleno " "dispersa más alta para mejorar la resistencia del modelo?" +#~ msgid "Keep upper part" +#~ msgstr "Mantener la parte superior" + +#~ msgid "Keep lower part" +#~ msgstr "Mantener la parte inferior" + +#~ msgid "Cut to parts" +#~ msgstr "Cortar por partes" + +#~ msgid "AMS auto switch filament" +#~ msgstr "Cambio automático de filamento AMS" + +#~ msgid "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." +#~ msgstr "" +#~ "Al utilizar material de soporte para la interfaz de soporte, recomendamos " +#~ "los siguientes ajustes:\n" +#~ "Distancia z superior a 0, espaciado de interfaz 0, patrón concéntrico." + +#~ msgid "" +#~ "The P1P printer does not support smooth timelapse, use traditional " +#~ "timelapse instead." +#~ msgstr "" +#~ "La impresora P1P no admite timelapse fluido; en su lugar, utilice el " +#~ "timelapse tradicional." + +#~ msgid "Support base" +#~ msgstr "Base de soporte" + +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." +#~ msgstr "" +#~ "La capa de soporte utiliza la altura de la capa independientemente de la " +#~ "capa de objetos. Esto es para permitir la personalización de z-gap y " +#~ "ahorrar tiempo de impresión." + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/fr/BambuStudio_fr.po b/bbl/i18n/fr/BambuStudio_fr.po index b58eb2b398..675f5aa8a3 100644 --- a/bbl/i18n/fr/BambuStudio_fr.po +++ b/bbl/i18n/fr/BambuStudio_fr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-24 10:26+0800\n" +"POT-Creation-Date: 2023-03-17 16:18+0800\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -246,9 +246,39 @@ msgstr "%" msgid "uniform scale" msgstr "échelle uniforme" +msgid "Left click" +msgstr "" + +msgid "Add connector" +msgstr "" + +msgid "Right click" +msgstr "" + +msgid "Remove connector" +msgstr "" + +msgid "Drag" +msgstr "" + +msgid "Move connector" +msgstr "" + +msgid "Add connector to selection" +msgstr "" + +msgid "Remove connector from selection" +msgstr "" + +msgid "Select all connectors" +msgstr "" + msgid "Cut" msgstr "Couper" +msgid "Connector" +msgstr "" + msgid "Movement:" msgstr "Mouvement:" @@ -258,14 +288,26 @@ msgstr "Movement" msgid "Height" msgstr "Height" -msgid "Keep upper part" -msgstr "Conserver la partie supérieure" +msgid "Add/Edit connectors" +msgstr "" -msgid "Keep lower part" -msgstr "Garder la partie inférieure" +msgid "Upper part" +msgstr "" -msgid "Cut to parts" -msgstr "Couper la sélection dans le presse-papiers" +msgid "Lower part" +msgstr "" + +msgid "Keep" +msgstr "" + +msgid "Place on cut" +msgstr "" + +msgid "Flip" +msgstr "" + +msgid "After cut" +msgstr "" msgid "Auto Segment" msgstr "Segmentation automatique" @@ -276,6 +318,77 @@ msgstr "Effectuer la coupe" msgid "Reset" msgstr "Réinitialiser" +msgid "Connectors" +msgstr "" + +msgid "Remove connectors" +msgstr "" + +msgid "Type" +msgstr "Type" + +msgid "Prizm" +msgstr "" + +msgid "Frustum" +msgstr "" + +msgid "Square" +msgstr "" + +msgid "Hexagon" +msgstr "" + +msgid "Style" +msgstr "Style" + +msgid "Shape" +msgstr "Forme" + +msgid "Depth ratio" +msgstr "" + +msgid "Confirm connectors" +msgstr "" + +msgid "Cancel" +msgstr "Annuler" + +msgid "Warning" +msgstr "Avertissement" + +msgid "Invalid connectors detected" +msgstr "" + +msgid "connector is out of cut contour" +msgstr "" + +msgid "connectors are out of cut contour" +msgstr "" + +msgid "connector is out of object" +msgstr "" + +msgid "connectors is out of object" +msgstr "" + +msgid "Some connectors are overlapped" +msgstr "" + +msgid "" +"Invalid state. \n" +"No one part is selected for keep after cut" +msgstr "" + +msgid "Plug" +msgstr "" + +msgid "Dowel" +msgstr "" + +msgid "Tolerance" +msgstr "" + msgid "Mesh name" msgstr "Nom du maillage" @@ -336,9 +449,6 @@ msgstr "%1%" msgid "Can't apply when proccess preview." msgstr "Ne peut pas s'appliquer lors de l'aperçu du processus." -msgid "Cancel" -msgstr "Annuler" - msgid "Operation already cancelling. Please wait few seconds." msgstr "Opération déjà annulée. Veuillez patienter quelques secondes." @@ -407,9 +517,6 @@ msgstr "" msgid "Notice" msgstr "Remarquer" -msgid "Warning" -msgstr "Avertissement" - msgid "Undefined" msgstr "erreur indéfinie" @@ -844,6 +951,9 @@ msgstr "Miroir" msgid "Mirror object" msgstr "Symétriser l'Objet" +msgid "Invalidate cut info" +msgstr "" + msgid "Add Primitive" msgstr "Ajouter une primitive" @@ -993,6 +1103,9 @@ msgstr "Cliquez sur l'icône pour modifier la peinture de support de l'objet" msgid "Click the icon to edit color painting of the object" msgstr "Cliquez sur l'icône pour modifier la couleur de peinture de l'objet" +msgid "Click the icon to shift this object to the bed" +msgstr "" + msgid "Loading file" msgstr "Chargement du fichier" @@ -1017,6 +1130,31 @@ msgstr "" "Switch to per-object setting mode to edit process settings of selected " "objects." +msgid "Delete connector from object which is a part of cut" +msgstr "" + +msgid "Delete solid part from object which is a part of cut" +msgstr "" + +msgid "Delete negative volume from object which is a part of cut" +msgstr "" + +msgid "" +"To save cut correspondence you can delete all connectors from all related " +"objects." +msgstr "" + +msgid "" +"This action will break a cut correspondence.\n" +"After that model consistency can't be guaranteed .\n" +"\n" +"To manipulate with solid parts or negative volumes you have to invalidate " +"cut infornation first." +msgstr "" + +msgid "Delete all connectors" +msgstr "" + msgid "Deleting the last solid part is not allowed." msgstr "La suppression de la dernière partie solide n'est pas autorisée." @@ -1027,6 +1165,30 @@ msgstr "" msgid "Assembly" msgstr "Assemblé" +msgid "Cut Connectors information" +msgstr "" + +msgid "Object manipulation" +msgstr "" + +msgid "Group manipulation" +msgstr "" + +msgid "Object Settings to modify" +msgstr "" + +msgid "Part Settings to modify" +msgstr "" + +msgid "Layer range Settings to modify" +msgstr "" + +msgid "Part manipulation" +msgstr "" + +msgid "Instance manipulation" +msgstr "" + msgid "Object" msgstr "Objet" @@ -1663,6 +1825,9 @@ msgstr "Please input a valid value (K in 0~0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" +msgid "Other color" +msgstr "" + msgid "Dynamic flow calibration" msgstr "Dynamic flow calibration" @@ -1879,8 +2044,8 @@ msgstr "" "info is updated. During printing, remaining capacity will be updated " "automatically." -msgid "AMS auto switch filament" -msgstr "AMS auto switch filament" +msgid "AMS filament backup" +msgstr "" msgid "" "AMS will continue to another spool with the same properties of filament " @@ -2017,9 +2182,6 @@ msgstr "Rectangulaire" msgid "Custom" msgstr "Personnalisé" -msgid "Shape" -msgstr "Forme" - msgid "Load shape from STL..." msgstr "Charger la forme depuis STL..." @@ -2683,12 +2845,6 @@ msgstr "Vue de l'assemblage" msgid "Select Plate" msgstr "Sélectionner la plaque" -msgid "All Plates" -msgstr "" - -msgid "Stats" -msgstr "" - msgid "Assembly Return" msgstr "Retour d'assemblage" @@ -3488,6 +3644,10 @@ msgstr "Downloading..." msgid "Cloud Slicing..." msgstr "Cloud Slicing..." +#, c-format, boost-format +msgid "In Cloud Slicing Queue, there are %s tasks ahead." +msgstr "" + #, c-format, boost-format msgid "Layers: %s" msgstr "Layers: %s" @@ -3638,6 +3798,12 @@ msgid_plural "%1$d Objects have color painting." msgstr[0] "%1$d L'objet est peint en couleur." msgstr[1] "%1$d L'objets sont peints en couleur." +#, c-format, boost-format +msgid "%1$d object was loaded as a part of cut object." +msgid_plural "%1$d objects were loaded as parts of cut object" +msgstr[0] "" +msgstr[1] "" + msgid "ERROR" msgstr "ERROR" @@ -3687,6 +3853,9 @@ msgstr "Soutenir la peinture" msgid "Color painting" msgstr "Peinture couleur" +msgid "Cut connectors" +msgstr "" + msgid "Layers" msgstr "Couches" @@ -4018,6 +4187,15 @@ msgstr "Exporter le fichier STL :" msgid "Save file as:" msgstr "Enregistrer le fichier sous :" +msgid "Delete object which is a part of cut object" +msgstr "" + +msgid "" +"You try to delete an object which is a part of a cut object.\n" +"This action will break a cut correspondence.\n" +"After that model consistency can't be guaranteed." +msgstr "" + msgid "The selected object couldn't be split." msgstr "L'objet sélectionné n'a pas pu être divisé." @@ -4466,6 +4644,9 @@ msgstr "Filaments AMS" msgid "Click to pick filament color" msgstr "Cliquez pour choisir la couleur du filament" +msgid "Please choose the filament colour" +msgstr "" + msgid "Add/Remove presets" msgstr "Ajouter/supprimer des préréglages" @@ -4638,6 +4819,9 @@ msgstr "Hors ligne" msgid "(LAN)" msgstr "" +msgid "Search" +msgstr "" + msgid "My Device" msgstr "Mon appareil" @@ -4915,11 +5099,9 @@ msgstr "" msgid "" "When using support material for the support interface, We recommend the " "following settings:\n" -"0 top z distance, 0 interface spacing, concentric pattern." +"0 top z distance, 0 interface spacing, concentric pattern and disable " +"independent support layer height" msgstr "" -"When using support material for the support interface, We recommend the " -"following settings:\n" -"0 top z distance, 0 interface spacing, concentric pattern." msgid "" "When recording timelapse without toolhead, it is recommended to add a " @@ -5320,13 +5502,6 @@ msgstr "Général" msgid "Capabilities" msgstr "Capacités" -msgid "" -"The P1P printer does not support smooth timelapse, use traditional timelapse " -"instead." -msgstr "" -"The P1P printer does not support smooth timelapse, please use traditional " -"timelapse instead." - msgid "Select presets to compare" msgstr "" @@ -6543,6 +6718,15 @@ msgid "" "the brim width is analysed and calculated automatically." msgstr "" +msgid "Outer brim only" +msgstr "" + +msgid "Inner brim only" +msgstr "" + +msgid "Outer and inner brim" +msgstr "" + msgid "Brim-object gap" msgstr "Écart bord-objet" @@ -6931,9 +7115,6 @@ msgstr "Densité des filaments. Pour les statistiques uniquement" msgid "g/cm³" msgstr "g/cm³" -msgid "Type" -msgstr "Type" - msgid "The material type of filament" msgstr "Le type de matériau du filament" @@ -7869,8 +8050,8 @@ msgstr "Bottom Z distance" msgid "The z gap between the bottom support interface and object" msgstr "The z gap between the bottom support interface and object" -msgid "Support base" -msgstr "Support base" +msgid "Support/raft base" +msgstr "" msgid "" "Filament to print support base and raft. \"Default\" means no specific " @@ -7891,6 +8072,9 @@ msgstr "" "Couvrir la couche de contact supérieure des supports avec des boucles. " "Désactivé par défaut." +msgid "Support/raft interface" +msgstr "" + msgid "" "Filament to print support interface. \"Default\" means no specific filament " "for support interface and current filament is used" @@ -7963,9 +8147,6 @@ msgstr "Expand (+) or shrink (-) the horizontal span of normal support" msgid "Speed of support" msgstr "Vitesse pour les supports" -msgid "Style" -msgstr "Style" - msgid "" "Style and shape of the support. For normal support, projecting the supports " "into a regular grid will create more stable supports (default), while snug " @@ -7998,10 +8179,9 @@ msgstr "Hauteur de la couche de support indépendante" msgid "" "Support layer uses layer height independent with object layer. This is to " -"support customizing z-gap and save print time." +"support customizing z-gap and save print time.This option will be invalid " +"when the prime tower is enabled." msgstr "" -"Support layer uses layer height independent with object layer. This is to " -"support customizing z-gap and save print time." msgid "Threshold angle" msgstr "Angle de seuil" @@ -8394,6 +8574,18 @@ msgstr "UpToDate" msgid "Update the configs values of 3mf to latest." msgstr "Update the configs values of 3mf to latest." +msgid "mtcpp" +msgstr "" + +msgid "max triangle count per plate for slicing." +msgstr "" + +msgid "mstpp" +msgstr "" + +msgid "max slicing time per plate in seconds." +msgstr "" + msgid "Output Model Info" msgstr "Informations sur le modèle de sortie" @@ -8444,6 +8636,12 @@ msgid "Load filament settings from the specified file list" msgstr "" "Charger les paramètres de filament à partir de la liste de fichiers spécifiée" +msgid "Skip Objects" +msgstr "" + +msgid "Skip some objects in this print" +msgstr "" + msgid "Output directory" msgstr "Répertoire de sortie" @@ -8818,6 +9016,44 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" +#~ msgid "Keep upper part" +#~ msgstr "Conserver la partie supérieure" + +#~ msgid "Keep lower part" +#~ msgstr "Garder la partie inférieure" + +#~ msgid "Cut to parts" +#~ msgstr "Couper la sélection dans le presse-papiers" + +#~ msgid "AMS auto switch filament" +#~ msgstr "AMS auto switch filament" + +#~ msgid "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." +#~ msgstr "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." + +#~ msgid "" +#~ "The P1P printer does not support smooth timelapse, use traditional " +#~ "timelapse instead." +#~ msgstr "" +#~ "The P1P printer does not support smooth timelapse, please use traditional " +#~ "timelapse instead." + +#~ msgid "Support base" +#~ msgstr "Support base" + +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." +#~ msgstr "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/hu/BambuStudio_hu.po b/bbl/i18n/hu/BambuStudio_hu.po index 262b657fa4..dc637bc9fc 100644 --- a/bbl/i18n/hu/BambuStudio_hu.po +++ b/bbl/i18n/hu/BambuStudio_hu.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-24 10:26+0800\n" +"POT-Creation-Date: 2023-03-17 16:18+0800\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -245,9 +245,39 @@ msgstr "%" msgid "uniform scale" msgstr "egységes méretarány" +msgid "Left click" +msgstr "" + +msgid "Add connector" +msgstr "" + +msgid "Right click" +msgstr "" + +msgid "Remove connector" +msgstr "" + +msgid "Drag" +msgstr "" + +msgid "Move connector" +msgstr "" + +msgid "Add connector to selection" +msgstr "" + +msgid "Remove connector from selection" +msgstr "" + +msgid "Select all connectors" +msgstr "" + msgid "Cut" msgstr "Vágás" +msgid "Connector" +msgstr "" + msgid "Movement:" msgstr "Mozgatás:" @@ -257,14 +287,26 @@ msgstr "Movement" msgid "Height" msgstr "Height" -msgid "Keep upper part" -msgstr "Felső rész megtartása" +msgid "Add/Edit connectors" +msgstr "" -msgid "Keep lower part" -msgstr "Alsó rész megtartása" +msgid "Upper part" +msgstr "" -msgid "Cut to parts" -msgstr "Részekre darabolás" +msgid "Lower part" +msgstr "" + +msgid "Keep" +msgstr "" + +msgid "Place on cut" +msgstr "" + +msgid "Flip" +msgstr "" + +msgid "After cut" +msgstr "" msgid "Auto Segment" msgstr "Automatikus szegmentálás" @@ -275,6 +317,77 @@ msgstr "Vágás" msgid "Reset" msgstr "Visszaállítás" +msgid "Connectors" +msgstr "" + +msgid "Remove connectors" +msgstr "" + +msgid "Type" +msgstr "Típus" + +msgid "Prizm" +msgstr "" + +msgid "Frustum" +msgstr "" + +msgid "Square" +msgstr "" + +msgid "Hexagon" +msgstr "" + +msgid "Style" +msgstr "Stílus" + +msgid "Shape" +msgstr "Forma" + +msgid "Depth ratio" +msgstr "" + +msgid "Confirm connectors" +msgstr "" + +msgid "Cancel" +msgstr "Mégse" + +msgid "Warning" +msgstr "Figyelmeztetés" + +msgid "Invalid connectors detected" +msgstr "" + +msgid "connector is out of cut contour" +msgstr "" + +msgid "connectors are out of cut contour" +msgstr "" + +msgid "connector is out of object" +msgstr "" + +msgid "connectors is out of object" +msgstr "" + +msgid "Some connectors are overlapped" +msgstr "" + +msgid "" +"Invalid state. \n" +"No one part is selected for keep after cut" +msgstr "" + +msgid "Plug" +msgstr "" + +msgid "Dowel" +msgstr "" + +msgid "Tolerance" +msgstr "" + msgid "Mesh name" msgstr "Háló neve" @@ -335,9 +448,6 @@ msgstr "%1%" msgid "Can't apply when proccess preview." msgstr "Nem használható folyamat előnézetben." -msgid "Cancel" -msgstr "Mégse" - msgid "Operation already cancelling. Please wait few seconds." msgstr "" "A művelet törlése már folyamatban van. Kérjük, várj néhány másodpercet." @@ -407,9 +517,6 @@ msgstr "" msgid "Notice" msgstr "Megjegyzés" -msgid "Warning" -msgstr "Figyelmeztetés" - msgid "Undefined" msgstr "Definiálatlan" @@ -843,6 +950,9 @@ msgstr "Tükrözés" msgid "Mirror object" msgstr "Objektum tükrözése" +msgid "Invalidate cut info" +msgstr "" + msgid "Add Primitive" msgstr "Primitív hozzáadása" @@ -994,6 +1104,9 @@ msgstr "Kattints az ikonra az objektum támasz festésének szerkesztéséhez" msgid "Click the icon to edit color painting of the object" msgstr "Kattints az ikonra az objektum színfestésének szerkesztéséhez" +msgid "Click the icon to shift this object to the bed" +msgstr "" + msgid "Loading file" msgstr "Fájl betöltése" @@ -1018,6 +1131,31 @@ msgstr "" "Switch to per-object setting mode to edit process settings of selected " "objects." +msgid "Delete connector from object which is a part of cut" +msgstr "" + +msgid "Delete solid part from object which is a part of cut" +msgstr "" + +msgid "Delete negative volume from object which is a part of cut" +msgstr "" + +msgid "" +"To save cut correspondence you can delete all connectors from all related " +"objects." +msgstr "" + +msgid "" +"This action will break a cut correspondence.\n" +"After that model consistency can't be guaranteed .\n" +"\n" +"To manipulate with solid parts or negative volumes you have to invalidate " +"cut infornation first." +msgstr "" + +msgid "Delete all connectors" +msgstr "" + msgid "Deleting the last solid part is not allowed." msgstr "Az utolsó szilárd rész törlése nem megengedett." @@ -1029,6 +1167,30 @@ msgstr "" msgid "Assembly" msgstr "Összeállítás" +msgid "Cut Connectors information" +msgstr "" + +msgid "Object manipulation" +msgstr "" + +msgid "Group manipulation" +msgstr "" + +msgid "Object Settings to modify" +msgstr "" + +msgid "Part Settings to modify" +msgstr "" + +msgid "Layer range Settings to modify" +msgstr "" + +msgid "Part manipulation" +msgstr "" + +msgid "Instance manipulation" +msgstr "" + msgid "Object" msgstr "Objektum" @@ -1673,6 +1835,9 @@ msgstr "Please input a valid value (K in 0~0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" +msgid "Other color" +msgstr "" + msgid "Dynamic flow calibration" msgstr "Dynamic flow calibration" @@ -1887,8 +2052,8 @@ msgstr "" "info is updated. During printing, remaining capacity will be updated " "automatically." -msgid "AMS auto switch filament" -msgstr "AMS auto switch filament" +msgid "AMS filament backup" +msgstr "" msgid "" "AMS will continue to another spool with the same properties of filament " @@ -2022,9 +2187,6 @@ msgstr "Kör" msgid "Custom" msgstr "Egyéni" -msgid "Shape" -msgstr "Forma" - msgid "Load shape from STL..." msgstr "Forma betöltése STL-ből..." @@ -2700,12 +2862,6 @@ msgstr "Összeszerelési nézet" msgid "Select Plate" msgstr "Tálca kiválasztása" -msgid "All Plates" -msgstr "" - -msgid "Stats" -msgstr "" - msgid "Assembly Return" msgstr "Vissza az összeszereléshez" @@ -3504,6 +3660,10 @@ msgstr "Letöltés..." msgid "Cloud Slicing..." msgstr "Cloud Slicing..." +#, c-format, boost-format +msgid "In Cloud Slicing Queue, there are %s tasks ahead." +msgstr "" + #, c-format, boost-format msgid "Layers: %s" msgstr "Layers: %s" @@ -3654,6 +3814,12 @@ msgid_plural "%1$d Objects have color painting." msgstr[0] "%1$d objektum színfestést tartalmaz." msgstr[1] "%1$d objektum színfestést tartalmaz." +#, c-format, boost-format +msgid "%1$d object was loaded as a part of cut object." +msgid_plural "%1$d objects were loaded as parts of cut object" +msgstr[0] "" +msgstr[1] "" + msgid "ERROR" msgstr "ERROR" @@ -3703,6 +3869,9 @@ msgstr "Támasz festése" msgid "Color painting" msgstr "Színfestés" +msgid "Cut connectors" +msgstr "" + msgid "Layers" msgstr "Rétegek" @@ -4032,6 +4201,15 @@ msgstr "STL fájl exportálása:" msgid "Save file as:" msgstr "Fájl mentése mint:" +msgid "Delete object which is a part of cut object" +msgstr "" + +msgid "" +"You try to delete an object which is a part of a cut object.\n" +"This action will break a cut correspondence.\n" +"After that model consistency can't be guaranteed." +msgstr "" + msgid "The selected object couldn't be split." msgstr "A kijelölt objektumot nem lehet feldarabolni." @@ -4477,6 +4655,9 @@ msgstr "AMS filamentek" msgid "Click to pick filament color" msgstr "Kattints a filament szín kiválasztásához" +msgid "Please choose the filament colour" +msgstr "" + msgid "Add/Remove presets" msgstr "Beállítások hozzáadása/eltávolítása" @@ -4642,6 +4823,9 @@ msgstr "Offline" msgid "(LAN)" msgstr "" +msgid "Search" +msgstr "" + msgid "My Device" msgstr "Saját eszköz" @@ -4915,11 +5099,9 @@ msgstr "" msgid "" "When using support material for the support interface, We recommend the " "following settings:\n" -"0 top z distance, 0 interface spacing, concentric pattern." +"0 top z distance, 0 interface spacing, concentric pattern and disable " +"independent support layer height" msgstr "" -"When using support material for the support interface, We recommend the " -"following settings:\n" -"0 top z distance, 0 interface spacing, concentric pattern." msgid "" "When recording timelapse without toolhead, it is recommended to add a " @@ -5319,13 +5501,6 @@ msgstr "Általános" msgid "Capabilities" msgstr "Képességek" -msgid "" -"The P1P printer does not support smooth timelapse, use traditional timelapse " -"instead." -msgstr "" -"The P1P printer does not support smooth timelapse, please use traditional " -"timelapse instead." - msgid "Select presets to compare" msgstr "" @@ -6529,6 +6704,15 @@ msgid "" "the brim width is analysed and calculated automatically." msgstr "" +msgid "Outer brim only" +msgstr "" + +msgid "Inner brim only" +msgstr "" + +msgid "Outer and inner brim" +msgstr "" + msgid "Brim-object gap" msgstr "Perem-tárgy közötti rés" @@ -6912,9 +7096,6 @@ msgstr "Filament sűrűsége. Csak statisztikákhoz kerül felhasználásra" msgid "g/cm³" msgstr "g/cm³" -msgid "Type" -msgstr "Típus" - msgid "The material type of filament" msgstr "Filament anyagának típusa" @@ -7842,8 +8023,8 @@ msgstr "Bottom Z distance" msgid "The z gap between the bottom support interface and object" msgstr "The z gap between the bottom support interface and object" -msgid "Support base" -msgstr "Support base" +msgid "Support/raft base" +msgstr "" msgid "" "Filament to print support base and raft. \"Default\" means no specific " @@ -7864,6 +8045,9 @@ msgstr "" "Lefedi a támasz felső érintkező rétegét körökkel. Alapértelmezés szerint " "letiltva." +msgid "Support/raft interface" +msgstr "" + msgid "" "Filament to print support interface. \"Default\" means no specific filament " "for support interface and current filament is used" @@ -7936,9 +8120,6 @@ msgstr "Expand (+) or shrink (-) the horizontal span of normal support" msgid "Speed of support" msgstr "Támaszok sebessége" -msgid "Style" -msgstr "Stílus" - msgid "" "Style and shape of the support. For normal support, projecting the supports " "into a regular grid will create more stable supports (default), while snug " @@ -7971,10 +8152,9 @@ msgstr "Független támasz rétegmagassága" msgid "" "Support layer uses layer height independent with object layer. This is to " -"support customizing z-gap and save print time." +"support customizing z-gap and save print time.This option will be invalid " +"when the prime tower is enabled." msgstr "" -"Support layer uses layer height independent with object layer. This is to " -"support customizing z-gap and save print time." msgid "Threshold angle" msgstr "Dőlésszög küszöbértéke" @@ -8363,6 +8543,18 @@ msgstr "UpToDate" msgid "Update the configs values of 3mf to latest." msgstr "Update the configs values of 3mf to latest." +msgid "mtcpp" +msgstr "" + +msgid "max triangle count per plate for slicing." +msgstr "" + +msgid "mstpp" +msgstr "" + +msgid "max slicing time per plate in seconds." +msgstr "" + msgid "Output Model Info" msgstr "Kimeneti modell információ" @@ -8411,6 +8603,12 @@ msgstr "Filamentbeállítások betöltése" msgid "Load filament settings from the specified file list" msgstr "Filamentbeállítások betöltése a megadott fájllistából" +msgid "Skip Objects" +msgstr "" + +msgid "Skip some objects in this print" +msgstr "" + msgid "Output directory" msgstr "Kimeneti mappa" @@ -8783,6 +8981,44 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" +#~ msgid "Keep upper part" +#~ msgstr "Felső rész megtartása" + +#~ msgid "Keep lower part" +#~ msgstr "Alsó rész megtartása" + +#~ msgid "Cut to parts" +#~ msgstr "Részekre darabolás" + +#~ msgid "AMS auto switch filament" +#~ msgstr "AMS auto switch filament" + +#~ msgid "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." +#~ msgstr "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." + +#~ msgid "" +#~ "The P1P printer does not support smooth timelapse, use traditional " +#~ "timelapse instead." +#~ msgstr "" +#~ "The P1P printer does not support smooth timelapse, please use traditional " +#~ "timelapse instead." + +#~ msgid "Support base" +#~ msgstr "Support base" + +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." +#~ msgstr "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/it/BambuStudio_it.po b/bbl/i18n/it/BambuStudio_it.po index 4cebe4087b..f71d899680 100644 --- a/bbl/i18n/it/BambuStudio_it.po +++ b/bbl/i18n/it/BambuStudio_it.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-24 10:26+0800\n" +"POT-Creation-Date: 2023-03-17 16:18+0800\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -245,9 +245,39 @@ msgstr "%" msgid "uniform scale" msgstr "Uniform scale" +msgid "Left click" +msgstr "" + +msgid "Add connector" +msgstr "" + +msgid "Right click" +msgstr "" + +msgid "Remove connector" +msgstr "" + +msgid "Drag" +msgstr "" + +msgid "Move connector" +msgstr "" + +msgid "Add connector to selection" +msgstr "" + +msgid "Remove connector from selection" +msgstr "" + +msgid "Select all connectors" +msgstr "" + msgid "Cut" msgstr "Taglia" +msgid "Connector" +msgstr "" + msgid "Movement:" msgstr "Movement:" @@ -257,14 +287,26 @@ msgstr "Movement" msgid "Height" msgstr "Height" -msgid "Keep upper part" -msgstr "Mantieni parte superiore" +msgid "Add/Edit connectors" +msgstr "" -msgid "Keep lower part" -msgstr "Mantieni parte inferiore" +msgid "Upper part" +msgstr "" -msgid "Cut to parts" -msgstr "Cut to parts" +msgid "Lower part" +msgstr "" + +msgid "Keep" +msgstr "" + +msgid "Place on cut" +msgstr "" + +msgid "Flip" +msgstr "" + +msgid "After cut" +msgstr "" msgid "Auto Segment" msgstr "Auto Segment" @@ -275,6 +317,77 @@ msgstr "Effettua taglio" msgid "Reset" msgstr "Reimposta" +msgid "Connectors" +msgstr "" + +msgid "Remove connectors" +msgstr "" + +msgid "Type" +msgstr "Type" + +msgid "Prizm" +msgstr "" + +msgid "Frustum" +msgstr "" + +msgid "Square" +msgstr "" + +msgid "Hexagon" +msgstr "" + +msgid "Style" +msgstr "Stile" + +msgid "Shape" +msgstr "Forma" + +msgid "Depth ratio" +msgstr "" + +msgid "Confirm connectors" +msgstr "" + +msgid "Cancel" +msgstr "Annulla" + +msgid "Warning" +msgstr "Attenzione" + +msgid "Invalid connectors detected" +msgstr "" + +msgid "connector is out of cut contour" +msgstr "" + +msgid "connectors are out of cut contour" +msgstr "" + +msgid "connector is out of object" +msgstr "" + +msgid "connectors is out of object" +msgstr "" + +msgid "Some connectors are overlapped" +msgstr "" + +msgid "" +"Invalid state. \n" +"No one part is selected for keep after cut" +msgstr "" + +msgid "Plug" +msgstr "" + +msgid "Dowel" +msgstr "" + +msgid "Tolerance" +msgstr "" + msgid "Mesh name" msgstr "Nome mesh" @@ -335,9 +448,6 @@ msgstr "%1%" msgid "Can't apply when proccess preview." msgstr "Non si può applicare durante la creazione dell'anteprima." -msgid "Cancel" -msgstr "Annulla" - msgid "Operation already cancelling. Please wait few seconds." msgstr "Operazione già annullata. Si prega di attendere qualche secondo." @@ -406,9 +516,6 @@ msgstr "" msgid "Notice" msgstr "Avvertenza" -msgid "Warning" -msgstr "Attenzione" - msgid "Undefined" msgstr "Indefinito" @@ -836,6 +943,9 @@ msgstr "Specchia" msgid "Mirror object" msgstr "Mirror object" +msgid "Invalidate cut info" +msgstr "" + msgid "Add Primitive" msgstr "Add Primitive" @@ -983,6 +1093,9 @@ msgstr "Click the icon to edit support painting of the object" msgid "Click the icon to edit color painting of the object" msgstr "Click the icon to edit color painting for the object" +msgid "Click the icon to shift this object to the bed" +msgstr "" + msgid "Loading file" msgstr "Caricamento file" @@ -1005,6 +1118,31 @@ msgstr "" "Switch to per-object setting mode to edit process settings of selected " "objects." +msgid "Delete connector from object which is a part of cut" +msgstr "" + +msgid "Delete solid part from object which is a part of cut" +msgstr "" + +msgid "Delete negative volume from object which is a part of cut" +msgstr "" + +msgid "" +"To save cut correspondence you can delete all connectors from all related " +"objects." +msgstr "" + +msgid "" +"This action will break a cut correspondence.\n" +"After that model consistency can't be guaranteed .\n" +"\n" +"To manipulate with solid parts or negative volumes you have to invalidate " +"cut infornation first." +msgstr "" + +msgid "Delete all connectors" +msgstr "" + msgid "Deleting the last solid part is not allowed." msgstr "Deleting the last solid part is not allowed." @@ -1014,6 +1152,30 @@ msgstr "The target object contains only one part and cannot be split." msgid "Assembly" msgstr "Assembly" +msgid "Cut Connectors information" +msgstr "" + +msgid "Object manipulation" +msgstr "" + +msgid "Group manipulation" +msgstr "" + +msgid "Object Settings to modify" +msgstr "" + +msgid "Part Settings to modify" +msgstr "" + +msgid "Layer range Settings to modify" +msgstr "" + +msgid "Part manipulation" +msgstr "" + +msgid "Instance manipulation" +msgstr "" + msgid "Object" msgstr "Object" @@ -1647,6 +1809,9 @@ msgstr "Please input a valid value (K in 0~0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" +msgid "Other color" +msgstr "" + msgid "Dynamic flow calibration" msgstr "Dynamic flow calibration" @@ -1861,8 +2026,8 @@ msgstr "" "info is updated. During printing, remaining capacity will be updated " "automatically." -msgid "AMS auto switch filament" -msgstr "AMS auto switch filament" +msgid "AMS filament backup" +msgstr "" msgid "" "AMS will continue to another spool with the same properties of filament " @@ -2000,9 +2165,6 @@ msgstr "Circolare" msgid "Custom" msgstr "Personalizzato" -msgid "Shape" -msgstr "Forma" - msgid "Load shape from STL..." msgstr "Carica forma da STL..." @@ -2676,12 +2838,6 @@ msgstr "Assembly View" msgid "Select Plate" msgstr "Select Plate" -msgid "All Plates" -msgstr "" - -msgid "Stats" -msgstr "" - msgid "Assembly Return" msgstr "Assembly Return" @@ -3480,6 +3636,10 @@ msgstr "Downloading..." msgid "Cloud Slicing..." msgstr "Cloud Slicing..." +#, c-format, boost-format +msgid "In Cloud Slicing Queue, there are %s tasks ahead." +msgstr "" + #, c-format, boost-format msgid "Layers: %s" msgstr "Layers: %s" @@ -3630,6 +3790,12 @@ msgid_plural "%1$d Objects have color painting." msgstr[0] "%1$d Object has color painting." msgstr[1] "%1$d Objects have color painting." +#, c-format, boost-format +msgid "%1$d object was loaded as a part of cut object." +msgid_plural "%1$d objects were loaded as parts of cut object" +msgstr[0] "" +msgstr[1] "" + msgid "ERROR" msgstr "ERROR" @@ -3678,6 +3844,9 @@ msgstr "Support Painting" msgid "Color painting" msgstr "Color Painting" +msgid "Cut connectors" +msgstr "" + msgid "Layers" msgstr "Layer" @@ -4007,6 +4176,15 @@ msgstr "Esporta file STL:" msgid "Save file as:" msgstr "Salva come:" +msgid "Delete object which is a part of cut object" +msgstr "" + +msgid "" +"You try to delete an object which is a part of a cut object.\n" +"This action will break a cut correspondence.\n" +"After that model consistency can't be guaranteed." +msgstr "" + msgid "The selected object couldn't be split." msgstr "The selected object couldn't be split." @@ -4446,6 +4624,9 @@ msgstr "AMS filament" msgid "Click to pick filament color" msgstr "Click to select filament color" +msgid "Please choose the filament colour" +msgstr "" + msgid "Add/Remove presets" msgstr "Aggiungi/Rimuovi preset" @@ -4612,6 +4793,9 @@ msgstr "Offline" msgid "(LAN)" msgstr "" +msgid "Search" +msgstr "" + msgid "My Device" msgstr "My Device" @@ -4881,11 +5065,9 @@ msgstr "" msgid "" "When using support material for the support interface, We recommend the " "following settings:\n" -"0 top z distance, 0 interface spacing, concentric pattern." +"0 top z distance, 0 interface spacing, concentric pattern and disable " +"independent support layer height" msgstr "" -"When using support material for the support interface, We recommend the " -"following settings:\n" -"0 top z distance, 0 interface spacing, concentric pattern." msgid "" "When recording timelapse without toolhead, it is recommended to add a " @@ -5278,13 +5460,6 @@ msgstr "Generale" msgid "Capabilities" msgstr "Caratteristiche" -msgid "" -"The P1P printer does not support smooth timelapse, use traditional timelapse " -"instead." -msgstr "" -"The P1P printer does not support smooth timelapse, please use traditional " -"timelapse instead." - msgid "Select presets to compare" msgstr "" @@ -6475,6 +6650,15 @@ msgid "" "the brim width is analysed and calculated automatically." msgstr "" +msgid "Outer brim only" +msgstr "" + +msgid "Inner brim only" +msgstr "" + +msgid "Outer and inner brim" +msgstr "" + msgid "Brim-object gap" msgstr "Brim-object gap" @@ -6857,9 +7041,6 @@ msgstr "Filament density, for statistical purposes only." msgid "g/cm³" msgstr "g/cm³" -msgid "Type" -msgstr "Type" - msgid "The material type of filament" msgstr "Filament material type" @@ -7770,8 +7951,8 @@ msgstr "Bottom Z distance" msgid "The z gap between the bottom support interface and object" msgstr "The z gap between the bottom support interface and object" -msgid "Support base" -msgstr "Support base" +msgid "Support/raft base" +msgstr "" msgid "" "Filament to print support base and raft. \"Default\" means no specific " @@ -7792,6 +7973,9 @@ msgstr "" "Copre con anelli il layer superiore del supporto a contatto. Disattivato per " "impostazione predefinita." +msgid "Support/raft interface" +msgstr "" + msgid "" "Filament to print support interface. \"Default\" means no specific filament " "for support interface and current filament is used" @@ -7863,9 +8047,6 @@ msgstr "Expand (+) or shrink (-) the horizontal span of normal support" msgid "Speed of support" msgstr "This is the speed for support." -msgid "Style" -msgstr "Stile" - msgid "" "Style and shape of the support. For normal support, projecting the supports " "into a regular grid will create more stable supports (default), while snug " @@ -7898,10 +8079,9 @@ msgstr "Independent support layer height" msgid "" "Support layer uses layer height independent with object layer. This is to " -"support customizing z-gap and save print time." +"support customizing z-gap and save print time.This option will be invalid " +"when the prime tower is enabled." msgstr "" -"Support layer uses layer height independent with object layer. This is to " -"support customizing z-gap and save print time." msgid "Threshold angle" msgstr "Threshold angle" @@ -8287,6 +8467,18 @@ msgstr "UpToDate" msgid "Update the configs values of 3mf to latest." msgstr "Update the configs values of 3mf to latest." +msgid "mtcpp" +msgstr "" + +msgid "max triangle count per plate for slicing." +msgstr "" + +msgid "mstpp" +msgstr "" + +msgid "max slicing time per plate in seconds." +msgstr "" + msgid "Output Model Info" msgstr "Info Modello di output" @@ -8335,6 +8527,12 @@ msgstr "Load Filament Settings" msgid "Load filament settings from the specified file list" msgstr "Load filament settings from the specified file list" +msgid "Skip Objects" +msgstr "" + +msgid "Skip some objects in this print" +msgstr "" + msgid "Output directory" msgstr "Output directory" @@ -8707,6 +8905,44 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" +#~ msgid "Keep upper part" +#~ msgstr "Mantieni parte superiore" + +#~ msgid "Keep lower part" +#~ msgstr "Mantieni parte inferiore" + +#~ msgid "Cut to parts" +#~ msgstr "Cut to parts" + +#~ msgid "AMS auto switch filament" +#~ msgstr "AMS auto switch filament" + +#~ msgid "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." +#~ msgstr "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." + +#~ msgid "" +#~ "The P1P printer does not support smooth timelapse, use traditional " +#~ "timelapse instead." +#~ msgstr "" +#~ "The P1P printer does not support smooth timelapse, please use traditional " +#~ "timelapse instead." + +#~ msgid "Support base" +#~ msgstr "Support base" + +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." +#~ msgstr "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/ja/BambuStudio_ja.po b/bbl/i18n/ja/BambuStudio_ja.po index 6a8cc762b1..4813bec9a0 100644 --- a/bbl/i18n/ja/BambuStudio_ja.po +++ b/bbl/i18n/ja/BambuStudio_ja.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-24 10:26+0800\n" +"POT-Creation-Date: 2023-03-17 16:18+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -247,9 +247,39 @@ msgstr "%" msgid "uniform scale" msgstr "スケール" +msgid "Left click" +msgstr "" + +msgid "Add connector" +msgstr "" + +msgid "Right click" +msgstr "" + +msgid "Remove connector" +msgstr "" + +msgid "Drag" +msgstr "" + +msgid "Move connector" +msgstr "" + +msgid "Add connector to selection" +msgstr "" + +msgid "Remove connector from selection" +msgstr "" + +msgid "Select all connectors" +msgstr "" + msgid "Cut" msgstr "カット" +msgid "Connector" +msgstr "" + msgid "Movement:" msgstr "移動" @@ -259,14 +289,26 @@ msgstr "移動" msgid "Height" msgstr "高度" -msgid "Keep upper part" -msgstr "上の部分を残す" +msgid "Add/Edit connectors" +msgstr "" -msgid "Keep lower part" -msgstr "下の部分を残す" +msgid "Upper part" +msgstr "" -msgid "Cut to parts" -msgstr "パーツに割り切る" +msgid "Lower part" +msgstr "" + +msgid "Keep" +msgstr "" + +msgid "Place on cut" +msgstr "" + +msgid "Flip" +msgstr "" + +msgid "After cut" +msgstr "" msgid "Auto Segment" msgstr "自動分割" @@ -277,6 +319,77 @@ msgstr "カットを実行" msgid "Reset" msgstr "リセット" +msgid "Connectors" +msgstr "" + +msgid "Remove connectors" +msgstr "" + +msgid "Type" +msgstr "タイプ" + +msgid "Prizm" +msgstr "" + +msgid "Frustum" +msgstr "" + +msgid "Square" +msgstr "" + +msgid "Hexagon" +msgstr "" + +msgid "Style" +msgstr "スタイル" + +msgid "Shape" +msgstr "形状" + +msgid "Depth ratio" +msgstr "" + +msgid "Confirm connectors" +msgstr "" + +msgid "Cancel" +msgstr "取消し" + +msgid "Warning" +msgstr "警告" + +msgid "Invalid connectors detected" +msgstr "" + +msgid "connector is out of cut contour" +msgstr "" + +msgid "connectors are out of cut contour" +msgstr "" + +msgid "connector is out of object" +msgstr "" + +msgid "connectors is out of object" +msgstr "" + +msgid "Some connectors are overlapped" +msgstr "" + +msgid "" +"Invalid state. \n" +"No one part is selected for keep after cut" +msgstr "" + +msgid "Plug" +msgstr "" + +msgid "Dowel" +msgstr "" + +msgid "Tolerance" +msgstr "" + msgid "Mesh name" msgstr "メッシュ名" @@ -335,9 +448,6 @@ msgstr "%1%" msgid "Can't apply when proccess preview." msgstr "プレビュー処理中は適用できません" -msgid "Cancel" -msgstr "取消し" - msgid "Operation already cancelling. Please wait few seconds." msgstr "操作を取り消し中、少々お待ちください。" @@ -406,9 +516,6 @@ msgstr "" msgid "Notice" msgstr "通知" -msgid "Warning" -msgstr "警告" - msgid "Undefined" msgstr "未定義" @@ -831,6 +938,9 @@ msgstr "反転" msgid "Mirror object" msgstr "オブジェクトを反転" +msgid "Invalidate cut info" +msgstr "" + msgid "Add Primitive" msgstr "プリミティブを追加" @@ -975,6 +1085,9 @@ msgstr "オブジェクトのサポートを編集します" msgid "Click the icon to edit color painting of the object" msgstr "オブジェクトに色塗りをします" +msgid "Click the icon to shift this object to the bed" +msgstr "" + msgid "Loading file" msgstr "ファイルを読み込み中" @@ -996,6 +1109,31 @@ msgid "" "objects." msgstr "オブジェクト設定で、各オブジェクトの造形設定を指定できます。" +msgid "Delete connector from object which is a part of cut" +msgstr "" + +msgid "Delete solid part from object which is a part of cut" +msgstr "" + +msgid "Delete negative volume from object which is a part of cut" +msgstr "" + +msgid "" +"To save cut correspondence you can delete all connectors from all related " +"objects." +msgstr "" + +msgid "" +"This action will break a cut correspondence.\n" +"After that model consistency can't be guaranteed .\n" +"\n" +"To manipulate with solid parts or negative volumes you have to invalidate " +"cut infornation first." +msgstr "" + +msgid "Delete all connectors" +msgstr "" + msgid "Deleting the last solid part is not allowed." msgstr "最後のソリッドパーツは削除できません。" @@ -1005,6 +1143,30 @@ msgstr "オブジェクトは一つだけのパーツが入っており、分割 msgid "Assembly" msgstr "アセンブリ" +msgid "Cut Connectors information" +msgstr "" + +msgid "Object manipulation" +msgstr "" + +msgid "Group manipulation" +msgstr "" + +msgid "Object Settings to modify" +msgstr "" + +msgid "Part Settings to modify" +msgstr "" + +msgid "Layer range Settings to modify" +msgstr "" + +msgid "Part manipulation" +msgstr "" + +msgid "Instance manipulation" +msgstr "" + msgid "Object" msgstr "OBJ" @@ -1632,6 +1794,9 @@ msgstr "有効な値を入力してください (0 ~ 0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "有効な値を入力してください (K: 0 ~ 0.5, N: 0.6 ~ 2.0)" +msgid "Other color" +msgstr "" + msgid "Dynamic flow calibration" msgstr "流量キャリブレーション" @@ -1828,8 +1993,8 @@ msgstr "" "BambuLab純正フィラメントの場合、残量の推定を行います。造形時に、残量自動的に" "更新します。" -msgid "AMS auto switch filament" -msgstr "AMSフィラメント自動切替え" +msgid "AMS filament backup" +msgstr "" msgid "" "AMS will continue to another spool with the same properties of filament " @@ -1959,9 +2124,6 @@ msgstr "円形" msgid "Custom" msgstr "カスタム" -msgid "Shape" -msgstr "形状" - msgid "Load shape from STL..." msgstr "STLからシェープデータを読込む" @@ -2613,12 +2775,6 @@ msgstr "組立て" msgid "Select Plate" msgstr "プレートを選択" -msgid "All Plates" -msgstr "" - -msgid "Stats" -msgstr "" - msgid "Assembly Return" msgstr "戻る" @@ -3406,6 +3562,10 @@ msgstr "ダウンロード中" msgid "Cloud Slicing..." msgstr "クラウドにてスライス中" +#, c-format, boost-format +msgid "In Cloud Slicing Queue, there are %s tasks ahead." +msgstr "" + #, c-format, boost-format msgid "Layers: %s" msgstr "積層: %s" @@ -3554,6 +3714,11 @@ msgid "%1$d Object has color painting." msgid_plural "%1$d Objects have color painting." msgstr[0] "%1$dのオブジェクトは色が付いています" +#, c-format, boost-format +msgid "%1$d object was loaded as a part of cut object." +msgid_plural "%1$d objects were loaded as parts of cut object" +msgstr[0] "" + msgid "ERROR" msgstr "エラー" @@ -3603,6 +3768,9 @@ msgstr "サポートペイント" msgid "Color painting" msgstr "色塗り" +msgid "Cut connectors" +msgstr "" + msgid "Layers" msgstr "積層" @@ -3920,6 +4088,15 @@ msgstr "STLファイルをエクスポート:" msgid "Save file as:" msgstr "名前を付けて保存" +msgid "Delete object which is a part of cut object" +msgstr "" + +msgid "" +"You try to delete an object which is a part of a cut object.\n" +"This action will break a cut correspondence.\n" +"After that model consistency can't be guaranteed." +msgstr "" + msgid "The selected object couldn't be split." msgstr "選択したオブジェクトを分割できませんでした。" @@ -4351,6 +4528,9 @@ msgstr "AMSフィラメント" msgid "Click to pick filament color" msgstr "フィラメントの色を選択" +msgid "Please choose the filament colour" +msgstr "" + msgid "Add/Remove presets" msgstr "プリセットの追加/削除" @@ -4516,6 +4696,9 @@ msgstr "オフライン" msgid "(LAN)" msgstr "" +msgid "Search" +msgstr "" + msgid "My Device" msgstr "私のデバイス" @@ -4763,11 +4946,9 @@ msgstr "" msgid "" "When using support material for the support interface, We recommend the " "following settings:\n" -"0 top z distance, 0 interface spacing, concentric pattern." +"0 top z distance, 0 interface spacing, concentric pattern and disable " +"independent support layer height" msgstr "" -"When using support material for the support interface, We recommend the " -"following settings:\n" -"0 top z distance, 0 interface spacing, concentric pattern." msgid "" "When recording timelapse without toolhead, it is recommended to add a " @@ -5141,13 +5322,6 @@ msgstr "一般" msgid "Capabilities" msgstr "能力" -msgid "" -"The P1P printer does not support smooth timelapse, use traditional timelapse " -"instead." -msgstr "" -"P1Pプリンターはスムージタイムラプスをサポートしません、通常タイムラプスに切替" -"えます。" - msgid "Select presets to compare" msgstr "" @@ -6288,6 +6462,15 @@ msgid "" "the brim width is analysed and calculated automatically." msgstr "" +msgid "Outer brim only" +msgstr "" + +msgid "Inner brim only" +msgstr "" + +msgid "Outer and inner brim" +msgstr "" + msgid "Brim-object gap" msgstr "ブリムとオブジェクトの間隔" @@ -6645,9 +6828,6 @@ msgstr "フィラメント密度" msgid "g/cm³" msgstr "g/cm³" -msgid "Type" -msgstr "タイプ" - msgid "The material type of filament" msgstr "フィラメント素材タイプ" @@ -7500,8 +7680,8 @@ msgstr "底面とのZ間隔" msgid "The z gap between the bottom support interface and object" msgstr "サポート底面とオブジェクトのZ方向間隔" -msgid "Support base" -msgstr "サポート基材" +msgid "Support/raft base" +msgstr "" msgid "" "Filament to print support base and raft. \"Default\" means no specific " @@ -7522,6 +7702,9 @@ msgstr "" "これにより、サポートの上部接触層がループで覆われます。デフォルトでは無効に" "なっています。" +msgid "Support/raft interface" +msgstr "" + msgid "" "Filament to print support interface. \"Default\" means no specific filament " "for support interface and current filament is used" @@ -7591,9 +7774,6 @@ msgstr "+/-でサポートの水平サイズを調整します" msgid "Speed of support" msgstr "サポートの造形速度です。" -msgid "Style" -msgstr "スタイル" - msgid "" "Style and shape of the support. For normal support, projecting the supports " "into a regular grid will create more stable supports (default), while snug " @@ -7623,8 +7803,9 @@ msgstr "独立サポート層ピッチ" msgid "" "Support layer uses layer height independent with object layer. This is to " -"support customizing z-gap and save print time." -msgstr "サポートの積層ピッチは独立で設定できます。" +"support customizing z-gap and save print time.This option will be invalid " +"when the prime tower is enabled." +msgstr "" msgid "Threshold angle" msgstr "閾値角度" @@ -7981,6 +8162,18 @@ msgstr "最新の状態です。" msgid "Update the configs values of 3mf to latest." msgstr "3mfの構成値を更新" +msgid "mtcpp" +msgstr "" + +msgid "max triangle count per plate for slicing." +msgstr "" + +msgid "mstpp" +msgstr "" + +msgid "max slicing time per plate in seconds." +msgstr "" + msgid "Output Model Info" msgstr "出力モデル情報" @@ -8029,6 +8222,12 @@ msgstr "フィラメント設定を読込む" msgid "Load filament settings from the specified file list" msgstr "指定したファイルリストからフィラメント設定を読込む" +msgid "Skip Objects" +msgstr "" + +msgid "Skip some objects in this print" +msgstr "" + msgid "Output directory" msgstr "出力先フォルダ" @@ -8374,6 +8573,42 @@ msgstr "" "強度の向上\n" "壁面層数やインフィルの充填密度を増やして造形強度を向上できます。" +#~ msgid "Keep upper part" +#~ msgstr "上の部分を残す" + +#~ msgid "Keep lower part" +#~ msgstr "下の部分を残す" + +#~ msgid "Cut to parts" +#~ msgstr "パーツに割り切る" + +#~ msgid "AMS auto switch filament" +#~ msgstr "AMSフィラメント自動切替え" + +#~ msgid "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." +#~ msgstr "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." + +#~ msgid "" +#~ "The P1P printer does not support smooth timelapse, use traditional " +#~ "timelapse instead." +#~ msgstr "" +#~ "P1Pプリンターはスムージタイムラプスをサポートしません、通常タイムラプスに" +#~ "切替えます。" + +#~ msgid "Support base" +#~ msgstr "サポート基材" + +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." +#~ msgstr "サポートの積層ピッチは独立で設定できます。" + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/nl/BambuStudio_nl.po b/bbl/i18n/nl/BambuStudio_nl.po index a23275d167..7870004f4d 100644 --- a/bbl/i18n/nl/BambuStudio_nl.po +++ b/bbl/i18n/nl/BambuStudio_nl.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-24 10:26+0800\n" +"POT-Creation-Date: 2023-03-17 16:18+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -249,9 +249,39 @@ msgstr "%" msgid "uniform scale" msgstr "Uniform schalen" +msgid "Left click" +msgstr "" + +msgid "Add connector" +msgstr "" + +msgid "Right click" +msgstr "" + +msgid "Remove connector" +msgstr "" + +msgid "Drag" +msgstr "" + +msgid "Move connector" +msgstr "" + +msgid "Add connector to selection" +msgstr "" + +msgid "Remove connector from selection" +msgstr "" + +msgid "Select all connectors" +msgstr "" + msgid "Cut" msgstr "Knippen" +msgid "Connector" +msgstr "" + msgid "Movement:" msgstr "Beweging:" @@ -261,14 +291,26 @@ msgstr "Beweging" msgid "Height" msgstr "Hoogte" -msgid "Keep upper part" -msgstr "Bewaar het bovenstee deel" +msgid "Add/Edit connectors" +msgstr "" -msgid "Keep lower part" -msgstr "Bewaar het onderste deel" +msgid "Upper part" +msgstr "" -msgid "Cut to parts" -msgstr "In delen knippen" +msgid "Lower part" +msgstr "" + +msgid "Keep" +msgstr "" + +msgid "Place on cut" +msgstr "" + +msgid "Flip" +msgstr "" + +msgid "After cut" +msgstr "" msgid "Auto Segment" msgstr "Automatische segmenteren" @@ -279,6 +321,77 @@ msgstr "Knippen uitvoeren" msgid "Reset" msgstr "Terugzetten" +msgid "Connectors" +msgstr "" + +msgid "Remove connectors" +msgstr "" + +msgid "Type" +msgstr "Type" + +msgid "Prizm" +msgstr "" + +msgid "Frustum" +msgstr "" + +msgid "Square" +msgstr "" + +msgid "Hexagon" +msgstr "" + +msgid "Style" +msgstr "Stijl" + +msgid "Shape" +msgstr "Vorm" + +msgid "Depth ratio" +msgstr "" + +msgid "Confirm connectors" +msgstr "" + +msgid "Cancel" +msgstr "Annuleren" + +msgid "Warning" +msgstr "Waarschuwing" + +msgid "Invalid connectors detected" +msgstr "" + +msgid "connector is out of cut contour" +msgstr "" + +msgid "connectors are out of cut contour" +msgstr "" + +msgid "connector is out of object" +msgstr "" + +msgid "connectors is out of object" +msgstr "" + +msgid "Some connectors are overlapped" +msgstr "" + +msgid "" +"Invalid state. \n" +"No one part is selected for keep after cut" +msgstr "" + +msgid "Plug" +msgstr "" + +msgid "Dowel" +msgstr "" + +msgid "Tolerance" +msgstr "" + msgid "Mesh name" msgstr "Constructie name" @@ -339,9 +452,6 @@ msgstr "%1%" msgid "Can't apply when proccess preview." msgstr "Toepassen is niet mogelijk bij een voorvertoning." -msgid "Cancel" -msgstr "Annuleren" - msgid "Operation already cancelling. Please wait few seconds." msgstr "De toepassing wordt al geannuleerd. Wacht even alstublieft." @@ -410,9 +520,6 @@ msgstr "" msgid "Notice" msgstr "Let op" -msgid "Warning" -msgstr "Waarschuwing" - msgid "Undefined" msgstr "Niet gedefinieerd" @@ -845,6 +952,9 @@ msgstr "Spiegelen" msgid "Mirror object" msgstr "Spiegel object" +msgid "Invalidate cut info" +msgstr "" + msgid "Add Primitive" msgstr "Primitief toevoegen" @@ -999,6 +1109,9 @@ msgstr "Klik op het pictogram om de support van het object te bewerken" msgid "Click the icon to edit color painting of the object" msgstr "Klik op het pictogram om de kleur van het object te bewerken" +msgid "Click the icon to shift this object to the bed" +msgstr "" + msgid "Loading file" msgstr "Bestand laden" @@ -1023,6 +1136,31 @@ msgstr "" "Schakel over naar de instellingsmodus per object om procesinstellingen van " "geselecteerde objecten te bewerken." +msgid "Delete connector from object which is a part of cut" +msgstr "" + +msgid "Delete solid part from object which is a part of cut" +msgstr "" + +msgid "Delete negative volume from object which is a part of cut" +msgstr "" + +msgid "" +"To save cut correspondence you can delete all connectors from all related " +"objects." +msgstr "" + +msgid "" +"This action will break a cut correspondence.\n" +"After that model consistency can't be guaranteed .\n" +"\n" +"To manipulate with solid parts or negative volumes you have to invalidate " +"cut infornation first." +msgstr "" + +msgid "Delete all connectors" +msgstr "" + msgid "Deleting the last solid part is not allowed." msgstr "Het is niet toegestaand om het laaste vaste deel te verwijderen." @@ -1034,6 +1172,30 @@ msgstr "" msgid "Assembly" msgstr "Montage" +msgid "Cut Connectors information" +msgstr "" + +msgid "Object manipulation" +msgstr "" + +msgid "Group manipulation" +msgstr "" + +msgid "Object Settings to modify" +msgstr "" + +msgid "Part Settings to modify" +msgstr "" + +msgid "Layer range Settings to modify" +msgstr "" + +msgid "Part manipulation" +msgstr "" + +msgid "Instance manipulation" +msgstr "" + msgid "Object" msgstr "Voorwerp" @@ -1687,6 +1849,9 @@ msgstr "Voer een geldige waarde in (K in 0 ~ 0,5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Voer een geldige waarde in (K in 0 ~ 0,5, N in 0,6 ~ 2,0)" +msgid "Other color" +msgstr "" + msgid "Dynamic flow calibration" msgstr "Dynamic flow calibration" @@ -1905,8 +2070,8 @@ msgstr "" "filament nadat de filamentinformatie is bijgewerkt. Tijdens het afdrukken " "wordt de resterende capaciteit automatisch bijgewerkt." -msgid "AMS auto switch filament" -msgstr "AMS automatische filament overschakelen" +msgid "AMS filament backup" +msgstr "" msgid "" "AMS will continue to another spool with the same properties of filament " @@ -2045,9 +2210,6 @@ msgstr "Rond" msgid "Custom" msgstr "Aangepast" -msgid "Shape" -msgstr "Vorm" - msgid "Load shape from STL..." msgstr "Vorm laden vanuit het stl. bestand..." @@ -2728,12 +2890,6 @@ msgstr "Montageweergave" msgid "Select Plate" msgstr "Printbed selecteren" -msgid "All Plates" -msgstr "" - -msgid "Stats" -msgstr "" - msgid "Assembly Return" msgstr "Montage terug" @@ -3534,6 +3690,10 @@ msgstr "Downloaden..." msgid "Cloud Slicing..." msgstr "Cloud Slicing..." +#, c-format, boost-format +msgid "In Cloud Slicing Queue, there are %s tasks ahead." +msgstr "" + #, c-format, boost-format msgid "Layers: %s" msgstr "Lagen: %s" @@ -3695,6 +3855,12 @@ msgstr[1] "" "%1$d De objecten hebben geschilderde kleuren.@%1$d De objecten hebben " "geschilderde kleuren." +#, c-format, boost-format +msgid "%1$d object was loaded as a part of cut object." +msgid_plural "%1$d objects were loaded as parts of cut object" +msgstr[0] "" +msgstr[1] "" + msgid "ERROR" msgstr "Fout" @@ -3743,6 +3909,9 @@ msgstr "Support intekenen" msgid "Color painting" msgstr "Kleur aanbrengen" +msgid "Cut connectors" +msgstr "" + msgid "Layers" msgstr "Lagen" @@ -4084,6 +4253,15 @@ msgstr "Exporteer STL bestand:" msgid "Save file as:" msgstr "Bewaar bestand als:" +msgid "Delete object which is a part of cut object" +msgstr "" + +msgid "" +"You try to delete an object which is a part of a cut object.\n" +"This action will break a cut correspondence.\n" +"After that model consistency can't be guaranteed." +msgstr "" + msgid "The selected object couldn't be split." msgstr "Het geselecteerde object kan niet opgesplitst worden." @@ -4535,6 +4713,9 @@ msgstr "AMS-filament" msgid "Click to pick filament color" msgstr "Klik om de filament kleur te kiezen" +msgid "Please choose the filament colour" +msgstr "" + msgid "Add/Remove presets" msgstr "Voorinstellingen toevoegen/verwijderen" @@ -4708,6 +4889,9 @@ msgstr "Offline" msgid "(LAN)" msgstr "" +msgid "Search" +msgstr "" + msgid "My Device" msgstr "Mijn apparaat" @@ -4992,11 +5176,9 @@ msgstr "" msgid "" "When using support material for the support interface, We recommend the " "following settings:\n" -"0 top z distance, 0 interface spacing, concentric pattern." +"0 top z distance, 0 interface spacing, concentric pattern and disable " +"independent support layer height" msgstr "" -"Als u ondersteuningsmateriaal gebruikt voor de ondersteuningsinterface, " -"raden we de volgende instellingen aan:\n" -"0 op z afstand, 0 interface-afstand, concentrisch patroon." msgid "" "When recording timelapse without toolhead, it is recommended to add a " @@ -5402,13 +5584,6 @@ msgstr "Algemeen" msgid "Capabilities" msgstr "Mogelijkheden" -msgid "" -"The P1P printer does not support smooth timelapse, use traditional timelapse " -"instead." -msgstr "" -"De P1P-printer ondersteunt geen soepele timelapse. Gebruik in plaats daarvan " -"een traditionele timelapse." - msgid "Select presets to compare" msgstr "" @@ -6630,6 +6805,15 @@ msgid "" "the brim width is analysed and calculated automatically." msgstr "" +msgid "Outer brim only" +msgstr "" + +msgid "Inner brim only" +msgstr "" + +msgid "Outer and inner brim" +msgstr "" + msgid "Brim-object gap" msgstr "Ruimte tussen rand en object" @@ -7021,9 +7205,6 @@ msgstr "Filamentdichtheid, alleen voor statistische doeleinden." msgid "g/cm³" msgstr "g/cm³" -msgid "Type" -msgstr "Type" - msgid "The material type of filament" msgstr "Filament materiaal." @@ -7964,8 +8145,8 @@ msgstr "Onderste Z-afstand" msgid "The z gap between the bottom support interface and object" msgstr "De z-opening tussen de onderste ondersteuningsinterface en het object" -msgid "Support base" -msgstr "Ondersteuningsbasis" +msgid "Support/raft base" +msgstr "" msgid "" "Filament to print support base and raft. \"Default\" means no specific " @@ -7987,6 +8168,9 @@ msgstr "" "Dit bedekt de bovenste laag van de support met lussen. Het is standaard " "uitgeschakeld." +msgid "Support/raft interface" +msgstr "" + msgid "" "Filament to print support interface. \"Default\" means no specific filament " "for support interface and current filament is used" @@ -8063,9 +8247,6 @@ msgstr "" msgid "Speed of support" msgstr "Dit is de snelheid voor het printen van support." -msgid "Style" -msgstr "Stijl" - msgid "" "Style and shape of the support. For normal support, projecting the supports " "into a regular grid will create more stable supports (default), while snug " @@ -8099,10 +8280,9 @@ msgstr "Onafhankelijke support laaghoogte" msgid "" "Support layer uses layer height independent with object layer. This is to " -"support customizing z-gap and save print time." +"support customizing z-gap and save print time.This option will be invalid " +"when the prime tower is enabled." msgstr "" -"Ondersteuningslaag gebruikt laaghoogte-onafhankelijk met objectlaag. Dit is " -"ter ondersteuning van het aanpassen van z-gap en om afdruktijd te besparen." msgid "Threshold angle" msgstr "Drempel hoek" @@ -8501,6 +8681,18 @@ msgstr "UpToDate" msgid "Update the configs values of 3mf to latest." msgstr "Update de configuratiewaarden van 3mf naar de nieuwste versie." +msgid "mtcpp" +msgstr "" + +msgid "max triangle count per plate for slicing." +msgstr "" + +msgid "mstpp" +msgstr "" + +msgid "max slicing time per plate in seconds." +msgstr "" + msgid "Output Model Info" msgstr "Model informatie weergeven" @@ -8549,6 +8741,12 @@ msgstr "Filament instellingen laden" msgid "Load filament settings from the specified file list" msgstr "Filament instellingen laden vanuit een bestandslijst" +msgid "Skip Objects" +msgstr "" + +msgid "Skip some objects in this print" +msgstr "" + msgid "Output directory" msgstr "Uitvoermap" @@ -8925,6 +9123,45 @@ msgstr "" "Wist je dat je meer wandlussen en een hogere dunne invuldichtheid kunt " "gebruiken om de sterkte van het model te verbeteren?" +#~ msgid "Keep upper part" +#~ msgstr "Bewaar het bovenstee deel" + +#~ msgid "Keep lower part" +#~ msgstr "Bewaar het onderste deel" + +#~ msgid "Cut to parts" +#~ msgstr "In delen knippen" + +#~ msgid "AMS auto switch filament" +#~ msgstr "AMS automatische filament overschakelen" + +#~ msgid "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." +#~ msgstr "" +#~ "Als u ondersteuningsmateriaal gebruikt voor de ondersteuningsinterface, " +#~ "raden we de volgende instellingen aan:\n" +#~ "0 op z afstand, 0 interface-afstand, concentrisch patroon." + +#~ msgid "" +#~ "The P1P printer does not support smooth timelapse, use traditional " +#~ "timelapse instead." +#~ msgstr "" +#~ "De P1P-printer ondersteunt geen soepele timelapse. Gebruik in plaats " +#~ "daarvan een traditionele timelapse." + +#~ msgid "Support base" +#~ msgstr "Ondersteuningsbasis" + +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." +#~ msgstr "" +#~ "Ondersteuningslaag gebruikt laaghoogte-onafhankelijk met objectlaag. Dit " +#~ "is ter ondersteuning van het aanpassen van z-gap en om afdruktijd te " +#~ "besparen." + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/sv/BambuStudio_sv.po b/bbl/i18n/sv/BambuStudio_sv.po index e7bbf76f7d..fe378fd82d 100644 --- a/bbl/i18n/sv/BambuStudio_sv.po +++ b/bbl/i18n/sv/BambuStudio_sv.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-24 10:26+0800\n" +"POT-Creation-Date: 2023-03-17 16:18+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -249,9 +249,39 @@ msgstr "%" msgid "uniform scale" msgstr "enhetlig skala" +msgid "Left click" +msgstr "" + +msgid "Add connector" +msgstr "" + +msgid "Right click" +msgstr "" + +msgid "Remove connector" +msgstr "" + +msgid "Drag" +msgstr "" + +msgid "Move connector" +msgstr "" + +msgid "Add connector to selection" +msgstr "" + +msgid "Remove connector from selection" +msgstr "" + +msgid "Select all connectors" +msgstr "" + msgid "Cut" msgstr "Beskär" +msgid "Connector" +msgstr "" + msgid "Movement:" msgstr "Rörelse:" @@ -261,14 +291,26 @@ msgstr "Rörelse" msgid "Height" msgstr "Höjd" -msgid "Keep upper part" -msgstr "Behåll övre del" +msgid "Add/Edit connectors" +msgstr "" -msgid "Keep lower part" -msgstr "Behåll lägre del" +msgid "Upper part" +msgstr "" -msgid "Cut to parts" -msgstr "Beskär till delar" +msgid "Lower part" +msgstr "" + +msgid "Keep" +msgstr "" + +msgid "Place on cut" +msgstr "" + +msgid "Flip" +msgstr "" + +msgid "After cut" +msgstr "" msgid "Auto Segment" msgstr "Automatisk Segment" @@ -279,6 +321,77 @@ msgstr "Utför beskärning" msgid "Reset" msgstr "Återställ" +msgid "Connectors" +msgstr "" + +msgid "Remove connectors" +msgstr "" + +msgid "Type" +msgstr "Typ" + +msgid "Prizm" +msgstr "" + +msgid "Frustum" +msgstr "" + +msgid "Square" +msgstr "" + +msgid "Hexagon" +msgstr "" + +msgid "Style" +msgstr "Stil" + +msgid "Shape" +msgstr "Form" + +msgid "Depth ratio" +msgstr "" + +msgid "Confirm connectors" +msgstr "" + +msgid "Cancel" +msgstr "Avbryt" + +msgid "Warning" +msgstr "Varning" + +msgid "Invalid connectors detected" +msgstr "" + +msgid "connector is out of cut contour" +msgstr "" + +msgid "connectors are out of cut contour" +msgstr "" + +msgid "connector is out of object" +msgstr "" + +msgid "connectors is out of object" +msgstr "" + +msgid "Some connectors are overlapped" +msgstr "" + +msgid "" +"Invalid state. \n" +"No one part is selected for keep after cut" +msgstr "" + +msgid "Plug" +msgstr "" + +msgid "Dowel" +msgstr "" + +msgid "Tolerance" +msgstr "" + msgid "Mesh name" msgstr "Mesh namn" @@ -338,9 +451,6 @@ msgstr "%1%" msgid "Can't apply when proccess preview." msgstr "Kan inte tillämpas när processen förhandsgranskas." -msgid "Cancel" -msgstr "Avbryt" - msgid "Operation already cancelling. Please wait few seconds." msgstr "Åtgärden avbryts redan. Vänligen vänta." @@ -409,9 +519,6 @@ msgstr "" msgid "Notice" msgstr "Iakttag" -msgid "Warning" -msgstr "Varning" - msgid "Undefined" msgstr "Oidentifierad" @@ -840,6 +947,9 @@ msgstr "Spegelvänd" msgid "Mirror object" msgstr "Spegelvänd objektet" +msgid "Invalidate cut info" +msgstr "" + msgid "Add Primitive" msgstr "Lägg till Primitiv" @@ -987,6 +1097,9 @@ msgstr "Klicka på ikonen för att redigera support färgläggningen av objektet msgid "Click the icon to edit color painting of the object" msgstr "Klicka på ikonen för att redigera färgläggningen av objektet" +msgid "Click the icon to shift this object to the bed" +msgstr "" + msgid "Loading file" msgstr "Laddar fil" @@ -1009,6 +1122,31 @@ msgstr "" "Växla till inställningsläge för varje objekt för att redigera process " "inställningar för valda objekt." +msgid "Delete connector from object which is a part of cut" +msgstr "" + +msgid "Delete solid part from object which is a part of cut" +msgstr "" + +msgid "Delete negative volume from object which is a part of cut" +msgstr "" + +msgid "" +"To save cut correspondence you can delete all connectors from all related " +"objects." +msgstr "" + +msgid "" +"This action will break a cut correspondence.\n" +"After that model consistency can't be guaranteed .\n" +"\n" +"To manipulate with solid parts or negative volumes you have to invalidate " +"cut infornation first." +msgstr "" + +msgid "Delete all connectors" +msgstr "" + msgid "Deleting the last solid part is not allowed." msgstr "Ej tillåtet att radera den senaste fasta delen." @@ -1018,6 +1156,30 @@ msgstr "Det valda objektet innehåller endast en del och kan inte delas." msgid "Assembly" msgstr "Montering" +msgid "Cut Connectors information" +msgstr "" + +msgid "Object manipulation" +msgstr "" + +msgid "Group manipulation" +msgstr "" + +msgid "Object Settings to modify" +msgstr "" + +msgid "Part Settings to modify" +msgstr "" + +msgid "Layer range Settings to modify" +msgstr "" + +msgid "Part manipulation" +msgstr "" + +msgid "Instance manipulation" +msgstr "" + msgid "Object" msgstr "Objekt" @@ -1662,6 +1824,9 @@ msgstr "Ange ett giltigt värde (K i 0 ~ 0,5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Ange ett giltigt värde (K i 0 ~ 0,5, N i 0,6 ~ 2,0)" +msgid "Other color" +msgstr "" + msgid "Dynamic flow calibration" msgstr "Dynamic flow calibration" @@ -1878,8 +2043,8 @@ msgstr "" "filament informationen har uppdaterats. Under utskrift uppdateras den " "återstående kapaciteten automatiskt." -msgid "AMS auto switch filament" -msgstr "AMS automatisk växling av filament" +msgid "AMS filament backup" +msgstr "" msgid "" "AMS will continue to another spool with the same properties of filament " @@ -2016,9 +2181,6 @@ msgstr "Cirkulär" msgid "Custom" msgstr "Custom" -msgid "Shape" -msgstr "Form" - msgid "Load shape from STL..." msgstr "Ladda form ifrån STL..." @@ -2694,12 +2856,6 @@ msgstr "Monterings vy" msgid "Select Plate" msgstr "Välj Byggplatta" -msgid "All Plates" -msgstr "" - -msgid "Stats" -msgstr "" - msgid "Assembly Return" msgstr "Monterings retur" @@ -3498,6 +3654,10 @@ msgstr "Laddar ner..." msgid "Cloud Slicing..." msgstr "Moln beredning..." +#, c-format, boost-format +msgid "In Cloud Slicing Queue, there are %s tasks ahead." +msgstr "" + #, c-format, boost-format msgid "Layers: %s" msgstr "Lager: %s" @@ -3648,6 +3808,12 @@ msgid_plural "%1$d Objects have color painting." msgstr[0] "%1$d Objektet har färgläggning.@%1$d Objekten har färgläggning." msgstr[1] "%1$d Objektet har färgläggning.@%1$d Objekten har färgläggning." +#, c-format, boost-format +msgid "%1$d object was loaded as a part of cut object." +msgid_plural "%1$d objects were loaded as parts of cut object" +msgstr[0] "" +msgstr[1] "" + msgid "ERROR" msgstr "FEL" @@ -3696,6 +3862,9 @@ msgstr "Support färgläggning" msgid "Color painting" msgstr "Färgläggning" +msgid "Cut connectors" +msgstr "" + msgid "Layers" msgstr "Lager" @@ -4026,6 +4195,15 @@ msgstr "Exportera STL-fil:" msgid "Save file as:" msgstr "Spara fil som:" +msgid "Delete object which is a part of cut object" +msgstr "" + +msgid "" +"You try to delete an object which is a part of a cut object.\n" +"This action will break a cut correspondence.\n" +"After that model consistency can't be guaranteed." +msgstr "" + msgid "The selected object couldn't be split." msgstr "Det valda objektet kan inte delas." @@ -4462,6 +4640,9 @@ msgstr "AMS-filament" msgid "Click to pick filament color" msgstr "Tryck för att välja filament färg" +msgid "Please choose the filament colour" +msgstr "" + msgid "Add/Remove presets" msgstr "Lägg till/Ta bort förinställningar" @@ -4630,6 +4811,9 @@ msgstr "Offline" msgid "(LAN)" msgstr "" +msgid "Search" +msgstr "" + msgid "My Device" msgstr "Min Enhet" @@ -4905,11 +5089,9 @@ msgstr "" msgid "" "When using support material for the support interface, We recommend the " "following settings:\n" -"0 top z distance, 0 interface spacing, concentric pattern." +"0 top z distance, 0 interface spacing, concentric pattern and disable " +"independent support layer height" msgstr "" -"När du använder supportmaterial för support gränssnittet rekommenderar vi " -"följande inställningar:\n" -"0 topp z-avstånd, 0 gränssnittsavstånd, koncentriskt mönster." msgid "" "When recording timelapse without toolhead, it is recommended to add a " @@ -5309,13 +5491,6 @@ msgstr "Allmän" msgid "Capabilities" msgstr "Förmågor" -msgid "" -"The P1P printer does not support smooth timelapse, use traditional timelapse " -"instead." -msgstr "" -"P1P-skrivaren stöder inte smooth timelapse, använd traditionell timelapse " -"istället." - msgid "Select presets to compare" msgstr "" @@ -6491,6 +6666,15 @@ msgid "" "the brim width is analysed and calculated automatically." msgstr "" +msgid "Outer brim only" +msgstr "" + +msgid "Inner brim only" +msgstr "" + +msgid "Outer and inner brim" +msgstr "" + msgid "Brim-object gap" msgstr "Avstånd mellan brim och modell" @@ -6868,9 +7052,6 @@ msgstr "Filament densitet, endast för statistiska ändamål" msgid "g/cm³" msgstr "g/cm³" -msgid "Type" -msgstr "Typ" - msgid "The material type of filament" msgstr "Filament material" @@ -7786,8 +7967,8 @@ msgstr "Nedre Z-avstånd" msgid "The z gap between the bottom support interface and object" msgstr "Z-gapet mellan botten support och objektets anläggningsyta" -msgid "Support base" -msgstr "Support bas" +msgid "Support/raft base" +msgstr "" msgid "" "Filament to print support base and raft. \"Default\" means no specific " @@ -7808,6 +7989,9 @@ msgstr "" "Täcker den övre kontaktytan av support med öglor. Den är inaktiverad som " "standard." +msgid "Support/raft interface" +msgstr "" + msgid "" "Filament to print support interface. \"Default\" means no specific filament " "for support interface and current filament is used" @@ -7881,9 +8065,6 @@ msgstr "" msgid "Speed of support" msgstr "Support hastighet" -msgid "Style" -msgstr "Stil" - msgid "" "Style and shape of the support. For normal support, projecting the supports " "into a regular grid will create more stable supports (default), while snug " @@ -7916,10 +8097,9 @@ msgstr "Oberoende support lagerhöjd" msgid "" "Support layer uses layer height independent with object layer. This is to " -"support customizing z-gap and save print time." +"support customizing z-gap and save print time.This option will be invalid " +"when the prime tower is enabled." msgstr "" -"Supportens lager använder lagerhöjd oberoende med objektlager. Detta är för " -"att stödja anpassning av z-gap och spara utskriftstid." msgid "Threshold angle" msgstr "Gräns vinkel" @@ -8305,6 +8485,18 @@ msgstr "Aktuell" msgid "Update the configs values of 3mf to latest." msgstr "Uppdatera konfigurations värdena i 3mf till det senaste." +msgid "mtcpp" +msgstr "" + +msgid "max triangle count per plate for slicing." +msgstr "" + +msgid "mstpp" +msgstr "" + +msgid "max slicing time per plate in seconds." +msgstr "" + msgid "Output Model Info" msgstr "Mata ut modell information" @@ -8353,6 +8545,12 @@ msgstr "Ladda filament inställningar" msgid "Load filament settings from the specified file list" msgstr "Ladda filament inställningar ifrån vald fil" +msgid "Skip Objects" +msgstr "" + +msgid "Skip some objects in this print" +msgstr "" + msgid "Output directory" msgstr "Mata ut katalog" @@ -8726,6 +8924,44 @@ msgstr "" "Visste du att du kan använda fler väggslingor och högre gles fyllningstäthet " "för att förbättra modellens styrka?" +#~ msgid "Keep upper part" +#~ msgstr "Behåll övre del" + +#~ msgid "Keep lower part" +#~ msgstr "Behåll lägre del" + +#~ msgid "Cut to parts" +#~ msgstr "Beskär till delar" + +#~ msgid "AMS auto switch filament" +#~ msgstr "AMS automatisk växling av filament" + +#~ msgid "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." +#~ msgstr "" +#~ "När du använder supportmaterial för support gränssnittet rekommenderar vi " +#~ "följande inställningar:\n" +#~ "0 topp z-avstånd, 0 gränssnittsavstånd, koncentriskt mönster." + +#~ msgid "" +#~ "The P1P printer does not support smooth timelapse, use traditional " +#~ "timelapse instead." +#~ msgstr "" +#~ "P1P-skrivaren stöder inte smooth timelapse, använd traditionell timelapse " +#~ "istället." + +#~ msgid "Support base" +#~ msgstr "Support bas" + +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." +#~ msgstr "" +#~ "Supportens lager använder lagerhöjd oberoende med objektlager. Detta är " +#~ "för att stödja anpassning av z-gap och spara utskriftstid." + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po index 3da452597f..cb05a60774 100644 --- a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po +++ b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-02-24 10:26+0800\n" +"POT-Creation-Date: 2023-03-17 16:18+0800\n" "PO-Revision-Date: 2023-02-24 10:40+0800\n" "Last-Translator: Jiang Yue \n" "Language-Team: \n" @@ -251,9 +251,39 @@ msgstr "%" msgid "uniform scale" msgstr "等比例缩放" +msgid "Left click" +msgstr "左击" + +msgid "Add connector" +msgstr "添加连接件" + +msgid "Right click" +msgstr "右击" + +msgid "Remove connector" +msgstr "删除连接件" + +msgid "Drag" +msgstr "拖拽" + +msgid "Move connector" +msgstr "移动连接件" + +msgid "Add connector to selection" +msgstr "选择连接件" + +msgid "Remove connector from selection" +msgstr "取消选择连接件" + +msgid "Select all connectors" +msgstr "选择所有连接件" + msgid "Cut" msgstr "剪切" +msgid "Connector" +msgstr "连接件" + msgid "Movement:" msgstr "移动:" @@ -263,14 +293,26 @@ msgstr "移动" msgid "Height" msgstr "高度" -msgid "Keep upper part" -msgstr "保留上半部分" +msgid "Add/Edit connectors" +msgstr "添加/编辑连接件" -msgid "Keep lower part" -msgstr "保留下半部分" +msgid "Upper part" +msgstr "上半部分" -msgid "Cut to parts" -msgstr "切割为零件" +msgid "Lower part" +msgstr "下半部分" + +msgid "Keep" +msgstr "保持" + +msgid "Place on cut" +msgstr "切割面放置到热床" + +msgid "Flip" +msgstr "翻转" + +msgid "After cut" +msgstr "切割后" msgid "Auto Segment" msgstr "自动分割" @@ -281,6 +323,79 @@ msgstr "执行切割" msgid "Reset" msgstr "重置" +msgid "Connectors" +msgstr "连接件" + +msgid "Remove connectors" +msgstr "删除所有连接件" + +msgid "Type" +msgstr "类型" + +msgid "Prizm" +msgstr "棱柱" + +msgid "Frustum" +msgstr "锥体" + +msgid "Square" +msgstr "正方形" + +msgid "Hexagon" +msgstr "六边形" + +msgid "Style" +msgstr "样式" + +msgid "Shape" +msgstr "形状" + +msgid "Depth ratio" +msgstr "深度" + +msgid "Confirm connectors" +msgstr "确认" + +msgid "Cancel" +msgstr "取消" + +msgid "Warning" +msgstr "警告" + +msgid "Invalid connectors detected" +msgstr "检测到无效连接件" + +msgid "connector is out of cut contour" +msgstr "个连接件超出了切割面范围" + +msgid "connectors are out of cut contour" +msgstr "个连接件超出了切割面范围" + +msgid "connector is out of object" +msgstr "个连接件穿透了模型" + +msgid "connectors is out of object" +msgstr "个连接件穿透了模型" + +msgid "Some connectors are overlapped" +msgstr "存在连接件相互重叠" + +msgid "" +"Invalid state. \n" +"No one part is selected for keep after cut" +msgstr "" +"无效状态。\n" +"切割后没有选中要保留的部分" + +msgid "Plug" +msgstr "插销" + +msgid "Dowel" +msgstr "销钉" + +msgid "Tolerance" +msgstr "容差" + msgid "Mesh name" msgstr "Mesh名" @@ -337,9 +452,6 @@ msgstr "%1%" msgid "Can't apply when proccess preview." msgstr "处理预览的过程中无法应用。" -msgid "Cancel" -msgstr "取消" - msgid "Operation already cancelling. Please wait few seconds." msgstr "操作已在取消中,请等待片刻。" @@ -408,9 +520,6 @@ msgstr "水平文字" msgid "Notice" msgstr "通知" -msgid "Warning" -msgstr "警告" - msgid "Undefined" msgstr "未定义" @@ -830,6 +939,9 @@ msgstr "镜像" msgid "Mirror object" msgstr "镜像对象" +msgid "Invalidate cut info" +msgstr "解除切割关系" + msgid "Add Primitive" msgstr "添加标准模型" @@ -974,6 +1086,9 @@ msgstr "点击此图标可编辑这个对象的支撑绘制" msgid "Click the icon to edit color painting of the object" msgstr "点击此图标可编辑这个对象的颜色绘制" +msgid "Click the icon to shift this object to the bed" +msgstr "点击这个图标可将对象移动到热床上" + msgid "Loading file" msgstr "载入文件中" @@ -994,6 +1109,34 @@ msgid "" "objects." msgstr "切换到对象设置模式,以编辑所选对象的工艺参数" +msgid "Delete connector from object which is a part of cut" +msgstr "删除的连接件属于切割对象的一部分" + +msgid "Delete solid part from object which is a part of cut" +msgstr "删除的实体属于切割对象的一部分" + +msgid "Delete negative volume from object which is a part of cut" +msgstr "删除的负体积属于切割对象的一部分" + +msgid "" +"To save cut correspondence you can delete all connectors from all related " +"objects." +msgstr "为保证切割关系,您可以将所有关联对象的连接件一起删除。" + +msgid "" +"This action will break a cut correspondence.\n" +"After that model consistency can't be guaranteed .\n" +"\n" +"To manipulate with solid parts or negative volumes you have to invalidate " +"cut infornation first." +msgstr "" +"该行为将破坏切割关系,在此之后将无法保证模型一致性。\n" +"\n" +"如果要操作子部件或者负零件,需要先解除切割关系。" + +msgid "Delete all connectors" +msgstr "删除所有连接件" + msgid "Deleting the last solid part is not allowed." msgstr "不允许删除对象的最后一个实体零件。" @@ -1003,6 +1146,30 @@ msgstr "目标对象仅包含一个零件,无法被拆分。" msgid "Assembly" msgstr "组合体" +msgid "Cut Connectors information" +msgstr "切割连接件信息" + +msgid "Object manipulation" +msgstr "操作对象" + +msgid "Group manipulation" +msgstr "操作组" + +msgid "Object Settings to modify" +msgstr "要修改的对象设置" + +msgid "Part Settings to modify" +msgstr "要修改的零件设置" + +msgid "Layer range Settings to modify" +msgstr "要修改的图层范围设置" + +msgid "Part manipulation" +msgstr "零件操作" + +msgid "Instance manipulation" +msgstr "实例操作" + msgid "Object" msgstr "对象" @@ -1613,6 +1780,9 @@ msgstr "请输入有效的数值 (K的范围为0~0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "请输入有效的数值 (K的范围为0~0.5, N的范围为0.6~2.0)" +msgid "Other color" +msgstr "其他颜色" + msgid "Dynamic flow calibration" msgstr "动态流量标定" @@ -1813,8 +1983,8 @@ msgstr "" "AMS读取Bambu Lab耗材丝信息同时推算料卷的剩余容量。在打印过程中,剩余容量会自" "动更新。" -msgid "AMS auto switch filament" -msgstr "AMS自动续料" +msgid "AMS filament backup" +msgstr "AMS材料备份" msgid "" "AMS will continue to another spool with the same properties of filament " @@ -1938,9 +2108,6 @@ msgstr "圆" msgid "Custom" msgstr "自定义" -msgid "Shape" -msgstr "形状" - msgid "Load shape from STL..." msgstr "从STL文件加载形状..." @@ -2598,12 +2765,6 @@ msgstr "装配体视图" msgid "Select Plate" msgstr "选择盘" -msgid "All Plates" -msgstr "所有盘" - -msgid "Stats" -msgstr "" - msgid "Assembly Return" msgstr "退出装配体视图" @@ -3394,6 +3555,10 @@ msgstr "下载中..." msgid "Cloud Slicing..." msgstr "云切片中..." +#, c-format, boost-format +msgid "In Cloud Slicing Queue, there are %s tasks ahead." +msgstr "前面还有%s个任务在云端切片队列中" + #, c-format, boost-format msgid "Layers: %s" msgstr "" @@ -3540,6 +3705,11 @@ msgid "%1$d Object has color painting." msgid_plural "%1$d Objects have color painting." msgstr[0] "%1$d对象有涂色。" +#, c-format, boost-format +msgid "%1$d object was loaded as a part of cut object." +msgid_plural "%1$d objects were loaded as parts of cut object" +msgstr[0] "%1$d对象加载为一个切割对象的子部件" + msgid "ERROR" msgstr "" @@ -3588,6 +3758,9 @@ msgstr "支撑绘制" msgid "Color painting" msgstr "颜色绘制" +msgid "Cut connectors" +msgstr "切割连接件" + msgid "Layers" msgstr "层" @@ -3892,6 +4065,17 @@ msgstr "导出 STL 文件:" msgid "Save file as:" msgstr "文件另存为:" +msgid "Delete object which is a part of cut object" +msgstr "删除切割对象的一部分" + +msgid "" +"You try to delete an object which is a part of a cut object.\n" +"This action will break a cut correspondence.\n" +"After that model consistency can't be guaranteed." +msgstr "" +"您正尝试删除切割对象的一部分,这将破坏切割对应关系,删除之后,将无法再保证模" +"型的一致性。" + msgid "The selected object couldn't be split." msgstr "选中的模型不可分裂。" @@ -4319,6 +4503,9 @@ msgstr "AMS 打印丝" msgid "Click to pick filament color" msgstr "点击设置材料颜色" +msgid "Please choose the filament colour" +msgstr "请选择材料颜色" + msgid "Add/Remove presets" msgstr "添加/删除配置" @@ -4484,6 +4671,9 @@ msgstr "离线" msgid "(LAN)" msgstr "(局域网)" +msgid "Search" +msgstr "搜索" + msgid "My Device" msgstr "我的设备" @@ -4737,10 +4927,9 @@ msgstr "" msgid "" "When using support material for the support interface, We recommend the " "following settings:\n" -"0 top z distance, 0 interface spacing, concentric pattern." +"0 top z distance, 0 interface spacing, concentric pattern and disable " +"independent support layer height" msgstr "" -"当使用支撑材料的支撑界面时,我们推荐以下设置。\n" -"0顶层z距离,0界面层间距,同心图案。" msgid "" "When recording timelapse without toolhead, it is recommended to add a " @@ -5101,11 +5290,6 @@ msgstr "常规" msgid "Capabilities" msgstr "能力" -msgid "" -"The P1P printer does not support smooth timelapse, use traditional timelapse " -"instead." -msgstr "P1P打印机不支持平滑模式的延时摄影,请改用传统模式。" - msgid "Select presets to compare" msgstr "选择要比较的预设" @@ -6203,6 +6387,15 @@ msgid "" "the brim width is analysed and calculated automatically." msgstr "设置外墙brim的生成方式,选择自动意味着brim的宽度会被自动分析计算。" +msgid "Outer brim only" +msgstr "仅外侧" + +msgid "Inner brim only" +msgstr "仅内侧" + +msgid "Outer and inner brim" +msgstr "内侧和外侧" + msgid "Brim-object gap" msgstr "Brim与模型的间隙" @@ -6550,9 +6743,6 @@ msgstr "耗材丝的密度。只用于统计信息。" msgid "g/cm³" msgstr "g/cm³" -msgid "Type" -msgstr "类型" - msgid "The material type of filament" msgstr "耗材丝的材料类型" @@ -7381,8 +7571,8 @@ msgstr "底部Z距离" msgid "The z gap between the bottom support interface and object" msgstr "支撑生成于模型表面时,支撑面底部和模型之间的z间隙" -msgid "Support base" -msgstr "支撑主体" +msgid "Support/raft base" +msgstr "支撑/筏层主体" msgid "" "Filament to print support base and raft. \"Default\" means no specific " @@ -7400,6 +7590,9 @@ msgid "" "Cover the top contact layer of the supports with loops. Disabled by default." msgstr "使用圈形走线覆盖顶部接触面。默认关闭。" +msgid "Support/raft interface" +msgstr "支撑/筏层界面" + msgid "" "Filament to print support interface. \"Default\" means no specific filament " "for support interface and current filament is used" @@ -7467,9 +7660,6 @@ msgstr "在水平方向对普通支撑进行拓展(+)或收缩(-)" msgid "Speed of support" msgstr "支撑打印速度" -msgid "Style" -msgstr "样式" - msgid "" "Style and shape of the support. For normal support, projecting the supports " "into a regular grid will create more stable supports (default), while snug " @@ -7500,8 +7690,9 @@ msgstr "支撑独立层高" msgid "" "Support layer uses layer height independent with object layer. This is to " -"support customizing z-gap and save print time." -msgstr "支撑使用不同于对象的层高。这样可以支持自定义Z方向间隙并节省打印时间。" +"support customizing z-gap and save print time.This option will be invalid " +"when the prime tower is enabled." +msgstr "" msgid "Threshold angle" msgstr "阈值角度" @@ -7850,6 +8041,18 @@ msgstr "" msgid "Update the configs values of 3mf to latest." msgstr "" +msgid "mtcpp" +msgstr "" + +msgid "max triangle count per plate for slicing." +msgstr "" + +msgid "mstpp" +msgstr "" + +msgid "max slicing time per plate in seconds." +msgstr "" + msgid "Output Model Info" msgstr "输出模型信息" @@ -7898,6 +8101,12 @@ msgstr "加载耗材丝设置" msgid "Load filament settings from the specified file list" msgstr "从指定文件加载耗材丝设置" +msgid "Skip Objects" +msgstr "零件跳过" + +msgid "Skip some objects in this print" +msgstr "打印过程中跳过一些零件" + msgid "Output directory" msgstr "输出路径" @@ -8248,6 +8457,43 @@ msgstr "" "提高强度\n" "你知道吗?你可以使用更多的墙层数和更高的疏散填充密度来提高模型的强度。" +#~ msgid "Keep upper part" +#~ msgstr "保留上半部分" + +#~ msgid "Keep lower part" +#~ msgstr "保留下半部分" + +#~ msgid "Cut to parts" +#~ msgstr "切割为零件" + +#~ msgid "AMS auto switch filament" +#~ msgstr "AMS自动续料" + +#~ msgid "All Plates" +#~ msgstr "所有盘" + +#~ msgid "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." +#~ msgstr "" +#~ "当使用支撑材料的支撑界面时,我们推荐以下设置。\n" +#~ "0顶层z距离,0界面层间距,同心图案。" + +#~ msgid "" +#~ "The P1P printer does not support smooth timelapse, use traditional " +#~ "timelapse instead." +#~ msgstr "P1P打印机不支持平滑模式的延时摄影,请改用传统模式。" + +#~ msgid "Support base" +#~ msgstr "支撑主体" + +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." +#~ msgstr "" +#~ "支撑使用不同于对象的层高。这样可以支持自定义Z方向间隙并节省打印时间。" + #~ msgid "" #~ "This controls brim position including outer side of models, inner side of " #~ "holes or both. Auto means both the brim position and brim width is " @@ -9364,9 +9610,6 @@ msgstr "" #~ msgid "Smart" #~ msgstr "自动" -#~ msgid "Keep" -#~ msgstr "保持" - #~ msgid "Total Size:" #~ msgstr "总尺寸:" @@ -9457,15 +9700,6 @@ msgstr "" #~ msgid "No brim" #~ msgstr "无" -#~ msgid "Outer brim only" -#~ msgstr "仅外侧" - -#~ msgid "Inner brim only" -#~ msgstr "仅内侧" - -#~ msgid "Outer and inner brim" -#~ msgstr "内侧和外侧" - #~ msgid "X/Y Axis" #~ msgstr "X/Y 轴" @@ -10924,9 +11158,6 @@ msgstr "" #~ msgid "(Re)slice" #~ msgstr "重新切片" -#~ msgid "Search" -#~ msgstr "搜索" - #~ msgid "Select Plater Tab" #~ msgstr "选择 构建板 选项卡" @@ -12218,27 +12449,6 @@ msgstr "" #~ msgid "Add Layers" #~ msgstr "添加图层" -#~ msgid "Group manipulation" -#~ msgstr "操作组" - -#~ msgid "Object manipulation" -#~ msgstr "操作对象" - -#~ msgid "Object Settings to modify" -#~ msgstr "要修改的对象设置" - -#~ msgid "Part Settings to modify" -#~ msgstr "要修改的零件设置" - -#~ msgid "Layer range Settings to modify" -#~ msgstr "要修改的图层范围设置" - -#~ msgid "Part manipulation" -#~ msgstr "零件操作" - -#~ msgid "Instance manipulation" -#~ msgstr "实例操作" - #~ msgid "Height ranges" #~ msgstr "高度范围" diff --git a/resources/i18n/de/BambuStudio.mo b/resources/i18n/de/BambuStudio.mo index fc69bfa55d02306d1b2aabba9ae75e97eff61b14..057aed16b6207f5a69bf2ace7cc3d6b25cf70008 100644 GIT binary patch delta 48069 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 delta 49070 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

JM3d}HA`ZJ+hgZcHX+eA* zeWC+)vW#EKDpuk?^e@JqhHn+x9erD|%e`M%y9tIAGAHTU3VZVc-H!_R39#&;yRc3a z_Ibo2`!qKe{7g6|5RWJSPiz<(O0G8X_uS58W_2Vt07ZO%CD$i#a{js4)7Thq&39=? za|H%1q4@#Y8x`4#j@AW^)8m(4!RN6^ZN0z8)DFa6gug8PcfjoN_Avi4$>Qh@03FzF z2!L@AoKeQTZ$fPgxJ=?6 z^3H@`hL8w^G(7xYa8p6GBI?qu^tf#pnRqBS1oAz44v3#c7kES!_28JR|c z&E>Y*r4kOe!VFiMH6G?rBi=#H?snSZc?53C_ORUNcLLg!Di+x|GRlYuZxz`rx68AD zM#bxN(dP(_5z{-?kY~(BHW$x0!;DXMnW^?%M{uD!Jxg}C8=Yx~v$(bIXl4;u9VYvsw z10R+s3XX^0I4fpMVENb-?%b|;uF7uXjs z2Q!sh_E%?acH6*^ZXvSIVBdjdJvpr2jK5wL`FXtfY-U#J8HFljy)(a1NJm}<4!OB< vmY6tsB_zlTAvQkQ&N{r(n8hv9LW+ZDCNBmaDR-wge;!O{?zvfk`^)|xB}Lo? diff --git a/resources/i18n/en/BambuStudio.mo b/resources/i18n/en/BambuStudio.mo index 26983756b00c50a80375d10f58310571b90b7baf..ab4a8b42c03c287016c0566749d12f11228fd39c 100644 GIT binary patch delta 48110 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 diff --git a/resources/i18n/es/BambuStudio.mo b/resources/i18n/es/BambuStudio.mo index f000b678238126bbf7198c3b23afc6a0937c3a92..b0d5c43a64d16f58c9e3d8951817b54c96a7cbb1 100644 GIT binary patch delta 48069 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 delta 49069 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 diff --git a/resources/i18n/fr/BambuStudio.mo b/resources/i18n/fr/BambuStudio.mo index 53001a33d12c56816bd8a35c05d9660165f786bd..10c642680e8d10efada29d7ae77ace04bd289507 100644 GIT binary patch delta 48095 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 P`Z<}yEvI9hrn>zLeE_Uf delta 48964 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

GUna9FewZZ^wyaOhy-EarN{eXoc6gC(NT9NtA{ zet zui(Yu%m8;~b|~C}^qh5(a2HX(!nfm_1yHNcgN^_jZTv&TzZ7l^j^N^w4g&EI$ATRu ziv5qgFw4?7sxvdoz=5%IdJ=yox}vj)Im;jj!H`QLc%KCkyN9z#Ba7%W#|)2YR3G3N;`_6Y10u@xFuSQt*PjPj&!;bC8cj{uXu zr!ozM5C~WgAcD9|mzN+Ht4)0wf3FKtImWQBlq+>p=I0SlqqhWaiqBAPqV0pVYfJ{z0>u!Xe>(9rvA(Tmf2qK5Q5MZ*_!Zt97fZt<^nhc`81^Up-5m0bzP|@GwkBRh z-U4tUOWpz2-mfT5QD%uRoo0#hx|O8)eOC-HwMm4UAmt9G=gEouZX44 zNr7Y7Gm_45k1OAY-dcEZ)ZukV3~Mh0L_UDkVA&gex@fSenn$TfBz1xG3%fcwr#C#* zIVgSoM{`)>5AkLX>(ly9W&0(%r8>>FdZsxg=d%{y?zADu+WCc3ple>gYQD8SeFK7h z12dPHTf11zdCjpQ)}I=ikB2ArjyHQ*SHzpAN6U2I#6{U=Z)?y;^Ywg*NCa8eIp;_U Lv0e|$@zV7_*ezlT delta 48972 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

ws6Q5~E|t@UlxrhSci!bZ+!me@@}LZ3tmq6Sb4 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 delta 48930 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 diff --git a/resources/i18n/nl/BambuStudio.mo b/resources/i18n/nl/BambuStudio.mo index cf154d8255bba35cc7834b00cdc58d0f7d4197cb..59bb020bbbac391fac8971213f02833d0b84a3ad 100644 GIT binary patch delta 48090 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 delta 49038 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 cHq)$ diff --git a/resources/i18n/sv/BambuStudio.mo b/resources/i18n/sv/BambuStudio.mo index 96ddbee033c2069e59cfd425bfc8518b8b82ca6a..fd70109b7419949c3133ec81967379cdb209affa 100644 GIT binary patch delta 48090 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 t(e^wzR=bkr4yU@gE^-{x diff --git a/resources/i18n/zh_cn/BambuStudio.mo b/resources/i18n/zh_cn/BambuStudio.mo index 2da934683028eed6cd36f4a0534762cdb787e61a..d5064cd6d5b841806c9e8395186c5aae6fee6060 100644 GIT binary patch delta 52973 zcmY)11(a0R8m8gX-MG^@1ZdpdgS)#E+?_yhJ7{o+;1XPeLvSZpaQAR=CpZL{_pAM9 zCR1zGeYX2PRoxKoscq4wUykPA3=KEU<8?oh=Y5Bj%6i_7sGiq zUt?nYg2^%AZqF-*`H`w#AIyjQuqb}S7+7GB=h3WJ4!dJ5q+Q=TN}xCi$FU?v-|Knl zu{vhOzSsm;U#*auf(TugJ&Rs0^a6EB2guoKqAk60ZmA971QABz*eh1#MNhh4l7h7cc! z@o)%g05j0n43-dxgKIH59>Cam2DQZh!{iw654U%DFf;L$s1>_}YVbBDz-L$s!yj>5 z+5qbkpNA3f9cqQX9AW*n)RB+6rA&;Gh^Iy^br#gf3!w&73^mXisB*1QThRqIfW8#cVCJcYhUB4WtdaF?r*o1NLAeK{4mkFdKA;o!DpcLjHUJI+@ z�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 delta 49177 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 YMBXR6q4}Ie{LsXFLKp2q%x>TR0c size_t(0)) out += "\n - " + std::to_string(m_info_stats.outside_cut_contour) + - (m_info_stats.outside_cut_contour == 1 ? L("connector is out of cut contour") : L("connectors are out of cut contour")); + (m_info_stats.outside_cut_contour == 1 ? _L("connector is out of cut contour") : _L("connectors are out of cut contour")); if (m_info_stats.outside_bb > size_t(0)) out += "\n - " + std::to_string(m_info_stats.outside_bb) + - (m_info_stats.outside_bb == 1 ? L("connector is out of object") : L("connectors is out of object")); + (m_info_stats.outside_bb == 1 ? _L("connector is out of object") : _L("connectors is out of object")); if (m_info_stats.is_overlap) out += "\n - " + _L("Some connectors are overlapped"); m_imgui->text(out); } - if (!m_keep_upper && !m_keep_lower) m_imgui->text(/*wxString(ImGui::WarningMarkerSmall)*/"Warning: " + _L("Invalid state. \nNo one part is selected for keep after cut")); + if (!m_keep_upper && !m_keep_lower) m_imgui->text(/*wxString(ImGui::WarningMarkerSmall)*/_L("Warning") + ": " + _L("Invalid state. \nNo one part is selected for keep after cut")); } bool GLGizmoAdvancedCut::render_reset_button(const std::string &label_id, const std::string &tooltip) const @@ -1651,10 +1651,10 @@ bool GLGizmoAdvancedCut::render_connect_type_radio_button(CutConnectorType type) wxString radio_name; switch (type) { case CutConnectorType::Plug: - radio_name = L("Plug"); + radio_name = _L("Plug"); break; case CutConnectorType::Dowel: - radio_name = L("Dowel"); + radio_name = _L("Dowel"); break; default: break; diff --git a/src/slic3r/GUI/Widgets/Button.cpp b/src/slic3r/GUI/Widgets/Button.cpp index 9bd9fbb16b..024a502986 100644 --- a/src/slic3r/GUI/Widgets/Button.cpp +++ b/src/slic3r/GUI/Widgets/Button.cpp @@ -233,10 +233,6 @@ void Button::messureSize() { wxClientDC dc(this); dc.GetTextExtent(GetLabel(), &textSize.width, &textSize.height, &textSize.x, &textSize.y); - if (minSize.GetWidth() > 0) { - wxWindow::SetMinSize(minSize); - return; - } wxSize szContent = textSize.GetSize(); if (this->active_icon.bmp().IsOk()) { if (szContent.y > 0) { @@ -251,7 +247,11 @@ void Button::messureSize() wxSize size = szContent + paddingSize * 2; if (minSize.GetHeight() > 0) size.SetHeight(minSize.GetHeight()); - wxWindow::SetMinSize(size); + + if (minSize.GetWidth() > size.GetWidth()) + wxWindow::SetMinSize(minSize); + else + wxWindow::SetMinSize(size); } void Button::mouseDown(wxMouseEvent& event) From 1f1e5894bbbb690de378738060e9d518fc5d6a5f Mon Sep 17 00:00:00 2001 From: Stone Li Date: Thu, 16 Mar 2023 10:26:32 +0800 Subject: [PATCH 099/339] ENH: add sec_link field to start_bind Change-Id: Ia48592f096b14ea0fe4de20126287c6f885d73a5 Signed-off-by: Stone Li --- src/slic3r/GUI/BindDialog.cpp | 2 +- src/slic3r/GUI/DeviceManager.cpp | 14 +++++++++----- src/slic3r/GUI/DeviceManager.hpp | 1 + src/slic3r/GUI/Jobs/BindJob.cpp | 7 ++++--- src/slic3r/GUI/Jobs/BindJob.hpp | 3 ++- src/slic3r/Utils/NetworkAgent.cpp | 4 ++-- src/slic3r/Utils/NetworkAgent.hpp | 4 ++-- 7 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/slic3r/GUI/BindDialog.cpp b/src/slic3r/GUI/BindDialog.cpp index 09952d48af..cbc6b72c53 100644 --- a/src/slic3r/GUI/BindDialog.cpp +++ b/src/slic3r/GUI/BindDialog.cpp @@ -268,7 +268,7 @@ namespace GUI { agent->track_update_property("dev_ota_version", m_machine_info->get_ota_version()); m_simplebook->SetSelection(0); - m_bind_job = std::make_shared(m_status_bar, wxGetApp().plater(), m_machine_info->dev_id, m_machine_info->dev_ip); + m_bind_job = std::make_shared(m_status_bar, wxGetApp().plater(), m_machine_info->dev_id, m_machine_info->dev_ip, m_machine_info->bind_sec_link); m_bind_job->set_event_handle(this); m_bind_job->start(); } diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 70c9d0cd7a..0699dbb718 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -3781,14 +3781,16 @@ void DeviceManager::on_machine_alive(std::string json_str) std::string printer_signal = j["dev_signal"].get(); std::string connect_type = j["connect_type"].get(); std::string bind_state = j["bind_state"].get(); + std::string sec_link = j["sec_link"].get(); MachineObject* obj; /* update userMachineList info */ auto it = userMachineList.find(dev_id); if (it != userMachineList.end()) { - it->second->dev_ip = dev_ip; - it->second->bind_state = bind_state; + it->second->dev_ip = dev_ip; + it->second->bind_state = bind_state; + it->second->bind_sec_link = sec_link; } /* update localMachineList */ @@ -3802,9 +3804,10 @@ void DeviceManager::on_machine_alive(std::string json_str) obj->dev_ip = dev_ip; /* ip changed reconnect mqtt */ } - obj->wifi_signal = printer_signal; - obj->dev_connection_type = connect_type; - obj->bind_state = bind_state; + obj->wifi_signal = printer_signal; + obj->dev_connection_type= connect_type; + obj->bind_state = bind_state; + obj->bind_sec_link = sec_link; obj->printer_type = MachineObject::parse_printer_type(printer_type_str); // U0 firmware @@ -3827,6 +3830,7 @@ void DeviceManager::on_machine_alive(std::string json_str) obj->wifi_signal = printer_signal; obj->dev_connection_type = connect_type; obj->bind_state = bind_state; + obj->bind_sec_link = sec_link; //load access code AppConfig* config = Slic3r::GUI::wxGetApp().app_config; diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 51d087f21f..eef378977f 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -433,6 +433,7 @@ public: std::string bind_user_name; std::string bind_user_id; std::string bind_state; /* free | occupied */ + std::string bind_sec_link; bool is_avaliable() { return bind_state == "free"; } time_t last_alive; bool m_is_online; diff --git a/src/slic3r/GUI/Jobs/BindJob.cpp b/src/slic3r/GUI/Jobs/BindJob.cpp index 19b389e46d..e285062685 100644 --- a/src/slic3r/GUI/Jobs/BindJob.cpp +++ b/src/slic3r/GUI/Jobs/BindJob.cpp @@ -32,10 +32,11 @@ wxString get_login_fail_reason(std::string fail_reason) return _L("Unknown Failure"); } -BindJob::BindJob(std::shared_ptr pri, Plater *plater, std::string dev_id, std::string dev_ip) +BindJob::BindJob(std::shared_ptr pri, Plater *plater, std::string dev_id, std::string dev_ip, std::string sec_link) : PlaterJob{std::move(pri), plater}, m_dev_id(dev_id), - m_dev_ip(dev_ip) + m_dev_ip(dev_ip), + m_sec_link(sec_link) { ; } @@ -79,7 +80,7 @@ void BindJob::process() long offset = tz.GetOffset(); std::string timezone = get_timezone_utc_hm(offset); - int result = m_agent->bind(m_dev_ip, m_dev_id, timezone, + int result = m_agent->bind(m_dev_ip, m_dev_id, m_sec_link, timezone, [this, &curr_percent, &msg](int stage, int code, std::string info) { if (stage == BBL::BindJobStage::LoginStageConnect) { curr_percent = 15; diff --git a/src/slic3r/GUI/Jobs/BindJob.hpp b/src/slic3r/GUI/Jobs/BindJob.hpp index 89db7def24..4fa9e1ea11 100644 --- a/src/slic3r/GUI/Jobs/BindJob.hpp +++ b/src/slic3r/GUI/Jobs/BindJob.hpp @@ -16,13 +16,14 @@ class BindJob : public PlaterJob std::function m_success_fun{nullptr}; std::string m_dev_id; std::string m_dev_ip; + std::string m_sec_link; bool m_job_finished{ false }; int m_print_job_completed_id = 0; protected: void on_exception(const std::exception_ptr &) override; public: - BindJob(std::shared_ptr pri, Plater *plater, std::string dev_id, std::string dev_ip); + BindJob(std::shared_ptr pri, Plater *plater, std::string dev_id, std::string dev_ip, std::string sec_link); int status_range() const override { diff --git a/src/slic3r/Utils/NetworkAgent.cpp b/src/slic3r/Utils/NetworkAgent.cpp index a7a31b9aad..498c081db9 100644 --- a/src/slic3r/Utils/NetworkAgent.cpp +++ b/src/slic3r/Utils/NetworkAgent.cpp @@ -799,11 +799,11 @@ std::string NetworkAgent::build_login_info() return ret; } -int NetworkAgent::bind(std::string dev_ip, std::string dev_id, std::string timezone, OnUpdateStatusFn update_fn) +int NetworkAgent::bind(std::string dev_ip, std::string dev_id, std::string sec_link, std::string timezone, OnUpdateStatusFn update_fn) { int ret = 0; if (network_agent && bind_ptr) { - ret = bind_ptr(network_agent, dev_ip, dev_id, timezone, update_fn); + ret = bind_ptr(network_agent, dev_ip, dev_id, sec_link, timezone, update_fn); if (ret) BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%, dev_ip=%3%, timezone=%4%") %network_agent %ret %dev_ip %timezone; diff --git a/src/slic3r/Utils/NetworkAgent.hpp b/src/slic3r/Utils/NetworkAgent.hpp index 07a0b2e068..03020c7451 100644 --- a/src/slic3r/Utils/NetworkAgent.hpp +++ b/src/slic3r/Utils/NetworkAgent.hpp @@ -45,7 +45,7 @@ typedef std::string (*func_get_user_nickanme)(void *agent); typedef std::string (*func_build_login_cmd)(void *agent); typedef std::string (*func_build_logout_cmd)(void *agent); typedef std::string (*func_build_login_info)(void *agent); -typedef int (*func_bind)(void *agent, std::string dev_ip, std::string dev_id, std::string timezone, OnUpdateStatusFn update_fn); +typedef int (*func_bind)(void *agent, std::string dev_ip, std::string dev_id, std::string sec_link, std::string timezone, OnUpdateStatusFn update_fn); typedef int (*func_unbind)(void *agent, std::string dev_id); typedef std::string (*func_get_bambulab_host)(void *agent); typedef std::string (*func_get_user_selected_machine)(void *agent); @@ -134,7 +134,7 @@ public: std::string build_login_cmd(); std::string build_logout_cmd(); std::string build_login_info(); - int bind(std::string dev_ip, std::string dev_id, std::string timezone, OnUpdateStatusFn update_fn); + int bind(std::string dev_ip, std::string dev_id, std::string sec_link, std::string timezone, OnUpdateStatusFn update_fn); int unbind(std::string dev_id); std::string get_bambulab_host(); std::string get_user_selected_machine(); From 797c211203bed01087383414fc29f5fdd11dcdcc Mon Sep 17 00:00:00 2001 From: manch1n Date: Fri, 17 Mar 2023 17:09:05 +0800 Subject: [PATCH 100/339] ENH:allow more same color objects arrange together Change-Id: I87a9de3c5ed540c87fdebfe4e69ffa539d78ce40 STUDIO-2462 STUDIO-2463 --- src/libnest2d/include/libnest2d/common.hpp | 2 +- src/libslic3r/Arrange.cpp | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/libnest2d/include/libnest2d/common.hpp b/src/libnest2d/include/libnest2d/common.hpp index 9c6a052d23..8cb77d5a4f 100644 --- a/src/libnest2d/include/libnest2d/common.hpp +++ b/src/libnest2d/include/libnest2d/common.hpp @@ -11,7 +11,7 @@ #include #include -#define MAX_NUM_PLATES 50 +#define MAX_NUM_PLATES 36 #if defined(_MSC_VER) && _MSC_VER <= 1800 || __cplusplus < 201103L #define BP2D_NOEXCEPT diff --git a/src/libslic3r/Arrange.cpp b/src/libslic3r/Arrange.cpp index 2eb90dfe6b..22e9147b64 100644 --- a/src/libslic3r/Arrange.cpp +++ b/src/libslic3r/Arrange.cpp @@ -453,19 +453,23 @@ protected: std::set extruder_ids; int non_virt_cnt = 0; + std::set first_object_extruder_ids; for (int i = 0; i < m_items.size(); i++) { Item& p = m_items[i]; if (p.is_virt_object) continue; extruder_ids.insert(p.extrude_ids.begin(),p.extrude_ids.end()); non_virt_cnt++; + if (non_virt_cnt == 1) { first_object_extruder_ids.insert(p.extrude_ids.begin(), p.extrude_ids.end()); } } extruder_ids.insert(item.extrude_ids.begin(),item.extrude_ids.end()); // add a large cost if not multi materials on same plate is not allowed if (!params.allow_multi_materials_on_same_plate) { + bool first_object = non_virt_cnt == 0; + bool same_color_with_first_object = std::all_of(item.extrude_ids.begin(), item.extrude_ids.end(), + [&](int color) { return first_object_extruder_ids.find(color) != first_object_extruder_ids.end(); }); // non_virt_cnt==0 means it's the first object, which can be multi-color - if (extruder_ids.size() > 1 && non_virt_cnt > 0) - score += LARGE_COST_TO_REJECT * 1.1; + if (!(first_object || same_color_with_first_object)) score += LARGE_COST_TO_REJECT * 1.3; } // for layered printing, we want extruder change as few as possible // this has very weak effect, CAN NOT use a large weight From d7364900dd3e91a43156ad4e4b7df2ecf38aa1bd Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Fri, 17 Mar 2023 21:20:54 +0800 Subject: [PATCH 101/339] ENH: log: reduce the status log level to reduce log under cli Change-Id: I7ab839ce02c22fb48c32b52184649fb951efbe95 (cherry picked from commit 2f1f2bedaf5420ceda3d2f29b7e44a1cc863ccac) --- src/libslic3r/PrintBase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libslic3r/PrintBase.cpp b/src/libslic3r/PrintBase.cpp index 5a330fabd7..4965e1e500 100644 --- a/src/libslic3r/PrintBase.cpp +++ b/src/libslic3r/PrintBase.cpp @@ -107,7 +107,7 @@ void PrintBase::set_status(int percent, const std::string &message, unsigned in if (m_status_callback) m_status_callback(SlicingStatus(percent, message, flags, warning_step)); else - BOOST_LOG_TRIVIAL(info) < Date: Sat, 18 Mar 2023 15:53:13 +0800 Subject: [PATCH 102/339] ENH: tree support style default to Tree Hybrid 1. tree support style default to Tree Hybrid 2. fix an assert bug with MedialAxis::build: assert(polyline.width.size() == polyline.points.size() * 2 - 2) This is caused by the incorrect clear function of ThickPolyline. Change-Id: I8d6507ad366d253493e2749e0cbac8d3d837ee8a (cherry picked from commit bd31e962c11e82005944bef40b17471075e79898) --- src/libslic3r/Polyline.hpp | 4 ++++ src/libslic3r/PrintConfig.hpp | 2 +- src/libslic3r/TreeSupport.cpp | 22 ++++++++++------------ src/libslic3r/TreeSupport.hpp | 1 + 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/libslic3r/Polyline.hpp b/src/libslic3r/Polyline.hpp index ac00888d31..a9d919a22d 100644 --- a/src/libslic3r/Polyline.hpp +++ b/src/libslic3r/Polyline.hpp @@ -234,6 +234,10 @@ public: std::reverse(this->width.begin(), this->width.end()); std::swap(this->endpoints.first, this->endpoints.second); } + void clear() { + Polyline::clear(); + width.clear(); + } std::vector width; std::pair endpoints; diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index f266c935d9..52f4643c5f 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -117,7 +117,7 @@ inline bool is_tree(SupportType stype) }; inline bool is_tree_slim(SupportType type, SupportMaterialStyle style) { - return is_tree(type) && (style==smsDefault || style==smsTreeSlim); + return is_tree(type) && style==smsTreeSlim; }; inline bool is_auto(SupportType stype) { diff --git a/src/libslic3r/TreeSupport.cpp b/src/libslic3r/TreeSupport.cpp index a4bdf42074..5ffa352947 100644 --- a/src/libslic3r/TreeSupport.cpp +++ b/src/libslic3r/TreeSupport.cpp @@ -15,7 +15,6 @@ #define _L(s) Slic3r::I18N::translate(s) #define USE_PLAN_LAYER_HEIGHTS 1 -#define HEIGHT_TO_SWITCH_INFILL_DIRECTION 30 // change infill direction every 20mm #ifndef M_PI #define M_PI 3.1415926535897932384626433832795 @@ -686,9 +685,12 @@ TreeSupport::TreeSupport(PrintObject& object, const SlicingParameters &slicing_p : m_object(&object), m_slicing_params(slicing_params), m_object_config(&object.config()) { m_raft_layers = slicing_params.base_raft_layers + slicing_params.interface_raft_layers; - + support_type = m_object_config->support_type; + support_style = m_object_config->support_style; + if (support_style == smsDefault) + support_style = smsTreeHybrid; SupportMaterialPattern support_pattern = m_object_config->support_base_pattern; - if (m_object_config->support_style == smsTreeHybrid && support_pattern == smpDefault) support_pattern = smpRectilinear; + if (support_style == smsTreeHybrid && support_pattern == smpDefault) support_pattern = smpRectilinear; m_support_params.base_fill_pattern = support_pattern == smpLightning ? ipLightning : support_pattern == smpHoneycomb ? ipHoneycomb : @@ -701,8 +703,7 @@ TreeSupport::TreeSupport(PrintObject& object, const SlicingParameters &slicing_p ipConcentric : (m_support_params.interface_density > 0.95 ? ipRectilinear : ipSupportBase); m_support_params.support_extrusion_width = m_object_config->support_line_width.value > 0 ? m_object_config->support_line_width : m_object_config->line_width; - support_type = m_object_config->support_type; - is_slim = is_tree_slim(support_type, m_object_config->support_style); + is_slim = is_tree_slim(support_type, support_style); MAX_BRANCH_RADIUS = 10.0; tree_support_branch_diameter_angle = 5.0;//is_slim ? 10.0 : 5.0; // by default tree support needs no infill, unless it's tree hybrid which contains normal nodes. @@ -915,7 +916,7 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) if (max_bridge_length > 0 && overhang_areas.size() > 0) { // do not break bridge for normal part in TreeHybrid - bool break_bridge = !(config.support_style == smsTreeHybrid && area(overhang_areas) > m_support_params.thresh_big_overhang); + bool break_bridge = !(support_style == smsTreeHybrid && area(overhang_areas) > m_support_params.thresh_big_overhang); m_object->remove_bridges_from_contacts(lower_layer, layer, extrusion_width_scaled, &overhang_areas, max_bridge_length, break_bridge); } @@ -1503,9 +1504,6 @@ void TreeSupport::generate_toolpaths() } BoundingBox bbox_object(Point(-scale_(1.), -scale_(1.0)), Point(scale_(1.), scale_(1.))); - auto obj_size = m_object->size(); - bool obj_is_vertical = obj_size.x() < obj_size.y(); - int num_layers_to_change_infill_direction = int(HEIGHT_TO_SWITCH_INFILL_DIRECTION / object_config.layer_height.value); // change direction every 30mm std::shared_ptr filler_interface = std::shared_ptr(Fill::new_from_type(m_support_params.contact_fill_pattern)); std::shared_ptr filler_Roof1stLayer = std::shared_ptr(Fill::new_from_type(ipRectilinear)); @@ -1513,7 +1511,7 @@ void TreeSupport::generate_toolpaths() filler_interface->set_bounding_box(bbox_object); filler_Roof1stLayer->set_bounding_box(bbox_object); filler_support->set_bounding_box(bbox_object); - filler_interface->angle = Geometry::deg2rad(object_config.support_angle.value + 90.);//(1 - obj_is_vertical) * M_PI_2;//((1-obj_is_vertical) + int(layer_id / num_layers_to_change_infill_direction)) * M_PI_2;;//layer_id % 2 ? 0 : M_PI_2; + filler_interface->angle = Geometry::deg2rad(object_config.support_angle.value + 90.); filler_Roof1stLayer->angle = Geometry::deg2rad(object_config.support_angle.value + 90.); // generate tree support tool paths @@ -1585,7 +1583,7 @@ void TreeSupport::generate_toolpaths() // base_areas filler_support->spacing = support_flow.spacing(); Flow flow = (layer_id == 0 && m_raft_layers == 0) ? m_object->print()->brim_flow() : support_flow; - if (layer_id>0 && area_group.dist_to_top < 10 && !with_infill && m_object_config->support_style!=smsTreeHybrid) { + if (layer_id>0 && area_group.dist_to_top < 10 && !with_infill && support_style!=smsTreeHybrid) { if (area_group.dist_to_top < 5) // 1 wall at the top <5mm make_perimeter_and_inner_brim(ts_layer->support_fills.entities, poly, 1, flow, erSupportMaterial); else // at least 2 walls for range [5,10) @@ -3325,7 +3323,7 @@ void TreeSupport::generate_contact_points(std::vector m_support_params.thresh_big_overhang) { + if (support_style==smsTreeHybrid && overhang_part.area() > m_support_params.thresh_big_overhang) { Point candidate = overhang_bounds.center(); if (!overhang_part.contains(candidate)) move_inside_expoly(overhang_part, candidate); diff --git a/src/libslic3r/TreeSupport.hpp b/src/libslic3r/TreeSupport.hpp index f2498c8de7..a114a45c5f 100644 --- a/src/libslic3r/TreeSupport.hpp +++ b/src/libslic3r/TreeSupport.hpp @@ -381,6 +381,7 @@ public: bool has_sharp_tails = false; bool has_cantilever = false; SupportType support_type; + SupportMaterialStyle support_style; std::unique_ptr generator; std::unordered_map printZ_to_lightninglayer; From 01bb20e4e16bea650c7366f91bb675bccefeec56 Mon Sep 17 00:00:00 2001 From: tao wang Date: Fri, 17 Mar 2023 12:06:12 +0800 Subject: [PATCH 103/339] ENH:default button for wxwidget adds dark mode style Change-Id: Idfb3b379c97f10f6aa9a4cf6ae18e6dfcc8cff3a --- src/slic3r/GUI/GUI_App.cpp | 56 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 35525dcab2..6728e3ddca 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -2859,8 +2859,9 @@ void GUI_App::init_label_colours() m_color_label_default = is_dark_mode ? wxColour(250, 250, 250) : m_color_label_sys; // wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); m_color_highlight_label_default = is_dark_mode ? wxColour(230, 230, 230): wxSystemSettings::GetColour(/*wxSYS_COLOUR_HIGHLIGHTTEXT*/wxSYS_COLOUR_WINDOWTEXT); m_color_highlight_default = is_dark_mode ? wxColour(78, 78, 78) : wxSystemSettings::GetColour(wxSYS_COLOUR_3DLIGHT); - m_color_hovered_btn_label = is_dark_mode ? wxColour(253, 111, 40) : wxColour(252, 77, 1); - m_color_selected_btn_bg = is_dark_mode ? wxColour(95, 73, 62) : wxColour(228, 220, 216); + m_color_hovered_btn_label = is_dark_mode ? wxColour(255, 255, 254) : wxColour(0,0,0); + m_color_default_btn_label = is_dark_mode ? wxColour(255, 255, 254): wxColour(0,0,0); + m_color_selected_btn_bg = is_dark_mode ? wxColour(84, 84, 91) : wxColour(206, 206, 206); #else m_color_label_default = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); #endif @@ -2889,11 +2890,59 @@ void GUI_App::update_label_colours() tab->update_label_colours(); } +#ifdef _WIN32 +static bool is_focused(HWND hWnd) +{ + HWND hFocusedWnd = ::GetFocus(); + return hFocusedWnd && hWnd == hFocusedWnd; +} + +static bool is_default(wxWindow* win) +{ + wxTopLevelWindow* tlw = find_toplevel_parent(win); + if (!tlw) + return false; + + return win == tlw->GetDefaultItem(); +} +#endif + void GUI_App::UpdateDarkUI(wxWindow* window, bool highlited/* = false*/, bool just_font/* = false*/) { - if (wxButton *btn = dynamic_cast(window)) { + if (wxButton *btn = dynamic_cast(window)) { if (btn->GetWindowStyleFlag() & wxBU_AUTODRAW) return; + else { +#ifdef _WIN32 + if (btn->GetId() == wxID_OK || btn->GetId() == wxID_CANCEL) { + bool is_focused_button = false; + bool is_default_button = false; + + if (!(btn->GetWindowStyle() & wxNO_BORDER)) { + btn->SetWindowStyle(btn->GetWindowStyle() | wxNO_BORDER); + highlited = true; + } + + auto mark_button = [this, btn, highlited](const bool mark) { + btn->SetBackgroundColour(mark ? m_color_selected_btn_bg : highlited ? m_color_highlight_default : m_color_window_default); + btn->SetForegroundColour(mark ? m_color_hovered_btn_label :m_color_default_btn_label); + btn->Refresh(); + btn->Update(); + }; + + // hovering + btn->Bind(wxEVT_ENTER_WINDOW, [mark_button](wxMouseEvent& event) { mark_button(true); event.Skip(); }); + btn->Bind(wxEVT_LEAVE_WINDOW, [mark_button, btn](wxMouseEvent& event) { mark_button(is_focused(btn->GetHWND())); event.Skip(); }); + // focusing + btn->Bind(wxEVT_SET_FOCUS, [mark_button](wxFocusEvent& event) { mark_button(true); event.Skip(); }); + btn->Bind(wxEVT_KILL_FOCUS, [mark_button](wxFocusEvent& event) { mark_button(false); event.Skip(); }); + + is_focused_button = is_focused(btn->GetHWND()); + is_default_button = is_default(btn); + mark_button(is_focused_button); + } +#endif + } } if (Button* btn = dynamic_cast(window)) { @@ -4550,6 +4599,7 @@ int GUI_App::GetSingleChoiceIndex(const wxString& message, { #ifdef _WIN32 wxSingleChoiceDialog dialog(nullptr, message, caption, choices); + dialog.SetBackgroundColour(*wxWHITE); wxGetApp().UpdateDlgDarkUI(&dialog); dialog.SetSelection(initialSelection); From 3f2ee4062b82d8f65891bc211f590baaf0eaceee Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Fri, 10 Mar 2023 11:55:00 +0800 Subject: [PATCH 104/339] ENH: zooming at mouse position https://github.com/bambulab/BambuStudio/issues/1321 Change-Id: Ifa5c2b2931a5d80c3e5e5cc05eda76263a5ac570 --- src/slic3r/GUI/Camera.cpp | 7 +++++++ src/slic3r/GUI/Camera.hpp | 4 +++- src/slic3r/GUI/GLCanvas3D.cpp | 16 +++++++++++++++- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/Camera.cpp b/src/slic3r/GUI/Camera.cpp index ca37795489..d95871c76b 100644 --- a/src/slic3r/GUI/Camera.cpp +++ b/src/slic3r/GUI/Camera.cpp @@ -20,6 +20,7 @@ double Camera::FrustrumMinZRange = 50.0; double Camera::FrustrumMinNearZ = 100.0; double Camera::FrustrumZMargin = 10.0; double Camera::MaxFovDeg = 60.0; +double Camera::ZoomUnit = 0.1; std::string Camera::get_type_as_string() const { @@ -52,6 +53,12 @@ void Camera::select_next_type() set_type((EType)next); } +void Camera::translate(const Vec3d& displacement) { + if (!displacement.isApprox(Vec3d::Zero())) { + m_view_matrix.translate(-displacement); + } +} + void Camera::set_target(const Vec3d& target) { //BBS do not check validation diff --git a/src/slic3r/GUI/Camera.hpp b/src/slic3r/GUI/Camera.hpp index 99133ff572..3bc1385e89 100644 --- a/src/slic3r/GUI/Camera.hpp +++ b/src/slic3r/GUI/Camera.hpp @@ -22,6 +22,7 @@ struct Camera static double FrustrumMinNearZ; static double FrustrumZMargin; static double MaxFovDeg; + static double ZoomUnit; enum class EType : unsigned char { @@ -67,6 +68,7 @@ public: void enable_update_config_on_type_change(bool enable) { m_update_config_on_type_change_enabled = enable; } + void translate(const Vec3d& displacement); const Vec3d& get_target() const { return m_target; } void set_target(const Vec3d& target); @@ -76,7 +78,7 @@ public: double get_zoom() const { return m_zoom; } double get_inv_zoom() const { assert(m_zoom != 0.0); return 1.0 / m_zoom; } - void update_zoom(double delta_zoom) { set_zoom(m_zoom / (1.0 - std::max(std::min(delta_zoom, 4.0), -4.0) * 0.1)); } + void update_zoom(double delta_zoom) { set_zoom(m_zoom / (1.0 - std::max(std::min(delta_zoom, 4.0), -4.0) * ZoomUnit)); } void set_zoom(double zoom); const BoundingBoxf3& get_scene_box() const { return m_scene_box; } diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 469982ae75..fdeb870aae 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -3585,7 +3585,21 @@ void GLCanvas3D::on_mouse_wheel(wxMouseEvent& evt) #else double direction_factor = 1.0; #endif - _update_camera_zoom(direction_factor * (double)evt.GetWheelRotation() / (double)evt.GetWheelDelta()); + auto delta = direction_factor * (double)evt.GetWheelRotation() / (double)evt.GetWheelDelta(); + if (evt.CmdDown()) { + _update_camera_zoom(delta); + } + else { + auto cnv_size = get_canvas_size(); + auto screen_center_3d_pos = _mouse_to_3d({ cnv_size.get_width() * 0.5, cnv_size.get_height() * 0.5 }); + auto mouse_3d_pos = _mouse_to_3d({evt.GetX(), evt.GetY()}); + Vec3d displacement = mouse_3d_pos - screen_center_3d_pos; + wxGetApp().plater()->get_camera().translate(displacement); + auto origin_zoom = wxGetApp().plater()->get_camera().get_zoom(); + _update_camera_zoom(delta); + auto new_zoom = wxGetApp().plater()->get_camera().get_zoom(); + wxGetApp().plater()->get_camera().translate((-displacement) / (new_zoom / origin_zoom)); + } } void GLCanvas3D::on_timer(wxTimerEvent& evt) From b1935669967e6040c7c007a67448eebf71bac0cd Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Thu, 16 Mar 2023 10:01:35 +0800 Subject: [PATCH 105/339] FIX:Canvas focus (STUDIO-2384) https://github.com/bambulab/BambuStudio/issues/1465 https://github.com/bambulab/BambuStudio/issues/1339 two enhancement: Moving mouse cursor to GLCanvas shouldn't cause focused parameter textbox lose its focus. When GLCanvas lose focus, the imgui textInput should lose focus too. Change-Id: I616bb98f87c2dc59669220d3b5a6c3e120a8f06f --- src/slic3r/GUI/GLCanvas3D.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index fdeb870aae..e6d7402763 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2778,6 +2778,11 @@ void GLCanvas3D::bind_event_handlers() m_canvas->Bind(wxEVT_RIGHT_DCLICK, &GLCanvas3D::on_mouse, this); m_canvas->Bind(wxEVT_PAINT, &GLCanvas3D::on_paint, this); m_canvas->Bind(wxEVT_SET_FOCUS, &GLCanvas3D::on_set_focus, this); + m_canvas->Bind(wxEVT_KILL_FOCUS, [this](wxFocusEvent& evt) { + ImGui::SetWindowFocus(nullptr); + render(); + evt.Skip(); + }); m_event_handlers_bound = true; m_canvas->Bind(wxEVT_GESTURE_PAN, &GLCanvas3D::on_gesture, this); @@ -3748,6 +3753,8 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) m_mouse.ignore_left_up = true; m_tooltip.set_in_imgui(false); if (imgui->update_mouse_data(evt)) { + if (evt.LeftDown() && m_canvas != nullptr) + m_canvas->SetFocus(); m_mouse.position = evt.Leaving() ? Vec2d(-1.0, -1.0) : pos.cast(); m_tooltip.set_in_imgui(true); render(); @@ -3910,7 +3917,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) p = p->GetParent(); auto *top_level_wnd = dynamic_cast(p); if (top_level_wnd && top_level_wnd->IsActive() && !wxGetApp().get_side_menu_popup_status()) - m_canvas->SetFocus(); + ;// m_canvas->SetFocus(); m_mouse.position = pos.cast(); m_tooltip_enabled = false; // 1) forces a frame render to ensure that m_hover_volume_idxs is updated even when the user right clicks while From 19669462560b128b3970aef141f8e0ee7fdafda2 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Fri, 17 Mar 2023 13:07:39 +0800 Subject: [PATCH 106/339] FIX: [STUDIO-2489] Monotonic vs monotonic line wrong icon Change-Id: Icb50527ed924e82cb6d3508117ebe09781d8b2d1 --- resources/images/param_monotonic.svg | 12 +++++++++--- resources/images/param_monotonicline.svg | 12 +++--------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/resources/images/param_monotonic.svg b/resources/images/param_monotonic.svg index 0c9245e28a..b959242708 100644 --- a/resources/images/param_monotonic.svg +++ b/resources/images/param_monotonic.svg @@ -1,14 +1,20 @@ - + + + + + + + - + - + diff --git a/resources/images/param_monotonicline.svg b/resources/images/param_monotonicline.svg index b959242708..0c9245e28a 100644 --- a/resources/images/param_monotonicline.svg +++ b/resources/images/param_monotonicline.svg @@ -1,20 +1,14 @@ - + - - - - - - - + - + From c44a240ec0427eca4ed0424fe9bbd8ac7f11f4f0 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Fri, 17 Mar 2023 16:29:56 +0800 Subject: [PATCH 107/339] FIX: [STUDIO-2511] handle dbl click in ComboBox Change-Id: I27075e43de4a78446972806b57771f0880677935 --- src/slic3r/GUI/GLCanvas3D.cpp | 5 ++++- src/slic3r/GUI/GLCanvas3D.hpp | 1 + src/slic3r/GUI/Widgets/ComboBox.cpp | 1 + src/slic3r/GUI/Widgets/DropDown.cpp | 2 +- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index e6d7402763..a71345e306 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -679,6 +679,7 @@ GLCanvas3D::Mouse::Mouse() , position(DBL_MAX, DBL_MAX) , scene_position(DBL_MAX, DBL_MAX, DBL_MAX) , ignore_left_up(false) + , ignore_right_up(false) { } @@ -4175,6 +4176,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) camera.set_target(camera.get_target() + orig - cur_pos); m_dirty = true; + m_mouse.ignore_right_up = true; } m_mouse.drag.start_position_2D = pos; @@ -4264,7 +4266,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) logical_pos = logical_pos.cwiseQuotient(Vec2d(factor, factor)); #endif // ENABLE_RETINA_GL - if (!m_mouse.dragging) { + if (!m_mouse.ignore_right_up) { //BBS post right click event if (!m_hover_plate_idxs.empty()) { post_event(RBtnPlateEvent(EVT_GLCANVAS_PLATE_RIGHT_CLICK, { logical_pos, m_hover_plate_idxs.front() })); @@ -4928,6 +4930,7 @@ void GLCanvas3D::mouse_up_cleanup() m_mouse.set_start_position_2D_as_invalid(); m_mouse.dragging = false; m_mouse.ignore_left_up = false; + m_mouse.ignore_right_up = false; m_dirty = true; if (m_canvas->HasCapture()) diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 601f801ec5..a3628de6dd 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -334,6 +334,7 @@ class GLCanvas3D Vec3d scene_position; Drag drag; bool ignore_left_up; + bool ignore_right_up; Mouse(); diff --git a/src/slic3r/GUI/Widgets/ComboBox.cpp b/src/slic3r/GUI/Widgets/ComboBox.cpp index 800e93a58d..96f4d6b909 100644 --- a/src/slic3r/GUI/Widgets/ComboBox.cpp +++ b/src/slic3r/GUI/Widgets/ComboBox.cpp @@ -6,6 +6,7 @@ BEGIN_EVENT_TABLE(ComboBox, TextInput) EVT_LEFT_DOWN(ComboBox::mouseDown) +EVT_LEFT_DCLICK(ComboBox::mouseDown) //EVT_MOUSEWHEEL(ComboBox::mouseWheelMoved) EVT_KEY_DOWN(ComboBox::keyDown) diff --git a/src/slic3r/GUI/Widgets/DropDown.cpp b/src/slic3r/GUI/Widgets/DropDown.cpp index 5f6afe6fe1..4e77b6dc82 100644 --- a/src/slic3r/GUI/Widgets/DropDown.cpp +++ b/src/slic3r/GUI/Widgets/DropDown.cpp @@ -157,7 +157,7 @@ bool DropDown::HasDismissLongTime() { auto now = boost::posix_time::microsec_clock::universal_time(); return !IsShown() && - (now - dismissTime).total_milliseconds() >= 200; + (now - dismissTime).total_milliseconds() >= 20; } void DropDown::paintEvent(wxPaintEvent& evt) From 2573d3c1123796a41de30df943df248be663e867 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Fri, 17 Mar 2023 14:17:00 +0800 Subject: [PATCH 108/339] FIX: [STUDIO-2509] open self for new window on mac Change-Id: I8fc5b810b00a089f35b914604c511201ae8e5d0b --- src/slic3r/Utils/Process.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/slic3r/Utils/Process.cpp b/src/slic3r/Utils/Process.cpp index 0a037e86c0..b428cf6396 100644 --- a/src/slic3r/Utils/Process.cpp +++ b/src/slic3r/Utils/Process.cpp @@ -60,17 +60,17 @@ static void start_new_slicer_or_gcodeviewer(const NewSlicerInstanceType instance boost::filesystem::path bin_path = into_path(wxStandardPaths::Get().GetExecutablePath()); #if defined(__APPLE__) { - //bin_path = bin_path.parent_path() / "BambuStudio"; - bin_path = "/usr/bin/open"; + bin_path = bin_path.parent_path() / "BambuStudio"; + //bin_path = "/usr/bin/open"; // On Apple the wxExecute fails, thus we use boost::process instead. BOOST_LOG_TRIVIAL(info) << "Trying to spawn a new slicer \"" << bin_path.string() << "\""; try { - std::vector args = { "-n", "-a", "BambuStudio.app"}; + std::vector args;// = { "-n", "-a", "BambuStudio.app"}; if (!paths_to_open.empty()) { for (const auto& file : paths_to_open) args.emplace_back(into_u8(file)); } - args.emplace_back("--args"); + //args.emplace_back("--args"); if (instance_type == NewSlicerInstanceType::GCodeViewer) args.emplace_back("--gcodeviewer"); if (instance_type == NewSlicerInstanceType::Slicer && single_instance) From ef1e4a132d9b74c6ddbd85245dd97122ce4764bf Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Mon, 13 Mar 2023 12:56:43 +0800 Subject: [PATCH 109/339] ENH: [STUDIO-2446] support select media files by group of month/year Change-Id: I10d26e34405a13daa477be011e7353d79232b4b3 --- src/slic3r/GUI/ImageGrid.cpp | 154 +++++++++++-------- src/slic3r/GUI/ImageGrid.h | 2 + src/slic3r/GUI/Printer/PrinterFileSystem.cpp | 65 +++++++- src/slic3r/GUI/Printer/PrinterFileSystem.h | 5 + 4 files changed, 156 insertions(+), 70 deletions(-) diff --git a/src/slic3r/GUI/ImageGrid.cpp b/src/slic3r/GUI/ImageGrid.cpp index eff08335d7..e552783a3e 100644 --- a/src/slic3r/GUI/ImageGrid.cpp +++ b/src/slic3r/GUI/ImageGrid.cpp @@ -5,6 +5,7 @@ #include "I18N.hpp" #include "GUI_App.hpp" #include "GUI.hpp" +#include "MsgDialog.hpp" #include @@ -127,11 +128,12 @@ void Slic3r::GUI::ImageGrid::Rescale() void Slic3r::GUI::ImageGrid::Select(size_t index) { + if (m_selecting) { + m_file_sys->ToggleSelect(index); + Refresh(); + return; + } if (m_file_sys->GetGroupMode() == PrinterFileSystem::G_NONE) { - if (m_selecting) { - m_file_sys->ToggleSelect(index); - Refresh(); - } return; } index = m_file_sys->EnterSubGroup(index); @@ -145,6 +147,13 @@ void Slic3r::GUI::ImageGrid::Select(size_t index) void Slic3r::GUI::ImageGrid::DoAction(size_t index, int action) { if (action == 0) { + if (m_file_sys->GetSelectCount() > 1) { + MessageDialog dlg(this, + wxString::Format(_L("You are going to delete %u files. Are you sure to continue?"), m_file_sys->GetSelectCount()), + _L("Delete files"), wxYES_NO | wxICON_WARNING); + if (dlg.ShowModal() != wxID_YES) + return; + } m_file_sys->DeleteFiles(index); } else if (action == 1) { if (index != -1) { @@ -152,7 +161,9 @@ void Slic3r::GUI::ImageGrid::DoAction(size_t index, int action) if (file.IsDownload() && file.progress >= -1) { if (file.progress >= 100) { if (!m_file_sys->DownloadCheckFile(index)) { - wxMessageBox(wxString::Format(_L("File '%s' was lost! Please download it again."), from_u8(file.name)), _L("Error"), wxOK); + MessageDialog(this, + wxString::Format(_L("File '%s' was lost! Please download it again."), from_u8(file.name)), + _L("Error"), wxOK).ShowModal(); Refresh(); return; } @@ -176,7 +187,9 @@ void Slic3r::GUI::ImageGrid::DoAction(size_t index, int action) if (file.IsDownload() && file.progress >= -1) { if (file.progress >= 100) { if (!m_file_sys->DownloadCheckFile(index)) { - wxMessageBox(wxString::Format(_L("File '%s' was lost! Please download it again."), from_u8(file.name)), _L("Error"), wxOK); + MessageDialog(this, + wxString::Format(_L("File '%s' was lost! Please download it again."), from_u8(file.name)), + _L("Error"), wxOK).ShowModal(); Refresh(); return; } @@ -465,6 +478,8 @@ wxBitmap Slic3r::GUI::ImageGrid::createCircleBitmap(wxSize size, int borderWidth return bmp; } +static constexpr wchar_t const *TIME_FORMATS[] = {_T("%Y-%m-%d"), _T("%Y-%m"), _T("%Y")}; + /* * Here we do the actual rendering. I put it in a separate * method so that it can work no matter what type of DC @@ -495,7 +510,6 @@ void ImageGrid::render(wxDC& dc) // Draw line spacing at top if (off.y > 0) dc.DrawRectangle({0, 0, size.x, off.y}); - constexpr wchar_t const * formats[] = {_T("%Y-%m-%d"), _T("%Y-%m"), _T("%Y")}; size_t start = index; size_t end = index; size_t hit_image = m_selecting ? size_t(-1) : m_hit_type == HIT_ITEM ? m_hit_item : m_hit_type == HIT_ACTION ? m_hit_item / 4 :size_t(-1); @@ -506,65 +520,7 @@ void ImageGrid::render(wxDC& dc) wxPoint pt{off.x, off.y}; end = (index + m_col_count) < m_file_sys->GetCount() ? index + m_col_count : m_file_sys->GetCount(); while (index < end) { - auto & file = m_file_sys->GetFile(index); - // Draw thumbnail - if (file.thumbnail.IsOk()) { - float hs = (float) m_image_size.GetWidth() / file.thumbnail.GetWidth(); - float vs = (float) m_image_size.GetHeight() / file.thumbnail.GetHeight(); - dc.SetUserScale(hs, vs); - dc.DrawBitmap(file.thumbnail, {(int) (pt.x / hs), (int) (pt.y / vs)}); - dc.SetUserScale(1, 1); - if (m_file_sys->GetGroupMode() != PrinterFileSystem::G_NONE) { - dc.DrawBitmap(m_mask, pt); - } - } - bool show_download_state_always = true; - // Draw checked icon - if (m_selecting && !show_download_state_always) - dc.DrawBitmap(file.IsSelect() ? m_checked_icon.bmp() : m_unchecked_icon.bmp(), - pt + wxPoint{10, m_image_size.GetHeight() - m_checked_icon.GetBmpHeight() - 10}); - // can't handle alpha - // dc.GradientFillLinear({pt.x, pt.y, m_image_size.GetWidth(), 60}, wxColour(0x6F, 0x6F, 0x6F, 0x99), wxColour(0x6F, 0x6F, 0x6F, 0), wxBOTTOM); - else if (m_file_sys->GetGroupMode() == PrinterFileSystem::G_NONE) { - wxString nonHoverText; - wxString secondAction = _L("Download"); - wxString thirdAction; - int states = 0; - // Draw download progress - if (file.IsDownload()) { - if (file.progress == -1) { - secondAction = _L("Cancel"); - nonHoverText = _L("Download waiting..."); - } else if (file.progress < 0) { - secondAction = _L("Retry"); - nonHoverText = _L("Download failed"); - states = StateColor::Checked; - } else if (file.progress >= 100) { - secondAction = _L("Play"); - thirdAction = _L("Open Folder"); - nonHoverText = _L("Download finished"); - } else { - secondAction = _L("Cancel"); - nonHoverText = wxString::Format(_L("Downloading %d%%..."), file.progress); - thirdAction = wxString::Format(L"%d%%...", file.progress); - } - } - // Draw buttons on hovered item - wxRect rect{pt.x, pt.y + m_image_size.y - m_buttons_background.GetHeight(), m_image_size.GetWidth(), m_buttons_background.GetHeight()}; - if (hit_image == index) { - renderButtons(dc, {_L("Delete"), (wxChar const *) secondAction, thirdAction.IsEmpty() ? nullptr : (wxChar const *) thirdAction, nullptr}, rect, - m_hit_type == HIT_ACTION ? m_hit_item & 3 : -1, states); - } else if (!nonHoverText.IsEmpty()) { - renderButtons(dc, {(wxChar const *) nonHoverText, nullptr}, rect, -1, states); - } - if (m_selecting && show_download_state_always) - dc.DrawBitmap(file.IsSelect() ? m_checked_icon.bmp() : m_unchecked_icon.bmp(), - pt + wxPoint{10, m_image_size.GetHeight() - m_checked_icon.GetBmpHeight() - 10}); - } else { - dc.SetTextForeground(*wxWHITE); // time text color - auto date = wxDateTime((time_t) file.time).Format(_L(formats[m_file_sys->GetGroupMode()])); - dc.DrawText(date, pt + wxPoint{24, 16}); - } + renderContent(dc, pt, index, hit_image == index); // Draw colume spacing at right dc.DrawRectangle({pt.x + m_image_size.GetWidth(), pt.y, m_cell_size.GetWidth() - m_image_size.GetWidth(), m_image_size.GetHeight()}); ++index; @@ -583,8 +539,8 @@ void ImageGrid::render(wxDC& dc) dc.DrawRectangle({off.x, 0}, m_mask.GetSize()); auto & file1 = m_file_sys->GetFile(start); auto & file2 = m_file_sys->GetFile(end - 1); - auto date1 = wxDateTime((time_t) file1.time).Format(_L(formats[m_file_sys->GetGroupMode()])); - auto date2 = wxDateTime((time_t) file2.time).Format(_L(formats[m_file_sys->GetGroupMode()])); + auto date1 = wxDateTime((time_t) file1.time).Format(_L(TIME_FORMATS[m_file_sys->GetGroupMode()])); + auto date2 = wxDateTime((time_t) file2.time).Format(_L(TIME_FORMATS[m_file_sys->GetGroupMode()])); dc.SetFont(Label::Head_16); dc.SetTextForeground(StateColor::darkModeColorFor("#262E30")); dc.DrawText(date1 + " - " + date2, wxPoint{off.x, 2}); @@ -605,6 +561,68 @@ void ImageGrid::render(wxDC& dc) } } +void Slic3r::GUI::ImageGrid::renderContent(wxDC &dc, wxPoint const &pt, int index, bool hit) +{ + bool selected = false; + auto &file = m_file_sys->GetFile(index, selected); + // Draw thumbnail + if (file.thumbnail.IsOk()) { + float hs = (float) m_image_size.GetWidth() / file.thumbnail.GetWidth(); + float vs = (float) m_image_size.GetHeight() / file.thumbnail.GetHeight(); + dc.SetUserScale(hs, vs); + dc.DrawBitmap(file.thumbnail, {(int) (pt.x / hs), (int) (pt.y / vs)}); + dc.SetUserScale(1, 1); + if (m_file_sys->GetGroupMode() != PrinterFileSystem::G_NONE) { + dc.DrawBitmap(m_mask, pt); + } + } + bool show_download_state_always = true; + // Draw checked icon + if (m_selecting && !show_download_state_always) + dc.DrawBitmap(selected ? m_checked_icon.bmp() : m_unchecked_icon.bmp(), pt + wxPoint{10, m_image_size.GetHeight() - m_checked_icon.GetBmpHeight() - 10}); + // can't handle alpha + // dc.GradientFillLinear({pt.x, pt.y, m_border_size.GetWidth(), 60}, wxColour(0x6F, 0x6F, 0x6F, 0x99), wxColour(0x6F, 0x6F, 0x6F, 0), wxBOTTOM); + else if (m_file_sys->GetGroupMode() == PrinterFileSystem::G_NONE) { + wxString nonHoverText; + wxString secondAction = _L("Download"); + wxString thirdAction; + int states = 0; + // Draw download progress + if (file.IsDownload()) { + if (file.progress == -1) { + secondAction = _L("Cancel"); + nonHoverText = _L("Download waiting..."); + } else if (file.progress < 0) { + secondAction = _L("Retry"); + nonHoverText = _L("Download failed"); + states = StateColor::Checked; + } else if (file.progress >= 100) { + secondAction = _L("Play"); + thirdAction = _L("Open Folder"); + nonHoverText = _L("Download finished"); + } else { + secondAction = _L("Cancel"); + nonHoverText = wxString::Format(_L("Downloading %d%%..."), file.progress); + thirdAction = wxString::Format(L"%d%%...", file.progress); + } + } + // Draw buttons on hovered item + wxRect rect{pt.x, pt.y + m_image_size.GetHeight() - m_buttons_background.GetHeight(), m_image_size.GetWidth(), m_buttons_background.GetHeight()}; + if (hit) { + renderButtons(dc, {_L("Delete"), (wxChar const *) secondAction, thirdAction.IsEmpty() ? nullptr : (wxChar const *) thirdAction, nullptr}, rect, + m_hit_type == HIT_ACTION ? m_hit_item & 3 : -1, states); + } else if (!nonHoverText.IsEmpty()) { + renderButtons(dc, {(wxChar const *) nonHoverText, nullptr}, rect, -1, states); + } + } else { + dc.SetTextForeground(*wxWHITE); // time text color + auto date = wxDateTime((time_t) file.time).Format(_L(TIME_FORMATS[m_file_sys->GetGroupMode()])); + dc.DrawText(date, pt + wxPoint{24, 16}); + } + if (m_selecting && show_download_state_always) + dc.DrawBitmap(selected ? m_checked_icon.bmp() : m_unchecked_icon.bmp(), pt + wxPoint{10, m_image_size.GetHeight() - m_checked_icon.GetBmpHeight() - 10}); +} + void Slic3r::GUI::ImageGrid::renderButtons(wxDC &dc, wxStringList const &texts, wxRect const &rect2, size_t hit, int states) { // Draw background diff --git a/src/slic3r/GUI/ImageGrid.h b/src/slic3r/GUI/ImageGrid.h index 8aef8a5e9d..0aa97b0080 100644 --- a/src/slic3r/GUI/ImageGrid.h +++ b/src/slic3r/GUI/ImageGrid.h @@ -76,6 +76,8 @@ protected: void render(wxDC &dc); + void renderContent(wxDC &dc, wxPoint const &pt, int index, bool hit); + void renderButtons(wxDC &dc, wxStringList const &texts, wxRect const &rect, size_t hit, int states); void renderText(wxDC &dc, wxString const & text, wxRect const & rect, int states); diff --git a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp index 97c506dad9..8915e5f788 100644 --- a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp +++ b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp @@ -78,6 +78,7 @@ void PrinterFileSystem::SetGroupMode(GroupMode mode) return; this->m_group_mode = mode; m_lock_start = m_lock_end = 0; + UpdateGroupSelect(); SendChangedEvent(EVT_MODE_CHANGED); } @@ -131,6 +132,7 @@ void PrinterFileSystem::ListAllFiles() } } BuildGroups(); + UpdateGroupSelect(); m_status = Status::ListReady; SendChangedEvent(EVT_STATUS_CHANGED, m_status); SendChangedEvent(EVT_FILE_CHANGED); @@ -253,7 +255,28 @@ size_t PrinterFileSystem::GetIndexAtTime(boost::uint32_t time) void PrinterFileSystem::ToggleSelect(size_t index) { - if (index < m_file_list.size()) { + if (m_group_mode != G_NONE) { + size_t beg = m_group_mode == G_YEAR ? m_group_month[m_group_year[index]] : m_group_month[index]; + size_t end_month = m_group_mode == G_YEAR ? ((index + 1) < m_group_year.size() ? m_group_year[index + 1] : m_group_month.size()) : index + 1; + size_t end = end_month < m_group_month.size() ? m_group_month[end_month] : m_file_list.size(); + if ((m_group_flags[index] & FF_SELECT) == 0) { + for (int i = beg; i < end; ++i) { + if ((m_file_list[i].flags & FF_SELECT) == 0) { + m_file_list[i].flags |= FF_SELECT; + ++m_select_count; + } + } + m_group_flags[index] |= FF_SELECT; + } else { + for (int i = beg; i < end; ++i) { + if (m_file_list[i].flags & FF_SELECT) { + m_file_list[i].flags &= ~FF_SELECT; + --m_select_count; + } + } + m_group_flags[index] &= ~FF_SELECT; + } + } else if (index < m_file_list.size()) { m_file_list[index].flags ^= FF_SELECT; if (m_file_list[index].flags & FF_SELECT) ++m_select_count; @@ -268,9 +291,11 @@ void PrinterFileSystem::SelectAll(bool select) if (select) { for (auto &f : m_file_list) f.flags |= FF_SELECT; m_select_count = m_file_list.size(); + for (auto &s : m_group_flags) s |= FF_SELECT; } else { for (auto &f : m_file_list) f.flags &= ~FF_SELECT; m_select_count = 0; + for (auto &s : m_group_flags) s &= ~FF_SELECT; } SendChangedEvent(EVT_SELECT_CHANGED, m_select_count); } @@ -289,6 +314,17 @@ PrinterFileSystem::File const &PrinterFileSystem::GetFile(size_t index) { if (m_group_mode == G_NONE) return m_file_list[index]; + if (m_group_mode == G_YEAR) index = m_group_year[index]; + return m_file_list[m_group_month[index]]; +} + +PrinterFileSystem::File const &PrinterFileSystem::GetFile(size_t index, bool &select) +{ + if (m_group_mode == G_NONE) { + select = m_file_list[index].IsSelect(); + return m_file_list[index]; + } + select = m_group_flags[index] & FF_SELECT; if (m_group_mode == G_YEAR) index = m_group_year[index]; return m_file_list[m_group_month[index]]; @@ -380,6 +416,26 @@ void PrinterFileSystem::BuildGroups() } } +void PrinterFileSystem::UpdateGroupSelect() +{ + m_group_flags.clear(); + int beg = 0; + if (m_group_mode != G_NONE) { + auto group = m_group_mode == G_YEAR ? m_group_year : m_group_month; + if (m_group_mode == G_YEAR) + for (auto &g : group) g = m_group_month[g]; + m_group_flags.resize(group.size(), FF_SELECT); + for (int i = 0; i < m_file_list.size(); ++i) { + if ((m_file_list[i].flags & FF_SELECT) == 0) { + auto iter = std::upper_bound(group.begin(), group.end(), i); + m_group_flags[iter - group.begin() - 1] &= ~FF_SELECT; + if (iter == group.end()) break; + i = *iter - 1; // start from next group + } + } + } +} + void PrinterFileSystem::DeleteFilesContinue() { std::vector indexes; @@ -584,9 +640,14 @@ void PrinterFileSystem::FileRemoved(size_t index, std::string const &name) size_t index2 = removeFromGroup(m_group_month, index, m_file_list.size()); if (index2 < m_group_month.size()) { int index3 = removeFromGroup(m_group_year, index, m_group_month.size()); - if (index3 < m_group_year.size()) + if (index3 < m_group_year.size()) { m_group_year.erase(m_group_year.begin() + index3); + if (m_group_mode == G_YEAR) + m_group_flags.erase(m_group_flags.begin() + index2); + } m_group_month.erase(m_group_month.begin() + index2); + if (m_group_mode == G_MONTH) + m_group_flags.erase(m_group_flags.begin() + index2); } m_file_list.erase(m_file_list.begin() + index); } diff --git a/src/slic3r/GUI/Printer/PrinterFileSystem.h b/src/slic3r/GUI/Printer/PrinterFileSystem.h index 7757216217..66e41f2d67 100644 --- a/src/slic3r/GUI/Printer/PrinterFileSystem.h +++ b/src/slic3r/GUI/Printer/PrinterFileSystem.h @@ -146,6 +146,8 @@ public: File const &GetFile(size_t index); + File const &GetFile(size_t index, bool &select); + enum Status { Initializing, Connecting, @@ -170,6 +172,8 @@ public: private: void BuildGroups(); + void UpdateGroupSelect(); + void DeleteFilesContinue(); void DownloadNextFile(); @@ -266,6 +270,7 @@ protected: FileList m_file_list2; std::vector m_group_year; std::vector m_group_month; + std::vector m_group_flags; private: size_t m_select_count = 0; From 1ac8013fa56f75933f279c514c9b58969b267291 Mon Sep 17 00:00:00 2001 From: Arthur Date: Mon, 20 Mar 2023 12:02:15 +0800 Subject: [PATCH 110/339] ENH: improve normal support's efficiency Similar to tree support, make as many steps parallel as possible. Jira: STUDIO-2525 Change-Id: Iee310bbf6911d8d3e4262ee8ed6bd133d09670a9 (cherry picked from commit 3798f1a3ecb85bbfb81925b3702fb4384e18994d) --- src/libslic3r/Polygon.cpp | 20 +++ src/libslic3r/Polygon.hpp | 5 +- src/libslic3r/SupportMaterial.cpp | 284 ++++++++++++++++-------------- src/libslic3r/TreeSupport.cpp | 3 - 4 files changed, 179 insertions(+), 133 deletions(-) diff --git a/src/libslic3r/Polygon.cpp b/src/libslic3r/Polygon.cpp index aaf60bd4d3..5254157917 100644 --- a/src/libslic3r/Polygon.cpp +++ b/src/libslic3r/Polygon.cpp @@ -207,7 +207,18 @@ bool Polygon::intersections(const Line &line, Points *intersections) const } return intersections->size() > intersections_size; } +bool Polygon::overlaps(const Polygons& other) const +{ + if (this->empty() || other.empty()) + return false; + Polylines pl_out = intersection_pl(to_polylines(other), *this); + // See unit test SCENARIO("Clipper diff with polyline", "[Clipper]") + // for in which case the intersection_pl produces any intersection. + return !pl_out.empty() || + // If *this is completely inside other, then pl_out is empty, but the expolygons overlap. Test for that situation. + std::any_of(other.begin(), other.end(), [this](auto& poly) {return poly.contains(this->points.front()); }); +} // Filter points from poly to the output with the help of FilterFn. // filter function receives two vectors: // v1: this_point - previous_point @@ -624,6 +635,15 @@ bool polygons_match(const Polygon &l, const Polygon &r) return true; } +bool overlaps(const Polygons& polys1, const Polygons& polys2) +{ + for (const Polygon& poly1 : polys1) { + if (poly1.overlaps(polys2)) + return true; + } + return false; +} + bool contains(const Polygon &polygon, const Point &p, bool border_result) { if (const int poly_count_inside = ClipperLib::PointInPolygon(p, polygon.points); diff --git a/src/libslic3r/Polygon.hpp b/src/libslic3r/Polygon.hpp index 1628054855..7da63c2cc5 100644 --- a/src/libslic3r/Polygon.hpp +++ b/src/libslic3r/Polygon.hpp @@ -75,7 +75,8 @@ public: bool intersection(const Line& line, Point* intersection) const; bool first_intersection(const Line& line, Point* intersection) const; - bool intersections(const Line &line, Points *intersections) const; + bool intersections(const Line& line, Points* intersections) const; + bool overlaps(const Polygons& other) const; // Considering CCW orientation of this polygon, find all convex resp. concave points // with the angle at the vertex larger than a threshold. @@ -265,6 +266,8 @@ inline Polygons to_polygons(std::vector &&paths) // Do polygons match? If they match, they must have the same topology, // however their contours may be rotated. bool polygons_match(const Polygon &l, const Polygon &r); + +bool overlaps(const Polygons& polys1, const Polygons& polys2); } // Slic3r // start Boost diff --git a/src/libslic3r/SupportMaterial.cpp b/src/libslic3r/SupportMaterial.cpp index e7deaa26a2..21b59f3c9a 100644 --- a/src/libslic3r/SupportMaterial.cpp +++ b/src/libslic3r/SupportMaterial.cpp @@ -1486,14 +1486,13 @@ static const double sharp_tail_max_support_height = 16.f; // Tuple: overhang_polygons, contact_polygons, enforcer_polygons, no_interface_offset // no_interface_offset: minimum of external perimeter widths -static inline Polygons detect_overhangs( +static inline ExPolygons detect_overhangs( const Layer &layer, const size_t layer_id, Polygons &lower_layer_polygons, const PrintConfig &print_config, const PrintObjectConfig &object_config, SupportAnnotations &annotations, - SlicesMarginCache &slices_margin, const double gap_xy #ifdef SLIC3R_DEBUG , size_t iRun @@ -1546,9 +1545,6 @@ static inline Polygons detect_overhangs( } } - const ExPolygons& lower_layer_sharptails = lower_layer.sharp_tails; - auto& lower_layer_sharptails_height = lower_layer.sharp_tails_height; - float lower_layer_offset = 0; for (LayerRegion *layerm : layer.regions()) { // Extrusion width accounts for the roundings of the extrudates. @@ -1598,73 +1594,13 @@ static inline Polygons detect_overhangs( for (ExPolygon& expoly : layerm->raw_slices) { bool is_sharp_tail = false; float accum_height = layer.height; - do { - if (!g_config_support_sharp_tails) { - is_sharp_tail = false; - break; - } - // 1. nothing below - // Check whether this is a sharp tail region. - // Should use lower_layer_expolys without any offset. Otherwise, it may missing sharp tails near the main body. - if (intersection_ex({ expoly }, lower_layer_expolys).empty()) { - is_sharp_tail = expoly.area() < area_thresh_well_supported && !offset_ex(expoly,-0.5*fw).empty(); - break; - } - - // 2. something below - // check whether this is above a sharp tail region. - - // 2.1 If no sharp tail below, this is considered as common region. - ExPolygons supported_by_lower = intersection_ex({ expoly }, lower_layer_sharptails); - if (supported_by_lower.empty()) { - is_sharp_tail = false; - break; - } - - // 2.2 If sharp tail below, check whether it support this region enough. - float supported_area = 0.f; - BoundingBox bbox; - for (ExPolygon& temp : supported_by_lower) { - supported_area += temp.area(); - bbox.merge(get_extents(temp)); - } -#if 0 - if (supported_area > area_thresh_well_supported) { - is_sharp_tail = false; - break; - } -#endif - if (bbox.size().x() > length_thresh_well_supported && bbox.size().y() > length_thresh_well_supported) { - is_sharp_tail = false; - break; - } - - // 2.3 check whether sharp tail exceed the max height - for (auto& lower_sharp_tail_height : lower_layer_sharptails_height) { - if (!intersection_ex(*lower_sharp_tail_height.first, expoly).empty()) { - accum_height += lower_sharp_tail_height.second; - break; - } - } - - if (accum_height >= sharp_tail_max_support_height) { - is_sharp_tail = false; - break; - } - - // 2.4 if the area grows fast than threshold, it get connected to other part or - // it has a sharp slop and will be auto supported. - ExPolygons new_overhang_expolys = diff_ex({ expoly }, lower_layer_sharptails); - Point size_diff = get_extents(new_overhang_expolys).size() - get_extents(lower_layer_sharptails).size(); - if (size_diff.both_comp(Point(scale_(5),scale_(5)),">") || !offset_ex(new_overhang_expolys, -5.0 * fw).empty()) { - is_sharp_tail = false; - break; - } - - // 2.5 mark the expoly as sharptail - is_sharp_tail = true; - } while (0); + // 1. nothing below + // Check whether this is a sharp tail region. + // Should use lower_layer_expolys without any offset. Otherwise, it may missing sharp tails near the main body. + if (g_config_support_sharp_tails && overlaps({ expoly }, lower_layer_expolys)) { + is_sharp_tail = expoly.area() < area_thresh_well_supported && !offset_ex(expoly,-0.5*fw).empty(); + } if (is_sharp_tail) { ExPolygons overhang = diff_ex({ expoly }, lower_layer_polygons); @@ -1702,8 +1638,7 @@ static inline Polygons detect_overhangs( } // for each layer.region } - // BBS: hotfix to make sure ccw polygon is before cw polygon - return to_polygons(union_ex(overhang_polygons)); + return union_ex(overhang_polygons); } // Tuple: overhang_polygons, contact_polygons, enforcer_polygons, no_interface_offset @@ -2127,27 +2062,27 @@ static void merge_contact_layers(const SlicingParameters &slicing_params, double struct OverhangCluster { - std::map> layer_overhangs; - Polygons merged_overhangs_dilated; + std::map> layer_overhangs; + ExPolygons merged_overhangs_dilated; int min_layer = 1e7; int max_layer = 0; coordf_t offset_scaled = 0; - OverhangCluster(Polygon* overhang, int layer_nr, coordf_t offset_scaled) { + OverhangCluster(ExPolygon* overhang, int layer_nr, coordf_t offset_scaled) { this->offset_scaled = offset_scaled; insert(overhang, layer_nr); } - void insert(Polygon* overhang_new, int layer_nr) { + void insert(ExPolygon* overhang_new, int layer_nr) { if (layer_overhangs.find(layer_nr) != layer_overhangs.end()) { layer_overhangs[layer_nr].push_back(overhang_new); } else { - layer_overhangs.emplace(layer_nr, std::vector{ overhang_new }); + layer_overhangs.emplace(layer_nr, std::vector{ overhang_new }); } - Polygons overhang_dilated = offset_scaled > EPSILON ? expand(*overhang_new, offset_scaled) : Polygons{ *overhang_new }; + ExPolygons overhang_dilated = offset_scaled > EPSILON ? offset_ex(*overhang_new, offset_scaled) : ExPolygons{ *overhang_new }; if (!overhang_dilated.empty()) - merged_overhangs_dilated = union_(merged_overhangs_dilated, overhang_dilated); + merged_overhangs_dilated = union_ex(merged_overhangs_dilated, overhang_dilated); min_layer = std::min(min_layer, layer_nr); max_layer = std::max(max_layer, layer_nr); } @@ -2156,24 +2091,25 @@ struct OverhangCluster { return max_layer - min_layer + 1; } - bool intersects(const Polygon& overhang_new, int layer_nr) { + bool intersects(const ExPolygon& overhang_new, int layer_nr) { if (layer_nr < 1) return false; - auto it = layer_overhangs.find(layer_nr - 1); - if (it == layer_overhangs.end()) + //auto it = layer_overhangs.find(layer_nr - 1); + //if (it == layer_overhangs.end()) + // return false; + //ExPolygons overhangs_lower; + //for (ExPolygon* poly : it->second) { + // overhangs_lower.push_back(*poly); + //} + if (layer_nrmax_layer + 1) return false; - - Polygons overhangs_lower; - for (Polygon* poly : it->second) { - overhangs_lower.push_back(*poly); - } - const Polygons overhang_dilated = expand(overhang_new, offset_scaled); - return !intersection(overhang_dilated, overhangs_lower).empty(); + const ExPolygons overhang_dilated = offset_ex(overhang_new, offset_scaled); + return overlaps(overhang_dilated, merged_overhangs_dilated); } }; -static void add_overhang(std::vector& clusters, Polygon* overhang, int layer_nr, coordf_t offset_scaled) { +static void add_overhang(std::vector& clusters, ExPolygon* overhang, int layer_nr, coordf_t offset_scaled) { bool found = false; for (int i = 0; i < clusters.size(); i++) { auto& cluster = clusters[i]; @@ -2224,37 +2160,137 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_ contact_out.assign(num_layers * 2, nullptr); tbb::spin_mutex layer_storage_mutex; - std::vector overhangs_per_layers(num_layers); - for (size_t layer_id = this->has_raft() ? 0 : 1; layer_id < num_layers; layer_id++) { - const Layer& layer = *object.layers()[layer_id]; - Polygons lower_layer_polygons = (layer_id == 0) ? Polygons() : to_polygons(object.layers()[layer_id - 1]->lslices); - SlicesMarginCache slices_margin; + std::vector overhangs_per_layers(num_layers); + size_t layer_id_start = this->has_raft() ? 0 : 1; + // main part of overhang detection can be parallel + tbb::parallel_for(tbb::blocked_range(layer_id_start, num_layers), + [&](const tbb::blocked_range& range) { + for (size_t layer_id = range.begin(); layer_id < range.end(); layer_id++) { + const Layer& layer = *object.layers()[layer_id]; + Polygons lower_layer_polygons = (layer_id == 0) ? Polygons() : to_polygons(object.layers()[layer_id - 1]->lslices); - Polygons overhang_polygons = detect_overhangs(layer, layer_id, lower_layer_polygons, *m_print_config, *m_object_config, annotations, slices_margin, m_support_params.gap_xy + overhangs_per_layers[layer_id] = detect_overhangs(layer, layer_id, lower_layer_polygons, *m_print_config, *m_object_config, annotations, m_support_params.gap_xy #ifdef SLIC3R_DEBUG - , iRun + , iRun #endif // SLIC3R_DEBUG - ); + ); - overhangs_per_layers[layer_id] = std::move(overhang_polygons); + if (object.print()->canceled()) + break; + } + } + ); // end tbb::parallel_for - if (object.print()->canceled()) - return MyLayersPtr(); + if (object.print()->canceled()) + return MyLayersPtr(); + + // check if the sharp tails should be extended higher + bool detect_first_sharp_tail_only = false; + const coordf_t extrusion_width = m_object_config->line_width.value; + const coordf_t extrusion_width_scaled = scale_(extrusion_width); + if (is_auto(m_object_config->support_type.value) && g_config_support_sharp_tails && !detect_first_sharp_tail_only) { + for (size_t layer_nr = 0; layer_nr < object.layer_count(); layer_nr++) { + if (object.print()->canceled()) + break; + + const Layer* layer = object.get_layer(layer_nr); + const Layer* lower_layer = layer->lower_layer; + // skip if: + // 1) if the current layer is already detected as sharp tails + // 2) lower layer has no sharp tails + if (!lower_layer || layer->sharp_tails.empty() == false || lower_layer->sharp_tails.empty() == true) + continue; + ExPolygons lower_polys; + for (const ExPolygon& expoly : lower_layer->lslices) { + if (!offset_ex(expoly, -extrusion_width_scaled / 2).empty()) { + lower_polys.emplace_back(expoly); + } + } + + // BBS detect sharp tail + const ExPolygons& lower_layer_sharptails = lower_layer->sharp_tails; + auto& lower_layer_sharptails_height = lower_layer->sharp_tails_height; + for (const ExPolygon& expoly : layer->lslices) { + bool is_sharp_tail = false; + float accum_height = layer->height; + do { + // 2. something below + // check whether this is above a sharp tail region. + + // 2.1 If no sharp tail below, this is considered as common region. + ExPolygons supported_by_lower = intersection_ex({ expoly }, lower_layer_sharptails); + if (supported_by_lower.empty()) { + is_sharp_tail = false; + break; + } + + // 2.2 If sharp tail below, check whether it support this region enough. +#if 0 + // judge by area isn't reliable, failure cases include 45 degree rotated cube + float supported_area = area(supported_by_lower); + if (supported_area > area_thresh_well_supported) { + is_sharp_tail = false; + break; + } +#endif + BoundingBox bbox = get_extents(supported_by_lower); + if (bbox.size().x() > length_thresh_well_supported && bbox.size().y() > length_thresh_well_supported) { + is_sharp_tail = false; + break; + } + + // 2.3 check whether sharp tail exceed the max height + for (auto& lower_sharp_tail_height : lower_layer_sharptails_height) { + if (lower_sharp_tail_height.first->overlaps(expoly)) { + accum_height += lower_sharp_tail_height.second; + break; + } + } + if (accum_height >= sharp_tail_max_support_height) { + is_sharp_tail = false; + break; + } + + // 2.4 if the area grows fast than threshold, it get connected to other part or + // it has a sharp slop and will be auto supported. + ExPolygons new_overhang_expolys = diff_ex({ expoly }, lower_layer_sharptails); + Point size_diff = get_extents(new_overhang_expolys).size() - get_extents(lower_layer_sharptails).size(); + if (size_diff.both_comp(Point(scale_(5), scale_(5)), ">") || !offset_ex(new_overhang_expolys, -5.0 * extrusion_width_scaled).empty()) { + is_sharp_tail = false; + break; + } + + // 2.5 mark the expoly as sharptail + is_sharp_tail = true; + } while (0); + + if (is_sharp_tail) { + ExPolygons overhang = diff_ex({ expoly }, lower_layer->lslices); + layer->sharp_tails.push_back(expoly); + layer->sharp_tails_height.insert({ &expoly, accum_height }); + append(overhangs_per_layers[layer_nr], overhang); +#ifdef SUPPORT_TREE_DEBUG_TO_SVG + SVG svg(get_svg_filename(std::to_string(layer->print_z), "sharp_tail"), object.bounding_box()); + if (svg.is_opened()) svg.draw(overhang, "yellow"); +#endif + } + + } + } } if (object.print()->canceled()) return MyLayersPtr(); - // BBS + // BBS group overhang clusters if (g_config_remove_small_overhangs) { std::vector clusters; double fw_scaled = scale_(m_object_config->line_width); - std::set removed_overhang; + std::set removed_overhang; - for (size_t layer_id = this->has_raft() ? 0 : 1; layer_id < num_layers; layer_id++) { - for (Polygon& overhang : overhangs_per_layers[layer_id]) { - if (overhang.is_counter_clockwise()) - add_overhang(clusters, &overhang, layer_id, fw_scaled); + for (size_t layer_id = layer_id_start; layer_id < num_layers; layer_id++) { + for (auto& overhang : overhangs_per_layers[layer_id]) { + add_overhang(clusters, &overhang, layer_id, fw_scaled); } } @@ -2276,8 +2312,8 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_ // 3. check whether the small overhang is sharp tail bool is_sharp_tail = false; for (size_t layer_id = cluster.min_layer; layer_id <= cluster.max_layer; layer_id++) { - const Layer& layer = *object.layers()[layer_id]; - if (!intersection_ex(layer.sharp_tails, cluster.merged_overhangs_dilated).empty()) { + const Layer* layer = object.get_layer(layer_id); + if (overlaps(layer->sharp_tails, cluster.merged_overhangs_dilated)) { is_sharp_tail = true; break; } @@ -2293,7 +2329,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_ double dist_max = 0; Points cluster_pts; for (auto& poly : cluster.merged_overhangs_dilated) - append(cluster_pts, poly.points); + append(cluster_pts, poly.contour.points); for (auto& pt : cluster_pts) { double dist_pt = std::numeric_limits::max(); for (auto& poly : cluster_boundary) { @@ -2307,30 +2343,20 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_ // 5. remove small overhangs for (auto overhangs : cluster.layer_overhangs) { - for (Polygon* poly : overhangs.second) + for (auto* poly : overhangs.second) removed_overhang.insert(poly); } } - for (size_t layer_id = this->has_raft() ? 0 : 1; layer_id < num_layers; layer_id++) { - Polygons& layer_overhangs = overhangs_per_layers[layer_id]; + for (size_t layer_id = layer_id_start; layer_id < num_layers; layer_id++) { + auto& layer_overhangs = overhangs_per_layers[layer_id]; if (layer_overhangs.empty()) continue; - bool remove_hole = false; for (int poly_idx = 0; poly_idx < layer_overhangs.size(); poly_idx++) { - Polygon* overhang = &layer_overhangs[poly_idx]; - if (overhang->is_counter_clockwise()) { - if (removed_overhang.find(overhang) != removed_overhang.end()) { - remove_hole = true; - overhang->clear(); - } - else - remove_hole = false; - } - else { - if (remove_hole) - overhang->clear(); + auto* overhang = &layer_overhangs[poly_idx]; + if (removed_overhang.find(overhang) != removed_overhang.end()) { + overhang->clear(); } } } @@ -2339,9 +2365,9 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_ if (object.print()->canceled()) return MyLayersPtr(); - for (size_t layer_id = this->has_raft() ? 0 : 1; layer_id < num_layers; layer_id++) { + for (size_t layer_id = layer_id_start; layer_id < num_layers; layer_id++) { const Layer& layer = *object.layers()[layer_id]; - Polygons overhang_polygons = overhangs_per_layers[layer_id]; + Polygons overhang_polygons = to_polygons(overhangs_per_layers[layer_id]); Polygons lower_layer_polygons = (layer_id == 0) ? Polygons() : to_polygons(object.layers()[layer_id - 1]->lslices); SlicesMarginCache slices_margin; diff --git a/src/libslic3r/TreeSupport.cpp b/src/libslic3r/TreeSupport.cpp index 5ffa352947..919e63bec1 100644 --- a/src/libslic3r/TreeSupport.cpp +++ b/src/libslic3r/TreeSupport.cpp @@ -925,9 +925,6 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) if (!offset_ex(poly, -0.1 * extrusion_width_scaled).empty()) ts_layer->overhang_areas.emplace_back(poly); } - - - } } ); // end tbb::parallel_for From 752c14538479ee880d73688ab27bf953e8c2563c Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Fri, 17 Mar 2023 16:47:50 +0800 Subject: [PATCH 111/339] FIX: Multiple text generated failed. STUDIO-2522 And support generate text on the outer surface of the assembly. Change-Id: Iebe0b47b3f85c3800c799c4b5800514c0f2838fb --- src/slic3r/GUI/Gizmos/GLGizmoText.cpp | 55 ++++++++++++++------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoText.cpp b/src/slic3r/GUI/Gizmos/GLGizmoText.cpp index 0120a8a048..058bc409a9 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoText.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoText.cpp @@ -228,13 +228,6 @@ bool GLGizmoText::gizmo_event(SLAGizmoEventType action, const Vec2d &mouse_posit const ModelInstance *mi = mo->instances[selection.get_instance_idx()]; const Camera & camera = wxGetApp().plater()->get_camera(); - // Precalculate transformations of individual meshes. - std::vector trafo_matrices; - for (const ModelVolume *mv : mo->volumes) { - if (mv->is_model_part()) { - trafo_matrices.emplace_back(mi->get_transformation().get_matrix() * mv->get_matrix()); - } - } if (action == SLAGizmoEventType::Moving) { if (shift_down && !alt_down && !control_down) { float angle = m_rotate_angle + 0.5 * (m_mouse_position - mouse_position).y(); @@ -265,6 +258,23 @@ bool GLGizmoText::gizmo_event(SLAGizmoEventType action, const Vec2d &mouse_posit if (m_is_modify) return true; + Plater *plater = wxGetApp().plater(); + if (!plater) + return true; + + ModelObject *model_object = selection.get_model()->objects[m_object_idx]; + if (m_preview_text_volume_id > 0) { + model_object->delete_volume(m_preview_text_volume_id); + plater->update(); + m_preview_text_volume_id = -1; + } + + // Precalculate transformations of individual meshes. + std::vector trafo_matrices; + for (const ModelVolume *mv : mo->volumes) { + if (mv->is_model_part()) { trafo_matrices.emplace_back(mi->get_transformation().get_matrix() * mv->get_matrix()); } + } + Vec3f normal = Vec3f::Zero(); Vec3f hit = Vec3f::Zero(); size_t facet = 0; @@ -275,9 +285,6 @@ bool GLGizmoText::gizmo_event(SLAGizmoEventType action, const Vec2d &mouse_posit // Cast a ray on all meshes, pick the closest hit and save it for the respective mesh for (int mesh_id = 0; mesh_id < int(trafo_matrices.size()); ++mesh_id) { - if (mesh_id == m_preview_text_volume_id) - continue; - MeshRaycaster mesh_raycaster = MeshRaycaster(mo->volumes[mesh_id]->mesh()); if (mesh_raycaster.unproject_on_mesh(mouse_position, trafo_matrices[mesh_id], camera, hit, normal, @@ -302,17 +309,6 @@ bool GLGizmoText::gizmo_event(SLAGizmoEventType action, const Vec2d &mouse_posit m_rr = {mouse_position, closest_hit_mesh_id, closest_hit, closest_normal}; - Plater *plater = wxGetApp().plater(); - if (!plater) - return true; - - ModelObject *model_object = selection.get_model()->objects[m_object_idx]; - if (m_preview_text_volume_id > 0) { - model_object->delete_volume(m_preview_text_volume_id); - plater->update(); - m_preview_text_volume_id = -1; - } - m_is_modify = true; generate_text_volume(false); plater->update(); @@ -978,20 +974,25 @@ bool GLGizmoText::update_text_positions(const std::vector& texts) TriangleMesh slice_meshs; int mesh_index = 0; + int volume_index = 0; for (int i = 0; i < mo->volumes.size(); ++i) { + // skip the editing text volume + if (m_is_modify && m_volume_idx == i) + continue; + ModelVolume *mv = mo->volumes[i]; if (mv->is_model_part()) { if (mesh_index == m_rr.mesh_id) { - TriangleMesh vol_mesh(mv->mesh()); - vol_mesh.transform(mv->get_matrix()); - slice_meshs = vol_mesh; - break; + volume_index = i; } + TriangleMesh vol_mesh(mv->mesh()); + vol_mesh.transform(mv->get_matrix()); + slice_meshs.merge(vol_mesh); mesh_index++; } } - ModelVolume* volume = mo->volumes[mesh_index]; + ModelVolume* volume = mo->volumes[volume_index]; Vec3d temp_position = m_mouse_position_world; Vec3d temp_normal = m_mouse_normal_world; @@ -1093,7 +1094,7 @@ bool GLGizmoText::update_text_positions(const std::vector& texts) // for debug //export_regions_to_svg(Point(m_mouse_position_world.x(), m_mouse_position_world.y()), temp_polys); - Polygons polys = temp_polys; + Polygons polys = union_(temp_polys); auto point_in_line_rectange = [](const Line &line, const Point &point, double& distance) { distance = abs((point.x() - line.a.x()) * (line.b.y() - line.a.y()) - (line.b.x() - line.a.x()) * (point.y() - line.a.y())); From 34f52b213c56a9dfcb978b68c2f0ce2c53260ee5 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Fri, 17 Mar 2023 10:38:14 +0800 Subject: [PATCH 112/339] FIX: modify the camera command of P1P smooth timelapse P1P use its own layer_change_gcode Change-Id: I3f640a8d6fdc4481460e0f5aca33cd1ebf3de5ab --- resources/profiles/BBL.json | 2 +- resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index f9e4543cc2..cf98c3a397 100644 --- a/resources/profiles/BBL.json +++ b/resources/profiles/BBL.json @@ -1,7 +1,7 @@ { "name": "Bambulab", "url": "http://www.bambulab.com/Parameters/vendor/BBL.json", - "version": "01.05.00.20", + "version": "01.05.00.21", "force_update": "0", "description": "the initial version of BBL configurations", "machine_model_list": [ diff --git a/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json index 575ed0d922..4774f556a4 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json @@ -31,6 +31,7 @@ "nozzle_type": "stainless_steel", "nozzle_hrc": "20", "auxiliary_fan": "0", + "layer_change_gcode": "; layer num/total_layer_count: {layer_num+1}/[total_layer_count]\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\n{if timelapse_type == 0} ; timelapse without wipe tower\nM971 S11 C10 O0\n{elsif timelapse_type == 1} ; timelapse with wipe tower\nG92 E0\nG1 E-[retraction_length] F1800\nG17\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F20000 ; spiral lift a little\nG1 X65 Y245 F20000 ; move to safe pos\nG17\nG2 Z{layer_z} I0.86 J0.86 P1 F20000\nG1 Y265 F3000\nM400 P300\nM971 S11 C11 O0\nG92 E0\nG1 E[retraction_length] F300\nG1 X100 F5000\nG1 Y255 F20000\n{endif}\nM623\n; update layer progress\nM73 L{layer_num+1}\nM991 S0 P{layer_num} ;notify layer change", "upward_compatible_machine":[ "Bambu Lab X1 0.4 nozzle", "Bambu Lab X1 Carbon 0.4 nozzle" From 96d2882b8ddd6dbbfbb7a3f06e47448d5ff3c428 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Wed, 15 Mar 2023 22:35:50 +0800 Subject: [PATCH 113/339] FIX: wipe tower is not generate when insert custom gcode Change-Id: I2e21955e4a29b0ee1aa3150f26ccef4db5850413 (cherry picked from commit 677151a26c9724993bad6d802015e76a700555f4) --- src/libslic3r/Print.cpp | 2 +- src/slic3r/GUI/GCodeViewer.cpp | 15 ++------------- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 6eb2b068e5..cb72ac229f 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -341,7 +341,7 @@ std::vector Print::extruders(bool conside_custom_gcode) const for (auto plate_data : m_model.plates_custom_gcodes) { for (auto item : plate_data.second.gcodes) { if (item.type == CustomGCode::Type::ToolChange) - extruders.push_back((unsigned int)item.extruder); + extruders.push_back((unsigned int)(item.extruder - 1)); } } } diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 96b7fcb754..121e85083c 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -3176,19 +3176,8 @@ void GCodeViewer::load_shells(const Print& print, bool initialized, bool force_p } if (wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() == ptFFF) { - // BBS - // adds wipe tower's volume - std::vector print_extruders; - for (auto print_obj : print.objects()) { - ModelObject* mo = print_obj->model_object(); - for (ModelVolume* mv : mo->volumes) { - std::vector volume_extruders = mv->get_extruders(); - print_extruders.insert(print_extruders.end(), volume_extruders.begin(), volume_extruders.end()); - } - } - std::sort(print_extruders.begin(), print_extruders.end()); - auto it_end = std::unique(print_extruders.begin(), print_extruders.end()); - print_extruders.resize(std::distance(print_extruders.begin(), it_end)); + // BBS: adds wipe tower's volume + std::vector print_extruders = print.extruders(true); int extruders_count = print_extruders.size(); const double max_z = print.objects()[0]->model_object()->get_model()->bounding_box().max(2); From 0b1ccb87081671ef2142de52b8a06768533d492c Mon Sep 17 00:00:00 2001 From: wintergua Date: Wed, 15 Mar 2023 09:21:20 +0800 Subject: [PATCH 114/339] ENH: improve the efficiency of grouping volumes during brim generation the processes are parallized via tbb the patch 12311 ENH: remove trim_overlap should be used Change-Id: I226dc171daadebd81b8d3ae013b08c71b91fb392 (cherry picked from commit eaa2e7997a59f43175d5af430269127471e40cbb) --- src/libslic3r/PrintObjectSlice.cpp | 37 ++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/src/libslic3r/PrintObjectSlice.cpp b/src/libslic3r/PrintObjectSlice.cpp index 2a33241e16..2194fc98a8 100644 --- a/src/libslic3r/PrintObjectSlice.cpp +++ b/src/libslic3r/PrintObjectSlice.cpp @@ -451,20 +451,33 @@ static std::vector> slices_to_regions( bool doesVolumeIntersect(VolumeSlices& vs1, VolumeSlices& vs2) { if (vs1.volume_id == vs2.volume_id) return true; + // two volumes in the same object should have same number of layers, otherwise the slicing is incorrect. if (vs1.slices.size() != vs2.slices.size()) return false; - for (int i = 0; i != vs1.slices.size(); ++i) { + auto& vs1s = vs1.slices; + auto& vs2s = vs2.slices; + bool is_intersect = false; - if (vs1.slices[i].empty()) continue; - if (!vs2.slices[i].empty() && !intersection_ex(vs1.slices[i], vs2.slices[i]).empty()) return true; - if (i + 1 != vs2.slices.size() && !vs2.slices[i + 1].empty()) { - if (!intersection_ex(vs1.slices[i], vs2.slices[i + 1]).empty()) return true; - } - if (i - 1 >= 0 && !vs2.slices[i - 1].empty()) { - if (!intersection_ex(vs1.slices[i], vs2.slices[i - 1]).empty()) return true; - } - } - return false; + tbb::parallel_for(tbb::blocked_range(0, vs1s.size()), + [&vs1s, &vs2s, &is_intersect](const tbb::blocked_range& range) { + for (auto i = range.begin(); i != range.end(); ++i) { + if (vs1s[i].empty()) continue; + + if (overlaps(vs1s[i], vs2s[i])) { + is_intersect = true; + break; + } + if (i + 1 != vs2s.size() && overlaps(vs1s[i], vs2s[i + 1])) { + is_intersect = true; + break; + } + if (i - 1 >= 0 && overlaps(vs1s[i], vs2s[i - 1])) { + is_intersect = true; + break; + } + } + }); + return is_intersect; } //BBS: grouping the volumes of an object according to their connection relationship @@ -744,7 +757,7 @@ void PrintObject::slice() m_layers = new_layers(this, generate_object_layers(m_slicing_params, layer_height_profile)); this->slice_volumes(); m_print->throw_if_canceled(); -#if 0 +#if 1 // Fix the model. //FIXME is this the right place to do? It is done repeateadly at the UI and now here at the backend. std::string warning = fix_slicing_errors(this, m_layers, [this](){ m_print->throw_if_canceled(); }); From 9e077b2e65698ca29f312662562ab1b72b333dba Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Tue, 21 Mar 2023 10:34:05 +0800 Subject: [PATCH 115/339] ENH: refine some logic when loading 3mf 1. old 3mf judge logic improvement 2. some 3mf doesn't include gcode and geometry, treat it as empty project Change-Id: I9b3f3d04e32ae6ff273ec1ae04c04ac6329487f0 --- src/libslic3r/Format/bbs_3mf.cpp | 4 ++-- src/slic3r/GUI/PartPlate.cpp | 21 +++++++++++++-------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index eb6bbe8ad9..77d40d7667 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -1718,7 +1718,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) for (auto connector : cut_object_info->second.connectors) { assert(0 <= connector.volume_id && connector.volume_id <= int(model_object->volumes.size())); - model_object->volumes[connector.volume_id]->cut_info = + model_object->volumes[connector.volume_id]->cut_info = ModelVolume::CutInfo(CutConnectorType(connector.type), connector.r_tolerance, connector.h_tolerance, true); } } @@ -3270,7 +3270,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) bool _BBS_3MF_Importer::_handle_end_metadata() { if ((m_curr_metadata_name == BBS_3MF_VERSION)||(m_curr_metadata_name == BBS_3MF_VERSION1)) { - m_is_bbl_3mf = true; + //m_is_bbl_3mf = true; m_version = (unsigned int)atoi(m_curr_characters.c_str()); /*if (m_check_version && (m_version > VERSION_BBS_3MF_COMPATIBLE)) { // std::string msg = _(L("The selected 3mf file has been saved with a newer version of " + std::string(SLIC3R_APP_NAME) + " and is not compatible.")); diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 073c0c796c..2c1193f4ae 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -2335,16 +2335,21 @@ int PartPlate::load_gcode_from_file(const std::string& filename) // BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format("Failed to rename the output G-code file from %1% to %2%, error code %3%") % filename.c_str() % path.c_str() % //error.message(); return -1; //} - if (boost::filesystem::exists(filename)) { - assert(m_tmp_gcode_path.empty()); - m_tmp_gcode_path = filename; - m_gcode_result->filename = filename; - m_print->set_gcode_file_ready(); + if (boost::filesystem::exists(filename)) { + assert(m_tmp_gcode_path.empty()); + m_tmp_gcode_path = filename; + m_gcode_result->filename = filename; + m_print->set_gcode_file_ready(); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": from %1% to %2%, finished") % filename.c_str() % filename.c_str(); - } + update_slice_result_valid_state(true); + + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": found valid gcode file %1%") % filename.c_str(); + } + else { + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": can not find gcode file %1%") % filename.c_str(); + ret = -1; + } - update_slice_result_valid_state(true); m_ready_for_slice = true; return ret; } From 82d10c34e0421258d5552626718060ee7d760fb3 Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Tue, 21 Mar 2023 17:59:23 +0800 Subject: [PATCH 116/339] ENH: improve the send all logic if has one plate with valid gcode, let the send_all success https://jira.bambooolab.com/browse/STUDIO-2355 Change-Id: I9f022604e354560fea67d2914294391194e5234f --- src/slic3r/GUI/Jobs/SendJob.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/Jobs/SendJob.cpp b/src/slic3r/GUI/Jobs/SendJob.cpp index eb3a065dc2..189ddec298 100644 --- a/src/slic3r/GUI/Jobs/SendJob.cpp +++ b/src/slic3r/GUI/Jobs/SendJob.cpp @@ -162,9 +162,26 @@ void SendJob::process() PartPlate* plate = m_plater->get_partplate_list().get_plate(job_data.plate_idx); if (plate == nullptr) { - plate = m_plater->get_partplate_list().get_curr_plate(); - if (plate == nullptr) - return; + if (job_data.plate_idx == PLATE_ALL_IDX) { + //all plate + for (int index = 0; index < total_plate_num; index++) + { + PartPlate* plate_n = m_plater->get_partplate_list().get_plate(index); + if (plate_n && plate_n->is_valid_gcode_file()) + { + plate = plate_n; + break; + } + } + } + else { + plate = m_plater->get_partplate_list().get_curr_plate(); + } + if (plate == nullptr) { + BOOST_LOG_TRIVIAL(error) << "can not find plate with valid gcode file when sending to print, plate_index="<< job_data.plate_idx; + update_status(curr_percent, check_gcode_failed_str); + return; + } } /* check gcode is valid */ From 24657f9145e97b9ff177537fa1a884da6c44efb6 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Tue, 21 Mar 2023 10:45:47 +0800 Subject: [PATCH 117/339] FIX: negative volume scaling error when the instance is scaled first Change-Id: I47b329123cb2b021a388fb1dbbcfe8c4cc927bc7 --- src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp index b6968abe9f..7c7b158d08 100644 --- a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp +++ b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp @@ -330,8 +330,11 @@ void GizmoObjectManipulation::change_size_value(int axis, double value) const Selection& selection = m_glcanvas.get_selection(); Vec3d ref_size = m_cache.size; - if (selection.is_single_volume() || selection.is_single_modifier()) + if (selection.is_single_volume() || selection.is_single_modifier()) { + Vec3d instance_scale = wxGetApp().model().objects[selection.get_volume(*selection.get_volume_idxs().begin())->object_idx()]->instances[0]->get_transformation().get_scaling_factor(); ref_size = selection.get_volume(*selection.get_volume_idxs().begin())->bounding_box().size(); + ref_size = Vec3d(instance_scale[0] * ref_size[0], instance_scale[1] * ref_size[1], instance_scale[2] * ref_size[2]); + } else if (selection.is_single_full_instance()) ref_size = m_world_coordinates ? selection.get_unscaled_instance_bounding_box().size() : From 5bb35c308687040a636dee8c20737c3991c2a452 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Tue, 21 Mar 2023 16:03:04 +0800 Subject: [PATCH 118/339] FIX: German Umlaut's not usable (3D Text Tool) STUDIO-2515 Change-Id: I193cb00f86476ed9088d69426ed17816a9df8de5 --- src/slic3r/GUI/Gizmos/GLGizmoText.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoText.cpp b/src/slic3r/GUI/Gizmos/GLGizmoText.cpp index 058bc409a9..f62387d5ec 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoText.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoText.cpp @@ -21,6 +21,7 @@ #endif #include #include "libslic3r/SVG.hpp" +#include namespace Slic3r { namespace GUI { @@ -1378,6 +1379,11 @@ TriangleMesh GLGizmoText::get_text_mesh(const char* text_str, const Vec3d &posit Vec3d new_text_dir = project_on_plane(text_up_dir, normal); new_text_dir.normalize(); Geometry::rotation_from_two_vectors(old_text_dir, new_text_dir, rotation_axis, phi, &rotation_matrix); + + static double const PI = 3.141592653589793238; + if (abs(phi - PI) < EPSILON) + rotation_axis = normal; + mesh.rotate(phi, rotation_axis); const Selection & selection = m_parent.get_selection(); @@ -1439,10 +1445,11 @@ void GLGizmoText::generate_text_volume(bool is_temp) if (text.empty()) return; + std::wstring_convert> str_cnv; + std::wstring ws = boost::nowide::widen(m_text); std::vector alphas; - if (!get_utf8_sub_strings(m_text, strlen(m_text), alphas)) { - BOOST_LOG_TRIVIAL(info) << boost::format("Text: input text is not utf8"); - return; + for (auto w : ws) { + alphas.push_back(str_cnv.to_bytes(w)); } update_text_positions(alphas); From 0a1c597da04d7302876dc4104e3d4880de253a52 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Wed, 22 Mar 2023 09:08:30 +0800 Subject: [PATCH 119/339] NEW: add track for cmd ack Change-Id: Ibf2c9874bfac0b7a83506a7de2418ef8f3650dc3 --- src/slic3r/GUI/DeviceManager.cpp | 39 +++++++++++++++++++++++++++++++- src/slic3r/GUI/DeviceManager.hpp | 5 +++- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 0699dbb718..c0db6825a8 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -1393,6 +1393,14 @@ void MachineObject::parse_version_func() } } +bool MachineObject::is_studio_cmd(int sequence_id) +{ + if (sequence_id >= START_SEQ_ID && sequence_id < END_SEQ_ID) { + return true; + } + return false; +} + int MachineObject::command_get_version(bool with_retry) { BOOST_LOG_TRIVIAL(info) << "command_get_version"; @@ -2355,6 +2363,16 @@ int MachineObject::parse_json(std::string payload) if (j.contains("print")) { json jj = j["print"]; + int sequence_id = 0; + if (jj.contains("sequence_id")) { + std::string str_seq = jj["sequence_id"].get(); + try { + sequence_id = stoi(str_seq); + } + catch(...) { + ; + } + } if (jj.contains("command")) { if (jj["command"].get() == "push_status") { m_push_count++; @@ -3298,9 +3316,23 @@ int MachineObject::parse_json(std::string payload) } else if (jj["command"].get() == "gcode_line") { //ack of gcode_line BOOST_LOG_TRIVIAL(debug) << "parse_json, ack of gcode_line = " << j.dump(4); + if (m_agent && is_studio_cmd(sequence_id)) { + json t; + t["dev_id"] = this->dev_id; + t["signal"] = this->wifi_signal; + m_agent->track_event("ack_cmd_gcode_line", t.dump()); + } } else if (jj["command"].get() == "project_file") { //ack of project file BOOST_LOG_TRIVIAL(debug) << "parse_json, ack of project_file = " << j.dump(4); + + if (m_agent && is_studio_cmd(sequence_id)) { + json t; + t["dev_id"] = this->dev_id; + t["signal"] = this->wifi_signal; + m_agent->track_event("ack_cmd_project_file", t.dump()); + } + std::string result; if (jj.contains("result")) { result = jj["result"].get(); @@ -3558,8 +3590,13 @@ int MachineObject::publish_gcode(std::string gcode_str) j["print"]["param"] = gcode_str; j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); - if (m_agent) + if (m_agent) { j["print"]["user_id"] = m_agent->get_user_id(); + json t; + t["dev_id"] = this->dev_id; + t["signal"] = this->wifi_signal; + m_agent->track_event("cmd_gcode_line", t.dump()); + } return publish_json(j.dump()); } diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index eef378977f..a6dd286e33 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -33,6 +33,8 @@ #define GET_VERSION_RETRYS 10 #define RETRY_INTERNAL 2000 #define VIRTUAL_TRAY_ID 254 +#define START_SEQ_ID 20000 +#define END_SEQ_ID 30000 inline int correct_filament_temperature(int filament_temp) { @@ -389,7 +391,7 @@ public: }; /* static members and functions */ - static inline int m_sequence_id = 20000; + static inline int m_sequence_id = START_SEQ_ID; static std::string parse_printer_type(std::string type_str); static std::string get_preset_printer_model_name(std::string printer_type); static std::string get_preset_printer_thumbnail_img(std::string printer_type); @@ -684,6 +686,7 @@ public: ~MachineObject(); void parse_version_func(); + bool is_studio_cmd(int seq); /* command commands */ int command_get_version(bool with_retry = true); int command_request_push_all(); From 36e0cc0b1297ac14c869dbc81740eb999f61590d Mon Sep 17 00:00:00 2001 From: Stone Li Date: Wed, 22 Mar 2023 08:38:44 +0800 Subject: [PATCH 120/339] ENH: optimize track logic Change-Id: I1fea7eb9681389924c32f3754fc77ee21a3ab898 Signed-off-by: Stone Li --- src/slic3r/GUI/GUI_App.cpp | 1 + src/slic3r/Utils/NetworkAgent.cpp | 4 ++++ src/slic3r/Utils/NetworkAgent.hpp | 3 +-- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 6728e3ddca..312d73e25c 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -3954,6 +3954,7 @@ void GUI_App::check_track_enable() wxString os_desc = wxGetOsDescription(); int major = 0, minor = 0, micro = 0; header_json["os"] = std::string(os_desc.ToUTF8()); + header_json["name"] = std::string(SLIC3R_APP_NAME); if (m_agent) { m_agent->track_header(header_json.dump()); m_agent->track_enable(true); diff --git a/src/slic3r/Utils/NetworkAgent.cpp b/src/slic3r/Utils/NetworkAgent.cpp index 498c081db9..2f4323bbfa 100644 --- a/src/slic3r/Utils/NetworkAgent.cpp +++ b/src/slic3r/Utils/NetworkAgent.cpp @@ -1144,6 +1144,7 @@ int NetworkAgent::get_my_profile(std::string token, unsigned int *http_code, std int NetworkAgent::track_enable(bool enable) { + enable_track = enable; int ret = 0; if (network_agent && track_enable_ptr) { ret = track_enable_ptr(network_agent, enable); @@ -1155,6 +1156,9 @@ int NetworkAgent::track_enable(bool enable) int NetworkAgent::track_event(std::string evt_key, std::string content) { + if (!this->enable_track) + return 0; + int ret = 0; if (network_agent && track_event_ptr) { ret = track_event_ptr(network_agent, evt_key, content); diff --git a/src/slic3r/Utils/NetworkAgent.hpp b/src/slic3r/Utils/NetworkAgent.hpp index 03020c7451..cf1cea3a2a 100644 --- a/src/slic3r/Utils/NetworkAgent.hpp +++ b/src/slic3r/Utils/NetworkAgent.hpp @@ -170,9 +170,8 @@ public: int track_event(std::string evt_key, std::string content); int track_header(std::string header); int track_update_property(std::string name, std::string value, std::string type = "string"); - private: - + bool enable_track = false; void* network_agent { nullptr }; static func_check_debug_consistent check_debug_consistent_ptr; From d43c7d5c9293508241ee88cee860ea7ea51c2080 Mon Sep 17 00:00:00 2001 From: miaoxin Date: Fri, 13 Jan 2023 17:49:00 +0800 Subject: [PATCH 121/339] NEW: add gcode conflict checker 1. add gcode conflict checker 2. add a new command line option: --no_check. When it's provided, gcode conflict check is skipped. Change-Id: I6feafca8c5fa6c3c5eae1f0e541ce59d2f03dedf (cherry picked from commit 5a39afb64e826a960d9673dcada89d02d62b3911) --- src/BambuStudio.cpp | 4 + src/libslic3r/CMakeLists.txt | 2 + src/libslic3r/GCode/ConflictChecker.cpp | 252 ++++++++++++++++++++++++ src/libslic3r/GCode/ConflictChecker.hpp | 116 +++++++++++ src/libslic3r/Print.cpp | 23 +++ src/libslic3r/Print.hpp | 3 +- src/libslic3r/PrintBase.hpp | 3 + src/libslic3r/PrintConfig.cpp | 8 + 8 files changed, 410 insertions(+), 1 deletion(-) create mode 100644 src/libslic3r/GCode/ConflictChecker.cpp create mode 100644 src/libslic3r/GCode/ConflictChecker.hpp diff --git a/src/BambuStudio.cpp b/src/BambuStudio.cpp index ba8baff121..a58c3d3c99 100644 --- a/src/BambuStudio.cpp +++ b/src/BambuStudio.cpp @@ -1735,6 +1735,7 @@ int CLI::run(int argc, char **argv) // loop through action options bool export_to_3mf = false, load_slicedata = false, export_slicedata = false, export_slicedata_error = false; + bool no_check = false; std::string export_3mf_file, load_slice_data_dir, export_slice_data_dir; std::string outfile_dir = m_config.opt_string("outputdir"); std::vector calibration_thumbnails; @@ -1791,6 +1792,8 @@ int CLI::run(int argc, char **argv) } */else if (opt_key == "export_3mf") { export_to_3mf = true; export_3mf_file = m_config.opt_string(opt_key); + }else if(opt_key=="no_check"){ + no_check = true; //} else if (opt_key == "export_gcode" || opt_key == "export_sla" || opt_key == "slice") { } else if (opt_key == "export_slicedata") { export_slicedata = true; @@ -1955,6 +1958,7 @@ int CLI::run(int argc, char **argv) new_print_config.apply(*part_plate->config()); new_print_config.apply(m_extra_config, true); print->apply(model, new_print_config); + print->set_no_check_flag(no_check);//BBS StringObjectException warning; auto err = print->validate(&warning); if (!err.string.empty()) { diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index 0e5fd059ac..2f3b9b90ee 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -139,6 +139,8 @@ set(lisbslic3r_sources GCode/GCodeProcessor.hpp GCode/AvoidCrossingPerimeters.cpp GCode/AvoidCrossingPerimeters.hpp + GCode/ConflictChecker.cpp + GCode/ConflictChecker.hpp GCode.cpp GCode.hpp GCodeReader.cpp diff --git a/src/libslic3r/GCode/ConflictChecker.cpp b/src/libslic3r/GCode/ConflictChecker.cpp new file mode 100644 index 0000000000..3cf1aa49a4 --- /dev/null +++ b/src/libslic3r/GCode/ConflictChecker.cpp @@ -0,0 +1,252 @@ +#include "ConflictChecker.hpp" + +#include +#include + +#include +#include +#include + +namespace Slic3r { + +namespace RasterizationImpl { +using IndexPair = std::pair; +using Grids = std::vector; + +inline constexpr int64_t RasteXDistance = scale_(1); +inline constexpr int64_t RasteYDistance = scale_(1); + +inline IndexPair point_map_grid_index(const Point &pt, int64_t xdist, int64_t ydist) +{ + auto x = pt.x() / xdist; + auto y = pt.y() / ydist; + return std::make_pair(x, y); +} + +inline bool nearly_equal(const Point &p1, const Point &p2) { return std::abs(p1.x() - p2.x()) < SCALED_EPSILON && std::abs(p1.y() - p2.y()) < SCALED_EPSILON; } + +inline Grids line_rasterization(const Line &line, int64_t xdist = RasteXDistance, int64_t ydist = RasteYDistance) +{ + Grids res; + Point rayStart = line.a; + Point rayEnd = line.b; + IndexPair currentVoxel = point_map_grid_index(rayStart, xdist, ydist); + IndexPair firstVoxel = currentVoxel; + IndexPair lastVoxel = point_map_grid_index(rayEnd, xdist, ydist); + + Point ray = rayEnd - rayStart; + + double stepX = ray.x() >= 0 ? 1 : -1; + double stepY = ray.y() >= 0 ? 1 : -1; + + double nextVoxelBoundaryX = (currentVoxel.first + stepX) * xdist; + double nextVoxelBoundaryY = (currentVoxel.second + stepY) * ydist; + + if (stepX < 0) { nextVoxelBoundaryX += xdist; } + if (stepY < 0) { nextVoxelBoundaryY += ydist; } + + double tMaxX = ray.x() != 0 ? (nextVoxelBoundaryX - rayStart.x()) / ray.x() : DBL_MAX; + double tMaxY = ray.y() != 0 ? (nextVoxelBoundaryY - rayStart.y()) / ray.y() : DBL_MAX; + + double tDeltaX = ray.x() != 0 ? static_cast(xdist) / ray.x() * stepX : DBL_MAX; + double tDeltaY = ray.y() != 0 ? static_cast(ydist) / ray.y() * stepY : DBL_MAX; + + res.push_back(currentVoxel); + + double tx = tMaxX; + double ty = tMaxY; + + while (lastVoxel != currentVoxel) { + if (lastVoxel.first == currentVoxel.first) { + for (int64_t i = currentVoxel.second; i != lastVoxel.second; i += (int64_t) stepY) { + currentVoxel.second += (int64_t) stepY; + res.push_back(currentVoxel); + } + break; + } + if (lastVoxel.second == currentVoxel.second) { + for (int64_t i = currentVoxel.first; i != lastVoxel.first; i += (int64_t) stepX) { + currentVoxel.first += (int64_t) stepX; + res.push_back(currentVoxel); + } + break; + } + + if (tx < ty) { + currentVoxel.first += (int64_t) stepX; + tx += tDeltaX; + } else { + currentVoxel.second += (int64_t) stepY; + ty += tDeltaY; + } + res.push_back(currentVoxel); + if (res.size() >= 100000) { // bug + assert(0); + } + } + + return res; +} +} // namespace RasterizationImpl + +void LinesBucketQueue::emplace_back_bucket(std::vector &&paths, PrintObject *objPtr, Point offset) +{ + auto oldSize = _buckets.capacity(); + _buckets.emplace_back(std::move(paths), objPtr, offset); + _pq.push(&_buckets.back()); + auto newSize = _buckets.capacity(); + if (oldSize != newSize) { // pointers change + decltype(_pq) newQueue; + for (LinesBucket &bucket : _buckets) { newQueue.push(&bucket); } + std::swap(_pq, newQueue); + } +} + +void LinesBucketQueue::removeLowests() +{ + auto lowest = _pq.top(); + _pq.pop(); + + std::vector lowests; + lowests.push_back(lowest); + + while (_pq.empty() == false && std::abs(_pq.top()->curHeight() - lowest->curHeight()) < EPSILON) { + lowests.push_back(_pq.top()); + _pq.pop(); + } + + for (LinesBucket *bp : lowests) { + bp->raise(); + if (bp->valid()) { _pq.push(bp); } + } +} + +LineWithIDs LinesBucketQueue::getCurLines() const +{ + LineWithIDs lines; + for (const LinesBucket &bucket : _buckets) { + if (bucket.valid()) { + LineWithIDs tmpLines = bucket.curLines(); + lines.insert(lines.end(), tmpLines.begin(), tmpLines.end()); + } + } + return lines; +} + +void getExtrusionPathsFromEntity(const ExtrusionEntityCollection *entity, ExtrusionPaths &paths) +{ + std::function getExtrusionPathImpl = [&](const ExtrusionEntityCollection *entity, ExtrusionPaths &paths) { + for (auto entityPtr : entity->entities) { + if (const ExtrusionEntityCollection *collection = dynamic_cast(entityPtr)) { + getExtrusionPathImpl(collection, paths); + } else if (const ExtrusionPath *path = dynamic_cast(entityPtr)) { + paths.push_back(*path); + } else if (const ExtrusionMultiPath *multipath = dynamic_cast(entityPtr)) { + for (const ExtrusionPath &path : multipath->paths) { paths.push_back(path); } + } else if (const ExtrusionLoop *loop = dynamic_cast(entityPtr)) { + for (const ExtrusionPath &path : loop->paths) { paths.push_back(path); } + } + } + }; + getExtrusionPathImpl(entity, paths); +} + +ExtrusionPaths getExtrusionPathsFromLayer(LayerRegionPtrs layerRegionPtrs) +{ + ExtrusionPaths paths; + for (auto regionPtr : layerRegionPtrs) { + getExtrusionPathsFromEntity(®ionPtr->perimeters, paths); + if (regionPtr->perimeters.empty() == false) { getExtrusionPathsFromEntity(®ionPtr->fills, paths); } + } + return paths; +} + +ExtrusionPaths getExtrusionPathsFromSupportLayer(SupportLayer *supportLayer) +{ + ExtrusionPaths paths; + getExtrusionPathsFromEntity(&supportLayer->support_fills, paths); + return paths; +} + +std::pair, std::vector> getAllLayersExtrusionPathsFromObject(PrintObject *obj) +{ + std::vector objPaths, supportPaths; + + for (auto layerPtr : obj->layers()) { objPaths.push_back(getExtrusionPathsFromLayer(layerPtr->regions())); } + + for (auto supportLayerPtr : obj->support_layers()) { supportPaths.push_back(getExtrusionPathsFromSupportLayer(supportLayerPtr)); } + + return {std::move(objPaths), std::move(supportPaths)}; +} + +ConflictRet ConflictChecker::find_inter_of_lines(const LineWithIDs &lines) +{ + using namespace RasterizationImpl; + std::map> indexToLine; + + for (int i = 0; i < lines.size(); ++i) { + const LineWithID &l1 = lines[i]; + auto indexes = line_rasterization(l1._line); + for (auto index : indexes) { + const auto &possibleIntersectIdxs = indexToLine[index]; + for (auto possibleIntersectIdx : possibleIntersectIdxs) { + const LineWithID &l2 = lines[possibleIntersectIdx]; + if (auto interRes = line_intersect(l1, l2); interRes.has_value()) { return interRes; } + } + indexToLine[index].push_back(i); + } + } + return {}; +} + +ConflictRet ConflictChecker::find_inter_of_lines_in_diff_objs(PrintObjectPtrs objs) // find the first intersection point of lines in different objects +{ + LinesBucketQueue conflictQueue; + for (PrintObject *obj : objs) { + auto layers = getAllLayersExtrusionPathsFromObject(obj); + conflictQueue.emplace_back_bucket(std::move(layers.first), obj, obj->instances().front().shift); + conflictQueue.emplace_back_bucket(std::move(layers.second), obj, obj->instances().front().shift); + } + + std::vector layersLines; + while (conflictQueue.valid()) { + LineWithIDs lines = conflictQueue.getCurLines(); + conflictQueue.removeLowests(); + layersLines.push_back(std::move(lines)); + } + + bool find = false; + tbb::concurrent_vector conflict; + + tbb::parallel_for(tbb::blocked_range( 0, layersLines.size()), [&](tbb::blocked_range range) { + for (size_t i = range.begin(); i < range.end(); i++) { + auto interRes = find_inter_of_lines(layersLines[i]); + if (interRes.has_value()) { + find = true; + conflict.emplace_back(interRes.value()); + break; + } + } + }); + + if (find) { + return {conflict[0]}; + } else + return {}; +} + +ConflictRet ConflictChecker::line_intersect(const LineWithID &l1, const LineWithID &l2) +{ + if (l1._objPtr == l2._objPtr) { return {}; } // return true if lines are from same object + Point inter; + bool intersect = l1._line.intersection(l2._line, &inter); + if (intersect) { + auto dist1 = std::min(unscale(Point(l1._line.a - inter)).norm(), unscale(Point(l1._line.b - inter)).norm()); + auto dist2 = std::min(unscale(Point(l2._line.a - inter)).norm(), unscale(Point(l2._line.b - inter)).norm()); + auto dist = std::min(dist1, dist2); + if (dist > 0.01) { return std::make_optional(l1._objPtr, l2._objPtr); } // the two lines intersects if dist>0.01mm + } + return {}; +} + +} // namespace Slic3r \ No newline at end of file diff --git a/src/libslic3r/GCode/ConflictChecker.hpp b/src/libslic3r/GCode/ConflictChecker.hpp new file mode 100644 index 0000000000..0a0242e30f --- /dev/null +++ b/src/libslic3r/GCode/ConflictChecker.hpp @@ -0,0 +1,116 @@ +#ifndef slic3r_ConflictChecker_hpp_ +#define slic3r_ConflictChecker_hpp_ + +#include "../Utils.hpp" +#include "../Model.hpp" +#include "../Print.hpp" +#include "../Layer.hpp" + +#include +#include +#include + +namespace Slic3r { + +struct LineWithID +{ + Line _line; + PrintObject *_objPtr; + int _role; + + LineWithID(const Line &line, PrintObject *objPtr, int role) : _line(line), _objPtr(objPtr), _role(role) {} +}; + +using LineWithIDs = std::vector; + +class LinesBucket +{ +private: + double _curHeight = 0.0; + unsigned _curPileIdx = 0; + + std::vector _piles; + PrintObject * _objPtr; + Point _offset; + +public: + LinesBucket(std::vector &&paths, PrintObject *objPtr, Point offset) : _piles(paths), _objPtr(objPtr), _offset(offset) {} + LinesBucket(LinesBucket &&) = default; + + bool valid() const { return _curPileIdx < _piles.size(); } + void raise() + { + if (valid()) { + if (_piles[_curPileIdx].empty() == false) { _curHeight += _piles[_curPileIdx].front().height; } + _curPileIdx++; + } + } + double curHeight() const { return _curHeight; } + LineWithIDs curLines() const + { + LineWithIDs lines; + for (const ExtrusionPath &path : _piles[_curPileIdx]) { + if (path.is_force_no_extrusion() == false) { + Polyline check_polyline = path.polyline; + if (path.role() != ExtrusionRole::erBrim) { check_polyline.translate(_offset); } + Lines tmpLines = check_polyline.lines(); + for (const Line &line : tmpLines) { lines.emplace_back(line, _objPtr, path.role()); } + } + } + return lines; + } + + friend bool operator>(const LinesBucket &left, const LinesBucket &right) { return left._curHeight > right._curHeight; } + friend bool operator<(const LinesBucket &left, const LinesBucket &right) { return left._curHeight < right._curHeight; } + friend bool operator==(const LinesBucket &left, const LinesBucket &right) { return left._curHeight == right._curHeight; } +}; + +struct LinesBucketPtrComp +{ + bool operator()(const LinesBucket *left, const LinesBucket *right) { return *left > *right; } +}; + +class LinesBucketQueue +{ +private: + std::vector _buckets; + std::priority_queue, LinesBucketPtrComp> _pq; + +public: + void emplace_back_bucket(std::vector &&paths, PrintObject *objPtr, Point offset); + bool valid() const { return _pq.empty() == false; } + + void removeLowests(); + LineWithIDs getCurLines() const; +}; + +void getExtrusionPathsFromEntity(const ExtrusionEntityCollection *entity, ExtrusionPaths &paths); + +ExtrusionPaths getExtrusionPathsFromLayer(LayerRegionPtrs layerRegionPtrs); + +ExtrusionPaths getExtrusionPathsFromSupportLayer(SupportLayer *supportLayer); + +std::pair, std::vector> getAllLayersExtrusionPathsFromObject(PrintObject *obj); + +struct ConflictResult +{ + PrintObject *_obj1; + PrintObject *_obj2; + ConflictResult(PrintObject *obj1, PrintObject *obj2) : _obj1(obj1), _obj2(obj2) {} + ConflictResult() = default; +}; + +static_assert(std::is_trivial::value, "atomic value requires to be trival."); + +using ConflictRet = std::optional; + +struct ConflictChecker +{ + static ConflictRet find_inter_of_lines_in_diff_objs(PrintObjectPtrs objs); + static ConflictRet find_inter_of_lines(const LineWithIDs &lines); + static ConflictRet line_intersect(const LineWithID &l1, const LineWithID &l2); +}; + +} // namespace Slic3r + +#endif diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index cb72ac229f..5af302eadb 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -27,6 +27,10 @@ //BBS: add json support #include "nlohmann/json.hpp" +#include "GCode/ConflictChecker.hpp" + +#include + using namespace nlohmann; // Mark string for localization and translate. @@ -1661,6 +1665,25 @@ void Print::process(bool use_cache) } } + // BBS + if(!m_no_check) + { + this->set_started(psConflictCheck); + this->set_status(70, L("Checking gcode path conflicts.")); + using Clock = std::chrono::high_resolution_clock; + auto startTime = Clock::now(); + auto conflictRes = ConflictChecker::find_inter_of_lines_in_diff_objs(m_objects); + auto endTime = Clock::now(); + volatile double seconds = std::chrono::duration_cast(endTime - startTime).count() / (double) 1000; + if (conflictRes.has_value()) { + auto objName1 = conflictRes.value()._obj1->m_model_object->name; + auto objName2 = conflictRes.value()._obj2->m_model_object->name; + //throw Slic3r::SlicingError((boost::format(L("Conflicts of gcode paths have been found. Please separate the conflicted objects (%s + %s) farther.")) % objName1% objName2).str()); + this->active_step_add_warning(PrintStateBase::WarningLevel::CRITICAL, (boost::format(L("Conflicts of gcode paths have been found. Please separate the conflicted objects (%s <-> %s) farther.")) % objName1 % objName2).str()); + } + this->set_done(psConflictCheck); + } + BOOST_LOG_TRIVIAL(info) << "Slicing process finished." << log_memory_info(); } diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index 27dcfc32fe..4509162718 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -79,7 +79,8 @@ enum PrintStep { // should be refreshed. psSlicingFinished = psSkirtBrim, psGCodeExport, - psCount, + psConflictCheck, + psCount }; enum PrintObjectStep { diff --git a/src/libslic3r/PrintBase.hpp b/src/libslic3r/PrintBase.hpp index 0d8730b073..60087a3969 100644 --- a/src/libslic3r/PrintBase.hpp +++ b/src/libslic3r/PrintBase.hpp @@ -510,6 +510,8 @@ public: //BBS: get/set plate id int get_plate_index() const { return m_plate_index; } void set_plate_index(int index) { m_plate_index = index; } + bool get_no_check_flag() const { return m_no_check; } + void set_no_check_flag(bool no_check) { m_no_check = no_check; } protected: friend class PrintObjectBase; @@ -544,6 +546,7 @@ protected: //BBS: add plate id into print base int m_plate_index{ 0 }; + bool m_no_check = false; // Callback to be evoked regularly to update state of the UI thread. status_callback_type m_status_callback; diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index e265fc9038..2d6d39e6c9 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -4608,6 +4608,14 @@ CLIActionsConfigDef::CLIActionsConfigDef() def->cli_params = "time"; def->set_default_value(new ConfigOptionInt(300)); + // must define new params here, otherwise comamnd param check will fail + def = this->add("no_check", coBool); + def->label = L("No check"); + def->tooltip = L("Do not run any validity checks, such as gcode path conflicts check."); + def->cli = "no_check"; + def->cli_params = "option"; + def->set_default_value(new ConfigOptionBool(false)); + /*def = this->add("help_fff", coBool); def->label = L("Help (FFF options)"); def->tooltip = L("Show the full list of print/G-code configuration options."); From 8d6c56e4aa3a8872fb9ce42893000c018d0df4dc Mon Sep 17 00:00:00 2001 From: tao wang Date: Mon, 20 Mar 2023 16:21:30 +0800 Subject: [PATCH 122/339] NEW:AMS control supports gradient color filaments display Change-Id: I38d8a313d84b3acf643b489a1e62ebd073b35c1d --- src/slic3r/GUI/DeviceManager.cpp | 30 +++++++++++++++++++++++++++ src/slic3r/GUI/DeviceManager.hpp | 1 + src/slic3r/GUI/Widgets/AMSControl.cpp | 28 ++++++++++++++++++++++--- src/slic3r/GUI/Widgets/AMSControl.hpp | 1 + 4 files changed, 57 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index c0db6825a8..c3d004c07f 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -3149,6 +3149,16 @@ int MachineObject::parse_json(std::string payload) } else { curr_tray->color = ""; } + + curr_tray->cols.clear(); + if (tray_it->contains("cols")) { + if ((*tray_it)["cols"].is_array()) { + for (auto it = (*tray_it)["cols"].begin(); it != (*tray_it)["cols"].end(); it++) { + curr_tray->cols.push_back(it.value().get()); + } + } + } + if (tray_it->contains("remain")) { curr_tray->remain = (*tray_it)["remain"].get(); } else { @@ -3297,6 +3307,16 @@ int MachineObject::parse_json(std::string payload) else { vt_tray.color = ""; } + + vt_tray.cols.clear(); + if (jj["vt_tray"].contains("cols")) { + if (jj["vt_tray"].is_array()) { + for (auto it = jj["vt_tray"].begin(); it != jj["vt_tray"].end(); it++) { + vt_tray.cols.push_back(it.value().get()); + } + } + } + if (jj["vt_tray"].contains("remain")) { vt_tray.remain = jj["vt_tray"]["remain"].get(); } @@ -3371,6 +3391,16 @@ int MachineObject::parse_json(std::string payload) tray_it->second->nozzle_temp_min = std::to_string(jj["nozzle_temp_min"].get()); tray_it->second->type = jj["tray_type"].get(); tray_it->second->color = jj["tray_color"].get(); + + /*tray_it->second->cols.clear(); + if (jj.contains("cols")) { + if (jj["cols"].is_array()) { + for (auto it = jj["cols"].begin(); it != jj["cols"].end(); it++) { + tray_it->second->cols.push_back(it.value().get()); + } + } + }*/ + tray_it->second->setting_id = jj["tray_info_idx"].get(); // delay update tray_it->second->set_hold_count(); diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index a6dd286e33..0106e023e0 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -193,6 +193,7 @@ public: std::string type; std::string sub_brands; std::string color; + std::vector cols; std::string weight; std::string diameter; std::string temp; diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index e9137e1409..5ddf4a04cf 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -58,6 +58,10 @@ bool AMSinfo::parse_ams_info(Ams *ams, bool remain_flag, bool humidity_flag) info.material_colour = AMS_TRAY_DEFAULT_COL; } + for (std::string cols:it->second->cols) { + info.material_cols.push_back(AmsTray::decode_color(cols)); + } + if (MachineObject::is_bbl_filament(it->second->tag_uid)) { info.material_state = AMSCanType::AMS_CAN_TYPE_BRAND; } else { @@ -840,15 +844,33 @@ void AMSLib::doRender(wxDC &dc) int height = size.y - FromDIP(8); int curr_height = height * float(m_info.material_remain * 1.0 / 100.0); - - int top = height - curr_height; if (curr_height >= FromDIP(6)) { #ifdef __APPLE__ dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4) + top, size.x - FromDIP(8), curr_height, m_radius); #else - dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4) + top, size.x - FromDIP(8), curr_height, m_radius - 1); + //gradient + if (m_info.material_cols.size() > 1) { + int left = FromDIP(4); + float total_width = size.x - FromDIP(8); + int gwidth = std::round(total_width / (m_info.material_cols.size() - 1)); + + for (int i = 0; i < m_info.material_cols.size() - 1; i++) { + + if ( (left + gwidth) > (size.x - FromDIP(8)) ) { + gwidth = (size.x - FromDIP(4)) - left; + } + + auto rect = wxRect(left, height - curr_height + FromDIP(4), gwidth, curr_height); + dc.GradientFillLinear(rect, m_info.material_cols[i], m_info.material_cols[i+1], wxEAST); + left += gwidth; + } + } + else { + dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4) + top, size.x - FromDIP(8), curr_height, m_radius - 1); + } + #endif diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index 8b996002ef..1c67052b8f 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -136,6 +136,7 @@ struct Caninfo int material_remain = 100; float k = 0.0f; float n = 0.0f; + std::vector material_cols; }; struct AMSinfo From ad70e58e14acefbfe6636652550a5fe62535ed5c Mon Sep 17 00:00:00 2001 From: tao wang Date: Wed, 22 Mar 2023 10:02:09 +0800 Subject: [PATCH 123/339] FIX:fixed incomplete display of filament material names fixed STUDIO-2464 Change-Id: I8310cc519d0143aa180109d70ebe25b0f068bd52 --- src/slic3r/GUI/Widgets/AMSControl.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index 5ddf4a04cf..06f1b44d48 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -716,12 +716,23 @@ void AMSLib::render(wxDC &dc) dc.DrawText(L("?"), pot); } else { auto tsize = dc.GetMultiLineTextExtent(m_info.material_name); + std::vector split_char_arr = {" ", "-"}; + bool has_split = false; + std::string has_split_char = " "; - if (m_info.material_name.find(' ') != std::string::npos) { + for (std::string split_char : split_char_arr) { + if (m_info.material_name.find(split_char) != std::string::npos) { + has_split = true; + has_split_char = split_char; + } + } + + + if (has_split) { dc.SetFont(::Label::Body_12); - auto line_top = m_info.material_name.substr(0, m_info.material_name.find(' ')); - auto line_bottom = m_info.material_name.substr(m_info.material_name.find(' ')); + auto line_top = m_info.material_name.substr(0, m_info.material_name.find(has_split_char)); + auto line_bottom = m_info.material_name.substr(m_info.material_name.find(has_split_char)); auto line_top_tsize = dc.GetMultiLineTextExtent(line_top); auto line_bottom_tsize = dc.GetMultiLineTextExtent(line_bottom); From 7142119f03565988532ba400ff6c8042e24ed2a0 Mon Sep 17 00:00:00 2001 From: tao wang Date: Wed, 22 Mar 2023 18:06:16 +0800 Subject: [PATCH 124/339] NEW:add symbolic description for units optionin preferences https://github.com/bambulab/BambuStudio/issues/1459 Change-Id: Ia16c1bb17378ec25a145dd0e7116df434b564e10 --- src/slic3r/GUI/Preferences.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 8c1b9c89e9..65d0a30f54 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -817,7 +817,7 @@ wxWindow* PreferencesDialog::create_general_page() std::vector Regions = {_L("Asia-Pacific"), _L("China"), _L("Europe"), _L("North America"), _L("Others")}; auto item_region= create_item_region_combobox(_L("Login Region"), page, _L("Login Region"), Regions); - std::vector Units = {_L("Metric"), _L("Imperial")}; + std::vector Units = {_L("Metric") + " (mm, g)", _L("Imperial") + " (in, oz)"}; auto item_currency = create_item_combobox(_L("Units"), page, _L("Units"), "use_inches", Units); auto item_hints = create_item_checkbox(_L("Show \"Tip of the day\" notification after start"), page, _L("If enabled, useful hints are displayed at startup."), 50, "show_hints"); From bf08a0b2e2abbeb2dcd17a2708c4ca1239430d62 Mon Sep 17 00:00:00 2001 From: tao wang Date: Wed, 22 Mar 2023 14:24:37 +0800 Subject: [PATCH 125/339] FIX:fixed some ui issues Change-Id: I96f3e3ec56a07a7b5ca4723c92715df58e0baaf6 --- src/slic3r/GUI/ConfigManipulation.cpp | 2 +- src/slic3r/GUI/NotificationManager.cpp | 2 +- src/slic3r/GUI/UpgradePanel.cpp | 6 +++--- src/slic3r/GUI/Widgets/AMSControl.cpp | 5 ++++- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index d03189ba64..eb63dd2037 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -281,7 +281,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con ! config->opt_bool("detect_thin_wall") && config->opt_enum("timelapse_type") == TimelapseType::tlTraditional)) { - wxString msg_text = _(L("Spiral mode only works when wall loops is 1, support is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional")); + wxString msg_text = _(L("Spiral mode only works when wall loops is 1, support is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional.")); if (is_global_config) msg_text += "\n\n" + _(L("Change these settings automatically? \n" "Yes - Change these settings and enable spiral mode automatically\n" diff --git a/src/slic3r/GUI/NotificationManager.cpp b/src/slic3r/GUI/NotificationManager.cpp index 77d1dc08e6..46da873b34 100644 --- a/src/slic3r/GUI/NotificationManager.cpp +++ b/src/slic3r/GUI/NotificationManager.cpp @@ -861,7 +861,7 @@ void NotificationManager::ExportFinishedNotification::render_eject_button(ImGuiW ImGui::PushStyleColor(ImGuiCol_Border, { 0,0,0,0 }); ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, { 8 * scale, 1 * scale }); ImGui::BeginTooltip(); - imgui.text(_u8L("Safely remove hardware.")); + imgui.text(_L("Safely remove hardware.")); ImGui::EndTooltip(); ImGui::PopStyleColor(2); ImGui::PopStyleVar(); diff --git a/src/slic3r/GUI/UpgradePanel.cpp b/src/slic3r/GUI/UpgradePanel.cpp index 8993838a8e..e1cb3e5ec6 100644 --- a/src/slic3r/GUI/UpgradePanel.cpp +++ b/src/slic3r/GUI/UpgradePanel.cpp @@ -854,8 +854,8 @@ UpgradePanel::~UpgradePanel() void UpgradePanel::msw_rescale() { - /*if (m_push_upgrade_panel) - m_push_upgrade_panel->msw_rescale();*/ + if (m_push_upgrade_panel) + m_push_upgrade_panel->msw_rescale(); } void UpgradePanel::clean_push_upgrade_panel() @@ -907,7 +907,7 @@ void UpgradePanel::update(MachineObject *obj) force_dlg->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this](wxCommandEvent& e) { if (m_obj) { m_obj->command_upgrade_confirm(); - m_obj->upgrade_display_state == MachineObject::UpgradingDisplayState::UpgradingInProgress; + m_obj->upgrade_display_state = MachineObject::UpgradingDisplayState::UpgradingInProgress; m_obj->upgrade_display_hold_count = HOLD_COUNT_MAX; } }); diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index 06f1b44d48..e93058cfc7 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -2768,8 +2768,11 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy if (notfound) return; if (cans == nullptr) return; - if (!ams_id.empty() && !canid.empty() && (ams_id != m_last_ams_id || m_last_tray_id != canid)) { + if (!ams_id.empty() && (ams_id != m_last_ams_id || m_last_tray_id != canid)) { SetAmsStep(m_last_ams_id, m_last_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + m_vams_extra_road->OnVamsLoading(false); + m_extruder->OnVamsLoading(false); + m_vams_road->OnVamsLoading(false); } From 8ebd6cfc9e4cab48c5a63590c995cba5a83d8788 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Tue, 21 Mar 2023 21:05:24 +0800 Subject: [PATCH 126/339] FIX: the text gap is not correct. STUDIO-2518 Change-Id: I27dc8b62962ebe1aa2b4d54e50d68cf173eecd54 --- src/libslic3r/Shape/TextShape.cpp | 26 +++++++++++++++++++++----- src/libslic3r/Shape/TextShape.hpp | 8 +++++++- src/slic3r/GUI/Gizmos/GLGizmoText.cpp | 15 +++++++-------- 3 files changed, 35 insertions(+), 14 deletions(-) diff --git a/src/libslic3r/Shape/TextShape.cpp b/src/libslic3r/Shape/TextShape.cpp index d13bcca98b..e740905ce5 100644 --- a/src/libslic3r/Shape/TextShape.cpp +++ b/src/libslic3r/Shape/TextShape.cpp @@ -95,7 +95,7 @@ std::vector init_occt_fonts() return stdFontNames; } -static bool TextToBRep(const char* text, const char* font, const float theTextHeight, Font_FontAspect& theFontAspect, TopoDS_Shape& theShape) +static bool TextToBRep(const char* text, const char* font, const float theTextHeight, Font_FontAspect& theFontAspect, TopoDS_Shape& theShape, double& text_width) { Standard_Integer anArgIt = 1; Standard_CString aName = "text_shape"; @@ -122,8 +122,24 @@ static bool TextToBRep(const char* text, const char* font, const float theTextHe aPenAx3 = gp_Ax3(aPenLoc, aNormal, aDirection); + Handle(Font_TextFormatter) aFormatter = new Font_TextFormatter(); + aFormatter->Reset(); + aFormatter->SetupAlignment(aHJustification, aVJustification); + aFormatter->Append(aText, *aFont.FTFont()); + aFormatter->Format(); + + // get the text width + text_width = 0; + NCollection_String coll_str = aText; + for (NCollection_Utf8Iter anIter = coll_str.Iterator(); *anIter != 0;) { + const Standard_Utf32Char aCharThis = *anIter; + const Standard_Utf32Char aCharNext = *++anIter; + double width = aFont.AdvanceX(aCharThis, aCharNext); + text_width += width; + } + Font_BRepTextBuilder aBuilder; - theShape = aBuilder.Perform(aFont, aText, aPenAx3, aHJustification, aVJustification); + theShape = aBuilder.Perform(aFont, aFormatter, aPenAx3); return true; } @@ -221,7 +237,7 @@ static void MakeMesh(TopoDS_Shape& theSolid, TriangleMesh& theMesh) theMesh.from_stl(stl); } -void load_text_shape(const char*text, const char* font, const float text_height, const float thickness, bool is_bold, bool is_italic, TriangleMesh& text_mesh) +void load_text_shape(const char*text, const char* font, const float text_height, const float thickness, bool is_bold, bool is_italic, TextResult &text_result) { Handle(Font_FontMgr) aFontMgr = Font_FontMgr::GetInstance(); if (aFontMgr->GetAvailableFonts().IsEmpty()) @@ -238,14 +254,14 @@ void load_text_shape(const char*text, const char* font, const float text_height, else aFontAspect = Font_FontAspect_Regular; - if (!TextToBRep(text, font, text_height, aFontAspect, aTextBase)) + if (!TextToBRep(text, font, text_height, aFontAspect, aTextBase, text_result.text_width)) return; TopoDS_Shape aTextShape; if (!Prism(aTextBase, thickness, aTextShape)) return; - MakeMesh(aTextShape, text_mesh); + MakeMesh(aTextShape, text_result.text_mesh); } }; // namespace Slic3r diff --git a/src/libslic3r/Shape/TextShape.hpp b/src/libslic3r/Shape/TextShape.hpp index b0817d7fc4..75c93bc641 100644 --- a/src/libslic3r/Shape/TextShape.hpp +++ b/src/libslic3r/Shape/TextShape.hpp @@ -4,8 +4,14 @@ namespace Slic3r { class TriangleMesh; +struct TextResult +{ + TriangleMesh text_mesh; + double text_width; +}; + extern std::vector init_occt_fonts(); -extern void load_text_shape(const char* text, const char* font, const float text_height, const float thickness, bool is_bold, bool is_italic, TriangleMesh& text_mesh); +extern void load_text_shape(const char *text, const char *font, const float text_height, const float thickness, bool is_bold, bool is_italic, TextResult &text_result); std::map get_occt_fonts_maps(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoText.cpp b/src/slic3r/GUI/Gizmos/GLGizmoText.cpp index f62387d5ec..64015ebf2b 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoText.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoText.cpp @@ -934,10 +934,9 @@ bool GLGizmoText::update_text_positions(const std::vector& texts) } else { alpha = texts[i]; } - TriangleMesh mesh; - load_text_shape(alpha.c_str(), m_font_name.c_str(), m_font_size, m_thickness + m_embeded_depth, m_bold, m_italic, mesh); - auto center = mesh.bounding_box().center(); - double half_x_length = center.x(); + TextResult text_result; + load_text_shape(alpha.c_str(), m_font_name.c_str(), m_font_size, m_thickness + m_embeded_depth, m_bold, m_italic, text_result); + double half_x_length = text_result.text_width / 2; text_lengths.emplace_back(half_x_length); } @@ -1356,13 +1355,13 @@ bool GLGizmoText::update_text_positions(const std::vector& texts) TriangleMesh GLGizmoText::get_text_mesh(const char* text_str, const Vec3d &position, const Vec3d &normal, const Vec3d& text_up_dir) { - TriangleMesh mesh; - load_text_shape(text_str, m_font_name.c_str(), m_font_size, m_thickness + m_embeded_depth, m_bold, m_italic, mesh); + TextResult text_result; + load_text_shape(text_str, m_font_name.c_str(), m_font_size, m_thickness + m_embeded_depth, m_bold, m_italic, text_result); + TriangleMesh mesh = text_result.text_mesh; auto center = mesh.bounding_box().center(); double mesh_offset = center.z(); - - mesh.translate(-center.x(), -m_font_size / 4, -center.z()); + mesh.translate(-text_result.text_width / 2, -m_font_size / 4, -center.z()); double phi; Vec3d rotation_axis; From 872a54303c97203f47e1c20650466cf528a429b2 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Thu, 23 Mar 2023 10:48:56 +0800 Subject: [PATCH 127/339] FIX: generate a wipe tower when add filament STUDIO-2538 Change-Id: I8cca134eb9302b2ff30252ef36ed8c24c834b22c (cherry picked from commit aeb5408c9eee844970bbef94e49978568c1de541) --- src/libslic3r/Print.cpp | 3 ++- src/slic3r/GUI/PartPlate.cpp | 12 ++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 5af302eadb..9647b3e412 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -342,9 +342,10 @@ std::vector Print::extruders(bool conside_custom_gcode) const if (conside_custom_gcode) { //BBS + int num_extruders = m_config.filament_colour.size(); for (auto plate_data : m_model.plates_custom_gcodes) { for (auto item : plate_data.second.gcodes) { - if (item.type == CustomGCode::Type::ToolChange) + if (item.type == CustomGCode::Type::ToolChange && item.extruder <= num_extruders) extruders.push_back((unsigned int)(item.extruder - 1)); } } diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 2c1193f4ae..77b42dad80 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -1256,10 +1256,14 @@ std::vector PartPlate::get_extruders(bool conside_custom_gcode) const if (conside_custom_gcode) { //BBS - if (m_model->plates_custom_gcodes.find(m_plate_index) != m_model->plates_custom_gcodes.end()) { - for (auto item : m_model->plates_custom_gcodes.at(m_plate_index).gcodes) { - if (item.type == CustomGCode::Type::ToolChange) - plate_extruders.push_back(item.extruder); + int nums_extruders = 0; + if (const ConfigOptionStrings *color_option = dynamic_cast(wxGetApp().preset_bundle->project_config.option("filament_colour"))) { + nums_extruders = color_option->values.size(); + if (m_model->plates_custom_gcodes.find(m_plate_index) != m_model->plates_custom_gcodes.end()) { + for (auto item : m_model->plates_custom_gcodes.at(m_plate_index).gcodes) { + if (item.type == CustomGCode::Type::ToolChange && item.extruder <= nums_extruders) + plate_extruders.push_back(item.extruder); + } } } } From b1041a5de87f352b3e1355d8e3f172393aa5d029 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Thu, 23 Mar 2023 09:24:28 +0800 Subject: [PATCH 128/339] FIX: Cutting a sphere, the parts need repaired STUDIO-1192 & STUDIO-2505 Change-Id: I2ad1d1ef7c279a7307654ba453a0d8323316904e (cherry picked from commit cb6d9ed2074763b4f7f92e45219d942317adf402) --- src/libslic3r/TriangleMeshSlicer.cpp | 43 +++++++++++++++++++++------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/src/libslic3r/TriangleMeshSlicer.cpp b/src/libslic3r/TriangleMeshSlicer.cpp index e605cdcfe4..3fd0da6604 100644 --- a/src/libslic3r/TriangleMeshSlicer.cpp +++ b/src/libslic3r/TriangleMeshSlicer.cpp @@ -41,6 +41,16 @@ #endif namespace Slic3r { +const float epson = 1e-3; +bool is_equal(float lh, float rh) +{ + return abs(lh - rh) <= epson; +} + +bool is_less(float lh, float rh) +{ + return lh + epson < rh; +} class IntersectionReference { @@ -2007,11 +2017,12 @@ static void triangulate_slice( map_vertex_to_index.emplace_back(to_2d(its.vertices[i]), i); std::sort(map_vertex_to_index.begin(), map_vertex_to_index.end(), [](const std::pair &l, const std::pair &r) { - return l.first.x() < r.first.x() || - (l.first.x() == r.first.x() && (l.first.y() < r.first.y() || - (l.first.y() == r.first.y() && l.second < r.second))); }); + return is_less(l.first.x(), r.first.x()) || + (is_equal(l.first.x(), r.first.x()) && (is_less(l.first.y(), r.first.y()) || + (is_equal(l.first.y(), r.first.y()) && l.second < r.second))); }); // 2) Discover duplicate points on the slice. Remap duplicate vertices to a vertex with a lowest index. + // Remove denegerate triangles, if they happen to be created by merging duplicate vertices. { std::vector map_duplicate_vertex(int(its.vertices.size()) - num_original_vertices, -1); int i = 0; @@ -2024,7 +2035,7 @@ static void triangulate_slice( // map to itself map_duplicate_vertex[iidx - num_original_vertices] = iidx; int j = i; - for (++ j; j < int(map_vertex_to_index.size()) && ipos.x() == map_vertex_to_index[j].first.x() && ipos.y() == map_vertex_to_index[j].first.y(); ++ j) { + for (++ j; j < int(map_vertex_to_index.size()) && is_equal(ipos.x(), map_vertex_to_index[j].first.x()) && is_equal(ipos.y(), map_vertex_to_index[j].first.y()); ++ j) { const int jidx = map_vertex_to_index[j].second; assert(jidx >= num_original_vertices); if (jidx >= num_original_vertices) @@ -2034,10 +2045,20 @@ static void triangulate_slice( i = j; } map_vertex_to_index.erase(map_vertex_to_index.begin() + k, map_vertex_to_index.end()); - for (stl_triangle_vertex_indices &f : its.indices) - for (i = 0; i < 3; ++ i) - if (f(i) >= num_original_vertices) - f(i) = map_duplicate_vertex[f(i) - num_original_vertices]; + for (i = 0; i < int(its.indices.size());) { + stl_triangle_vertex_indices &f = its.indices[i]; + // Remap the newly added face vertices. + for (k = 0; k < 3; ++ k) + if (f(k) >= num_original_vertices) + f(k) = map_duplicate_vertex[f(k) - num_original_vertices]; + if (f(0) == f(1) || f(0) == f(2) || f(1) == f(2)) { + // Remove degenerate face. + f = its.indices.back(); + its.indices.pop_back(); + } else + // Keep the face. + ++ i; + } } if (triangulate) { @@ -2048,9 +2069,11 @@ static void triangulate_slice( for (size_t j = 0; j < 3; ++ j) { Vec3f v = triangles[i ++].cast(); auto it = lower_bound_by_predicate(map_vertex_to_index.begin(), map_vertex_to_index.end(), - [&v](const std::pair &l) { return l.first.x() < v.x() || (l.first.x() == v.x() && l.first.y() < v.y()); }); + [&v](const std::pair &l) { + return is_less(l.first.x(), v.x()) || (is_equal(l.first.x(), v.x()) && is_less(l.first.y(), v.y())); + }); int idx = -1; - if (it != map_vertex_to_index.end() && it->first.x() == v.x() && it->first.y() == v.y()) + if (it != map_vertex_to_index.end() && is_equal(it->first.x(), v.x()) && is_equal(it->first.y(), v.y())) idx = it->second; else { // Try to find the vertex in the list of newly added vertices. Those vertices are not matched on the cut and they shall be rare. From 518cd4ce270b6a96514e80dcf798e61c3011f6fd Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Mon, 20 Mar 2023 17:14:41 +0800 Subject: [PATCH 129/339] ENH: recover CutToParts for cut Change-Id: I5d7fb089c5d2ea9d36fce3d70ec4da896d601940 (cherry picked from commit e0232b21ebf5a37bedee1c213d1c21890634c563) --- src/libslic3r/Model.cpp | 305 +++++++++---------- src/libslic3r/Model.hpp | 11 +- src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp | 21 +- src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.hpp | 1 + 4 files changed, 174 insertions(+), 164 deletions(-) diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index a9df179dca..f1031ee126 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -916,6 +916,25 @@ bool Model::is_mm_painted() const return std::any_of(this->objects.cbegin(), this->objects.cend(), [](const ModelObject *mo) { return mo->is_mm_painted(); }); } + +static void add_cut_volume(TriangleMesh& mesh, ModelObject* object, const ModelVolume* src_volume, const Transform3d& cut_matrix, const std::string& suffix = {}, ModelVolumeType type = ModelVolumeType::MODEL_PART) +{ + if (mesh.empty()) + return; + + mesh.transform(cut_matrix); + ModelVolume* vol = object->add_volume(mesh); + vol->set_type(type); + + vol->name = src_volume->name + suffix; + // Don't copy the config's ID. + vol->config.assign_config(src_volume->config); + assert(vol->config.id().valid()); + assert(vol->config.id() != src_volume->config.id()); + vol->set_material(src_volume->material_id(), *src_volume->material()); + vol->cut_info = src_volume->cut_info; +} + ModelObject::~ModelObject() { this->clear_volumes(); @@ -1706,7 +1725,9 @@ void ModelObject::synchronize_model_after_cut() void ModelObject::apply_cut_attributes(ModelObjectCutAttributes attributes) { // we don't save cut information, if result will not contains all parts of initial object - if (!attributes.has(ModelObjectCutAttribute::KeepUpper) || !attributes.has(ModelObjectCutAttribute::KeepLower)) + if (!attributes.has(ModelObjectCutAttribute::KeepUpper) || + !attributes.has(ModelObjectCutAttribute::KeepLower) || + attributes.has(ModelObjectCutAttribute::InvalidateCutInfo)) return; if (cut_id.id().invalid()) @@ -1768,6 +1789,8 @@ Transform3d ModelObject::calculate_cut_plane_inverse_matrix(const std::array &dowels, @@ -1780,38 +1803,53 @@ void ModelObject::process_connector_cut( // ! Don't apply instance transformation for the conntectors. // This transformation is already there - if (attributes.has(ModelObjectCutAttribute::KeepUpper)) { - ModelVolume *vol = upper->add_volume(*volume); - vol->set_transformation(volume_matrix); - vol->apply_tolerance(); - } - if (attributes.has(ModelObjectCutAttribute::KeepLower)) { - ModelVolume *vol = lower->add_volume(*volume); - vol->set_transformation(volume_matrix); - - if (volume->cut_info.connector_type == CutConnectorType::Dowel) + if (volume->cut_info.connector_type != CutConnectorType::Dowel) { + if (attributes.has(ModelObjectCutAttribute::KeepUpper)) { + ModelVolume *vol = upper->add_volume(*volume); + vol->set_transformation(volume_matrix); vol->apply_tolerance(); - else + } + if (attributes.has(ModelObjectCutAttribute::KeepLower)) { + ModelVolume *vol = lower->add_volume(*volume); + vol->set_transformation(volume_matrix); // for lower part change type of connector from NEGATIVE_VOLUME to MODEL_PART if this connector is a plug vol->set_type(ModelVolumeType::MODEL_PART); + } } - if (volume->cut_info.connector_type == CutConnectorType::Dowel && attributes.has(ModelObjectCutAttribute::CreateDowels)) { - ModelObject *dowel{nullptr}; - // Clone the object to duplicate instances, materials etc. - clone_for_cut(&dowel); + else { + if (attributes.has(ModelObjectCutAttribute::CreateDowels)) { + ModelObject *dowel{nullptr}; + // Clone the object to duplicate instances, materials etc. + clone_for_cut(&dowel); - // add one more solid part same as connector if this connector is a dowel - ModelVolume *vol = dowel->add_volume(*volume); - vol->set_type(ModelVolumeType::MODEL_PART); + // add one more solid part same as connector if this connector is a dowel + ModelVolume *vol = dowel->add_volume(*volume); + vol->set_type(ModelVolumeType::MODEL_PART); - // But discard rotation and Z-offset for this volume - vol->set_rotation(Vec3d::Zero()); - vol->set_offset(Z, 0.0); + // But discard rotation and Z-offset for this volume + vol->set_rotation(Vec3d::Zero()); + vol->set_offset(Z, 0.0); - // Compute the displacement (in instance coordinates) to be applied to place the dowels - local_dowels_displace = lower->full_raw_mesh_bounding_box().size().cwiseProduct(Vec3d(1.0, 1.0, 0.0)); + // Compute the displacement (in instance coordinates) to be applied to place the dowels + local_dowels_displace = lower->full_raw_mesh_bounding_box().size().cwiseProduct(Vec3d(1.0, 1.0, 0.0)); - dowels.push_back(dowel); + dowels.push_back(dowel); + } + + // Cut the dowel + volume->apply_tolerance(); + + // Perform cut + TriangleMesh upper_mesh, lower_mesh; + process_volume_cut(volume, instance_matrix, cut_matrix, attributes, upper_mesh, lower_mesh); + + // add small Z offset to better preview + upper_mesh.translate((-0.05 * Vec3d::UnitZ()).cast()); + lower_mesh.translate((0.05 * Vec3d::UnitZ()).cast()); + + // Add cut parts to the related objects + add_cut_volume(upper_mesh, upper, volume, cut_matrix, "_A", volume->type()); + add_cut_volume(lower_mesh, lower, volume, cut_matrix, "_B", volume->type()); } } @@ -1829,6 +1867,11 @@ void ModelObject::process_modifier_cut( // to the modifier volume transformation to preserve their shape properly. volume->set_transformation(Geometry::Transformation(volume_matrix)); + if (attributes.has(ModelObjectCutAttribute::CutToParts)) { + upper->add_volume(*volume); + return; + } + // Some logic for the negative volumes/connectors. Add only needed modifiers auto bb = volume->mesh().transformed_bounding_box(inverse_cut_matrix * volume_matrix); bool is_crossed_by_cut = bb.min[Z] <= 0 && bb.max[Z] >= 0; @@ -1838,52 +1881,59 @@ void ModelObject::process_modifier_cut( lower->add_volume(*volume); } +void ModelObject::process_volume_cut(ModelVolume * volume, + const Transform3d & instance_matrix, + const Transform3d & cut_matrix, + ModelObjectCutAttributes attributes, + TriangleMesh & upper_mesh, + TriangleMesh & lower_mesh) +{ + const auto volume_matrix = volume->get_matrix(); + + using namespace Geometry; + + const Geometry::Transformation cut_transformation = Geometry::Transformation(cut_matrix); + const Transform3d invert_cut_matrix = cut_transformation.get_matrix(true, false, true, true).inverse() + * translation_transform(-1 * cut_transformation.get_offset()); + + // Transform the mesh by the combined transformation matrix. + // Flip the triangles in case the composite transformation is left handed. + TriangleMesh mesh(volume->mesh()); + mesh.transform(invert_cut_matrix * instance_matrix * volume_matrix, true); + + indexed_triangle_set upper_its, lower_its; + cut_mesh(mesh.its, 0.0f, &upper_its, &lower_its); + if (attributes.has(ModelObjectCutAttribute::KeepUpper)) + upper_mesh = TriangleMesh(upper_its); + if (attributes.has(ModelObjectCutAttribute::KeepLower)) + lower_mesh = TriangleMesh(lower_its); +} + void ModelObject::process_solid_part_cut(ModelVolume * volume, const Transform3d & instance_matrix, + const Transform3d & cut_matrix, const std::array &plane_points, ModelObjectCutAttributes attributes, ModelObject * upper, ModelObject * lower, Vec3d & local_displace) { - // Transform the mesh by the combined transformation matrix. - // Flip the triangles in case the composite transformation is left handed. - TriangleMesh mesh(volume->mesh()); - mesh.transform(instance_matrix * volume->get_matrix(), true); - volume->reset_mesh(); - // Reset volume transformation except for offset - const Vec3d offset = volume->get_offset(); - volume->set_transformation(Geometry::Transformation()); - volume->set_offset(offset); - // Perform cut TriangleMesh upper_mesh, lower_mesh; - { - indexed_triangle_set upper_its, lower_its; - cut_mesh(mesh.its, plane_points, &upper_its, &lower_its); - if (attributes.has(ModelObjectCutAttribute::KeepUpper)) upper_mesh = TriangleMesh(upper_its); - if (attributes.has(ModelObjectCutAttribute::KeepLower)) lower_mesh = TriangleMesh(lower_its); + process_volume_cut(volume, instance_matrix, cut_matrix, attributes, upper_mesh, lower_mesh); + + // Add required cut parts to the objects + if (attributes.has(ModelObjectCutAttribute::CutToParts)) { + add_cut_volume(upper_mesh, upper, volume, cut_matrix, "_A"); + add_cut_volume(lower_mesh, upper, volume, cut_matrix, "_B"); + return; } - if (attributes.has(ModelObjectCutAttribute::KeepUpper) && !upper_mesh.empty()) { - ModelVolume *vol = upper->add_volume(upper_mesh); - vol->name = volume->name.substr(0, volume->name.find_last_of('.')) + "_upper"; // BBS - // Don't copy the config's ID. - vol->config.assign_config(volume->config); - assert(vol->config.id().valid()); - assert(vol->config.id() != volume->config.id()); - vol->set_material(volume->material_id(), *volume->material()); - vol->cut_info = volume->cut_info; - } + if (attributes.has(ModelObjectCutAttribute::KeepUpper)) + add_cut_volume(upper_mesh, upper, volume, cut_matrix); + if (attributes.has(ModelObjectCutAttribute::KeepLower) && !lower_mesh.empty()) { - ModelVolume *vol = lower->add_volume(lower_mesh); - vol->name = volume->name.substr(0, volume->name.find_last_of('.')) + "_lower"; // BBS - // Don't copy the config's ID. - vol->config.assign_config(volume->config); - assert(vol->config.id().valid()); - assert(vol->config.id() != volume->config.id()); - vol->set_material(volume->material_id(), *volume->material()); - vol->cut_info = volume->cut_info; + add_cut_volume(lower_mesh, lower, volume, cut_matrix); // Compute the displacement (in instance coordinates) to be applied to place the upper parts // The upper part displacement is set to half of the lower part bounding box @@ -1957,29 +2007,13 @@ ModelObjectPtrs ModelObject::cut(size_t instance, std::array plane_poi // apply cut attributes for object apply_cut_attributes(attributes); - // Clone the object to duplicate instances, materials etc. - bool keep_upper = attributes.has(ModelObjectCutAttribute::KeepUpper); - bool keep_lower = attributes.has(ModelObjectCutAttribute::KeepLower); - ModelObject* upper = keep_upper ? ModelObject::new_clone(*this) : nullptr; - ModelObject* lower = keep_lower ? ModelObject::new_clone(*this) : nullptr; + ModelObject* upper{ nullptr }; + if (attributes.has(ModelObjectCutAttribute::KeepUpper)) + clone_for_cut(&upper); - if (attributes.has(ModelObjectCutAttribute::KeepUpper)) { - upper->set_model(nullptr); - upper->sla_support_points.clear(); - upper->sla_drain_holes.clear(); - upper->sla_points_status = sla::PointsStatus::NoPoints; - upper->clear_volumes(); - upper->input_file.clear(); - } - - if (keep_lower && lower != upper) { - lower->set_model(nullptr); - lower->sla_support_points.clear(); - lower->sla_drain_holes.clear(); - lower->sla_points_status = sla::PointsStatus::NoPoints; - lower->clear_volumes(); - lower->input_file.clear(); - } + ModelObject* lower{ nullptr }; + if (attributes.has(ModelObjectCutAttribute::KeepLower) && !attributes.has(ModelObjectCutAttribute::CutToParts)) + clone_for_cut(&lower); // Because transformations are going to be applied to meshes directly, // we reset transformation of all instances and volumes, @@ -1999,12 +2033,14 @@ ModelObjectPtrs ModelObject::cut(size_t instance, std::array plane_poi for (Vec3d& point : plane_points) { point -= instances[instance]->get_offset(); } + Transform3d inverse_cut_matrix = calculate_cut_plane_inverse_matrix(plane_points); + Transform3d cut_matrix = inverse_cut_matrix.inverse(); std::vector dowels; // Displacement (in instance coordinates) to be applied to place the upper parts Vec3d local_displace = Vec3d::Zero(); Vec3d local_dowels_displace = Vec3d::Zero(); - + for (ModelVolume *volume : volumes) { const auto volume_matrix = volume->get_matrix(); @@ -2016,96 +2052,52 @@ ModelObjectPtrs ModelObject::cut(size_t instance, std::array plane_poi if (volume->cut_info.is_processed) { // Modifiers are not cut, but we still need to add the instance transformation // to the modifier volume transformation to preserve their shape properly. - Transform3d inverse_cut_matrix = calculate_cut_plane_inverse_matrix(plane_points); + //Transform3d inverse_cut_matrix = calculate_cut_plane_inverse_matrix(plane_points); process_modifier_cut(volume, instance_matrix, inverse_cut_matrix, attributes, upper, lower); } else { - process_connector_cut(volume, attributes, upper, lower, dowels, local_dowels_displace); + process_connector_cut(volume, instance_matrix, cut_matrix, attributes, upper, lower, dowels, local_dowels_displace); } } else if (! volume->mesh().empty()) { - process_solid_part_cut(volume, instance_matrix, plane_points, attributes, upper, lower, local_displace); + process_solid_part_cut(volume, instance_matrix, cut_matrix, plane_points, attributes, upper, lower, local_displace); } } ModelObjectPtrs res; - - Transform3d cut_matrix = calculate_cut_plane_inverse_matrix(plane_points).inverse(); - if (attributes.has(ModelObjectCutAttribute::KeepUpper) && upper->volumes.size() > 0) { - invalidate_translations(upper, instances[instance]); - - reset_instance_transformation(upper, instance, cut_matrix, - attributes.has(ModelObjectCutAttribute::PlaceOnCutUpper), - attributes.has(ModelObjectCutAttribute::FlipUpper), - local_displace); - + + if (attributes.has(ModelObjectCutAttribute::CutToParts) && !upper->volumes.empty()) { + reset_instance_transformation(upper, instance, cut_matrix); res.push_back(upper); } - if (attributes.has(ModelObjectCutAttribute::KeepLower) && lower->volumes.size() > 0) { - invalidate_translations(lower, instances[instance]); + else { + if (attributes.has(ModelObjectCutAttribute::KeepUpper) && upper->volumes.size() > 0) { + invalidate_translations(upper, instances[instance]); - reset_instance_transformation(lower, instance, cut_matrix, - attributes.has(ModelObjectCutAttribute::PlaceOnCutLower), - attributes.has(ModelObjectCutAttribute::PlaceOnCutLower) ? true : attributes.has(ModelObjectCutAttribute::FlipLower)); + reset_instance_transformation(upper, instance, cut_matrix, attributes.has(ModelObjectCutAttribute::PlaceOnCutUpper), + attributes.has(ModelObjectCutAttribute::FlipUpper), local_displace); - res.push_back(lower); - } + res.push_back(upper); + } + if (attributes.has(ModelObjectCutAttribute::KeepLower) && lower->volumes.size() > 0) { + invalidate_translations(lower, instances[instance]); - if (attributes.has(ModelObjectCutAttribute::CreateDowels) && !dowels.empty()) { - auto invalidate_translations = [](ModelObject *object, const ModelInstance *src_instance) { - if (!object->origin_translation.isApprox(Vec3d::Zero()) && src_instance->get_offset().isApprox(Vec3d::Zero())) { - object->center_around_origin(); - object->translate_instances(-object->origin_translation); - object->origin_translation = Vec3d::Zero(); - } else { - object->invalidate_bounding_box(); - object->center_around_origin(); + reset_instance_transformation(lower, instance, cut_matrix, attributes.has(ModelObjectCutAttribute::PlaceOnCutLower), + attributes.has(ModelObjectCutAttribute::PlaceOnCutLower) ? true : attributes.has(ModelObjectCutAttribute::FlipLower)); + + res.push_back(lower); + } + + if (attributes.has(ModelObjectCutAttribute::CreateDowels) && !dowels.empty()) { + for (auto dowel : dowels) { + invalidate_translations(dowel, instances[instance]); + + reset_instance_transformation(dowel, instance, Transform3d::Identity(), false, false, local_dowels_displace); + + local_dowels_displace += dowel->full_raw_mesh_bounding_box().size().cwiseProduct(Vec3d(-1.5, -1.5, 0.0)); + dowel->name += "-Dowel-" + dowel->volumes[0]->name; + res.push_back(dowel); } - }; - - auto reset_instance_transformation = [](ModelObject *object, size_t src_instance_idx, const Transform3d &cut_matrix, - bool place_on_cut = false, bool flip = false, Vec3d local_displace = Vec3d::Zero()) { - using namespace Geometry; - // Reset instance transformation except offset and Z-rotation - for (size_t i = 0; i < object->instances.size(); ++i) { - auto & obj_instance = object->instances[i]; - const Vec3d offset = obj_instance->get_offset(); - const double rot_z = obj_instance->get_rotation().z(); - - obj_instance->set_transformation(Transformation()); - - const Vec3d displace = local_displace.isApprox(Vec3d::Zero()) ? Vec3d::Zero() : rotation_transform(obj_instance->get_rotation()) * local_displace; - obj_instance->set_offset(offset + displace); - - Vec3d rotation = Vec3d::Zero(); - if (!flip && !place_on_cut) { - if (i != src_instance_idx) rotation[Z] = rot_z; - } else { - Transform3d rotation_matrix = Transform3d::Identity(); - if (flip) - rotation_matrix = rotation_transform(PI * Vec3d::UnitX()); - - if (place_on_cut) - rotation_matrix = rotation_matrix * Transformation(cut_matrix).get_matrix(true, false, true, true).inverse(); - - if (i != src_instance_idx) - rotation_matrix = rotation_transform(rot_z * Vec3d::UnitZ()) * rotation_matrix; - - rotation = Transformation(rotation_matrix).get_rotation(); - } - - obj_instance->set_rotation(rotation); - } - }; - - for (auto dowel : dowels) { - invalidate_translations(dowel, instances[instance]); - - reset_instance_transformation(dowel, instance, Transform3d::Identity(), false, false, local_dowels_displace); - - local_dowels_displace += dowel->full_raw_mesh_bounding_box().size().cwiseProduct(Vec3d(-1.5, -1.5, 0.0)); - dowel->name += "-Dowel-" + dowel->volumes[0]->name; - res.push_back(dowel); } } @@ -2552,7 +2544,7 @@ unsigned int ModelObject::update_instances_print_volume_state(const BuildVolume // %print_volume.min.x() %print_volume.min.y() %print_volume.min.z()%print_volume.max.x() %print_volume.max.y() %print_volume.max.z(); for (ModelInstance* model_instance : this->instances) { unsigned int inside_outside = 0; - for (const ModelVolume* vol : this->volumes) + for (const ModelVolume *vol : this->volumes) { if (vol->is_model_part()) { //BBS: add bounding box empty check logic, for some volume is empty before split(it will be removed after split to object) BoundingBoxf3 bb = vol->get_convex_hull().bounding_box(); @@ -2578,6 +2570,7 @@ unsigned int ModelObject::update_instances_print_volume_state(const BuildVolume // Volume colliding with the build volume. inside_outside |= INSIDE | OUTSIDE; } + } model_instance->print_volume_state = inside_outside == (INSIDE | OUTSIDE) ? ModelInstancePVS_Partly_Outside : inside_outside == INSIDE ? ModelInstancePVS_Inside : ModelInstancePVS_Fully_Outside; diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index 9188017012..ede417fe4e 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -316,7 +316,7 @@ enum class ModelVolumeType : int { SUPPORT_ENFORCER }; -enum class ModelObjectCutAttribute : int { KeepUpper, KeepLower, FlipUpper, FlipLower, PlaceOnCutUpper, PlaceOnCutLower, CreateDowels }; +enum class ModelObjectCutAttribute : int { KeepUpper, KeepLower, FlipUpper, FlipLower, PlaceOnCutUpper, PlaceOnCutLower, CreateDowels, CutToParts, InvalidateCutInfo }; using ModelObjectCutAttributes = enum_bitmask; ENABLE_ENUM_BITMASK_OPERATORS(ModelObjectCutAttribute); @@ -475,6 +475,8 @@ public: void clone_for_cut(ModelObject **obj); Transform3d calculate_cut_plane_inverse_matrix(const std::array &plane_points); void process_connector_cut(ModelVolume *volume, + const Transform3d & instance_matrix, + const Transform3d& cut_matrix, ModelObjectCutAttributes attributes, ModelObject *upper, ModelObject *lower, std::vector &dowels, @@ -485,8 +487,15 @@ public: ModelObjectCutAttributes attributes, ModelObject * upper, ModelObject * lower); + void process_volume_cut(ModelVolume * volume, + const Transform3d & instance_matrix, + const Transform3d & cut_matrix, + ModelObjectCutAttributes attributes, + TriangleMesh & upper_mesh, + TriangleMesh & lower_mesh); void process_solid_part_cut(ModelVolume * volume, const Transform3d & instance_matrix, + const Transform3d & cut_matrix, const std::array &plane_points, ModelObjectCutAttributes attributes, ModelObject * upper, diff --git a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp index ef33bd5d36..295d81a851 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp @@ -113,6 +113,7 @@ GLGizmoAdvancedCut::GLGizmoAdvancedCut(GLCanvas3D& parent, const std::string& ic , m_last_active_id(0) , m_keep_upper(true) , m_keep_lower(true) + , m_cut_to_parts(false) , m_do_segment(false) , m_segment_smoothing_alpha(0.5) , m_segment_number(5) @@ -350,6 +351,7 @@ void GLGizmoAdvancedCut::reset_all() m_keep_upper = true; m_keep_lower = true; + m_cut_to_parts = false; m_place_on_cut_upper = true; m_place_on_cut_lower = false; m_rotate_upper = false; @@ -653,11 +655,13 @@ void GLGizmoAdvancedCut::perform_cut(const Selection& selection) wxGetApp().plater()->cut(object_idx, instance_idx, get_plane_points_world_coord(), only_if(m_keep_upper, ModelObjectCutAttribute::KeepUpper) | only_if(m_keep_lower, ModelObjectCutAttribute::KeepLower) | + only_if(m_cut_to_parts, ModelObjectCutAttribute::CutToParts) | only_if(m_place_on_cut_upper, ModelObjectCutAttribute::PlaceOnCutUpper) | only_if(m_place_on_cut_lower, ModelObjectCutAttribute::PlaceOnCutLower) | only_if(m_rotate_upper, ModelObjectCutAttribute::FlipUpper) | only_if(m_rotate_lower, ModelObjectCutAttribute::FlipLower) | - only_if(create_dowels_as_separate_object, ModelObjectCutAttribute::CreateDowels)); + only_if(create_dowels_as_separate_object, ModelObjectCutAttribute::CreateDowels) | + only_if(!has_connectors, ModelObjectCutAttribute::InvalidateCutInfo)); } } } @@ -1393,7 +1397,7 @@ void GLGizmoAdvancedCut::render_cut_plane_input_window(float x, float y, float b ImGui::PopStyleVar(1); m_imgui->disabled_end(); - m_imgui->disabled_begin(!m_keep_upper || !m_keep_lower); + m_imgui->disabled_begin(!m_keep_upper || !m_keep_lower || m_cut_to_parts); if (m_imgui->button(_L("Add/Edit connectors"))) set_connectors_editing(true); m_imgui->disabled_end(); @@ -1406,22 +1410,22 @@ void GLGizmoAdvancedCut::render_cut_plane_input_window(float x, float y, float b label_width = width; } - auto render_part_action_line = [this, label_width](const wxString& label, const wxString& suffix, bool& keep_part, bool& place_on_cut_part, bool& rotate_part) { - CutConnectors &connectors = m_c->selection_info()->model_object()->cut_connectors; - + CutConnectors &connectors = m_c->selection_info()->model_object()->cut_connectors; + const bool has_connectors = !connectors.empty(); + auto render_part_action_line = [this, label_width, &connectors](const wxString &label, const wxString &suffix, bool &keep_part, bool &place_on_cut_part, bool &rotate_part) { bool keep = true; ImGui::AlignTextToFramePadding(); m_imgui->text(label); ImGui::SameLine(label_width); - m_imgui->disabled_begin(!connectors.empty()); + m_imgui->disabled_begin(!connectors.empty() || m_cut_to_parts); m_imgui->bbl_checkbox(_L("Keep") + suffix, connectors.empty() ? keep_part : keep); m_imgui->disabled_end(); ImGui::SameLine(); - m_imgui->disabled_begin(!keep_part); + m_imgui->disabled_begin(!keep_part || m_cut_to_parts); if (m_imgui->bbl_checkbox(_L("Place on cut") + suffix, place_on_cut_part)) rotate_part = false; ImGui::SameLine(); @@ -1434,6 +1438,9 @@ void GLGizmoAdvancedCut::render_cut_plane_input_window(float x, float y, float b render_part_action_line( _L("Upper part"), "##upper", m_keep_upper, m_place_on_cut_upper, m_rotate_upper); render_part_action_line( _L("Lower part"), "##lower", m_keep_lower, m_place_on_cut_lower, m_rotate_lower); + m_imgui->disabled_begin(has_connectors); + m_imgui->bbl_checkbox(_L("Cut to parts"), m_cut_to_parts); + m_imgui->disabled_end(); #if 0 // Auto segment input diff --git a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.hpp b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.hpp index 45fe4419a1..a2ea836e0e 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.hpp @@ -48,6 +48,7 @@ private: bool m_keep_upper; bool m_keep_lower; + bool m_cut_to_parts; bool m_place_on_cut_upper{true}; bool m_place_on_cut_lower{false}; bool m_rotate_upper{false}; From 9309831d26b52ac3e8826cf064f21b2dc08affe0 Mon Sep 17 00:00:00 2001 From: "qing.zhang" Date: Thu, 23 Mar 2023 14:34:46 +0800 Subject: [PATCH 130/339] ENH: update machine_start_gcode turn on HB fan before setting the nozzle temp Signed-off-by: qing.zhang Change-Id: I55908465055dcd93d274c1d861715cf7b9cbe655 --- resources/profiles/BBL.json | 2 +- resources/profiles/BBL/machine/Bambu Lab P1P 0.2 nozzle.json | 2 +- resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json | 2 +- resources/profiles/BBL/machine/Bambu Lab P1P 0.6 nozzle.json | 2 +- resources/profiles/BBL/machine/Bambu Lab P1P 0.8 nozzle.json | 2 +- resources/profiles/BBL/machine/Bambu Lab X1 0.2 nozzle.json | 2 +- resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json | 2 +- resources/profiles/BBL/machine/Bambu Lab X1 0.6 nozzle.json | 2 +- resources/profiles/BBL/machine/Bambu Lab X1 0.8 nozzle.json | 2 +- .../profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json | 2 +- .../profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json | 2 +- .../profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json | 2 +- .../profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index cf98c3a397..31ce1402e1 100644 --- a/resources/profiles/BBL.json +++ b/resources/profiles/BBL.json @@ -1,7 +1,7 @@ { "name": "Bambulab", "url": "http://www.bambulab.com/Parameters/vendor/BBL.json", - "version": "01.05.00.21", + "version": "01.05.00.22", "force_update": "0", "description": "the initial version of BBL configurations", "machine_model_list": [ diff --git a/resources/profiles/BBL/machine/Bambu Lab P1P 0.2 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1P 0.2 nozzle.json index 9f74e57285..380f00d7f5 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1P 0.2 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1P 0.2 nozzle.json @@ -26,7 +26,7 @@ "retraction_minimum_travel": [ "5" ], - "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 202230129 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z-0.04 ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression", + "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 20230323 =====================\n;===== turn on the HB fan =================\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp to turn on the HB fan\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z-0.04 ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression", "upward_compatible_machine":[ "Bambu Lab X1 0.2 nozzle", "Bambu Lab X1 Carbon 0.2 nozzle" diff --git a/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json index 4774f556a4..6834c9caf3 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json @@ -24,7 +24,7 @@ ], "extruder_clearance_max_radius": "56", "machine_pause_gcode": "M400 U1\n", - "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 202230129 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression", + "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 20230323 =====================\n;===== turn on the HB fan =================\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp to turn on the HB fan\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression", "scan_first_layer": "0", "machine_load_filament_time": "29", "machine_unload_filament_time": "28", diff --git a/resources/profiles/BBL/machine/Bambu Lab P1P 0.6 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1P 0.6 nozzle.json index 1e6bc5d45d..d5e2180d11 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1P 0.6 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1P 0.6 nozzle.json @@ -26,7 +26,7 @@ "retraction_minimum_travel": [ "3" ], - "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 202230129 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression", + "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 20230323 =====================\n;===== turn on the HB fan =================\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp to turn on the HB fan\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression", "nozzle_type": "hardened_steel", "nozzle_hrc": "55", "upward_compatible_machine":[ diff --git a/resources/profiles/BBL/machine/Bambu Lab P1P 0.8 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1P 0.8 nozzle.json index 551de284b2..cb10e3e27a 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1P 0.8 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1P 0.8 nozzle.json @@ -29,7 +29,7 @@ "retract_length_toolchange": [ "3" ], - "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 202230129 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X240 E15\nG0 Y15 E1.500 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.500\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X18 E15\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression", + "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 20230323 =====================\n;===== turn on the HB fan =================\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp to turn on the HB fan\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\nG0 X240 E15\nG0 Y15 E1.500 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.500\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\nG0 X18 E15\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression", "nozzle_type": "hardened_steel", "nozzle_hrc": "55", "upward_compatible_machine":[ diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 0.2 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 0.2 nozzle.json index 0d83b274d4..d727b43d07 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 0.2 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 0.2 nozzle.json @@ -26,7 +26,7 @@ "retraction_minimum_travel": [ "5" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230130 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83\n\t{if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800 \n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.160 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.080 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 E{-retraction_length[initial_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230322 =====================\n;===== turn on the HB fan =================\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp to turn on the HB fan\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933\n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018\n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933\n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091\n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080\n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238\n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403\n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183\n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403\n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201\n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061\n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659\n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769\n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732\n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256\n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732\n G1 F1500.000 E-0.800\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n\t{if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.160\n G0 X45.000 F30000\n G0 Y20.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.080\n G0 X45.000 F30000\n G0 Y22.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y24.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X40.000 Y54.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 Y37.50\n M400 P200\n M971 S5 P1\n M960 S0 P0\n M960 S2 P1\n G0 Y54.50\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1\n G0 Y37.50\n M400 P200\n M971 S5 P2\n M960 S0 P0\n M960 S2 P1\n G0 Y54.50\n M400 P500\n M971 S5 P4\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X40.000 Y54.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 Y37.50\n M400 P200\n M971 S5 P1\n M960 S0 P0\n M960 S2 P1\n G0 Y54.50\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1\n G0 Y37.50\n M400 P200\n M971 S5 P2\n M960 S0 P0\n M960 S2 P1\n G0 Y54.50\n M400 P500\n M971 S5 P4\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623\n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", "nozzle_type": "stainless_steel", "upward_compatible_machine":[ "Bambu Lab P1P 0.2 nozzle", diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json index ea47c288c0..e77c8c8566 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json @@ -26,7 +26,7 @@ "20", "20" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230130 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.040 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 E{-retraction_length[initial_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230322 =====================\n;===== turn on the HB fan =================\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp to turn on the HB fan\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.040 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", "scan_first_layer": "1", "machine_load_filament_time": "29", "machine_unload_filament_time": "28", diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 0.6 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 0.6 nozzle.json index fd45149256..bfc3bfa467 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 0.6 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 0.6 nozzle.json @@ -26,7 +26,7 @@ "retraction_minimum_travel": [ "3" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230130 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.679 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.032 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.679 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.164 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.944 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.428 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.725 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.329 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.725 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.362 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.910 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.186 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.384 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.318 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.461 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.318 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E16.9 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.030 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.015 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.015 K0.030\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.015 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.015}\n M623 \n\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 E{-retraction_length[initial_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230322 =====================\n;===== turn on the HB fan =================\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp to turn on the HB fan\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.679\n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.032\n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.679\n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.164\n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.944\n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.428\n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.725\n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.329\n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.725\n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.362\n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.910\n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.186\n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.384\n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.318\n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.461\n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.318\n G1 F1500.000 E-0.800\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E16.9 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.030\n G0 X45.000 F30000\n G0 Y20.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.015\n G0 X45.000 F30000\n G0 Y22.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y24.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X40.000 Y54.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 Y37.50\n M400 P200\n M971 S5 P1\n M960 S0 P0\n M960 S2 P1\n G0 Y54.50\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1\n G0 Y37.50\n M400 P200\n M971 S5 P2\n M960 S0 P0\n M960 S2 P1\n G0 Y54.50\n M400 P500\n M971 S5 P4\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X40.000 Y54.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 Y37.50\n M400 P200\n M971 S5 P1\n M960 S0 P0\n M960 S2 P1\n G0 Y54.50\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1\n G0 Y37.50\n M400 P200\n M971 S5 P2\n M960 S0 P0\n M960 S2 P1\n G0 Y54.50\n M400 P500\n M971 S5 P4\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.015 K0.030\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.015 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.015}\n M623\n\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", "nozzle_type": "hardened_steel", "nozzle_hrc": "55", "upward_compatible_machine":[ diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 0.8 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 0.8 nozzle.json index 44f28edecb..b11a5b9313 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 0.8 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 0.8 nozzle.json @@ -29,7 +29,7 @@ "retract_length_toolchange": [ "3" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230130 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X240 E15\nG0 Y15 E1.500 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.500\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X18 E15\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.8660 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.0360 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.8660 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.1820 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E2.1600 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.4760 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.8060 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.3660 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.8060 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.4020 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E2.1220 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.3180 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.5380 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.4640 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.5120 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.4640 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X110.000 E9.35441 F4800 \n G0 X185.000 E9.35441 F4800 \n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.010 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.010 K0.020\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_extruder]} \n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.01 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14) *0.01}\n M623 \n\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X185.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X190.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X195.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X200.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X205.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X210.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X215.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X220.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X225.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 E{-retraction_length[initial_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230322 =====================\n;===== turn on the HB fan =================\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp to turn on the HB fan\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\nG0 X240 E15\nG0 Y15 E1.500 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.500\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\nG0 X18 E15\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.8660\n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.0360\n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.8660\n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.1820\n G1 F1200.0 X31.000 Y49.000 Z0.200 E2.1600\n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.4760\n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.8060\n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.3660\n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.8060\n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.4020\n G1 F1200.0 X48.000 Y20.000 Z0.200 E2.1220\n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.3180\n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.5380\n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.4640\n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.5120\n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.4640\n G1 F1500.000 E-0.800\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X110.000 E9.35441 F4800\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.020\n G0 X45.000 F30000\n G0 Y20.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.010\n G0 X45.000 F30000\n G0 Y22.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y24.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X40.000 Y54.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 Y37.50\n M400 P200\n M971 S5 P1\n M960 S0 P0\n M960 S2 P1\n G0 Y54.50\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1\n G0 Y37.50\n M400 P200\n M971 S5 P2\n M960 S0 P0\n M960 S2 P1\n G0 Y54.50\n M400 P500\n M971 S5 P4\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X40.000 Y54.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 Y37.50\n M400 P200\n M971 S5 P1\n M960 S0 P0\n M960 S2 P1\n G0 Y54.50\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1\n G0 Y37.50\n M400 P200\n M971 S5 P2\n M960 S0 P0\n M960 S2 P1\n G0 Y54.50\n M400 P500\n M971 S5 P4\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.010 K0.020\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.01 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14) *0.01}\n M623\n\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X185.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X190.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X195.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X200.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X205.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X210.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X215.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X220.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X225.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", "nozzle_type": "hardened_steel", "nozzle_hrc": "55", "upward_compatible_machine":[ diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json index fba24a6a05..fd99ccab49 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json @@ -26,7 +26,7 @@ "retraction_minimum_travel": [ "5" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230130 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83\n\t{if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800 \n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.160 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.080 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 E{-retraction_length[initial_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230322 =====================\n;===== turn on the HB fan =================\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp to turn on the HB fan\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933\n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018\n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933\n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091\n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080\n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238\n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403\n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183\n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403\n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201\n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061\n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659\n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769\n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732\n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256\n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732\n G1 F1500.000 E-0.800\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n\t{if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.160\n G0 X45.000 F30000\n G0 Y20.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.080\n G0 X45.000 F30000\n G0 Y22.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y24.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X40.000 Y54.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 Y37.50\n M400 P200\n M971 S5 P1\n M960 S0 P0\n M960 S2 P1\n G0 Y54.50\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1\n G0 Y37.50\n M400 P200\n M971 S5 P2\n M960 S0 P0\n M960 S2 P1\n G0 Y54.50\n M400 P500\n M971 S5 P4\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X40.000 Y54.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 Y37.50\n M400 P200\n M971 S5 P1\n M960 S0 P0\n M960 S2 P1\n G0 Y54.50\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1\n G0 Y37.50\n M400 P200\n M971 S5 P2\n M960 S0 P0\n M960 S2 P1\n G0 Y54.50\n M400 P500\n M971 S5 P4\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623\n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", "nozzle_type": "stainless_steel", "nozzle_hrc": "20", "upward_compatible_machine":[ diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json index 9e786ff24f..1f51f65257 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json @@ -27,7 +27,7 @@ "20" ], "machine_pause_gcode": "M400 U1\n", - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230130 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.040 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 E{-retraction_length[initial_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230322 =====================\n;===== turn on the HB fan =================\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp to turn on the HB fan\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.040 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", "scan_first_layer": "1", "machine_load_filament_time": "29", "machine_unload_filament_time": "28", diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json index 8600d18f28..53ebc5f479 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json @@ -26,7 +26,7 @@ "retraction_minimum_travel": [ "3" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230130 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.679 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.032 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.679 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.164 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.944 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.428 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.725 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.329 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.725 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.362 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.910 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.186 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.384 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.318 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.461 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.318 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E16.9 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.030 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.015 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.015 K0.030\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.015 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.015}\n M623 \n\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 E{-retraction_length[initial_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230322 =====================\n;===== turn on the HB fan =================\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp to turn on the HB fan\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.679\n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.032\n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.679\n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.164\n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.944\n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.428\n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.725\n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.329\n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.725\n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.362\n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.910\n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.186\n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.384\n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.318\n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.461\n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.318\n G1 F1500.000 E-0.800\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E16.9 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.030\n G0 X45.000 F30000\n G0 Y20.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.015\n G0 X45.000 F30000\n G0 Y22.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y24.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X40.000 Y54.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 Y37.50\n M400 P200\n M971 S5 P1\n M960 S0 P0\n M960 S2 P1\n G0 Y54.50\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1\n G0 Y37.50\n M400 P200\n M971 S5 P2\n M960 S0 P0\n M960 S2 P1\n G0 Y54.50\n M400 P500\n M971 S5 P4\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X40.000 Y54.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 Y37.50\n M400 P200\n M971 S5 P1\n M960 S0 P0\n M960 S2 P1\n G0 Y54.50\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1\n G0 Y37.50\n M400 P200\n M971 S5 P2\n M960 S0 P0\n M960 S2 P1\n G0 Y54.50\n M400 P500\n M971 S5 P4\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.015 K0.030\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.015 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.015}\n M623\n\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", "upward_compatible_machine":[ "Bambu Lab P1P 0.6 nozzle", "Bambu Lab X1 0.6 nozzle" diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json index 062e5b5522..1da5d4cb6e 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json @@ -29,7 +29,7 @@ "retract_length_toolchange": [ "3" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230130 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X240 E15\nG0 Y15 E1.500 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.500\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X18 E15\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.8660 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.0360 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.8660 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.1820 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E2.1600 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.4760 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.8060 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.3660 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.8060 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.4020 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E2.1220 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.3180 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.5380 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.4640 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.5120 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.4640 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X110.000 E9.35441 F4800 \n G0 X185.000 E9.35441 F4800 \n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.010 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.010 K0.020\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_extruder]} \n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.01 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14) *0.01}\n M623 \n\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X185.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X190.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X195.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X200.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X205.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X210.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X215.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X220.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X225.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 E{-retraction_length[initial_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230322 =====================\n;===== turn on the HB fan =================\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp to turn on the HB fan\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\nG0 X240 E15\nG0 Y15 E1.500 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.500\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\nG0 X18 E15\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.8660\n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.0360\n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.8660\n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.1820\n G1 F1200.0 X31.000 Y49.000 Z0.200 E2.1600\n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.4760\n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.8060\n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.3660\n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.8060\n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.4020\n G1 F1200.0 X48.000 Y20.000 Z0.200 E2.1220\n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.3180\n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.5380\n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.4640\n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.5120\n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.4640\n G1 F1500.000 E-0.800\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X110.000 E9.35441 F4800\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.020\n G0 X45.000 F30000\n G0 Y20.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.010\n G0 X45.000 F30000\n G0 Y22.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y24.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X40.000 Y54.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 Y37.50\n M400 P200\n M971 S5 P1\n M960 S0 P0\n M960 S2 P1\n G0 Y54.50\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1\n G0 Y37.50\n M400 P200\n M971 S5 P2\n M960 S0 P0\n M960 S2 P1\n G0 Y54.50\n M400 P500\n M971 S5 P4\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X40.000 Y54.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 Y37.50\n M400 P200\n M971 S5 P1\n M960 S0 P0\n M960 S2 P1\n G0 Y54.50\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1\n G0 Y37.50\n M400 P200\n M971 S5 P2\n M960 S0 P0\n M960 S2 P1\n G0 Y54.50\n M400 P500\n M971 S5 P4\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.010 K0.020\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.01 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14) *0.01}\n M623\n\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X185.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X190.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X195.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X200.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X205.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X210.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X215.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X220.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X225.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", "upward_compatible_machine":[ "Bambu Lab P1P 0.8 nozzle", "Bambu Lab X1 0.8 nozzle" From af0fca211b0165fda560146a346a7b0a421362d0 Mon Sep 17 00:00:00 2001 From: Arthur Date: Mon, 20 Mar 2023 18:36:56 +0800 Subject: [PATCH 131/339] ENH: add grid & rectilinear_interlaced interface pattern Github: #1018, #1221 Jira: STUDIO-2534 Change-Id: I8c766b5b934364253c0344e39f474e4ac3b81add (cherry picked from commit e7d46fe60856ab511905b46799943bfde8a71826) --- src/libslic3r/Fill/FillBase.cpp | 12 +++++++----- src/libslic3r/Fill/FillBase.hpp | 1 + src/libslic3r/PrintConfig.cpp | 8 +++++++- src/libslic3r/PrintConfig.hpp | 2 +- src/libslic3r/SupportMaterial.cpp | 27 ++++++++++++++++++++------- src/libslic3r/TreeSupport.cpp | 19 +++++++++++++++---- 6 files changed, 51 insertions(+), 18 deletions(-) diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp index 6060090641..8cfbd8b12f 100644 --- a/src/libslic3r/Fill/FillBase.cpp +++ b/src/libslic3r/Fill/FillBase.cpp @@ -1636,11 +1636,13 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vector arches; - arches.reserve(graph.map_infill_end_point_to_boundary.size()); - for (ContourIntersectionPoint &cp : graph.map_infill_end_point_to_boundary) - if (cp.contour_idx != boundary_idx_unconnected && cp.next_on_contour != &cp && cp.could_connect_next()) - arches.push_back({ &cp, path_length_along_contour_ccw(&cp, cp.next_on_contour, graph.boundary_params[cp.contour_idx].back()) }); - std::sort(arches.begin(), arches.end(), [](const auto &l, const auto &r) { return l.arc_length < r.arc_length; }); + if (!params.dont_sort) { + arches.reserve(graph.map_infill_end_point_to_boundary.size()); + for (ContourIntersectionPoint& cp : graph.map_infill_end_point_to_boundary) + if (cp.contour_idx != boundary_idx_unconnected && cp.next_on_contour != &cp && cp.could_connect_next()) + arches.push_back({ &cp, path_length_along_contour_ccw(&cp, cp.next_on_contour, graph.boundary_params[cp.contour_idx].back()) }); + std::sort(arches.begin(), arches.end(), [](const auto& l, const auto& r) { return l.arc_length < r.arc_length; }); + } //FIXME improve the Traveling Salesman problem with 2-opt and 3-opt local optimization. for (Arc &arc : arches) diff --git a/src/libslic3r/Fill/FillBase.hpp b/src/libslic3r/Fill/FillBase.hpp index 78a8d5b144..4e09270771 100644 --- a/src/libslic3r/Fill/FillBase.hpp +++ b/src/libslic3r/Fill/FillBase.hpp @@ -76,6 +76,7 @@ struct FillParams bool using_internal_flow{ false }; //BBS: only used for new top surface pattern float no_extrusion_overlap{ 0.0 }; + bool dont_sort{ false }; // do not sort the lines, just simply connect them }; static_assert(IsTriviallyCopyable::value, "FillParams class is not POD (and it should be - see constructor)."); diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 2d6d39e6c9..abf67980da 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -190,7 +190,9 @@ CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(SupportMaterialStyle) static t_config_enum_values s_keys_map_SupportMaterialInterfacePattern { { "auto", smipAuto }, { "rectilinear", smipRectilinear }, - { "concentric", smipConcentric } + { "concentric", smipConcentric }, + { "rectilinear_interlaced", smipRectilinearInterlaced}, + { "grid", smipGrid } }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(SupportMaterialInterfacePattern) @@ -2634,9 +2636,13 @@ void PrintConfigDef::init_fff_params() def->enum_values.push_back("auto"); def->enum_values.push_back("rectilinear"); def->enum_values.push_back("concentric"); + def->enum_values.push_back("rectilinear_interlaced"); + def->enum_values.push_back("grid"); def->enum_labels.push_back(L("Default")); def->enum_labels.push_back(L("Rectilinear")); def->enum_labels.push_back(L("Concentric")); + def->enum_labels.push_back(L("Rectilinear Interlaced")); + def->enum_labels.push_back(L("Grid")); def->mode = comAdvanced; def->set_default_value(new ConfigOptionEnum(smipRectilinear)); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 52f4643c5f..746d3c3c15 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -104,7 +104,7 @@ enum SupportMaterialStyle { }; enum SupportMaterialInterfacePattern { - smipAuto, smipRectilinear, smipConcentric, + smipAuto, smipRectilinear, smipConcentric, smipRectilinearInterlaced, smipGrid }; // BBS diff --git a/src/libslic3r/SupportMaterial.cpp b/src/libslic3r/SupportMaterial.cpp index 21b59f3c9a..68cfcf3eb2 100644 --- a/src/libslic3r/SupportMaterial.cpp +++ b/src/libslic3r/SupportMaterial.cpp @@ -412,7 +412,12 @@ PrintObjectSupportMaterial::PrintObjectSupportMaterial(const PrintObject *object support_pattern == smpHoneycomb ? ipHoneycomb : m_support_params.support_density > 0.95 || m_support_params.with_sheath ? ipRectilinear : ipSupportBase; m_support_params.interface_fill_pattern = (m_support_params.interface_density > 0.95 ? ipRectilinear : ipSupportBase); - m_support_params.contact_fill_pattern = + if (m_object_config->support_interface_pattern == smipGrid) + m_support_params.contact_fill_pattern = ipGrid; + else if (m_object_config->support_interface_pattern == smipRectilinearInterlaced) + m_support_params.contact_fill_pattern = ipRectilinear; + else + m_support_params.contact_fill_pattern = (m_object_config->support_interface_pattern == smipAuto && m_slicing_params.soluble_interface) || m_object_config->support_interface_pattern == smipConcentric ? ipConcentric : @@ -3642,7 +3647,6 @@ static inline void fill_expolygon_generate_paths( ExPolygon &&expolygon, Fill *filler, const FillParams &fill_params, - float density, ExtrusionRole role, const Flow &flow) { @@ -3664,12 +3668,11 @@ static inline void fill_expolygons_generate_paths( ExPolygons &&expolygons, Fill *filler, const FillParams &fill_params, - float density, ExtrusionRole role, const Flow &flow) { for (ExPolygon &expoly : expolygons) - fill_expolygon_generate_paths(dst, std::move(expoly), filler, fill_params, density, role, flow); + fill_expolygon_generate_paths(dst, std::move(expoly), filler, fill_params, role, flow); } static inline void fill_expolygons_generate_paths( @@ -3683,7 +3686,7 @@ static inline void fill_expolygons_generate_paths( FillParams fill_params; fill_params.density = density; fill_params.dont_adjust = true; - fill_expolygons_generate_paths(dst, std::move(expolygons), filler, fill_params, density, role, flow); + fill_expolygons_generate_paths(dst, std::move(expolygons), filler, fill_params, role, flow); } static inline void fill_expolygons_with_sheath_generate_paths( @@ -3731,7 +3734,7 @@ static inline void fill_expolygons_with_sheath_generate_paths( } extrusion_entities_append_paths(out, polylines, erSupportMaterial, flow.mm3_per_mm(), flow.width(), flow.height()); // Fill in the rest. - fill_expolygons_generate_paths(out, offset_ex(expoly, float(-0.4 * spacing)), filler, fill_params, density, role, flow); + fill_expolygons_generate_paths(out, offset_ex(expoly, float(-0.4 * spacing)), filler, fill_params, role, flow); if (no_sort && ! eec->empty()) dst.emplace_back(eec.release()); } @@ -4581,13 +4584,23 @@ void PrintObjectSupportMaterial::generate_toolpaths( double density = interface_as_base ? m_support_params.support_density : m_support_params.interface_density; filler_interface->spacing = interface_as_base ? m_support_params.support_material_flow.spacing() : m_support_params.support_material_interface_flow.spacing(); filler_interface->link_max_length = coord_t(scale_(filler_interface->spacing * link_max_length_factor / density)); + // BBS support more interface patterns + FillParams fill_params; + fill_params.density = density; + fill_params.dont_adjust = true; + if (m_object_config->support_interface_pattern == smipGrid) { + filler_interface->angle = Geometry::deg2rad(m_support_params.base_angle); + fill_params.dont_sort = true; + } + if (m_object_config->support_interface_pattern == smipRectilinearInterlaced) + filler_interface->layer_id = support_layer.interface_id(); fill_expolygons_generate_paths( // Destination layer_ex.extrusions, // Regions to fill union_safety_offset_ex(layer_ex.polygons_to_extrude()), // Filler and its parameters - filler_interface.get(), float(density), + filler_interface.get(), fill_params, // Extrusion parameters erSupportMaterialInterface, interface_flow); } diff --git a/src/libslic3r/TreeSupport.cpp b/src/libslic3r/TreeSupport.cpp index 919e63bec1..5c69ea1e56 100644 --- a/src/libslic3r/TreeSupport.cpp +++ b/src/libslic3r/TreeSupport.cpp @@ -698,10 +698,15 @@ TreeSupport::TreeSupport(PrintObject& object, const SlicingParameters &slicing_p ipSupportBase; m_support_params.interface_fill_pattern = (m_support_params.interface_density > 0.95 ? ipRectilinear : ipSupportBase); - m_support_params.contact_fill_pattern = (m_object_config->support_interface_pattern == smipAuto && m_slicing_params.soluble_interface) || - m_object_config->support_interface_pattern == smipConcentric ? - ipConcentric : - (m_support_params.interface_density > 0.95 ? ipRectilinear : ipSupportBase); + if (m_object_config->support_interface_pattern == smipGrid) + m_support_params.contact_fill_pattern = ipGrid; + else if (m_object_config->support_interface_pattern == smipRectilinearInterlaced) + m_support_params.contact_fill_pattern = ipRectilinear; + else + m_support_params.contact_fill_pattern = (m_object_config->support_interface_pattern == smipAuto && m_slicing_params.soluble_interface) || + m_object_config->support_interface_pattern == smipConcentric ? + ipConcentric : + (m_support_params.interface_density > 0.95 ? ipRectilinear : ipSupportBase); m_support_params.support_extrusion_width = m_object_config->support_line_width.value > 0 ? m_object_config->support_line_width : m_object_config->line_width; is_slim = is_tree_slim(support_type, support_style); MAX_BRANCH_RADIUS = 10.0; @@ -1573,6 +1578,12 @@ void TreeSupport::generate_toolpaths() // roof_areas fill_params.density = interface_density; filler_interface->spacing = m_support_material_interface_flow.spacing(); + if (m_object_config->support_interface_pattern == smipGrid) { + filler_interface->angle = Geometry::deg2rad(object_config.support_angle.value); + fill_params.dont_sort = true; + } + if (m_object_config->support_interface_pattern == smipRectilinearInterlaced) + filler_interface->layer_id = round(area_group.dist_to_top / ts_layer->height); fill_expolygons_generate_paths(ts_layer->support_fills.entities, std::move(polys), filler_interface.get(), fill_params, erSupportMaterialInterface, m_support_material_interface_flow); } From 355dd8d46373d6e7a0b2229323a5826e599cb9db Mon Sep 17 00:00:00 2001 From: MusangKing Date: Thu, 23 Mar 2023 12:06:14 +0800 Subject: [PATCH 132/339] ENH: Re-open pattern angle option under Support/Advanced Re-open this option as requested by github users. Fix Jira STUDIO-2083; Github issue-1102 Change-Id: Ifb01a5153e7dc105bf2d29a98e64dda3a9d8e6d4 (cherry picked from commit e42914b2448c2693d19d40b0d84e64567b766f37) --- src/libslic3r/PrintConfig.cpp | 2 +- src/slic3r/GUI/Tab.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index abf67980da..d4a8e567dd 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -2448,7 +2448,7 @@ void PrintConfigDef::init_fff_params() def->sidetext = L("°"); def->min = 0; def->max = 359; - def->mode = comDevelop; + def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0)); def = this->add("support_on_build_plate_only", coBool); diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index d9ff15aaaf..349f0d388e 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1970,7 +1970,7 @@ void TabPrint::build() optgroup->append_single_option_line("support_bottom_z_distance", "support#bottom-z-distance"); optgroup->append_single_option_line("support_base_pattern", "support#base-pattern"); optgroup->append_single_option_line("support_base_pattern_spacing", "support#base-pattern"); - //optgroup->append_single_option_line("support_angle"); + optgroup->append_single_option_line("support_angle"); optgroup->append_single_option_line("support_interface_top_layers", "support#base-pattern"); optgroup->append_single_option_line("support_interface_bottom_layers", "support#base-pattern"); optgroup->append_single_option_line("support_interface_pattern", "support#base-pattern"); From ee6bf4d4de1dcfd0bd4ff8cd94ac6d03beb09eb4 Mon Sep 17 00:00:00 2001 From: MusangKing Date: Wed, 22 Mar 2023 16:46:29 +0800 Subject: [PATCH 133/339] NEW: Allow Top/Bottom_z_distance under variable layer height Allow user to set top/Bottom_z_distance under variable layer height. Fix the bug STUDIO-2454 Change-Id: I026098a4df7cfa01f87a6802e2c787fcfd6df3ee (cherry picked from commit 6e933acec7cde705f176937038ce307bc276cf5f) --- src/libslic3r/SupportMaterial.cpp | 67 ++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/SupportMaterial.cpp b/src/libslic3r/SupportMaterial.cpp index 68cfcf3eb2..71c35f2d6e 100644 --- a/src/libslic3r/SupportMaterial.cpp +++ b/src/libslic3r/SupportMaterial.cpp @@ -614,6 +614,29 @@ void PrintObjectSupportMaterial::generate(PrintObject &object) layers_append(layers_sorted, base_interface_layers); // Sort the layers lexicographically by a raising print_z and a decreasing height. std::sort(layers_sorted.begin(), layers_sorted.end(), [](auto *l1, auto *l2) { return *l1 < *l2; }); + + // BBS: MusangKing - erase mini layer heights (< 0.08mm) arised by top/bottom_z_distance & top_contacts under variable layer height + if (this->synchronize_layers() && !object.slicing_parameters().soluble_interface) { + auto thres = m_support_params.support_layer_height_min - EPSILON; + for (size_t i = 1; i < layers_sorted.size() - 1; ++i) { + auto& lowr = layers_sorted[i - 1]; + auto& curr = layers_sorted[i]; + auto& higr = layers_sorted[i + 1]; + // "Rounding" suspicious top/bottom contacts + if (curr->layer_type == sltTopContact || curr->layer_type == sltBottomContact) { + // Check adjacent-layer print_z diffs + coordf_t height_low = curr->print_z - lowr->print_z; + coordf_t height_high = higr->print_z - curr->print_z; + if (height_low < thres || height_high < thres) { + // Mark to-be-deleted layer as Unknown type + curr->layer_type = sltUnknown; + } + } + } + // Retains the order + layers_sorted.erase(std::remove_if(layers_sorted.begin(), layers_sorted.end(), [](MyLayer* l) {return l->layer_type == sltUnknown; }), layers_sorted.end()); + } + int layer_id = 0; int layer_id_interface = 0; assert(object.support_layers().empty()); @@ -697,6 +720,18 @@ void PrintObjectSupportMaterial::generate(PrintObject &object) } #endif /* SLIC3R_DEBUG */ +#if 0 // #ifdef SLIC3R_DEBUG + // check bounds + std::ofstream out; + out.open("./SVG/ns_support_layers.txt"); + if (out.is_open()) { + out << "### Support Layers ###" << std::endl; + for (auto& i : object.support_layers()) { + out << i->print_z << std::endl; + } + } +#endif /* SLIC3R_DEBUG */ + // Generate the actual toolpaths and save them into each layer. this->generate_toolpaths(object.support_layers(), raft_layers, bottom_contacts, top_contacts, intermediate_layers, interface_layers, base_interface_layers); @@ -1801,7 +1836,7 @@ static inline std::pairlower_layer->print_z; } else { print_z = layer.bottom_z() - slicing_params.gap_support_object; - height = print_config.independent_support_layer_height ? 0. : object_config.layer_height; + height = print_config.independent_support_layer_height ? 0. : layer.lower_layer->height/*object_config.layer_height*/; // BBS: need to consider adaptive layer heights bottom_z = print_z - height; // Ignore this contact area if it's too low. // Don't want to print a layer below the first layer height as it may not stick well. @@ -3065,6 +3100,36 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::raft_and_int assert(top_contacts[i]->height > 0.); #endif /* _DEBUG */ +#if 0 // #ifdef SLIC3R_DEBUG + // check bounds + std::ofstream out; + out.open("./SVG/ns_bounds.txt"); + if (out.is_open()) { + if (!top_contacts.empty()) { + out << "### Top Contacts ###" << std::endl; + for (auto& t : top_contacts) { + out << t->print_z << std::endl; + } + } + if (!bottom_contacts.empty()) { + out << "### Bottome Contacts ###" << std::endl; + for (auto& b : bottom_contacts) { + out << b->print_z << std::endl; + } + } + if (!intermediate_layers.empty()) { + out << "### Intermediate Layers ###" << std::endl; + for (auto& i : intermediate_layers) { + out << i->print_z << std::endl; + } + } + out << "### Slice Layers ###" << std::endl; + for (size_t j = 0; j < object.layers().size(); ++j) { + out << object.layers()[j]->print_z << std::endl; + } + } +#endif /* SLIC3R_DEBUG */ + return intermediate_layers; } From 2a1f8af62e824e6a0d5c49fa3b13483adb0d3cd5 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Thu, 23 Mar 2023 11:00:14 +0800 Subject: [PATCH 134/339] FIX: [STUDIO-2547] import config yes/no to all Change-Id: Ib5812c4af3d9fcbe45fe1d884a8bcf29d2f4f704 --- src/libslic3r/PresetBundle.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index b7b7160040..d875eaad3f 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -650,16 +650,17 @@ PresetsConfigSubstitutions PresetBundle::import_presets(std::vector BOOST_LOG_TRIVIAL(warning) << "Preset type is unknown, not loading: " << name; continue; } + if (overwrite == 0) overwrite = 1; if (auto p = collection->find_preset(name, false)) { if (p->is_default || p->is_system) { BOOST_LOG_TRIVIAL(warning) << "Preset already present and is system preset, not loading: " << name; continue; } overwrite = override_confirm(name); - if (overwrite == 0 || overwrite == 2) { - BOOST_LOG_TRIVIAL(warning) << "Preset already present, not loading: " << name; - continue; - } + } + if (overwrite == 0 || overwrite == 2) { + BOOST_LOG_TRIVIAL(warning) << "Preset already present, not loading: " << name; + continue; } DynamicPrintConfig new_config; From bda92795bba29cd110f92b201cf4c8ef7ee5855f Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Mon, 20 Mar 2023 20:03:48 +0800 Subject: [PATCH 135/339] FIX: [STUDIO-1033] rm webview script handler on webview destory Change-Id: I2e9390dfaad46da9e158a43026ef872aaf88d589 --- src/slic3r/GUI/Widgets/WebView.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/Widgets/WebView.cpp b/src/slic3r/GUI/Widgets/WebView.cpp index ed1c30067a..e1006f0736 100644 --- a/src/slic3r/GUI/Widgets/WebView.cpp +++ b/src/slic3r/GUI/Widgets/WebView.cpp @@ -6,6 +6,8 @@ #include #if wxUSE_WEBVIEW_EDGE #include +#elif defined(__WXMAC__) +#include #endif #include #if defined(__WIN32__) || defined(__WXMAC__) @@ -75,6 +77,16 @@ private: wxString pendingUserAgent; }; +#elif defined __WXOSX__ + +class WebViewWebKit : public wxWebViewWebKit +{ + ~WebViewWebKit() override + { + RemoveScriptMessageHandler("wx"); + } +}; + #endif class FakeWebView : public wxWebView @@ -152,6 +164,8 @@ wxWebView* WebView::CreateWebView(wxWindow * parent, wxString const & url) #ifdef __WIN32__ wxWebView* webView = new WebViewEdge; +#elif defined(__WXOSX__) + wxWebView *webView = new WebViewWebKit; #else auto webView = wxWebView::New(); #endif @@ -184,9 +198,6 @@ wxWebView* WebView::CreateWebView(wxWindow * parent, wxString const & url) #endif BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": begin to add script message handler for wx."; Slic3r::GUI::wxGetApp().set_adding_script_handler(true); - webView->Bind(wxEVT_DESTROY, [webView] (auto & e) { - webView->RemoveScriptMessageHandler("wx"); - }); if (!webView->AddScriptMessageHandler("wx")) wxLogError("Could not add script message handler"); Slic3r::GUI::wxGetApp().set_adding_script_handler(false); From 9558ed242c1f9dbcda9edb099bb2a98ed492892d Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Mon, 20 Mar 2023 13:49:43 +0800 Subject: [PATCH 136/339] FIX: backup switch take effect Change-Id: Ie9740d7f985ae6adc2778eaac0a80cf7a94c98c4 --- src/libslic3r/AppConfig.cpp | 2 +- src/libslic3r/Format/bbs_3mf.cpp | 5 ++++- src/slic3r/GUI/MainFrame.cpp | 12 ++++++++---- src/slic3r/GUI/Preferences.cpp | 9 +++++++++ 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index 6b1478e59a..4a00ce46df 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -286,7 +286,7 @@ void AppConfig::set_defaults() } if (get("backup_switch").empty()) { - set_bool("backup_switch", false); + set_bool("backup_switch", true); } if (get("backup_interval").empty()) { diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 77d40d7667..d6d9110652 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -7397,7 +7397,10 @@ public: while (true) { while (m_tasks.empty()) { - m_cond.timed_wait(lock, m_next_backup); + if (m_interval > 0) + m_cond.timed_wait(lock, m_next_backup); + else + m_cond.wait(lock); if (m_interval > 0 && boost::get_system_time() > m_next_backup) { m_tasks.push_back({ Backup, 0, std::string(), nullptr, ++m_task_seq }); m_next_backup += boost::posix_time::seconds(m_interval); diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 0550f8ac4c..fe490c1053 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -488,10 +488,14 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ update_slice_print_status(eEventSliceUpdate, true, true); // BBS: backup project - std::string backup_interval; - if (!wxGetApp().app_config->get("", "backup_interval", backup_interval)) - backup_interval = "10"; - Slic3r::set_backup_interval(boost::lexical_cast(backup_interval)); + if (wxGetApp().app_config->get("backup_switch") == "true") { + std::string backup_interval; + if (!wxGetApp().app_config->get("", "backup_interval", backup_interval)) + backup_interval = "10"; + Slic3r::set_backup_interval(boost::lexical_cast(backup_interval)); + } else { + Slic3r::set_backup_interval(0); + } Slic3r::set_backup_callback([this](int action) { if (action == 0) { wxPostEvent(this, wxCommandEvent(EVT_BACKUP_POST)); diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 65d0a30f54..2901ca9ec7 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -415,6 +415,9 @@ wxBoxSizer *PreferencesDialog::create_item_backup_input(wxString title, wxWindow m_backup_interval_time = input->GetTextCtrl()->GetValue(); app_config->set("backup_interval", std::string(m_backup_interval_time.mb_str())); app_config->save(); + long backup_interval = 0; + m_backup_interval_time.ToLong(&backup_interval); + Slic3r::set_backup_interval(backup_interval); e.Skip(); }); @@ -422,6 +425,9 @@ wxBoxSizer *PreferencesDialog::create_item_backup_input(wxString title, wxWindow m_backup_interval_time = input->GetTextCtrl()->GetValue(); app_config->set("backup_interval", std::string(m_backup_interval_time.mb_str())); app_config->save(); + long backup_interval = 0; + m_backup_interval_time.ToLong(&backup_interval); + Slic3r::set_backup_interval(backup_interval); e.Skip(); }); @@ -553,6 +559,9 @@ wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxWindow *pa // backup if (param == "backup_switch") { bool pbool = app_config->get("backup_switch") == "true" ? true : false; + std::string backup_interval = "10"; + app_config->get("backup_interval", backup_interval); + Slic3r::set_backup_interval(pbool ? boost::lexical_cast(backup_interval) : 0); if (m_backup_interval_textinput != nullptr) { m_backup_interval_textinput->Enable(pbool); } } From b746877d702f7ff4aa4a1c85bd51be586307f1a6 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Fri, 24 Mar 2023 10:50:11 +0800 Subject: [PATCH 137/339] FIX: modify the shader load error for mac Change-Id: I3e2b282b145b4d87e09c22d4fec1b88537212d60 --- resources/shaders/gouraud_light_uniform.fs | 14 ------ resources/shaders/gouraud_light_uniform.vs | 45 -------------------- src/slic3r/GUI/GLShadersManager.cpp | 3 -- src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp | 20 +++++---- src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.hpp | 2 +- 5 files changed, 13 insertions(+), 71 deletions(-) delete mode 100644 resources/shaders/gouraud_light_uniform.fs delete mode 100644 resources/shaders/gouraud_light_uniform.vs diff --git a/resources/shaders/gouraud_light_uniform.fs b/resources/shaders/gouraud_light_uniform.fs deleted file mode 100644 index 342642bcba..0000000000 --- a/resources/shaders/gouraud_light_uniform.fs +++ /dev/null @@ -1,14 +0,0 @@ -#version 140 - -uniform vec4 uniform_color; -uniform float emission_factor; - -// x = tainted, y = specular; -in vec2 intensity; - -out vec4 out_color; - -void main() -{ - out_color = uniform_color; -} diff --git a/resources/shaders/gouraud_light_uniform.vs b/resources/shaders/gouraud_light_uniform.vs deleted file mode 100644 index fad848f8bd..0000000000 --- a/resources/shaders/gouraud_light_uniform.vs +++ /dev/null @@ -1,45 +0,0 @@ -#version 140 - -#define INTENSITY_CORRECTION 0.6 - -// normalized values for (-0.6/1.31, 0.6/1.31, 1./1.31) -const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); -#define LIGHT_TOP_DIFFUSE (0.8 * INTENSITY_CORRECTION) -#define LIGHT_TOP_SPECULAR (0.125 * INTENSITY_CORRECTION) -#define LIGHT_TOP_SHININESS 20.0 - -// normalized values for (1./1.43, 0.2/1.43, 1./1.43) -const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074); -#define LIGHT_FRONT_DIFFUSE (0.3 * INTENSITY_CORRECTION) - -#define INTENSITY_AMBIENT 0.3 - -uniform mat4 view_model_matrix; -uniform mat4 projection_matrix; -uniform mat3 view_normal_matrix; - -in vec3 v_position; -in vec3 v_normal; - -// x = tainted, y = specular; -out vec2 intensity; - -void main() -{ - // First transform the normal into camera space and normalize the result. - vec3 normal = normalize(view_normal_matrix * v_normal); - - // Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex. - // Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range. - float NdotL = max(dot(normal, LIGHT_TOP_DIR), 0.0); - - intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; - vec4 position = view_model_matrix * vec4(v_position, 1.0); - intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(position.xyz), reflect(-LIGHT_TOP_DIR, normal)), 0.0), LIGHT_TOP_SHININESS); - - // Perform the same lighting calculation for the 2nd light source (no specular applied). - NdotL = max(dot(normal, LIGHT_FRONT_DIR), 0.0); - intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; - - gl_Position = projection_matrix * position; -} diff --git a/src/slic3r/GUI/GLShadersManager.cpp b/src/slic3r/GUI/GLShadersManager.cpp index 5f8ee9bc9f..c7d1c2647b 100644 --- a/src/slic3r/GUI/GLShadersManager.cpp +++ b/src/slic3r/GUI/GLShadersManager.cpp @@ -45,9 +45,6 @@ std::pair GLShadersManager::init() // used to render extrusion and travel paths as lines in gcode preview valid &= append_shader("toolpaths_lines", { "toolpaths_lines.vs", "toolpaths_lines.fs" }); - // used to render cut connectors - valid &= append_shader("gouraud_light_uniform", {"gouraud_light_uniform.vs", "gouraud_light_uniform.fs"}); - // used to render objects in 3d editor //if (GUI::wxGetApp().is_gl_version_greater_or_equal_to(3, 0)) { if (0) { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp index 295d81a851..8b4ab03b90 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp @@ -558,11 +558,11 @@ void GLGizmoAdvancedCut::on_render_for_picking() Transform3d scale_tf = Transform3d::Identity(); scale_tf.scale(Vec3f(connector.radius, connector.radius, height).cast()); - const Transform3d view_model_matrix = camera.get_view_matrix() * translate_tf * m_rotate_matrix * scale_tf; + const Transform3d view_model_matrix = translate_tf * m_rotate_matrix * scale_tf; std::array color = picking_color_component(i+1); - render_connector_model(m_shapes[connectors[i].attribs], color, view_model_matrix); + render_connector_model(m_shapes[connectors[i].attribs], color, view_model_matrix, true); } } @@ -1004,9 +1004,8 @@ void GLGizmoAdvancedCut::render_connectors() Transform3d scale_tf = Transform3d::Identity(); scale_tf.scale(Vec3f(connector.radius, connector.radius, height).cast()); - const Transform3d view_model_matrix = camera.get_view_matrix() * translate_tf * m_rotate_matrix * scale_tf; + const Transform3d view_model_matrix = translate_tf * m_rotate_matrix * scale_tf; - //render_color = {1.f, 0.f, 0.f, 1.f}; render_connector_model(m_shapes[connector.attribs], render_color, view_model_matrix); } } @@ -1032,20 +1031,25 @@ void GLGizmoAdvancedCut::render_cut_line() glDisable(GL_LINE_STIPPLE); } -void GLGizmoAdvancedCut::render_connector_model(GLModel &model, const std::array& color, Transform3d view_model_matrix) +void GLGizmoAdvancedCut::render_connector_model(GLModel &model, const std::array &color, Transform3d view_model_matrix, bool for_picking) { - GLShaderProgram *shader = wxGetApp().get_shader("gouraud_light_uniform"); + glPushMatrix(); + GLShaderProgram *shader = nullptr; + if (for_picking) + shader = wxGetApp().get_shader("cali"); + else + shader = wxGetApp().get_shader("gouraud_light"); if (shader) { shader->start_using(); - shader->set_uniform("view_model_matrix", view_model_matrix); - shader->set_uniform("projection_matrix", wxGetApp().plater()->get_camera().get_projection_matrix()); + glsafe(::glMultMatrixd(view_model_matrix.data())); model.set_color(-1, color); model.render(); shader->stop_using(); } + glPopMatrix(); } void GLGizmoAdvancedCut::clear_selection() diff --git a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.hpp b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.hpp index a2ea836e0e..c27492df1c 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.hpp @@ -200,7 +200,7 @@ private: void render_connectors(); void render_clipper_cut(); void render_cut_line(); - void render_connector_model(GLModel &model, const std::array& color, Transform3d view_model_matrix); + void render_connector_model(GLModel &model, const std::array& color, Transform3d view_model_matrix, bool for_picking = false); void clear_selection(); void init_connector_shapes(); From 907741e7e4a7031b2f225873edde53d6c527d3e8 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Mon, 20 Mar 2023 14:40:57 +0800 Subject: [PATCH 138/339] FIX: AboutDialog layout Change-Id: I693f489ba92f3d4ac60abb4344063b88fb201c29 --- src/slic3r/GUI/AboutDialog.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp index eee47e6de1..6123b79741 100644 --- a/src/slic3r/GUI/AboutDialog.cpp +++ b/src/slic3r/GUI/AboutDialog.cpp @@ -270,7 +270,7 @@ AboutDialog::AboutDialog() wxBoxSizer *text_sizer_horiz = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer *text_sizer = new wxBoxSizer(wxVERTICAL); - text_sizer_horiz->Add( 0, 0, 0, wxLEFT, FromDIP(23)); + text_sizer_horiz->Add( 0, 0, 0, wxLEFT, FromDIP(20)); std::vector text_list; text_list.push_back(_L("Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by Merill(supermerill).")); @@ -317,8 +317,7 @@ AboutDialog::AboutDialog() wxBoxSizer *copyright_ver_sizer = new wxBoxSizer(wxVERTICAL); wxBoxSizer *copyright_hor_sizer = new wxBoxSizer(wxHORIZONTAL); - copyright_hor_sizer->Add(copyright_ver_sizer, 0, wxALL,5); - copyright_hor_sizer->Add( 0, 0, 0, wxLEFT, FromDIP(120)); + copyright_hor_sizer->Add(copyright_ver_sizer, 0, wxLEFT, FromDIP(20)); wxStaticText *html_text = new wxStaticText(this, wxID_ANY, "Copyright(C) 2021-2023 Lunkuo All Rights Reserved", wxDefaultPosition, wxDefaultSize); html_text->SetForegroundColour(wxColour(107, 107, 107)); @@ -363,10 +362,10 @@ AboutDialog::AboutDialog() copyright_button_ver->Add( 0, 0, 0, wxTOP, FromDIP(10)); copyright_button_ver->Add(button_portions, 0, wxALL,0); - copyright_hor_sizer->Add(copyright_button_ver, 0, wxALL,0); - copyright_hor_sizer->Add( 0, 0, 0, wxRIGHT, FromDIP(13)); + copyright_hor_sizer->AddStretchSpacer(); + copyright_hor_sizer->Add(copyright_button_ver, 0, wxRIGHT, FromDIP(20)); - ver_sizer->Add(copyright_hor_sizer, 0, wxALIGN_CENTER_HORIZONTAL|wxALL,0); + ver_sizer->Add(copyright_hor_sizer, 0, wxEXPAND ,0); ver_sizer->Add( 0, 0, 0, wxTOP, FromDIP(30)); button_portions->Bind(wxEVT_BUTTON, &AboutDialog::onCopyrightBtn, this); From ffc4e7080cccf0bbfdf6410a3ee2c4e39b011476 Mon Sep 17 00:00:00 2001 From: tao wang Date: Fri, 24 Mar 2023 17:58:11 +0800 Subject: [PATCH 139/339] FIX:fixed translation does not take effect Change-Id: I83e2f2d53cdb4ded7cfa4176146b29920d21dcc8 --- src/slic3r/GUI/MediaFilePanel.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/MediaFilePanel.cpp b/src/slic3r/GUI/MediaFilePanel.cpp index ad6d945b23..77174ea83e 100644 --- a/src/slic3r/GUI/MediaFilePanel.cpp +++ b/src/slic3r/GUI/MediaFilePanel.cpp @@ -31,9 +31,9 @@ MediaFilePanel::MediaFilePanel(wxWindow * parent) m_button_year = new ::Button(m_time_panel, _L("Year"), "", wxBORDER_NONE); m_button_month = new ::Button(m_time_panel, _L("Month"), "", wxBORDER_NONE); m_button_all = new ::Button(m_time_panel, _L("All Files"), "", wxBORDER_NONE); - m_button_year->SetToolTip(L("Group files by year, recent first.")); - m_button_month->SetToolTip(L("Group files by month, recent first.")); - m_button_all->SetToolTip(L("Show all files, recent first.")); + m_button_year->SetToolTip(_L("Group files by year, recent first.")); + m_button_month->SetToolTip(_L("Group files by month, recent first.")); + m_button_all->SetToolTip(_L("Show all files, recent first.")); m_button_all->SetFont(Label::Head_14); // sync with m_last_mode for (auto b : {m_button_year, m_button_month, m_button_all}) { b->SetBackgroundColor(StateColor()); From 9b47255bc12efa58f7147caaff8c0cce72fbf1ce Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Fri, 24 Feb 2023 12:19:18 +0800 Subject: [PATCH 140/339] ENH:adjust assembly view toolbar UI (STUDIO-1213) https://jira.bambooolab.com/browse/STUDIO-1213 Change-Id: I3b17b37a229348d347f56d0672f2c258fbeb91e1 --- src/imgui/imgui_draw.cpp | 6 +- src/imgui/imgui_internal.h | 2 +- src/slic3r/GUI/GLCanvas3D.cpp | 107 ++++++++++++++++++++++---------- src/slic3r/GUI/ImGuiWrapper.cpp | 19 +++++- src/slic3r/GUI/ImGuiWrapper.hpp | 2 + 5 files changed, 98 insertions(+), 38 deletions(-) diff --git a/src/imgui/imgui_draw.cpp b/src/imgui/imgui_draw.cpp index 8dac5adbc4..913a551fa0 100644 --- a/src/imgui/imgui_draw.cpp +++ b/src/imgui/imgui_draw.cpp @@ -3815,7 +3815,7 @@ void ImGui::RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir d draw_list->AddTriangleFilled(center + a, center + b, center + c, col); } -void ImGui::BBLRenderArrow(ImDrawList *draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale) +void ImGui::BBLRenderArrow(ImDrawList *draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float thickness, float scale) { const float h = draw_list->_Data->FontSize * 1.00f; float r = h * 0.40f * scale; @@ -3841,8 +3841,8 @@ void ImGui::BBLRenderArrow(ImDrawList *draw_list, ImVec2 pos, ImU32 col, ImGuiDi case ImGuiDir_COUNT: IM_ASSERT(0); break; } //draw_list->AddTriangleFilled(center + a, center + b, center + c, col); - draw_list->AddLine(center + a, center + c,col); - draw_list->AddLine(center + a, center + b,col); + draw_list->AddLine(center + a, center + c, col, thickness); + draw_list->AddLine(center + a, center + b, col, thickness); } void ImGui::RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col) diff --git a/src/imgui/imgui_internal.h b/src/imgui/imgui_internal.h index a10b0ac0f0..70be29caa0 100644 --- a/src/imgui/imgui_internal.h +++ b/src/imgui/imgui_internal.h @@ -2528,7 +2528,7 @@ namespace ImGui // Render helpers (those functions don't access any ImGui state!) IMGUI_API void RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale = 1.0f); - IMGUI_API void BBLRenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale = 1.0f); + IMGUI_API void BBLRenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float thickness = 1.0f, float scale = 1.0f); IMGUI_API void RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col); IMGUI_API void RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz); IMGUI_API void RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow); diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index a71345e306..90c41cb8ff 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -68,6 +68,9 @@ #include #include +#ifndef IMGUI_DEFINE_MATH_OPERATORS +#define IMGUI_DEFINE_MATH_OPERATORS +#endif #include static constexpr const float TRACKBALLSIZE = 0.8f; @@ -7648,11 +7651,12 @@ void GLCanvas3D::_render_paint_toolbar() const #if ENABLE_RETINA_GL float f_scale = m_retina_helper->get_scale_factor(); #else - float f_scale = 1.0; + float f_scale = 1.0f; #endif + int em_unit = wxGetApp().em_unit() / 10; + std::vector colors = wxGetApp().plater()->get_extruder_colors_from_plater_config(); int extruder_num = colors.size(); - std::vector filament_text_first_line; std::vector filament_text_second_line; { @@ -7677,65 +7681,108 @@ void GLCanvas3D::_render_paint_toolbar() const } ImGuiWrapper& imgui = *wxGetApp().imgui(); - float canvas_w = float(get_canvas_size().get_width()); - int item_spacing = 8 * wxGetApp().toolbar_icon_scale() * f_scale; - float button_size = GLToolbar::Default_Icons_Size * f_scale * wxGetApp().toolbar_icon_scale() + item_spacing; + const float canvas_w = float(get_canvas_size().get_width()); + const ImVec2 button_size = ImVec2(64.0f, 48.0f) * f_scale * em_unit; + const float spacing = 4.0f * em_unit * f_scale; + const float return_button_margin = 130.0f * em_unit * f_scale; + + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(spacing, spacing)); + ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0); + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(spacing, 0)); + ImGui::PushStyleColor(ImGuiCol_WindowBg, { 0.f, 0.f, 0.f, 0.4f }); imgui.set_next_window_pos(0.5f * canvas_w, 0, ImGuiCond_Always, 0.5f, 0.0f); - imgui.begin(_L("Paint Toolbar"), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar); + float constraint_window_width = canvas_w - 2 * return_button_margin; + ImGui::SetNextWindowSizeConstraints({ 0, 0 }, { constraint_window_width, FLT_MAX }); + imgui.begin(_L("Paint Toolbar"), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse); + + const float cursor_y = ImGui::GetCursorPosY(); + const ImVec2 arrow_button_size = ImVec2(0.375f * button_size.x, ImGui::GetWindowHeight()); + const ImRect left_arrow_button = ImRect(ImGui::GetCurrentWindow()->Pos, ImGui::GetCurrentWindow()->Pos + arrow_button_size); + const ImRect right_arrow_button = ImRect(ImGui::GetCurrentWindow()->Pos + ImGui::GetWindowSize() - arrow_button_size, ImGui::GetCurrentWindow()->Pos + ImGui::GetWindowSize()); + ImU32 left_arrow_button_color = IM_COL32(0, 0, 0, 0.4f * 255); + ImU32 right_arrow_button_color = IM_COL32(0, 0, 0, 0.4f * 255); + ImU32 arrow_color = IM_COL32(255, 255, 255, 255); + ImDrawList* draw_list = ImGui::GetWindowDrawList(); + ImGuiContext& context = *GImGui; bool disabled = !wxGetApp().plater()->can_fillcolor(); unsigned char rgb[3]; - float cursor_y = ImGui::GetCursorPosY(); for (int i = 0; i < extruder_num; i++) { if (i > 0) - ImGui::SameLine(0.0f, item_spacing); + ImGui::SameLine(); Slic3r::GUI::BitmapCache::parse_color(colors[i], rgb); ImGui::PushStyleColor(ImGuiCol_Button, ImColor(rgb[0], rgb[1], rgb[2]).Value); ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImColor(rgb[0], rgb[1], rgb[2]).Value); ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImColor(rgb[0], rgb[1], rgb[2]).Value); if (disabled) ImGui::PushItemFlag(ImGuiItemFlags_Disabled, true); - if (ImGui::Button(("##filament_button" + std::to_string(i)).c_str(), ImVec2(button_size, button_size))) { - wxPostEvent(m_canvas, IntEvent(EVT_GLTOOLBAR_FILLCOLOR, i + 1)); + if (ImGui::Button(("##filament_button" + std::to_string(i)).c_str(), button_size)) { + if (!ImGui::IsMouseHoveringRect(left_arrow_button.Min, left_arrow_button.Max) && !ImGui::IsMouseHoveringRect(right_arrow_button.Min, right_arrow_button.Max)) + wxPostEvent(m_canvas, IntEvent(EVT_GLTOOLBAR_FILLCOLOR, i + 1)); } if (ImGui::IsItemHovered()) { - ImGui::BeginTooltip(); - ImGui::PushTextWrapPos(ImGui::GetFontSize() * 20.0f); - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.00f, 1.00f, 1.00f, 1.00f)); - ImGui::TextUnformatted((boost::format(_u8L("Shortcut key %1%")) % (i + 1)).str().c_str()); - ImGui::PopStyleColor(1); - ImGui::PopTextWrapPos(); - ImGui::EndTooltip(); + if (!ImGui::IsMouseHoveringRect(left_arrow_button.Min, left_arrow_button.Max) && !ImGui::IsMouseHoveringRect(right_arrow_button.Min, right_arrow_button.Max)) { + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, { 20.0f * f_scale, 10.0f * f_scale }); + ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 3.0f * f_scale); + imgui.tooltip(_L("Shortcut Key ") + std::to_string(i + 1), ImGui::GetFontSize() * 20.0f); + ImGui::PopStyleVar(2); + } } ImGui::PopStyleColor(3); if (disabled) ImGui::PopItemFlag(); } - float text_offset_y = 3.0f * f_scale; + const float text_offset_y = 4.0f * em_unit * f_scale; for (int i = 0; i < extruder_num; i++){ Slic3r::GUI::BitmapCache::parse_color(colors[i], rgb); float gray = 0.299 * rgb[0] + 0.587 * rgb[1] + 0.114 * rgb[2]; - ImVec4 text_color = gray < 80 ? ImVec4(255, 255, 255, 255) : ImVec4(0, 0, 0, 255); - + ImVec4 text_color = gray < 80 ? ImVec4(1.0f, 1.0f, 1.0f, 1.0f) : ImVec4(0, 0, 0, 1.0f); + + imgui.push_bold_font(); ImVec2 number_label_size = ImGui::CalcTextSize(std::to_string(i + 1).c_str()); ImGui::SetCursorPosY(cursor_y + text_offset_y); - ImGui::SetCursorPosX(item_spacing + i * (item_spacing + button_size) + (button_size - number_label_size.x) / 2); + ImGui::SetCursorPosX(spacing + i * (spacing + button_size.x) + (button_size.x - number_label_size.x) / 2); ImGui::TextColored(text_color, std::to_string(i + 1).c_str()); + imgui.pop_bold_font(); ImVec2 filament_first_line_label_size = ImGui::CalcTextSize(filament_text_first_line[i].c_str()); ImGui::SetCursorPosY(cursor_y + text_offset_y + number_label_size.y); - ImGui::SetCursorPosX(item_spacing + i * (item_spacing + button_size) + (button_size - filament_first_line_label_size.x) / 2); + ImGui::SetCursorPosX(spacing + i * (spacing + button_size.x) + (button_size.x - filament_first_line_label_size.x) / 2); ImGui::TextColored(text_color, filament_text_first_line[i].c_str()); ImVec2 filament_second_line_label_size = ImGui::CalcTextSize(filament_text_second_line[i].c_str()); ImGui::SetCursorPosY(cursor_y + text_offset_y + number_label_size.y + filament_first_line_label_size.y); - ImGui::SetCursorPosX(item_spacing + i * (item_spacing + button_size) + (button_size - filament_second_line_label_size.x) / 2); + ImGui::SetCursorPosX(spacing + i * (spacing + button_size.x) + (button_size.x - filament_second_line_label_size.x) / 2); ImGui::TextColored(text_color, filament_text_second_line[i].c_str()); } + if (ImGui::GetWindowWidth() == constraint_window_width) { + if (ImGui::IsMouseHoveringRect(left_arrow_button.Min, left_arrow_button.Max)) { + left_arrow_button_color = IM_COL32(0, 0, 0, 0.64f * 255); + if (context.IO.MouseClicked[ImGuiMouseButton_Left]) { + ImGui::SetScrollX(ImGui::GetScrollX() - button_size.x); + imgui.set_requires_extra_frame(); + } + } + draw_list->AddRectFilled(left_arrow_button.Min, left_arrow_button.Max, left_arrow_button_color); + ImGui::BBLRenderArrow(draw_list, left_arrow_button.GetCenter() - ImVec2(draw_list->_Data->FontSize, draw_list->_Data->FontSize) * 0.5f, arrow_color, ImGuiDir_Left, 2.0f); + + if (ImGui::IsMouseHoveringRect(right_arrow_button.Min, right_arrow_button.Max)) { + right_arrow_button_color = IM_COL32(0, 0, 0, 0.64f * 255); + if (context.IO.MouseClicked[ImGuiMouseButton_Left]) { + ImGui::SetScrollX(ImGui::GetScrollX() + button_size.x); + imgui.set_requires_extra_frame(); + } + } + draw_list->AddRectFilled(right_arrow_button.Min, right_arrow_button.Max, right_arrow_button_color); + ImGui::BBLRenderArrow(draw_list, right_arrow_button.GetCenter() - ImVec2(draw_list->_Data->FontSize, draw_list->_Data->FontSize) * 0.5f, arrow_color, ImGuiDir_Right, 2.0f); + } + imgui.end(); + ImGui::PopStyleVar(3); + ImGui::PopStyleColor(); } //BBS @@ -7761,7 +7808,7 @@ void GLCanvas3D::_render_assemble_control() const const float item_spacing = imgui->get_item_spacing().x; ImVec2 window_padding = ImGui::GetStyle().WindowPadding; - imgui->set_next_window_pos(canvas_w / 2, canvas_h - 13.0f * get_scale(), ImGuiCond_Always, 0.5f, 1.0f); + imgui->set_next_window_pos(canvas_w / 2, canvas_h - 10.0f * get_scale(), ImGuiCond_Always, 0.5f, 1.0f); imgui->begin(_L("Assemble Control"), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar); ImGui::AlignTextToFramePadding(); @@ -7830,24 +7877,18 @@ void GLCanvas3D::_render_assemble_info() const ImGuiWrapper* imgui = wxGetApp().imgui(); auto canvas_w = float(get_canvas_size().get_width()); auto canvas_h = float(get_canvas_size().get_height()); - float window_height = 130.0f; float space_size = imgui->get_style_scaling() * 8.0f; float caption_max = imgui->calc_text_size(_L("Total Volume:")).x + 3 * space_size; char buf[3][64]; - float merged_max = 0.0; - for (int i = 0; i < 3; i++) { - ImGui::DataTypeFormatString(buf[i], IM_ARRAYSIZE(buf[i]), ImGuiDataType_Double, (void *) &volumes_bounding_box().size()(i), "%.2f"); - merged_max += ImGui::CalcTextSize(buf[i]).x; - if (i < 2) merged_max += ImGui::CalcTextSize(" x ").x; - } - float window_width = merged_max + caption_max + ImGui::GetFrameHeight(); + ImGuiIO& io = ImGui::GetIO(); ImFont* font = io.Fonts->Fonts[0]; float origScale = font->Scale; font->Scale = 1.2; ImGui::PushFont(font); ImGui::PopFont(); - imgui->set_next_window_pos(canvas_w - window_width, 0.0f, ImGuiCond_Always, 0, 0); + float margin = 10.0f * get_scale(); + imgui->set_next_window_pos(canvas_w - margin, canvas_h - margin, ImGuiCond_Always, 1.0f, 1.0f); ImGuiWrapper::push_toolbar_style(get_scale()); imgui->begin(_L("Assembly Info"), ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoCollapse); font->Scale = origScale; diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index a14b36c7b6..871ab2bb96 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -1669,7 +1669,24 @@ void ImGuiWrapper::bold_text(const std::string& str) text(str); } } - +bool ImGuiWrapper::push_bold_font() { + if (bold_font) { + ImGui::PushFont(bold_font); + return true; + } + else { + return false; + } +} +bool ImGuiWrapper::pop_bold_font() { + if (bold_font) { + ImGui::PopFont(); + return true; + } + else { + return false; + } +} bool ImGuiWrapper::push_font_by_name(std::string font_name) { auto sys_font = im_fonts_map.find(font_name); diff --git a/src/slic3r/GUI/ImGuiWrapper.hpp b/src/slic3r/GUI/ImGuiWrapper.hpp index ebc8a69bf2..acd72dab22 100644 --- a/src/slic3r/GUI/ImGuiWrapper.hpp +++ b/src/slic3r/GUI/ImGuiWrapper.hpp @@ -160,6 +160,8 @@ public: // set font const std::vector get_fonts_names() const { return m_fonts_names; } + bool push_bold_font(); + bool pop_bold_font(); bool push_font_by_name(std::string font_name); bool pop_font_by_name(std::string font_name); void load_fonts_texture(); From e002885efc03b86547c4e983283966a8244ac669 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Fri, 24 Mar 2023 17:57:27 +0800 Subject: [PATCH 141/339] FIX: modify the style and layout for cut Change-Id: Id9f84fc58385ae408a4c28c0d4eb63e48335039e --- src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp | 80 +++++++++++++------- src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.hpp | 1 + 2 files changed, 54 insertions(+), 27 deletions(-) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp index 8b4ab03b90..dbc8281bf6 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp @@ -499,9 +499,12 @@ void GLGizmoAdvancedCut::on_render() update_clipper(); if (m_connectors_editing) { render_connectors(); - render_clipper_cut(); } - else if(!m_connectors_editing) { + + // render_clipper_cut for get the cut plane result + render_clipper_cut(); + + if(!m_connectors_editing) { check_conflict_for_all_connectors(); render_cut_plane_and_grabbers(); } @@ -1012,7 +1015,9 @@ void GLGizmoAdvancedCut::render_connectors() void GLGizmoAdvancedCut::render_clipper_cut() { + glsafe(::glEnable(GL_DEPTH_TEST)); m_c->object_clipper()->render_cut(); + glsafe(::glDisable(GL_DEPTH_TEST)); } void GLGizmoAdvancedCut::render_cut_line() @@ -1401,8 +1406,11 @@ void GLGizmoAdvancedCut::render_cut_plane_input_window(float x, float y, float b ImGui::PopStyleVar(1); m_imgui->disabled_end(); + CutConnectors &connectors = m_c->selection_info()->model_object()->cut_connectors; + const bool has_connectors = !connectors.empty(); + m_imgui->disabled_begin(!m_keep_upper || !m_keep_lower || m_cut_to_parts); - if (m_imgui->button(_L("Add/Edit connectors"))) set_connectors_editing(true); + if (m_imgui->button(has_connectors ? _L("Edit connectors") : _L("Add connectors"))) set_connectors_editing(true); m_imgui->disabled_end(); ImGui::Separator(); @@ -1414,8 +1422,6 @@ void GLGizmoAdvancedCut::render_cut_plane_input_window(float x, float y, float b label_width = width; } - CutConnectors &connectors = m_c->selection_info()->model_object()->cut_connectors; - const bool has_connectors = !connectors.empty(); auto render_part_action_line = [this, label_width, &connectors](const wxString &label, const wxString &suffix, bool &keep_part, bool &place_on_cut_part, bool &rotate_part) { bool keep = true; ImGui::AlignTextToFramePadding(); @@ -1476,9 +1482,19 @@ void GLGizmoAdvancedCut::init_connectors_input_window_data() { CutConnectors &connectors = m_c->selection_info()->model_object()->cut_connectors; - m_label_width = m_imgui->get_font_size() * 6.f; + float connectors_cap = m_imgui->calc_text_size(_L("Connectors")).x; + float type_cap = m_imgui->calc_text_size(_L("Type")).x; + float style_cap = m_imgui->calc_text_size(_L("Style")).x; + float shape_cap = m_imgui->calc_text_size(_L("Shape")).x; + float depth_ratio_cap = m_imgui->calc_text_size(_L("Depth ratio")).x; + float size_cap = m_imgui->calc_text_size(_L("Size")).x; + float max_lable_size = std::max(std::max(std::max(connectors_cap, type_cap), std::max(style_cap, shape_cap)), std::max(depth_ratio_cap, size_cap)); + + m_label_width = double(max_lable_size + 3 + ImGui::GetStyle().WindowPadding.x); m_control_width = m_imgui->get_font_size() * 9.f; + m_editing_window_width = 1.45 * m_control_width + 11; + if (m_connectors_editing && m_selected_count > 0) { float depth_ratio {UndefFloat}; float depth_ratio_tolerance {UndefFloat}; @@ -1605,7 +1621,7 @@ void GLGizmoAdvancedCut::render_connectors_input_window(float x, float y, float set_connectors_editing(false); } - ImGui::SameLine(2.75f * m_label_width); + ImGui::SameLine(m_label_width + m_editing_window_width - m_imgui->calc_text_size(_L("Cancel")).x - m_imgui->get_style_scaling() * 8); if (m_imgui->button(_L("Cancel"))) { reset_connectors(); @@ -1684,16 +1700,15 @@ bool GLGizmoAdvancedCut::render_combo(const std::string &label, const std::vecto ImGui::AlignTextToFramePadding(); m_imgui->text(label); ImGui::SameLine(m_label_width); - ImGui::PushItemWidth(m_control_width); + ImGui::PushItemWidth(m_editing_window_width); size_t selection_out = selection_idx; - // It is necessary to use BeginGroup(). Otherwise, when using SameLine() is called, then other items will be drawn inside the combobox. - ImGui::BeginGroup(); - ImVec2 combo_pos = ImGui::GetCursorScreenPos(); - if (ImGui::BeginCombo(("##" + label).c_str(), "")) { + + if (ImGui::BBLBeginCombo(("##" + label).c_str(), lines[selection_idx].c_str(), 0)) { for (size_t line_idx = 0; line_idx < lines.size(); ++line_idx) { ImGui::PushID(int(line_idx)); - if (ImGui::Selectable("", line_idx == selection_idx)) selection_out = line_idx; + if (ImGui::Selectable("", line_idx == selection_idx)) + selection_out = line_idx; ImGui::SameLine(); ImGui::Text("%s", lines[line_idx].c_str()); @@ -1703,15 +1718,6 @@ bool GLGizmoAdvancedCut::render_combo(const std::string &label, const std::vecto ImGui::EndCombo(); } - ImVec2 backup_pos = ImGui::GetCursorScreenPos(); - ImGuiStyle &style = ImGui::GetStyle(); - - ImGui::SetCursorScreenPos(ImVec2(combo_pos.x + style.FramePadding.x, combo_pos.y + style.FramePadding.y)); - std::string str_line = selection_out < lines.size() ? lines[selection_out] : " "; - ImGui::Text("%s", str_line.c_str()); - ImGui::SetCursorScreenPos(backup_pos); - ImGui::EndGroup(); - bool is_changed = selection_idx != selection_out; selection_idx = selection_out; @@ -1722,10 +1728,18 @@ bool GLGizmoAdvancedCut::render_combo(const std::string &label, const std::vecto bool GLGizmoAdvancedCut::render_slider_double_input(const std::string &label, float &value_in, float &tolerance_in) { + double slider_with = 0.24 * m_editing_window_width; // m_control_width * 0.35; + double item_in_gap = 0.01 * m_editing_window_width; + double item_out_gap = 0.02 * m_editing_window_width; + double first_input_width = 0.33 * m_editing_window_width; + double second_input_width = 0.15 * m_editing_window_width; + ImGui::AlignTextToFramePadding(); m_imgui->text(label); ImGui::SameLine(m_label_width); - ImGui::PushItemWidth(m_control_width * 0.85f); + ImGui::PushItemWidth(slider_with); + + double left_width = m_label_width + slider_with + item_in_gap; bool m_imperial_units = false; @@ -1744,17 +1758,29 @@ bool GLGizmoAdvancedCut::render_slider_double_input(const std::string &label, fl } std::string format = value_in < 0.f ? " " : m_imperial_units ? "%.4f " + _u8L("in") : "%.2f " + _u8L("mm"); - m_imgui->slider_float(("##" + label).c_str(), &value, min_size, mean_size, format.c_str()); + m_imgui->bbl_slider_float_style(("##" + label).c_str(), &value, min_size, mean_size, format.c_str()); + + ImGui::SameLine(left_width); + ImGui::PushItemWidth(first_input_width); + ImGui::BBLDragFloat(("##input_" + label).c_str(), &value, 0.05f, min_size, mean_size, format.c_str()); + value_in = value * float(m_imperial_units ? units_in_to_mm : 1.0); - ImGui::SameLine(m_label_width + m_control_width + 3); - ImGui::PushItemWidth(m_control_width * 0.3f); + left_width += (first_input_width + item_out_gap); + ImGui::SameLine(left_width); + ImGui::PushItemWidth(slider_with); float old_tolerance, tolerance = old_tolerance = tolerance_in * 100.f; std::string format_t = tolerance_in < 0.f ? " " : "%.f %%"; float min_tolerance = tolerance_in < 0.f ? UndefMinVal : 0.f; - m_imgui->slider_float(("##tolerance_" + label).c_str(), &tolerance, min_tolerance, 20.f, format_t.c_str(), 1.f, true, _L("Tolerance")); + m_imgui->bbl_slider_float_style(("##tolerance_" + label).c_str(), &tolerance, min_tolerance, 20.f, format_t.c_str(), 1.f, true, _L("Tolerance")); + + left_width += (slider_with + item_in_gap); + ImGui::SameLine(left_width); + ImGui::PushItemWidth(second_input_width); + ImGui::BBLDragFloat(("##tolerance_input_" + label).c_str(), &tolerance, 0.05f, min_tolerance, 20.f, format_t.c_str()); + tolerance_in = tolerance * 0.01f; return !is_approx(old_val, value) || !is_approx(old_tolerance, tolerance); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.hpp b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.hpp index c27492df1c..5cb9e765cc 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.hpp @@ -70,6 +70,7 @@ private: std::vector> m_shortcuts; double m_label_width{150.0}; double m_control_width{ 200.0 }; + double m_editing_window_width; CutConnectorType m_connector_type; size_t m_connector_style; From d72b4c1bfe3f0c275241250a0b1797944147b3b7 Mon Sep 17 00:00:00 2001 From: manch1n Date: Thu, 23 Mar 2023 10:09:37 +0800 Subject: [PATCH 142/339] FIX: Disable print button when gcode has conflict Also fix a crash bug due to setStarted and setDone. Change-Id: Ib9b069fe4b7e5d1fc359f48e44b4032dd8249428 (cherry picked from commit 9ef190ed3ecd66d12617ad96e927ff34251395a2) --- src/libslic3r/GCode/ConflictChecker.cpp | 1 + src/libslic3r/GCode/GCodeProcessor.hpp | 23 +++++++++++++++++++++++ src/libslic3r/Print.cpp | 16 +++++++++++----- src/libslic3r/Print.hpp | 22 ++++++++++++++++++++++ src/slic3r/GUI/GCodeViewer.cpp | 3 +++ src/slic3r/GUI/GCodeViewer.hpp | 3 +++ src/slic3r/GUI/GLCanvas3D.cpp | 13 ++++++++++++- src/slic3r/GUI/GLCanvas3D.hpp | 3 ++- src/slic3r/GUI/PartPlate.hpp | 2 +- 9 files changed, 78 insertions(+), 8 deletions(-) diff --git a/src/libslic3r/GCode/ConflictChecker.cpp b/src/libslic3r/GCode/ConflictChecker.cpp index 3cf1aa49a4..8f36d65d96 100644 --- a/src/libslic3r/GCode/ConflictChecker.cpp +++ b/src/libslic3r/GCode/ConflictChecker.cpp @@ -201,6 +201,7 @@ ConflictRet ConflictChecker::find_inter_of_lines(const LineWithIDs &lines) ConflictRet ConflictChecker::find_inter_of_lines_in_diff_objs(PrintObjectPtrs objs) // find the first intersection point of lines in different objects { + if (objs.size() <= 1) { return {}; } LinesBucketQueue conflictQueue; for (PrintObject *obj : objs) { auto layers = getAllLayersExtrusionPathsFromObject(obj); diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index ed304fc572..96dedabb82 100644 --- a/src/libslic3r/GCode/GCodeProcessor.hpp +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -90,6 +90,29 @@ namespace Slic3r { struct GCodeProcessorResult { + //BBS + struct ConflictResult + { + bool conflicted; + std::string obj1Name; + std::string obj2Name; + + void set(const std::string &o1, const std::string &o2) + { + conflicted = true; + obj1Name = o1; + obj2Name = o2; + } + + void reset() { + conflicted = false; + obj1Name.clear(); + obj2Name.clear(); + } + + ConflictResult() = default; + ConflictResult(const ConflictResult &) = default; + }conflict_result; struct SettingsIds { diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 9647b3e412..02755f8dba 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1669,20 +1669,20 @@ void Print::process(bool use_cache) // BBS if(!m_no_check) { - this->set_started(psConflictCheck); - this->set_status(70, L("Checking gcode path conflicts.")); using Clock = std::chrono::high_resolution_clock; auto startTime = Clock::now(); auto conflictRes = ConflictChecker::find_inter_of_lines_in_diff_objs(m_objects); auto endTime = Clock::now(); volatile double seconds = std::chrono::duration_cast(endTime - startTime).count() / (double) 1000; + BOOST_LOG_TRIVIAL(info) << "gcode path conflicts check takes " << seconds << " secs."; + if (conflictRes.has_value()) { + m_conflict_result.set(conflictRes.value()._obj1, conflictRes.value()._obj2); auto objName1 = conflictRes.value()._obj1->m_model_object->name; auto objName2 = conflictRes.value()._obj2->m_model_object->name; - //throw Slic3r::SlicingError((boost::format(L("Conflicts of gcode paths have been found. Please separate the conflicted objects (%s + %s) farther.")) % objName1% objName2).str()); - this->active_step_add_warning(PrintStateBase::WarningLevel::CRITICAL, (boost::format(L("Conflicts of gcode paths have been found. Please separate the conflicted objects (%s <-> %s) farther.")) % objName1 % objName2).str()); + } else { + m_conflict_result.reset(); } - this->set_done(psConflictCheck); } BOOST_LOG_TRIVIAL(info) << "Slicing process finished." << log_memory_info(); @@ -1713,6 +1713,12 @@ std::string Print::export_gcode(const std::string& path_template, GCodeProcessor const Vec3d origin = this->get_plate_origin(); gcode.set_gcode_offset(origin(0), origin(1)); gcode.do_export(this, path.c_str(), result, thumbnail_cb); + //BBS + if (m_conflict_result.conflicted) { + result->conflict_result.set(m_conflict_result.obj1->m_model_object->name, m_conflict_result.obj2->m_model_object->name); + } else { + result->conflict_result.reset(); + } return path.c_str(); } diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index 4509162718..b68d0a95af 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -774,6 +774,28 @@ private: Vec3d m_origin; //BBS: modified_count int m_modified_count {0}; + //BBS + struct ConflictResult + { + bool conflicted; + PrintObject *obj1; + PrintObject *obj2; + //TODO + //the actual loaction + + void set(PrintObject *o1, PrintObject *o2) + { + conflicted = true; + obj1 = o1; + obj2 = o2; + } + void reset() + { + conflicted = false; + obj1 = nullptr; + obj2 = nullptr; + } + }m_conflict_result; // To allow GCode to set the Print's GCodeExport step status. friend class GCode; diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 121e85083c..fad67e19c9 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -1097,6 +1097,9 @@ void GCodeViewer::load(const GCodeProcessorResult& gcode_result, const Print& pr m_layers_slider->set_as_dirty(); m_moves_slider->set_as_dirty(); + //BBS + m_conflict_result = gcode_result.conflict_result; + //BBS: add mutex for protection of gcode result gcode_result.unlock(); //BBS: add logs diff --git a/src/slic3r/GUI/GCodeViewer.hpp b/src/slic3r/GUI/GCodeViewer.hpp index 05cca2039c..4642061817 100644 --- a/src/slic3r/GUI/GCodeViewer.hpp +++ b/src/slic3r/GUI/GCodeViewer.hpp @@ -722,6 +722,9 @@ public: Count }; + //BBS + GCodeProcessorResult::ConflictResult m_conflict_result; + private: std::vector m_plater_extruder; bool m_gl_data_initialized{ false }; diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 90c41cb8ff..fa636b4cc7 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2706,6 +2706,7 @@ void GLCanvas3D::load_gcode_preview(const GCodeProcessorResult& gcode_result, co //BBS: always load shell at preview, do this in load_shells //m_gcode_viewer.update_shells_color_by_extruder(m_config); _set_warning_notification_if_needed(EWarning::ToolpathOutside); + _set_warning_notification_if_needed(EWarning::GCodeConflict); } m_gcode_viewer.refresh(gcode_result, str_tool_colors); @@ -8785,7 +8786,10 @@ void GLCanvas3D::_set_warning_notification_if_needed(EWarning warning) else { if (wxGetApp().is_editor()) { if (current_printer_technology() != ptSLA) - show = m_gcode_viewer.has_data() && !m_gcode_viewer.is_contained_in_bed(); + if (warning == EWarning::ToolpathOutside) + show = m_gcode_viewer.has_data() && !m_gcode_viewer.is_contained_in_bed(); + else if (warning==EWarning::GCodeConflict) + show = m_gcode_viewer.has_data() && m_gcode_viewer.is_contained_in_bed() && m_gcode_viewer.m_conflict_result.conflicted; } } @@ -8824,6 +8828,13 @@ void GLCanvas3D::_set_warning_notification(EWarning warning, bool state) std::string text; ErrorType error = ErrorType::PLATER_WARNING; switch (warning) { + case EWarning::GCodeConflict: { + std::string objName1 = m_gcode_viewer.m_conflict_result.obj1Name; + std::string objName2 = m_gcode_viewer.m_conflict_result.obj2Name; + text = (boost::format(L("Conflicts of gcode paths have been found. Please separate the conflicted objects farther (%s <-> %s).")) % objName1 % objName2).str(); + error = ErrorType::SLICING_ERROR; + break; + } case EWarning::ObjectOutside: text = _u8L("An object is layed over the boundary of plate."); break; case EWarning::ToolpathOutside: text = _u8L("A G-code path goes beyond the boundary of plate."); error = ErrorType::SLICING_ERROR; break; // BBS: remove _u8L() for SLA diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index a3628de6dd..0325cf6e28 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -372,7 +372,8 @@ class GLCanvas3D ToolpathOutside, SlaSupportsOutside, SomethingNotShown, - ObjectClashed + ObjectClashed, + GCodeConflict }; class RenderStats diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index 4076df6fa6..0046a29187 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -381,7 +381,7 @@ public: { bool result = m_slice_result_valid; if (result) - result = m_gcode_result ? (!m_gcode_result->toolpath_outside) : false; + result = m_gcode_result ? (!m_gcode_result->toolpath_outside && !m_gcode_result->conflict_result.conflicted) : false; return result; } From 20ad3c7f9a8845a906a25a0ae28d9e54e0145ae6 Mon Sep 17 00:00:00 2001 From: tao wang Date: Fri, 24 Mar 2023 17:49:39 +0800 Subject: [PATCH 143/339] ENH:add some Chinese translations Change-Id: I610c23cbe36fb8f66c8a69e53330ec941174f12e --- bbl/i18n/BambuStudio.pot | 42 +++++++++++++--- bbl/i18n/de/BambuStudio_de.po | 67 ++++++++++++++++++++------ bbl/i18n/en/BambuStudio_en.po | 66 ++++++++++++++++++++------ bbl/i18n/es/BambuStudio_es.po | 67 ++++++++++++++++++++------ bbl/i18n/fr/BambuStudio_fr.po | 66 ++++++++++++++++++++------ bbl/i18n/hu/BambuStudio_hu.po | 66 ++++++++++++++++++++------ bbl/i18n/it/BambuStudio_it.po | 66 ++++++++++++++++++++------ bbl/i18n/ja/BambuStudio_ja.po | 65 +++++++++++++++++++------ bbl/i18n/nl/BambuStudio_nl.po | 67 ++++++++++++++++++++------ bbl/i18n/sv/BambuStudio_sv.po | 71 +++++++++++++++++++++------- bbl/i18n/zh_cn/BambuStudio_zh_CN.po | 64 ++++++++++++++++++------- resources/i18n/de/BambuStudio.mo | Bin 236171 -> 235641 bytes resources/i18n/en/BambuStudio.mo | Bin 215932 -> 215441 bytes resources/i18n/es/BambuStudio.mo | Bin 235599 -> 235050 bytes resources/i18n/fr/BambuStudio.mo | Bin 230931 -> 230471 bytes resources/i18n/hu/BambuStudio.mo | Bin 228936 -> 228453 bytes resources/i18n/it/BambuStudio.mo | Bin 217534 -> 217043 bytes resources/i18n/ja/BambuStudio.mo | Bin 225122 -> 224626 bytes resources/i18n/nl/BambuStudio.mo | Bin 232383 -> 231869 bytes resources/i18n/sv/BambuStudio.mo | Bin 222375 -> 221854 bytes resources/i18n/zh_cn/BambuStudio.mo | Bin 207895 -> 207963 bytes 21 files changed, 551 insertions(+), 156 deletions(-) diff --git a/bbl/i18n/BambuStudio.pot b/bbl/i18n/BambuStudio.pot index b9a26e239c..43d97c80d8 100644 --- a/bbl/i18n/BambuStudio.pot +++ b/bbl/i18n/BambuStudio.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-17 16:18+0800\n" +"POT-Creation-Date: 2023-03-24 17:47+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -314,6 +314,9 @@ msgstr "" msgid "After cut" msgstr "" +msgid "Cut to parts" +msgstr "" + msgid "Auto Segment" msgstr "" @@ -1788,13 +1791,13 @@ msgstr "" msgid "Max volumetric speed" msgstr "" -msgid "\\u2103" +msgid "℃" msgstr "" msgid "Bed temperature" msgstr "" -msgid "mm\\u00B3" +msgid "mm³" msgstr "" msgid "Start calibration" @@ -2183,7 +2186,7 @@ msgstr "" msgid "" "Spiral mode only works when wall loops is 1, support is disabled, top shell " -"layers is 0, sparse infill density is 0 and timelapse type is traditional" +"layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "" msgid "" @@ -2619,6 +2622,9 @@ msgstr "" msgid "Tool Move" msgstr "" +msgid "Tool Rotate" +msgstr "" + msgid "Move Object" msgstr "" @@ -3322,6 +3328,13 @@ msgstr "" msgid "Missing LAN ip of printer!" msgstr "" +#, possible-c-format, possible-boost-format +msgid "You are going to delete %u files. Are you sure to continue?" +msgstr "" + +msgid "Delete files" +msgstr "" + #, possible-c-format, possible-boost-format msgid "File '%s' was lost! Please download it again." msgstr "" @@ -5926,6 +5939,15 @@ msgstr "" msgid "Generating skirt & brim" msgstr "" +msgid "Checking gcode path conflicts." +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "" +"Conflicts of gcode paths have been found. Please separate the conflicted " +"objects (%s <-> %s) farther." +msgstr "" + msgid "Exporting G-code" msgstr "" @@ -6514,9 +6536,6 @@ msgstr "" msgid "Minimal purge on wipe tower" msgstr "" -msgid "mm³" -msgstr "" - msgid "Filament load time" msgstr "" @@ -7411,6 +7430,9 @@ msgid "" "interface is Concentric" msgstr "" +msgid "Rectilinear Interlaced" +msgstr "" + msgid "Base pattern spacing" msgstr "" @@ -7772,6 +7794,12 @@ msgstr "" msgid "max slicing time per plate in seconds." msgstr "" +msgid "No check" +msgstr "" + +msgid "Do not run any validity checks, such as gcode path conflicts check." +msgstr "" + msgid "Output Model Info" msgstr "" diff --git a/bbl/i18n/de/BambuStudio_de.po b/bbl/i18n/de/BambuStudio_de.po index 1827f508db..d434d0c138 100644 --- a/bbl/i18n/de/BambuStudio_de.po +++ b/bbl/i18n/de/BambuStudio_de.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-17 16:18+0800\n" +"POT-Creation-Date: 2023-03-24 17:47+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -313,6 +313,9 @@ msgstr "" msgid "After cut" msgstr "" +msgid "Cut to parts" +msgstr "In Einzelteile schneiden" + msgid "Auto Segment" msgstr "Automatische Segmentierung" @@ -1882,14 +1885,14 @@ msgstr "Druckbetttemperatur" msgid "Max volumetric speed" msgstr "Maximale Volumengeschwindigkeit" -msgid "\\u2103" -msgstr "\\ u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "Druckbetttemperatur" -msgid "mm\\u00B3" -msgstr "mm\\u00B3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "Starten" @@ -2381,11 +2384,8 @@ msgstr "" msgid "" "Spiral mode only works when wall loops is 1, support is disabled, top shell " -"layers is 0, sparse infill density is 0 and timelapse type is traditional" +"layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "" -"Der Spiralmodus funktioniert nur, wenn die Wandschleifen 1 sind, Support " -"deaktiviert ist, die oberen Schalenschichten 0 sind, die Füllungsdichte 0 " -"ist und der Zeitraffertyp traditionell ist." msgid "" "Change these settings automatically? \n" @@ -2850,6 +2850,9 @@ msgstr "Objekt spiegeln" msgid "Tool Move" msgstr "Werkzeugbewegung" +msgid "Tool Rotate" +msgstr "" + msgid "Move Object" msgstr "Objekt bewegen" @@ -3576,6 +3579,13 @@ msgstr "Im reinen LAN-Modus nicht zugänglich!" msgid "Missing LAN ip of printer!" msgstr "Fehlende LAN IP des Druckers!" +#, c-format, boost-format +msgid "You are going to delete %u files. Are you sure to continue?" +msgstr "" + +msgid "Delete files" +msgstr "" + #, c-format, boost-format msgid "File '%s' was lost! Please download it again." msgstr "" @@ -6468,6 +6478,15 @@ msgstr "Druckplatte %d: %s unterstützt kein Filament %s" msgid "Generating skirt & brim" msgstr "Erzeugen von Schürze und Rand (skirt & brim)" +msgid "Checking gcode path conflicts." +msgstr "" + +#, c-format, boost-format +msgid "" +"Conflicts of gcode paths have been found. Please separate the conflicted " +"objects (%s <-> %s) farther." +msgstr "" + msgid "Exporting G-code" msgstr "Exportiere G-Code" @@ -7196,9 +7215,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimale Wischmenge im Wischturm" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "Ladedauer des Filaments" @@ -8244,6 +8260,9 @@ msgstr "" "lösliche Auflageschnittstellen ist Geradlinig, während das Standardmuster " "für lösliche Auflageschnittstellen konzentrisch ist" +msgid "Rectilinear Interlaced" +msgstr "" + msgid "Base pattern spacing" msgstr "Abstand des Grundmusters" @@ -8711,6 +8730,12 @@ msgstr "" msgid "max slicing time per plate in seconds." msgstr "" +msgid "No check" +msgstr "" + +msgid "Do not run any validity checks, such as gcode path conflicts check." +msgstr "" + msgid "Output Model Info" msgstr "Ausgabe Modellinformationen" @@ -9146,15 +9171,27 @@ msgstr "" "Wussten Sie, dass Sie die Festigkeit des Modells durch mehr Wandschleifen " "und eine höhere Dichte der Füllung verbessern können?" +#~ msgid "\\u2103" +#~ msgstr "\\ u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\u00B3" + +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" +#~ msgstr "" +#~ "Der Spiralmodus funktioniert nur, wenn die Wandschleifen 1 sind, Support " +#~ "deaktiviert ist, die oberen Schalenschichten 0 sind, die Füllungsdichte 0 " +#~ "ist und der Zeitraffertyp traditionell ist." + #~ msgid "Keep upper part" #~ msgstr "Oberen Teil behalten" #~ msgid "Keep lower part" #~ msgstr "Unteren Teil behalten" -#~ msgid "Cut to parts" -#~ msgstr "In Einzelteile schneiden" - #~ msgid "AMS auto switch filament" #~ msgstr "Filament in AMS automatisch wechseln" diff --git a/bbl/i18n/en/BambuStudio_en.po b/bbl/i18n/en/BambuStudio_en.po index 2324280016..9de7114345 100644 --- a/bbl/i18n/en/BambuStudio_en.po +++ b/bbl/i18n/en/BambuStudio_en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-17 16:18+0800\n" +"POT-Creation-Date: 2023-03-24 17:47+0800\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -308,6 +308,9 @@ msgstr "" msgid "After cut" msgstr "" +msgid "Cut to parts" +msgstr "Cut to parts" + msgid "Auto Segment" msgstr "Auto Segment" @@ -1838,14 +1841,14 @@ msgstr "Bed Temperature" msgid "Max volumetric speed" msgstr "Max volumetric speed" -msgid "\\u2103" -msgstr "\\u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "Bed temperature" -msgid "mm\\u00B3" -msgstr "mm\\u00B3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "Start" @@ -2313,10 +2316,8 @@ msgstr "" msgid "" "Spiral mode only works when wall loops is 1, support is disabled, top shell " -"layers is 0, sparse infill density is 0 and timelapse type is traditional" +"layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "" -"Spiral mode only works when wall loops is 1, support is disabled, top shell " -"layers is 0, sparse infill density is 0 and timelapse type is traditional" msgid "" "Change these settings automatically? \n" @@ -2779,6 +2780,9 @@ msgstr "Mirror object" msgid "Tool Move" msgstr "Tool move" +msgid "Tool Rotate" +msgstr "" + msgid "Move Object" msgstr "Move object" @@ -3501,6 +3505,13 @@ msgstr "Not accessible in LAN-only mode!" msgid "Missing LAN ip of printer!" msgstr "Missing LAN IP of printer!" +#, c-format, boost-format +msgid "You are going to delete %u files. Are you sure to continue?" +msgstr "" + +msgid "Delete files" +msgstr "" + #, c-format, boost-format msgid "File '%s' was lost! Please download it again." msgstr "File '%s' was lost! Please download it again." @@ -6294,6 +6305,15 @@ msgstr "Plate %d: %s does not support filament %s" msgid "Generating skirt & brim" msgstr "Generating skirt & brim" +msgid "Checking gcode path conflicts." +msgstr "" + +#, c-format, boost-format +msgid "" +"Conflicts of gcode paths have been found. Please separate the conflicted " +"objects (%s <-> %s) farther." +msgstr "" + msgid "Exporting G-code" msgstr "Exporting G-code" @@ -7003,9 +7023,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimal purge on wipe tower" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "Filament load time" @@ -8029,6 +8046,9 @@ msgstr "" "soluble support interfaces is Rectilinear while the default pattern for " "soluble support interfaces is Concentric." +msgid "Rectilinear Interlaced" +msgstr "" + msgid "Base pattern spacing" msgstr "Base pattern spacing" @@ -8476,6 +8496,12 @@ msgstr "" msgid "max slicing time per plate in seconds." msgstr "" +msgid "No check" +msgstr "" + +msgid "Do not run any validity checks, such as gcode path conflicts check." +msgstr "" + msgid "Output Model Info" msgstr "Output Model Info" @@ -8902,15 +8928,27 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" +#~ msgid "\\u2103" +#~ msgstr "\\u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\u00B3" + +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" +#~ msgstr "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" + #~ msgid "Keep upper part" #~ msgstr "Keep upper part" #~ msgid "Keep lower part" #~ msgstr "Keep lower part" -#~ msgid "Cut to parts" -#~ msgstr "Cut to parts" - #~ msgid "AMS auto switch filament" #~ msgstr "AMS auto switch filament" diff --git a/bbl/i18n/es/BambuStudio_es.po b/bbl/i18n/es/BambuStudio_es.po index 0e7126267a..9aad979693 100644 --- a/bbl/i18n/es/BambuStudio_es.po +++ b/bbl/i18n/es/BambuStudio_es.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-17 16:18+0800\n" +"POT-Creation-Date: 2023-03-24 17:47+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -313,6 +313,9 @@ msgstr "" msgid "After cut" msgstr "" +msgid "Cut to parts" +msgstr "Cortar por partes" + msgid "Auto Segment" msgstr "Segmento Automático" @@ -1948,14 +1951,14 @@ msgstr "Temperatura de la base" msgid "Max volumetric speed" msgstr "Velocidad volumétrica máxima" -msgid "\\u2103" -msgstr "\\ u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "Temperatura de la base" -msgid "mm\\u00B3" -msgstr "mm\\ u00b3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "Iniciar" @@ -2444,11 +2447,8 @@ msgstr "" msgid "" "Spiral mode only works when wall loops is 1, support is disabled, top shell " -"layers is 0, sparse infill density is 0 and timelapse type is traditional" +"layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "" -"El modo espiral solo funciona cuando los bucles de pared son 1, el soporte " -"está desactivado, las capas superiores son 0, la densidad de relleno " -"disperso es 0 y el tipo de lapso de tiempo es tradicional" msgid "" "Change these settings automatically? \n" @@ -2934,6 +2934,9 @@ msgstr "Espejar Objeto" msgid "Tool Move" msgstr "Herramienta Mover" +msgid "Tool Rotate" +msgstr "" + msgid "Move Object" msgstr "Mover Objeto" @@ -3669,6 +3672,13 @@ msgstr "¡No se puede acceder en modo solo LAN!" msgid "Missing LAN ip of printer!" msgstr "¡Falta la IP LAN de la impresora!" +#, c-format, boost-format +msgid "You are going to delete %u files. Are you sure to continue?" +msgstr "" + +msgid "Delete files" +msgstr "" + #, c-format, boost-format msgid "File '%s' was lost! Please download it again." msgstr "El archivo '%s' se ha perdido. Por favor, descárguelo de nuevo." @@ -6562,6 +6572,15 @@ msgstr "La placa %d: %s no admite el filamento %s." msgid "Generating skirt & brim" msgstr "Generando falda y ala" +msgid "Checking gcode path conflicts." +msgstr "" + +#, c-format, boost-format +msgid "" +"Conflicts of gcode paths have been found. Please separate the conflicted " +"objects (%s <-> %s) farther." +msgstr "" + msgid "Exporting G-code" msgstr "Exportando código G" @@ -7288,9 +7307,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Purga mínima en la torre de limpieza" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "Tiempo de carga de filamento" @@ -8340,6 +8356,9 @@ msgstr "" "interfaz de soporte no soluble es Rectilíneo, mientras que el patrón por " "defecto para la interfaz de soporte soluble es Concéntrico" +msgid "Rectilinear Interlaced" +msgstr "" + msgid "Base pattern spacing" msgstr "Espaciamiento del patrón base" @@ -8801,6 +8820,12 @@ msgstr "" msgid "max slicing time per plate in seconds." msgstr "" +msgid "No check" +msgstr "" + +msgid "Do not run any validity checks, such as gcode path conflicts check." +msgstr "" + msgid "Output Model Info" msgstr "Información del modelo de salida" @@ -9231,15 +9256,27 @@ msgstr "" "¿Sabía que puede utilizar más bucles de pared y una densidad de relleno " "dispersa más alta para mejorar la resistencia del modelo?" +#~ msgid "\\u2103" +#~ msgstr "\\ u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\ u00b3" + +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" +#~ msgstr "" +#~ "El modo espiral solo funciona cuando los bucles de pared son 1, el " +#~ "soporte está desactivado, las capas superiores son 0, la densidad de " +#~ "relleno disperso es 0 y el tipo de lapso de tiempo es tradicional" + #~ msgid "Keep upper part" #~ msgstr "Mantener la parte superior" #~ msgid "Keep lower part" #~ msgstr "Mantener la parte inferior" -#~ msgid "Cut to parts" -#~ msgstr "Cortar por partes" - #~ msgid "AMS auto switch filament" #~ msgstr "Cambio automático de filamento AMS" diff --git a/bbl/i18n/fr/BambuStudio_fr.po b/bbl/i18n/fr/BambuStudio_fr.po index 675f5aa8a3..c2a4f5f9d5 100644 --- a/bbl/i18n/fr/BambuStudio_fr.po +++ b/bbl/i18n/fr/BambuStudio_fr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-17 16:18+0800\n" +"POT-Creation-Date: 2023-03-24 17:47+0800\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -309,6 +309,9 @@ msgstr "" msgid "After cut" msgstr "" +msgid "Cut to parts" +msgstr "Couper la sélection dans le presse-papiers" + msgid "Auto Segment" msgstr "Segmentation automatique" @@ -1855,14 +1858,14 @@ msgstr "Bed Temperature" msgid "Max volumetric speed" msgstr "Vitesse volumétrique max" -msgid "\\u2103" -msgstr "\\u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "Température du lit" -msgid "mm\\u00B3" -msgstr "mm\\u00B3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "Start" @@ -2324,10 +2327,8 @@ msgstr "" msgid "" "Spiral mode only works when wall loops is 1, support is disabled, top shell " -"layers is 0, sparse infill density is 0 and timelapse type is traditional" +"layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "" -"Spiral mode only works when wall loops is 1, support is disabled, top shell " -"layers is 0, sparse infill density is 0 and timelapse type is traditional" msgid "" "Change these settings automatically? \n" @@ -2788,6 +2789,9 @@ msgstr "Objet miroir" msgid "Tool Move" msgstr "Déplacement d'outil" +msgid "Tool Rotate" +msgstr "" + msgid "Move Object" msgstr "Déplacer l'objet" @@ -3511,6 +3515,13 @@ msgstr "Not accessible in LAN-only mode!" msgid "Missing LAN ip of printer!" msgstr "Missing LAN IP of printer!" +#, c-format, boost-format +msgid "You are going to delete %u files. Are you sure to continue?" +msgstr "" + +msgid "Delete files" +msgstr "" + #, c-format, boost-format msgid "File '%s' was lost! Please download it again." msgstr "File '%s' was lost! Please download it again." @@ -6357,6 +6368,15 @@ msgstr "Plate %d: %s does not support filament %s" msgid "Generating skirt & brim" msgstr "Génération jupe et bord" +msgid "Checking gcode path conflicts." +msgstr "" + +#, c-format, boost-format +msgid "" +"Conflicts of gcode paths have been found. Please separate the conflicted " +"objects (%s <-> %s) farther." +msgstr "" + msgid "Exporting G-code" msgstr "Exportation du code G" @@ -7080,9 +7100,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Purge minimale sur la tour de nettoyage" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "Temps de chargement du filament" @@ -8132,6 +8149,9 @@ msgstr "" "l'interface de support non soluble est rectiligne, tandis que le modèle par " "défaut pour l'interface de support soluble est concentrique" +msgid "Rectilinear Interlaced" +msgstr "" + msgid "Base pattern spacing" msgstr "Espacement du motif de base" @@ -8586,6 +8606,12 @@ msgstr "" msgid "max slicing time per plate in seconds." msgstr "" +msgid "No check" +msgstr "" + +msgid "Do not run any validity checks, such as gcode path conflicts check." +msgstr "" + msgid "Output Model Info" msgstr "Informations sur le modèle de sortie" @@ -9016,15 +9042,27 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" +#~ msgid "\\u2103" +#~ msgstr "\\u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\u00B3" + +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" +#~ msgstr "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" + #~ msgid "Keep upper part" #~ msgstr "Conserver la partie supérieure" #~ msgid "Keep lower part" #~ msgstr "Garder la partie inférieure" -#~ msgid "Cut to parts" -#~ msgstr "Couper la sélection dans le presse-papiers" - #~ msgid "AMS auto switch filament" #~ msgstr "AMS auto switch filament" diff --git a/bbl/i18n/hu/BambuStudio_hu.po b/bbl/i18n/hu/BambuStudio_hu.po index dc637bc9fc..15f60e1d48 100644 --- a/bbl/i18n/hu/BambuStudio_hu.po +++ b/bbl/i18n/hu/BambuStudio_hu.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-17 16:18+0800\n" +"POT-Creation-Date: 2023-03-24 17:47+0800\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -308,6 +308,9 @@ msgstr "" msgid "After cut" msgstr "" +msgid "Cut to parts" +msgstr "Részekre darabolás" + msgid "Auto Segment" msgstr "Automatikus szegmentálás" @@ -1865,14 +1868,14 @@ msgstr "Bed Temperature" msgid "Max volumetric speed" msgstr "Max. volumetrikus sebesség" -msgid "\\u2103" -msgstr "\\u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "Asztalhőmérséklet" -msgid "mm\\u00B3" -msgstr "mm\\u00B3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "Start" @@ -2337,10 +2340,8 @@ msgstr "" msgid "" "Spiral mode only works when wall loops is 1, support is disabled, top shell " -"layers is 0, sparse infill density is 0 and timelapse type is traditional" +"layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "" -"Spiral mode only works when wall loops is 1, support is disabled, top shell " -"layers is 0, sparse infill density is 0 and timelapse type is traditional" msgid "" "Change these settings automatically? \n" @@ -2805,6 +2806,9 @@ msgstr "Objektum tükrözése" msgid "Tool Move" msgstr "Fej mozgatása" +msgid "Tool Rotate" +msgstr "" + msgid "Move Object" msgstr "Objektum mozgatása" @@ -3527,6 +3531,13 @@ msgstr "Not accessible in LAN-only mode!" msgid "Missing LAN ip of printer!" msgstr "Missing LAN IP of printer!" +#, c-format, boost-format +msgid "You are going to delete %u files. Are you sure to continue?" +msgstr "" + +msgid "Delete files" +msgstr "" + #, c-format, boost-format msgid "File '%s' was lost! Please download it again." msgstr "File '%s' was lost! Please download it again." @@ -6351,6 +6362,15 @@ msgstr "Plate %d: %s does not support filament %s" msgid "Generating skirt & brim" msgstr "Szoknya & perem generálása" +msgid "Checking gcode path conflicts." +msgstr "" + +#, c-format, boost-format +msgid "" +"Conflicts of gcode paths have been found. Please separate the conflicted " +"objects (%s <-> %s) farther." +msgstr "" + msgid "Exporting G-code" msgstr "G-kód exportálása" @@ -7061,9 +7081,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimális tisztítás a törlőtoronyban" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "Filament betöltési idő" @@ -8105,6 +8122,9 @@ msgstr "" "alapértelmezett mintázata egyenes vonalú, míg az oldható támaszfelület " "alapértelmezett mintázata koncentrikus" +msgid "Rectilinear Interlaced" +msgstr "" + msgid "Base pattern spacing" msgstr "Alap mintázatának térköze" @@ -8555,6 +8575,12 @@ msgstr "" msgid "max slicing time per plate in seconds." msgstr "" +msgid "No check" +msgstr "" + +msgid "Do not run any validity checks, such as gcode path conflicts check." +msgstr "" + msgid "Output Model Info" msgstr "Kimeneti modell információ" @@ -8981,15 +9007,27 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" +#~ msgid "\\u2103" +#~ msgstr "\\u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\u00B3" + +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" +#~ msgstr "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" + #~ msgid "Keep upper part" #~ msgstr "Felső rész megtartása" #~ msgid "Keep lower part" #~ msgstr "Alsó rész megtartása" -#~ msgid "Cut to parts" -#~ msgstr "Részekre darabolás" - #~ msgid "AMS auto switch filament" #~ msgstr "AMS auto switch filament" diff --git a/bbl/i18n/it/BambuStudio_it.po b/bbl/i18n/it/BambuStudio_it.po index f71d899680..3822c3deb5 100644 --- a/bbl/i18n/it/BambuStudio_it.po +++ b/bbl/i18n/it/BambuStudio_it.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-17 16:18+0800\n" +"POT-Creation-Date: 2023-03-24 17:47+0800\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -308,6 +308,9 @@ msgstr "" msgid "After cut" msgstr "" +msgid "Cut to parts" +msgstr "Cut to parts" + msgid "Auto Segment" msgstr "Auto Segment" @@ -1839,14 +1842,14 @@ msgstr "Bed Temperature" msgid "Max volumetric speed" msgstr "Massima velocità volumetrica" -msgid "\\u2103" -msgstr "\\u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "Temperatura piano" -msgid "mm\\u00B3" -msgstr "mm\\u00B3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "Start" @@ -2315,10 +2318,8 @@ msgstr "" msgid "" "Spiral mode only works when wall loops is 1, support is disabled, top shell " -"layers is 0, sparse infill density is 0 and timelapse type is traditional" +"layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "" -"Spiral mode only works when wall loops is 1, support is disabled, top shell " -"layers is 0, sparse infill density is 0 and timelapse type is traditional" msgid "" "Change these settings automatically? \n" @@ -2781,6 +2782,9 @@ msgstr "Specchia Oggetto" msgid "Tool Move" msgstr "Tool move" +msgid "Tool Rotate" +msgstr "" + msgid "Move Object" msgstr "Sposta oggetto" @@ -3503,6 +3507,13 @@ msgstr "Not accessible in LAN-only mode!" msgid "Missing LAN ip of printer!" msgstr "Missing LAN IP of printer!" +#, c-format, boost-format +msgid "You are going to delete %u files. Are you sure to continue?" +msgstr "" + +msgid "Delete files" +msgstr "" + #, c-format, boost-format msgid "File '%s' was lost! Please download it again." msgstr "File '%s' was lost! Please download it again." @@ -6297,6 +6308,15 @@ msgstr "Plate %d: %s does not support filament %s" msgid "Generating skirt & brim" msgstr "Generating skirt & brim" +msgid "Checking gcode path conflicts." +msgstr "" + +#, c-format, boost-format +msgid "" +"Conflicts of gcode paths have been found. Please separate the conflicted " +"objects (%s <-> %s) farther." +msgstr "" + msgid "Exporting G-code" msgstr "Esportando il G-code" @@ -7006,9 +7026,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Spurgo minimo sulla torre di pulitura" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "Durata caricamento filamento" @@ -8032,6 +8049,9 @@ msgstr "" "soluble support interfaces is Rectilinear while the default pattern for " "soluble support interfaces is Concentric." +msgid "Rectilinear Interlaced" +msgstr "" + msgid "Base pattern spacing" msgstr "Base pattern spacing" @@ -8479,6 +8499,12 @@ msgstr "" msgid "max slicing time per plate in seconds." msgstr "" +msgid "No check" +msgstr "" + +msgid "Do not run any validity checks, such as gcode path conflicts check." +msgstr "" + msgid "Output Model Info" msgstr "Info Modello di output" @@ -8905,15 +8931,27 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" +#~ msgid "\\u2103" +#~ msgstr "\\u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\u00B3" + +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" +#~ msgstr "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" + #~ msgid "Keep upper part" #~ msgstr "Mantieni parte superiore" #~ msgid "Keep lower part" #~ msgstr "Mantieni parte inferiore" -#~ msgid "Cut to parts" -#~ msgstr "Cut to parts" - #~ msgid "AMS auto switch filament" #~ msgstr "AMS auto switch filament" diff --git a/bbl/i18n/ja/BambuStudio_ja.po b/bbl/i18n/ja/BambuStudio_ja.po index 4813bec9a0..36c46f91b9 100644 --- a/bbl/i18n/ja/BambuStudio_ja.po +++ b/bbl/i18n/ja/BambuStudio_ja.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-17 16:18+0800\n" +"POT-Creation-Date: 2023-03-24 17:47+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -310,6 +310,9 @@ msgstr "" msgid "After cut" msgstr "" +msgid "Cut to parts" +msgstr "パーツに割り切る" + msgid "Auto Segment" msgstr "自動分割" @@ -1821,14 +1824,14 @@ msgstr "ベッド温度" msgid "Max volumetric speed" msgstr "最大体積速度" -msgid "\\u2103" -msgstr "u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "ベッド温度" -msgid "mm\\u00B3" -msgstr "mmu00B3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "開始" @@ -2254,10 +2257,8 @@ msgstr "" msgid "" "Spiral mode only works when wall loops is 1, support is disabled, top shell " -"layers is 0, sparse infill density is 0 and timelapse type is traditional" +"layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "" -"スパイラルモードを使用するには、壁面層数を1、サポートを無効、トップ面層数を" -"0、充填密度を0にする必要があります" msgid "" "Change these settings automatically? \n" @@ -2718,6 +2719,9 @@ msgstr "オブジェクトを反転" msgid "Tool Move" msgstr "ツール 移動" +msgid "Tool Rotate" +msgstr "" + msgid "Move Object" msgstr "オブジェクトを移動" @@ -3430,6 +3434,13 @@ msgstr "ローカルモードではアクセスできません" msgid "Missing LAN ip of printer!" msgstr "プリンターのIPが見つかりません" +#, c-format, boost-format +msgid "You are going to delete %u files. Are you sure to continue?" +msgstr "" + +msgid "Delete files" +msgstr "" + #, c-format, boost-format msgid "File '%s' was lost! Please download it again." msgstr "ファイル %s が見つかりませんでした、もう一度ダウンロードしてください。" @@ -6140,6 +6151,15 @@ msgstr "プレート %d: %s がフィラメント %s を使用できません" msgid "Generating skirt & brim" msgstr "スカートとブリムを生成" +msgid "Checking gcode path conflicts." +msgstr "" + +#, c-format, boost-format +msgid "" +"Conflicts of gcode paths have been found. Please separate the conflicted " +"objects (%s <-> %s) farther." +msgstr "" + msgid "Exporting G-code" msgstr "G-codeをエクスポート中" @@ -6793,9 +6813,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "プライムタワー上最小フラッシュ量" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "フィラメントロード時間" @@ -7759,6 +7776,9 @@ msgstr "" "サポート接触面のパターンです。非可溶性材を使用する場合はRectilinear、可溶性材" "を使用する場合同心です。" +msgid "Rectilinear Interlaced" +msgstr "" + msgid "Base pattern spacing" msgstr "基本パターン間隔" @@ -8174,6 +8194,12 @@ msgstr "" msgid "max slicing time per plate in seconds." msgstr "" +msgid "No check" +msgstr "" + +msgid "Do not run any validity checks, such as gcode path conflicts check." +msgstr "" + msgid "Output Model Info" msgstr "出力モデル情報" @@ -8573,15 +8599,26 @@ msgstr "" "強度の向上\n" "壁面層数やインフィルの充填密度を増やして造形強度を向上できます。" +#~ msgid "\\u2103" +#~ msgstr "u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mmu00B3" + +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" +#~ msgstr "" +#~ "スパイラルモードを使用するには、壁面層数を1、サポートを無効、トップ面層数" +#~ "を0、充填密度を0にする必要があります" + #~ msgid "Keep upper part" #~ msgstr "上の部分を残す" #~ msgid "Keep lower part" #~ msgstr "下の部分を残す" -#~ msgid "Cut to parts" -#~ msgstr "パーツに割り切る" - #~ msgid "AMS auto switch filament" #~ msgstr "AMSフィラメント自動切替え" diff --git a/bbl/i18n/nl/BambuStudio_nl.po b/bbl/i18n/nl/BambuStudio_nl.po index 7870004f4d..89690125a0 100644 --- a/bbl/i18n/nl/BambuStudio_nl.po +++ b/bbl/i18n/nl/BambuStudio_nl.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-17 16:18+0800\n" +"POT-Creation-Date: 2023-03-24 17:47+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -312,6 +312,9 @@ msgstr "" msgid "After cut" msgstr "" +msgid "Cut to parts" +msgstr "In delen knippen" + msgid "Auto Segment" msgstr "Automatische segmenteren" @@ -1880,14 +1883,14 @@ msgstr "Bed Temperatuur" msgid "Max volumetric speed" msgstr "Maximale volumetrische snelheid" -msgid "\\u2103" -msgstr "\\ u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "Printbed temperatuur" -msgid "mm\\u00B3" -msgstr "mm\\u00B3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "Start" @@ -2365,11 +2368,8 @@ msgstr "" msgid "" "Spiral mode only works when wall loops is 1, support is disabled, top shell " -"layers is 0, sparse infill density is 0 and timelapse type is traditional" +"layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "" -"De spiraalmodus werkt alleen als de wandlussen 1 zijn, de ondersteuning is " -"uitgeschakeld, de bovenste lagen 0 zijn, de sparse infill 0 is en het " -"timelapse-type traditioneel is" msgid "" "Change these settings automatically? \n" @@ -2833,6 +2833,9 @@ msgstr "Object spiegelen" msgid "Tool Move" msgstr "Beweeg tool" +msgid "Tool Rotate" +msgstr "" + msgid "Move Object" msgstr "Beweeg object" @@ -3556,6 +3559,13 @@ msgstr "Niet toegankelijk in LAN-only modus!" msgid "Missing LAN ip of printer!" msgstr "LAN-IP van de printer ontbreekt!" +#, c-format, boost-format +msgid "You are going to delete %u files. Are you sure to continue?" +msgstr "" + +msgid "Delete files" +msgstr "" + #, c-format, boost-format msgid "File '%s' was lost! Please download it again." msgstr "Bestand '%s' is verloren gegaan! Download het opnieuw." @@ -6445,6 +6455,15 @@ msgstr "Printbed %d: %s ondersteunt filament %s niet." msgid "Generating skirt & brim" msgstr "Skirt en brim worden gegenereerd" +msgid "Checking gcode path conflicts." +msgstr "" + +#, c-format, boost-format +msgid "" +"Conflicts of gcode paths have been found. Please separate the conflicted " +"objects (%s <-> %s) farther." +msgstr "" + msgid "Exporting G-code" msgstr "G-code exporteren" @@ -7170,9 +7189,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimale filament reiniging op de wipe tower" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "Filament laadt tijd" @@ -8230,6 +8246,9 @@ msgstr "" "niet-oplosbare support interfaces is Rechtlijnig, terwijl het " "standaardpatroon voor oplosbare support interfaces Concentrisch is." +msgid "Rectilinear Interlaced" +msgstr "" + msgid "Base pattern spacing" msgstr "Basis patroon afstand" @@ -8693,6 +8712,12 @@ msgstr "" msgid "max slicing time per plate in seconds." msgstr "" +msgid "No check" +msgstr "" + +msgid "Do not run any validity checks, such as gcode path conflicts check." +msgstr "" + msgid "Output Model Info" msgstr "Model informatie weergeven" @@ -9123,15 +9148,27 @@ msgstr "" "Wist je dat je meer wandlussen en een hogere dunne invuldichtheid kunt " "gebruiken om de sterkte van het model te verbeteren?" +#~ msgid "\\u2103" +#~ msgstr "\\ u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\u00B3" + +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" +#~ msgstr "" +#~ "De spiraalmodus werkt alleen als de wandlussen 1 zijn, de ondersteuning " +#~ "is uitgeschakeld, de bovenste lagen 0 zijn, de sparse infill 0 is en het " +#~ "timelapse-type traditioneel is" + #~ msgid "Keep upper part" #~ msgstr "Bewaar het bovenstee deel" #~ msgid "Keep lower part" #~ msgstr "Bewaar het onderste deel" -#~ msgid "Cut to parts" -#~ msgstr "In delen knippen" - #~ msgid "AMS auto switch filament" #~ msgstr "AMS automatische filament overschakelen" diff --git a/bbl/i18n/sv/BambuStudio_sv.po b/bbl/i18n/sv/BambuStudio_sv.po index fe378fd82d..51d5a88b59 100644 --- a/bbl/i18n/sv/BambuStudio_sv.po +++ b/bbl/i18n/sv/BambuStudio_sv.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-17 16:18+0800\n" +"POT-Creation-Date: 2023-03-24 17:47+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -312,6 +312,9 @@ msgstr "" msgid "After cut" msgstr "" +msgid "Cut to parts" +msgstr "Beskär till delar" + msgid "Auto Segment" msgstr "Automatisk Segment" @@ -1854,14 +1857,14 @@ msgstr "Byggplattans temperatur" msgid "Max volumetric speed" msgstr "Max volymetrisk hastighet" -msgid "\\u2103" -msgstr "\\u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "Byggplattans temperatur" -msgid "mm\\u00B3" -msgstr "mm\\u00B3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "Starta" @@ -2331,11 +2334,8 @@ msgstr "" msgid "" "Spiral mode only works when wall loops is 1, support is disabled, top shell " -"layers is 0, sparse infill density is 0 and timelapse type is traditional" +"layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "" -"Spiralläget fungerar endast när väggslingor är 1, support är inaktiverad, de " -"översta skal skikten är 0, tätheten av sparsam utfyllnad är 0 och timelapse " -"typen är traditionell." msgid "" "Change these settings automatically? \n" @@ -2799,6 +2799,9 @@ msgstr "Spegelvänd Objektet" msgid "Tool Move" msgstr "Verktygs Förflyttning" +msgid "Tool Rotate" +msgstr "" + msgid "Move Object" msgstr "Flytta Objektet" @@ -3521,6 +3524,13 @@ msgstr "Ej tillgänglig i LAN-läge!" msgid "Missing LAN ip of printer!" msgstr "Saknar skrivarens LAN-IP!" +#, c-format, boost-format +msgid "You are going to delete %u files. Are you sure to continue?" +msgstr "" + +msgid "Delete files" +msgstr "" + #, c-format, boost-format msgid "File '%s' was lost! Please download it again." msgstr "Filen '%s' förlorades! Ladda ner den igen." @@ -6318,6 +6328,15 @@ msgstr "Plate %d: %s stöder inte filamentet %s" msgid "Generating skirt & brim" msgstr "Skapar Skirt & Brim" +msgid "Checking gcode path conflicts." +msgstr "" + +#, c-format, boost-format +msgid "" +"Conflicts of gcode paths have been found. Please separate the conflicted " +"objects (%s <-> %s) farther." +msgstr "" + msgid "Exporting G-code" msgstr "Exporterar G-kod" @@ -7018,9 +7037,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimal purge på wipe torn" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "Inmatningstid för filament" @@ -8046,8 +8062,11 @@ msgid "" "interface is Concentric" msgstr "" "Linje mönster för support gränssnittsytan .Standardmönstret för olösligt " -"(material) support gränssnittet är Räta medan standardmönstret för lösligt" -"(material) stödgränssnittet är koncentriskt" +"(material) support gränssnittet är Räta medan standardmönstret för " +"lösligt(material) stödgränssnittet är koncentriskt" + +msgid "Rectilinear Interlaced" +msgstr "" msgid "Base pattern spacing" msgstr "Basens mönster mellanrum" @@ -8497,6 +8516,12 @@ msgstr "" msgid "max slicing time per plate in seconds." msgstr "" +msgid "No check" +msgstr "" + +msgid "Do not run any validity checks, such as gcode path conflicts check." +msgstr "" + msgid "Output Model Info" msgstr "Mata ut modell information" @@ -8924,15 +8949,27 @@ msgstr "" "Visste du att du kan använda fler väggslingor och högre gles fyllningstäthet " "för att förbättra modellens styrka?" +#~ msgid "\\u2103" +#~ msgstr "\\u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\u00B3" + +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" +#~ msgstr "" +#~ "Spiralläget fungerar endast när väggslingor är 1, support är inaktiverad, " +#~ "de översta skal skikten är 0, tätheten av sparsam utfyllnad är 0 och " +#~ "timelapse typen är traditionell." + #~ msgid "Keep upper part" #~ msgstr "Behåll övre del" #~ msgid "Keep lower part" #~ msgstr "Behåll lägre del" -#~ msgid "Cut to parts" -#~ msgstr "Beskär till delar" - #~ msgid "AMS auto switch filament" #~ msgstr "AMS automatisk växling av filament" diff --git a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po index cb05a60774..c51fab2238 100644 --- a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po +++ b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-17 16:18+0800\n" +"POT-Creation-Date: 2023-03-24 17:47+0800\n" "PO-Revision-Date: 2023-02-24 10:40+0800\n" "Last-Translator: Jiang Yue \n" "Language-Team: \n" @@ -314,6 +314,9 @@ msgstr "翻转" msgid "After cut" msgstr "切割后" +msgid "Cut to parts" +msgstr "切割为零件" + msgid "Auto Segment" msgstr "自动分割" @@ -1809,14 +1812,14 @@ msgstr "热床温度" msgid "Max volumetric speed" msgstr "最大体积速度" -msgid "\\u2103" +msgid "℃" msgstr "" msgid "Bed temperature" msgstr "床温" -msgid "mm\\u00B3" -msgstr "" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "开始" @@ -1900,7 +1903,7 @@ msgid "" "process. During this time, the indicator may not represent the chamber " "accurately." msgstr "" -"注意:当盖子打开或更换干燥剂包装时,可能需要数小时或一晚才能吸收水分,低温也会" +"注意:当盖子打开或更换干燥剂包装时,可能需要数小时或一晚才能吸收水分,低温也会" "减慢这一过程。在此期间,指示器的数值可能并不准确。" msgid "" @@ -2243,10 +2246,10 @@ msgstr "" msgid "" "Spiral mode only works when wall loops is 1, support is disabled, top shell " -"layers is 0, sparse infill density is 0 and timelapse type is traditional" +"layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "" -"旋转模式只能在外墙层数为1,关闭支撑,顶层层数为0,稀疏填充密度为0,传统延时摄" -"影时有效" +"旋转模式只能在外墙层数为1,关闭支撑,顶层层数为0,稀疏填充密度为0,传统延" +"时摄影时有效。" msgid "" "Change these settings automatically? \n" @@ -2707,6 +2710,9 @@ msgstr "镜像物体" msgid "Tool Move" msgstr "工具 移动" +msgid "Tool Rotate" +msgstr "工具 旋转" + msgid "Move Object" msgstr "移动对象" @@ -3423,6 +3429,13 @@ msgstr "在局域网模式中不可访问!" msgid "Missing LAN ip of printer!" msgstr "未找到打印机的局域网地址!" +#, c-format, boost-format +msgid "You are going to delete %u files. Are you sure to continue?" +msgstr "" + +msgid "Delete files" +msgstr "" + #, c-format, boost-format msgid "File '%s' was lost! Please download it again." msgstr "文件%s丢失,请重新下载。" @@ -6088,6 +6101,15 @@ msgstr "盘%d:%s不支持耗材丝 %s" msgid "Generating skirt & brim" msgstr "正在生成skirt和brim" +msgid "Checking gcode path conflicts." +msgstr "" + +#, c-format, boost-format +msgid "" +"Conflicts of gcode paths have been found. Please separate the conflicted " +"objects (%s <-> %s) farther." +msgstr "" + msgid "Exporting G-code" msgstr "正在导出G-code" @@ -6714,9 +6736,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "擦拭塔上的最小清理量" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "加载耗材丝的时间" @@ -7645,6 +7664,9 @@ msgstr "" "支撑接触面的走线图案。非可溶支撑接触面的缺省图案为直线,可溶支撑接触面的缺省" "图案为同心。" +msgid "Rectilinear Interlaced" +msgstr "" + msgid "Base pattern spacing" msgstr "主体图案线距" @@ -8053,6 +8075,12 @@ msgstr "" msgid "max slicing time per plate in seconds." msgstr "" +msgid "No check" +msgstr "" + +msgid "Do not run any validity checks, such as gcode path conflicts check." +msgstr "" + msgid "Output Model Info" msgstr "输出模型信息" @@ -8457,15 +8485,20 @@ msgstr "" "提高强度\n" "你知道吗?你可以使用更多的墙层数和更高的疏散填充密度来提高模型的强度。" +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" +#~ msgstr "" +#~ "旋转模式只能在外墙层数为1,关闭支撑,顶层层数为0,稀疏填充密度为0,传统延" +#~ "时摄影时有效" + #~ msgid "Keep upper part" #~ msgstr "保留上半部分" #~ msgid "Keep lower part" #~ msgstr "保留下半部分" -#~ msgid "Cut to parts" -#~ msgstr "切割为零件" - #~ msgid "AMS auto switch filament" #~ msgstr "AMS自动续料" @@ -10654,9 +10687,6 @@ msgstr "" #~ msgid "Value is out of range, continue?" #~ msgstr "值越界,是否继续?" -#~ msgid "Tool Rotate" -#~ msgstr "工具 旋转" - #~ msgid "Open %s" #~ msgstr "打开%s" diff --git a/resources/i18n/de/BambuStudio.mo b/resources/i18n/de/BambuStudio.mo index 057aed16b6207f5a69bf2ace7cc3d6b25cf70008..688d6c5b3af085138bd56d3ff00ecd9f7fb9f1e1 100644 GIT binary patch delta 48001 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 H-dX<(H+shZ diff --git a/resources/i18n/en/BambuStudio.mo b/resources/i18n/en/BambuStudio.mo index ab4a8b42c03c287016c0566749d12f11228fd39c..5cc7c610b9ff5da627516b0f2abb4c1055040718 100644 GIT binary patch delta 48041 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 PyI7cxsdk<0!tDPKi0mPE delta 48436 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

w63&{}VOAz{aLt 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 Kk;gUWx%~~1M4_z! diff --git a/resources/i18n/es/BambuStudio.mo b/resources/i18n/es/BambuStudio.mo index b0d5c43a64d16f58c9e3d8951817b54c96a7cbb1..12577cd8d3b8fbab186c262ebd10294f2c2088f3 100644 GIT binary patch delta 48000 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 delta 48449 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 diff --git a/resources/i18n/hu/BambuStudio.mo b/resources/i18n/hu/BambuStudio.mo index 39258412f17595462d31f05231e8f372473aaa83..95ba1646501c65e604aa2750f205965a912b6c0b 100644 GIT binary patch delta 48029 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 E-wF)l;s5{u diff --git a/resources/i18n/it/BambuStudio.mo b/resources/i18n/it/BambuStudio.mo index 22531f1d45469c1d7d7b3a708bb28ef21941e59c..2d56d84e6a50e50f2a7793b8fdac4713eb790ec1 100644 GIT binary patch delta 48031 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�w{ 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 diff --git a/resources/i18n/ja/BambuStudio.mo b/resources/i18n/ja/BambuStudio.mo index acd49d2bfa8c8906c34191e6c276d856fb8bb02c..bfb66980124ec44e14a77ddf920c87251d7595c9 100644 GIT binary patch delta 48032 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 O?v97K{DJFy_x}ME)!AYI diff --git a/resources/i18n/nl/BambuStudio.mo b/resources/i18n/nl/BambuStudio.mo index 59bb020bbbac391fac8971213f02833d0b84a3ad..a6d6483d12776eede8b30710c526be466bd22080 100644 GIT binary patch delta 48017 zcmZ791#}h1Z*kW`p-{BAwYWRH z-)Coj|I_o{b8bH~v$Nwfdn2TKXC~S`HIaKgS&ZopuPt#LCj;)P;5c*RJ5JN_N_CuL zzdBA_JdWw`PmI8)SP4UabDYB17fa)M*>tcRvfmLua7R75Aim7%xPFk#p39u!m$7oc8$6_j+YF&l&(bf~j0&4LiREyu>513%D{EQmG#0MQGH>O4n zb$L{|)iE_T#=6)O%i+<3jDG_H@ei4yYlE7b?x=$?%Agi&J=92bN0r~#wFyH|8ONY{I1g3vLd=A#Fe4tv?DzoHgG5Ii zr#WWAW;h6S-&It;d#I^PaLja|l(nkWZAd^pZ--h7eNhEZ#3DE!wb=f`Vi^0l;}pcQ zxDfjybvS8Gm~DI$>kvgvC2G-W721a8X`~j73n2k?Dt({p|3Rhxre2BR*+aKn>C`?4WF(%Z|bRv)#`zirP zV^*AwIq_E;zk^x}vCo=@Wye^=^P@(r2*$vws2I_N$|&W=15(Ds(2?V-xaKd@&7ahH$_$05xZee)Lh@f4EP?$V#@PoaW6m}NK4K$ z{>cgKAt48zL(SbsR8KNqFg?tI8ljx19u-CHhT5ox_CT%np;#JM;9z`++7%uCG6&aT z{GRwd)S7B^k?|i-VB|%%9wxnHhG-6^Aif-RpzOk=cofy(%cyPo1T~~DP$Tda)zCPX z&0MEJO=%#ip`n-zBW%2mOF#v*Mcw!vYG{Vy4>%8pV5%#oM>BD#;#VE#1J1(DIOUq- zbj6B)n;ve)?}+EPZjS2NID&Yh8zw##hY@$<+@$ve#-mns(pzQ<(xDns64mpDsFCQ5 zTD`qdi*E#KZHz~a%qrBH+Jn091nTU+hH3CMDqq6e-WqY8KmsbTh)HlNVNBx9Q5CdB z4P6&h!2@wSjzO)Fh&zrm8!Mou;0CIp|DZh!0s)A{#xn77Gfz6l_PohTlmZW~?GXV`r>U-wK z5L5+)Q8z^5YHW@g!g%*h{;a5i3Zr^h8+E-Arp2D922MaN=DF4lsB#aZtBS7@&|E#k zVDx*yBNlUE7W^HxpPyqO#(roj%!%q@KGY&Ehg$8mP$SnIwJ1AcPP~9o_zg>A)IW@W zF#?nSF$J8$Si~=547`aN(tFl7sD{M+*KvNr4EO`CMGbk5N9J4zLv<($L$M8NM5o&8 zOHm_t;1S~=lfd63XvprMdh`XuFv(-bX^rJEH!ioHM>WjviD`IJRKqf1P7KF_*aB7Y zG*ria!8o`EW8+qrz)AwUQB%?3scFyvtVet(R>O;^24#Cj;n)xh;Ez}o_hTXagsQl} za})1?n){zoNAYIV{eNHybYs0Rb6O5H675h!(*+aZD4RYVM-!im@iFU5Q&A`;A>J0% zpx&sD;VV$(9YU3J0u$h6>wS~%IgsNiZ1(pjsY=D!3K~VONZcQ&9VT z9%{`j$I7?{^^ACH<0)R7jx|T6|A2wo|1$|xB;i*~fzBJVJyN3PCnGHWvEG>$C$i>5wY)s4 zr>#*V(g9WQa16%jm>u_EalD5bslfNkOntk z2|SL4G1eDzc9+89#OtGaHU(ATZ0l0=8ircD=TK|rHflG;`f5fp5Vdv+Vn&Q~3FIcw z9yRAvu@uh5TzCaF1u?&wmZz}>VM@{qpr#-aHByc2_138Jx?B6A8sws;atUTqd(8qNZSyzn?P>=b{>t-RI{$ z1@mHm;uUc^^*j3sR3V{343lv&<|V!gwa+hOZTyCfv35*9rzNgM&2gewe%|WOh=+)W zqNegS>i&eW{hYNJhQ;s}Dm_CSKj*ske^~;W%fPsP-U#GI4Q)vrk9ANzzJZ$Cht~I~ zZ5Jn=DKH&sZX-}5P}jy=qMn+)FaT%R^zE34`kj*mw3@G=3cQPI&|6eb{NfwaVNBv- zsGb)^ZM#TRgR5g|Y=dgR0L+P_Q9a&>T8tM_<-A0<41xCqw5p3GFfA;DYCvn$nux|= z9E=))<){X1M-_MkwQFu+8_bl@tes)V^gG9~66vQB`FUT0rAX}OL=$hD*w6JUI!8i5 z68=WDI9U?2=t`g(P#HBcjjdfVGx5Qg3x7s6=s2opmr#rIx{bd;t@?M?1WC<^1txX< zyrZ%(2^xXssEqAU74*01b5PrI5o#oEVhF}fX6_3|HK2rzS4D4^pjLkq)D*X|@n}?e zyj)LJNqnwqAVA3LB zoD_cE!RH1MPyr=Si=+zbVCaFG+exU3SD{YIgQ)yh?DdDJRqsn_)=p~F2o^yt#_Fhw z+o2ldqNegEq$94gn1F_6Evlv4%?0PEO+SYk%4?_|-a`%bdsP0|sm%SUQSm@)epH2J z(3=Wt6VwQ_#Zub;LkXy*`>+6B!m=1Ywdqj})LQ6{?Qs%@<6BfubEon19!_PjE%8pM zhMvY6cneEozO;T$Z|s4gcpo!RzmqDRpZ6ROLp@|_qIxnOHS}{)BeVrI^m|bI`;<+; zgqoV$sMY_$UjK$V^W&#C>7l5R2uGDy3SBLxNCGOb4)(_u*d4E+hOkNoGiOau2Te38 zeK?NBX{fc6A*0#S5>)U#%!!|{4+drS za|Yr()KI4lFjJ8i)q@(SiW;I$!rw6up2KYD1e%cyvWBDbRlo~aC6N8Ep$o`j9x8=V z1*1qq9BMA>J{_&-*%H7pg&VvzvU0Fpzi{Zozt}sfd?@q38a5sCfBc zKW7(qMy-JyIZZikJ_1@a;i#S!N9~4+Hr^aH5}i;}FdWtMSy&Jkpn7y3wJmSk_zP5n zzM($gY{_LRzGeN_$mf3os`xW%al{TWLz50QWLZ#aBn-80E1(Xj)~Ibc6xF~*s43Wq z>cC&9@}8o~@yl(>O@``lI!vwoAK(Qzu~6Hs7HSQ2LN)Ar)F+_9s9iE1H3BnH1^{S^P&{g0B0WFG4sFvQc-nTwNRrDM+mrke|sXVCr zE8=~ui>kPIK6AY+>b@qZ5$%Gxus4R_!hGz1weXb9a2YjpchDc-q2~M}s$r?~`#IAv z1Fpr5SP@$kFds0Mq2f=m0EUOz-Gfz#@51;L9J`=tNb*AL|4m#dRmfEQ0yPpb3!9!K zLM^hCsC^uc8v1Ie-OvOz0zFVY9gHLKN7UL#QN-j6LQPRI)cH^y1F(}zKtnbT$KqsE z#`Hzas?UomC;~MyQK*qLgu^+66mM4gJG<4+DsQM3v{JFJ>}^ zVqOv|VG#B~ZL@h;5O-o8e2(FmskrHJUDPgVi`u5$ZG0%I;S*3JHy<@}TTl%=h}`Eo zmkFpPcTq$09#v3^5@tVVM-@~Cb<)*F70?T{cE+K4I1|;tHK>ZNU}5~n#sf>5a`K_J zYZ*+S{a@J&@UP+AfdLTm2E{#tf)}f>7J42&%_raWzJv*2Wjq zxe~XG8L7mmk1@jVAH3dZdis|tQ%21-C@&@*!Wo+zkzDN zzo>@4MK$yjssS;}nhvBc%l=n^xkylk{HT#AZsX-p1yr~3+Ng#!MGa{O%z=He2rfXa z`b)SBpJNuBS$^}RcMjE{8#W%hf?doQMtXJ($Hu7qKe+_F?SUGaEm#zfphm)}XpDpEaT3&21)v&M z5Y^)rf+j05!7i?*ugT=TM928ftMpLRI(`bz`DRrXg8S z1>{04u5eVv#jTN;mv}wYLu>@9{4uEerl5}Y`A7#{XCVPqxB@k_J5dcej_S!JQ~^&= zYvmob#IL9dT11+H+n`3U8#clrsFAsXoAD*8yk(V5$98(M|4-V4tJX)TDfwhgR>j0~ zS|d=4ssV;zf7IGphPm+s>Y4ElgE4hglRv`R#yUz;zq69SM?8h<`O#{|zpVGHuTh_H zeASJatVOMLu?*L{qo!`7b-(qj^%mCS`U`Y5hm~rWp{bf@G95saPP(wY)#)qOR zn2p*_E3p|KMh$V+nq~xwpsqK>Y}gAma?yAZD*A2hcGEcA5sI~AIHP_!zYa&*Z zX-EodZfkke^`@wi>5S^oNYr8*k6OGlQ01*cZR3ro&y2rCvH#WM^CW2KucHchg4!Oh zZ2EiDi59!IF*)jClo_@9%b@btu-EJ0bmA@S^*5-s;a|rXYHjM;z*y9N-iGSQDO5`z zp!V-`REy)*H4V;+%9jVV&m&R!8=-pM8r89A)YSDwHE;kb{}9y3yORkNCa?@ORM$}t zpO>fuC~H0Q)oTc9sJmbl`~kH~4x#S5iW;G3sER+K8WOX$t%Xq3Hm!;@$aR_# z(1Fkzt6@9Tjhj&0YBy@J-9nAT3kQTamrU7YDBajmVurR9PhNv^Y4XOjq6g9+| zQ6rKc^+BYIbsTEMSE8#PuOZL_H=}OM*35iAuMjH!J!;X6w9dfJ#FwLbo~*f91I17c zsexKMjZs72+S(lhhz~?{cz$#CzcQ{RL36VewV3vzD*h95<2`JR$y%5jd!rgY67{Kf z0@lP;SP(zj^w5^(+k4fq2I;*p01u+3{BBFvwD2DivXJl=)q}LHOnMNiAqA}Et@Z8o zj;Q>-QByS3UY~~Q$TCzDXL>h+nRU~s)3QneXdi3fDVSHsDk^UhGr;gj%J`5 zG#3Zs8q`_{X-B#rAIb1A@dfS8P`B$~%IS@&XfSFDMxe@_hHCIi?>hT$I{^*hZqyf> zCs2#(0p`V+9nB&vh#K-%sD^eyjYu!+KvYjhpw`4JRKBIChO9-6&}P&W{EacR|L+pe zT>OI(_!?_tcqdcw7}OEH74?{Xf@)yZ&gP)$glhO&%z-B`9A9D(26r(%uYu}N8&r8y z(A9Q1K_Cx)!v>hAtGQt$YWvN>)OZxtgBz&D6gS%RFav6cgHR(Bjv9f|sHv-p8mXqJ zk#36`sqdoM{}l*~BtbnmiE7Y8)B%&Rn{f=Pz*ne>zTtW1K5=(b@ZBDMPJPlJV@WLc zof-0>sQX4+r{a&q7vM$A+mrpjlt8TS&DZU#@h9T>dzqFVK+WA5tc4d)izj<;bJiC` z^>`=-<9JksTTr`WA8IPjU;&KT$D|iQb-0pCKnF})RK`B2-LM9=?T(@5>LKdj25lkphjjWYN#h;2+qbzco?<%6ZSLtv!E8I8%97qDuHT972JhQQ4L7@gDJ2m zs-iNeMOGWX!~Uo_eT=I31M2bW*Wav})Tqx1p{S=~MO40VNIut@LO`EnR-hKuK@4DS z|H8e*-wiN5+dj}V=qLt~{s2`_+(G7gQq*}7h)U0n+GcredN^tk7ekF)ZH%wye=7pY z7>#|g7i!KQqekQ3N^%?Y!{1@v5)cFx}s4)yR=dDl;>}TWiFgx+h zsCusqW&i6SctnEc<{N70Qx7v0X0+x;HKe$;DynBqP$y?6)WfD1Y6NGZ@-IMDv>w&5 zefIiM)S5dpjG+u)HYp*ItT8frXukO zbJAr&HJ}h`4U|NUXl0jxhPokYyR|~~U?{2qW6>Yy;CY;n8mXQm&7vHKYRDwi9M3_m zmG!6**k#jC+4wEg{Vz}lkQ;ZDJ<(7tD~Ku}0zl!V$L5Y);P1DQ=t}50o2?yvFZI#Q!ouRdQ7 z^Ao57-=pR>%>?sv!#r4v_zEn6A5bGvXrgIoB&xh9)KoX0$o^NLEeWciGpeT}Pz_js zYVl6g(49mTcn3ANZ%|X<`_UY=aWF6O?5K+Bp~`KInxcWIsU3qln&A7ftyf^)$b?sxQ&CFnp&v*jqo6LwDH`N&6+6g z5>O9nqZ-lxH6lY%4H<1+gvz%QRp35UkIrBVyow{R_!NEu;>UHYM?Cg4Q(iOF6t_Wr zj)+D*bKIr&!fsT7N3kgWY2yi}o5htDy%P~Nv;}YwmbU4;QB!r=#;;>@;?Gd|Ys@eW zX@cIf0YkL^`w`IoT#Bk-J$h#~)+Bxu)$-Ic%?JddMkYHde*{Ki6n>9$P-`gBEc1~o zCu&5SqIOAZ)ZBN*l6wA+A)p~Sf?8Bxuo=dmZT4>`tBdN%bX0+hZF~hr5#NexQ0zH= z&H_w>xp4;;NGZ$7omE#33K7^7>@68 z9_F2IPfS!#&)N7D>n+q2Kg3n|8olrTE%@0C=`R?{g}tcN{S5PB#s#J))vy=wA5aZ? zidu}{@CYVaXh!A&Rv>;Abv)1r1q09M8z?1|k`YwI?u{3ob zjez@zKmdVwtITJ!5Y!E|Z9E!v6i-8)fE!R#a0#_Y|3&re8|rD7aJ3nMtf+Vt>RHeM zwVjvZIDBocyN2jP%{2h+Lkz36OB-&=SVJMa)y*KLq%~%F2Y-j)1A~2eO7R@DWjQ%^!es6|* ziH}3gVU=I~ykEB;jarO;zxjFp-lq!oBmOH^@#ERB(=>e0F7xX6X1DofRt?lS z^Zjo2zvg-g2^zu!Hp5#iNId->b2Qh&AmXF(1g^zh*l(}-`F{95zH>swW3eEf*zf1e zLJuHNoe>ZEwtxsSf3Da-^ zhMzVcLNDMB;$JZWx1TY);XTGB9_tU&(PKk-+nArHD}(tF|=;v4ZP4!vZ4 zo36)YlfDMENC#dq=fxY0q33_ht0o~HmLo$t)Z8~m^>is}2-l$=9?muMY>0{eMB}5* zg+!>QTUyi+o(0vQFwBO&zs-pmjGFS2n2q|KcJ{(J%uRd&s-jb<2As8CMHPGxW8+)Y z=lidyq4mFRu4h6uBouY>6+s=joY0z8IVtrt*7 z?E{R7?@$GOL7kL|ZkUnCfGQ^ksv%*hMO*@lql@a;&KvB16>yjYedhZM^_2P>Rq;Di zK{0Nc8n>CpQOh&r+(tj#br@&2fMQ&0`~8CBtOR0lSqMtJ{C*YxBF33}?CLiOwc z>c%Ii8{b-;Tjs`in1=Mk7=Xd3`zoWRrY5SQ1{jDPP$M)J)zO)#>p#0TVI7_!VJoV_ zk+)5TNvMV`KsD$$>p@gOr%-eJC#t~PsF8VzdN?JxV?IM>M%`Z(m9H*piruyZ)Utk9 z0Y};RDQrdj3MylXyJiv9!aBs;VI}+(wKn|j8Iz+HTM(*Y#Zcu}Mh$rb)YLRZI_f$d z38;rXQ76+xR0|KG*1&nxh}=SscIOf5D1Cx@EGNBhR&_9{;!>z7sDtWp6AZ?-m>nmg zrfLg%`~NorYQSF9_PB!8@Hy&+k`GMJ+Mb$6kskHy22n1k9%z|T4EnI`DXcMZS-*6KiM4frhj%3pGN=QFDF+ zwVz+0Mk>#9lU^6KJKCf2yQsOJj-fcm#!ozF|LX)hLxP6nPt>Bjj^#1ph4~_KB>q7B zE)K)yFU^s93riD^^~yYiDx%6+jrzc{4Ydni;h)O)+AQ8Hs0QVI!~WOe3VUOESQ0h# zRZ!cj7OJNWtesFj8i3knlTioQYSf(XLREMPHIk1|<-J0c^8q#D@!y*30WJZp=3vy~ zsfIeiI-_nJh5WT92w|KWb5(M>XV*^|dwTJCmLYl`jYC{z9k`a3cw*r`1vW zye?|{bwq#chpK3R^+(i=i%@gC%%<-}Rd5c~kXxt`d5Nkp(R=eHT>z@Ssz%qTO+ag) zk+m7B;#R03Y>TR}E9%DYY`mX!kWC+k+9hK#8&1J;xE-~4Kj9pV^T9N92`1J4*+ifc z7Y?C%n&6|!kQp^1c~KRYMK+03*``-TOPNJyE;i zCrqaOznFmLVk_##<2HU7)zc@a27R^ZDH58BgHh=bsQc@qwqa+~8XAPda2jemr%q%l zE{OV~w;~2mztfIDb{u6dtVMkwIfa_*2i8}po_<4B5HGP=8-b`*odZ=)A4)6`UrZ$K@5&wn?4TEVc&LcGmAv6%9r8_$SmK%1jAecTHTef3Qk8oL~f#boFTpG zVK!@F)HzTERdGYqoOeXc`6L_Pg@MHHpvsAv!QXr6Bt$hV1**Yr5CIKIe$0y1P%Z0$ z+OH$5^HCp6wxJq&8joVyj3)gSsv#dxkKcey{@xj10X4r~-aM9kugO2g@d$iDz&wcF1nx zz8wDE_k`wR3LY+rgUwSlTTat~Yv_*UhGw};Paj|(;?W`g&J4V39gy4K`*r$cd5piJ z7GcZ0{@!;ox}lEN8K@I*3#vm$Q62gNH8QtR4S$U4kY6bKUj=0hH8+N!7Fj9O(A7s3 z@Ez*p8;)A_Kce#ej9T5>Fb3{HRd5j1fJ=A)Z`tch^Z7f!5MPOEP|f_V8PZ1i%}};S z6*wIA*d32rT$52J-+a^*tg+XBMKy3QYRb-{^4~)>;03BdA5n`haRK{yMvYV+mwf~#N8lr)yk(g!EH=}Mmhq~_`YDAu+8sLQad*66Wfx2%GssWc#BlZ-vOJWr? z*WH8!R8cUh0p(FQ)JNUW#X20d80XsfCM-hy1Zs$V;pSm;1hp34qqb+NLT0E-q8eBU z)!-(`E^(bM1T1EA`EJ2Oj11yQ}%d-Eq_zIOXLt7iQx*MX_ zL>JTzeXV0qQ!pE~e;1&pZY65Y51<-!9yLO*P*a$wycxm5s40s;l~cXE>+k(AsSXLn zNZ5z<@Dm1LR0T64Ju!s%46KX?P>U@=MYCH1P$LqKde}su8rH))7S++ks0Qpof)p1rJNQA7SS>RGT1wfzpF^4~)BG*)HvbWMPI zScRf?nOlK?7GFP%#Pz5azDF&>m{p7kus-qR_!c{(8rZ6;S=B$F_VpN4181Su#9A9a zgjx%iQ4M;4OtI@cA)uarz?0~!X6Et?YSG<7^)R%$zxRWN!l*Se4>i~8QETKhYM0!= zeE1NvVA>j{;u5HOs-Q-+E+*3ck0ziN55y5T8I>_rO;b?->g*3g^|&l*aWzKmp5Ca{ zyc<>UC#--eYMDjc7_~UtTl--i;^WZ!{r?>V@{@29)#5LxIShz06_!H9>th7=LN#zJ zw!*zw1OscE)!rC2)WcCDH5t|5rPjTu#dih0fB$!nfQIg+^%H6cW7IK6XgF%9YvM8N zhML>Lb^V>)SOW)Of_i48#-PfZXeE3Z5LRtU_;_58~c0za-tiKBmNRKg@c-ysh)s$h%aiw{#OG= zHZ`AQW}tes2g~EYX6EeQk4f344^g}0V{@}jW4ACF7opa| zGSrl8K^;W9QESS*OhBvp9TvdEtAJo=7=jUKNhWI_!C4;ZMNpFa~iEl#i5OEv9<_!>qDJB;RD%|x=6*M-;U`gxJyBP)Mlz$To)#gX{aMS}0W%XH zj6wJ_2H+voqPvG$oZsyAywT=*UDQbR#;iCERpAcIfyYtzzd%h<{BG=jHK0H@)8ZZpEzJu$%T zX)2zIn$u;d)gR+~fA3!^G(xS~hp38k_cCXELsa@u)JPph&G|*th`mOQY@FUE9$+nq zDkl>4cz1gd(Bd0_n!C}c)x8Wg5^JnmQB$x7mH#+S#|td#LM)`Wv&M9>2wKBM!r*Sa5)u zg3G8y=No7m9)fCcA=Iuqg@v^L&l3nEA^spUl%-MoItn#J?ePmnqlUQ4V1K6rjzKN1 z=ctkUhB`kov8KEe(He#-ryOcqSHUdU00XrD`xBUtb5T7mI>c

ZlvqqFVeNYH|I5 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 delta 48499 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 wBJ(f?*i!#_0D{%p#T5? diff --git a/resources/i18n/sv/BambuStudio.mo b/resources/i18n/sv/BambuStudio.mo index fd70109b7419949c3133ec81967379cdb209affa..81195f33de17ce17ac48e2a21ad1cfae52f51002 100644 GIT binary patch delta 48027 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 delta 48502 zcmYh^1#}fh1BT(fNg%kph6HzlYj7*>?ykk1#Y%B4?ry~b#ogWA-HJnT`QLA6`k&r& zZl9Ui+3}gZ5z@H_qc1xe-MtkjV2Z}4 zJf_;|IQg*yX2YeJ7%yQoe2q!*JF3BncR5Z146znK`sh@}SXd8}QoqxlKp+XfV+fBYqK+V8VSS9*P?2?&!uR(3^mI zG!E5}Sr{FcU~Jrgnu>#%5d^1@ z`V@>weEvb#WL!sr3fzfmz-d&0cTfd9MHToC+o5yFRNNjlMXvP^>k8D!>_Rp0ENZbn zM2*x>RQZAKVUrLGl`#>jhnZ0oXU7y+0Fz@~OpCoxJ(!D)a1A!Z=tsTWv*dbaI_C4K0Kk zxe8bon_w`mu-8wZM&Jfk#u%r~2sOgEYFZltF}ctmE8-Z8hSyMw>9O@Ks)64z5=K5_ z^2I^LQ(`Pkk3}#)7R26|88@Qx-NhLA45MpkJ`;$EfoIJsO^6}H(_jWHXXD*aLplxB zuuT{d_o5ct5e&fV7#Z(iB7BBwxc@oR;FuVjcrtW#AuECGSOCMZJ;uTm=gpCt4OQ_k zsC@0P3eG~^{~T4}C+viN7tCCD!DPfo;7DA8THM(#ngc24MaDla36)4lhs{uPHwx90 z)u1D=$G=cb6 zXeBN{&3(qJW?$z;4Rr<7kkv*txGkzD15o(~qefsHs-e?SbG;m+<9bv>cViqpW8?Q- z0xIA=>PFu+Gc>WW5An=62$!OIlY>j54ydUchRQbw6KMahC!hk4m;~oC>VSBOn)~;tq5Fy|INE)Bg^5sWN8+{J=D{4{Ah*q00FKRqiZQISVj~_Wx>|umuCSZ~!%TM^Ocyv+)}?{t(rmSEzs1Du5Z1@f}q9M=C^<1cttM;7nk3gU!2^z9) zs2+{QoH!qw;RVc$d0!Y?pc*z2qu~Nn!`7gBdJuErD^$g)Uz(2P#z@2qVIY=r39KMc z5j7PbQ4Naviuu9VSOHt38nh8};}ZmcJz`53~s2*KF_4F-jL_VSlj{C`M-!zz( zcqJ@|Jy0XH9(CV#)YR-jSBvWqfvXtzvsuM2P;(aW#k4dos^@7@=>;(XmPgHfQ&hoS zQ3dxxP3ZufkHauJruk~V0Lh8|#Cv>Y{2LSKLxL8^RZN19P}{`!&3rD1f;xyoQ9Y?? zZHyYZwx~tf9o4`=*cQj5M)EVNeBXD|kQk^AB>T?%CnAuOghE&W^WsQMh$m97@zoGsG&cO8mSxh`a@KCZ>?WY4f5kFM{f!-1@VG77~OgVRL~6^gD+6Kp|8*9 zRlFC~^HZpbE}|NC3v1vTJdUOPeBKnq@%K5Sh^Ig`WCdy@*JEEiic_#;fKOl6yUsNN z%9tjC&-(%*3u=Eiz-l-I>)}Ogg4rYbyg8nTTJ`hs0EVNcvR9zFe*&&1z6lFpi%2GY z9^N8;5WVOB;>czM)}n@X501u5s2(?q;`8RVy|o{z;?byv&Oy!Xe$*noY~%M)C+kNH z!o*Qcz5=L4S_vb&1R4@hfvr)ixeux*!>n^q+iDZ)#vQ2bb{y5GQtynuZ;TKStG4GnUWw9wJR*nHEn$t@hoh2An{R%uVYnOiA1q z+vn|)RHz13K=rIXYH>ET@$RTq-`6@GHDZe~EpChLn$>;RW_W_C;5%w$lE?9RU(2ON zjYMtN0}9V0ed` z+c@z}#aU1{lt$gq5OuvhYSjg}k-cm`GR6I6rz5}2usi|R-kWMo_?I{~${ zfW1)OTySclhO#kgPTQb{x*sb4DAdr-wDHB(ji?F_pf?rPTc{CujGBUgglZ`JuLOZm z66#}d9EU-87PS`MVk?Z3$me}@>VxX(T1I(|9{3KkVcR68 zAu}*3^*fsg=pl0s)w38$&CsVn^)N4L=!>EDcV(MiA2l^CQLDedy*>nW=8v=K;i!?= zf+}w>Y6^~{_x1lJ0)0uihn=xuGBboHQQPkpYTLZF=@FCryw8FOQEO)&YX2X^?wBEk zSsQb)1MzUw$fQhZ8WxHww^mB_zY14sAr?5Vm+z{XHgYhN1cRK zQu&-LSQAs@P}E2+w{Ah@JAxPSBx>Xq1-s^tYaRSc3KhfJYsm=WjQTaQe&V~M%6^FSt!v<8#51@~u^C?y*{&yOm_xV38 zt!dC0RKAIr3OC_Kyn>pFvFR9k?%#llA5QPncix>Bs5P)MgDGbNYR$M?2&iYfQ2X|% zjo(G>-{+{+9xW(#E@^8Z-nmW8O@r;uhA9)}BbcuHzEW;uwV* znmMQ;UxHdBn^61q2YBjmQVo!^oG#Y`Yk!xle*BI2EekP-_9yiC7%RVJ*}edWg#Z47Dx4qR#%5 zS!s~=e{ljTxGef(WovcRey@!h>gK4S?t)s~gHS!4VAB_&$_Ym`d@HucLpC0o&6E>n zt%$A`MSTKlX$xyxYbR7i-B5Em6g5)oPz^eYkMJ_8;$7Lz^@FJUZlOl>C1%7=sHbO0 z4%5KOIoSWo(0~LDT`Tm%zNk4LfNI!G`~&CVYRnaCK4{#-GQ>0FH1RGNN_-1?y9dh? z56i_!Qt&8LL#F2OdEe;Vn}_|cio54Et8@gaClgVNY&vQmZ$Stp5I#rM6Wz`4^S(7250!B)YSpht6|^7Kzze96c!F9J zFHjBmjQWBiuz)$D)1X#&K~w{(Tiaj|@d2pv=A!bs;RLc0IEFefKBKl-%7SK}7r`vV zyJ2ozfa>vO)Gm39YVcbd4=7|B9uqZkL8y_-i#qB{qwZ^fG{kjU6VTA~Llra)wVzj@ zM&JPIq`QbJ;3H~vM=xx8m;}|pY^aJFVqWZEwOiUroSs1e+W8mSwoseO*xZ9h>Rj8v5Swf{p1 zC_^U9jzv(bv@?3EA9dqARKDe?U9%n4WEEJ(%e@VwZ_U? zTc8fIK_y*tCeI)tH3>WIg?p&Q_7yesu}hhrCqb?1^r-7$s3ES2YEUy9ABEmx#+;39NNmK(Kq89I4)M^hbV|thf zbzctD2$n*PY!%cF)Q&asE1f! zSyMq&)P3<$M|%*eybz>5*U3aci>e5!Ar(+PsgG*muc*b+7n|T&Br=!BZvfz~P3Kdt*wi|QI?!tWTOf`2hj$BL+D zMqf;iGg0~XTOU~?S1{?B@r(9zZi(cBtlKj%mFq%x|d?NBFFH&lzqpjx~Xm2Vwt zpC3o%zk%8f4^jDEqo(c)s)0XH`Tc8}p^t}pO1c>cXsDW^9zH!#`*SIV;TqIbyu|YO z4YfO8E;}ve2v91bpz9o)~JS#KsE3W)DSO3jmSpS6uh)XZ)lF-%%~1$ zL-$t#c?jsnWmpKe+V}_5qKVYVm>Am;&xq>z6x7<;iE7AM)X?5U4gEvwTMQ!p6V<_> z#wK6(#`gK2j|3G|9MzCom>Jt(Gn|6D@e``$k(!uKy)m&e@hq4N2iWv*OiTO>R>F@M zgr%FB#n&3uzz$7ab29ZIK|PplFDyqjs5RGZ&dzIs3{6)X7VRQbtD6-!G%%h zNJY$p4NxcFWYkHy+$EqJj-ZC_25NObz|{Bx)#EtL?G&I^b4FATa-pslLmgmcZF(hZ zeN+S6pz`%Yt+gSjsddK^P*3ODgmsvn_+C^CpP?ESrG;r&98`~zq8437)V9lK)0?5r z`Yx!B{bA$FQ4Ktfy6-G~)xs1w5VN7y!WyOf_(;~u=Nu#+ z+}aHF6I3~$P!;*wnDjtYxd~AfXGUEwfYG%7ixSWmn-x(Hqjs1TN1ztrX4H^BKvnP( zH6kCaKT$mmY-`p;QdGWlsEV?qMko(z3Ywr!z}6T=`@aK$qSyRZqd$S!YVs7F+Fb%Fk_53WVLyu5re*6w*w^T$o3kgFA)W&tF8zOZy z4M>i9{FX=cpc!g0jY0Kr9%_{@M~%=H)UMcvnz~b{k-CjqtdCJ6^&U%Mq)zOA^`KHG z)1vmM17^N8YG+emPgF%i@B(u`2~}|GEA`pz*W+Rw z*^T}G8-c9decmq=Y(%xRR1Z^7HLOCs4r=kNzzVn-)#HGkX1ByZ^*k?Xca%U)MKuh? z5jK50s>8=nyY8_|Kp8)y9+TO6nQiwAYOdO&4vs~r3a_Cmcz_z>cc_sG=xs(M9%dq* z49j3y)Ray@1H-_{awtKK~QYqAHC+%xzuVO}uY^)3X8tOoPf}D$?7b z3L1mz`5&n5wAiMvKy9=2Hhl}KK|4_+cM&yJ4=|$k|7!xhNcf0aJe>!c5$S;{_;=LM zk3m&D6;<(E)Z=vxYTKSft?D4wl(uOrR7JzA6Hp^L8&&RVOr-rEPCx}8w;9gc_yg1s zKey?hQEMd1AoB?+Evmrss1dA>>Uk&B-1b1t{ZQ+4RQ}c0UFhn=s{cn2mUPYaP`2F~YhDHRlg71i#vN$|2@)oCno_hNyF((-8K*=4J>98v2>2 z3g=tbq8hTxdJ5IETd1elbJWA;BWeVb3^nfi~~NMCme zXuCZ?wJ_i}(|~B`M?5)Rz#!B}{exOO(TAIc#6it*a@1N0MU7aPO|NX@El~G&M;$<8 z(A)nj2&iS7Q3dSBOn3%0RNqi@necZr5(P0G@nWd_ZBg5@Cu;vsM~&bbRKs?oM(P5p z;R!~Vijx{$Cj$WuabDDog;7IR2~|N&YcreP88rnxZTetT#p6&@xER&5O{jbaP*ZXm zH3IigyXcD-Xa6M_X@)E-YR-zFK0a5ojJ zs^T)30UM*HXe4?+|C>P|JqdrI=H`|z;8)ZXBphvqJQTHR>!B*_j#@JVtiPc;Fc$rB z0cve6K~;DVHKG?$BXkd4oougdhA-$HFk?){w5SSmViv53DzG1FZf9X%T!&RK(^&KM zLx0prY(+KnII7|csHwhdeLR-^uL@p}pq>VfGYtqvwYUgs=qjNKY=vrhZ`2eFM;*1J zF)OY>RdfYa?nBfR{X~sS)bS>NO4L*o9?$;Q;%H5RZs?1ef!0h3HaqF7U-G8RD< zSOV3fYSJL-i9n=&*LVb>Sjrt-t-4v7V7A2qp%VU15W#bc2 zi)%J|Cn9QS|H1*d&!!ihYNo0xDqmAis0lQ)H>1GX0#8BdYqAI?P>c~UXT6uwmG3pGB2>ZVr z0WGRQ*bv8|4wUCsznP{diBJWmvGGh;m3Tf>gGS*zoQ0XO;4Gh0AKPF~Jb+q+pRfo< zo6T;be&-hgy|6uMTir(u(I-^FsppuU<;IM}t6*;IhqG}#dMD;w)6<%$ctdLooI<=k zYN~zne9lUYj;?yNg@A^37iPmNs8t?mzS&lJP(5mi-Ek7CVSx+GqD+K`h^Ir9_YzCt zdwadWLbFE7p>{`IRK8{l+5g(tZAj2!>5J;w@2H;cL=D*!)HeNw${%x)X+SDePeV~_ zBtMqJBG?s2AdAfTiYh=z=akvoK1bnj6I**DZ0i?-Y}JPE2JnOp)|m4&e)*0&i}*bLij`~+&X z-?Z_xD}2sg;(1Xc^BJ`mqpdXONh8!$jzFEPTToMc9<>c$phmzASmkqq2!vo-EQz|I zy^Rk?Jrh=AIy{PM`5V+?_5aiKED>tgq(zNDAscUpg@_MAZR?#l3Zt*~^1IG-0;+Hg zs%1w}ExUtZ_!G4z!q%8)K@aRed@O26zo3RV(pvM8EfEG0FNiu>8=y|k;iykkQ&9I! z$Ee!>O9`k);i$9!0IDZ8`ZHR>0NLl-o{Fb|7C`B4~``sYm?9W zM=WzOhYVp11Ih=Kj*Ksm+zoZ@j}dn_xJgnXHkJnSzq2T{9Ug;5ICR zfk%Dbul1M4nZ#eCK1Gi{W)|sM)S5fz6417KfI7LN9XAEm!s^5apcd6x)Ck2pVZK*X z7BwX!QRl}Y?1m386ziNcYhX00Lw}+k?>|r@k?)jQ6K-b$^GR5Z^RUus^I`NQZXurV zjH&PpYB$6_YaYufQ9aFoEwBx04V^^Y_YrI3x^pI9r1Rz+DT5bDZ;nUx{Lg>E=jnz|@%RmN_wtp{BeRrlx*ppuMmNGZWu}s^}rA0ne=OQ3d}%9Y8T}o6q?PQAc!A z)b+fmhLlB}d{t3LbraOV)&rGqGd3BZ?THDAPewIh6{-Q7QTOjbb>J9kgsyjDXHPb7Mr*jWMl> zQ8$KQB214#SPXSvGt|_yK~?lCrous}5n71q=sJ6SvuhI$qZZ34RE2Zzn*x@j8ny-1 zlk?UasDd7%=J+|P!mp^2iTc1ioYG(>;`vbbw?O6Vh?-(|00FgZB5Kvov+;-6l=wST z#+nb!B5I4(i4Vjwcn-BTk~}hIMlH4?sD@QXmER0Ca=)UcrU%kd*BMMeJsgcXnURead%9Q15oG6Qq)wPL~s9}C!hvg zK^624D`4a&_9#a6Z~*EE9gnKus7*g>y^lJI|3PiXxKB+3vY{4bKGcX*LG6;pm_Yl# z9f2SmjKR1N)xv|QijJc<_ZUw62Ij!=&)C1X7x!VYzs=Wx0ndHT8REaZF#pma*-P`I z-LF`e^vthJ`NPrGkc}abh_PLOs&LzDGgtdib9Wdu6&Fz>bPqKmpHTZb${RCMrBUe} zQMb||GxjtmmZ=))Bi)x7Pvl)>%s0y=UMl6cd=Q{08!0C!w3w^8uP!$hG zjnFVug=0_+oru~M({1_!>r#7tmAxL0smZq;^?1L7TFj}x=%X3?CkFww_ynqj*Rc$~ zK=nBHS985AYGi7o8qgluG)`BW-W@fCBT(i2iP|08Q5Angb*SJsbG-<9zyDj2fC{XR zTD|p9Eo_OJg085i+z`}uoQLZ9Y7E9rsFUz2s)4Uj4G;Kk7HLA%8p?uNtT|B~t%z<) z0*wi1h+R~{zoS<71XPQcqNZjAssXF*_3fwzp0)A2HvSRIGBkld%voRMr}_Ba0Lznq z2v)|EKiU7G1d>xtQLKXM`9##oHWxL-DSUq3KR5`oF2|arXZQ2-ei$_z)xb}vZS@Va zV{Csv@1t9B%tibU)HCKNs)J5|Ybs0-;O7lt2x{&MpjLG`)KE41jKUksC;4ugo7Ks~HlSUaJHyf><%!KgJd6*U60P(59WYUm!+ zXTi&;j`+u9mo*>|pMdO&8uHVa6>p%{K-5^~hVs@1)=sFQ9fTT@ai}R+j0JEVYJ2~U zT2m=vo3+*)ml9tZ+s}1&5~vu*+z>UcS%jrgPr(JKA=`~=ae;Vd1S+8BwibqCBUHm< z$2W^H1*RvS19M83fPF{@eyjsb0jot zr2uM;RKn)i2sHxxPz^kVYS<;zl-#%JFHz^q2iGRVOk@g7i2CG`3AIn#pn9?p)$-%0 z$Ld8?#gAE_ILHV&07fPd6|6iC9 zuj5RNnA{vZ3s9?i392ExF*9C4JtZTgFjEwa>Odw;fnlia*$9=dC&tqLpG-hQyckR1 zNz}HCozl-~h7(ak_a1-6L_wy)kywxTChUW;Q<*6ljcVX5OoD%*8gd4;O&_2}^fP)t z|Bn!C7GVlh3$xpJSyaXKP(2-pIwz)~dawaC1!qwA-NYdL2S;Lp5I^s`VDoVt@qDTM zyq_~1#<)I4Bn=%s$c5@@{k(r}mpGlD_lt*9aWLsg(wiR7#u3D$XD|g%#ks_TGWt1_ zaW`rgRnKJRx+SVXqfk9wh+3SRQH%E=>gjkX6Z>C1x@j|hMlHS=nN7w-sG-b&IuA;q zDr$-;p>9ly z>SHa;A+ednMWwhqK_7d7YI(pBc7Tq=L6V%9jKpj+3 za%)ku(H9X=0h#ldxy*~2+me_EtD~l16zU{ffI6TKq2}~CY7xIdjZpNw<_HhM&cqvH zemrT@1M}JPF)H;t)d{F&jWHc|LsdKrHN@voJ-d%uT+dJ=^d1l4cT@upSI_luM zi;b~l0YC4f+hQzB{2}U~%UY2AUyMLk0_xF5)Er*JDww2@pZ6`3_Nbmu!Unh*Yh%2^ z=H%>vTEtUO9hrq1(Y2_CZ^H?=7qv*M74h?aGSa9B`(LYkDhY*fIchCDL>2fCYAU{> zZj2IU3QmAZPld{t9aT{t)T%CwDz_%;4hxp*k`e zDc5xt6421EMa|&`>o%N2d@rg2jm!9XKgH^RUJtP?>EWn~l9e?d-7=v@t|F=Xt8x2X43xOVH2L9w%L2sQJnY}^VG|UI#{Zr7EcSzj(t%LT!rOuBWenN zpcZSE3Z}>9P$N_eb$?51KlJ|n|3m_6*&Ni+u0R#M9yN5^P!Errm<>PSN=#qT%;kAp zO8gn>+?ZI&EZTdhwek*C-e*(;{3`o--(gKunf-sAgq9?zg~h6vhes7uLmp!gzQUOp ztE#DJ6}BK=t(rN4H)BrXJ5VF@8f##x>gF?LPwY$lA!-Vn)G$-tsRsLBt9K9y8iD#X z&4<_o24e8Pw{2h?@JisKpthp4naLFc$Gl zsHrG~Iv3nh1aw17>tM`Hd=6&7^Qgu69kopp);FsMu0rju ztEdM2jXH?FVW{?h;s)kvRRJq-VJ+&@={KxQJXRw=?-z=iUh%bN5fDj*F@AvEx-`m zi2-;Qb@DwzJrlmz^q{8Z({dWjMEY9PNL@#j@7IimYX3(hpa#T8^&lB)^`}P-aduRX z^J66}i9t9StKmk}Tn9Eci!KPYRx+Z7x;SdhG{%hB5!IpT=>7fQ z{Ditc+d%fehPuE&Q&1V)PrN2-P7|{|b-grdh^yOpV^qN%PzTH))QLG0Rq;a9ecMqZ zcm%cD?_dx*gG_oV-Kdu5CqV_)LG`GEwJ)mR5vU$aKt0{2qMiYNq8e}p)xc+{ia%KW z2b=U*sHsbaYETHO+=4Cv4Mhpm2ZTzv8QY>3U8*5wAE!l)NM6)qxdp00<4^_vfqJOS zvd%*--bJVeZ9sKw59(Yvg*x)x+XS>PKcEVXFx1=_73&gDYU4dni|scXpN8teGE@WB zqVC^>YWNOR1NNd$y0fS$_=2i0$uK|tl}vvBpMVNV@S9onDXaxi2TmOf#b&7eKLvGE zAF|i4qK5Q7`r%j9dGP~PZj#}C&R-aeC-DlF#HGLM^8@?uZvsllF~WR&?uoUDFToo4 z9WzsMwUOowcSrkq|A=fGsv(ocn2}k6YVc;%_S$QGfNEgiSTn^bQTG+V*xLUU35>?Z zO2EHSi}E{aQ6?K_hAunmT&RLNNIK#H?1@^G1;-n!qAF;O+6{eCQ!*K~NT;LL!eVsO z5C|ur#c&1H(pRVg0wOgpRg$LL=(;Rx~PL^JZiBY zu%4dC{#OgHk)Rg6LsjgXWVTg2YgSal%A$JE1l5oZHhlzY1m@fHO{hh74ukM6>VCh; zrk*6I{OKpN|3e8BAwfgm1=Z4_sBN+ZwTh3T=JqP8;QRLaTUPqc zPtE_0Cs0y;6GUh`SP!=@>)lfZYWaGbL z4&wb$Q@RF~|1hc{XHoZEw(0kghP(VezRCCnRbjvkv$|uVZb*cxC^c$rD6izJ{o&X@e@bFKUV=q89IBR719+?%#uI;4##iIzN~Fuc5k6f)0|e zs0wn-Gjo{-bz>p)!_w%@J*wg=sMX&LwVykq8t@zHzUioEz(Q<`D^X9$c=OHmMDtxU zSHUE-;z9w`5xW47<1W-xj9Oq?yx6+Ydcb-CRq+GsM{AUYCOtW(;(B(>h}AF%2e z5SWWvl}Au(;W=vGCthUCZLMnUh`D_HxD7QGyA~UdS}#~{qo($m^@lai5|i$xC6J#C z1yFO+-8#(rhjlU5aMk<_fd;lA;!Ic55YT2YY=K zCf5F+N5EU9r~>w&_V)=?j~?6fSEyC})uzWE2275 z%cl3ih}!={325j?;W?a%+UFftnYGZ*y4-rv>i4H8r*~G=p)qbO7WMu&n-+qM`&48%WI;J;^wIBGXr(Q zX4DaU3DuCR*cb1hDyqN9{BB1_)Z$u)ItLD-uHVFd_zHEvwcqSb4gda!fQBd>wR(4< z8gkgCUqr2eyQm(2Lv71wTg+6&Lp^*#P>ZwxX2&Yn5(lHE<}s?_&Q`M~0XlAr>1qmIbasGhz>9TN}B&fMAj+&}^sDhhd zA#8_DaT#jvBOfqd59CJef*z>yuiNyOsKxGPJ!n>O1?IZpWA$g{fW;zWxj2f?6f)A{zCQe9yY_jQBz#$j47uX zszWcZu=f8~0$RQK&zd2tgawH=LCx)K)V8^b+8u9E`Qx86A0{)RMy#f_3u?;7VtU++ znwmSPp1(k?g&*iDA@+IG;$RFVo(U^qBMidTsG&cF%Krql8$P4vIPwMaiwH?k4ZMdM zfe07PoX0>d%GB5%tDqXR<0AWCb90mg_3$j}Ve<@iutdIOe(f$bYK?S8?f*WgMLNO8 zS7R`9djR*5{`j(K;L0mzTW+)7KsD?KY6JqWvj5e9Bv;Lx2cx!E7St!7oTzP=54AX} zpw>oXR1ezWBJ71~VA5-5uG65($&bnxhPtl;YQ$=z4z{)~fvN;XVjaAWnzLNj&5aGM z?NBZ5g=+99)c&1>s(2l0QEfvVEJsiybsDw!9-;DoL7kk5ZkVZb!w9J0DyV{+qk7sN zH3fZ91x-P<{7=+bz6&*F$58j(NA>V;RD~bx^(Z&ZRD@t&(sQDATYJo|{lCBjoO7r} z=6}l^7|Bru6-O%e}aHodJ{FYf1^g=JE~{#?wf+sVG!{Ws5R08m9HD>{!y48r=zy#In0EwP`e@N z1M_{tRH$85^#S`o6@j)kVKizE7op~U3)aFDsO=c?(4?nFRagkM_{!V#YN(1@p{A~b zwUs3AULGoC|@$W7Epyh8QN?~xgal&A(5MGa|9)KoS@ z9pQ6OBXt#3&J)y>enI8;xsT1<#z4(c64Z#~vev>7;=M5pXQL{-ftu?#mGO@9cl>UJ~i>gs8yXGH3F4UBh}2>)us=@ zAkwFxrfw5zaUR2L_{3gM^vpCUKlai7Z$zLb8LnVa%=))!d1utnjX_mB3$+H;ST~?X zY>V|AYB4@X&8`1)v&iD18k`wbULjODzo7T~KUD~5$l9WA9N}HyD<9Mi;Wm9QYAViQ z4*YI9Tf2Q?MTP(5CcNAQ4+ zk9}o&G9NXE>rmTk3+g<0fSU6c)+n#d+DeD&NKVwQD2{EgBD#MN*hHYMk0E(uz8L-M ztyu#R-e)!tYM*A)&!hKDKy~DA)X4robvWjGlRo}E`(GIr z+JwKb1@R-O)tTiVQ&0ia!=^Z9$NH#>$DkJHOw_hohgwUUQ9X_R!E_`MYHCuTwqY@> zfz>~-|HlznPJ-q(??*GF^-%@ID&3zj548r7gPI38cy>w~_T z`)8thdI^K@31+~^-_1zo#2Lih3Ix>CN2rI)8`S>)jv7+`AAZhOjDpH{0B_=H)HYiE z({vylGZR0CT9hAcJcKXE6t9AVu|I0p{6I#6|NpDc-#I}-YE;EMk^&pp@zqi;* zqgHt>RKCWjwbK%{R(fM@{0%kN+wJvRsI~J3)uAZ<{@yte8@<2(m!5!nk`2pZF6@8< zP!&8wwfH-#;y3~R-u_O6n%e@Xxh;#Tpc<;Yx;Tkl)d-&ve-pvqJF0I)^!I)?3LJ!NxV0@%9tmLzxS(D2V0^#9M`$ z^JA!?|A1*QW;9b?Zq!<;9L?YLdRC7F4RIUHi33nKuE+9t3^gV3qx*Xww}+t4`m`}j z!wRGF*F*0E31%Ta3f0gpm>h570Q`!2NcD;7nxPyU)8G48JR7yG_M^`D`>3ABkLB-u zqzXk1ac)!(O51o<)Z?`osv`qYi*homVe?UIWGiZo>_<)IF_(b$`yJFLon*27ytp#i{@%CImf|$x!Eyb)|J}|u)Iruco|%##)|B!6ouQ-`#Wi>UD`K|< z{!SBg_Yzn}AUL7F_f_sORF7*W^7lS)bj8xd!*LjXM(vV;iT%BAy&gu5RB#f1?>C@o zpw_}NJcegb9hsHX-}@c#tJs)$yJTL&T;~{p5hPSf?(cMFyIe-?`!Xs0y?-cJ7qzcX zp%zgU(7WMdTgF)CEtKkgP$@d&9W6UgO zTQ^31@K}OH@eXFgR9V^o+8$L2^u?a2qxTK!p_Db7zxS(`rBRD?30B3sSORlq_ji_H zFFc3IbNG8tzt^~lc+^mT?{mXG)PWU{(;VS(F(2_{Ioba`2-GA&b9@|Ep)Z%e_Z(l1 zYLI_!bFdV}gTx!7Mkq}lfBuJ+eD@4L;`zL0zaP)%?|dNs8g+g=&TkAYV9FbSl}O)K zfc>wYL@wxW{x`g+U!nSl`ALsg*x&nG?v+qemA8mFiZ`P_@q;#g6txB}qedts%dS#TklZi=I-$y;wp}xfh}}_h)(>^EjY560S&C}lUQ`9= zQ1?B>Nca_Xv<8$g@kFTnsZi;msPaoA&mPyQNI)%Yf@)Dm8}DV~!%#yy4mFo|P)Bd3 zlBU2sr~=Dl5LQKXs4GUr(Wr8#q3&CNdKUbNDK)9bya3O6)T)nC%G?-?>QPoy0eMl| zt{7_WtD@$#CTe8rp@y~xD*sR$AB$?pEL206VOCs&8MUZx640DQDs3{vLbWs@>ck7S z@v^9V)vfhW4Q!4-umfr&+m|tGqBp8x<51}_HEKC_CT1_s{?~=!}_jzbdN2378U>pz<9=cC~X0v*R61g|RER zW)bDAU>+uAP(#!dHMDIpBX+gULG9lo=!d5;2+yKM>@DgXh*Hsff~tk;z(~x4Gf`{c zENU%XaczbtsJZ@(>QTx{rU4~TPq_-H8(N_jSx?ksdKjuF3sCp(M|I$-^$n^cpYbI6 zRW>7V28R)MeO3Iu|A*UfoX8k;tm^N5-v3$6-+4!dt<}v(sns>iht%t+5y)TDj9eH7 za9?#)#dT_#>rGHo+X^)T{ZS1bi&`@)F}?QxP69d@9-(^p1vO_;YMVtCg6cs5)Z#3G z+J5a(Q_vZ;y1QaCbg?qt!}b_j$2{ET;soM}>zanG#3I`NdkE;ppQvrote$!9cR=;v z1U|xhSR0SlH$6<%z~oPdn$sNCe5er$vz9{bmS0dK(G0b?yP@~b>Cs@b=1lEsuBBNtNXpZ z5Tmg@dQk;sMLm3q+IR!hHtK|`cnPZFRj8hZTQ{NB#x~Tsu@hC{5mf$@s5Nz=v1=~e zv>EQ%43AMm{t`7MAFw>8XkxZsTbxh47ivxuH8nlXfaQo6LiKn!>O`E08uAsWiua*L z=D15hQ*aVBw@*;JAYwDKiW6W7;;m3UScw{$wWyx#wH`q|WKN?hypGEE4AbB@n;zWU zbSwud-OW!xbK4j-_q|XpAB&or1*jHpNA=(UD&I{^jqgw+m8gYTTtS$Mct+F|R6sSn zGOA%UQ1>@S8tgiKY{G9Q!I^~`npbqMj{>|FQp0U^_dl;Tv?>kPmtb+O?PUSXAv{L4 z@_MLRd95ZrjCXVLydqwTvYHV7K-xC#{|wwvfE&|ddoGkGtXCNdXn}iefm%pOE zE$BB2=Np>dw@!u=Zf*-`Oku}(*QD@i+|!=)ION+!JQnW>G_W#h7i|7vq{Zhwkb4r? zy1tReDjsQfo-fV zoc~Y5rcy>A?}*$}m2&?3>PrJ}b6-k(ZzEerEdKr&f8B`RVBiAZwsltir}B|h_LTPl z+lU6_)2p|QhY(N7J@Nn32>$%1_i9htI^J)H@pq@3F5DAJ9jR^JJJ^G=-Ey|2(eND! zWAKG-WeVc|zEV-ZWFlv5LJC`uqC6PAS7h=ZB>f}KrHnjuW*714TpdS4^?FX;KMA)p z_w(~#0{&#a$W4L&sZg1R(3o}#@OsF#@${rA79~G_?9S=HdpQM;;yT|Dabl7lleCmn zP=(545#Mba*OL2|acw;Hy~4#_gP8wnMEC;M;SU))yQuIM7cLS1lbiMO*#b%tZcUzq zHhvcadG8|a-`5ZBFGf5gE~LT*T)2<3Df2LCI+7m{A5B=VZQB2OMIv!8Evu@`6!62Q z>)IO9XV@DQUr+c7c_OGl8d=k>nQvU<+r{3Czvk*B<$7uEor8PH*BZBQeK28vb&|OI zD;4e}P@UWS|Fig1%5@r1i!{EQ?j+~^JNZhG-+NK;d9J@E{*CY>uGO_8rjK6_NYj(B zGwE~5!?y&SOO&D4O7d;y`Z;}3{g%inB3HO@nM^}@>$R5j9^9-~Wy0Hd>p^vhLN3!g zz4XNU_w|bF|GuJ9Mh7C3?EM<$WxT`bOyPe!;ALk1>rmiDn{gI}oVOW@k+}lzCuICU z1AE)nAF&Pmi!?ncyK?VrtigR(Y1mf6#cW=J-m4CI_3B_fhxI8t_}}?|Ny1GE?#_+N zxv<<8aD~DjajmAg-zi}mI)#eHlK!7gdpY8g_UC_kIM0sMK+>y`9!%NmxhWNHCCxkk z_}PH>;`c$Ee)a|>3?_qKF{sp!#&stA2ZhwP6?7&|zd*Kt_Ym%@hn;zkw&jf>oW{1W zIAtv)&o7j9nfq6Bji2he&So;tC(|_wJ5L7v;kdPA%FhjJd9Ne$Z?=%fgr{r;BuP3fgT6#?-JdS$K@bf396On&kffTl!NL$h_ z+FqQYkbhsfY&bF3UfTO6+lDNsz$5k^<-bFC6K}pMcPh}Z(KcTn;t42c9gQyOl3^AX z8**_t1*RjOhzvD|MaX?pi*2Dv;vnMUdEP~Bi;w+#0asDkPtv#W&Q6{z zR8kWw@s3A1-*KwFZzSRQwh`NHV{cIgU-&wcXv99Qd+XniLc4HtE#76g5W|v*B#P06vP*~-fIMDO)20Vd3KY|U*UB!acvz} zYZH$~C3>YNeG%a#wybXC$;7>-h_A90pCx}k(n2UN8SjMJ{~5WdDL2=~{bcUX1@He# zL80eJzvdOsq9WXyoAt^`-X^^NeYK#1(l!#CinDR;7t%W0ia%3vciW+c9Ha-3N-CYr5OKO6Y>)tbD6xE^YId&m}k3zzU7$9pjEa@@a( zvgX^y*8NWzDr=hRe@^0CTXGv~Pt*?&$9k>gyCGC`mWGs|;$Lm0ttkB8myfhaR8p3N zINUeEUi+Q2Gn6raw7R6#ww=*^ohZvKK`VC=_=I{L;@!y$aj=MPCeqsxDrwUO5-)2T8;AVSDNC;u_=NO>gyW%)_z3;` zi`3k}H@Tceyqj_HG!CXmLv62ga~jg3b5j@IdNtwZGB(@>_i;Th<;*2Kllux0-%LYS z+n(Pizg|1An=N;UwCm4_&CpaQ^B8ViW_vV@@MrHfj#e`NL*abu$NM>7ck(}>ciC*- ziTIefUW>?=fN&Jb`@%a0*D8@dko01t$HAezJJA^TGX))|&?saoL|Ct$T>S6rGKGZm z&P<*Fr`Ti%w2{QLTy zjQwpPr^u|=KjiC91Nv}{Zy7l!Z2B@PnERi`d?a5r@)zTJd@8Gojfj7uyitU!@J{D- zgz+CsLG5fs6-f-@eUf-XF9Ro*u5rVBD#?a=?c%+W^Z@RiMFn~P)5F5t_ni1Z(wlI- z4*9y1e>@E=p__TlHJJH7NJhQds3Q9sMh}J(kIuDS6vAK3bp}wtWLr@Z()8+ueAmu< zjj$t7iF-5iUQ0aC=HE)5!Ia^W-jhybv~{@|$nXd6aNcLQ`0uNbEo>hNwYXt0@z(V0 z9r5bq>x%q+aqpEM`Ry(5n~qA*_j&$(-KCaBY&!*Nl6z5WY#7 z!@Qh!|8=w(?%CFzCBq`Zzj1R$3X8yvsR+-p`KD2LA>NCK>z2i~Q7_0-iu?sh9K^dK zVZFLyT1-v3{IZo(iTm;q{{Q~(O9AhA7bIh4E~cQM_+_$1q_1>Eo(d1`Ur0rKc| zoolmb+#1r8sX$)*Ir#s-5|ZyX-aBnWGIJ$}au1W|ckXf3{Ji!CKPpXRD@#ncqzdK6 zlw9vcC3;;ao`Uq2$d7THtaysN^|+RdJR5Nf74qW)?=^w)HWBJ;?>DLDzm4?!Hz#b$ zQRJ7Hyw@HIT}5aV1;?O(?EmZPJfNd0lrX%Z2}47uKXWf&fz>cv zh&YWn9`SEgd@ww*E7Vcar&o|Tl^6wfNc-ie4f{%n^oe-n8T9-|ih z8q~fv5>8uu1~YBoT;zgM@{aDnddNT|&o&9dQ3l^b%E_Xk;01C1U)!eB417c6lZhV7 z0`8=q2tJa$HZwcO$Dxxzy#k%#cssC{Oq9ldW_AMc0CQq_zP z^0hZ)UZuzO$ui9sBAy4n*l?B_7Nz1z+7tYs=3n#V^>MMXU;&>0Mu}nzV*3G>ASC~X zsNbn8Lu|~#5WE$66o)=057lMqa3Yy4LoBTrAE)$KJZ~dO^E74-dSTDk1$xX1qUWy> z3mLx1zjvcD!ndx%+B*prxz`X*$)rG=@7Uj7bTteDm(S#}&R zp--6(ccUx<6B~gS_hkIaP)y1a&W5~tY(C>?QS7ys0zM0xWE!K}GHY^&A&%HBzk8H@N@x^#!gF)=UU`<5o zLTpMj?7i^8nyK(wU2fK6lj(~sT&R{F%!liH^EapZ;t1mq668vsuj&` z_!SikA@-tvhCm2$rY_5;GqOnR2))fc63aclk=2UcXb5B&&y0=;$! ziY-)5C9QMNKL{2Le>Zba;WTHLSOt0u;q{i^4LGmYNMj<6!H~khz97B@`-&x(Yd$z#d|6+A1&H~;*Y@Zk6Q{DV)3s_a+D56*m8B&|hm30vO zPL~__zhf3=8*xZW_)Umq*^v(E5z$?NFWa~-C#05oc{s!`!D5W1;1Tdvf@grIDL#jK zjUKdveMtgeS(W^~88DGXxKk1Re-wyVedIoz}%kPnIhg_4v z9DsL;!|`J@cY)gxf5p&fJxm1b^u;>S%Ovlmy(|cCqaH}Tkp4O43HKG;1@!Icip7wZ zA+Kfp_+MkF4~;+?Id~ee>>BTA^rHM)*ZK=$FMSL9UqR&^h+~)9L_5F@y`aZgvJh@ARiY-gLT2*g1x}^ zfq%xpQQ~mwzW4_6k@zf*?oP~sMq_*sqO;+K;=yPgf-7dGSCO7r9(+6XD(2jqA(ZFJ z2as#xDKx7gnn-SAAOoR`5Yu(IIDsM`9|^wDtw!z{{!QLo~GsW>oU`y z{0XAf$oaIQ=L224Idq!pjfF3E2>us($WV0L{#@2upI8WUHSa+lD}Y)V<2@SyF*l-5 z@bfIGO%%X{Hvba4YcUdCI%KMQAs{2tjRlBJN!vY?H=mU<8xfPIcY6=D^J z{z9D3ahe{{6MIA6h29l?nk~%M(gWK6>)0glJ#h2EX``Gp(e`|gGQ_M5EJd&`pkaPs z85E=N!}wQv+zEtwkS_;2z%dq`dBP!0^tk5qo#b24+z-DHF%aH$@RuBLjl7O<<>%i5 zJQk8++aX<|ZbS^l#oFo;Z^b{;8wtD|2z91z2{$|WKz+iKJ~Mskhsi=LjYG5PKF`np zAO^cAIYAc=f$$2UGYmv4xiSK=U>kg1Z(;gn5G)6N1+U1HiY37bM{~LA9i?a3TJlBo z%<>tDGZ3D#pgH2ZV0@2fB3KoHs$elbPcd3W-ZL{@c*NXrO6XEq@S}WDYlrUt=v{^* z_E=*J=DwjmE`LVy6hbo=?!!L?3}YybMZf!qM)@33Ti=EVinT^8JF}gb89**3uhjwX z4`L`WKfMY(P*YrNuJSy@4L*yOLw?P&U0muQPG+zlIPXM>S&YYn?hq=1C>%>PTi5k#~UG0d5f9lKO@5`#=7AZCM6`Azi|YL7E7j zpW(rf^U}+yi)fqXQ$N9X;+q9fYs8Z#f~Dv~{X<@yxkL^w=`%kC-Z1&+zr!SA|AkP9 zW$PL2#?TV5-W(7?Ue&|kFFMo-$}a-8lHN}Ehr!qD8`*)z7UjrT2l|D?Ss&TxQJG1<>|?&BYm0q)c2$v}TxEH8pL>CN_*p09%u*oW`tpv(AumWTxs z&BSkr`O%rroSl9I+>+?sM!ygFV(=5-YHpJQKx{sQ#SDJ}xdy~0)J+f)`wzKTZ}5#^ z4Vh^N_d0P1y}bywp?{J(8y-ZS#PNf4ej0TuF7}xIIbtd?xBU9Q1+fKgm=m#Vh>H#N z2Ga_J;yG+O{!X5PI82Wc%51PS)yPTA34avW-{`zSuO4+UGfi14HjMfo`ko*E11hu! z@(cm7KouLrP)Xw$;$7wLMc^U4_V7BB|A5<6JRH0j_+0ou6Puy&Cv(%`^CXeH7 zOdy^jHZmH-%FGsVvuFmxPw>{b*m}H=9&n5y!~S4k4~KlJulA6}_QcC9$j|(*aJK5q zRj`loYxL`JTxa_6%%4@k&0y~O6hA;(#n4NdLm^#Nfpz4k5Nt*)KrDsO8aReMAn6A8 zd*uhxTMaLnx&_g&&eBKY6<83vp6SEIX6L_v7^g+Fidd=ha2bC;JGy&g<8=4y_>~c{ zaZy%toWq`CPL4~6ahj6{S{>$Oi`{Ov$Hm1v%{Hew*x&3-jE|2?a7h(qb6Wb@tx^8- z${q46(jbUtyd}YDHQOA~HpZf?4yVnPBGe$W#Svw8*X~0~R*ImYCLtNgFa1_ztK2!DX@b=v)PQCdmo>s%E2vgT zKu}0Pa2<1SSVVAmjiB(Lpo}7K{qD8O$lD@I<_@<#Gj)K~WsXjC46r6x63kXdl*Q>X zJ2F!f%t`bHIPEsafVc#+06vcvCRUYa?s|G?{`OL5A7KeOMS z)qmESb8Ywi%_LCH%&ReOT#ez~iWgzJkJqCpK3{Td9Om=gjqdZ!ov2iwFJzC;7l5fT zDyGGxm>pAL1uTi*BUODXumHZo5}0|f&ld~ZAwVow}_wCnjk5-3H&XDoxo_W697 za46=$mDmigVGtJD@AE~&Vwf8%U?uF2h42vO#BZ1cbN=S@#lVV~4C|pL(j61gzi*&F z;PXvI7Qwd?qME39M-0NX zm=HIj25=NT&EOJ&_;?#*;v0;M0Y}^t$H!E}%c1tJ4Q9jZs1=KR)HN6f6BAE?bubjm z;8?7Wr!f*{IObL;`!UvEOI?Tr4WtrA!8)j=Zh{(lN7R72q6Rt)Rc;1qE9RqSv=XD@ zHq=D+n`cmm_IFhI4;UMRj9ozQ*J_Dbqh2$+hH{d^hPcDA=II{g6iNI7R0ZpLz(}y zJA7@iF!5h7AKt?SnD~s($1(A3#~e81tj{+E*I`86|5E4NX%0ipY!3Qw1?pB5KJTto zP1KUr#|hXBqvJD-haWK$#<;+h!%)=qYk{hF6E%T9F+RS<3hF7!MV~JX2{lm#dSY%I zfz@#U4n6OgQXup?fDtph`y`#q(uLd619bQQ02a14a{}TwL28Gk`u5q&b-F@Cn6B( zy8G}+fn$glMxFYDm=uqq_UsSLi0@HbmgX!7uI5-`33zlIC zJavQhA50+TO?O?!V=Cf*VGoSggsNxGui~*0_-X%d5%!4{3R=3NWkxle3)N75 zjE1ExUKQ2gcNhhmq8e;#@opCHj~dVj)WD~s>McR_w*sTnzi$Tt?e!tl3S7m6_!70W zk)AkHqgJFSYG5@`9W+Lj?}V#xIO_E0eCoe%tcIFkU5tU>V@&Mzob}hz4JV-^ zPQc9g32S1y7w(?+#=^w6q8fOGYWN@2l16;#mNc4~6g7}6I2lW!ZpnF!j#XZ{=R$*5 ztiKLlZxV9i4;TlxTY+P!rF)1v6M?VY=XVs;jM89U48@k%4zuA&^CQM4p5cufcz)Et z%Ah9N&?AtKzz9^wJ5Vz_jyhcDFfv}p6?hNhvo!u;K>0zi9s)t(ICKwMpp$0qz z)!xsT9(SP5*lmo4k5OmlEmqY1|42X|5@kLqfiDcG8LdL4A4bjiPb`m-KD!mFiV2Cg zL~T)D)If%ymU=3t#otgX`T(_cpDiBy3%5Y`KOF&$EDvg=#Vj6%Pl?w;bx`7~Tahq~ zOS}%M!*JAq`=Q#IX3j^|TWR?l%~P0y^hfAvDI)#jmMl7|;f$#JT?jK^ODuw8Py;-K zs&@vpWfxJ0?>b(?jNjZT58&q>orz%7Kr>prFeV~i(HG#p|2HQ=4R%8{*c-LS15po( z;aCc%pgvA7pk{mpo8fCzN3{Y1{AZ>GD!;SE$DnT049tl0Q4={5;JLs#60~$TP^a|) zs=?RT4g&%M{7cyZbtrqF1~vpWlZhCNOR*^K!20RIYBMonxqs=tYz1!kcR z(-PGE-HC=*gB|F-v@QLMx(CpD%6bcpqBbG>afL%7~tRQG? zgvHV8MIZ}-&8V5*Mm6vRHPe60=#kt2gHiW42Wm-6pvqN1HC)$hf*N2O)af6CDRCYS z#ob6dp07mY0N;2LYM`#y@2CdTMR7}&8`V)k)WAw%9jt>Va0P1My`l#A#^O-aKw?C5 zOP>Jy6VHaz@fWOw#iFYm_wNS+y04Q_4~)H73-4n?EEpre*Bqy!&cs{PEeVPl;5 zQG0(KRsRjH!6dN){2y9JQ0alO1AMnI6Kd}x$6*C@|KkzR-lxTJSO|3+4xw(tanuT& zMeY4H^D$~5A5k4dkL&h4H)=)7S-d9d0oDdXaI~c_M^7`_ML^f#1ghgpsD`hjM*0*r z!}n&Kcy1*!qskXVO`sU6o!Y2V-vs?zgPDmBMGbTn>ad=R$NkqedP;(3`U!Q9*d5BUr~%YOtx!v|C#E7k3bWuc)PT;RCUysPcpq5&BkERs z^DK}c*ezjZ)FZb9>Om2XD%c6t!7xi-gu1^gP%H5WvtryNu3j7 zsIBrkSVAvUgM(1t<#u6Nyp3AobV*&q`B3p9sFkXWxv?HqYy_oppK8I_ns`an zK$l`Q+>RwMa!7!$7lvU@+>M?_@{B+-jF#GcN@YOJtR-s6yQ5|}4z=XdQTKYWrLRM6 z$qv+MKWq7yQJ(?#P+J-)jmyu5T9G_yxc_Rn2njk&D;|9fjx;YMxBk|^a1{#GqRypXjXd9jc_#yIuvJ74d27e_yK!k znhXJa8KDAd$rELCTapzufy$_k>Y|>A$1yve!F2c)wW4VsDV{L-I5xX{yl0%dZ4ys0_MX-s0m#` zUDNv(e~TJWU~czKXd6b+=l`Gn04rd=Lv{QObx5M+aRW$!TC()0vyvZmdn%wFRBcd? z=n?4OD%2M2K@I#Gs=ZgJb|U1ZUETkL1XLh}8H&1gRZ(Xk95tY>sBcCCP`Bg<)Sgd6 zH8=;gQmf6)s8hcSC*oPuRyE7#%C|;O_p=uPJ@aRwMz{;L1!qtlT*4r{iCWS-sMGuc zRsNf$#|w4kQ=4u}KTd*1b^$ems}{dw-bZ!#7iPmxs1?eX z-!)hg9}usG8gOU2MnH%vh7t zy9d`0k5kxvq1c0A#3L4Q@v4}I_%zflIf9iiSy8qukgY^*N%!LJ(2w#6XvC9Hhi3-r zer`oA^(oX|-!vbgPWxNbQbsM|CXg6M63>YGI9`J~6Sq<2U!t}uVoCQr2*wcNUOoaE zKwTVzjZp<3picQmR725AxsfMFZB;JRz(P?2DTVr>vO4Ms+6i^2hoc5C$6Svg#1A1W z;rSjAP{B`_1LKu;4~SBzYt;V8_GzhWppMr~cHGR~Z+TT%iw@JbeMjG91O)XMfn zt?VRBsQW*UfGTeGC-5Z_wMUmwkIu)a1|ybr_c<}D!9186%b;f52339l>h#Y<&3p-J z;5$$qKg0s~PI2A;9OYbt#jr5(YM2Yhpa!xNbt_Jz8oq4)fzyes78X5QB_MxjPL1vSDMmc9TrfK{j&>_#Nv2nTiKYHk$4J^KtTfKP`6+(F2fn9M{=<$u3~f4;p$+HMm+%+ zqaNYAFdg2p^oUj6p-hQd`h2J@E{3`Vl`Y?ENkB{7*BptO>5rHfm!PiORm+c6%{7n= z3z41&HS>;UPt@5Nh}x3zsN1msHNmZ@{!Sx@*7MyUpzHJ!HKTy)u3}QulI1`xWg%2Y z#Zh}-9<>#9Q5}Ad>aZ`W+;~*|X{Zmg`KXSUnj0~P?*Co_`gD7as_+`Mr(Z1|xrS>n z9;(BnsHMz~8b}e;^{a%c*9>(w+F^6-ifaEHs{Ko-6~2St>Hfbaprxt8C(I^njcPEs zmYZ32vzS@cY=YX$PUZ-6j=2$ahK^xYe2O|N!L{9|Xi@Z1kyqCJwTC-U zOS>1f)Q2s87PW#`P)q&7;%`vxN3ZX0Pcm#myZ~y2r`PBHYXw$Xf#axa^Z>OI(HjK# zzF-big{Ow_ybk& zIcg6-pho%yRUx2>+k$vlfOtmKiZw&s_a0aR2cWj%SFD7`P`4yOQ&&DKYK2N*RNeo| z1T=uUs1J$es7I}bx~Fqc16hNCxDl)17F4~!X6{;!=s1+!M>9HYdWrm>2kHIcD z4GYn~FG6$o!)9?*f$vdU&;vto2x?^(q8_EIP&3|-8rU(^Av}%h_!4S{&rt*Vgj$hk zEnIuSsD28emytkO0-8}rEQ34n5q`xH_@JfhphGKXchu?chw5NFs=>Jy{{@E=--aqz zq_z7jsfMMA55o{V)SCORkv5v$DvkW zHLBb$)K(otb$lAt@jc9jZ?Pq&{@&Fa;StbGrlGz*&%x@r1M^|jb}qd*W+2`etKo1A z!Skpy@CMW12h_lmwRZ!~h#EjXv%J~B^1b#1v`2j`V=QXqb5S!}k9t1r!~A##^(2hc z!96*Xp~@FQtw43uX|IpzusLdiBT-8~9<@S0BP;6pez5|ZQBSmAU50NzY9^;GejPQ? zho}ZWp#~Dr(G4^a>JVl?b(9-5^U@ZtgPDl8K|S&(qW|~*YYAw?TTwIJi#m*_F*Dw@ z^hllDOcSD(Ix}j(RZ!(?p`IJfQSA*x4R9oCi)N!f8|I@1xD5yE{vRcvLlM@Qi~v52 z@DTA|ySNz)?doPY71i)!RL83=eIu%)-%ta&V)^$`hxQ5ThuROQGnTNM`$;P=dODRY z3209yp*om_+RH`eO4J^2L~Y4oRJrr04sM_Z^a!=gz*4H@Rjhob-Yf8_~iCe={` zXo9=23u*w_hP#j5DyS7`iR$2cRL5O0BM!xGxB|7e$ws(xnNT0wxlm`QJn9QcQ!JzV z-;016+<_{%AN5t~3hHpZ#t`;6;>ZBsUg8->xtTsd4e%YRexlJXJtgXJ=0IJ$ycREv z8bAru%GF0tdlXJU1-oM(?1!4^D^x@8QG5FZ)lsA$Tt~4`AI~XK*S8p!!^x=Yc^TFI zThlkjtym0HyD7$S|MiU}4GC(vh!rSf@j9rbY;5W6FfH-^7N3V&p>?PU{ATILP%CpC zwWXg>TO4DoI|E70oMSni+QYIW$hxR+t>LH!hoJ8DXw>1Fj9R({7GH-siSIREV0PlE z#yP8^_Idzn;6GY?D`p^m$|InT-=dxa5y!hdN`l&g+^7x0gb2?s$hH6jC)&rBx(z$p!Re&YQQ^D1NsdE z@d94N%cxVnYLYvI2T+IYE^2@eP|tx^7(?IxBTaTo6d#q5*5UMb>5b9T1E(DU?XidIXbP&}d{q8Q)Sm4_ zt;hw`Bl-#ItVEvbRxmZ{5a-51SkCk;eTR7p{aZ5i-|znw*#{lciTQ^u@3o%^p5*Crtd+oBFx2ULgS zP)j)nwKB_5Pr|L1zYjH_v#4@UQ5}B7>==KBYp)b)Yg=G{?2R?>l}Df`fzmT=3$P^d zDX0}Wk81b^YR?~;&ruz{Ma?+YPwup5Mhz$oHGx*BmF$69*>R|e{ERv?-YNpxi(RN^ z_I}KPw^1F(n&mo5hC213s1+-PDqj~fV-M6B`585^^{A~mj{1yvh}x1!v)%R1fvk|{ zD@LFi868m1ft?tJ`%x@#8Mm3o3XSerRP+vsyp+3AiSo#Q5y@}>*)L~nOTI#i^ zj`!jqJgIcu|4Q@RUNu4$?0`*iAo}+n{d?8_6-BLJRjiJ6P=|F1 zYUXQEE3yey{uFu@2;3sj12Zmgdo>4jsCHr=yo4G+l!b0au~2)T2#aAp)QWUR9j+DF z1h=7{9|;#Zv!W(c3e{eNM9v z&A0>V&~(R&*ay4ge$;0}zSXXS5~y-jQ1`qh>I`&64Q#ME8a2Sl$c6IFz`MHtdDptV zOSsN0RVbFFU@NSL%PsvI>N;g#?`9r~>ZlxQ1#6=w(i(L*dt+6cX8HFl|Bb~XZU}Jy z{ZAqSYM>eJ$F8U+S)PsVP?keI;bx-tbU*44y+U;uW0Sj9Elll z8LIv%#dZH55zsR`_Gb5p%!+EbHtH0&LCw5BYR1D**J?6m$7L43i25w~3w8f9ZgGDj zvJa|!;8xdhFzPvy7d?%z5`hxf4s}>op!W1O>citt?1*1b18BF+Z9yN@cfrvZf-6xg zbpmxr|3;OMu-)C3c&Le`M13~o+Rpvg$f}Z{f~`;^>xMc!KcEiV6x0gLMQzOz)N^1P zmc}O*&#}XO>1>HQJF~GazQVy6w$okn!?=KWt6#bQ3kgKn<-U_GLmi%@*a;ut6s)t` zeMmh(Ep6zY0RMl4HWGgz9)GV}fw`z_x*PRm4BF@Fm%>uSFJKK!xZkZ*xJRHN36oI| zh9|fegMV{-c@_Jq!U3ID9vs*iuVP;eJIHUj1AM-HsDVd6?Ea!sX4Fv6wSry^0xB>9^Wh52kGC*ACOjJ8JB~$g7e+ef{$|4gEJ??Sk5dmDoCxsEB!9w5 z_X~^kr(8ReaRBK@unv|v?N;a~{7(1(7J-^%6g=ZH#$pxXXR#%wIP3m|bO=@>z5{iQ zqMUQ(a$<4f191iZinFoJdG|HkcflRfbg07@h8giY^#A?;p#;?639OB;QA<<)qWdb= zA9byMMJ@3M?170cxlhNj7(#qEY9hC=5azni$5W zB2FN_1Gi(?H8%j?b$2^TVN}wqqh|aaw#J`O*X}Fs$BZ}JuW%lt+UauB{ZcE_@2=hu z)bnO9dY1^?AaD#f+zRmR!vVJge0Q+u9k((m?z;4{sOLn)d#<5!n49m};viVvtI|6=*Uf4Ko>_6X=vnFrNTDby3O9;%^^ z7#{~&dR`4!rWnQ7$d5>y0$`f~%QleJM%SJ#A7CTEnTKcdcB^jF+} zjVy$KI?9P!vSO$$DUF(8HPp-+pgtRVpa!}Uwf8$w<&Izgp2M_w0rheI9(DL)y>=a^ zL*0%-uetwPs!}9m!b+F{d!Y7cHflf%Py<+sYG@x;!ON)fY2UaRRzf{`8>2dyVd?YC z^{7YqZ>Z~d=MDE?1NcIMzUf4K>-H)IYKgO5e_uo|YpE~o+ii0bGkR67fBBd$O_ z85{r265~Yt4P(9I?+LO*=kP4?VDE$bk3t?}E)tG@^nWb!AEmhtYJYM|_8kUOu`{Z} z(VyMQOhRqlG}KlsLaop`)Se$gUE?dLm5Tqxr58rs3a<(QRcM1baR6$`SD~I<>rpGQ z8C&39EQ_hXx*t-*u^;h6I1Eet6X2VJzhOFT`ptc249C{Q51`u1!~>g8Rlffd(0977 zcmao_PH+8yKsON7;aZRW!-iV=BdF_j3N_P<<^$A(KA^5ytiVA3gDVqi&kLdYtBd}h z|Gy`o!}SBE#>J?Dhfqs>7uCUI)V29+>2ZPr{ii$_b*PG>&QL=P!S1MfQ&Al*McuaT zs3++Wsl##A5+0kMPz9q$a1A6yZAmuNjB}&zdqLDStb&2q7}ZfTvpZ^!M_POys@)B! z0qjFhGd)K@BYkECzF`*Pu_C$-3z;QRXCln3jOw^LYNcwS2HFrc&}J47H#=B*SJZ9k z6EV>9ACe&?lp$d$YL6e|Yw<6R_ZCcY@{@C2a>CP6ir33Y07q6SzPwe(@APqq4}YuFPtvtgJ9 z$Dy7dYf)Qv2sQ9)s6+bHBcRh97}d=%3Z^2S6xC2+EQ@7O6@EYsbRKFe7NR;{YWbT` z13PB%YZiZjWm%GMsFf+p-$vF%yz&GzqS~k>3dh_y7WF9IW$|~YXMd&`Zbr>e*RnUZ z!y%}K|FZn27(zTKrYoNgb;gRI+OLXCz~gVAx}_bCnaP-ld2ze>6!k-DNGvzd5~vy0 zvUp3>KzgD7iDvmfS^9F+1UI5q@Q|h7@XP(XZwW8VkEo>yitRdzV}@W8(sQ9^IuUi+ zC!+>19kpfiQ8QhR;keV{spGhMc~Q436u;N~Z%&{D9>Y=?HLg3Il`%W<(Wn`3L2bby z)ZTwV-D6)ow}Np|<&vA(P-mkkYC@GzD_P&{jb1qtrW4SJZlGooDZVofs==hFa#>Jk zqN~MMqHf1aRK548jsg<6^jN6$gs3e@W$AfPTTv(h_g{hPB&cE=vpcF|4^?rJxyaJD zn1@jHE}8c%{e}4rRX=t@S1yg2(=3{h``>~B6-iLRRj2{&LEYPnsC)aw{AR{aJ>+=L`|~+YUa%>-VQa;t`;9;@ev+@)MQLCH=(xT5^4o}i39z=`HW+BL^XUA)8To{ zi0>^uRj|v?Z05x}#>iAyhvnTdDA88`zsV)mqN zpm%UM@#x9i3QR(sl^Ljk-NextA-TJr<54TM6eH{YuO`rwgw3cW%ACTDG(YOJRz%J8 zd#sHUQ04BL&&|)MTNEXw%ddc%ab3)V-=ltvpJVw~F<4*D?)wA$m(JLb0*O<(irrC5 zJ<^d%1>CJ2yjd)(vK#HR}s%bX0^bQsuj9xAZj3c1m-R!cAI%(YAwLpD8 z7=v2ErC0^8q8d)0)|m%e6E9)$C8&XJz>atvHP8a-TzYZT0PCmY{--C<-ZCbm3a&8M zTfuGSar1ZcCF+m`r4RJ~iX|&fCf*L4<0n){jWY14#m=bDmMf@389k%t0#h@(g2^&D zbD(Be%B*JTjZg#ZZ0WtsVdf-ruDJrWwOh@Tr~%!x{J%W{YA`Uf>o6*6i4&Qv%=K82 z^sl%Y!?Lh<_!gDkGplot86{hw|G%cMg^kFcg?iBaZPw53;@%DdnrX5e?v!Ri9l}be z^oFQI)z;$OQ3Li+dprtNe!k_eLw)G%Le2cRc?UJ~cV^U_{&qZHasuiotxNFbG7DIG zakDZGrCbBl$L@9Pi?>k&Y>>;@3iasjj2h@jb3Ce_spbN|tl=6fu+!Xc9yQOHmr*nQ z9o5h?OaEl?fZXm{#zM_B7_|afEnW(>Vs$LN6UNmZ4kw_IPDeF77uC@U`~i1Zdg(ka zzdEXe#;6BW7gWRj%pXzhtg`ra^PKsY8I+eZq>9N2=n)%=U9chQS{+B-|JSIWaAM_i z1I>o&Ag@`{tcn^?Lu`euQBS_3SONb+JsIO*EBYKv}R5WX`1Ms@rV$Dz+FN6q zpQ4^vxeGhnpuQ8%LOr^VpuQ7+K&?Q|B5oixu`==DsDYe8ZS_4YfuB*|3%nvl-3%t9 z2CxpbB3n^Qchb^tVt3+ySiD{_H=rh{a#K(PScv*5_yDTC8|FRKiaj>pIXz!caaS-7 zsz72?gXvHs&W9RMRn$_qLLIVUs1C-PQ&B528@0zLurxkIwU?!YOD~LSuO8;tGqfWC zb-dVIk7{_gc@Qrpd4VEMN#{=o7BOS?my&@7Bvsb=V@!N~;V zOmiOUd;U_~kGD}BE-d2)xB>O8cn|8Qe&s1AyvR;WB`<-W7@aEo^}2U+@9)K|P|s0qI)=edgS ztYA=i*I*noE$aT~M?Fv)S^8+yVVsR>Xa{Nl`^;0Q30+4m^-D8#n5$O{b*8#`1T>?m zsE!t+?)OpD%-&gk)Cw-11l4dh)N`RUY5=`44-P_|h4q$x5;d?3s1>_|YWFYG`$|9q zh*QxO2tifIV(|i~4oabBTmjWUThz0>KX${VsCtPj1^WM}H67|nxER&`9aK9n&G$%o z&-V`jJvyUT4)p&8O>_@yC>Pzbr)Q8pZs;=BB%tU-6YDI5g zLG)E~Pu4=HNBc00r2Bu4fI7U2bMZcE#KWq)J^B&-KcJvyl(~i*NI0G$J`lCERcg9+ z>Y?hl!oJu8HG!w*8}k$T?|(ooS232E3^nphsHLuo>YzF5nzcuL91lco!E98Ahfou_ zgzE5~`54vCOUns+b>Dv5Xa{Wa&*%Pq_9LAC5Y`lTn9lqotoVZ=gQ) z9-%&*o}$`KTgMGN3u;0Y>Tv%xfLbJ|p*E<23^gaBPWv3x18D=+$0w*CGRxEr^xeTR zSP9$LbDwHkunqBO^<8^iQMYOkYGqepG(211?*9!EG>}K;XVi>iHE!R=Vd@`Jv2zlex~nqW6nxxuJ*MtYVo#|kVm z*P*s#7iud`pk{c>e2=4u$7$ypnu!|78dUk+sE*EJ0lb15K($T{2L!)+>Y*#**@YT;_*AV`dd+-0lO`}AGNYaEq)#u zu;;r*KqGsMT9S9D8N}%9PIW3&ei&*6>Y$zjo$vq-K+Uj37gw&2Il`QRn$SGdgKMe9 zclz_WfBOlj!_%ml-9@d)S2KB6*KrZEj@b!SZxm|jXQ4V;Ve$2-f$uX44m{v35C{zk3b$L`#JJu+kT za0w;N+PH!Aa8yIVJ>3?hG7F;8YoZ=V4a`BPnJvN$xDK^qmr>=P;$(b-$pZL`OTD=N zt4LVT+a01RecYpX1nN-jMty_%8^bYM-$4K0@tTTzY2ZGp!=?RQ2OG^Dn2Pj$s1>?{ zD)-X-YDV)0xDh5s708ZSn!?x{t71+(h-&DqDuo-67Fr~#!wb(qEC#mq{ma{5ZA`fV+}o23snCz|sx zrM~~KC7^~+p+Ag@NI>Ri!9yO5Ns55j5_01^aP}goo z)Wiy-|NfU!fP`wOJ!@p~2j&~hOuBDap#LwAX2G&V2cYWhL(TY<#jluuqE_@3YCw^P zyN(m1CYTaEHIUm9ilaWaYoZ!#jG9?E>eFu;YUJC^y{P(!QROdK{CAu|{4a|S9pUc% zL{$ABQ6FxzMsWXCaXAV4a=8%|KY(iZ6sp2?)Fb(>rTa#@cuZ9JY^VoIe)KP`S<0+{ zDp%d&-=W%XK9W7w(sZ(nL8yjCpep=e=|5WfEL6pxEqx_wCL2(DybrZv_fSh5XH=m7 zUrdk9Gy~nq^P}tBq=?32Kj9qdM%58sG$THtJLF z7t}S}h5ALtUCZ}k{@^-Hiuy4;KdOW8&F-j%2bz=2MdlXNOpc-kauxMM>T}eV`Nr6z z+boD0culA0Yd}B^G&8%Ho;e9sVLobL%PhVgHPdb8LDaY4bEqx+Xz5>3^`nh-hdVB+ zo#g2M{-1$>22d2$U=@D`zf3|^>|*xDn#2cL{0yr6Wz-7&fz|LG>N!zvT%i9iBsWFn zM;Y(FxFj<(OMU(qu!M4`TTt6N>8m_&LWeae|8{!$hPPGHaM^ z&B5sZ`@ho(=qpu+iOzoJXmdJhV2jPo<{|Sk=F$LA?F3J9W-#-arBT1!u7O&)S(CW` z+N)(G=truRs3qTsn&}RUpFu6@WzKpn2Y$?oU<)Ts2{sB&X0z6kY`)E3nBJd20% zwdL=a!u?l)lT+Loc!(Ond(;U3LCq-okIp1!MpS+%>d=)&)oX9*-B1G>j5=&nP(NwS zK}~EOs{A3(3YIR$+)lfcE`68BH0p}BMVCf%F1By7! z8Ekr4El?bFSZbn{_Ip&rqfs4B#0CP$656slrP)G2Rm@#(0JmSZQ}i1{((CpXagsDVvE z)t`sDwi{3by@bKK|2GNf^#6@os;^ccV3w;G1=Ub8GZU(TP}DQMsHL|+egE%_8ptfv z3ZBJ%7-x2%|KI;ThpHbohx@NUH3FJxT~tSHP$TYc@sZey_>UHUhdT8^bKP0Vidy1I zsQRr?^}C|l9gZ1rD(dv_G|$fE{%ZgaNRZEPD85BC)ca@G@Nm?O=AzOspsv#$i@!y6 z7%g0lo(NMxyp|2daTvr~%za4KVUTS1|!< zAn8yuE^O&lQRSMTX58M=2cybOwD>|){SBxAct;4R;%m$JhN_ToksC-R)G5!2`j9Dv zDqr7hjVj;G9D$m^OmiNp{8Doxs=d9)+2H^GgMcbra|ymXR^X+je?m17u-J7J3l&d| zdQjy+?R8aDJK<(0RJoq04u_(i2jeXL7mTO-znOp3+%NtzSAPd;iwPtIz%tIF8oGjd5WU1y_!hMy36{IR zEt3w_&}wrN`tLRBFrP)8`UorBp)Q5liHD;O-85ABy(_r?`bu?)1a**crMo5tP+QUr zbK+psZ$j5v`dd`__^VupY0dhm4#uHw&sMCASJ8iKR=fPdsCb*zp6h4;37XMt)RHc= z_*zs)TP%La@=sd&HA{bN=`T?$_!af&O|-^sRXxl`ygN3)`PdLYcm&j8?X_+I&2e4; zKfPK!(t3VLOnyw%r(bjQ4-~bh3(ZwHl=v3ZFEk2la9i~Ub|KzjqkHz>K-H_c$+hD( zB2b=$mZ*WOKrQuF)Xcx2o?J0DyZn4+Da=fIHPqhrwe)4ErQKxlW2nP=*?f)KqF7t} z?RvgK1k`a0REM3-!RAENi07dyE=PR~UqIcK2wPpf#Hex^QSIe6i{moll`Z}nRqq@6 z|NJlBHn$W>P!&T^fBh~yHp3d0z8T{u)&-$96ZcP_rDWi&<~;X2N?)1BHvs0JFL?t4qrz`9!cAajJ}kF)$)mcGnfgUzY8+2RR*b?qic ztyEg{-~a3cwDg5hBdmmZunFon7?UmiC~9Cg%zLPTJ+}BeRQ<0OkF(3=Cq~svXYs74 zGg5FD_g|lS)hwe2s(~S>3R6)7n~kcl(%gsY_%iCc{b7Ew^n|-zei~H$oTwR>Fe_Sm z?cLme6=-D%Jy3^hIO^1IMjg7F7LUBg4KOF_$ygdyza{E{(;YRiX{d=TM4kT4s0p35 z{43_4o&{c+|Da|XeXkpFYE(m6Q4JJFbyyD7QC&-KY4LUz?~Q6_5UTuCOJ9ttx6<^s z5zq(^T7f&}L)4NzM}77BfV$^7_ql;IL9I+{RD+XH9nH1;)t0`=+-IJ${Oia7J>Ojd z5vlkdqvKap$5HnO`u~ID_^3TTYd%J;MBs0(d{k6^LexNVpaxRJ(kolMwb>Ij;SuQn z{9iyo6*rmtFfH*@{sR2^3{@e*0oQQ|>TG00)vJygKx0(7UY0(^oQL|3xC%A!=NJwD zR=)1P@1Xm*jfpA{7q#cXmYx;WQBJccs$50025QCXqXy6dwE}}s?My(`Uw}FjYb^Z$ z`v3g@vL!r5&EyNJLc&ANG^jI>6LmYnEqx}cgC(c|Z9{du$2^Vd@D}Q)?6;_ui+$MD zD{z?mA3{PU5@ZL|Z?ngv2C@uQVK3^iJw!Da?}+O#6Z%)i;zdydC}Z*3s1<35D%aZ_ zjw(0#i03jEkf52YL3Oat3S74M1JvpNf@(0!Q8&Qy*n)U7Y=rw!15I(vwOavIuP$nZ zhFkhri_i2dFc1BII)#ZTxD)kt`@F?pqDCC$xEpA&nH6=IilaU&Dxx~7kE-7kHK2j0 z75D`;!Oa%;j$6VN)JUIU226Is&9F48LL=17yI}}Uu=KU4h7Y2Ce|QeHWkDz1K(bMuk6Jg^CM#^RoJ14xJd`=6CSRx%1I0b8RAcC+{h)K{`8s2N`|Z=ts2K5Bpg=iIm9 zxY&<)IaK~$)E3@AZOtpxiY7U4KmVsCppLU(VJv|9GvDr(z7Vx^Yf%IHWX8PU>V=>N zmfhm{Q0Si}{D)uFR3u-_)t~rY%r`%T!)!u8=fIeas4DznKgc@c;RKeC}2h_m2 zn<}qI@OacWr`@QPxQFWaZ&dw=H{6QGK-Eu!O3#VqF+VmyZ;%zZZ2o~N_!70G?@?n9dbSvC;dF?Q!wsr_mfZ^q#geKPXg-T2lFR$ zxw##6HjbhixP_Wg>N{@ba-iY`QF~v`;vOy`J|5M6?z`?svQn6d_)x#x|CI#P!3EU! z`N!s0)DNL??>Td!9!S+K-UBlb{}FXIc3@__fm*qUf4K6gQ3EW8+NxR>ZzJ{j-<^P- z`5x*AkC~_e?L_~N)2Nw8_|yI8G-0Ux&8Uu#qdI(wdVoc_?`E1BHPaTTEgOsaOqhZ# zaUJ@<|Hpga3Zz0ckijfrHbBjw8)_*BqZ*uO@#&Vo)ZB==ZhO(cb(Vh1e1fX~;Q{ww z4Spj*OBeg0d(ss`{Q|+m61WSi;1|oU_{jaG(@8jh^nl0i`VGS7#NVN|uKr(c0KHL9 z(DB#`&tn={AVuS4fViUg_`L-tbrd; zkJ^gQ-Ct7ahUtlizOcWrgc{IRk3f9_Uo4}}%Rt{h#Mhy=V(lxJe+1QFs@E<(40ZpT zqrO^=L_Jy;SpI3$*?4G1edEe!#Tlg6z`5u>B%mc8@s>v;_xPZB^l$fv(I?*p`v0Ne z`tRLJJiz9ZPx`^FzyNcL`2w|KnLj$4pjK!K>QBdxVopr_$^VGq_*>KxxBlYnkGf8iQQvSDqn7kEYVQ+#b@9BY+tCj-km;zib<&^C{fqjK z`%|g(s3q@=>S#1-KtE$eyo1`qEZ^J!Yv2gtV{s(L=A%XRrek?rh1KyjYRO9n1o=Nz zuc1zVlt9$|k4+#SCc;Ws88zY=_!Dl#W=anV^8Z)yt5Dw;%0~$D|9IXVHSm=<0S}lp zBL?|@^Klzbl0GVuYqxgfAm4K0UC`4~1V;(-|L1dcQHN?O>P&1$E!hX0g*l@J`A*|8 zREIxB3-ay24X9t^b%-A1e@^U1&G5Lz&!O^fnYm)Pa>HT-@$bKqF^L3KxQ+UFe1Jjt z5@X|AOOFuKH53c=sBVs`*AqA40My>+jO9A0hMG_#RQeE0pO0F>)v-L+z*Q3To$t2! z%nE)+brdDG8(4BwhZ#^SkR3I^@~9_dJybibP-mf=IU03Xe>T^f2Rs65@G`1_-!1+Z zs^eFv6^R(fm5YsvCqi``f~uFx(u-L<4ApKO48=yMTQm zhg#aNX8d?AKQpSsT&MvQM$I_P;$2Yf3^a%P<^GK&aD1<;bGLZJ8S-J`AHMIa;Z@dxJ-$;{~Bpo66#=m)FXB^YCz{PJKjb$ z95Xn`|4k{enG z>gNmALoX;K$p5j~5VZvhup$0!)<_-X|CC#WX-LnN#+9#)6^PG5JxK1MR_G<_p2tZW zx{)C1@~YAceZb7pdSzEA=hQEAkYS48b)Z8IFT$NkKoP%E;{;zv*oKR_M2H>krE zoZiLrq2k}6`srm3#MJuvf4C(qMHO7_&)}O1Y9N21o&#Sko+yJ$&x{&KQHxhGo1w~g zH^-p{xWw`|ptj^7`al1V5>P{D%-dGr1?qP~Z_Fqe-2hXd(hH#)u7({h5mX6}DEG8&Me8O=k@XpsQ=TY(zb`YfIc>?J{4a2mCDw=Di1RUvX#cL-yl^0T7` zQr_a5p^BsTl!Yi_1%rC|H31nB@fKzMjR2fXHiktD6yHzEM!(fJ(~G> z#Q&NTk-z&#&vDs@4}|sF$GcW!t}^cfmi9>dX|F8Q^|I1RR}!xip-o=^_Qsbq*5==m z=6V`$OxYsT8A(`u=i+~IYRbGeQcr`=Ony@9uqW#4d2C!m-3~T@xzrE#|NDDnt|oCY zqvR>+n@z!oq@AaLUPXBSW{veHU$1|7YZ((!uP^Vrlr5pr*lQBub(%Tl2NT|HdF9n9 z<^RA4ctQ7X1EZZzLR>2Ewhp=zuEDzp=^ODdwx!%4!uM#nCU)Tcigy|sT8**kv(5C<2|0z!37)y8rlkxudb)QNXX{;n2%p&}P zcNQ8s`kyj43G?rW{=e64%FVDD-=zM(uML#thb#ZDX)cpkk+!@=H2&XLBCD{N%%y~T zSwsJpDNI@}I%vUwA5bP9`GsismengwxG!(LikS+ZqMtzO#V0KV;e*tR>Hq&!VG_#Z zv$mp9w-keINP1G9KfWopd_(a91y|D0HX8T`tN*7_ehc&eUUw;fmGVKBo)kY*;shOy zpp$NdPmuiiA&h(`0<>eM9tn#=N4BCRm()TGUpl!;8cdNm-f*BRnF zsIS)q?SEMUW$0v{6?j4B9U3gjdm@F`(8zo87F(s1ba0fn{`-wdq}8%|i)iPFh1K|S z>hz~kKJ(ZAa6o7%2?ciXuE$^!P;fMr9^o=um9q@yG38!a179gS z-}2HE=3iL!Ri*A;OM623a+L2)dMzAATl@~g|H@}=JW~H%t%A#9w3R;t4v;L|MI}&{i$NJ195SCHbOL&YMEU zNE&-*iT~1x^i&imLnqH|w7D^*8Yit8;c1qB-BjH{bn+D&GN=f&QOyRRynTdc{3lM5 z=i5o=|GxNLlP|Ir;9p7pe=q&57`@U_W}OTA7E<>Lv+QVX^s_Q;$zQ=B$5B?Vi=;0k z-dTfY0(#}brT*_cEN80e;|BqJcniXn7r@!#d?JvOBXBx{vnWeldQn@wnca&X1`UT#7iSHr)03TCk z7M(Ppes`H=_ZfxS!i>WjT&1pQ`-wfY; zsrcX5T;iiBbDT2&zOvHUpHZg9T^fIC$Ws3-YS7X%0Oi}Xm`ic4pNQ*=~l=LTrJ^gxWH3{KF zqA|BSIGT4J3j9u9S~|Eur~Ko;{(sV{AmQya^pN*48*EkUAds}2)Jsh}YiVO8{`d8f z@>?mRS4H0OBmVm-PNXxLajC4=Q-}XQIiE+`A{txA0Qjes{jZ5M!XF^{c3Aurb@>Bi z-wDd{+fLt2O6jM`%hYQ|`ei23gtDcm7l5Nk)9>B#M&T4~B%!`_yom}u$XG!>rN^S-n3TIqxIW>vbbiVzy ztj*`N5zf07<)`3P{VmR(6x?DBsYWac@27)%6sm7Cn!_Lt@YZWM>8mMU5clxb>lx)& z&|nR0MOtOr%tk!B4WbHZi+Jy)Y=3K~k-tyY{}LUxw2o%kK+aRB5*3EgKnsjcV(@`fYyTxWVj(9ZM$si z1#370;o;Uu1v=JiI9{_f{gz=qbqZ3q8|i5YMgjcgc2W}8F9%QiQ}`rdu>3a6 zw~{jY(?>6iLa7+lcAG_h8i}ldkp8Q6RGaW9-gBwYi#-011N^V#G;*5s(!57AfO8CF zAmQYciLdg!M_SqDggaUvMJcsC(b&-Ldgm;uv@GP;A?{rwqdo6VG<+M6F|*jbCs65ytx8J5b;(ajeq-xM4echb zR~OP&+F*wGQ@G#MjZ6o{$(xFKkUs_SwW8w$o&P39Z6CO&v*}T({r&j^9GUe~{j>-Gq*9O}5uYY^c;0Mz{ z8l~|nLFN-HJe)>C$m_vC^77{Y{NaDE>;DV6Kz8eJJJDd9Od-;u(7{LA%c3y#^V6RH zrTg!Hk6s_ zZb|Z<66Q}l{I5CWd24BSFojR^zU^NU{p;@h^vL@H9sP{_#Q^`S3}u?rz;ejfF~Fw8-;rL}%Klq-2z_R!+&z8&xv^vA+V-9unYH2?9 zED(u;a|vH%v{xx`gi1lge()v>Kw9}r?L*#GJs;d-_X%GD=&7FHkh=& zyb}}dZ1umRez*$Ew-I~)nSDFb{;#Vufr~kRSII*-Yw9AjnP1kC zQ|t(X(y51_I}?v2UPn(}&N1@SET6(;e)+^g=PM4Oc$yBV;1=p#@VSyBu!KgjGGNa* zQ(2@Qg7KVH!NeTlo`CCt`!M4qdjBFgfNSWl3@)!TiUm;jMel+6Um^o^N30~ESUe&y~0~oF?>sr1pbqJYun*&}<6FfCm$&5}J+YpJ6iO zb%2A2cOy2BhB^@I;_JZ+vP2ieVs&73IDb>K!^N7y--sWe{*}BAJuTorpx%@7XL7OP z)Vs6bVYqELU2&OjXb<2>vY69qD+v;{u`i8tsjnb+MRXye@+r#Tf zMQ;PxU9gt$0_n+6%~9xiSYHWQM6m%4LsZNUVX?=YHxLO%pr&Gi7vUbMjJLtXw$Qg8 zPI*LoC?@!?3{R&&ikiCsYCBacQGSMvg)oeQ56uRe=h9RU!AR2n_&u_yTJGwPOlY*1;v2Ar>X~e;$$s2(2>oHQwoCXh!VBf+@7@1v6ISW-lZ+5m75l zJRfob`C&vn@r%UWM4W-;iA&IDHD3gM7cnF*lU}EjSytxP;;`w@EH{gx{Z>^e> zh|SOcWe}Dj>dA(uaBoDC7&edwJMcr~!8FYzpG`|PjW5Y#$s6lZr@$`j@Fv7di9O*2 z!V$~FFM)4F-vqvnSnQg7+YqE1S|DDE(WWklztI|>tYx;62((h{wholSKCnG#iG2fJ z28|kcGF})wfnF=0t6_Y#4oM7eGW^sAnk#Qh5 zJ4kZa*1F6hB~h{%%Pqir!VwE5KFIkD;cX1cM;^)WPUJ^9=TIw+MpeBRrKgK7cN^?G zdMa3Q%SdMkODHr4e9w@gG>_)|1<#Uh>@q$V&URg55F(x6zh&rMYJMysmPGFiJhxtT zZ^b`@m4-hBjWl}2?B($25%Rq#DvleAt3tLrAM~@(s0Joh2VS6^KIQYW)mMNf zki?$RG*AVT7(NrRiuiI}tTF>!@hk8*>Hz7hM^7s_?Z6tL`HH$fSVd}2$i-eN-;MtB z^2^MYknCvs9>P#13GpIWdFm+)7R!X!h;t;~fGf$1a0qcbd<3E=$YbG%ouE%_6(=8j zX&8;hJlp}zy>P<8z2F;L10(>9gp@%n<^}O0?ye#;h^_WJgBp@&(Nh)#d&|cO>=p)H>i3(KG*%=cfZBAo{D&X|SdUtYp9n+>3_d<_4ai z)OwR!t+L{C=Ks%mn81b5(DWwO%8$1qJ}86XeL}nfml~BLtj^PiV^pK*D|j@{+|HE zt^?lG*qfy~kXJ#d3Qf~26!YzUZbyUlqGp2Upgo&eE}W^M;9_3nXQ`D#XS)S5ECE|i z?^fAP=8pvsdkUDshMiPQu+Cu5$Y0uEg723b8ygBQ6ko&OX5gFfA=9M0#&>_67Hr>rVyvo#HJ9w2-?5tAWTc6_UIKaVH6|ukgpgceYug0DX-a@(ZH* z!B>+nBNhv#H%#M7f>U4fe{FsI10c3F)A_pPoQjwyzLurL92pqN)}<|}p$q3yjpe8U zuQ@{^7*LqL46XglpcHC9f-j(7YykOo@EmyW<a5mwoDk`*XESUqggnDmyZOFxv@!KqrU%8vjsO83d{k>@TjRt!LzOq@!%InB7 zK?t9up2^t}ehOy?PO%8^4h#^B0++A5pXoUcF6IfAoA@mY-9i5)i}+h=mPhq9NjM&d zV0{|JTHtBKQxU5OK8&U`nlm`_kWY|7YU{}zt#1o4zcu6v%-M90qY}&5vz#Vnm(^9R z-RG#6!sFqbXN&Um`r%ISx`DOlya)Lp6FsSCabCk~sm?jQUqx>$9w9HyY>*5)$`W4@ z--JJ;S!^$j0ot68W_vhWINk8-419w4Eb1$WuYq~6%nth3fwja(kvrghz!s?HO5!iL z9rb8=X;y4Er1lUBAt<&;$(D?tn;7tp2C>OB?}Oh6_X1B=ZYK3|lL9V7^`RzY6bBddGFMe0{-u;i3Cubi>Hs$xS&+3`$ManYM{iXKa-{rbHVWO%2 YW&0V8^Sa(&JmX>NR#UQ5t^k*R0nRB#Qvd(} delta 49084 zcmY)11(a0R8m8gX-MG^@1ZdpdgS)#E+?_yhJ7{o+;1XPeLvSZpaQAR=CpZL{_pAM9 zCR1zGeYX2PRoxKowad|_UykPA3=KEU<8?oh=Y5Bj%6i_7sGiq zUt?nYg2^%AZqF-*`H`w#AIyjQuqb}S7+7GB=h3WJ4!dJ5q+Q=TN}xCi$FU?v-|Knl zu{vhOzSsm;U#*auf(TugJ&Rs0^a6EB2guoKqAk60ZmA971QABz*eh1#MNhh4l7h7cc! z@o)%g05j0n43-dxgKIH59>Cam2DQZh!{iw654U%DFf;L$s1>_}YVbBDz-L$s!yj>5 z+5qbkpNA3f9cqQX9AW*n)RB+6rA&;Gh^Iy^br#gf3!w&73^mXisB*1QThRqIfW8#cVCJcYhUB4WtdaF?r*o1NLAeK{4mkFdKA;o!DpcLjHUJI+@ z�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 From 84580f6f941bccab8004bd5b77f5a74fc4889309 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Mon, 20 Mar 2023 10:52:34 +0800 Subject: [PATCH 144/339] NEW: [STUDIO-2476] design_staffpick Change-Id: Ibe4d540ca31882e199437dc2811925e1a40680ec --- src/libslic3r/AppConfig.cpp | 4 ++++ src/slic3r/GUI/GUI_App.cpp | 23 +++++++++++++++++++++++ src/slic3r/GUI/GUI_App.hpp | 1 + src/slic3r/GUI/Preferences.cpp | 14 +++++++++++++- src/slic3r/GUI/WebViewDialog.cpp | 17 +++++++++++++++++ src/slic3r/GUI/WebViewDialog.hpp | 4 ++++ src/slic3r/Utils/NetworkAgent.cpp | 30 +++++++++++++++++++++++++++++- src/slic3r/Utils/NetworkAgent.hpp | 6 ++++++ 8 files changed, 97 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index 4a00ce46df..7aad4666a8 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -285,6 +285,10 @@ void AppConfig::set_defaults() set("mouse_wheel", "0"); } + if (get("staff_pick_switch").empty()) { + set_bool("staff_pick_switch", true); + } + if (get("backup_switch").empty()) { set_bool("backup_switch", true); } diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 312d73e25c..7b74b2830f 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -3664,6 +3664,24 @@ std::string GUI_App::handle_web_request(std::string cmd) } } } + else if (command_str.compare("modelmall_model_advise_get") == 0) { + if (mainframe && this->app_config->get("staff_pick_switch") == "true") { + if (mainframe->m_webview) { + mainframe->m_webview->SendDesignStaffpick(m_agent); + } + } + } + else if (command_str.compare("modelmall_model_open") == 0) { + if (root.get_child_optional("data") != boost::none) { + pt::ptree data_node = root.get_child("data"); + boost::optional id = data_node.get_optional("id"); + if (id.has_value() && m_agent) { + std::string url; + if (m_agent->get_model_mall_detail_url(&url, id.value()) == 0) + wxLaunchDefaultBrowser(url); + } + } + } else if (command_str.compare("homepage_open_recentfile") == 0) { if (root.get_child_optional("data") != boost::none) { pt::ptree data_node = root.get_child("data"); @@ -4510,6 +4528,11 @@ void GUI_App::stop_http_server() m_http_server.stop(); } +void GUI_App::switch_staff_pick(bool on) +{ + mainframe->m_webview->SendDesignStaffpick(on ? m_agent : nullptr); +} + bool GUI_App::switch_language() { if (select_language()) { diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 41c691a1a0..af9d1c45d8 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -436,6 +436,7 @@ public: void stop_sync_user_preset(); void start_http_server(); void stop_http_server(); + void switch_staff_pick(bool on); void on_show_check_privacy_dlg(int online_login = 0); void show_check_privacy_dlg(wxCommandEvent& evt); diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 2901ca9ec7..6a4eaaa45b 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -556,6 +556,11 @@ wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxWindow *pa app_config->set_bool(param, checkbox->GetValue()); app_config->save(); + if (param == "staff_pick_switch") { + bool pbool = app_config->get("staff_pick_switch") == "true"; + wxGetApp().switch_staff_pick(pbool); + } + // backup if (param == "backup_switch") { bool pbool = app_config->get("backup_switch") == "true" ? true : false; @@ -846,6 +851,10 @@ wxWindow* PreferencesDialog::create_general_page() _L("If enabled, sets BambuStudio as default application to open .step files"), 50, "associate_step"); #endif // _WIN32 + auto title_modelmall = create_item_title(_L("Model Mall"), page, _L("Model Mall")); + // auto item_backup = create_item_switch(_L("Backup switch"), page, _L("Backup switch"), "units"); + auto item_modelmall = create_item_checkbox(_L("Show staff-picks"), page, _L("Show staff-picks"), 50, "staff_pick_switch"); + auto title_backup = create_item_title(_L("Backup"), page, _L("Backup")); //auto item_backup = create_item_switch(_L("Backup switch"), page, _L("Backup switch"), "units"); @@ -876,9 +885,12 @@ wxWindow* PreferencesDialog::create_general_page() sizer_page->Add(item_associate_stl, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_associate_step, 0, wxTOP, FromDIP(3)); #endif // _WIN32 + sizer_page->Add(title_modelmall, 0, wxTOP | wxEXPAND, FromDIP(20)); + sizer_page->Add(item_modelmall, 0, wxTOP, FromDIP(3)); + sizer_page->Add(title_backup, 0, wxTOP| wxEXPAND, FromDIP(20)); sizer_page->Add(item_backup, 0, wxTOP,FromDIP(3)); - sizer_page->Add(item_backup_interval, 0, wxTOP,FromDIP(3)); + sizer_page->Add(item_backup_interval, 0, wxTOP, FromDIP(3)); sizer_page->Add(title_downloads, 0, wxTOP| wxEXPAND, FromDIP(20)); sizer_page->Add(item_downloads, 0, wxEXPAND, FromDIP(3)); diff --git a/src/slic3r/GUI/WebViewDialog.cpp b/src/slic3r/GUI/WebViewDialog.cpp index a94e86c810..10625ff1ea 100644 --- a/src/slic3r/GUI/WebViewDialog.cpp +++ b/src/slic3r/GUI/WebViewDialog.cpp @@ -427,6 +427,23 @@ void WebViewPanel::SendRecentList(wxString const &sequence_id) RunScript(wxString::Format("window.postMessage(%s)", oss.str())); } +void WebViewPanel::SendDesignStaffpick(NetworkAgent *agent) +{ + if (agent) { + agent->get_design_staffpick(0, 60, [this](std::string body) { + if (body.empty() || body.front() != '{') { + BOOST_LOG_TRIVIAL(warning) << "get_design_staffpick failed " + body; + return; + } + CallAfter([this, body] { + auto body2 = body; + body2.insert(1, "\"command\": \"modelmall_model_advise_get\", "); + RunScript(wxString::Format("window.postMessage(%s)", body2)); + }); + }); + } +} + void WebViewPanel::SendLoginInfo() { if (wxGetApp().getAgent()) { diff --git a/src/slic3r/GUI/WebViewDialog.hpp b/src/slic3r/GUI/WebViewDialog.hpp index 1eab6db154..5fa3a0ede5 100644 --- a/src/slic3r/GUI/WebViewDialog.hpp +++ b/src/slic3r/GUI/WebViewDialog.hpp @@ -27,6 +27,9 @@ namespace Slic3r { + +class NetworkAgent; + namespace GUI { @@ -91,6 +94,7 @@ public: public: void SendRecentList(wxString const &sequence_id); + void SendDesignStaffpick(NetworkAgent *agent); void SendLoginInfo(); void ShowNetpluginTip(); diff --git a/src/slic3r/Utils/NetworkAgent.cpp b/src/slic3r/Utils/NetworkAgent.cpp index 2f4323bbfa..72559eb9ab 100644 --- a/src/slic3r/Utils/NetworkAgent.cpp +++ b/src/slic3r/Utils/NetworkAgent.cpp @@ -92,10 +92,12 @@ func_get_slice_info NetworkAgent::get_slice_info_ptr = nullptr; func_query_bind_status NetworkAgent::query_bind_status_ptr = nullptr; func_modify_printer_name NetworkAgent::modify_printer_name_ptr = nullptr; func_get_camera_url NetworkAgent::get_camera_url_ptr = nullptr; +func_get_design_staffpick NetworkAgent::get_design_staffpick_ptr = nullptr; func_start_pubilsh NetworkAgent::start_publish_ptr = nullptr; func_get_profile_3mf NetworkAgent::get_profile_3mf_ptr = nullptr; func_get_model_publish_url NetworkAgent::get_model_publish_url_ptr = nullptr; func_get_model_mall_home_url NetworkAgent::get_model_mall_home_url_ptr = nullptr; +func_get_model_mall_detail_url NetworkAgent::get_model_mall_detail_url_ptr = nullptr; func_get_my_profile NetworkAgent::get_my_profile_ptr = nullptr; func_track_enable NetworkAgent::track_enable_ptr = nullptr; func_track_event NetworkAgent::track_event_ptr = nullptr; @@ -238,11 +240,13 @@ int NetworkAgent::initialize_network_module(bool using_backup) get_slice_info_ptr = reinterpret_cast(get_network_function("bambu_network_get_slice_info")); query_bind_status_ptr = reinterpret_cast(get_network_function("bambu_network_query_bind_status")); modify_printer_name_ptr = reinterpret_cast(get_network_function("bambu_network_modify_printer_name")); - get_camera_url_ptr = reinterpret_cast(get_network_function("bambu_network_get_camera_url")); + get_camera_url_ptr = reinterpret_cast(get_network_function("bambu_network_get_camera_url")); + get_design_staffpick_ptr = reinterpret_cast(get_network_function("bambu_network_get_design_staffpick")); start_publish_ptr = reinterpret_cast(get_network_function("bambu_network_start_publish")); get_profile_3mf_ptr = reinterpret_cast(get_network_function("bambu_network_get_profile_3mf")); get_model_publish_url_ptr = reinterpret_cast(get_network_function("bambu_network_get_model_publish_url")); get_model_mall_home_url_ptr = reinterpret_cast(get_network_function("bambu_network_get_model_mall_home_url")); + get_model_mall_detail_url_ptr = reinterpret_cast(get_network_function("bambu_network_get_model_mall_detail_url")); get_my_profile_ptr = reinterpret_cast(get_network_function("bambu_network_get_my_profile")); track_enable_ptr = reinterpret_cast(get_network_function("bambu_network_track_enable")); track_event_ptr = reinterpret_cast(get_network_function("bambu_network_track_event")); @@ -339,10 +343,12 @@ int NetworkAgent::unload_network_module() query_bind_status_ptr = nullptr; modify_printer_name_ptr = nullptr; get_camera_url_ptr = nullptr; + get_design_staffpick_ptr = nullptr; start_publish_ptr = nullptr; get_profile_3mf_ptr = nullptr; get_model_publish_url_ptr = nullptr; get_model_mall_home_url_ptr = nullptr; + get_model_mall_detail_url_ptr = nullptr; get_my_profile_ptr = nullptr; track_enable_ptr = nullptr; track_event_ptr = nullptr; @@ -1088,6 +1094,17 @@ int NetworkAgent::get_camera_url(std::string dev_id, std::function callback) +{ + int ret = 0; + if (network_agent && get_design_staffpick_ptr) { + ret = get_design_staffpick_ptr(network_agent, offset, limit, callback); + if (ret) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%")%network_agent %ret; + } + return ret; +} + int NetworkAgent::start_publish(PublishParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, std::string *out) { int ret = 0; @@ -1131,6 +1148,17 @@ int NetworkAgent::get_model_mall_home_url(std::string* url) return ret; } +int NetworkAgent::get_model_mall_detail_url(std::string* url, std::string id) +{ + int ret = 0; + if (network_agent && get_model_publish_url_ptr) { + ret = get_model_mall_detail_url_ptr(network_agent, url, id); + if (ret) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%") % network_agent % ret; + } + return ret; +} + int NetworkAgent::get_my_profile(std::string token, unsigned int *http_code, std::string *http_body) { int ret = 0; diff --git a/src/slic3r/Utils/NetworkAgent.hpp b/src/slic3r/Utils/NetworkAgent.hpp index cf1cea3a2a..42012a793e 100644 --- a/src/slic3r/Utils/NetworkAgent.hpp +++ b/src/slic3r/Utils/NetworkAgent.hpp @@ -72,10 +72,12 @@ typedef int (*func_get_slice_info)(void *agent, std::string project_id, std::str typedef int (*func_query_bind_status)(void *agent, std::vector query_list, unsigned int* http_code, std::string* http_body); typedef int (*func_modify_printer_name)(void *agent, std::string dev_id, std::string dev_name); typedef int (*func_get_camera_url)(void *agent, std::string dev_id, std::function callback); +typedef int (*func_get_design_staffpick)(void *agent, int offset, int limit, std::function callback); typedef int (*func_start_pubilsh)(void *agent, PublishParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, std::string* out); typedef int (*func_get_profile_3mf)(void *agent, BBLProfile* profile); typedef int (*func_get_model_publish_url)(void *agent, std::string* url); typedef int (*func_get_model_mall_home_url)(void *agent, std::string* url); +typedef int (*func_get_model_mall_detail_url)(void *agent, std::string* url, std::string id); typedef int (*func_get_my_profile)(void *agent, std::string token, unsigned int *http_code, std::string *http_body); typedef int (*func_track_enable)(void *agent, bool enable); typedef int (*func_track_event)(void *agent, std::string evt_key, std::string content); @@ -161,10 +163,12 @@ public: int query_bind_status(std::vector query_list, unsigned int* http_code, std::string* http_body); int modify_printer_name(std::string dev_id, std::string dev_name); int get_camera_url(std::string dev_id, std::function callback); + int get_design_staffpick(int offset, int limit, std::function callback); int start_publish(PublishParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, std::string* out); int get_profile_3mf(BBLProfile* profile); int get_model_publish_url(std::string* url); int get_model_mall_home_url(std::string* url); + int get_model_mall_detail_url(std::string* url, std::string id); int get_my_profile(std::string token, unsigned int* http_code, std::string* http_body); int track_enable(bool enable); int track_event(std::string evt_key, std::string content); @@ -239,10 +243,12 @@ private: static func_query_bind_status query_bind_status_ptr; static func_modify_printer_name modify_printer_name_ptr; static func_get_camera_url get_camera_url_ptr; + static func_get_design_staffpick get_design_staffpick_ptr; static func_start_pubilsh start_publish_ptr; static func_get_profile_3mf get_profile_3mf_ptr; static func_get_model_publish_url get_model_publish_url_ptr; static func_get_model_mall_home_url get_model_mall_home_url_ptr; + static func_get_model_mall_detail_url get_model_mall_detail_url_ptr; static func_get_my_profile get_my_profile_ptr; static func_track_enable track_enable_ptr; static func_track_event track_event_ptr; From 6ee93d5646ba01a6e4eb981e8c4f3c0f0d8c9ae0 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Fri, 10 Mar 2023 17:30:30 +0800 Subject: [PATCH 145/339] FIX: [STUDIO-2447] ImageGroid: clear scroll offset on list changed Change-Id: I8c2b2bfed096e99e2223ff109e5d70ea2bc3a82a --- src/slic3r/GUI/ImageGrid.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/slic3r/GUI/ImageGrid.cpp b/src/slic3r/GUI/ImageGrid.cpp index e552783a3e..49e02c85f4 100644 --- a/src/slic3r/GUI/ImageGrid.cpp +++ b/src/slic3r/GUI/ImageGrid.cpp @@ -69,6 +69,7 @@ void ImageGrid::SetFileSystem(boost::shared_ptr file_sys) m_row_count = 0; m_col_count = 1; m_row_offset = 0; + m_scroll_offset = 0; UpdateFileSystem(); } @@ -103,6 +104,7 @@ void Slic3r::GUI::ImageGrid::SetGroupMode(int mode) m_row_offset = index / m_col_count * 4; if (m_row_offset >= m_row_count) m_row_offset = m_row_count == 0 ? 0 : m_row_count - 1; + m_scroll_offset = 0; } void Slic3r::GUI::ImageGrid::SetSelecting(bool selecting) @@ -141,6 +143,7 @@ void Slic3r::GUI::ImageGrid::Select(size_t index) m_row_offset = index / m_col_count * 4; if (m_row_offset >= m_row_count) m_row_offset = m_row_count == 0 ? 0 : m_row_count - 1; + m_scroll_offset = 0; Refresh(); } @@ -244,6 +247,7 @@ void ImageGrid::UpdateLayout() m_row_count = nrow > 0 ? nrow + 1 : 0; if (m_row_offset >= m_row_count) m_row_offset = m_row_count == 0 ? 0 : m_row_count - 1; + m_scroll_offset = 0; // create mask if (m_file_sys->GetGroupMode() == PrinterFileSystem::G_NONE) { mask_size.x = (m_col_count - 1) * m_cell_size.GetWidth() + m_image_size.GetWidth(); @@ -382,13 +386,14 @@ void ImageGrid::resize(wxSizeEvent& event) void ImageGrid::mouseWheelMoved(wxMouseEvent &event) { auto delta = -event.GetWheelRotation(); - m_scroll_offset += delta; - int max = m_row_count * m_cell_size.GetHeight() / 4; - if (m_scroll_offset < 0) - m_scroll_offset = 0; - else if (m_scroll_offset >= max) - m_scroll_offset = max - 1; - m_row_offset = m_scroll_offset * 4 / m_cell_size.GetHeight(); + m_scroll_offset += delta * 4; + delta = m_scroll_offset / m_cell_size.GetHeight(); + m_row_offset += delta; + if (m_row_offset < 0) + m_row_offset = 0; + else if (m_row_offset >= m_row_count) + m_row_offset = m_row_count == 0 ? 0 : m_row_count - 1; + m_scroll_offset -= delta * m_cell_size.GetHeight(); m_timer.StartOnce(4000); // Show position bar UpdateFocusRange(); Refresh(); From 6ddcc1457785e9fbda8d449b27ce9487845d8879 Mon Sep 17 00:00:00 2001 From: "salt.wei" Date: Mon, 27 Mar 2023 11:04:11 +0800 Subject: [PATCH 146/339] ENH: support fuzzy all wall lines Signed-off-by: salt.wei Change-Id: If6754b6a958203459882a125048e01b347e0a4db --- src/libslic3r/PerimeterGenerator.cpp | 4 ++-- src/libslic3r/PrintConfig.cpp | 7 +++++-- src/libslic3r/PrintConfig.hpp | 1 + 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index d7e79180e4..f938a12b99 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -801,8 +801,8 @@ void PerimeterGenerator::process_classic() break; } { - const bool fuzzify_contours = this->config->fuzzy_skin != FuzzySkinType::None && i == 0 && this->layer_id > 0; - const bool fuzzify_holes = fuzzify_contours && this->config->fuzzy_skin == FuzzySkinType::All; + const bool fuzzify_contours = this->config->fuzzy_skin != FuzzySkinType::None && ((i == 0 && this->layer_id > 0) || this->config->fuzzy_skin == FuzzySkinType::AllWalls); + const bool fuzzify_holes = fuzzify_contours && (this->config->fuzzy_skin == FuzzySkinType::All || this->config->fuzzy_skin == FuzzySkinType::AllWalls); for (const ExPolygon& expolygon : offsets) { // Outer contour may overlap with an inner contour, // inner contour may overlap with another inner contour, diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index d4a8e567dd..ee3cb4436b 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -108,7 +108,8 @@ CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(GCodeFlavor) static t_config_enum_values s_keys_map_FuzzySkinType { { "none", int(FuzzySkinType::None) }, { "external", int(FuzzySkinType::External) }, - { "all", int(FuzzySkinType::All) } + { "all", int(FuzzySkinType::All) }, + { "allwalls", int(FuzzySkinType::AllWalls)} }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(FuzzySkinType) @@ -1428,8 +1429,10 @@ void PrintConfigDef::init_fff_params() def->enum_values.push_back("none"); def->enum_values.push_back("external"); def->enum_values.push_back("all"); + def->enum_values.push_back("allwalls"); def->enum_labels.push_back(L("None")); - def->enum_labels.push_back(L("Outer wall")); + def->enum_labels.push_back(L("Contour")); + def->enum_labels.push_back(L("Contour and hole")); def->enum_labels.push_back(L("All walls")); def->mode = comSimple; def->set_default_value(new ConfigOptionEnum(FuzzySkinType::None)); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 746d3c3c15..c043404318 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -40,6 +40,7 @@ enum class FuzzySkinType { None, External, All, + AllWalls, }; enum PrintHostType { From 0c2ba2b0a22610c411e411a0f78c1640df732894 Mon Sep 17 00:00:00 2001 From: Arthur Date: Fri, 24 Mar 2023 17:59:53 +0800 Subject: [PATCH 147/339] ENH: improve sharp detection for small regions 1. improve sharp detection for small regions. When the region is around 1 extrsion width, previous method may miss some sharp tails. Now we reduce the width threshold to 0.1*extrusion_width for sharp tails. When checking "nothing below", need to expand the poly a little. Example: benchy. 2. improve is_support_necessary. Only popup warning for sharp tail and large cantilever (longer than 6mm). Jira: STUDIO-2567 Change-Id: I5e977e7766b35409891d1b41e36278e3f07fa372 (cherry picked from commit c9d8a7c1c3bbd4367c7fc44408c67e5c534167f4) --- src/libslic3r/Print.hpp | 1 + src/libslic3r/PrintObject.cpp | 30 +++++++++++++----------------- src/libslic3r/SupportMaterial.cpp | 5 +++-- src/libslic3r/TreeSupport.cpp | 13 ++++++++++--- src/libslic3r/TreeSupport.hpp | 1 + 5 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index b68d0a95af..ef43affa10 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -51,6 +51,7 @@ struct groupedVolumeSlices enum SupportNecessaryType { NoNeedSupp=0, SharpTail, + Cantilever, LargeOverhang, }; diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 0988676e4d..3d6b0c3563 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -458,7 +458,7 @@ void PrintObject::generate_support_material() this->_generate_support_material(); m_print->throw_if_canceled(); - } else { + } else if(!m_print->get_no_check_flag()) { // BBS: pop a warning if objects have significant amount of overhangs but support material is not enabled m_print->set_status(50, L("Checking support necessity")); typedef std::chrono::high_resolution_clock clock_; @@ -468,20 +468,16 @@ void PrintObject::generate_support_material() SupportNecessaryType sntype = this->is_support_necessary(); double duration{ std::chrono::duration_cast(clock_::now() - t0).count() }; - BOOST_LOG_TRIVIAL(info) << std::fixed << std::setprecision(0) - << "is_support_necessary took " << (duration / 60) << " minutes and " - << std::setprecision(3) - << std::fmod(duration, 60.0) << " seconds." << std::endl; + BOOST_LOG_TRIVIAL(info) << std::fixed << std::setprecision(0) << "is_support_necessary takes " << duration << " secs."; if (sntype != NoNeedSupp) { - if (sntype == SharpTail) { - std::string warning_message = format(L("It seems object %s has completely floating regions. Please re-orient the object or enable support generation."), - this->model_object()->name); - this->active_step_add_warning(PrintStateBase::WarningLevel::CRITICAL, warning_message, PrintStateBase::SlicingNeedSupportOn); - } else { - std::string warning_message = format(L("It seems object %s has large overhangs. Please enable support generation."), this->model_object()->name); - this->active_step_add_warning(PrintStateBase::WarningLevel::CRITICAL, warning_message, PrintStateBase::SlicingNeedSupportOn); - } + std::map reasons = { + {SharpTail,L("floating regions")}, + {Cantilever,L("floating cantilever")}, + {LargeOverhang,L("large overhangs")} }; + std::string warning_message = format(L("It seems object %s has %s. Please re-orient the object or enable support generation."), + this->model_object()->name, reasons[sntype]); + this->active_step_add_warning(PrintStateBase::WarningLevel::CRITICAL, warning_message, PrintStateBase::SlicingNeedSupportOn); } #if 0 @@ -2580,9 +2576,9 @@ template void PrintObject::remove_bridges_from_contacts( SupportNecessaryType PrintObject::is_support_necessary() { -#if 0 static const double super_overhang_area_threshold = SQ(scale_(5.0)); - + const double cantilevel_dist_thresh = scale_(6); +#if 0 double threshold_rad = (m_config.support_threshold_angle.value < EPSILON ? 30 : m_config.support_threshold_angle.value + 1) * M_PI / 180.; int enforce_support_layers = m_config.enforce_support_layers; const coordf_t extrusion_width = m_config.line_width.value; @@ -2670,8 +2666,8 @@ SupportNecessaryType PrintObject::is_support_necessary() this->clear_support_layers(); if (tree_support.has_sharp_tails) return SharpTail; - else if (tree_support.has_cantilever) - return LargeOverhang; + else if (tree_support.has_cantilever && tree_support.max_cantilevel_dist > cantilevel_dist_thresh) + return Cantilever; #endif return NoNeedSupp; } diff --git a/src/libslic3r/SupportMaterial.cpp b/src/libslic3r/SupportMaterial.cpp index 71c35f2d6e..3c037ee8eb 100644 --- a/src/libslic3r/SupportMaterial.cpp +++ b/src/libslic3r/SupportMaterial.cpp @@ -1638,8 +1638,8 @@ static inline ExPolygons detect_overhangs( // 1. nothing below // Check whether this is a sharp tail region. // Should use lower_layer_expolys without any offset. Otherwise, it may missing sharp tails near the main body. - if (g_config_support_sharp_tails && overlaps({ expoly }, lower_layer_expolys)) { - is_sharp_tail = expoly.area() < area_thresh_well_supported && !offset_ex(expoly,-0.5*fw).empty(); + if (g_config_support_sharp_tails && overlaps(offset_ex(expoly, 0.5 * fw), lower_layer_expolys)) { + is_sharp_tail = expoly.area() < area_thresh_well_supported && !offset_ex(expoly,-0.1*fw).empty(); } if (is_sharp_tail) { @@ -2366,6 +2366,7 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_ if (layer->lower_layer == NULL) continue; Layer* lower_layer = layer->lower_layer; auto cluster_boundary = intersection(cluster.merged_overhangs_dilated, offset(lower_layer->lslices, scale_(0.5))); + if (cluster_boundary.empty()) continue; double dist_max = 0; Points cluster_pts; for (auto& poly : cluster.merged_overhangs_dilated) diff --git a/src/libslic3r/TreeSupport.cpp b/src/libslic3r/TreeSupport.cpp index 5c69ea1e56..4c37b2c3cd 100644 --- a/src/libslic3r/TreeSupport.cpp +++ b/src/libslic3r/TreeSupport.cpp @@ -898,8 +898,8 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) bool is_sharp_tail = false; // 1. nothing below // this is a sharp tail region if it's small but non-ignorable - if (!overlaps({ expoly }, lower_polys)) { - is_sharp_tail = expoly.area() < area_thresh_well_supported && !offset_ex(expoly, -0.5 * extrusion_width_scaled).empty(); + if (!overlaps(offset_ex(expoly, 0.5 * extrusion_width_scaled), lower_polys)) { + is_sharp_tail = expoly.area() < area_thresh_well_supported && !offset_ex(expoly, -0.1 * extrusion_width_scaled).empty(); } if (is_sharp_tail) { @@ -912,7 +912,10 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) has_sharp_tails = true; #ifdef SUPPORT_TREE_DEBUG_TO_SVG SVG svg(get_svg_filename(std::to_string(layer->print_z), "sharp_tail"), m_object->bounding_box()); - if (svg.is_opened()) svg.draw(overhang, "yellow"); + if (svg.is_opened()) { + svg.draw(overhang, "yellow"); + svg.draw(lower_layer->lslices, "red"); + } #endif } } @@ -1045,11 +1048,13 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) m_object->project_and_append_custom_facets(false, EnforcerBlockerType::BLOCKER, blockers); // check whether the overhang cluster is cantilever (far awary from main body) + max_cantilevel_dist = 0; for (auto& cluster : overhangClusters) { Layer* layer = m_object->get_layer(cluster.min_layer); if (layer->lower_layer == NULL) continue; Layer* lower_layer = layer->lower_layer; auto cluster_boundary = intersection(cluster.merged_poly, offset(lower_layer->lslices, scale_(0.5))); + if (cluster_boundary.empty()) continue; double dist_max = 0; Points cluster_pts; for (auto& poly : cluster.merged_poly) @@ -1068,9 +1073,11 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) auto p_overhang = it->second; m_object->get_layer(layer_nr)->cantilevers.emplace_back(*p_overhang); } + max_cantilevel_dist = std::max(max_cantilevel_dist, dist_max); cluster.is_cantilever = true; } } + BOOST_LOG_TRIVIAL(info) << "max_cantilevel_dist=" << max_cantilevel_dist; if (is_auto(stype) && g_config_remove_small_overhangs) { if (blockers.size() < m_object->layer_count()) diff --git a/src/libslic3r/TreeSupport.hpp b/src/libslic3r/TreeSupport.hpp index a114a45c5f..eb9c7f0c79 100644 --- a/src/libslic3r/TreeSupport.hpp +++ b/src/libslic3r/TreeSupport.hpp @@ -380,6 +380,7 @@ public: bool has_overhangs = false; bool has_sharp_tails = false; bool has_cantilever = false; + double max_cantilevel_dist = 0; SupportType support_type; SupportMaterialStyle support_style; From 778761908a5a59886b37c236f995b814c86cf986 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Thu, 23 Mar 2023 13:15:57 +0800 Subject: [PATCH 148/339] ENH: [STUDIO-2548] maximum recent project count Change-Id: Iba9c9959089ff1cb9dfdba717fe62b99375da137 --- src/libslic3r/AppConfig.cpp | 4 ++ src/slic3r/GUI/MainFrame.cpp | 29 ++++++++++++++ src/slic3r/GUI/MainFrame.hpp | 3 ++ src/slic3r/GUI/Preferences.cpp | 69 +++++++++++++++++++++++++++++----- src/slic3r/GUI/Preferences.hpp | 2 +- 5 files changed, 97 insertions(+), 10 deletions(-) diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index 7aad4666a8..9d2cb256ab 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -284,6 +284,10 @@ void AppConfig::set_defaults() if (get("mouse_wheel").empty()) { set("mouse_wheel", "0"); } + + if (get("max_recent_count").empty()) { + set("max_recent_count", "18"); + } if (get("staff_pick_switch").empty()) { set_bool("staff_pick_switch", true); diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index fe490c1053..8b0cbc3c42 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -178,6 +178,10 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ wxGetApp().app_config->set_bool("dump_video", false); + wxString max_recent_count_str = wxGetApp().app_config->get("max_recent_count"); + long max_recent_count = 18; + if (max_recent_count_str.ToLong(&max_recent_count)) + set_max_recent_count((int)max_recent_count); //reset log level auto loglevel = wxGetApp().app_config->get("severity_level"); @@ -2498,6 +2502,23 @@ void MainFrame::show_publish_button(bool show) } } +void MainFrame::set_max_recent_count(int max) +{ + max = max < 0 ? 0 : max > 10000 ? 10000 : max; + size_t count = m_recent_projects.GetCount(); + m_recent_projects.SetMaxFiles(max); + if (count != m_recent_projects.GetCount()) { + count = m_recent_projects.GetCount(); + std::vector recent_projects; + for (size_t i = 0; i < count; ++i) { + recent_projects.push_back(into_u8(m_recent_projects.GetHistoryFile(i))); + } + wxGetApp().app_config->set_recent_projects(recent_projects); + wxGetApp().app_config->save(); + m_webview->SendRecentList(""); + } +} + void MainFrame::open_menubar_item(const wxString& menu_name,const wxString& item_name) { if (m_menubar == nullptr) @@ -3007,6 +3028,14 @@ void MainFrame::FileHistory::LoadThumbnails() m_load_called = true; } +inline void MainFrame::FileHistory::SetMaxFiles(int max) +{ + m_fileMaxFiles = max; + size_t numFiles = m_fileHistory.size(); + while (numFiles > m_fileMaxFiles) + RemoveFileFromHistory(--numFiles); +} + void MainFrame::get_recent_projects(boost::property_tree::wptree &tree) { for (size_t i = 0; i < m_recent_projects.GetCount(); ++i) { diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index 58ed9314c4..437a9079cb 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -154,6 +154,8 @@ class MainFrame : public DPIFrame size_t FindFileInHistory(const wxString &file); void LoadThumbnails(); + + void SetMaxFiles(int max); private: std::deque m_thumbnails; bool m_load_called = false; @@ -243,6 +245,7 @@ public: void update_title(); void show_publish_button(bool show); + void set_max_recent_count(int max); void update_title_colour_after_set_title(); void show_option(bool show); diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 6a4eaaa45b..fac62a3f54 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -378,6 +378,51 @@ wxBoxSizer *PreferencesDialog::create_item_multiple_combobox( return m_sizer_tcombox; } +wxBoxSizer *PreferencesDialog::create_item_input(wxString title, wxString title2, wxWindow *parent, wxString tooltip, std::string param, std::function onchange) +{ + wxBoxSizer *sizer_input = new wxBoxSizer(wxHORIZONTAL); + auto input_title = new wxStaticText(parent, wxID_ANY, title); + input_title->SetForegroundColour(DESIGN_GRAY900_COLOR); + input_title->SetFont(::Label::Body_13); + input_title->SetToolTip(tooltip); + input_title->Wrap(-1); + + auto input = new ::TextInput(parent, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, DESIGN_INPUT_SIZE, wxTE_PROCESS_ENTER); + StateColor input_bg(std::pair(wxColour("#F0F0F1"), StateColor::Disabled), std::pair(*wxWHITE, StateColor::Enabled)); + input->SetBackgroundColor(input_bg); + input->GetTextCtrl()->SetValue(app_config->get(param)); + + auto second_title = new wxStaticText(parent, wxID_ANY, title2, wxDefaultPosition, DESIGN_TITLE_SIZE, 0); + second_title->SetForegroundColour(DESIGN_GRAY900_COLOR); + second_title->SetFont(::Label::Body_13); + second_title->SetToolTip(tooltip); + second_title->Wrap(-1); + + sizer_input->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); + sizer_input->Add(input_title, 0, wxALIGN_CENTER_VERTICAL | wxALL, 3); + sizer_input->Add(input, 0, wxALIGN_CENTER_VERTICAL, 0); + sizer_input->Add(0, 0, 0, wxEXPAND | wxLEFT, 3); + sizer_input->Add(second_title, 0, wxALIGN_CENTER_VERTICAL | wxALL, 3); + + input->GetTextCtrl()->Bind(wxEVT_TEXT_ENTER, [this, param, input, onchange](wxCommandEvent &e) { + auto value = input->GetTextCtrl()->GetValue(); + app_config->set(param, std::string(value.mb_str())); + app_config->save(); + onchange(value); + e.Skip(); + }); + + input->GetTextCtrl()->Bind(wxEVT_KILL_FOCUS, [this, param, input, onchange](wxFocusEvent &e) { + auto value = input->GetTextCtrl()->GetValue(); + app_config->set(param, std::string(value.mb_str())); + app_config->save(); + onchange(value); + e.Skip(); + }); + + return sizer_input; +} + wxBoxSizer *PreferencesDialog::create_item_backup_input(wxString title, wxWindow *parent, wxString tooltip, std::string param) { wxBoxSizer *m_sizer_input = new wxBoxSizer(wxHORIZONTAL); @@ -400,10 +445,10 @@ wxBoxSizer *PreferencesDialog::create_item_backup_input(wxString title, wxWindow second_title->Wrap(-1); m_sizer_input->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); - m_sizer_input->Add(input_title, 0, wxALIGN_CENTER | wxALL, 3); - m_sizer_input->Add(input, 0, wxALIGN_CENTER, 0); + m_sizer_input->Add(input_title, 0, wxALIGN_CENTER_VERTICAL | wxALL, 3); + m_sizer_input->Add(input, 0, wxALIGN_CENTER_VERTICAL, 0); m_sizer_input->Add(0, 0, 0, wxEXPAND | wxLEFT, 3); - m_sizer_input->Add(second_title, 0, wxALIGN_CENTER| wxALL, 3); + m_sizer_input->Add(second_title, 0, wxALIGN_CENTER_VERTICAL | wxALL, 3); input->GetTextCtrl()->Bind(wxEVT_COMMAND_TEXT_UPDATED, [this, param, input](wxCommandEvent &e) { @@ -856,10 +901,15 @@ wxWindow* PreferencesDialog::create_general_page() auto item_modelmall = create_item_checkbox(_L("Show staff-picks"), page, _L("Show staff-picks"), 50, "staff_pick_switch"); - auto title_backup = create_item_title(_L("Backup"), page, _L("Backup")); - //auto item_backup = create_item_switch(_L("Backup switch"), page, _L("Backup switch"), "units"); - auto item_backup = create_item_checkbox(_L("Auto-Backup"), page,_L("Auto-Backup"), 50, "backup_switch"); - auto item_backup_interval = create_item_backup_input(_L("Backup interval"), page, _L("Backup interval"), "backup_interval"); + auto title_project = create_item_title(_L("Project"), page, ""); + auto item_max_recent_count = create_item_input(_L("Maximum recent projects"), "", page, _L("Maximum count of recent projects"), "max_recent_count", [](wxString value) { + long max = 0; + if (value.ToLong(&max)) + wxGetApp().mainframe->set_max_recent_count(max); + }); + // auto item_backup = create_item_switch(_L("Backup switch"), page, _L("Backup switch"), "units"); + auto item_backup = create_item_checkbox(_L("Auto-Backup"), page,_L("Backup your project periodically for restoring from the occasional crash."), 50, "backup_switch"); + auto item_backup_interval = create_item_backup_input(_L("every"), page, _L("The peroid of backup in seconds."), "backup_interval"); //downloads auto title_downloads = create_item_title(_L("Downloads"), page, _L("Downloads")); @@ -888,9 +938,10 @@ wxWindow* PreferencesDialog::create_general_page() sizer_page->Add(title_modelmall, 0, wxTOP | wxEXPAND, FromDIP(20)); sizer_page->Add(item_modelmall, 0, wxTOP, FromDIP(3)); - sizer_page->Add(title_backup, 0, wxTOP| wxEXPAND, FromDIP(20)); + sizer_page->Add(title_project, 0, wxTOP| wxEXPAND, FromDIP(20)); + sizer_page->Add(item_max_recent_count, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_backup, 0, wxTOP,FromDIP(3)); - sizer_page->Add(item_backup_interval, 0, wxTOP, FromDIP(3)); + item_backup->Add(item_backup_interval, 0, wxLEFT, 0); sizer_page->Add(title_downloads, 0, wxTOP| wxEXPAND, FromDIP(20)); sizer_page->Add(item_downloads, 0, wxEXPAND, FromDIP(3)); diff --git a/src/slic3r/GUI/Preferences.hpp b/src/slic3r/GUI/Preferences.hpp index cd497110d3..bfe3c98cde 100644 --- a/src/slic3r/GUI/Preferences.hpp +++ b/src/slic3r/GUI/Preferences.hpp @@ -111,7 +111,7 @@ public: wxBoxSizer *create_item_darkmode_checkbox(wxString title, wxWindow *parent, wxString tooltip, int padding_left, std::string param); void set_dark_mode(); wxWindow* create_item_downloads(wxWindow* parent, int padding_left, std::string param); - wxBoxSizer* create_item_backup_checkbox(wxString title, wxWindow* parent, wxString tooltip, int padding_left, std::string param); + wxBoxSizer *create_item_input(wxString title, wxString title2, wxWindow *parent, wxString tooltip, std::string param, std::function onchange = {}); wxBoxSizer *create_item_backup_input(wxString title, wxWindow *parent, wxString tooltip, std::string param); wxBoxSizer *create_item_multiple_combobox( wxString title, wxWindow *parent, wxString tooltip, int padding_left, std::string parama, std::vector vlista, std::vector vlistb); From 8c39fbaf22aeb336086ea1b397b4056edcb089e1 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Thu, 23 Mar 2023 14:14:36 +0800 Subject: [PATCH 149/339] ENH: [STUDIO-2549] remember my choice on unsaved project/presets Change-Id: Ib9fc9074075bfce19f9a02be3aff7b3d04e3802a --- src/slic3r/GUI/GUI_App.cpp | 4 +++ src/slic3r/GUI/MsgDialog.cpp | 4 +-- src/slic3r/GUI/MsgDialog.hpp | 2 +- src/slic3r/GUI/Plater.cpp | 21 +++++++---- src/slic3r/GUI/Preferences.cpp | 46 +++++++++++++++++++++++-- src/slic3r/GUI/Preferences.hpp | 1 + src/slic3r/GUI/UnsavedChangesDialog.cpp | 28 +++++++++++++++ src/slic3r/GUI/UnsavedChangesDialog.hpp | 9 +++-- src/slic3r/GUI/Widgets/CheckBox.cpp | 4 +-- src/slic3r/GUI/Widgets/CheckBox.hpp | 2 +- 10 files changed, 103 insertions(+), 18 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 7b74b2830f..fdd5a71edd 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1394,6 +1394,8 @@ std::string GUI_App::get_plugin_url(std::string name, std::string country_code) std::string curr_version = SLIC3R_VERSION; std::string using_version = curr_version.substr(0, 9) + "00"; + if (name == "cameratools") + using_version = curr_version.substr(0, 6) + "00.00"; url += (boost::format("?slicer/%1%/cloud=%2%") % name % using_version).str(); //url += (boost::format("?slicer/plugins/cloud=%1%") % "01.01.00.00").str(); return url; @@ -5246,6 +5248,8 @@ bool GUI_App::check_and_save_current_preset_changes(const wxString& caption, con int act_buttons = UnsavedChangesDialog::ActionButtons::SAVE; if (dont_save_insted_of_discard) act_buttons |= UnsavedChangesDialog::ActionButtons::DONT_SAVE; + if (remember_choice) + act_buttons |= UnsavedChangesDialog::ActionButtons::REMEMBER_CHOISE; UnsavedChangesDialog dlg(caption, header, "", act_buttons); if (dlg.ShowModal() == wxID_CANCEL) return false; diff --git a/src/slic3r/GUI/MsgDialog.cpp b/src/slic3r/GUI/MsgDialog.cpp index 51ef98f67e..cf07bb3347 100644 --- a/src/slic3r/GUI/MsgDialog.cpp +++ b/src/slic3r/GUI/MsgDialog.cpp @@ -74,7 +74,7 @@ MsgDialog::MsgDialog(wxWindow *parent, const wxString &title, const wxString &he for (auto mb : m_buttons) { delete mb.second->buttondata ; delete mb.second; } } -void MsgDialog::show_dsa_button() +void MsgDialog::show_dsa_button(wxString const &title) { m_checkbox_dsa = new CheckBox(this); m_dsa_sizer->Add(m_checkbox_dsa, 0, wxALL | wxALIGN_CENTER, FromDIP(2)); @@ -86,7 +86,7 @@ void MsgDialog::show_dsa_button() e.Skip(); }); - auto m_text_dsa = new wxStaticText(this, wxID_ANY, _L("Don't show again"), wxDefaultPosition, wxDefaultSize, 0); + auto m_text_dsa = new wxStaticText(this, wxID_ANY, title.IsEmpty() ? _L("Don't show again") : title, wxDefaultPosition, wxDefaultSize, 0); m_dsa_sizer->Add(m_text_dsa, 0, wxALL | wxALIGN_CENTER, FromDIP(2)); m_text_dsa->SetFont(::Label::Body_13); m_text_dsa->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#323A3D"))); diff --git a/src/slic3r/GUI/MsgDialog.hpp b/src/slic3r/GUI/MsgDialog.hpp index 32c4a339cf..5f44bd22e2 100644 --- a/src/slic3r/GUI/MsgDialog.hpp +++ b/src/slic3r/GUI/MsgDialog.hpp @@ -60,7 +60,7 @@ struct MsgDialog : DPIDialog MsgDialog &operator=(const MsgDialog &) = delete; virtual ~MsgDialog(); - void show_dsa_button(); + void show_dsa_button(wxString const & title = {}); bool get_checkbox_state(); virtual void on_dpi_changed(const wxRect& suggested_rect); void SetButtonLabel(wxWindowID btn_id, const wxString& label, bool set_focus = false); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 51796d8a16..8d60fa64ad 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -7555,7 +7555,7 @@ int Plater::new_project(bool skip_confirm, bool silent) (yes_or_no ? _L("You can keep the modified presets to the new project or discard them") : _L("You can keep the modifield presets to the new project, discard or save changes as new presets.")); using ab = UnsavedChangesDialog::ActionButtons; - int act_buttons = ab::KEEP; + int act_buttons = ab::KEEP | ab::REMEMBER_CHOISE; if (!yes_or_no) act_buttons |= ab::SAVE; return wxGetApp().check_and_keep_current_preset_changes(_L("Creating a new project"), header, act_buttons, &transfer_preset_changes); @@ -8870,14 +8870,21 @@ int GUI::Plater::close_with_confirm(std::function second_check) return wxID_NO; } - auto result = MessageDialog(static_cast(this), _L("The current project has unsaved changes, save it before continue?"), - wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Save"), wxYES_NO | wxCANCEL | wxYES_DEFAULT | wxCENTRE).ShowModal(); + MessageDialog dlg(static_cast(this), _L("The current project has unsaved changes, save it before continue?"), + wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Save"), wxYES_NO | wxCANCEL | wxYES_DEFAULT | wxCENTRE); + dlg.show_dsa_button(_L("Remember my choice.")); + auto choise = wxGetApp().app_config->get("save_project_choise"); + auto result = choise.empty() ? dlg.ShowModal() : choise == "yes" ? wxID_YES : wxID_NO; if (result == wxID_CANCEL) return result; - else if (result == wxID_YES) { - result = save_project(); - if (result == wxID_CANCEL) - return result; + else { + if (dlg.get_checkbox_state()) + wxGetApp().app_config->set("save_project_choise", result == wxID_YES ? "yes" : "no"); + if (result == wxID_YES) { + result = save_project(); + if (result == wxID_CANCEL) + return result; + } } if (second_check && !second_check(result == wxID_YES)) return wxID_CANCEL; diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index fac62a3f54..f830ff73cf 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -666,6 +666,40 @@ wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxWindow *pa return m_sizer_checkbox; } +wxBoxSizer *PreferencesDialog::create_item_button(wxString title, wxString title2, wxWindow *parent, wxString tooltip, std::function onclick) +{ + wxBoxSizer *m_sizer_checkbox = new wxBoxSizer(wxHORIZONTAL); + + m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); + auto m_staticTextPath = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); + // m_staticTextPath->SetMaxSize(wxSize(FromDIP(440), -1)); + m_staticTextPath->SetForegroundColour(DESIGN_GRAY900_COLOR); + m_staticTextPath->SetFont(::Label::Body_13); + m_staticTextPath->Wrap(-1); + + auto m_button_download = new Button(parent, title2); + + StateColor abort_bg(std::pair(wxColour(255, 255, 255), StateColor::Disabled), std::pair(wxColour(206, 206, 206), StateColor::Pressed), + std::pair(wxColour(238, 238, 238), StateColor::Hovered), std::pair(wxColour(255, 255, 255), StateColor::Enabled), + std::pair(wxColour(255, 255, 255), StateColor::Normal)); + m_button_download->SetBackgroundColor(abort_bg); + StateColor abort_bd(std::pair(wxColour(144, 144, 144), StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); + m_button_download->SetBorderColor(abort_bd); + StateColor abort_text(std::pair(wxColour(144, 144, 144), StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); + m_button_download->SetTextColor(abort_text); + m_button_download->SetFont(Label::Body_10); + m_button_download->SetMinSize(wxSize(FromDIP(58), FromDIP(22))); + m_button_download->SetSize(wxSize(FromDIP(58), FromDIP(22))); + m_button_download->SetCornerRadius(FromDIP(12)); + + m_button_download->Bind(wxEVT_BUTTON, [this, onclick](auto &e) { onclick(); }); + + m_sizer_checkbox->Add(m_staticTextPath, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5)); + m_sizer_checkbox->Add(m_button_download, 0, wxALL, FromDIP(5)); + + return m_sizer_checkbox; +} + wxWindow* PreferencesDialog::create_item_downloads(wxWindow* parent, int padding_left, std::string param) { wxString download_path = wxString::FromUTF8(app_config->get("download_path")); @@ -881,8 +915,11 @@ wxWindow* PreferencesDialog::create_general_page() auto item_hints = create_item_checkbox(_L("Show \"Tip of the day\" notification after start"), page, _L("If enabled, useful hints are displayed at startup."), 50, "show_hints"); - auto title_sync_settings = create_item_title(_L("User sync"), page, _L("User sync")); + auto title_presets = create_item_title(_L("Presets"), page, _L("Presets")); 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_save_presets = create_item_button(_L("Clear my choice on the unsaved presets."), _L("Clear"), page, _L("Clear my choice on the unsaved presets."), []() { + wxGetApp().app_config->set("save_preset_choise", ""); + }); #ifdef _WIN32 auto title_associate_file = create_item_title(_L("Associate files to BambuStudio"), page, _L("Associate files to BambuStudio")); @@ -907,6 +944,9 @@ wxWindow* PreferencesDialog::create_general_page() if (value.ToLong(&max)) wxGetApp().mainframe->set_max_recent_count(max); }); + auto item_save_choise = create_item_button(_L("Clear my choice on the unsaved projects."), _L("Clear"), page, _L("Clear my choice on the unsaved projects."), []() { + wxGetApp().app_config->set("save_project_choise", ""); + }); // auto item_backup = create_item_switch(_L("Backup switch"), page, _L("Backup switch"), "units"); auto item_backup = create_item_checkbox(_L("Auto-Backup"), page,_L("Backup your project periodically for restoring from the occasional crash."), 50, "backup_switch"); auto item_backup_interval = create_item_backup_input(_L("every"), page, _L("The peroid of backup in seconds."), "backup_interval"); @@ -927,8 +967,9 @@ wxWindow* PreferencesDialog::create_general_page() sizer_page->Add(item_region, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_currency, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_hints, 0, wxTOP, FromDIP(3)); - sizer_page->Add(title_sync_settings, 0, wxTOP | wxEXPAND, FromDIP(20)); + sizer_page->Add(title_presets, 0, wxTOP | wxEXPAND, FromDIP(20)); sizer_page->Add(item_user_sync, 0, wxTOP, FromDIP(3)); + sizer_page->Add(item_save_presets, 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)); @@ -940,6 +981,7 @@ wxWindow* PreferencesDialog::create_general_page() sizer_page->Add(title_project, 0, wxTOP| wxEXPAND, FromDIP(20)); sizer_page->Add(item_max_recent_count, 0, wxTOP, FromDIP(3)); + sizer_page->Add(item_save_choise, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_backup, 0, wxTOP,FromDIP(3)); item_backup->Add(item_backup_interval, 0, wxLEFT, 0); diff --git a/src/slic3r/GUI/Preferences.hpp b/src/slic3r/GUI/Preferences.hpp index bfe3c98cde..419242f7ce 100644 --- a/src/slic3r/GUI/Preferences.hpp +++ b/src/slic3r/GUI/Preferences.hpp @@ -110,6 +110,7 @@ public: wxBoxSizer *create_item_checkbox(wxString title, wxWindow *parent, wxString tooltip, int padding_left, std::string param); wxBoxSizer *create_item_darkmode_checkbox(wxString title, wxWindow *parent, wxString tooltip, int padding_left, std::string param); void set_dark_mode(); + wxBoxSizer *create_item_button(wxString title, wxString title2, wxWindow *parent, wxString tooltip, std::function onclick); wxWindow* create_item_downloads(wxWindow* parent, int padding_left, std::string param); wxBoxSizer *create_item_input(wxString title, wxString title2, wxWindow *parent, wxString tooltip, std::string param, std::function onchange = {}); wxBoxSizer *create_item_backup_input(wxString title, wxWindow *parent, wxString tooltip, std::string param); diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp index 82c8009a7d..6bf8ccc115 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.cpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp @@ -27,6 +27,7 @@ #include "BitmapCache.hpp" #include "PresetComboBoxes.hpp" #include "Widgets/RoundedRectangle.hpp" +#include "Widgets/CheckBox.hpp" using boost::optional; @@ -818,6 +819,22 @@ UnsavedChangesDialog::UnsavedChangesDialog(Preset::Type type, PresetCollection * } +inline int UnsavedChangesDialog::ShowModal() +{ + auto choise_key = "save_preset_choise"; + auto choise = wxGetApp().app_config->get(choise_key); + long result = 0; + if ((m_buttons & REMEMBER_CHOISE) && !choise.empty() && wxString(choise).ToLong(&result) && (1 << result) & (m_buttons | DONT_SAVE)) { + m_exit_action = Action(result); + return 0; + } + int r = wxDialog::ShowModal(); + if (r != wxID_CANCEL && dynamic_cast<::CheckBox*>(FindWindowById(wxID_APPLY))->GetValue()) { + wxGetApp().app_config->set(choise_key, std::to_string(int(m_exit_action))); + } + return r; +} + void UnsavedChangesDialog::build(Preset::Type type, PresetCollection *dependent_presets, const std::string &new_selected_preset, const wxString &header) { SetBackgroundColour(*wxWHITE); @@ -935,6 +952,17 @@ void UnsavedChangesDialog::build(Preset::Type type, PresetCollection *dependent_ wxBoxSizer *m_sizer_button = new wxBoxSizer(wxHORIZONTAL); + auto checkbox_sizer = new wxBoxSizer(wxHORIZONTAL); + auto checkbox = new ::CheckBox(this, wxID_APPLY); + checkbox_sizer->Add(checkbox, 0, wxALL | wxALIGN_CENTER, FromDIP(2)); + + auto checkbox_text = new wxStaticText(this, wxID_ANY, _L("Remember my choice."), wxDefaultPosition, wxDefaultSize, 0); + checkbox_sizer->Add(checkbox_text, 0, wxALL | wxALIGN_CENTER, FromDIP(2)); + checkbox_text->SetFont(::Label::Body_13); + checkbox_text->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#323A3D"))); + m_sizer_button->Add(checkbox_sizer, 0, wxLEFT, FromDIP(22)); + checkbox_sizer->Show(bool(m_buttons & REMEMBER_CHOISE)); + m_sizer_button->Add(0, 0, 1, 0, 0); // Add Buttons diff --git a/src/slic3r/GUI/UnsavedChangesDialog.hpp b/src/slic3r/GUI/UnsavedChangesDialog.hpp index 04dc15d81b..b1bfbd0eb4 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.hpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.hpp @@ -277,9 +277,9 @@ protected: enum class Action { Undef, - Transfer, + Transfer, // Or KEEP + Save, Discard, - Save }; static constexpr char ActTransfer[] = "transfer"; @@ -320,6 +320,7 @@ public: KEEP = 2, SAVE = 4, DONT_SAVE = 8, + REMEMBER_CHOISE = 0x10000 }; // show unsaved changes when preset is switching @@ -328,7 +329,9 @@ public: UnsavedChangesDialog(const wxString& caption, const wxString& header, const std::string& app_config_key, int act_buttons); ~UnsavedChangesDialog(){}; - void build(Preset::Type type, PresetCollection* dependent_presets, const std::string& new_selected_preset, const wxString& header = ""); + int ShowModal(); + + void build(Preset::Type type, PresetCollection *dependent_presets, const std::string &new_selected_preset, const wxString &header = ""); void update(Preset::Type type, PresetCollection* dependent_presets, const std::string& new_selected_preset, const wxString& header); void update_list(); std::string subreplace(std::string resource_str, std::string sub_str, std::string new_str); diff --git a/src/slic3r/GUI/Widgets/CheckBox.cpp b/src/slic3r/GUI/Widgets/CheckBox.cpp index 4ca1ca5ba0..8a9b05b50b 100644 --- a/src/slic3r/GUI/Widgets/CheckBox.cpp +++ b/src/slic3r/GUI/Widgets/CheckBox.cpp @@ -2,8 +2,8 @@ #include "../wxExtensions.hpp" -CheckBox::CheckBox(wxWindow* parent) - : wxBitmapToggleButton(parent, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE) +CheckBox::CheckBox(wxWindow *parent, int id) + : wxBitmapToggleButton(parent, id, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE) , m_on(this, "check_on", 18) , m_half(this, "check_half", 18) , m_off(this, "check_off", 18) diff --git a/src/slic3r/GUI/Widgets/CheckBox.hpp b/src/slic3r/GUI/Widgets/CheckBox.hpp index 53c41b6470..01b801a215 100644 --- a/src/slic3r/GUI/Widgets/CheckBox.hpp +++ b/src/slic3r/GUI/Widgets/CheckBox.hpp @@ -8,7 +8,7 @@ class CheckBox : public wxBitmapToggleButton { public: - CheckBox(wxWindow * parent = NULL); + CheckBox(wxWindow * parent, int id = wxID_ANY); public: void SetValue(bool value) override; From e2d6ed99d107e2d5d722e301f5d496b41b72e281 Mon Sep 17 00:00:00 2001 From: "salt.wei" Date: Mon, 27 Mar 2023 14:54:41 +0800 Subject: [PATCH 150/339] ENH: add post_process back Signed-off-by: salt.wei Change-Id: I05fc655080f3888255297d689552de84a81ed849 --- src/BambuStudio.cpp | 3 +-- src/libslic3r/Preset.cpp | 2 +- src/libslic3r/Print.cpp | 1 + src/libslic3r/PrintConfig.cpp | 13 +++++++++++++ src/libslic3r/PrintConfig.hpp | 1 + src/slic3r/GUI/BackgroundSlicingProcess.cpp | 4 +--- src/slic3r/GUI/Tab.cpp | 7 +++++++ 7 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/BambuStudio.cpp b/src/BambuStudio.cpp index a58c3d3c99..8be5a4eaa0 100644 --- a/src/BambuStudio.cpp +++ b/src/BambuStudio.cpp @@ -2038,8 +2038,7 @@ int CLI::run(int argc, char **argv) outfile = outfile_final; }*/ // Run the post-processing scripts if defined. - //BBS: TODO, maybe need to open this function later - //run_post_process_scripts(outfile, print->full_print_config()); + run_post_process_scripts(outfile, print->full_print_config()); BOOST_LOG_TRIVIAL(info) << "Slicing result exported to " << outfile << std::endl; part_plate->update_slice_result_valid_state(true); #if defined(__linux__) || defined(__LINUX__) diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index bff33c4af1..167d57b4ff 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -747,7 +747,7 @@ static std::vector s_Preset_print_options { "initial_layer_infill_speed", "only_one_wall_top", "timelapse_type", "internal_bridge_support_thickness", "wall_generator", "wall_transition_length", "wall_transition_filter_deviation", "wall_transition_angle", - "wall_distribution_count", "min_feature_size", "min_bead_width" + "wall_distribution_count", "min_feature_size", "min_bead_width", "post_process" }; static std::vector s_Preset_filament_options { diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 02755f8dba..5dbe8574b3 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -86,6 +86,7 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n "close_fan_the_first_x_layers", "machine_end_gcode", "filament_end_gcode", + "post_process", "extruder_clearance_height_to_rod", "extruder_clearance_height_to_lid", "extruder_clearance_radius", diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index ee3cb4436b..c69ddad90f 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -2028,6 +2028,19 @@ void PrintConfigDef::init_fff_params() def->max = 1000; def->set_default_value(new ConfigOptionInt(2)); + def = this->add("post_process", coStrings); + def->label = L("Post-processing Scripts"); + def->tooltip = L("If you want to process the output G-code through custom scripts, " + "just list their absolute paths here. Separate multiple scripts with a semicolon. " + "Scripts will be passed the absolute path to the G-code file as the first argument, " + "and variables of settings also can be read"); + def->gui_flags = "serialized"; + def->multiline = true; + def->full_width = true; + def->height = 6; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionStrings()); + def = this->add("printer_model", coString); //def->label = L("Printer type"); //def->tooltip = L("Type of the printer"); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index c043404318..e83c91a6ef 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -906,6 +906,7 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE( ((ConfigOptionBool, reduce_infill_retraction)) ((ConfigOptionBool, ooze_prevention)) ((ConfigOptionString, filename_format)) + ((ConfigOptionStrings, post_process)) ((ConfigOptionString, printer_model)) ((ConfigOptionFloat, resolution)) ((ConfigOptionFloats, retraction_minimum_travel)) diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp index ce1be6991c..5124aa8ea9 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp @@ -763,9 +763,7 @@ void BackgroundSlicingProcess::finalize_gcode() // collide with the G-code viewer memory mapping of the unprocessed G-code. G-code viewer maps unprocessed G-code, because m_gcode_result // is calculated for the unprocessed G-code and it references lines in the memory mapped G-code file by line numbers. // export_path may be changed by the post-processing script as well if the post processing script decides so, see GH #6042. - //BBS: don't support running post process scripts - //bool post_processed = run_post_process_scripts(output_path, true, "File", export_path, m_fff_print->full_print_config()); - bool post_processed = false; + bool post_processed = run_post_process_scripts(output_path, true, "File", export_path, m_fff_print->full_print_config()); auto remove_post_processed_temp_file = [post_processed, &output_path]() { if (post_processed) try { diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 349f0d388e..ea5a7d8232 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2023,6 +2023,13 @@ void TabPrint::build() option.opt.full_width = true; optgroup->append_single_option_line(option); + optgroup = page->new_optgroup(L("Post-processing scripts"), L"param_gcode", 0); + option = optgroup->get_option("post_process"); + option.opt.full_width = true; + option.opt.is_code = true; + option.opt.height = 15; + optgroup->append_single_option_line(option); + #if 0 //page = add_options_page(L("Dependencies"), "advanced.png"); // optgroup = page->new_optgroup(L("Profile dependencies")); From e2f96590cf59e48fcc79a44912d9b4c91d587e0b Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Mon, 27 Mar 2023 16:05:31 +0800 Subject: [PATCH 151/339] ENH: CLI: add normative_check logic Change-Id: I7a02fefb2a161b27a35ad73102d8c57dbffa7c6b (cherry picked from commit 3de468b341e95336611ff527453160131ec04b65) --- src/BambuStudio.cpp | 18 ++++++++++++++++-- src/libslic3r/PrintConfig.cpp | 7 +++++++ src/libslic3r/Utils.hpp | 1 + 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/BambuStudio.cpp b/src/BambuStudio.cpp index 8be5a4eaa0..5d71e39afc 100644 --- a/src/BambuStudio.cpp +++ b/src/BambuStudio.cpp @@ -490,7 +490,7 @@ int CLI::run(int argc, char **argv) PlateDataPtrs plate_data_src; int arrange_option; int plate_to_slice = 0, filament_count = 0; - bool first_file = true, is_bbl_3mf = false, need_arrange = true, has_thumbnails = false, up_config_to_date = false; + bool first_file = true, is_bbl_3mf = false, need_arrange = true, has_thumbnails = false, up_config_to_date = false, normative_check = true; Semver file_version; std::map orients_requirement; std::vector project_presets; @@ -504,6 +504,9 @@ int CLI::run(int argc, char **argv) ConfigOptionInt* slice_option = m_config.option("slice"); if (slice_option) plate_to_slice = slice_option->value; + ConfigOptionBool* normative_check_option = m_config.option("normative_check"); + if (normative_check_option) + normative_check = normative_check_option->value; ConfigOptionBool* uptodate_option = m_config.option("uptodate"); if (uptodate_option) up_config_to_date = uptodate_option->value; @@ -513,7 +516,7 @@ int CLI::run(int argc, char **argv) BOOST_LOG_TRIVIAL(info) << "found a gcode file:" << file << ", will start as gcode viewer\n"; break; }*/ - BOOST_LOG_TRIVIAL(info) << "plate_to_slice="<< plate_to_slice << std::endl; + BOOST_LOG_TRIVIAL(info) << boost::format("plate_to_slice=%1%, normative_check=%2%")%plate_to_slice %normative_check; //if (!start_as_gcodeviewer) { for (const std::string& file : m_input_files) { if (!boost::filesystem::exists(file)) { @@ -563,6 +566,17 @@ int CLI::run(int argc, char **argv) BOOST_LOG_TRIVIAL(info) << boost::format("old 3mf version %1%, need to translate")%file_version.to_string(); } + if (normative_check) { + ConfigOptionStrings* postprocess_scripts = config.option("post_process"); + if (postprocess_scripts) { + std::vector postprocess_values = postprocess_scripts->values; + if (postprocess_values.size() > 0) { + BOOST_LOG_TRIVIAL(error) << boost::format("normative_check: postprocess not supported, array size %1%")%postprocess_values.size(); + flush_and_exit(CLI_POSTPROCESS_NOT_SUPPORTED); + } + } + } + /*for (ModelObject *model_object : model.objects) for (ModelInstance *model_instance : model_object->instances) { diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index c69ddad90f..4e91ec4e35 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -4638,6 +4638,13 @@ CLIActionsConfigDef::CLIActionsConfigDef() def->cli_params = "option"; def->set_default_value(new ConfigOptionBool(false)); + def = this->add("normative_check", coBool); + def->label = L("Normative check"); + def->tooltip = L("Check the normative items."); + def->cli = "normative_check"; + def->cli_params = "option"; + def->set_default_value(new ConfigOptionBool(true)); + /*def = this->add("help_fff", coBool); def->label = L("Help (FFF options)"); def->tooltip = L("Show the full list of print/G-code configuration options."); diff --git a/src/libslic3r/Utils.hpp b/src/libslic3r/Utils.hpp index b04628e65a..98b8e33fc1 100644 --- a/src/libslic3r/Utils.hpp +++ b/src/libslic3r/Utils.hpp @@ -35,6 +35,7 @@ #define CLI_3MF_NEW_MACHINE_NOT_SUPPORTED -16 #define CLI_PROCESS_NOT_COMPATIBLE -17 #define CLI_INVALID_VALUES_IN_3MF -18 +#define CLI_POSTPROCESS_NOT_SUPPORTED -19 #define CLI_NO_SUITABLE_OBJECTS -50 From d776c7595e983ec78ea4499a67ed7a02827fd4a2 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Thu, 16 Mar 2023 14:44:04 +0800 Subject: [PATCH 152/339] ENH: enable gcode window and support viewing added custom gcode Change-Id: I2def8c32c17b6f2edfd2e6d0776123127560f167 --- resources/images/im_gcode_custom.svg | 4 + .../Anycubic/machine/fdm_machine_common.json | 2 +- resources/profiles/BBL.json | 2 +- .../BBL/machine/Bambu Lab P1P 0.4 nozzle.json | 1 - .../Bambu Lab X1 Carbon 0.4 nozzle.json | 1 - .../BBL/machine/fdm_bbl_3dp_001_common.json | 2 +- .../Voron/machine/fdm_klipper_common.json | 2 +- src/slic3r/GUI/GCodeViewer.cpp | 34 ++- src/slic3r/GUI/GCodeViewer.hpp | 6 +- src/slic3r/GUI/IMSlider.cpp | 214 +++++++++++++----- src/slic3r/GUI/IMSlider.hpp | 32 ++- src/slic3r/GUI/ImGuiWrapper.cpp | 2 +- 12 files changed, 195 insertions(+), 107 deletions(-) create mode 100644 resources/images/im_gcode_custom.svg diff --git a/resources/images/im_gcode_custom.svg b/resources/images/im_gcode_custom.svg new file mode 100644 index 0000000000..a844eb2542 --- /dev/null +++ b/resources/images/im_gcode_custom.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/profiles/Anycubic/machine/fdm_machine_common.json b/resources/profiles/Anycubic/machine/fdm_machine_common.json index 8c61e3039d..8cfc212de6 100644 --- a/resources/profiles/Anycubic/machine/fdm_machine_common.json +++ b/resources/profiles/Anycubic/machine/fdm_machine_common.json @@ -131,7 +131,7 @@ "change_filament_gcode": "", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "machine_pause_gcode": "M400 U1\n", + "machine_pause_gcode": "M400 U1", "wipe": [ "1" ], diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index 31ce1402e1..9637cd8e37 100644 --- a/resources/profiles/BBL.json +++ b/resources/profiles/BBL.json @@ -1,7 +1,7 @@ { "name": "Bambulab", "url": "http://www.bambulab.com/Parameters/vendor/BBL.json", - "version": "01.05.00.22", + "version": "01.05.00.23", "force_update": "0", "description": "the initial version of BBL configurations", "machine_model_list": [ diff --git a/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json index 6834c9caf3..f4016ebad0 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json @@ -23,7 +23,6 @@ "0x28" ], "extruder_clearance_max_radius": "56", - "machine_pause_gcode": "M400 U1\n", "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 20230323 =====================\n;===== turn on the HB fan =================\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp to turn on the HB fan\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression", "scan_first_layer": "0", "machine_load_filament_time": "29", diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json index 1f51f65257..0b079aca78 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json @@ -26,7 +26,6 @@ "20", "20" ], - "machine_pause_gcode": "M400 U1\n", "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230322 =====================\n;===== turn on the HB fan =================\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp to turn on the HB fan\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.040 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan \nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90 \nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", "scan_first_layer": "1", "machine_load_filament_time": "29", diff --git a/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json b/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json index 58be0a559c..c5327449cc 100644 --- a/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json +++ b/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json @@ -160,7 +160,7 @@ "change_filament_gcode": "M620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1 && (z_hop_types[current_extruder] == 0 || z_hop_types[current_extruder] == 3)}\nG17\nG2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}M104 S[old_filament_temp]{endif}\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\n\nG1 X20 Y50 F21000\nG1 Y-3\n{if toolchange_count == 2}\n; get travel path for change filament\nM620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\nM620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\nM620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n{endif}\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\n\n{if next_extruder < 255}\nM400\n\nG92 E0\n{if flush_length_1 > 1}\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM109 S[nozzle_temperature_range_high]\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n; FLUSH_START\nM400\nM109 S[new_filament_temp]\nG1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\nG1 X80 F15000\nG1 X60 F15000\nG1 X80 F15000\nG1 X60 F15000; shake to put down garbage\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z{max_layer_z + 3.0} F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A", "layer_change_gcode": "; layer num/total_layer_count: {layer_num+1}/[total_layer_count]\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\n{if timelapse_type == 0} ; timelapse without wipe tower\nM971 S11 C10 O0\n{elsif timelapse_type == 1} ; timelapse with wipe tower\nG92 E0\nG1 E-[retraction_length] F1800\nG17\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F20000 ; spiral lift a little\nG1 X65 Y245 F20000 ; move to safe pos\nG17\nG2 Z{layer_z} I0.86 J0.86 P1 F20000\nG1 Y265 F3000\nM400 P300\nM971 S11 C10 O0\nG92 E0\nG1 E[retraction_length] F300\nG1 X100 F5000\nG1 Y255 F20000\n{endif}\nM623\n; update layer progress\nM73 L{layer_num+1}\nM991 S0 P{layer_num} ;notify layer change", "machine_end_gcode": ";===== date: 20230118 =====================\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 0.5} F900 ; lower z a little\nG1 X65 Y245 F12000 ; move to safe pos \nG1 Y265 F3000\nM991 S0 P-1 ;end smooth timelapse at safe pos\nM400 S2 ;wait for last picture to be taken\n\nG1 X65 Y245 F12000\nG1 Y265 F3000\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\nG1 X100 F12000 ; wipe\n; pull back filament to AMS\nM620 S255\nG1 X20 Y50 F12000\nG1 Y-3\nT255\nG1 X65 F12000\nG1 Y265\nG1 X100 F12000 ; wipe\nM621 S255\nM104 S0 ; turn off hotend\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\n{if (max_layer_z + 100.0) < 250}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z250 F600\n G1 Z248\n{endif}\nM400 P100\nM17 R ; restore z current\n\nG90\nG1 X128 Y250 F3600\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\nM17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\n\n", - "machine_pause_gcode": "M400 U1\n", + "machine_pause_gcode": "M400 U1", "wipe": [ "1" ] diff --git a/resources/profiles/Voron/machine/fdm_klipper_common.json b/resources/profiles/Voron/machine/fdm_klipper_common.json index 9d9e6e0373..e4cb236e29 100644 --- a/resources/profiles/Voron/machine/fdm_klipper_common.json +++ b/resources/profiles/Voron/machine/fdm_klipper_common.json @@ -119,7 +119,7 @@ "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", - "machine_pause_gcode": "PAUSE\n", + "machine_pause_gcode": "PAUSE", "wipe": [ "1" ], diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index fad67e19c9..d375297228 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -498,14 +498,14 @@ void GCodeViewer::SequentialView::Marker::render(int canvas_width, int canvas_he imgui.pop_toolbar_style(); } -void GCodeViewer::SequentialView::GCodeWindow::load_gcode(const std::string& filename, std::vector &&lines_ends) +void GCodeViewer::SequentialView::GCodeWindow::load_gcode(const std::string& filename, const std::vector &lines_ends) { assert(! m_file.is_open()); if (m_file.is_open()) return; m_filename = filename; - m_lines_ends = std::move(lines_ends); + m_lines_ends = lines_ends; m_selected_line_id = 0; m_last_lines_size = 0; @@ -561,11 +561,11 @@ void GCodeViewer::SequentialView::GCodeWindow::render(float top, float bottom, f return ret; }; - static const ImVec4 LINE_NUMBER_COLOR = ImGuiWrapper::COL_ORANGE_LIGHT; - static const ImVec4 SELECTION_RECT_COLOR = ImGuiWrapper::COL_ORANGE_DARK; - static const ImVec4 COMMAND_COLOR = { 0.8f, 0.8f, 0.0f, 1.0f }; - static const ImVec4 PARAMETERS_COLOR = { 1.0f, 1.0f, 1.0f, 1.0f }; - static const ImVec4 COMMENT_COLOR = { 0.7f, 0.7f, 0.7f, 1.0f }; + static const ImVec4 LINE_NUMBER_COLOR = { 0, 174.0f / 255.0f, 66.0f / 255.0f, 1.0f }; + static const ImVec4 SELECTION_RECT_COLOR = { 0, 174.0f / 255.0f, 66.0f / 255.0f, 1.0f }; + static const ImVec4 COMMAND_COLOR = m_is_dark ? ImVec4( 240.0f / 255.0f, 240.0f / 255.0f, 240.0f / 255.0f, 1.0f ) : ImVec4( 1.0f, 1.0f, 1.0f, 1.0f ); + static const ImVec4 PARAMETERS_COLOR = m_is_dark ? ImVec4( 179.0f / 255.0f, 179.0f / 255.0f, 179.0f / 255.0f, 1.0f ) : ImVec4( 206.0f / 255.0f, 206.0f / 255.0f, 206.0f / 255.0f, 1.0f ); + static const ImVec4 COMMENT_COLOR = m_is_dark ? ImVec4(129.0f / 255.0f, 129.0f / 255.0f, 129.0f / 255.0f, 1.0f) : ImVec4( 172.0f / 255.0f, 172.0f / 255.0f, 172.0f / 255.0f, 1.0f ); if (!m_visible || m_filename.empty() || m_lines_ends.empty() || curr_line_id == 0) return; @@ -615,7 +615,7 @@ void GCodeViewer::SequentialView::GCodeWindow::render(float top, float bottom, f imgui.set_next_window_pos(right, top, ImGuiCond_Always, 1.0f, 0.0f); imgui.set_next_window_size(0.0f, wnd_height, ImGuiCond_Always); ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f); - ImGui::SetNextWindowBgAlpha(0.6f); + ImGui::SetNextWindowBgAlpha(0.8f); imgui.begin(std::string("G-code"), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoMove); // center the text in the window by pushing down the first line @@ -691,7 +691,7 @@ void GCodeViewer::SequentialView::GCodeWindow::stop_mapping_file() } } //BBS: GUI refactor: move to the right -void GCodeViewer::SequentialView::render(float legend_height, int canvas_width, int canvas_height, const EViewType& view_type) const +void GCodeViewer::SequentialView::render(float legend_height, int canvas_width, int canvas_height, int right_margin, const EViewType& view_type) const { marker.render(canvas_width, canvas_height, view_type); @@ -702,9 +702,7 @@ void GCodeViewer::SequentialView::render(float legend_height, int canvas_width, bottom -= wxGetApp().plater()->get_view_toolbar().get_height(); #endif //gcode_window.render(legend_height, bottom, static_cast(gcode_ids[current.last])); - if (wxGetApp().get_mode() == ConfigOptionMode::comDevelop) { - gcode_window.render(legend_height, (float)canvas_height, (float)canvas_width, static_cast(gcode_ids[current.last])); - } + gcode_window.render(legend_height, (float)canvas_height, (float)canvas_width - (float)right_margin, static_cast(gcode_ids[current.last])); } const std::vector GCodeViewer::Extrusion_Role_Colors {{ @@ -898,6 +896,7 @@ void GCodeViewer::init(ConfigOptionMode mode, PresetBundle* preset_bundle) void GCodeViewer::on_change_color_mode(bool is_dark) { m_is_dark = is_dark; m_sequential_view.marker.on_change_color_mode(m_is_dark); + m_sequential_view.gcode_window.on_change_color_mode(m_is_dark); } void GCodeViewer::set_scale(float scale) @@ -984,11 +983,7 @@ void GCodeViewer::load(const GCodeProcessorResult& gcode_result, const Print& pr m_gcode_result = &gcode_result; m_only_gcode_in_preview = only_gcode; - if (mode == ConfigOptionMode::comDevelop) { - m_sequential_view.gcode_window.load_gcode(gcode_result.filename, - // Stealing out lines_ends should be safe because this gcode_result is processed only once (see the 1st if in this function). - std::move(const_cast&>(gcode_result.lines_ends))); - } + m_sequential_view.gcode_window.load_gcode(gcode_result.filename, gcode_result.lines_ends); //BBS: add only gcode mode //if (wxGetApp().is_gcode_viewer()) @@ -1092,7 +1087,6 @@ void GCodeViewer::load(const GCodeProcessorResult& gcode_result, const Print& pr bool current_has_print_instances = current_plate->has_printable_instances(); if (current_plate->is_slice_result_valid() && wxGetApp().model().objects.empty() && !current_has_print_instances) only_gcode_3mf = true; - m_layers_slider->set_menu_enable(!(only_gcode || only_gcode_3mf)); m_layers_slider->set_as_dirty(); m_moves_slider->set_as_dirty(); @@ -1287,7 +1281,7 @@ void GCodeViewer::render(int canvas_width, int canvas_height, int right_margin) m_sequential_view.marker.set_world_position(m_sequential_view.current_position); m_sequential_view.marker.set_world_offset(m_sequential_view.current_offset); //BBS fixed buttom margin. m_moves_slider.pos_y - m_sequential_view.render(legend_height, canvas_width, canvas_height - bottom_margin * m_scale, m_view_type); + m_sequential_view.render(legend_height, canvas_width, canvas_height - bottom_margin * m_scale, right_margin * m_scale, m_view_type); } #if ENABLE_GCODE_VIEWER_STATISTICS render_statistics(); @@ -4345,7 +4339,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv ImGui::PushStyleColor(ImGuiCol_ScrollbarGrab, ImVec4(0.42f, 0.42f, 0.42f, 1.00f)); ImGui::PushStyleColor(ImGuiCol_ScrollbarGrabHovered, ImVec4(0.93f, 0.93f, 0.93f, 1.00f)); ImGui::PushStyleColor(ImGuiCol_ScrollbarGrabActive, ImVec4(0.93f, 0.93f, 0.93f, 1.00f)); - ImGui::SetNextWindowBgAlpha(0.6f); + ImGui::SetNextWindowBgAlpha(0.8f); const float max_height = 0.75f * static_cast(cnv_size.get_height()); const float child_height = 0.3333f * max_height; ImGui::SetNextWindowSizeConstraints({ 0.0f, 0.0f }, { -1.0f, max_height }); diff --git a/src/slic3r/GUI/GCodeViewer.hpp b/src/slic3r/GUI/GCodeViewer.hpp index 4642061817..e8f83e7c66 100644 --- a/src/slic3r/GUI/GCodeViewer.hpp +++ b/src/slic3r/GUI/GCodeViewer.hpp @@ -648,6 +648,7 @@ public: std::string parameters; std::string comment; }; + bool m_is_dark = false; bool m_visible{ true }; uint64_t m_selected_line_id{ 0 }; size_t m_last_lines_size{ 0 }; @@ -661,7 +662,7 @@ public: public: GCodeWindow() = default; ~GCodeWindow() { stop_mapping_file(); } - void load_gcode(const std::string& filename, std::vector &&lines_ends); + void load_gcode(const std::string& filename, const std::vector &lines_ends); void reset() { stop_mapping_file(); m_lines_ends.clear(); @@ -674,6 +675,7 @@ public: //BBS: GUI refactor: add canvas size //void render(float top, float bottom, uint64_t curr_line_id) const; void render(float top, float bottom, float right, uint64_t curr_line_id) const; + void on_change_color_mode(bool is_dark) { m_is_dark = is_dark; } void stop_mapping_file(); }; @@ -697,7 +699,7 @@ public: float m_scale = 1.0; //BBS: GUI refactor: add canvas size - void render(float legend_height, int canvas_width, int canvas_height, const EViewType& view_type) const; + void render(float legend_height, int canvas_width, int canvas_height, int right_margin, const EViewType& view_type) const; }; struct ETools diff --git a/src/slic3r/GUI/IMSlider.cpp b/src/slic3r/GUI/IMSlider.cpp index 1c4ec7a17e..df23872eb3 100644 --- a/src/slic3r/GUI/IMSlider.cpp +++ b/src/slic3r/GUI/IMSlider.cpp @@ -67,6 +67,8 @@ static std::string gcode(Type type) switch (type) { //BBS case Template: return config.opt_string("template_custom_gcode"); + case PausePrint: return config.opt_string("machine_pause_gcode"); + default: return ""; } @@ -150,6 +152,7 @@ bool IMSlider::init_texture() result &= IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/one_layer_off_dark.svg", 28, 28, m_one_layer_off_dark_id); result &= IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/one_layer_off_hover_dark.svg", 28, 28, m_one_layer_off_hover_dark_id); result &= IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/im_gcode_pause.svg", 14, 14, m_pause_icon_id); + result &= IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/im_gcode_custom.svg", 14, 14, m_custom_icon_id); result &= IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/im_slider_delete.svg", 14, 14, m_delete_icon_id); } @@ -292,18 +295,12 @@ void IMSlider::SetModeAndOnlyExtruder(const bool is_one_extruder_printed_model, UseDefaultColors(m_mode == SingleExtruder); - auto curr_plate = wxGetApp().plater()->get_partplate_list().get_curr_plate(); - auto curr_print_seq = curr_plate->get_real_print_seq(); - - if (curr_print_seq == PrintSequence::ByObject) - m_is_wipe_tower = false; - else - m_is_wipe_tower = m_mode != SingleExtruder; + m_is_wipe_tower = m_mode != SingleExtruder; auto config = wxGetApp().preset_bundle->full_config(); m_is_spiral_vase = config.option("spiral_mode")->value; - m_can_change_color = can_change_color; + m_can_change_color = can_change_color && !m_is_spiral_vase; // close opened menu window after reslice m_show_menu = false; @@ -376,6 +373,11 @@ void IMSlider::add_code_as_tick(Type type, int selected_extruder) post_ticks_changed_event(type); } +void IMSlider::delete_tick(const TickCode& tick) { + m_ticks.ticks.erase(tick); + post_ticks_changed_event(tick.type); +} + bool IMSlider::check_ticks_changed_event(Type type) { //BBL only support MultiExtruder @@ -623,12 +625,16 @@ void IMSlider::draw_ticks(const ImRect& slideable_region) { if (ImGui::IsMouseHoveringRect(tick_hover_box.Min, tick_hover_box.Max)) { // render left tick box - ImGui::RenderFrame(tick_hover_box.Min, { slideable_region.Min.x, tick_hover_box.Max.y }, tick_hover_box_clr, false); + ImRect left_hover_box = ImRect(tick_hover_box.Min, { slideable_region.Min.x, tick_hover_box.Max.y }); + ImGui::RenderFrame(left_hover_box.Min, left_hover_box.Max, tick_hover_box_clr, false); // render right tick box - ImGui::RenderFrame({ slideable_region.Max.x, tick_hover_box.Min.y }, tick_hover_box.Max, tick_hover_box_clr, false); + ImRect right_hover_box = ImRect({ slideable_region.Max.x, tick_hover_box.Min.y }, tick_hover_box.Max); + ImGui::RenderFrame(right_hover_box.Min, right_hover_box.Max, tick_hover_box_clr, false); + + show_tooltip(*tick_it); if (context.IO.MouseClicked[0]) { - m_tick_value = tick_it->tick; - m_tick_rect = ImVec4(tick_hover_box.Min.x, tick_hover_box.Min.y, tick_hover_box.Max.x, tick_hover_box.Max.y); + m_tick_value = tick_it->tick; + m_tick_rect = ImVec4(tick_hover_box.Min.x, tick_hover_box.Min.y, tick_hover_box.Max.x, tick_hover_box.Max.y); } } ++tick_it; @@ -651,6 +657,11 @@ void IMSlider::draw_ticks(const ImRect& slideable_region) { ImVec2 icon_pos = ImVec2(slideable_region.GetCenter().x + icon_offset.x, tick_pos - icon_offset.y); button_with_pos(pause_icon_id, icon_size, icon_pos); } + if (tick_it->type == Custom || tick_it->type == Template) { + ImTextureID custom_icon_id = m_custom_icon_id; + ImVec2 icon_pos = ImVec2(slideable_region.GetCenter().x + icon_offset.x, tick_pos - icon_offset.y); + button_with_pos(custom_icon_id, icon_size, icon_pos); + } ++tick_it; } @@ -664,13 +675,41 @@ void IMSlider::draw_ticks(const ImRect& slideable_region) { if (ImGui::IsMouseHoveringRect(icon_pos, icon_pos + icon_size)) { if (context.IO.MouseClicked[0]) { // delete tick - Type type = tick_it->type; - m_ticks.ticks.erase(tick_it); - post_ticks_changed_event(type); + delete_tick(*tick_it); } } } +} +void IMSlider::show_tooltip(const TickCode& tick){ + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, { 6 * m_scale, 3 * m_scale }); + ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, { 3 * m_scale }); + ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BACKGROUND); + ImGui::PushStyleColor(ImGuiCol_Border, { 0,0,0,0 }); + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.00f, 1.00f, 1.00f, 1.00f)); + ImGui::BeginTooltip(); + switch (tick.type) + { + case CustomGCode::ColorChange: + break; + case CustomGCode::PausePrint: + ImGui::TextUnformatted((_u8L("Pause:") + " \"" + gcode(PausePrint) + "\"").c_str()); + break; + case CustomGCode::ToolChange: + ImGui::TextUnformatted(_u8L("Change Filament").c_str()); + break; + case CustomGCode::Template: + ImGui::TextUnformatted((_u8L("Custom Template:") + " \"" + gcode(Template) + "\"").c_str()); + break; + case CustomGCode::Custom: + ImGui::TextUnformatted((_u8L("Custom G-code:") + " \"" + tick.extra + "\"").c_str()); + break; + default: + break; + } + ImGui::EndTooltip(); + ImGui::PopStyleColor(3); + ImGui::PopStyleVar(2); } bool IMSlider::vertical_slider(const char* str_id, int* higher_value, int* lower_value, std::string& higher_label, std::string& lower_label,int v_min, int v_max, const ImVec2& size, SelectedSlider& selection, bool one_layer_flag, float scale) @@ -790,12 +829,10 @@ bool IMSlider::vertical_slider(const char* str_id, int* higher_value, int* lower context.IO.MouseClicked[0]) m_show_menu = false; - if (!m_ticks.empty()) { - // draw ticks - draw_ticks(h_selected ? higher_slideable_region : lower_slideable_region); - // draw colored band - draw_colored_band(groove, h_selected ? higher_slideable_region : lower_slideable_region); - } + // draw ticks + draw_ticks(h_selected ? higher_slideable_region : lower_slideable_region); + // draw colored band + draw_colored_band(groove, h_selected ? higher_slideable_region : lower_slideable_region); if (!m_ticks.has_tick_with_code(ToolChange)) { // draw scroll line @@ -862,12 +899,10 @@ bool IMSlider::vertical_slider(const char* str_id, int* higher_value, int* lower ImVec2 bar_center = higher_handle.GetCenter(); - if (!m_ticks.empty()) { - // draw ticks - draw_ticks(one_slideable_region); - // draw colored band - draw_colored_band(groove, one_slideable_region); - } + // draw ticks + draw_ticks(one_slideable_region); + // draw colored band + draw_colored_band(groove, one_slideable_region); // draw handle window->DrawList->AddLine(ImVec2(mid_x - 0.5 * bar_width, handle_center.y), ImVec2(mid_x + 0.5 * bar_width, handle_center.y), handle_clr, 2 * line_width); @@ -963,7 +998,7 @@ bool IMSlider::render(int canvas_width, int canvas_height) return result; } -void IMSlider::render_input_custom_gcode() +void IMSlider::render_input_custom_gcode(std::string custom_gcode) { if (m_show_custom_gcode_window) ImGui::OpenPopup((_u8L("Custom G-code")).c_str()); @@ -995,9 +1030,13 @@ void IMSlider::render_input_custom_gcode() if (set_focus && !ImGui::IsAnyItemActive() && !ImGui::IsMouseClicked(0)) { wxGetApp().plater()->get_current_canvas3D()->force_set_focus(); ImGui::SetKeyboardFocusHere(0); + strcpy(m_custom_gcode, custom_gcode.c_str()); } const int text_height = 6; - ImGui::InputTextMultiline("##text", m_custom_gcode, sizeof(m_custom_gcode), ImVec2(-1, ImGui::GetTextLineHeight() * text_height)); + + ImGui::InputTextMultiline("##text", m_custom_gcode, sizeof(m_custom_gcode), ImVec2(-1, ImGui::GetTextLineHeight() * text_height), ImGuiInputTextFlags_CallbackAlways, [](ImGuiInputTextCallbackData* data) { + return data->CursorPos = data->BufTextLen; + }); ImGui::NewLine(); ImGui::SameLine(ImGui::GetStyle().WindowPadding.x * 14); @@ -1046,7 +1085,7 @@ void IMSlider::do_go_to_layer(size_t layer_number) { void IMSlider::render_go_to_layer_dialog() { if (m_show_go_to_layer_dialog) - ImGui::OpenPopup((_u8L("Jump to layer")).c_str()); + ImGui::OpenPopup((_u8L("Jump to Layer")).c_str()); ImGuiWrapper& imgui = *wxGetApp().imgui(); ImVec2 center = ImGui::GetMainViewport()->GetCenter(); @@ -1123,28 +1162,41 @@ void IMSlider::render_go_to_layer_dialog() imgui.pop_menu_style(); } -void IMSlider::render_menu() -{ +void IMSlider::render_menu() { if (!m_menu_enable) return; ImGuiWrapper::push_menu_style(m_scale); - int extruder_num = m_extruder_colors.size(); + ImGui::PushStyleVar(ImGuiStyleVar_::ImGuiStyleVar_ChildRounding, 4.0f * m_scale); - if (m_show_menu) { - ImGui::OpenPopup("slider_menu_popup"); + auto tick_it = GetSelection() == ssHigher ? m_ticks.ticks.find(TickCode{ GetHigherValue() }) : + GetSelection() == ssLower ? m_ticks.ticks.find(TickCode{ GetLowerValue() }) : + m_ticks.ticks.end(); + std::string custom_code; + if (tick_it != m_ticks.ticks.end()) { + render_edit_menu(*tick_it); + if (tick_it->type == CustomGCode::Custom) + custom_code = tick_it->extra; + } + else { + render_add_menu(); } - ImGui::PushStyleVar(ImGuiStyleVar_::ImGuiStyleVar_ChildRounding, 4.0f * m_scale); - if (ImGui::BeginPopup("slider_menu_popup")) { + ImGui::PopStyleVar(1); + ImGuiWrapper::pop_menu_style(); + + render_input_custom_gcode(custom_code); + render_go_to_layer_dialog(); +} + +void IMSlider::render_add_menu() +{ + int extruder_num = m_extruder_colors.size(); + + if (m_show_menu) + ImGui::OpenPopup("slider_add_menu_popup"); + if (ImGui::BeginPopup("slider_add_menu_popup")) { bool menu_item_enable = m_draw_mode != dmSequentialFffPrint; - //if ((m_selection == ssLower && GetLowerValueD() == m_zero_layer_height) || (m_selection == ssHigher && GetHigherValueD() == m_zero_layer_height)) - //{ - // if (menu_item_with_icon(_u8L("Jump to Layer").c_str(), "")) { - // m_show_go_to_layer_dialog = true; - // } - //} - //else { if (menu_item_with_icon(_u8L("Add Pause").c_str(), "", ImVec2(0, 0), 0, false, menu_item_enable)) { add_code_as_tick(PausePrint); @@ -1164,7 +1216,7 @@ void IMSlider::render_menu() //BBS render this menu item only when extruder_num > 1 if (extruder_num > 1) { - if (!m_can_change_color || m_draw_mode == dmSequentialFffPrint || m_is_spiral_vase) { + if (!m_can_change_color || m_draw_mode == dmSequentialFffPrint) { begin_menu(_u8L("Change Filament").c_str(), false); } else if (begin_menu(_u8L("Change Filament").c_str())) { @@ -1178,12 +1230,62 @@ void IMSlider::render_menu() } ImGui::EndPopup(); } - ImGui::PopStyleVar(1); +} - ImGuiWrapper::pop_menu_style(); - - render_input_custom_gcode(); - render_go_to_layer_dialog(); +void IMSlider::render_edit_menu(const TickCode& tick) +{ + if (m_show_menu) + ImGui::OpenPopup("slider_edit_menu_popup"); + if (ImGui::BeginPopup("slider_edit_menu_popup")) { + switch (tick.type) + { + case CustomGCode::PausePrint: + if (menu_item_with_icon(_u8L("Delete Pause").c_str(), "")) { + delete_tick(tick); + } + break; + case CustomGCode::Template: + if (!gcode(Template).empty()) { + if (menu_item_with_icon(_u8L("Delete Custom Template").c_str(), "")) { + delete_tick(tick); + } + } + break; + case CustomGCode::Custom: + if (menu_item_with_icon(_u8L("Edit Custom G-code").c_str(), "")) { + m_show_custom_gcode_window = true; + } + if (menu_item_with_icon(_u8L("Delete Custom G-code").c_str(), "")) { + delete_tick(tick); + } + break; + case CustomGCode::ToolChange: { + int extruder_num = m_extruder_colors.size(); + if (extruder_num > 1) { + if (!m_can_change_color || m_draw_mode == dmSequentialFffPrint) { + begin_menu(_u8L("Change Filament").c_str(), false); + } + else if (begin_menu(_u8L("Change Filament").c_str())) { + for (int i = 0; i < extruder_num; i++) { + std::array rgba = decode_color_to_float_array(m_extruder_colors[i]); + ImU32 icon_clr = IM_COL32(rgba[0] * 255.0f, rgba[1] * 255.0f, rgba[2] * 255.0f, rgba[3] * 255.0f); + if (menu_item_with_icon((_u8L("Filament ") + std::to_string(i + 1)).c_str(), "", ImVec2(14, 14) * m_scale, icon_clr)) add_code_as_tick(ToolChange, i + 1); + } + end_menu(); + } + if (menu_item_with_icon(_u8L("Delete Filament Change").c_str(), "")) { + delete_tick(tick); + } + } + break; + } + case CustomGCode::ColorChange: + case CustomGCode::Unknown: + default: + break; + } + ImGui::EndPopup(); + } } void IMSlider::on_change_color_mode(bool is_dark) { @@ -1317,16 +1419,8 @@ std::string IMSlider::get_label(int tick, LabelType label_type) if (label_type == ltHeightWithLayer) { char buffer[64]; size_t layer_number; - if (m_values[GetMinValueD()] == m_zero_layer_height) { - layer_number = m_is_wipe_tower ? get_layer_number(value, label_type): (m_values.empty() ? value : value); - m_values[value] == m_zero_layer_height ? - ::sprintf(buffer, "%5s\n%5s", _u8L("Start").c_str(), _u8L("G-code").c_str()) : - ::sprintf(buffer, "%5s\n%5s", std::to_string(layer_number).c_str(), layer_height); - } - else { - layer_number = m_is_wipe_tower ? get_layer_number(value, label_type) + 1 : (m_values.empty() ? value : value + 1); - ::sprintf(buffer, "%5s\n%5s", std::to_string(layer_number).c_str(), layer_height); - } + layer_number = m_draw_mode == dmSequentialFffPrint ? (m_values.empty() ? value : value + 1) : m_is_wipe_tower ? get_layer_number(value, label_type) + 1 : (m_values.empty() ? value : value + 1); + ::sprintf(buffer, "%5s\n%5s", std::to_string(layer_number).c_str(), layer_height); return std::string(buffer); } } diff --git a/src/slic3r/GUI/IMSlider.hpp b/src/slic3r/GUI/IMSlider.hpp index b3a021598a..e4126a2148 100644 --- a/src/slic3r/GUI/IMSlider.hpp +++ b/src/slic3r/GUI/IMSlider.hpp @@ -51,7 +51,6 @@ enum LabelType ltEstimatedTime, }; - class IMSlider { public: @@ -134,16 +133,20 @@ public: protected: void add_custom_gcode(std::string custom_gcode); void add_code_as_tick(Type type, int selected_extruder = -1); - void do_go_to_layer(size_t layer_number); + void delete_tick(const TickCode& tick); + void do_go_to_layer(size_t layer_number); //menu void correct_lower_value(); void correct_higher_value(); bool horizontal_slider(const char* str_id, int* v, int v_min, int v_max, const ImVec2& size, float scale = 1.0); - void render_go_to_layer_dialog(); - void render_input_custom_gcode(); + void render_go_to_layer_dialog(); //menu + void render_input_custom_gcode(std::string custom_gcode = ""); //menu void render_menu(); + void render_add_menu(); //menu + void render_edit_menu(const TickCode& tick); //menu void draw_background_and_groove(const ImRect& bg_rect, const ImRect& groove); void draw_colored_band(const ImRect& groove, const ImRect& slideable_region); void draw_ticks(const ImRect& slideable_region); + void show_tooltip(const TickCode& tick); //menu bool vertical_slider(const char* str_id, int* higher_value, int* lower_value, std::string& higher_label, std::string& lower_label, int v_min, int v_max, const ImVec2& size, @@ -176,22 +179,14 @@ private: bool m_render_as_disabled{ false }; SelectedSlider m_selection; - bool m_is_left_down = false; - bool m_is_right_down = false; bool m_is_one_layer = false; - bool m_is_focused = false; - bool m_show_menu = false; - bool m_menu_enable = true; - bool m_show_custom_gcode_window = false; - bool m_show_go_to_layer_dialog = false; + bool m_menu_enable = true; //menu + bool m_show_menu = false; //menu + bool m_show_custom_gcode_window = false; //menu + bool m_show_go_to_layer_dialog = false; //menu bool m_force_mode_apply = true; - bool m_enable_action_icon = true; - bool m_enable_cog_icon = false; bool m_is_wipe_tower = false; // This flag indicates that there is multiple extruder print with wipe tower bool m_is_spiral_vase = false; - bool m_display_lower = true; - bool m_display_higher = true; - int m_selected_tick_value = -1; /* BBS slider images */ void *m_one_layer_on_id; @@ -207,6 +202,7 @@ private: void* m_one_layer_off_dark_id; void* m_one_layer_off_hover_dark_id; void *m_pause_icon_id; + void *m_custom_icon_id; void *m_delete_icon_id; DrawMode m_draw_mode = dmRegular; @@ -230,8 +226,8 @@ private: std::vector m_alternate_values; - char m_custom_gcode[1024] = { 0 }; - char m_layer_number[64] = { 0 }; + char m_custom_gcode[1024] = { 0 }; //menu + char m_layer_number[64] = { 0 }; //menu }; } diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 871ab2bb96..7d623e4892 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -124,7 +124,7 @@ const ImVec4 ImGuiWrapper::COL_GREY_DARK = { 0.333f, 0.333f, 0.333f, 1.0 const ImVec4 ImGuiWrapper::COL_GREY_LIGHT = { 0.4f, 0.4f, 0.4f, 1.0f }; const ImVec4 ImGuiWrapper::COL_ORANGE_DARK = { 0.757f, 0.404f, 0.216f, 1.0f }; const ImVec4 ImGuiWrapper::COL_ORANGE_LIGHT = { 1.0f, 0.49f, 0.216f, 1.0f }; -const ImVec4 ImGuiWrapper::COL_WINDOW_BACKGROUND = { 0.133f, 0.133f, 0.133f, 0.8f }; +const ImVec4 ImGuiWrapper::COL_WINDOW_BACKGROUND = { 0.1f, 0.1f, 0.1f, 0.8f }; const ImVec4 ImGuiWrapper::COL_BUTTON_BACKGROUND = COL_ORANGE_DARK; const ImVec4 ImGuiWrapper::COL_BUTTON_HOVERED = COL_ORANGE_LIGHT; const ImVec4 ImGuiWrapper::COL_BUTTON_ACTIVE = ImGuiWrapper::COL_BUTTON_HOVERED; From 0ca3f27c54d892fcbf61106c4dc9b0b2ece56847 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Thu, 23 Mar 2023 16:40:30 +0800 Subject: [PATCH 153/339] ENH: [STUDIO-2550] config auto sync system presets Change-Id: I83f9baae5793b214f4d1c040f5819ad9a03cd47f (cherry picked from commit 40fe90e176fc001f54b22375ddb0dd035a6d84cd) --- src/libslic3r/AppConfig.cpp | 4 ++++ src/slic3r/GUI/GUI_App.cpp | 3 ++- src/slic3r/GUI/Preferences.cpp | 11 +++++++---- src/slic3r/Utils/PresetUpdater.cpp | 5 +++-- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index 9d2cb256ab..e4ab1134f4 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -293,6 +293,10 @@ void AppConfig::set_defaults() set_bool("staff_pick_switch", true); } + if (get("sync_system_preset").empty()) { + set_bool("sync_system_preset", true); + } + if (get("backup_switch").empty()) { set_bool("backup_switch", true); } diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index fdd5a71edd..3486c89e9e 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1186,7 +1186,8 @@ void GUI_App::post_init() std::string http_url = get_http_url(app_config->get_country_code()); std::string language = GUI::into_u8(current_language_code()); std::string network_ver = Slic3r::NetworkAgent::get_version(); - this->preset_updater->sync(http_url, language, network_ver, preset_bundle); + bool sys_preset = app_config->get("sync_system_preset") == "true"; + this->preset_updater->sync(http_url, language, network_ver, sys_preset ? preset_bundle : nullptr); //BBS: check new version this->check_new_version(); diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index f830ff73cf..10aaca05de 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -426,7 +426,7 @@ wxBoxSizer *PreferencesDialog::create_item_input(wxString title, wxString title2 wxBoxSizer *PreferencesDialog::create_item_backup_input(wxString title, wxWindow *parent, wxString tooltip, std::string param) { wxBoxSizer *m_sizer_input = new wxBoxSizer(wxHORIZONTAL); - auto input_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, 0); + auto input_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, 0); input_title->SetForegroundColour(DESIGN_GRAY900_COLOR); input_title->SetFont(::Label::Body_13); input_title->SetToolTip(tooltip); @@ -591,7 +591,7 @@ wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxWindow *pa checkbox_title->SetFont(::Label::Body_13); auto size = checkbox_title->GetTextExtent(title); - checkbox_title->SetMinSize(wxSize(size.x + FromDIP(40), -1)); + checkbox_title->SetMinSize(wxSize(size.x + FromDIP(4), -1)); checkbox_title->Wrap(-1); m_sizer_checkbox->Add(checkbox_title, 0, wxALIGN_CENTER | wxALL, 3); @@ -691,6 +691,7 @@ wxBoxSizer *PreferencesDialog::create_item_button(wxString title, wxString title m_button_download->SetMinSize(wxSize(FromDIP(58), FromDIP(22))); m_button_download->SetSize(wxSize(FromDIP(58), FromDIP(22))); m_button_download->SetCornerRadius(FromDIP(12)); + m_button_download->SetToolTip(tooltip); m_button_download->Bind(wxEVT_BUTTON, [this, onclick](auto &e) { onclick(); }); @@ -917,6 +918,7 @@ wxWindow* PreferencesDialog::create_general_page() auto title_presets = create_item_title(_L("Presets"), page, _L("Presets")); 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("Auto sync system presets(Printer/Filament/Process)"), 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."), []() { wxGetApp().app_config->set("save_preset_choise", ""); }); @@ -933,9 +935,9 @@ wxWindow* PreferencesDialog::create_general_page() _L("If enabled, sets BambuStudio as default application to open .step files"), 50, "associate_step"); #endif // _WIN32 - auto title_modelmall = create_item_title(_L("Model Mall"), page, _L("Model Mall")); + auto title_modelmall = create_item_title(_L("Online Models"), page, _L("Online Models")); // auto item_backup = create_item_switch(_L("Backup switch"), page, _L("Backup switch"), "units"); - auto item_modelmall = create_item_checkbox(_L("Show staff-picks"), page, _L("Show staff-picks"), 50, "staff_pick_switch"); + auto item_modelmall = create_item_checkbox(_L("Show online staff-picked models on the home page"), page, _L("Show online staff-picked models on the home page"), 50, "staff_pick_switch"); auto title_project = create_item_title(_L("Project"), page, ""); @@ -969,6 +971,7 @@ wxWindow* PreferencesDialog::create_general_page() sizer_page->Add(item_hints, 0, wxTOP, FromDIP(3)); sizer_page->Add(title_presets, 0, wxTOP | wxEXPAND, FromDIP(20)); 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)); #ifdef _WIN32 sizer_page->Add(title_associate_file, 0, wxTOP| wxEXPAND, FromDIP(20)); diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp index b6a4a5ed62..de3a8b292d 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -1206,7 +1206,7 @@ void PresetUpdater::sync(std::string http_url, std::string language, std::string // Copy the whole vendors data for use in the background thread // Unfortunatelly as of C++11, it needs to be copied again // into the closure (but perhaps the compiler can elide this). - VendorMap vendors = preset_bundle->vendors; + VendorMap vendors = preset_bundle ? preset_bundle->vendors : VendorMap{}; p->thread = std::thread([this, vendors, http_url, language, plugin_version]() { this->p->prune_tmps(); @@ -1215,7 +1215,8 @@ void PresetUpdater::sync(std::string http_url, std::string language, std::string this->p->sync_version(); if (p->cancel) return; - this->p->sync_config(http_url, std::move(vendors)); + if (!vendors.empty()) + this->p->sync_config(http_url, std::move(vendors)); if (p->cancel) return; this->p->sync_plugins(http_url, plugin_version); From 6facd65530f84c58b1126afc84dbf64a915f239d Mon Sep 17 00:00:00 2001 From: Arthur Date: Mon, 27 Mar 2023 16:45:12 +0800 Subject: [PATCH 154/339] FIX: sharp tail detection in normal support was wrong 1. Fix sharp tail detection in normal support. The not operator in front of overlaps was missing. 2. Fix bridge removal. After adopting Prusa's smart bridge direction detection, the bridge angle may be pi, so our previous method (comparing angle to 0 and pi/2) was not right. Now we simply check if the bridge direction normal vector is aligned to x-axis or y-axis. Change-Id: I4e1fd937e432aca97cdd374ba66a0d869794126e (cherry picked from commit c0d82003a5e4c44345219294072c54051fc5711a) --- src/libslic3r/PrintObject.cpp | 27 +++---- src/libslic3r/SupportMaterial.cpp | 124 ++++++++++++++++-------------- src/libslic3r/TreeSupport.cpp | 75 ++++++++---------- 3 files changed, 110 insertions(+), 116 deletions(-) diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 3d6b0c3563..ed05e60e2c 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -2501,19 +2501,21 @@ void PrintObject::remove_bridges_from_contacts( if (surface.surface_type == stBottomBridge && surface.bridge_angle != -1) { auto bbox = get_extents(surface.expolygon); auto bbox_size = bbox.size(); - if (bbox_size[0] < max_bridge_length || bbox_size[1] < max_bridge_length) + if (bbox_size[0] < max_bridge_length && bbox_size[1] < max_bridge_length) polygons_append(bridges, surface.expolygon); else { if (break_bridge) { Polygons holes; - int x0 = bbox.min.x(); - int x1 = bbox.max.x(); - int y0 = bbox.min.y(); - int y1 = bbox.max.y(); + coord_t x0 = bbox.min.x(); + coord_t x1 = bbox.max.x(); + coord_t y0 = bbox.min.y(); + coord_t y1 = bbox.max.y(); const int grid_lw = int(w/2); // grid line width -#if 1 - if (fabs(surface.bridge_angle-0) fabs(bridge_direction(1))) + { // cut bridge along x-axis if bridge direction is aligned to x-axis more than to y-axis + // Note: surface.bridge_angle may be pi, so we can't compare it to 0 & pi/2. int step = bbox_size(0) / ceil(bbox_size(0) / max_bridge_length); for (int x = x0 + step; x < x1; x += step) { Polygon poly; @@ -2528,17 +2530,6 @@ void PrintObject::remove_bridges_from_contacts( holes.emplace_back(poly); } } -#else - int stepx = bbox_size(0) / ceil(bbox_size(0) / max_bridge_length); - int stepy = bbox_size(1) / ceil(bbox_size(1) / max_bridge_length); - for (int x = x0 + stepx; x < x1; x += stepx) - for (int y = y0 + stepy; y < y1; y += stepy) { - Polygon poly; - poly.points = {Point(x-grid_lw, y - grid_lw), Point(x+grid_lw, y - grid_lw), Point(x+grid_lw, y + grid_lw), Point(x-grid_lw, y + grid_lw)}; - holes.emplace_back(poly); - } - -#endif auto expoly = diff_ex(surface.expolygon, holes); polygons_append(bridges, expoly); } diff --git a/src/libslic3r/SupportMaterial.cpp b/src/libslic3r/SupportMaterial.cpp index 3c037ee8eb..261637959d 100644 --- a/src/libslic3r/SupportMaterial.cpp +++ b/src/libslic3r/SupportMaterial.cpp @@ -31,9 +31,9 @@ #endif // SUPPORT_USE_AGG_RASTERIZER // #define SLIC3R_DEBUG - +// #define SUPPORT_TREE_DEBUG_TO_SVG // Make assert active if SLIC3R_DEBUG -#ifdef SLIC3R_DEBUG +#if defined(SLIC3R_DEBUG) || defined(SUPPORT_TREE_DEBUG_TO_SVG) #define DEBUG #define _DEBUG #undef NDEBUG @@ -996,16 +996,18 @@ public: if (!support_polygons_simplified.empty()) bbox.merge(get_extents(support_polygons_simplified)); SVG svg(debug_out_path("extract_support_from_grid_trimmed-%s-%d-%d-%lf.svg", step_name, iRun, layer_id, print_z).c_str(), bbox); - svg.draw(union_ex(support_polygons_simplified), "gray", 0.25f); - svg.draw(islands, "red", 0.5f); - svg.draw(union_ex(out), "green", 0.5f); - svg.draw(union_ex(*m_support_polygons), "blue", 0.5f); - svg.draw_outline(islands, "red", "red", scale_(0.05)); - svg.draw_outline(union_ex(out), "green", "green", scale_(0.05)); - svg.draw_outline(union_ex(*m_support_polygons), "blue", "blue", scale_(0.05)); - for (const Point &pt : samples) - svg.draw(pt, "black", coord_t(scale_(0.15))); - svg.Close(); + if (svg.is_opened()) { + svg.draw(union_ex(support_polygons_simplified), "gray", 0.25f); + svg.draw(islands, "red", 0.5f); + svg.draw(union_ex(out), "green", 0.5f); + svg.draw(union_ex(*m_support_polygons), "blue", 0.5f); + svg.draw_outline(islands, "red", "red", scale_(0.05)); + svg.draw_outline(union_ex(out), "green", "green", scale_(0.05)); + svg.draw_outline(union_ex(*m_support_polygons), "blue", "blue", scale_(0.05)); + for (const Point& pt : samples) + svg.draw(pt, "black", coord_t(scale_(0.15))); + svg.Close(); + } #endif /* SLIC3R_DEBUG */ if (m_support_angle != 0.) @@ -1638,7 +1640,7 @@ static inline ExPolygons detect_overhangs( // 1. nothing below // Check whether this is a sharp tail region. // Should use lower_layer_expolys without any offset. Otherwise, it may missing sharp tails near the main body. - if (g_config_support_sharp_tails && overlaps(offset_ex(expoly, 0.5 * fw), lower_layer_expolys)) { + if (g_config_support_sharp_tails && !overlaps(offset_ex(expoly, 0.5 * fw), lower_layer_expolys)) { is_sharp_tail = expoly.area() < area_thresh_well_supported && !offset_ex(expoly,-0.1*fw).empty(); } @@ -2107,6 +2109,9 @@ struct OverhangCluster { int min_layer = 1e7; int max_layer = 0; coordf_t offset_scaled = 0; + bool is_cantilever = false; + bool is_sharp_tail = false; + bool is_small_overhang = false; OverhangCluster(ExPolygon* overhang, int layer_nr, coordf_t offset_scaled) { this->offset_scaled = offset_scaled; @@ -2240,12 +2245,6 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_ // 2) lower layer has no sharp tails if (!lower_layer || layer->sharp_tails.empty() == false || lower_layer->sharp_tails.empty() == true) continue; - ExPolygons lower_polys; - for (const ExPolygon& expoly : lower_layer->lslices) { - if (!offset_ex(expoly, -extrusion_width_scaled / 2).empty()) { - lower_polys.emplace_back(expoly); - } - } // BBS detect sharp tail const ExPolygons& lower_layer_sharptails = lower_layer->sharp_tails; @@ -2335,57 +2334,70 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_ } for (OverhangCluster& cluster : clusters) { - // 1. check overhang span size is smaller than 3mm - //auto bbox_size = get_extents(cluster.merged_overhangs_dilated).size(); - //const double dimension_limit = scale_(3.0) + 2 * fw_scaled; - //if (bbox_size.x() > dimension_limit || bbox_size.y() > dimension_limit) - // continue; - - double area = 0.f; - // 2. check overhang cluster size is smaller than 3.0 * fw_scaled - auto erode1 = offset(cluster.merged_overhangs_dilated, -2.5 * fw_scaled); - for (Polygon& poly : erode1) - area += poly.area() * (poly.is_counter_clockwise() ? 1.0 : -1.0); - if (std::abs(area) > SQ(scale_(0.1))) - continue; // 3. check whether the small overhang is sharp tail - bool is_sharp_tail = false; + cluster.is_sharp_tail = false; for (size_t layer_id = cluster.min_layer; layer_id <= cluster.max_layer; layer_id++) { const Layer* layer = object.get_layer(layer_id); if (overlaps(layer->sharp_tails, cluster.merged_overhangs_dilated)) { - is_sharp_tail = true; + cluster.is_sharp_tail = true; break; } } - if (is_sharp_tail) + if (cluster.is_sharp_tail) continue; - // 4. check whether the overhang cluster is cantilever (far awary from main body) - const Layer* layer = object.get_layer(cluster.min_layer); - if (layer->lower_layer == NULL) continue; - Layer* lower_layer = layer->lower_layer; - auto cluster_boundary = intersection(cluster.merged_overhangs_dilated, offset(lower_layer->lslices, scale_(0.5))); - if (cluster_boundary.empty()) continue; - double dist_max = 0; - Points cluster_pts; - for (auto& poly : cluster.merged_overhangs_dilated) - append(cluster_pts, poly.contour.points); - for (auto& pt : cluster_pts) { - double dist_pt = std::numeric_limits::max(); - for (auto& poly : cluster_boundary) { - double d = poly.distance_to(pt); - dist_pt = std::min(dist_pt, d); + if (!cluster.is_sharp_tail) { + // 4. check whether the overhang cluster is cantilever (far awary from main body) + const Layer* layer = object.get_layer(cluster.min_layer); + if (layer->lower_layer == NULL) continue; + Layer* lower_layer = layer->lower_layer; + auto cluster_boundary = intersection(cluster.merged_overhangs_dilated, offset(lower_layer->lslices, scale_(0.5))); + if (cluster_boundary.empty()) continue; + double dist_max = 0; + Points cluster_pts; + for (auto& poly : cluster.merged_overhangs_dilated) + append(cluster_pts, poly.contour.points); + for (auto& pt : cluster_pts) { + double dist_pt = std::numeric_limits::max(); + for (auto& poly : cluster_boundary) { + double d = poly.distance_to(pt); + dist_pt = std::min(dist_pt, d); + } + dist_max = std::max(dist_max, dist_pt); + } + if (dist_max > scale_(3)) { + cluster.is_cantilever = true; + continue; } - dist_max = std::max(dist_max, dist_pt); } - if (dist_max > 5.0 * fw_scaled) - continue; + + if (!cluster.is_sharp_tail && !cluster.is_cantilever) { + // 2. check overhang cluster size is small + cluster.is_small_overhang = false; + auto erode1 = offset_ex(cluster.merged_overhangs_dilated, -2.5 * fw_scaled); + if (area(erode1) < SQ(scale_(0.1))) { + cluster.is_small_overhang = true; + } + } + +#ifdef SUPPORT_TREE_DEBUG_TO_SVG + const Layer* layer1 = object.get_layer(cluster.min_layer); + BoundingBox bbox = get_extents(cluster.merged_overhangs_dilated); + bbox.merge(get_extents(layer1->lslices)); + SVG svg(format("SVG/overhangCluster_%s_%s_tail=%s_cantilever=%s_small=%s.svg", cluster.min_layer, layer1->print_z, cluster.is_sharp_tail, cluster.is_cantilever, cluster.is_small_overhang), bbox); + if (svg.is_opened()) { + svg.draw(layer1->lslices, "red"); + svg.draw(cluster.merged_overhangs_dilated, "blue"); + } +#endif // 5. remove small overhangs - for (auto overhangs : cluster.layer_overhangs) { - for (auto* poly : overhangs.second) - removed_overhang.insert(poly); + if (cluster.is_small_overhang) { + for (auto overhangs : cluster.layer_overhangs) { + for (auto* poly : overhangs.second) + removed_overhang.insert(poly); + } } } diff --git a/src/libslic3r/TreeSupport.cpp b/src/libslic3r/TreeSupport.cpp index 4c37b2c3cd..f6d9d6b563 100644 --- a/src/libslic3r/TreeSupport.cpp +++ b/src/libslic3r/TreeSupport.cpp @@ -763,6 +763,8 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) int max_layer = 0; coordf_t offset = 0; bool is_cantilever = false; + bool is_sharp_tail = false; + bool is_small_overhang = false; OverhangCluster(const ExPolygon* expoly, int layer_nr) { push_back(expoly, layer_nr); } @@ -951,12 +953,6 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) // 2) lower layer has no sharp tails if (!lower_layer || layer->sharp_tails.empty() == false || lower_layer->sharp_tails.empty() == true) continue; - ExPolygons lower_polys; - for (const ExPolygon& expoly : lower_layer->lslices) { - if (!offset_ex(expoly, -extrusion_width_scaled / 2).empty()) { - lower_polys.emplace_back(expoly); - } - } // BBS detect sharp tail const ExPolygons& lower_layer_sharptails = lower_layer->sharp_tails; @@ -1047,9 +1043,21 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) m_object->project_and_append_custom_facets(false, EnforcerBlockerType::ENFORCER, enforcers); m_object->project_and_append_custom_facets(false, EnforcerBlockerType::BLOCKER, blockers); - // check whether the overhang cluster is cantilever (far awary from main body) + // check whether the overhang cluster is sharp tail or cantilever max_cantilevel_dist = 0; for (auto& cluster : overhangClusters) { + // 3. check whether the small overhang is sharp tail + cluster.is_sharp_tail = false; + for (size_t layer_id = cluster.min_layer; layer_id <= cluster.max_layer; layer_id++) { + Layer* layer = m_object->get_layer(layer_id); + if (overlaps(layer->sharp_tails, cluster.merged_poly)) { + cluster.is_sharp_tail = true; + break; + } + } + if (cluster.is_sharp_tail) continue; + + // check whether the overhang cluster is cantilever (far awary from main body) Layer* layer = m_object->get_layer(cluster.min_layer); if (layer->lower_layer == NULL) continue; Layer* lower_layer = layer->lower_layer; @@ -1083,46 +1091,29 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) if (blockers.size() < m_object->layer_count()) blockers.resize(m_object->layer_count()); for (auto& cluster : overhangClusters) { - auto erode1 = offset_ex(cluster.merged_poly, -1.5*extrusion_width_scaled); - //DEBUG - bool save_poly = false; - if (save_poly) { - erode1 = offset_ex(cluster.merged_poly, -1*extrusion_width_scaled); - double a = area(erode1); - erode1[0].contour.remove_duplicate_points(); - a = area(erode1); - auto tmp = offset_ex(erode1, extrusion_width_scaled); - SVG svg("SVG/merged_poly_"+std::to_string(cluster.min_layer)+".svg", m_object->bounding_box()); - if (svg.is_opened()) { - svg.draw_outline(cluster.merged_poly, "yellow"); - svg.draw_outline(erode1, "yellow"); - } + // 4. check whether the overhang cluster is cantilever or sharp tail + if (cluster.is_cantilever || cluster.is_sharp_tail) continue; + + if (!cluster.is_sharp_tail && !cluster.is_cantilever) { + // 2. check overhang cluster size is smaller than 3.0 * fw_scaled + auto erode1 = offset_ex(cluster.merged_poly, -1.5 * extrusion_width_scaled); + cluster.is_small_overhang = area(erode1) < SQ(scale_(0.1)); } - // 1. check overhang span size is smaller than 3mm - //auto bbox_size = get_extents(cluster.merged_poly).size(); - //const double dimension_limit = scale_(3.0) + 2 * extrusion_width_scaled; - //if (bbox_size.x() > dimension_limit || bbox_size.y() > dimension_limit) - // continue; +#ifdef SUPPORT_TREE_DEBUG_TO_SVG + const Layer* layer1 = m_object->get_layer(cluster.min_layer); + BoundingBox bbox = cluster.merged_bbox; + bbox.merge(get_extents(layer1->lslices)); + SVG svg(format("SVG/overhangCluster_%s_%s_tail=%s_cantilever=%s_small=%s.svg", cluster.min_layer, layer1->print_z, cluster.is_sharp_tail, cluster.is_cantilever, cluster.is_small_overhang), bbox); + if (svg.is_opened()) { + svg.draw(layer1->lslices, "red"); + svg.draw(cluster.merged_poly, "blue"); + } +#endif - // 2. check overhang cluster size is smaller than 3.0 * fw_scaled - if (area(erode1) > SQ(scale_(0.1))) + if (!cluster.is_small_overhang) continue; - // 3. check whether the small overhang is sharp tail - bool is_sharp_tail = false; - for (size_t layer_id = cluster.min_layer; layer_id <= cluster.max_layer; layer_id++) { - Layer* layer = m_object->get_layer(layer_id); - if(overlaps(layer->sharp_tails, cluster.merged_poly)) { - is_sharp_tail = true; - break; - } - } - if (is_sharp_tail) continue; - - // 4. check whether the overhang cluster is cantilever - if (cluster.is_cantilever) continue; - for (auto it = cluster.layer_overhangs.begin(); it != cluster.layer_overhangs.end(); it++) { int layer_nr = it->first; auto p_overhang = it->second; From 27f4c282f233995a6765dedadfa7859def7ea706 Mon Sep 17 00:00:00 2001 From: tao wang Date: Tue, 28 Mar 2023 16:32:05 +0800 Subject: [PATCH 155/339] ENH:add new prohibited materials Change-Id: I621aaf9ceabe11dbedd4e77376f10650be453abf --- resources/printers/filaments_blacklist.json | 32 +++++++++++++++++++- src/libslic3r/ProjectTask.hpp | 1 + src/slic3r/GUI/AMSMaterialsSetting.cpp | 3 ++ src/slic3r/GUI/SelectMachine.cpp | 33 +++++++++++++++++---- 4 files changed, 63 insertions(+), 6 deletions(-) diff --git a/resources/printers/filaments_blacklist.json b/resources/printers/filaments_blacklist.json index e5edcf9eb1..685f3cb536 100644 --- a/resources/printers/filaments_blacklist.json +++ b/resources/printers/filaments_blacklist.json @@ -7,12 +7,30 @@ "type": "TPU", "action": "prohibition", "description": "TPU is not supported by AMS." + }, + { + "vendor": "Bambulab", + "type": "TPU", + "action": "prohibition", + "description": "TPU is not supported by AMS." }, { "vendor": "Third Party", "type": "PVA", "action": "warning", "description": "Damp PVA will become flexible and get stuck inside AMS,please take care to dry it before use." + }, + { + "vendor": "Third Party", + "type": "PLA-CF", + "action": "warning", + "description": "CF/GF filaments are hard and brittle, It's easy to break or get stuck in AMS, please use with caution." + }, + { + "vendor": "Third Party", + "type": "PETG-CF", + "action": "warning", + "description": "CF/GF filaments are hard and brittle, It's easy to break or get stuck in AMS, please use with caution." }, { "vendor": "Third Party", @@ -22,9 +40,21 @@ }, { "vendor": "Third Party", - "type": "PLA-CF", + "type": "PAHT-CF", "action": "warning", "description": "CF/GF filaments are hard and brittle, It's easy to break or get stuck in AMS, please use with caution." + }, + { + "vendor": "Bambulab", + "type": "PET-CF", + "action": "prohibition", + "description": "Bambu PET-CF/PA6-CF is not supported by AMS." + }, + { + "vendor": "Bambulab", + "type": "PA6-CF", + "action": "prohibition", + "description": "Bambu PET-CF/PA6-CF is not supported by AMS." } ] } diff --git a/src/libslic3r/ProjectTask.hpp b/src/libslic3r/ProjectTask.hpp index fbcdb91187..930fbbdc36 100644 --- a/src/libslic3r/ProjectTask.hpp +++ b/src/libslic3r/ProjectTask.hpp @@ -39,6 +39,7 @@ struct FilamentInfo std::string type; std::string color; std::string filament_id; + std::string brand; float used_m; float used_g; int tray_id; // start with 0 diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index 8d6f3bbadb..9cc496dec9 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -473,6 +473,9 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) if (ams_filament_id.empty() || nozzle_temp_min.empty() || nozzle_temp_max.empty() || m_filament_type.empty()) { BOOST_LOG_TRIVIAL(trace) << "Invalid Setting id"; + MessageDialog msg_dlg(nullptr, _L("You need to select the material type and color firet."), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return; } else { if (obj) { if (obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)) { diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 21ba43600a..7f45a65ce2 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -2068,14 +2068,34 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) auto mapping_result = m_mapping_popup.parse_ams_mapping(obj_->amsList); auto has_unknown_filament = false; // check if ams mapping is has errors, tpu - bool has_tpu_filament = false; + bool has_prohibited_filament = false; + wxString prohibited_error = wxEmptyString; + for (auto i = 0; i < m_ams_mapping_result.size(); i++) { + auto tid = m_ams_mapping_result[i].tray_id; + std::string filament_type = boost::to_upper_copy(m_ams_mapping_result[i].type); - if (filament_type == "TPU") { - has_tpu_filament = true; + std::string filament_brand; + + for (auto fs : m_filaments) { + if (fs.id == m_ams_mapping_result[i].id) { + filament_brand = boost::to_upper_copy(m_filaments[i].brand); + } } + + if (filament_type == "TPU") { + has_prohibited_filament = true; + prohibited_error = wxString::Format(_L("%s is not supported by AMS."), "TPU"); + }else if (filament_type == "PET-CF" && filament_brand == "BAMBULAB") { + has_prohibited_filament = true; + prohibited_error = wxString::Format(_L("%s is not supported by AMS."), "PET-CF"); + }else if (filament_type == "PA6-CF" && filament_brand == "BAMBULAB") { + has_prohibited_filament = true; + prohibited_error = wxString::Format(_L("%s is not supported by AMS."), "PA6-CF"); + } + for (auto miter : mapping_result) { //matching if (miter.id == tid) { @@ -2087,8 +2107,8 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) } } - if (has_tpu_filament && obj_->has_ams() && ams_check->GetValue()) { - wxString tpu_tips = wxString::Format(_L("The %s filament is too soft to be used with the AMS"), "TPU"); + if (has_prohibited_filament && obj_->has_ams() && ams_check->GetValue()) { + wxString tpu_tips = prohibited_error; show_errors(tpu_tips); return; } @@ -3043,6 +3063,7 @@ void SelectMachineDialog::set_default() //sizer_thumbnail->Layout(); std::vector materials; + std::vector brands; std::vector display_materials; { auto preset_bundle = wxGetApp().preset_bundle; @@ -3053,6 +3074,7 @@ void SelectMachineDialog::set_default() std::string filament_type = iter->config.get_filament_type(display_filament_type); display_materials.push_back(display_filament_type); materials.push_back(filament_type); + brands.push_back(iter->vendor->name); } } } @@ -3147,6 +3169,7 @@ void SelectMachineDialog::set_default() FilamentInfo info; info.id = extruder; info.type = materials[extruder]; + info.brand = brands[extruder]; info.color = colour_rgb.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(); m_filaments.push_back(info); } From e3d89f215495efb80357d136f4fdadc1be22e47f Mon Sep 17 00:00:00 2001 From: tao wang Date: Fri, 24 Mar 2023 15:47:31 +0800 Subject: [PATCH 156/339] FIX:fixed ams cannot displayed when amsid does not start from 0 Change-Id: I2beee54bc99ced5faf9ea58e6ff3f5aaa3504a64 --- src/slic3r/GUI/Widgets/AMSControl.cpp | 29 ++++++++++++++++++--------- src/slic3r/GUI/Widgets/AMSControl.hpp | 2 +- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index e93058cfc7..7ad7d5f822 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -2430,7 +2430,7 @@ void AMSControl::Reset() std::vector ams_info{ams1, ams2, ams3, ams4}; std::vector::iterator it; - UpdateAms(ams_info, false); + UpdateAms(ams_info, false, false, true); m_current_show_ams = ""; m_current_ams = ""; m_current_senect = ""; @@ -2485,7 +2485,7 @@ void AMSControl::update_vams_kn_value(AmsTray tray) m_vams_lib->Refresh(); } -void AMSControl::UpdateAms(std::vector info, bool keep_selection, bool has_extrusion_cali) +void AMSControl::UpdateAms(std::vector info, bool keep_selection, bool has_extrusion_cali, bool is_reset) { std::string curr_ams_id = GetCurentAms(); std::string curr_can_id = GetCurrentCan(curr_ams_id); @@ -2523,14 +2523,17 @@ void AMSControl::UpdateAms(std::vector info, bool keep_selection, bool // update cans for (auto i = 0; i < m_ams_cans_list.GetCount(); i++) { AmsCansWindow *cans = m_ams_cans_list[i]; - if (i < info.size()) { - cans->amsCans->m_info = m_ams_info[i]; - cans->amsCans->Update(m_ams_info[i]); - cans->amsCans->show_sn_value(has_extrusion_cali); + + for (auto ifo : m_ams_info) { + if (ifo.ams_id == cans->amsIndex) { + cans->amsCans->m_info = ifo; + cans->amsCans->Update(ifo); + cans->amsCans->show_sn_value(has_extrusion_cali); + } } } - if (m_current_senect.empty() && info.size() > 0) { + /*if (m_current_senect.empty() && info.size() > 0) { if (curr_ams_id.empty()) { SwitchAms(info[0].ams_id); return; @@ -2544,6 +2547,12 @@ void AMSControl::UpdateAms(std::vector info, bool keep_selection, bool } return; } + }*/ + + if ( m_current_show_ams.empty() && !is_reset ) { + if (info.size() > 0) { + SwitchAms(info[0].ams_id); + } } } @@ -2593,7 +2602,6 @@ void AMSControl::SwitchAms(std::string ams_id) AmsItems *item = m_ams_item_list[i]; if (item->amsItem->m_amsinfo.ams_id == m_current_show_ams) { item->amsItem->OnSelected(); - //item->amsItem->ShowHumidity(); m_current_senect = ams_id; for (auto i = 0; i < m_ams_cans_list.GetCount(); i++) { @@ -2614,7 +2622,9 @@ void AMSControl::SwitchAms(std::string ams_id) for (auto i = 0; i < m_ams_cans_list.GetCount(); i++) { AmsCansWindow *cans = m_ams_cans_list[i]; - if (cans->amsCans->m_info.ams_id == ams_id) { m_simplebook_cans->SetSelection(cans->amsCans->m_selection); } + if (cans->amsCans->m_info.ams_id == ams_id) { + m_simplebook_cans->SetSelection(cans->amsCans->m_selection); + } } m_current_ams = ams_id; @@ -2743,6 +2753,7 @@ void AMSControl::SetExtruder(bool on_off, bool is_vams, wxColour col) m_vams_road->OnVamsLoading(false); } else { m_extruder->TurnOn(col); + m_extruder->OnAmsLoading(true, col); } if (is_vams && on_off) { diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index 1c67052b8f..8b1015b452 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -594,7 +594,7 @@ public: void SetHumidity(std::string amsid, int humidity); void UpdateStepCtrl(); void CreateAms(); - void UpdateAms(std::vector info, bool keep_selection = true, bool has_extrusion_cali = true); + void UpdateAms(std::vector info, bool keep_selection = true, bool has_extrusion_cali = true, bool is_reset = false); void AddAms(AMSinfo info, bool refresh = true); void SetExtruder(bool on_off, bool is_vams, wxColour col); void SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadType type, AMSPassRoadSTEP step); From ee2ef44dc7a2f8a8290ed4243e129bc5bcdcad31 Mon Sep 17 00:00:00 2001 From: tao wang Date: Mon, 27 Mar 2023 21:02:35 +0800 Subject: [PATCH 157/339] NEW:ams control support for more gradient colors Change-Id: I3e7e7e1f340a443200b9225b142f6398b4824513 --- resources/images/color_picker_border.svg | 3 +++ src/slic3r/GUI/AMSMaterialsSetting.cpp | 32 ++++++++++++++++++++++++ src/slic3r/GUI/AMSMaterialsSetting.hpp | 4 +++ src/slic3r/GUI/StatusPanel.cpp | 8 ++++++ src/slic3r/GUI/Widgets/AMSControl.cpp | 26 ++++++++++++++++++- 5 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 resources/images/color_picker_border.svg diff --git a/resources/images/color_picker_border.svg b/resources/images/color_picker_border.svg new file mode 100644 index 0000000000..e9af4f91ef --- /dev/null +++ b/resources/images/color_picker_border.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index 9cc496dec9..458011fa6c 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -536,6 +536,13 @@ void AMSMaterialsSetting::set_color(wxColour color) m_clr_picker->set_color(color); } +void AMSMaterialsSetting::set_colors(std::vector colors) +{ + //m_clrData->SetColour(color); + m_clr_picker->set_colors(colors); +} + + void AMSMaterialsSetting::on_picker_color(wxCommandEvent& event) { unsigned int color_num = event.GetInt(); @@ -836,6 +843,7 @@ ColorPicker::ColorPicker(wxWindow* parent, wxWindowID id, const wxPoint& pos /*= wxWindow::Create(parent, id, pos, size); Bind(wxEVT_PAINT, &ColorPicker::paintEvent, this); + m_bitmap_border = create_scaled_bitmap("color_picker_border", nullptr, 25); } ColorPicker::~ColorPicker(){} @@ -846,6 +854,12 @@ void ColorPicker::set_color(wxColour col) Refresh(); } +void ColorPicker::set_colors(std::vector cols) +{ + m_cols = cols; + Refresh(); +} + void ColorPicker::paintEvent(wxPaintEvent& evt) { wxPaintDC dc(this); @@ -894,6 +908,24 @@ void ColorPicker::doRender(wxDC& dc) dc.SetPen(wxPen(wxColour(0x6B6B6B))); dc.SetBrush(*wxTRANSPARENT_BRUSH); dc.DrawCircle(size.x / 2, size.x / 2, radius); + + if (m_cols.size() > 1) { + int left = FromDIP(0); + float total_width = size.x; + int gwidth = std::round(total_width / (m_cols.size() - 1)); + + for (int i = 0; i < m_cols.size() - 1; i++) { + + if ((left + gwidth) > (size.x)) { + gwidth = size.x - left; + } + + auto rect = wxRect(left, 0, gwidth, size.y); + dc.GradientFillLinear(rect, m_cols[i], m_cols[i + 1], wxEAST); + left += gwidth; + } + dc.DrawBitmap(m_bitmap_border, wxPoint(0, 0)); + } } } diff --git a/src/slic3r/GUI/AMSMaterialsSetting.hpp b/src/slic3r/GUI/AMSMaterialsSetting.hpp index d5eaf8535a..572324d5a2 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.hpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.hpp @@ -31,7 +31,9 @@ namespace Slic3r { namespace GUI { class ColorPicker : public wxWindow { public: + wxBitmap m_bitmap_border; wxColour m_colour; + std::vector m_cols; bool m_selected{false}; bool m_show_full{false}; @@ -39,6 +41,7 @@ public: ~ColorPicker(); void set_color(wxColour col); + void set_colors(std::vector cols); void set_selected(bool sel) {m_selected = sel;Refresh();}; void set_show_full(bool full) {m_show_full = full;Refresh();}; @@ -92,6 +95,7 @@ public: void post_select_event(); void set_color(wxColour color); + void set_colors(std::vector colors); void on_picker_color(wxCommandEvent& color); MachineObject* obj{ nullptr }; diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 3d85d412c3..8b69ea1ff2 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -2763,6 +2763,14 @@ void StatusPanel::on_filament_edit(wxCommandEvent &event) n_val = wxString::Format("%.3f", tray_it->second->n); wxColor color = AmsTray::decode_color(tray_it->second->color); m_filament_setting_dlg->set_color(color); + + std::vector cols; + for (auto col : tray_it->second->cols) { + cols.push_back( AmsTray::decode_color(col)); + } + + m_filament_setting_dlg->set_colors(cols); + m_filament_setting_dlg->ams_filament_id = tray_it->second->setting_id; m_filament_setting_dlg->m_is_third = !MachineObject::is_bbl_filament(tray_it->second->tag_uid); if (!m_filament_setting_dlg->m_is_third) { diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index 7ad7d5f822..f966cd8c02 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -1374,7 +1374,31 @@ void AMSItem::doRender(wxDC &dc) dc.SetBrush(AMS_CONTROL_DISABLE_COLOUR); } - dc.DrawRoundedRectangle(left, (size.y - AMS_ITEM_CUBE_SIZE.y) / 2, AMS_ITEM_CUBE_SIZE.x, AMS_ITEM_CUBE_SIZE.y, 2); + if (iter->material_cols.size() > 1) { + int fleft = left; + float total_width = AMS_ITEM_CUBE_SIZE.x; + int gwidth = std::round(total_width / (iter->material_cols.size() - 1)); + + for (int i = 0; i < iter->material_cols.size() - 1; i++) { + + if ((fleft + gwidth) > (AMS_ITEM_CUBE_SIZE.x)) { + gwidth = (fleft + AMS_ITEM_CUBE_SIZE.x) - fleft; + } + + auto rect = wxRect(fleft, (size.y - AMS_ITEM_CUBE_SIZE.y) / 2, gwidth, AMS_ITEM_CUBE_SIZE.y); + dc.GradientFillLinear(rect, iter->material_cols[i], iter->material_cols[i + 1], wxEAST); + fleft += gwidth; + } + + dc.SetPen(wxPen(StateColor::darkModeColorFor(m_background_colour))); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.DrawRoundedRectangle(left - 1, (size.y - AMS_ITEM_CUBE_SIZE.y) / 2 - 1, AMS_ITEM_CUBE_SIZE.x + 2, AMS_ITEM_CUBE_SIZE.y + 2, 2); + + }else { + dc.DrawRoundedRectangle(left, (size.y - AMS_ITEM_CUBE_SIZE.y) / 2, AMS_ITEM_CUBE_SIZE.x, AMS_ITEM_CUBE_SIZE.y, 2); + } + + left += AMS_ITEM_CUBE_SIZE.x; left += m_space; } From 04d24fbb2fd541395da2918a6626b34656bff95e Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Tue, 28 Mar 2023 12:13:53 +0800 Subject: [PATCH 158/339] FIX: [STUDIO-2575] crash report invalid uft8 char Change-Id: I7fd5290774d3d54efdee65bfe1191a932e252f87 --- src/slic3r/GUI/GUI_App.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 3486c89e9e..c55edd897f 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1150,10 +1150,11 @@ void GUI_App::post_init() json j; j["time"] = file_name.substr(file_name.find("crash") + strlen("crash") + 1); j["verion"] = std::string(SLIC3R_VERSION); - j["content"] = data.str(); - if (agent) { - agent->track_event("studio_crash", j.dump()); - } + j["content"] = decode_path(data.str().c_str()); + try { + if (agent) { + agent->track_event("studio_crash", j.dump()); } + } catch (...) {} std::string new_file_name = file_name.insert(0, "_done_"); boost::filesystem::rename(iter->path(), iter->path().parent_path() / boost::filesystem::path(new_file_name + iter->path().extension().string())); } From 4b5fa4fe585ea3558b3d30d82cc06159273ce501 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Tue, 28 Mar 2023 16:01:07 +0800 Subject: [PATCH 159/339] FIX: param full field with for multiline option Change-Id: I8dd53e461645810e6db3e17b75e3e7c4a0c1e01d --- src/slic3r/GUI/OptionsGroup.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp index 3a4787e2ef..8ae2aad0fb 100644 --- a/src/slic3r/GUI/OptionsGroup.cpp +++ b/src/slic3r/GUI/OptionsGroup.cpp @@ -286,7 +286,7 @@ void OptionsGroup::activate_line(Line& line) const auto h_sizer = new wxBoxSizer(wxHORIZONTAL); sizer->Add(h_sizer, 1, wxEXPAND | wxALL, wxOSX ? 0 : 5); if (is_window_field(field)) - h_sizer->Add(field->getWindow(), 1, wxEXPAND | wxLEFT, titleWidth * wxGetApp().em_unit()); + h_sizer->Add(field->getWindow(), 1, wxEXPAND | wxLEFT, option.opt.multiline ? 0 : titleWidth * wxGetApp().em_unit()); if (is_sizer_field(field)) h_sizer->Add(field->getSizer(), 1, wxEXPAND | wxLEFT, titleWidth * wxGetApp().em_unit()); return; From 59a7cd3ef99a40ee6da5c6674c5d6fa93f5ddf70 Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Mon, 27 Mar 2023 21:51:22 +0800 Subject: [PATCH 160/339] ENH: thumbnail: improve the effect of thumbnail 1. adjust the background color 2. add a bit more emission factor 3. adjust the thumbnail rendering size in preview 4. change the font to white of thumbnail preview Change-Id: Ifbcac94383608054759a7a31ec357233c7fb57a9 (cherry picked from commit ac577934f11edd56069584d1450734df59e17989) --- src/slic3r/GUI/GLCanvas3D.cpp | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index fa636b4cc7..71014054b2 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -4999,7 +4999,7 @@ void GLCanvas3D::update_sequential_clearance() cache_hull_2d.reserve(hull_2d.points.size()); for (const Point& p : hull_2d.points) { cache_hull_2d.emplace_back(unscale(p.x()), unscale(p.y()), 0.0); - } + } } m_sequential_print_clearance_first_displacement = false; } @@ -5519,8 +5519,14 @@ void GLCanvas3D::render_thumbnail_internal(ThumbnailData& thumbnail_data, const //if (thumbnail_params.transparent_background) if (for_picking) glsafe(::glClearColor(0.f, 0.f, 0.f, 0.f)); - else - glsafe(::glClearColor(0.906f, 0.906f, 0.906f, 1.0f)); + else { + //glsafe(::glClearColor(0.906f, 0.906f, 0.906f, 1.0f)); + //glsafe(::glClearColor(0.50f, 0.5f, 0.5f, 1.0f)); + //glsafe(::glClearColor(0.121568f, 0.121568f, 0.121568f, 1.0f)); + glsafe(::glClearColor(0.17647f, 0.17647f, 0.17647f, 1.0f)); + //glsafe(::glClearColor(0.37647f, 0.37647f, 0.37647f, 0.5f)); too lite + //glsafe(::glClearColor(0.23529f, 0.26666f, 0.2745f, 1.0f)); + } glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)); glsafe(::glEnable(GL_DEPTH_TEST)); @@ -5574,7 +5580,7 @@ void GLCanvas3D::render_thumbnail_internal(ThumbnailData& thumbnail_data, const } else { shader->start_using(); - shader->set_uniform("emission_factor", 0.0f); + shader->set_uniform("emission_factor", 0.1f); for (GLVolume* vol : visible_volumes) { //BBS set render color for thumbnails curr_color[0] = vol->color[0]; @@ -7301,7 +7307,7 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() bool is_hovered = false; - m_sel_plate_toolbar.set_icon_size(80.0f * f_scale, 80.0f * f_scale); + m_sel_plate_toolbar.set_icon_size(100.0f * f_scale, 100.0f * f_scale); float button_width = m_sel_plate_toolbar.icon_width; float button_height = m_sel_plate_toolbar.icon_height; @@ -7321,7 +7327,9 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() ImVec4 button_active = ImVec4(0.12f, 0.56f, 0.92, 1.0f); ImVec4 button_hover = ImVec4(0.67f, 0.67f, 0.67, 1.0f); ImVec4 scroll_col = ImVec4(0.77f, 0.77f, 0.77f, 1.0f); - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.f, 0.f, 0.f, 1.0f)); + //ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.f, 0.f, 0.f, 1.0f)); + //use white text as the background switch to black + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); ImGui::PushStyleColor(ImGuiCol_WindowBg, window_bg); ImGui::PushStyleColor(ImGuiCol_ScrollbarBg, window_bg); ImGui::PushStyleColor(ImGuiCol_ScrollbarGrabActive, scroll_col); @@ -7696,7 +7704,7 @@ void GLCanvas3D::_render_paint_toolbar() const float constraint_window_width = canvas_w - 2 * return_button_margin; ImGui::SetNextWindowSizeConstraints({ 0, 0 }, { constraint_window_width, FLT_MAX }); imgui.begin(_L("Paint Toolbar"), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse); - + const float cursor_y = ImGui::GetCursorPosY(); const ImVec2 arrow_button_size = ImVec2(0.375f * button_size.x, ImGui::GetWindowHeight()); const ImRect left_arrow_button = ImRect(ImGui::GetCurrentWindow()->Pos, ImGui::GetCurrentWindow()->Pos + arrow_button_size); @@ -7740,7 +7748,7 @@ void GLCanvas3D::_render_paint_toolbar() const Slic3r::GUI::BitmapCache::parse_color(colors[i], rgb); float gray = 0.299 * rgb[0] + 0.587 * rgb[1] + 0.114 * rgb[2]; ImVec4 text_color = gray < 80 ? ImVec4(1.0f, 1.0f, 1.0f, 1.0f) : ImVec4(0, 0, 0, 1.0f); - + imgui.push_bold_font(); ImVec2 number_label_size = ImGui::CalcTextSize(std::to_string(i + 1).c_str()); ImGui::SetCursorPosY(cursor_y + text_offset_y); From 7595775ba50f5d27315cbf16aca9071b3ed80dec Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Tue, 28 Mar 2023 21:52:23 +0800 Subject: [PATCH 161/339] ENH: update: remove the old cached ota files in some corner case Change-Id: I8039e21045d33827dae096b18feead6150981056 (cherry picked from commit d920b3a57c284422e09c952b103c5f26ae551d2a) --- src/slic3r/Utils/PresetUpdater.cpp | 75 +++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 2 deletions(-) diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp index de3a8b292d..eed76224a6 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -914,8 +914,79 @@ void PresetUpdater::priv::sync_plugins(std::string http_url, std::string plugin_ std::string cached_version; get_cached_plugins_version(cached_version); - if (!cached_version.empty()) - plugin_version = cached_version; + if (!cached_version.empty()) { + bool need_delete_cache = false; + Semver current_semver = curr_version; + Semver cached_semver = cached_version; + + int curent_patch_cc = current_semver.patch()/100; + int cached_patch_cc = cached_semver.patch()/100; + int curent_patch_dd = current_semver.patch()%100; + int cached_patch_dd = cached_semver.patch()%100; + if ((cached_semver.maj() != current_semver.maj()) + || (cached_semver.min() != current_semver.min()) + || (curent_patch_cc != cached_patch_cc)) + { + need_delete_cache = true; + BOOST_LOG_TRIVIAL(info) << boost::format("cached plugins version %1% not match with current %2%")%cached_version%curr_version; + } + else if (cached_patch_dd <= curent_patch_dd) { + need_delete_cache = true; + BOOST_LOG_TRIVIAL(info) << boost::format("cached plugins version %1% not newer than current %2%")%cached_version%curr_version; + } + else { + plugin_version = cached_version; + } + + if (need_delete_cache) { + std::string data_dir_str = data_dir(); + boost::filesystem::path data_dir_path(data_dir_str); + auto cache_folder = data_dir_path / "ota"; + +#if defined(_MSC_VER) || defined(_WIN32) + auto network_library = cache_folder / "bambu_networking.dll"; + auto player_library = cache_folder / "BambuSource.dll"; +#elif defined(__WXMAC__) + auto network_library = cache_folder / "libbambu_networking.dylib"; + auto player_library = cache_folder / "libBambuSource.dylib"; +#else + auto network_library = cache_folder / "libbambu_networking.so"; + auto player_library = cache_folder / "libBambuSource.so"; +#endif + auto changelog_file = cache_folder / "network_plugins.json"; + + if (boost::filesystem::exists(network_library)) + { + + BOOST_LOG_TRIVIAL(info) << "[remove_old_networking_plugins] remove the file "< resources From 4a99304c4fd043875faf6393bc68f1b480f8886a Mon Sep 17 00:00:00 2001 From: Stone Li Date: Wed, 29 Mar 2023 14:30:06 +0800 Subject: [PATCH 162/339] ENH: update version to 01.05.04.xx Change-Id: Ia53270bab7171376883cb01d158f0e0d6bdfc875 --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index 984bc5b9c2..7ac91f8953 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.05.00.62") +set(SLIC3R_VERSION "01.05.04.62") From cf556814ce51841f726ff95787c001fcb51a611b Mon Sep 17 00:00:00 2001 From: Arthur Date: Wed, 29 Mar 2023 15:27:35 +0800 Subject: [PATCH 163/339] ENH: translate missing entries MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Jira: STUDIO-2577, STUDIO-2581,STUDIO-2582,STUDIO-2585 Change-Id: I560635756f7d0a9b27e4827920fe84c724d09f01 --- bbl/i18n/BambuStudio.pot | 364 +++++++++++++++----------- bbl/i18n/de/BambuStudio_de.po | 217 ++++++++++++---- bbl/i18n/en/BambuStudio_en.po | 215 ++++++++++++---- bbl/i18n/es/BambuStudio_es.po | 381 +++++++++++++--------------- bbl/i18n/fr/BambuStudio_fr.po | 225 +++++++++++----- bbl/i18n/hu/BambuStudio_hu.po | 215 ++++++++++++---- bbl/i18n/it/BambuStudio_it.po | 215 ++++++++++++---- bbl/i18n/ja/BambuStudio_ja.po | 213 ++++++++++++---- bbl/i18n/nl/BambuStudio_nl.po | 213 ++++++++++++---- bbl/i18n/sv/BambuStudio_sv.po | 219 ++++++++++++---- bbl/i18n/zh_cn/BambuStudio_zh_CN.po | 285 +++++++++++++++------ resources/i18n/de/BambuStudio.mo | Bin 235641 -> 234880 bytes resources/i18n/en/BambuStudio.mo | Bin 215441 -> 214753 bytes resources/i18n/es/BambuStudio.mo | Bin 235050 -> 234298 bytes resources/i18n/fr/BambuStudio.mo | Bin 230471 -> 229770 bytes resources/i18n/hu/BambuStudio.mo | Bin 228453 -> 227756 bytes resources/i18n/it/BambuStudio.mo | Bin 217043 -> 216355 bytes resources/i18n/ja/BambuStudio.mo | Bin 224626 -> 223857 bytes resources/i18n/nl/BambuStudio.mo | Bin 231869 -> 231123 bytes resources/i18n/sv/BambuStudio.mo | Bin 221854 -> 221115 bytes resources/i18n/zh_cn/BambuStudio.mo | Bin 207963 -> 212589 bytes 21 files changed, 1899 insertions(+), 863 deletions(-) diff --git a/bbl/i18n/BambuStudio.pot b/bbl/i18n/BambuStudio.pot index 43d97c80d8..582556a274 100644 --- a/bbl/i18n/BambuStudio.pot +++ b/bbl/i18n/BambuStudio.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-24 17:47+0800\n" +"POT-Creation-Date: 2023-03-29 14:51+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -293,7 +293,10 @@ msgstr "" msgid "Height" msgstr "" -msgid "Add/Edit connectors" +msgid "Edit connectors" +msgstr "" + +msgid "Add connectors" msgstr "" msgid "Upper part" @@ -329,10 +332,19 @@ msgstr "" msgid "Connectors" msgstr "" -msgid "Remove connectors" +msgid "Type" msgstr "" -msgid "Type" +msgid "Style" +msgstr "" + +msgid "Shape" +msgstr "" + +msgid "Depth ratio" +msgstr "" + +msgid "Remove connectors" msgstr "" msgid "Prizm" @@ -347,15 +359,6 @@ msgstr "" msgid "Hexagon" msgstr "" -msgid "Style" -msgstr "" - -msgid "Shape" -msgstr "" - -msgid "Depth ratio" -msgstr "" - msgid "Confirm connectors" msgstr "" @@ -1302,6 +1305,15 @@ msgstr "" msgid "Open Documentation in web browser." msgstr "" +msgid "Pause:" +msgstr "" + +msgid "Custom Template:" +msgstr "" + +msgid "Custom G-code:" +msgstr "" + msgid "Custom G-code" msgstr "" @@ -1311,6 +1323,9 @@ msgstr "" msgid "OK" msgstr "" +msgid "Jump to Layer" +msgstr "" + msgid "Jump to layer" msgstr "" @@ -1326,16 +1341,22 @@ msgstr "" msgid "Add Custom Template" msgstr "" -msgid "Jump to Layer" -msgstr "" - msgid "Filament " msgstr "" -msgid "Start" +msgid "Delete Pause" msgstr "" -msgid "G-code" +msgid "Delete Custom Template" +msgstr "" + +msgid "Edit Custom G-code" +msgstr "" + +msgid "Delete Custom G-code" +msgstr "" + +msgid "Delete Filament Change" msgstr "" msgid "No printer" @@ -1764,6 +1785,9 @@ msgstr "" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "" +msgid "You need to select the material type and color firet." +msgstr "" + msgid "Other color" msgstr "" @@ -2691,10 +2715,6 @@ msgstr "" msgid "Paint Toolbar" msgstr "" -#, possible-boost-format -msgid "Shortcut key %1%" -msgstr "" - msgid "Explosion Ratio" msgstr "" @@ -2716,6 +2736,12 @@ msgstr "" msgid "Size:" msgstr "" +#, possible-c-format, possible-boost-format +msgid "" +"Conflicts of gcode paths have been found. Please separate the conflicted " +"objects farther (%s <-> %s)." +msgstr "" + msgid "An object is layed over the boundary of plate." msgstr "" @@ -4099,6 +4125,9 @@ msgstr "" msgid "The current project has unsaved changes, save it before continue?" msgstr "" +msgid "Remember my choice." +msgstr "" + msgid "Number of copies:" msgstr "" @@ -4246,7 +4275,7 @@ msgstr "" msgid "If enabled, useful hints are displayed at startup." msgstr "" -msgid "User sync" +msgid "Presets" msgstr "" msgid "Auto sync user presets(Printer/Filament/Process)" @@ -4255,6 +4284,15 @@ msgstr "" msgid "User Sync" msgstr "" +msgid "Auto sync system presets(Printer/Filament/Process)" +msgstr "" + +msgid "System Sync" +msgstr "" + +msgid "Clear my choice on the unsaved presets." +msgstr "" + msgid "Associate files to BambuStudio" msgstr "" @@ -4276,13 +4314,32 @@ msgstr "" msgid "If enabled, sets BambuStudio as default application to open .step files" msgstr "" -msgid "Backup" +msgid "Online Models" +msgstr "" + +msgid "Show online staff-picked models on the home page" +msgstr "" + +msgid "Maximum recent projects" +msgstr "" + +msgid "Maximum count of recent projects" +msgstr "" + +msgid "Clear my choice on the unsaved projects." msgstr "" msgid "Auto-Backup" msgstr "" -msgid "Backup interval" +msgid "" +"Backup your project periodically for restoring from the occasional crash." +msgstr "" + +msgid "every" +msgstr "" + +msgid "The peroid of backup in seconds." msgstr "" msgid "Downloads" @@ -4303,6 +4360,9 @@ msgstr "" msgid "Sync settings" msgstr "" +msgid "User sync" +msgstr "" + msgid "Preset sync" msgstr "" @@ -4700,7 +4760,7 @@ msgid "" msgstr "" #, possible-c-format, possible-boost-format -msgid "The %s filament is too soft to be used with the AMS" +msgid "%s is not supported by AMS." msgstr "" msgid "" @@ -4806,8 +4866,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add Primitive" -"\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add " +"Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" msgid "Line width" @@ -4864,6 +4924,9 @@ msgstr "" msgid "G-code output" msgstr "" +msgid "Post-processing scripts" +msgstr "" + msgid "Frequent" msgstr "" @@ -5939,15 +6002,6 @@ msgstr "" msgid "Generating skirt & brim" msgstr "" -msgid "Checking gcode path conflicts." -msgstr "" - -#, possible-c-format, possible-boost-format -msgid "" -"Conflicts of gcode paths have been found. Please separate the conflicted " -"objects (%s <-> %s) farther." -msgstr "" - msgid "Exporting G-code" msgstr "" @@ -6700,6 +6754,12 @@ msgstr "" msgid "None" msgstr "" +msgid "Contour" +msgstr "" + +msgid "Contour and hole" +msgstr "" + msgid "All walls" msgstr "" @@ -7076,6 +7136,16 @@ msgstr "" msgid "Number of walls of every layer" msgstr "" +msgid "Post-processing Scripts" +msgstr "" + +msgid "" +"If you want to process the output G-code through custom scripts, just list " +"their absolute paths here. Separate multiple scripts with a semicolon. " +"Scripts will be passed the absolute path to the G-code file as the first " +"argument, and variables of settings also can be read" +msgstr "" + msgid "Raft contact Z distance" msgstr "" @@ -7800,6 +7870,12 @@ msgstr "" msgid "Do not run any validity checks, such as gcode path conflicts check." msgstr "" +msgid "Normative check" +msgstr "" + +msgid "Check the normative items." +msgstr "" + msgid "Output Model Info" msgstr "" @@ -7889,15 +7965,19 @@ msgstr "" msgid "Checking support necessity" msgstr "" -#, possible-c-format, possible-boost-format -msgid "" -"It seems object %s has completely floating regions. Please re-orient the " -"object or enable support generation." +msgid "floating regions" +msgstr "" + +msgid "floating cantilever" +msgstr "" + +msgid "large overhangs" msgstr "" #, possible-c-format, possible-boost-format msgid "" -"It seems object %s has large overhangs. Please enable support generation." +"It seems object %s has %s. Please re-orient the object or enable support " +"generation." msgstr "" msgid "Optimizing toolpath" @@ -7953,103 +8033,103 @@ msgstr "" #, possible-c-format, possible-boost-format msgid "Support: propagate branches at layer %d" msgstr "" - -#: resources/data/hints.ini: [hint:3D Scene Operations] -msgid "3D Scene Operations\nDid you know how to control view and object/part selection with mouse and touchpanel in the 3D scene?" -msgstr "" - -#: resources/data/hints.ini: [hint:Cut Tool] -msgid "Cut Tool\nDid you know that you can cut a model at any angle and position with the cutting tool?" -msgstr "" - -#: resources/data/hints.ini: [hint:Fix Model] -msgid "Fix Model\nDid you know that you can fix a corrupted 3D model to avoid a lot of slicing problems?" -msgstr "" - -#: resources/data/hints.ini: [hint:Timelapse] -msgid "Timelapse\nDid you know that you can generate a timelapse video during each print?" -msgstr "" - -#: resources/data/hints.ini: [hint:Auto-Arrange] -msgid "Auto-Arrange\nDid you know that you can auto-arrange all objects in your project?" -msgstr "" - -#: resources/data/hints.ini: [hint:Auto-Orient] -msgid "Auto-Orient\nDid you know that you can rotate objects to an optimal orientation for printing by a simple click?" -msgstr "" - -#: resources/data/hints.ini: [hint:Lay on Face] -msgid "Lay on Face\nDid you know that you can quickly orient a model so that one of its faces sits on the print bed? Select the \"Place on face\" function or press the F key." -msgstr "" - -#: resources/data/hints.ini: [hint:Object List] -msgid "Object List\nDid you know that you can view all objects/parts in a list and change settings for each object/part?" -msgstr "" - -#: resources/data/hints.ini: [hint:Simplify Model] -msgid "Simplify Model\nDid you know that you can reduce the number of triangles in a mesh using the Simplify mesh feature? Right-click the model and select Simplify model. Read more in the documentation." -msgstr "" - -#: resources/data/hints.ini: [hint:Slicing Parameter Table] -msgid "Slicing Parameter Table\nDid you know that you can view all objects/parts on a table and change settings for each object/part?" -msgstr "" - -#: resources/data/hints.ini: [hint:Split to Objects/Parts] -msgid "Split to Objects/Parts\nDid you know that you can split a big object into small ones for easy colorizing or printing?" -msgstr "" - -#: resources/data/hints.ini: [hint:Subtract a Part] -msgid "Subtract a Part\nDid you know that you can subtract one mesh from another using the Negative part modifier? That way you can, for example, create easily resizable holes directly in Bambu Studio. Read more in the documentation." -msgstr "" - -#: resources/data/hints.ini: [hint:STEP] -msgid "STEP\nDid you know that you can improve your print quality by slicing a STEP file instead of an STL?\nBambu Studio supports slicing STEP files, providing smoother results than a lower resolution STL. Give it a try!" -msgstr "" - -#: resources/data/hints.ini: [hint:Z seam location] -msgid "Z seam location\nDid you know that you can customize the location of the Z seam, and even paint it on your print, to have it in a less visible location? This improves the overall look of your model. Check it out!" -msgstr "" - -#: resources/data/hints.ini: [hint:Fine-tuning for flow rate] -msgid "Fine-tuning for flow rate\nDid you know that flow rate can be fine-tuned for even better-looking prints? Depending on the material, you can improve the overall finish of the printed model by doing some fine-tuning." -msgstr "" - -#: resources/data/hints.ini: [hint:Split your prints into plates] -msgid "Split your prints into plates\nDid you know that you can split a model that has a lot of parts into individual plates ready to print? This will simplify the process of keeping track of all the parts." -msgstr "" - -#: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer Height] -msgid "Speed up your print with Adaptive Layer Height\nDid you know that you can print a model even faster, by using the Adaptive Layer Height option? Check it out!" -msgstr "" - -#: resources/data/hints.ini: [hint:Support painting] -msgid "Support painting\nDid you know that you can paint the location of your supports? This feature makes it easy to place the support material only on the sections of the model that actually need it." -msgstr "" - -#: resources/data/hints.ini: [hint:Different types of supports] -msgid "Different types of supports\nDid you know that you can choose from multiple types of supports? Tree supports work great for organic models, while saving filament and improving print speed. Check them out!" -msgstr "" - -#: resources/data/hints.ini: [hint:Printing Silk Filament] -msgid "Printing Silk Filament\nDid you know that Silk filament needs special consideration to print it successfully? Higher temperature and lower speed are always recommended for the best results." -msgstr "" - -#: resources/data/hints.ini: [hint:Brim for better adhesion] -msgid "Brim for better adhesion\nDid you know that when printing models have a small contact interface with the printing surface, it's recommended to use a brim?" -msgstr "" - -#: resources/data/hints.ini: [hint:Set parameters for multiple objects] -msgid "Set parameters for multiple objects\nDid you know that you can set slicing parameters for all selected objects at one time?" -msgstr "" - -#: resources/data/hints.ini: [hint:Stack objects] -msgid "Stack objects\nDid you know that you can stack objects as a whole one?" -msgstr "" - -#: resources/data/hints.ini: [hint:Flush into support/objects/infill] -msgid "Flush into support/objects/infill\nDid you know that you can save the wasted filament by flushing them into support/objects/infill during filament change?" -msgstr "" - -#: resources/data/hints.ini: [hint:Improve strength] -msgid "Improve strength\nDid you know that you can use more wall loops and higher sparse infill density to improve the strength of the model?" -msgstr "" + +#: resources/data/hints.ini: [hint:3D Scene Operations] +msgid "3D Scene Operations\nDid you know how to control view and object/part selection with mouse and touchpanel in the 3D scene?" +msgstr "" + +#: resources/data/hints.ini: [hint:Cut Tool] +msgid "Cut Tool\nDid you know that you can cut a model at any angle and position with the cutting tool?" +msgstr "" + +#: resources/data/hints.ini: [hint:Fix Model] +msgid "Fix Model\nDid you know that you can fix a corrupted 3D model to avoid a lot of slicing problems?" +msgstr "" + +#: resources/data/hints.ini: [hint:Timelapse] +msgid "Timelapse\nDid you know that you can generate a timelapse video during each print?" +msgstr "" + +#: resources/data/hints.ini: [hint:Auto-Arrange] +msgid "Auto-Arrange\nDid you know that you can auto-arrange all objects in your project?" +msgstr "" + +#: resources/data/hints.ini: [hint:Auto-Orient] +msgid "Auto-Orient\nDid you know that you can rotate objects to an optimal orientation for printing by a simple click?" +msgstr "" + +#: resources/data/hints.ini: [hint:Lay on Face] +msgid "Lay on Face\nDid you know that you can quickly orient a model so that one of its faces sits on the print bed? Select the \"Place on face\" function or press the F key." +msgstr "" + +#: resources/data/hints.ini: [hint:Object List] +msgid "Object List\nDid you know that you can view all objects/parts in a list and change settings for each object/part?" +msgstr "" + +#: resources/data/hints.ini: [hint:Simplify Model] +msgid "Simplify Model\nDid you know that you can reduce the number of triangles in a mesh using the Simplify mesh feature? Right-click the model and select Simplify model. Read more in the documentation." +msgstr "" + +#: resources/data/hints.ini: [hint:Slicing Parameter Table] +msgid "Slicing Parameter Table\nDid you know that you can view all objects/parts on a table and change settings for each object/part?" +msgstr "" + +#: resources/data/hints.ini: [hint:Split to Objects/Parts] +msgid "Split to Objects/Parts\nDid you know that you can split a big object into small ones for easy colorizing or printing?" +msgstr "" + +#: resources/data/hints.ini: [hint:Subtract a Part] +msgid "Subtract a Part\nDid you know that you can subtract one mesh from another using the Negative part modifier? That way you can, for example, create easily resizable holes directly in Bambu Studio. Read more in the documentation." +msgstr "" + +#: resources/data/hints.ini: [hint:STEP] +msgid "STEP\nDid you know that you can improve your print quality by slicing a STEP file instead of an STL?\nBambu Studio supports slicing STEP files, providing smoother results than a lower resolution STL. Give it a try!" +msgstr "" + +#: resources/data/hints.ini: [hint:Z seam location] +msgid "Z seam location\nDid you know that you can customize the location of the Z seam, and even paint it on your print, to have it in a less visible location? This improves the overall look of your model. Check it out!" +msgstr "" + +#: resources/data/hints.ini: [hint:Fine-tuning for flow rate] +msgid "Fine-tuning for flow rate\nDid you know that flow rate can be fine-tuned for even better-looking prints? Depending on the material, you can improve the overall finish of the printed model by doing some fine-tuning." +msgstr "" + +#: resources/data/hints.ini: [hint:Split your prints into plates] +msgid "Split your prints into plates\nDid you know that you can split a model that has a lot of parts into individual plates ready to print? This will simplify the process of keeping track of all the parts." +msgstr "" + +#: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer Height] +msgid "Speed up your print with Adaptive Layer Height\nDid you know that you can print a model even faster, by using the Adaptive Layer Height option? Check it out!" +msgstr "" + +#: resources/data/hints.ini: [hint:Support painting] +msgid "Support painting\nDid you know that you can paint the location of your supports? This feature makes it easy to place the support material only on the sections of the model that actually need it." +msgstr "" + +#: resources/data/hints.ini: [hint:Different types of supports] +msgid "Different types of supports\nDid you know that you can choose from multiple types of supports? Tree supports work great for organic models, while saving filament and improving print speed. Check them out!" +msgstr "" + +#: resources/data/hints.ini: [hint:Printing Silk Filament] +msgid "Printing Silk Filament\nDid you know that Silk filament needs special consideration to print it successfully? Higher temperature and lower speed are always recommended for the best results." +msgstr "" + +#: resources/data/hints.ini: [hint:Brim for better adhesion] +msgid "Brim for better adhesion\nDid you know that when printing models have a small contact interface with the printing surface, it's recommended to use a brim?" +msgstr "" + +#: resources/data/hints.ini: [hint:Set parameters for multiple objects] +msgid "Set parameters for multiple objects\nDid you know that you can set slicing parameters for all selected objects at one time?" +msgstr "" + +#: resources/data/hints.ini: [hint:Stack objects] +msgid "Stack objects\nDid you know that you can stack objects as a whole one?" +msgstr "" + +#: resources/data/hints.ini: [hint:Flush into support/objects/infill] +msgid "Flush into support/objects/infill\nDid you know that you can save the wasted filament by flushing them into support/objects/infill during filament change?" +msgstr "" + +#: resources/data/hints.ini: [hint:Improve strength] +msgid "Improve strength\nDid you know that you can use more wall loops and higher sparse infill density to improve the strength of the model?" +msgstr "" diff --git a/bbl/i18n/de/BambuStudio_de.po b/bbl/i18n/de/BambuStudio_de.po index d434d0c138..72a560232b 100644 --- a/bbl/i18n/de/BambuStudio_de.po +++ b/bbl/i18n/de/BambuStudio_de.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-24 17:47+0800\n" +"POT-Creation-Date: 2023-03-29 14:51+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -292,7 +292,10 @@ msgstr "Bewegung" msgid "Height" msgstr "Höhe" -msgid "Add/Edit connectors" +msgid "Edit connectors" +msgstr "" + +msgid "Add connectors" msgstr "" msgid "Upper part" @@ -328,12 +331,21 @@ msgstr "Zurücksetzen" msgid "Connectors" msgstr "" -msgid "Remove connectors" -msgstr "" - msgid "Type" msgstr "Typ" +msgid "Style" +msgstr "Stil" + +msgid "Shape" +msgstr "Form" + +msgid "Depth ratio" +msgstr "" + +msgid "Remove connectors" +msgstr "" + msgid "Prizm" msgstr "" @@ -346,15 +358,6 @@ msgstr "" msgid "Hexagon" msgstr "" -msgid "Style" -msgstr "Stil" - -msgid "Shape" -msgstr "Form" - -msgid "Depth ratio" -msgstr "" - msgid "Confirm connectors" msgstr "" @@ -1349,6 +1352,15 @@ msgstr "Nächsten Tipp öffnen" msgid "Open Documentation in web browser." msgstr "Dokumentation im Webbrowser öffnen" +msgid "Pause:" +msgstr "" + +msgid "Custom Template:" +msgstr "" + +msgid "Custom G-code:" +msgstr "" + msgid "Custom G-code" msgstr "Benutzerdefinierter G-Code" @@ -1360,6 +1372,9 @@ msgstr "" msgid "OK" msgstr "OK" +msgid "Jump to Layer" +msgstr "Zur Schicht springen" + msgid "Jump to layer" msgstr "Zur Schicht springen" @@ -1375,17 +1390,23 @@ msgstr "Benutzerdefinierten G-Code hinzufügen" msgid "Add Custom Template" msgstr "Benutzerdefinierte Vorlage hinzufügen" -msgid "Jump to Layer" -msgstr "Zur Schicht springen" - msgid "Filament " msgstr "Filament" -msgid "Start" -msgstr "Starten" +msgid "Delete Pause" +msgstr "" -msgid "G-code" -msgstr "G-Code" +msgid "Delete Custom Template" +msgstr "" + +msgid "Edit Custom G-code" +msgstr "" + +msgid "Delete Custom G-code" +msgstr "" + +msgid "Delete Filament Change" +msgstr "" msgid "No printer" msgstr "Kein Drucker" @@ -1854,6 +1875,9 @@ msgstr "Bitte geben Sie einen gültigen Wert ein (K in 0~0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Bitte geben Sie einen gültigen Wert ein (K in 0~0.5, N in 0.6~2.0)" +msgid "You need to select the material type and color firet." +msgstr "" + msgid "Other color" msgstr "" @@ -2919,10 +2943,6 @@ msgstr "Zurück" msgid "Paint Toolbar" msgstr "Malwerkzeuge" -#, boost-format -msgid "Shortcut key %1%" -msgstr "" - msgid "Explosion Ratio" msgstr "Explosionsverhältnis" @@ -2944,6 +2964,12 @@ msgstr "Volumen:" msgid "Size:" msgstr "Größe:" +#, c-format, boost-format +msgid "" +"Conflicts of gcode paths have been found. Please separate the conflicted " +"objects farther (%s <-> %s)." +msgstr "" + msgid "An object is layed over the boundary of plate." msgstr "Ein Objekt ragt über die Begrenzung der Druckplatte." @@ -4420,6 +4446,9 @@ msgstr "" "Das aktuelle Projekt hat ungespeicherte Änderungen, speichern Sie es, bevor " "Sie fortfahren?" +msgid "Remember my choice." +msgstr "" + msgid "Number of copies:" msgstr "Anzahl der Kopien:" @@ -4580,8 +4609,8 @@ msgstr "" "Wenn diese Option aktiviert ist, werden beim Starten nützliche Hinweise " "angezeigt." -msgid "User sync" -msgstr "Benutzer-Synchronisation" +msgid "Presets" +msgstr "" msgid "Auto sync user presets(Printer/Filament/Process)" msgstr "" @@ -4591,6 +4620,15 @@ msgstr "" msgid "User Sync" msgstr "Benutzer-Synchronisation" +msgid "Auto sync system presets(Printer/Filament/Process)" +msgstr "" + +msgid "System Sync" +msgstr "" + +msgid "Clear my choice on the unsaved presets." +msgstr "" + msgid "Associate files to BambuStudio" msgstr "Dateien mit BambuStudio verknüpfen" @@ -4618,14 +4656,33 @@ msgstr "" "Wenn aktiviert, wird BambuStudio als Standardanwendung zum Öffnen von .step-" "Dateien festgelegt" -msgid "Backup" -msgstr "Sicherung" +msgid "Online Models" +msgstr "" + +msgid "Show online staff-picked models on the home page" +msgstr "" + +msgid "Maximum recent projects" +msgstr "" + +msgid "Maximum count of recent projects" +msgstr "" + +msgid "Clear my choice on the unsaved projects." +msgstr "" msgid "Auto-Backup" msgstr "Automatische Datensicherung" -msgid "Backup interval" -msgstr "Sicherungsintervall" +msgid "" +"Backup your project periodically for restoring from the occasional crash." +msgstr "" + +msgid "every" +msgstr "" + +msgid "The peroid of backup in seconds." +msgstr "" msgid "Downloads" msgstr "Downloads" @@ -4645,6 +4702,9 @@ msgstr "Startseite beim Starten anzeigen" msgid "Sync settings" msgstr "Synchronisationseinstellungen" +msgid "User sync" +msgstr "Benutzer-Synchronisation" + msgid "Preset sync" msgstr "Voreinstellungs Synchronisation" @@ -5081,8 +5141,8 @@ msgstr "" "Auswahl des richtigen Druckertyps erneut zu Slicen." #, c-format, boost-format -msgid "The %s filament is too soft to be used with the AMS" -msgstr "Das %s Filament ist zu weich für die Verwendung mit dem AMS" +msgid "%s is not supported by AMS." +msgstr "" msgid "" "There are some unknown filaments in the AMS mappings. Please check whether " @@ -5214,8 +5274,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add Primitive" -"\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add " +"Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" "Wenn Sie einen Zeitraffer ohne Werkzeugkopf aufnehmen, wird empfohlen, einen " "\"Timelapse Wipe Tower\" (Zeitraffer-Wischturm) hinzuzufügen, indem Sie mit " @@ -5280,6 +5340,9 @@ msgstr "Spezialmodus" msgid "G-code output" msgstr "G-Code-Ausgabe" +msgid "Post-processing scripts" +msgstr "" + msgid "Frequent" msgstr "Häufig" @@ -6478,15 +6541,6 @@ msgstr "Druckplatte %d: %s unterstützt kein Filament %s" msgid "Generating skirt & brim" msgstr "Erzeugen von Schürze und Rand (skirt & brim)" -msgid "Checking gcode path conflicts." -msgstr "" - -#, c-format, boost-format -msgid "" -"Conflicts of gcode paths have been found. Please separate the conflicted " -"objects (%s <-> %s) farther." -msgstr "" - msgid "Exporting G-code" msgstr "Exportiere G-Code" @@ -7406,6 +7460,12 @@ msgstr "" msgid "None" msgstr "Keine" +msgid "Contour" +msgstr "" + +msgid "Contour and hole" +msgstr "" + msgid "All walls" msgstr "Alle Wände" @@ -7842,6 +7902,16 @@ msgstr "Druckgeschwindigkeit der Innenwand" msgid "Number of walls of every layer" msgstr "Anzahl der Wände jeder Schicht" +msgid "Post-processing Scripts" +msgstr "" + +msgid "" +"If you want to process the output G-code through custom scripts, just list " +"their absolute paths here. Separate multiple scripts with a semicolon. " +"Scripts will be passed the absolute path to the G-code file as the first " +"argument, and variables of settings also can be read" +msgstr "" + msgid "Raft contact Z distance" msgstr "Floß Kontakt Z Abstand" @@ -8736,6 +8806,12 @@ msgstr "" msgid "Do not run any validity checks, such as gcode path conflicts check." msgstr "" +msgid "Normative check" +msgstr "" + +msgid "Check the normative items." +msgstr "" + msgid "Output Model Info" msgstr "Ausgabe Modellinformationen" @@ -8827,20 +8903,20 @@ msgstr "Support generieren" msgid "Checking support necessity" msgstr "Überprüfung der Notwendigkeit der Supports" -#, c-format, boost-format -msgid "" -"It seems object %s has completely floating regions. Please re-orient the " -"object or enable support generation." +msgid "floating regions" +msgstr "" + +msgid "floating cantilever" +msgstr "" + +msgid "large overhangs" msgstr "" -"Es scheint, dass das Objekt %s vollständig schwebende Bereiche hat. Bitte " -"richten Sie das Objekt neu aus oder aktivieren Sie die Supportgenerierung." #, c-format, boost-format msgid "" -"It seems object %s has large overhangs. Please enable support generation." +"It seems object %s has %s. Please re-orient the object or enable support " +"generation." msgstr "" -"Es scheint, dass Objekt %s große Überhänge hat. Bitte aktivieren Sie die " -"Support-Generierung." msgid "Optimizing toolpath" msgstr "Optimieren des Werkzeugwegs" @@ -9171,6 +9247,37 @@ msgstr "" "Wussten Sie, dass Sie die Festigkeit des Modells durch mehr Wandschleifen " "und eine höhere Dichte der Füllung verbessern können?" +#~ msgid "Start" +#~ msgstr "Starten" + +#~ msgid "G-code" +#~ msgstr "G-Code" + +#~ msgid "Backup" +#~ msgstr "Sicherung" + +#~ msgid "Backup interval" +#~ msgstr "Sicherungsintervall" + +#, c-format, boost-format +#~ msgid "The %s filament is too soft to be used with the AMS" +#~ msgstr "Das %s Filament ist zu weich für die Verwendung mit dem AMS" + +#, c-format, boost-format +#~ msgid "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." +#~ msgstr "" +#~ "Es scheint, dass das Objekt %s vollständig schwebende Bereiche hat. Bitte " +#~ "richten Sie das Objekt neu aus oder aktivieren Sie die Supportgenerierung." + +#, c-format, boost-format +#~ msgid "" +#~ "It seems object %s has large overhangs. Please enable support generation." +#~ msgstr "" +#~ "Es scheint, dass Objekt %s große Überhänge hat. Bitte aktivieren Sie die " +#~ "Support-Generierung." + #~ msgid "\\u2103" #~ msgstr "\\ u2103" @@ -10112,8 +10219,8 @@ msgstr "" #~ "Wenn Sie einen Zeitraffer ohne Werkzeugkopf aufnehmen, wird empfohlen, " #~ "einen \"Timelapse Wipe Tower\" (Zeitraffer-Wischturm) hinzuzufügen\n" #~ "hinzuzufügen, indem Sie mit der rechten Maustaste auf die leere Position " -#~ "der Bauplatte klicken und \"Primitiv hinzufügen\"->\"Timelapse Wipe Tower" -#~ "\" wählen.\n" +#~ "der Bauplatte klicken und \"Primitiv hinzufügen\"->\"Timelapse Wipe " +#~ "Tower\" wählen.\n" #~ msgid "" #~ "When sparse infill density is low, the internal solid infill or internal " diff --git a/bbl/i18n/en/BambuStudio_en.po b/bbl/i18n/en/BambuStudio_en.po index 9de7114345..0fe9d7dd4c 100644 --- a/bbl/i18n/en/BambuStudio_en.po +++ b/bbl/i18n/en/BambuStudio_en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-24 17:47+0800\n" +"POT-Creation-Date: 2023-03-29 14:51+0800\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -287,7 +287,10 @@ msgstr "Movement" msgid "Height" msgstr "Height" -msgid "Add/Edit connectors" +msgid "Edit connectors" +msgstr "" + +msgid "Add connectors" msgstr "" msgid "Upper part" @@ -323,12 +326,21 @@ msgstr "Reset" msgid "Connectors" msgstr "" -msgid "Remove connectors" -msgstr "" - msgid "Type" msgstr "Type" +msgid "Style" +msgstr "Style" + +msgid "Shape" +msgstr "Shape" + +msgid "Depth ratio" +msgstr "" + +msgid "Remove connectors" +msgstr "" + msgid "Prizm" msgstr "" @@ -341,15 +353,6 @@ msgstr "" msgid "Hexagon" msgstr "" -msgid "Style" -msgstr "Style" - -msgid "Shape" -msgstr "Shape" - -msgid "Depth ratio" -msgstr "" - msgid "Confirm connectors" msgstr "" @@ -1318,6 +1321,15 @@ msgstr "Open next tip" msgid "Open Documentation in web browser." msgstr "Open documentation in web browser" +msgid "Pause:" +msgstr "" + +msgid "Custom Template:" +msgstr "" + +msgid "Custom G-code:" +msgstr "" + msgid "Custom G-code" msgstr "Custom G-code" @@ -1327,6 +1339,9 @@ msgstr "Enter Custom G-code used on current layer:" msgid "OK" msgstr "OK" +msgid "Jump to Layer" +msgstr "Jump to layer" + msgid "Jump to layer" msgstr "Jump to layer" @@ -1342,17 +1357,23 @@ msgstr "Add Custom G-code" msgid "Add Custom Template" msgstr "Add Custom Template" -msgid "Jump to Layer" -msgstr "Jump to layer" - msgid "Filament " msgstr "Filament " -msgid "Start" -msgstr "Start" +msgid "Delete Pause" +msgstr "" -msgid "G-code" -msgstr "G-code" +msgid "Delete Custom Template" +msgstr "" + +msgid "Edit Custom G-code" +msgstr "" + +msgid "Delete Custom G-code" +msgstr "" + +msgid "Delete Filament Change" +msgstr "" msgid "No printer" msgstr "No printer" @@ -1811,6 +1832,9 @@ msgstr "Please input a valid value (K in 0~0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" +msgid "You need to select the material type and color firet." +msgstr "" + msgid "Other color" msgstr "" @@ -2849,10 +2873,6 @@ msgstr "return" msgid "Paint Toolbar" msgstr "Paint Toolbar" -#, boost-format -msgid "Shortcut key %1%" -msgstr "" - msgid "Explosion Ratio" msgstr "Explosion Ratio" @@ -2874,6 +2894,12 @@ msgstr "Volume:" msgid "Size:" msgstr "Size:" +#, c-format, boost-format +msgid "" +"Conflicts of gcode paths have been found. Please separate the conflicted " +"objects farther (%s <-> %s)." +msgstr "" + msgid "An object is layed over the boundary of plate." msgstr "An object is laid over the boundary of the plate." @@ -4324,6 +4350,9 @@ msgstr "" "The current project has unsaved changes. Would you like to save before " "continuing?" +msgid "Remember my choice." +msgstr "" + msgid "Number of copies:" msgstr "Number of copies:" @@ -4477,8 +4506,8 @@ msgstr "Show \"Tip of the day\" notification after start" msgid "If enabled, useful hints are displayed at startup." msgstr "If enabled, useful hints are displayed at startup." -msgid "User sync" -msgstr "User sync" +msgid "Presets" +msgstr "" msgid "Auto sync user presets(Printer/Filament/Process)" msgstr "Auto sync user presets (Printer/Filament/Process)" @@ -4486,6 +4515,15 @@ msgstr "Auto sync user presets (Printer/Filament/Process)" msgid "User Sync" msgstr "User Sync" +msgid "Auto sync system presets(Printer/Filament/Process)" +msgstr "" + +msgid "System Sync" +msgstr "" + +msgid "Clear my choice on the unsaved presets." +msgstr "" + msgid "Associate files to BambuStudio" msgstr "Associate files to Bambu Studio" @@ -4513,14 +4551,33 @@ msgstr "" "If enabled, this sets Bambu Studio as the default application to open .step " "files." -msgid "Backup" -msgstr "Backup" +msgid "Online Models" +msgstr "" + +msgid "Show online staff-picked models on the home page" +msgstr "" + +msgid "Maximum recent projects" +msgstr "" + +msgid "Maximum count of recent projects" +msgstr "" + +msgid "Clear my choice on the unsaved projects." +msgstr "" msgid "Auto-Backup" msgstr "Auto-Backup" -msgid "Backup interval" -msgstr "Backup interval" +msgid "" +"Backup your project periodically for restoring from the occasional crash." +msgstr "" + +msgid "every" +msgstr "" + +msgid "The peroid of backup in seconds." +msgstr "" msgid "Downloads" msgstr "Downloads" @@ -4540,6 +4597,9 @@ msgstr "Show home page on startup" msgid "Sync settings" msgstr "Sync settings" +msgid "User sync" +msgstr "User sync" + msgid "Preset sync" msgstr "Preset sync" @@ -4958,8 +5018,8 @@ msgstr "" "selecting the correct printer type." #, c-format, boost-format -msgid "The %s filament is too soft to be used with the AMS" -msgstr "The %s filament is too soft to be used with the AMS" +msgid "%s is not supported by AMS." +msgstr "" msgid "" "There are some unknown filaments in the AMS mappings. Please check whether " @@ -5081,13 +5141,13 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add Primitive" -"\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add " +"Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" "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\"." msgid "Line width" msgstr "Line width" @@ -5146,6 +5206,9 @@ msgstr "Special mode" msgid "G-code output" msgstr "G-code output" +msgid "Post-processing scripts" +msgstr "" + msgid "Frequent" msgstr "Frequent" @@ -6305,15 +6368,6 @@ msgstr "Plate %d: %s does not support filament %s" msgid "Generating skirt & brim" msgstr "Generating skirt & brim" -msgid "Checking gcode path conflicts." -msgstr "" - -#, c-format, boost-format -msgid "" -"Conflicts of gcode paths have been found. Please separate the conflicted " -"objects (%s <-> %s) farther." -msgstr "" - msgid "Exporting G-code" msgstr "Exporting G-code" @@ -7211,6 +7265,12 @@ msgstr "" msgid "None" msgstr "None" +msgid "Contour" +msgstr "" + +msgid "Contour and hole" +msgstr "" + msgid "All walls" msgstr "All walls" @@ -7633,6 +7693,16 @@ msgstr "This is the speed for inner walls." msgid "Number of walls of every layer" msgstr "This is the number of walls per layer." +msgid "Post-processing Scripts" +msgstr "" + +msgid "" +"If you want to process the output G-code through custom scripts, just list " +"their absolute paths here. Separate multiple scripts with a semicolon. " +"Scripts will be passed the absolute path to the G-code file as the first " +"argument, and variables of settings also can be read" +msgstr "" + msgid "Raft contact Z distance" msgstr "Raft contact Z distance" @@ -8502,6 +8572,12 @@ msgstr "" msgid "Do not run any validity checks, such as gcode path conflicts check." msgstr "" +msgid "Normative check" +msgstr "" + +msgid "Check the normative items." +msgstr "" + msgid "Output Model Info" msgstr "Output Model Info" @@ -8593,19 +8669,20 @@ msgstr "Generating support" msgid "Checking support necessity" msgstr "Checking support necessity" -#, c-format, boost-format -msgid "" -"It seems object %s has completely floating regions. Please re-orient the " -"object or enable support generation." +msgid "floating regions" +msgstr "" + +msgid "floating cantilever" +msgstr "" + +msgid "large overhangs" msgstr "" -"It seems object %s has completely floating regions. Please re-orient the " -"object or enable support generation." #, c-format, boost-format msgid "" -"It seems object %s has large overhangs. Please enable support generation." +"It seems object %s has %s. Please re-orient the object or enable support " +"generation." msgstr "" -"It seems object %s has large overhangs. Please enable support generation." msgid "Optimizing toolpath" msgstr "Optimizing toolpath" @@ -8928,6 +9005,36 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" +#~ msgid "Start" +#~ msgstr "Start" + +#~ msgid "G-code" +#~ msgstr "G-code" + +#~ msgid "Backup" +#~ msgstr "Backup" + +#~ msgid "Backup interval" +#~ msgstr "Backup interval" + +#, c-format, boost-format +#~ msgid "The %s filament is too soft to be used with the AMS" +#~ msgstr "The %s filament is too soft to be used with the AMS" + +#, c-format, boost-format +#~ msgid "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." +#~ msgstr "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." + +#, c-format, boost-format +#~ msgid "" +#~ "It seems object %s has large overhangs. Please enable support generation." +#~ msgstr "" +#~ "It seems object %s has large overhangs. Please enable support generation." + #~ msgid "\\u2103" #~ msgstr "\\u2103" diff --git a/bbl/i18n/es/BambuStudio_es.po b/bbl/i18n/es/BambuStudio_es.po index 9aad979693..b83cf29b98 100644 --- a/bbl/i18n/es/BambuStudio_es.po +++ b/bbl/i18n/es/BambuStudio_es.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-24 17:47+0800\n" +"POT-Creation-Date: 2023-03-29 14:51+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -292,7 +292,10 @@ msgstr "Movimiento" msgid "Height" msgstr "Altura" -msgid "Add/Edit connectors" +msgid "Edit connectors" +msgstr "" + +msgid "Add connectors" msgstr "" msgid "Upper part" @@ -328,12 +331,21 @@ msgstr "Reiniciar" msgid "Connectors" msgstr "" -msgid "Remove connectors" -msgstr "" - msgid "Type" msgstr "Tipo" +msgid "Style" +msgstr "Estilo" + +msgid "Shape" +msgstr "Forma" + +msgid "Depth ratio" +msgstr "" + +msgid "Remove connectors" +msgstr "" + msgid "Prizm" msgstr "" @@ -346,15 +358,6 @@ msgstr "" msgid "Hexagon" msgstr "" -msgid "Style" -msgstr "Estilo" - -msgid "Shape" -msgstr "Forma" - -msgid "Depth ratio" -msgstr "" - msgid "Confirm connectors" msgstr "" @@ -712,12 +715,6 @@ msgstr "*" msgid "The uploads are still ongoing" msgstr "El envío aún están en curso" -msgid "Stop them and continue anyway?" -msgstr "¿Detenerlos y continuar de todos modos?" - -msgid "Ongoing uploads" -msgstr "El envío todavía esta en curso" - msgid "Stop them and continue anyway?" msgstr "¿Detenerlas y continuar de todos modos?" @@ -872,15 +869,6 @@ msgstr "Exportar como STL" msgid "Reload from disk" msgstr "Recargar desde el disco" -msgid "Reload the selected parts from disk" -msgstr "Recargar las piezas seleccionadas desde el disco" - -msgid "Replace with STL" -msgstr "Sustituir por STL" - -msgid "Replace the selected part with new STL" -msgstr "Sustituir la pieza seleccionada por un STL nuevo" - msgid "Reload the selected parts from disk" msgstr "Recargar las partes seleccionadas desde disco" @@ -925,7 +913,7 @@ msgid "Flush into objects' support" msgstr "Depositar en el soporte de los objetos" msgid "Edit in Parameter Table" -msgstr "Editar en la tabla de parámetros" +msgstr "Editar en tabla de parámetros" msgid "Convert from inch" msgstr "Convertir desde pulgadas" @@ -1006,7 +994,8 @@ msgid "Auto orientation" msgstr "Orientación automática" msgid "Auto orient the object to improve print quality." -msgstr "Orienta automáticamente el objeto para mejorar la calidad de la impresión." +msgstr "" +"Orienta automáticamente el objeto para mejorar la calidad de la impresión." msgid "Split the selected object into mutiple objects" msgstr "Dividir el objeto seleccionado en múltiples objetos" @@ -1053,9 +1042,6 @@ msgstr "Centrar" msgid "Edit Process Settings" msgstr "Editar configuración del proceso" -msgid "Edit in Parameter Table" -msgstr "Editar en tabla de parámetros" - msgid "Edit print parameters for a single object" msgstr "Editar los parámetros de impresión de un solo objeto" @@ -1355,18 +1341,21 @@ msgstr "Más" msgid "Open Preferences." msgstr "Abrir preferencias" -msgid "Open next tip." -msgstr "Abrir el siguiente consejo" - -msgid "Open Documentation in web browser." -msgstr "Abrir documentación en el navegador web" - msgid "Open next tip." msgstr "Abrir siguiente sugerencia." msgid "Open Documentation in web browser." msgstr "Abrir documentación en el navegador" +msgid "Pause:" +msgstr "" + +msgid "Custom Template:" +msgstr "" + +msgid "Custom G-code:" +msgstr "" + msgid "Custom G-code" msgstr "Código G personalizado" @@ -1376,15 +1365,15 @@ msgstr "Introduzca el código G personalizado en la capa actual:" msgid "OK" msgstr "OK" +msgid "Jump to Layer" +msgstr "Saltar a la capa" + msgid "Jump to layer" msgstr "Saltar a la capa" msgid "Please enter the layer number" msgstr "Por favor, introduzca el número de capa" -msgid "Jump to Layer" -msgstr "Saltar a la capa" - msgid "Add Pause" msgstr "Añadir pausa" @@ -1394,20 +1383,23 @@ msgstr "Agregar código G personalizado" msgid "Add Custom Template" msgstr "Añadir plantilla personalizada" -msgid "Jump to Layer" -msgstr "Saltar a la capa" - msgid "Filament " msgstr "Filamento" -msgid "Add Custom Template" -msgstr "Añadir plantilla personalizada" +msgid "Delete Pause" +msgstr "" -msgid "Start" -msgstr "Iniciar" +msgid "Delete Custom Template" +msgstr "" -msgid "G-code" -msgstr "G-code" +msgid "Edit Custom G-code" +msgstr "" + +msgid "Delete Custom G-code" +msgstr "" + +msgid "Delete Filament Change" +msgstr "" msgid "No printer" msgstr "Sin impresión" @@ -1415,21 +1407,6 @@ msgstr "Sin impresión" msgid "..." msgstr "..." -msgid "Heat the nozzle" -msgstr "Calentar la boquilla" - -msgid "Cut filament" -msgstr "Cortar filamento" - -msgid "Pull back current filament" -msgstr "Extraer el filamento actual" - -msgid "Push new filament into extruder" -msgstr "Empuje el nuevo filamento en el extrusor" - -msgid "Purge old filament" -msgstr "Purgar el filamento antiguo" - msgid "?" msgstr "?" @@ -1665,31 +1642,12 @@ msgstr "Enviando la configuración de impresión" #, c-format, boost-format msgid "Successfully sent. Will automatically jump to the device page in %ss" -msgstr "Enviado correctamente. Se mostrará automáticamente en el dispositivo en %ss" - -msgid "An SD card needs to be inserted before printing via LAN." -msgstr "Se debe insertar una tarjeta microSD antes de imprimir mediante LAN." - -msgid "Failed to send the print job. Please try again." -msgstr "No se pudo enviar la impresión. Vuelve a intentarlo." - -msgid "Send to Printer failed. Please try again." -msgstr "No se pudo enviar a la impresora. Vuelve a intentarlo." - -msgid "No space left on Printer SD card" msgstr "" - -msgid "Sending gcode file over LAN" -msgstr "Envío de un archivo G-code a través de LAN" - -msgid "Sending gcode file through cloud service" -msgstr "Envío de archivos G-code a través del servicio en la nube" - -msgid "Sending gcode file to sdcard" -msgstr "Envío de un archivo G-code a la tarjeta microSD" +"Enviado correctamente. Se mostrará automáticamente en el dispositivo en %ss" msgid "An SD card needs to be inserted before printing via LAN." -msgstr "Es necesario insertar una tarjeta SD antes de imprimir a través de red local." +msgstr "" +"Es necesario insertar una tarjeta SD antes de imprimir a través de red local." msgid "Failed to send the print job. Please try again." msgstr "No se pudo enviar el trabajo de impresión. Inténtalo de nuevo." @@ -1697,6 +1655,9 @@ msgstr "No se pudo enviar el trabajo de impresión. Inténtalo de nuevo." msgid "Send to Printer failed. Please try again." msgstr "El envio a la impresora falló. Inténtelo de nuevo." +msgid "No space left on Printer SD card" +msgstr "" + msgid "Sending gcode file over LAN" msgstr "Enviando archivo g-code a través de red local" @@ -1714,7 +1675,7 @@ msgid "An SD card needs to be inserted before sending to printer." msgstr "Debe insertar una tarjeta microSD antes de enviar a la impresora." msgid "Please log out and login to the printer again." -msgstr "Cierre sesión y vuelva a iniciarla en la impresora." +msgstr "Cierre la sesión y vuelva a iniciar sesión en la impresora." msgid "Failed uploading print file. Please enter ip address again." msgstr "" @@ -1772,9 +1733,6 @@ msgstr "" msgid "Attention!" msgstr "¡Atención!" -msgid "Please log out and login to the printer again." -msgstr "Cierre la sesión y vuelva a iniciar sesión en la impresora." - msgid "Downloading" msgstr "Descargando" @@ -1787,12 +1745,6 @@ msgstr "Cancelado" msgid "Install successfully." msgstr "Instalación correcta" -msgid "Installing" -msgstr "Instalando…" - -msgid "Install failed" -msgstr "Error de instalación" - msgid "Installing" msgstr "Instalando" @@ -1920,6 +1872,9 @@ msgstr "Introduzca un valor válido (K en 0~0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Introduzca un valor válido (K en 0~0.5, N en 0.6~2.0)" +msgid "You need to select the material type and color firet." +msgstr "" + msgid "Other color" msgstr "" @@ -2014,13 +1969,13 @@ msgid "Enable AMS" msgstr "Habilitar AMS" msgid "Print with filaments in the AMS" -msgstr "Imprima con filamento en el AMS" +msgstr "Imprimir con filamentos en el AMS" msgid "Disable AMS" -msgstr "Deshabilitar AMS" +msgstr "Desactivar AMS" msgid "Print with the filament mounted on the back of chassis" -msgstr "Impresión con filamento en una bobina externa" +msgstr "Imprimir con el filamento montado en la parte posterior del chasis" msgid "Cabin humidity" msgstr "Humedad de cabina" @@ -2054,15 +2009,6 @@ msgstr "" "también ralentizan el proceso. Durante este tiempo, es posible que el " "indicador no represente la humedad de la cámara con precisión." -msgid "Print with filaments in the AMS" -msgstr "Imprimir con filamentos en el AMS" - -msgid "Disable AMS" -msgstr "Desactivar AMS" - -msgid "Print with the filament mounted on the back of chassis" -msgstr "Imprimir con el filamento montado en la parte posterior del chasis" - msgid "" "Config which AMS slot should be used for a filament used in the print job" msgstr "Configure qué ranura AMS debe utilizarse para la impresión." @@ -2704,7 +2650,7 @@ msgid "Height: " msgstr "Altura: " msgid "Width: " -msgstr "Ancho: " +msgstr "Anchura: " msgid "Speed: " msgstr "Velocidad: " @@ -2715,18 +2661,6 @@ msgstr "Flujo: " msgid "Layer Time: " msgstr "Tiempo de capa: " -msgid "Fan Speed: " -msgstr "Velocidad del ventilador:" - -msgid "Width: " -msgstr "Anchura: " - -msgid "Speed: " -msgstr "Velocidad: " - -msgid "Flow: " -msgstr "Flujo: " - msgid "Fan Speed: " msgstr "Velocidad del ventilador: " @@ -2868,9 +2802,6 @@ msgstr "Planificar tiempo" msgid "Model printing time" msgstr "Tiempo de impresión del modelo" -msgid "Total time" -msgstr "Tiempo total" - msgid "Switch to silent mode" msgstr "Cambiar al modo silencioso" @@ -3003,10 +2934,6 @@ msgstr "volver" msgid "Paint Toolbar" msgstr "Barra de herramientas de pintura" -#, boost-format -msgid "Shortcut key %1%" -msgstr "" - msgid "Explosion Ratio" msgstr "Ratio de Explosión" @@ -3028,6 +2955,12 @@ msgstr "Volumen:" msgid "Size:" msgstr "Tamaño:" +#, c-format, boost-format +msgid "" +"Conflicts of gcode paths have been found. Please separate the conflicted " +"objects farther (%s <-> %s)." +msgstr "" + msgid "An object is layed over the boundary of plate." msgstr "Un objeto está sobre el límite de la placa." @@ -3160,7 +3093,7 @@ msgid "Slice plate" msgstr "Laminar placa" msgid "Print plate" -msgstr "Placa de impresión" +msgstr "Imprimir placa" msgid "Slice all" msgstr "Laminar todo" @@ -3171,9 +3104,6 @@ msgstr "Exportar archivo G-code" msgid "Send" msgstr "Enviar" -msgid "Print plate" -msgstr "Imprimir placa" - msgid "Export plate sliced file" msgstr "Exportar la placa de impresión actual" @@ -3602,15 +3532,6 @@ msgstr "Mes" msgid "All Files" msgstr "Todos los archivos" -msgid "Group files by year, recent first." -msgstr "Agrupe los archivos por año, primero los recientes." - -msgid "Group files by month, recent first." -msgstr "Agrupe los archivos por mes, primero los recientes." - -msgid "Show all files, recent first." -msgstr "Mostrar todos los archivos, primero los recientes." - msgid "Group files by year, recent first." msgstr "Agrupar ficheros por año, primero los más recientes" @@ -4155,9 +4076,6 @@ msgstr "Añadir un filamento" msgid "Remove last filament" msgstr "Retirar el último filamento" -msgid "Synchronize filament list from AMS" -msgstr "Sincronizar la lista de filamentos de AMS" - msgid "Synchronize filament list from AMS" msgstr "Sincronizar filamentos desde AMS" @@ -4254,17 +4172,6 @@ msgstr "Cargando archivo: %s" msgid "The 3mf is not from Bambu Lab, load geometry data only." msgstr "El 3mf no es Bambu lab, solo se carga datos de geometría." -msgid "Load 3mf" -msgstr "cargar 3mf" - -msgid "The Config can not be loaded." -msgstr "No se puede cargar la configuración" - -msgid "The 3mf is generated by old Bambu Studio, load geometry data only." -msgstr "" -"El 3mf fue generado por una versión antigua de Bambu Studio, solo se " -"cargaran datos de geometría." - msgid "Load 3mf" msgstr "Cargar 3mf" @@ -4272,7 +4179,9 @@ msgid "The Config can not be loaded." msgstr "La configuración no puede ser cargada." msgid "The 3mf is generated by old Bambu Studio, load geometry data only." -msgstr "3mf generado con versión antigua de Bambu Studio, se cargan datos de geometría unicamente" +msgstr "" +"3mf generado con versión antigua de Bambu Studio, se cargan datos de " +"geometría unicamente" #, c-format, boost-format msgid "" @@ -4476,13 +4385,6 @@ msgstr "descargando proyecto..." msgid "Project downloaded %d%%" msgstr "Proyecto descargado %d%%" -msgid "downloading project ..." -msgstr "descargado proyecto..." - -#, c-format, boost-format -msgid "Project downloaded %d%%" -msgstr "Proyecto %d%% descargado" - msgid "The selected file" msgstr "El archivo seleccionado" @@ -4526,6 +4428,9 @@ msgid "The current project has unsaved changes, save it before continue?" msgstr "" "El proyecto actual tiene cambios sin guardar, ¿guardarlos antes de continuar?" +msgid "Remember my choice." +msgstr "" + msgid "Number of copies:" msgstr "Número de copias:" @@ -4685,8 +4590,8 @@ msgstr "Mostrar la «Sugerencia del día» después del inicio" msgid "If enabled, useful hints are displayed at startup." msgstr "Si está activado, se muestran sugerencias útiles al inicio." -msgid "User sync" -msgstr "Sincronización del usuario" +msgid "Presets" +msgstr "" msgid "Auto sync user presets(Printer/Filament/Process)" msgstr "" @@ -4696,6 +4601,15 @@ msgstr "" msgid "User Sync" msgstr "Sincronización de usuario" +msgid "Auto sync system presets(Printer/Filament/Process)" +msgstr "" + +msgid "System Sync" +msgstr "" + +msgid "Clear my choice on the unsaved presets." +msgstr "" + msgid "Associate files to BambuStudio" msgstr "Asociar archivos a BambuStudio" @@ -4723,14 +4637,33 @@ msgstr "" "Si se activa, ajusta BambuStudio como aplicación por defecto para abrir " "archivos .step" -msgid "Backup" -msgstr "Copia de seguridad" +msgid "Online Models" +msgstr "" + +msgid "Show online staff-picked models on the home page" +msgstr "" + +msgid "Maximum recent projects" +msgstr "" + +msgid "Maximum count of recent projects" +msgstr "" + +msgid "Clear my choice on the unsaved projects." +msgstr "" msgid "Auto-Backup" msgstr "Copia de seguridad automática" -msgid "Backup interval" -msgstr "Intervalo de copia de seguridad" +msgid "" +"Backup your project periodically for restoring from the occasional crash." +msgstr "" + +msgid "every" +msgstr "" + +msgid "The peroid of backup in seconds." +msgstr "" msgid "Downloads" msgstr "Descargas" @@ -4750,6 +4683,9 @@ msgstr "Mostrar la página de inicio en el arranque" msgid "Sync settings" msgstr "Ajustes de sincronización" +msgid "User sync" +msgstr "Sincronización del usuario" + msgid "Preset sync" msgstr "Sincronización preestablecida" @@ -4856,10 +4792,10 @@ msgid "Project-inside presets" msgstr "Preajustes internos del proyecto" msgid "Add/Remove filaments" -msgstr "Añadir/quitar filamentos" +msgstr "" msgid "Add/Remove materials" -msgstr "Añadir/eliminar materiales" +msgstr "Añadir/quitar materiales" msgid "Add/Remove printers" msgstr "Añadir/quitar impresoras" @@ -4897,12 +4833,6 @@ msgstr "" msgid "Log Out" msgstr "" -msgid "Add/Remove materials" -msgstr "Añadir/quitar materiales" - -msgid "Add/Remove printers" -msgstr "Añadir/quitar impresoras" - msgid "Slice all plate to obtain time and filament estimation" msgstr "" "Rebana todas las piezas para obtener una estimación del tiempo y del " @@ -5184,8 +5114,8 @@ msgstr "" "a generar el g-code después de seleccionar el tipo de impresora correcto." #, c-format, boost-format -msgid "The %s filament is too soft to be used with the AMS" -msgstr "El filamento %s es demasiado blando para usarlo con el AMS" +msgid "%s is not supported by AMS." +msgstr "" msgid "" "There are some unknown filaments in the AMS mappings. Please check whether " @@ -5314,8 +5244,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add Primitive" -"\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add " +"Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" "Al grabar timelapse sin el cabezal de la herramienta, se recomienda añadir " "una «Torre de purga para el timelapse» \n" @@ -5380,6 +5310,9 @@ msgstr "Modo especial" msgid "G-code output" msgstr "Resultado gcode" +msgid "Post-processing scripts" +msgstr "" + msgid "Frequent" msgstr "Frecuente" @@ -6572,15 +6505,6 @@ msgstr "La placa %d: %s no admite el filamento %s." msgid "Generating skirt & brim" msgstr "Generando falda y ala" -msgid "Checking gcode path conflicts." -msgstr "" - -#, c-format, boost-format -msgid "" -"Conflicts of gcode paths have been found. Please separate the conflicted " -"objects (%s <-> %s) farther." -msgstr "" - msgid "Exporting G-code" msgstr "Exportando código G" @@ -7499,6 +7423,12 @@ msgstr "" msgid "None" msgstr "Ninguno" +msgid "Contour" +msgstr "" + +msgid "Contour and hole" +msgstr "" + msgid "All walls" msgstr "Todas las paredes" @@ -7935,6 +7865,16 @@ msgstr "Velocidad de la pared interior" msgid "Number of walls of every layer" msgstr "Número de paredes de cada capa" +msgid "Post-processing Scripts" +msgstr "" + +msgid "" +"If you want to process the output G-code through custom scripts, just list " +"their absolute paths here. Separate multiple scripts with a semicolon. " +"Scripts will be passed the absolute path to the G-code file as the first " +"argument, and variables of settings also can be read" +msgstr "" + msgid "Raft contact Z distance" msgstr "Distancia Z de contacto de la balsa" @@ -8826,6 +8766,12 @@ msgstr "" msgid "Do not run any validity checks, such as gcode path conflicts check." msgstr "" +msgid "Normative check" +msgstr "" + +msgid "Check the normative items." +msgstr "" + msgid "Output Model Info" msgstr "Información del modelo de salida" @@ -8918,20 +8864,20 @@ msgstr "Generar soporte" msgid "Checking support necessity" msgstr "Comprobación de la necesidad de soporte" -#, c-format, boost-format -msgid "" -"It seems object %s has completely floating regions. Please re-orient the " -"object or enable support generation." +msgid "floating regions" +msgstr "" + +msgid "floating cantilever" +msgstr "" + +msgid "large overhangs" msgstr "" -"Parece que el objeto %s tiene regiones completamente flotantes. Reoriente el " -"objeto o habilite la generación de soporte." #, c-format, boost-format msgid "" -"It seems object %s has large overhangs. Please enable support generation." +"It seems object %s has %s. Please re-orient the object or enable support " +"generation." msgstr "" -"Parece que el objeto %s tiene grandes voladizos. Habilite la generación de " -"soporte." msgid "Optimizing toolpath" msgstr "Optimización de la trayectoria de la herramienta" @@ -9256,6 +9202,37 @@ msgstr "" "¿Sabía que puede utilizar más bucles de pared y una densidad de relleno " "dispersa más alta para mejorar la resistencia del modelo?" +#~ msgid "Start" +#~ msgstr "Iniciar" + +#~ msgid "G-code" +#~ msgstr "G-code" + +#~ msgid "Backup" +#~ msgstr "Copia de seguridad" + +#~ msgid "Backup interval" +#~ msgstr "Intervalo de copia de seguridad" + +#, c-format, boost-format +#~ msgid "The %s filament is too soft to be used with the AMS" +#~ msgstr "El filamento %s es demasiado blando para usarlo con el AMS" + +#, c-format, boost-format +#~ msgid "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." +#~ msgstr "" +#~ "Parece que el objeto %s tiene regiones completamente flotantes. Reoriente " +#~ "el objeto o habilite la generación de soporte." + +#, c-format, boost-format +#~ msgid "" +#~ "It seems object %s has large overhangs. Please enable support generation." +#~ msgstr "" +#~ "Parece que el objeto %s tiene grandes voladizos. Habilite la generación " +#~ "de soporte." + #~ msgid "\\u2103" #~ msgstr "\\ u2103" diff --git a/bbl/i18n/fr/BambuStudio_fr.po b/bbl/i18n/fr/BambuStudio_fr.po index c2a4f5f9d5..fd9db77602 100644 --- a/bbl/i18n/fr/BambuStudio_fr.po +++ b/bbl/i18n/fr/BambuStudio_fr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-24 17:47+0800\n" +"POT-Creation-Date: 2023-03-29 14:51+0800\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -288,7 +288,10 @@ msgstr "Movement" msgid "Height" msgstr "Height" -msgid "Add/Edit connectors" +msgid "Edit connectors" +msgstr "" + +msgid "Add connectors" msgstr "" msgid "Upper part" @@ -324,12 +327,21 @@ msgstr "Réinitialiser" msgid "Connectors" msgstr "" -msgid "Remove connectors" -msgstr "" - msgid "Type" msgstr "Type" +msgid "Style" +msgstr "Style" + +msgid "Shape" +msgstr "Forme" + +msgid "Depth ratio" +msgstr "" + +msgid "Remove connectors" +msgstr "" + msgid "Prizm" msgstr "" @@ -342,15 +354,6 @@ msgstr "" msgid "Hexagon" msgstr "" -msgid "Style" -msgstr "Style" - -msgid "Shape" -msgstr "Forme" - -msgid "Depth ratio" -msgstr "" - msgid "Confirm connectors" msgstr "" @@ -1333,6 +1336,15 @@ msgstr "Open next tip" msgid "Open Documentation in web browser." msgstr "Open documentation in web browser" +msgid "Pause:" +msgstr "" + +msgid "Custom Template:" +msgstr "" + +msgid "Custom G-code:" +msgstr "" + msgid "Custom G-code" msgstr "Code G personnalisé" @@ -1342,6 +1354,9 @@ msgstr "Enter Custom G-code used on current layer:" msgid "OK" msgstr "OK" +msgid "Jump to Layer" +msgstr "Jump to layer" + msgid "Jump to layer" msgstr "Jump to layer" @@ -1357,17 +1372,23 @@ msgstr "Add Custom G-code" msgid "Add Custom Template" msgstr "Add Custom Template" -msgid "Jump to Layer" -msgstr "Jump to layer" - msgid "Filament " msgstr "Filament " -msgid "Start" -msgstr "Start" +msgid "Delete Pause" +msgstr "" -msgid "G-code" -msgstr "G-code" +msgid "Delete Custom Template" +msgstr "" + +msgid "Edit Custom G-code" +msgstr "" + +msgid "Delete Custom G-code" +msgstr "" + +msgid "Delete Filament Change" +msgstr "" msgid "No printer" msgstr "Pas d'imprimante" @@ -1449,8 +1470,8 @@ msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " "load or unload filiament." msgstr "" -"Choisissez un slot AMS puis appuyez sur le bouton \"charger\" ou\"Décharger" -"\" pour charger ou décharger automatiquement le filament." +"Choisissez un slot AMS puis appuyez sur le bouton \"charger\" " +"ou\"Décharger\" pour charger ou décharger automatiquement le filament." msgid "Edit" msgstr "Éditer" @@ -1828,6 +1849,9 @@ msgstr "Please input a valid value (K in 0~0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" +msgid "You need to select the material type and color firet." +msgstr "" + msgid "Other color" msgstr "" @@ -2858,10 +2882,6 @@ msgstr "Retour" msgid "Paint Toolbar" msgstr "Barre d'outils de peinture" -#, boost-format -msgid "Shortcut key %1%" -msgstr "" - msgid "Explosion Ratio" msgstr "Taux d'explosion" @@ -2883,6 +2903,12 @@ msgstr "Le volume:" msgid "Size:" msgstr "Taille:" +#, c-format, boost-format +msgid "" +"Conflicts of gcode paths have been found. Please separate the conflicted " +"objects farther (%s <-> %s)." +msgstr "" + msgid "An object is layed over the boundary of plate." msgstr "Un objet est posé sur la limite de la plaque." @@ -4340,6 +4366,9 @@ msgstr "" "Le projet en cours comporte des modifications non enregistrées, enregistrez-" "les avant de continuer ?" +msgid "Remember my choice." +msgstr "" + msgid "Number of copies:" msgstr "Nombre de copies:" @@ -4497,8 +4526,8 @@ msgstr "Show \"Tip of the day\" notification after start" msgid "If enabled, useful hints are displayed at startup." msgstr "If enabled, useful hints are displayed at startup." -msgid "User sync" -msgstr "Synchronisation utilisateur" +msgid "Presets" +msgstr "" msgid "Auto sync user presets(Printer/Filament/Process)" msgstr "" @@ -4508,6 +4537,15 @@ msgstr "" msgid "User Sync" msgstr "Synchronisation utilisateur" +msgid "Auto sync system presets(Printer/Filament/Process)" +msgstr "" + +msgid "System Sync" +msgstr "" + +msgid "Clear my choice on the unsaved presets." +msgstr "" + msgid "Associate files to BambuStudio" msgstr "Associer des fichiers à BambuStudio" @@ -4535,14 +4573,33 @@ msgstr "" "Si activé, définit BambuStudio comme application par défaut pour ouvrir les " "fichiers .step" -msgid "Backup" -msgstr "Sauvegarde" +msgid "Online Models" +msgstr "" + +msgid "Show online staff-picked models on the home page" +msgstr "" + +msgid "Maximum recent projects" +msgstr "" + +msgid "Maximum count of recent projects" +msgstr "" + +msgid "Clear my choice on the unsaved projects." +msgstr "" msgid "Auto-Backup" msgstr "Sauvegarde automatique" -msgid "Backup interval" -msgstr "Intervalle de sauvegarde" +msgid "" +"Backup your project periodically for restoring from the occasional crash." +msgstr "" + +msgid "every" +msgstr "" + +msgid "The peroid of backup in seconds." +msgstr "" msgid "Downloads" msgstr "Downloads" @@ -4562,6 +4619,9 @@ msgstr "Afficher la page d'accueil au démarrage" msgid "Sync settings" msgstr "Paramètres de synchronisation" +msgid "User sync" +msgstr "Synchronisation utilisateur" + msgid "Preset sync" msgstr "Synchronisation préréglée" @@ -4989,8 +5049,8 @@ msgstr "" "selecting the correct printer type." #, c-format, boost-format -msgid "The %s filament is too soft to be used with the AMS" -msgstr "The %s filament is too soft to be used with the AMS" +msgid "%s is not supported by AMS." +msgstr "" msgid "" "There are some unknown filaments in the AMS mappings. Please check whether " @@ -5117,13 +5177,13 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add Primitive" -"\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add " +"Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" "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\"." msgid "Line width" msgstr "Largeur de ligne" @@ -5183,6 +5243,9 @@ msgstr "Mode spécial" msgid "G-code output" msgstr "G-code output" +msgid "Post-processing scripts" +msgstr "" + msgid "Frequent" msgstr "Fréquent" @@ -5239,9 +5302,9 @@ msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " "does not support to print on the Cool Plate" msgstr "" -"Il s'agit de la température du plateau lorsque le plateau froid (\"Cool plate" -"\") est installé. Une valeur à 0 signifie que ce filament ne peut pas être " -"imprimé sur le plateau froid." +"Il s'agit de la température du plateau lorsque le plateau froid (\"Cool " +"plate\") est installé. Une valeur à 0 signifie que ce filament ne peut pas " +"être imprimé sur le plateau froid." msgid "Engineering plate" msgstr "Plaque d'ingénierie" @@ -6368,15 +6431,6 @@ msgstr "Plate %d: %s does not support filament %s" msgid "Generating skirt & brim" msgstr "Génération jupe et bord" -msgid "Checking gcode path conflicts." -msgstr "" - -#, c-format, boost-format -msgid "" -"Conflicts of gcode paths have been found. Please separate the conflicted " -"objects (%s <-> %s) farther." -msgstr "" - msgid "Exporting G-code" msgstr "Exportation du code G" @@ -7293,6 +7347,12 @@ msgstr "" msgid "None" msgstr "Aucun" +msgid "Contour" +msgstr "" + +msgid "Contour and hole" +msgstr "" + msgid "All walls" msgstr "Toutes les parois" @@ -7731,6 +7791,16 @@ msgstr "Vitesse de la paroi intérieure" msgid "Number of walls of every layer" msgstr "Nombre de murs de chaque couche" +msgid "Post-processing Scripts" +msgstr "" + +msgid "" +"If you want to process the output G-code through custom scripts, just list " +"their absolute paths here. Separate multiple scripts with a semicolon. " +"Scripts will be passed the absolute path to the G-code file as the first " +"argument, and variables of settings also can be read" +msgstr "" + msgid "Raft contact Z distance" msgstr "Distance Z de contact du radeau" @@ -8612,6 +8682,12 @@ msgstr "" msgid "Do not run any validity checks, such as gcode path conflicts check." msgstr "" +msgid "Normative check" +msgstr "" + +msgid "Check the normative items." +msgstr "" + msgid "Output Model Info" msgstr "Informations sur le modèle de sortie" @@ -8705,19 +8781,20 @@ msgstr "Génération des supports" msgid "Checking support necessity" msgstr "Vérification de la nécessité du support" -#, c-format, boost-format -msgid "" -"It seems object %s has completely floating regions. Please re-orient the " -"object or enable support generation." +msgid "floating regions" +msgstr "" + +msgid "floating cantilever" +msgstr "" + +msgid "large overhangs" msgstr "" -"It seems object %s has completely floating regions. Please re-orient the " -"object or enable support generation." #, c-format, boost-format msgid "" -"It seems object %s has large overhangs. Please enable support generation." +"It seems object %s has %s. Please re-orient the object or enable support " +"generation." msgstr "" -"It seems object %s has large overhangs. Please enable support generation." msgid "Optimizing toolpath" msgstr "Optimisation du parcours d'outil" @@ -9042,6 +9119,36 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" +#~ msgid "Start" +#~ msgstr "Start" + +#~ msgid "G-code" +#~ msgstr "G-code" + +#~ msgid "Backup" +#~ msgstr "Sauvegarde" + +#~ msgid "Backup interval" +#~ msgstr "Intervalle de sauvegarde" + +#, c-format, boost-format +#~ msgid "The %s filament is too soft to be used with the AMS" +#~ msgstr "The %s filament is too soft to be used with the AMS" + +#, c-format, boost-format +#~ msgid "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." +#~ msgstr "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." + +#, c-format, boost-format +#~ msgid "" +#~ "It seems object %s has large overhangs. Please enable support generation." +#~ msgstr "" +#~ "It seems object %s has large overhangs. Please enable support generation." + #~ msgid "\\u2103" #~ msgstr "\\u2103" diff --git a/bbl/i18n/hu/BambuStudio_hu.po b/bbl/i18n/hu/BambuStudio_hu.po index 15f60e1d48..1305085182 100644 --- a/bbl/i18n/hu/BambuStudio_hu.po +++ b/bbl/i18n/hu/BambuStudio_hu.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-24 17:47+0800\n" +"POT-Creation-Date: 2023-03-29 14:51+0800\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -287,7 +287,10 @@ msgstr "Movement" msgid "Height" msgstr "Height" -msgid "Add/Edit connectors" +msgid "Edit connectors" +msgstr "" + +msgid "Add connectors" msgstr "" msgid "Upper part" @@ -323,12 +326,21 @@ msgstr "Visszaállítás" msgid "Connectors" msgstr "" -msgid "Remove connectors" -msgstr "" - msgid "Type" msgstr "Típus" +msgid "Style" +msgstr "Stílus" + +msgid "Shape" +msgstr "Forma" + +msgid "Depth ratio" +msgstr "" + +msgid "Remove connectors" +msgstr "" + msgid "Prizm" msgstr "" @@ -341,15 +353,6 @@ msgstr "" msgid "Hexagon" msgstr "" -msgid "Style" -msgstr "Stílus" - -msgid "Shape" -msgstr "Forma" - -msgid "Depth ratio" -msgstr "" - msgid "Confirm connectors" msgstr "" @@ -1336,6 +1339,15 @@ msgstr "Open next tip" msgid "Open Documentation in web browser." msgstr "Open documentation in web browser" +msgid "Pause:" +msgstr "" + +msgid "Custom Template:" +msgstr "" + +msgid "Custom G-code:" +msgstr "" + msgid "Custom G-code" msgstr "Egyedi G-kód" @@ -1345,6 +1357,9 @@ msgstr "Enter Custom G-code used on current layer:" msgid "OK" msgstr "OK" +msgid "Jump to Layer" +msgstr "Jump to layer" + msgid "Jump to layer" msgstr "Jump to layer" @@ -1360,17 +1375,23 @@ msgstr "Add Custom G-code" msgid "Add Custom Template" msgstr "Add Custom Template" -msgid "Jump to Layer" -msgstr "Jump to layer" - msgid "Filament " msgstr "Filament " -msgid "Start" -msgstr "Start" +msgid "Delete Pause" +msgstr "" -msgid "G-code" -msgstr "G-code" +msgid "Delete Custom Template" +msgstr "" + +msgid "Edit Custom G-code" +msgstr "" + +msgid "Delete Custom G-code" +msgstr "" + +msgid "Delete Filament Change" +msgstr "" msgid "No printer" msgstr "Nincs nyomtató" @@ -1838,6 +1859,9 @@ msgstr "Please input a valid value (K in 0~0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" +msgid "You need to select the material type and color firet." +msgstr "" + msgid "Other color" msgstr "" @@ -2875,10 +2899,6 @@ msgstr "vissza" msgid "Paint Toolbar" msgstr "Festés eszköztár" -#, boost-format -msgid "Shortcut key %1%" -msgstr "" - msgid "Explosion Ratio" msgstr "Robbantási arány" @@ -2900,6 +2920,12 @@ msgstr "Térfogat:" msgid "Size:" msgstr "Méret:" +#, c-format, boost-format +msgid "" +"Conflicts of gcode paths have been found. Please separate the conflicted " +"objects farther (%s <-> %s)." +msgstr "" + msgid "An object is layed over the boundary of plate." msgstr "Egy objektum a tálca határvonalán túlra került." @@ -4353,6 +4379,9 @@ msgstr "" "Az aktuális projektben el nem mentett módosítások vannak, mentsük el a " "folytatás előtt?" +msgid "Remember my choice." +msgstr "" + msgid "Number of copies:" msgstr "Másolatok száma:" @@ -4508,8 +4537,8 @@ msgstr "Show \"Tip of the day\" notification after start" msgid "If enabled, useful hints are displayed at startup." msgstr "If enabled, useful hints are displayed at startup." -msgid "User sync" -msgstr "Felhasználói szinkronizálás" +msgid "Presets" +msgstr "" msgid "Auto sync user presets(Printer/Filament/Process)" msgstr "" @@ -4519,6 +4548,15 @@ msgstr "" msgid "User Sync" msgstr "Felhasználó szinkronizálás" +msgid "Auto sync system presets(Printer/Filament/Process)" +msgstr "" + +msgid "System Sync" +msgstr "" + +msgid "Clear my choice on the unsaved presets." +msgstr "" + msgid "Associate files to BambuStudio" msgstr "Fájlok társítása a BambuStudiohoz" @@ -4546,14 +4584,33 @@ msgstr "" "Ha engedélyezve van, a BambuStudio-t állítja be alapértelmezett " "alkalmazásként a .step fájlok megnyitásához" -msgid "Backup" -msgstr "Biztonsági mentés" +msgid "Online Models" +msgstr "" + +msgid "Show online staff-picked models on the home page" +msgstr "" + +msgid "Maximum recent projects" +msgstr "" + +msgid "Maximum count of recent projects" +msgstr "" + +msgid "Clear my choice on the unsaved projects." +msgstr "" msgid "Auto-Backup" msgstr "Automatikus biztonsági mentés" -msgid "Backup interval" -msgstr "Intervallum" +msgid "" +"Backup your project periodically for restoring from the occasional crash." +msgstr "" + +msgid "every" +msgstr "" + +msgid "The peroid of backup in seconds." +msgstr "" msgid "Downloads" msgstr "Downloads" @@ -4573,6 +4630,9 @@ msgstr "Kezdőlap megjelenítése indításkor" msgid "Sync settings" msgstr "Szinkronizálási beállítások" +msgid "User sync" +msgstr "Felhasználói szinkronizálás" + msgid "Preset sync" msgstr "Beállítások szinkronizálása" @@ -4992,8 +5052,8 @@ msgstr "" "selecting the correct printer type." #, c-format, boost-format -msgid "The %s filament is too soft to be used with the AMS" -msgstr "The %s filament is too soft to be used with the AMS" +msgid "%s is not supported by AMS." +msgstr "" msgid "" "There are some unknown filaments in the AMS mappings. Please check whether " @@ -5117,13 +5177,13 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add Primitive" -"\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add " +"Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" "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\"." msgid "Line width" msgstr "Nyomtatott vonal szélessége" @@ -5182,6 +5242,9 @@ msgstr "Speciális mód" msgid "G-code output" msgstr "G-kód kimenet" +msgid "Post-processing scripts" +msgstr "" + msgid "Frequent" msgstr "Gyakori" @@ -6362,15 +6425,6 @@ msgstr "Plate %d: %s does not support filament %s" msgid "Generating skirt & brim" msgstr "Szoknya & perem generálása" -msgid "Checking gcode path conflicts." -msgstr "" - -#, c-format, boost-format -msgid "" -"Conflicts of gcode paths have been found. Please separate the conflicted " -"objects (%s <-> %s) farther." -msgstr "" - msgid "Exporting G-code" msgstr "G-kód exportálása" @@ -7269,6 +7323,12 @@ msgstr "" msgid "None" msgstr "Sehol" +msgid "Contour" +msgstr "" + +msgid "Contour and hole" +msgstr "" + msgid "All walls" msgstr "Összes fal" @@ -7700,6 +7760,16 @@ msgstr "A belső fal nyomtatási sebessége" msgid "Number of walls of every layer" msgstr "Ez a falak száma rétegenként." +msgid "Post-processing Scripts" +msgstr "" + +msgid "" +"If you want to process the output G-code through custom scripts, just list " +"their absolute paths here. Separate multiple scripts with a semicolon. " +"Scripts will be passed the absolute path to the G-code file as the first " +"argument, and variables of settings also can be read" +msgstr "" + msgid "Raft contact Z distance" msgstr "Tutaj érintkezés Z távolság" @@ -8581,6 +8651,12 @@ msgstr "" msgid "Do not run any validity checks, such as gcode path conflicts check." msgstr "" +msgid "Normative check" +msgstr "" + +msgid "Check the normative items." +msgstr "" + msgid "Output Model Info" msgstr "Kimeneti modell információ" @@ -8672,19 +8748,20 @@ msgstr "Támaszok generálása" msgid "Checking support necessity" msgstr "Támasz szükségességének ellenőrzése" -#, c-format, boost-format -msgid "" -"It seems object %s has completely floating regions. Please re-orient the " -"object or enable support generation." +msgid "floating regions" +msgstr "" + +msgid "floating cantilever" +msgstr "" + +msgid "large overhangs" msgstr "" -"It seems object %s has completely floating regions. Please re-orient the " -"object or enable support generation." #, c-format, boost-format msgid "" -"It seems object %s has large overhangs. Please enable support generation." +"It seems object %s has %s. Please re-orient the object or enable support " +"generation." msgstr "" -"It seems object %s has large overhangs. Please enable support generation." msgid "Optimizing toolpath" msgstr "Szerszámút optimalizálása" @@ -9007,6 +9084,36 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" +#~ msgid "Start" +#~ msgstr "Start" + +#~ msgid "G-code" +#~ msgstr "G-code" + +#~ msgid "Backup" +#~ msgstr "Biztonsági mentés" + +#~ msgid "Backup interval" +#~ msgstr "Intervallum" + +#, c-format, boost-format +#~ msgid "The %s filament is too soft to be used with the AMS" +#~ msgstr "The %s filament is too soft to be used with the AMS" + +#, c-format, boost-format +#~ msgid "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." +#~ msgstr "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." + +#, c-format, boost-format +#~ msgid "" +#~ "It seems object %s has large overhangs. Please enable support generation." +#~ msgstr "" +#~ "It seems object %s has large overhangs. Please enable support generation." + #~ msgid "\\u2103" #~ msgstr "\\u2103" diff --git a/bbl/i18n/it/BambuStudio_it.po b/bbl/i18n/it/BambuStudio_it.po index 3822c3deb5..3c26ee27f9 100644 --- a/bbl/i18n/it/BambuStudio_it.po +++ b/bbl/i18n/it/BambuStudio_it.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-24 17:47+0800\n" +"POT-Creation-Date: 2023-03-29 14:51+0800\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -287,7 +287,10 @@ msgstr "Movement" msgid "Height" msgstr "Height" -msgid "Add/Edit connectors" +msgid "Edit connectors" +msgstr "" + +msgid "Add connectors" msgstr "" msgid "Upper part" @@ -323,12 +326,21 @@ msgstr "Reimposta" msgid "Connectors" msgstr "" -msgid "Remove connectors" -msgstr "" - msgid "Type" msgstr "Type" +msgid "Style" +msgstr "Stile" + +msgid "Shape" +msgstr "Forma" + +msgid "Depth ratio" +msgstr "" + +msgid "Remove connectors" +msgstr "" + msgid "Prizm" msgstr "" @@ -341,15 +353,6 @@ msgstr "" msgid "Hexagon" msgstr "" -msgid "Style" -msgstr "Stile" - -msgid "Shape" -msgstr "Forma" - -msgid "Depth ratio" -msgstr "" - msgid "Confirm connectors" msgstr "" @@ -1319,6 +1322,15 @@ msgstr "Open next tip" msgid "Open Documentation in web browser." msgstr "Open documentation in web browser" +msgid "Pause:" +msgstr "" + +msgid "Custom Template:" +msgstr "" + +msgid "Custom G-code:" +msgstr "" + msgid "Custom G-code" msgstr "G-code personalizzato" @@ -1328,6 +1340,9 @@ msgstr "Enter Custom G-code used on current layer:" msgid "OK" msgstr "OK" +msgid "Jump to Layer" +msgstr "Jump to layer" + msgid "Jump to layer" msgstr "Jump to layer" @@ -1343,17 +1358,23 @@ msgstr "Add Custom G-code" msgid "Add Custom Template" msgstr "Add Custom Template" -msgid "Jump to Layer" -msgstr "Jump to layer" - msgid "Filament " msgstr "Filament " -msgid "Start" -msgstr "Start" +msgid "Delete Pause" +msgstr "" -msgid "G-code" -msgstr "G-code" +msgid "Delete Custom Template" +msgstr "" + +msgid "Edit Custom G-code" +msgstr "" + +msgid "Delete Custom G-code" +msgstr "" + +msgid "Delete Filament Change" +msgstr "" msgid "No printer" msgstr "No printer" @@ -1812,6 +1833,9 @@ msgstr "Please input a valid value (K in 0~0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" +msgid "You need to select the material type and color firet." +msgstr "" + msgid "Other color" msgstr "" @@ -2851,10 +2875,6 @@ msgstr "return" msgid "Paint Toolbar" msgstr "Paint Toolbar" -#, boost-format -msgid "Shortcut key %1%" -msgstr "" - msgid "Explosion Ratio" msgstr "Explosion Ratio" @@ -2876,6 +2896,12 @@ msgstr "Volume:" msgid "Size:" msgstr "Size:" +#, c-format, boost-format +msgid "" +"Conflicts of gcode paths have been found. Please separate the conflicted " +"objects farther (%s <-> %s)." +msgstr "" + msgid "An object is layed over the boundary of plate." msgstr "An object is laid over the boundary of the plate." @@ -4326,6 +4352,9 @@ msgstr "" "The current project has unsaved changes. Would you like to save before " "continuing?" +msgid "Remember my choice." +msgstr "" + msgid "Number of copies:" msgstr "Number of copies:" @@ -4479,8 +4508,8 @@ msgstr "Show \"Tip of the day\" notification after start" msgid "If enabled, useful hints are displayed at startup." msgstr "If enabled, useful hints are displayed at startup." -msgid "User sync" -msgstr "User sync" +msgid "Presets" +msgstr "" msgid "Auto sync user presets(Printer/Filament/Process)" msgstr "Auto sync user presets (Printer/Filament/Process)" @@ -4488,6 +4517,15 @@ msgstr "Auto sync user presets (Printer/Filament/Process)" msgid "User Sync" msgstr "User Sync" +msgid "Auto sync system presets(Printer/Filament/Process)" +msgstr "" + +msgid "System Sync" +msgstr "" + +msgid "Clear my choice on the unsaved presets." +msgstr "" + msgid "Associate files to BambuStudio" msgstr "Associate files to Bambu Studio" @@ -4515,14 +4553,33 @@ msgstr "" "If enabled, this sets Bambu Studio as the default application to open .step " "files." -msgid "Backup" -msgstr "Backup" +msgid "Online Models" +msgstr "" + +msgid "Show online staff-picked models on the home page" +msgstr "" + +msgid "Maximum recent projects" +msgstr "" + +msgid "Maximum count of recent projects" +msgstr "" + +msgid "Clear my choice on the unsaved projects." +msgstr "" msgid "Auto-Backup" msgstr "Auto-Backup" -msgid "Backup interval" -msgstr "Backup interval" +msgid "" +"Backup your project periodically for restoring from the occasional crash." +msgstr "" + +msgid "every" +msgstr "" + +msgid "The peroid of backup in seconds." +msgstr "" msgid "Downloads" msgstr "Downloads" @@ -4542,6 +4599,9 @@ msgstr "Show home page on startup" msgid "Sync settings" msgstr "Sync settings" +msgid "User sync" +msgstr "User sync" + msgid "Preset sync" msgstr "Preset sync" @@ -4960,8 +5020,8 @@ msgstr "" "selecting the correct printer type." #, c-format, boost-format -msgid "The %s filament is too soft to be used with the AMS" -msgstr "The %s filament is too soft to be used with the AMS" +msgid "%s is not supported by AMS." +msgstr "" msgid "" "There are some unknown filaments in the AMS mappings. Please check whether " @@ -5083,13 +5143,13 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add Primitive" -"\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add " +"Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" "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\"." msgid "Line width" msgstr "Line width" @@ -5148,6 +5208,9 @@ msgstr "Special mode" msgid "G-code output" msgstr "G-code output" +msgid "Post-processing scripts" +msgstr "" + msgid "Frequent" msgstr "Frequent" @@ -6308,15 +6371,6 @@ msgstr "Plate %d: %s does not support filament %s" msgid "Generating skirt & brim" msgstr "Generating skirt & brim" -msgid "Checking gcode path conflicts." -msgstr "" - -#, c-format, boost-format -msgid "" -"Conflicts of gcode paths have been found. Please separate the conflicted " -"objects (%s <-> %s) farther." -msgstr "" - msgid "Exporting G-code" msgstr "Esportando il G-code" @@ -7214,6 +7268,12 @@ msgstr "" msgid "None" msgstr "Nessuno" +msgid "Contour" +msgstr "" + +msgid "Contour and hole" +msgstr "" + msgid "All walls" msgstr "Tutte le pareti" @@ -7636,6 +7696,16 @@ msgstr "This is the speed for inner walls." msgid "Number of walls of every layer" msgstr "This is the number of walls per layer." +msgid "Post-processing Scripts" +msgstr "" + +msgid "" +"If you want to process the output G-code through custom scripts, just list " +"their absolute paths here. Separate multiple scripts with a semicolon. " +"Scripts will be passed the absolute path to the G-code file as the first " +"argument, and variables of settings also can be read" +msgstr "" + msgid "Raft contact Z distance" msgstr "Distanza di contatto Z Raft" @@ -8505,6 +8575,12 @@ msgstr "" msgid "Do not run any validity checks, such as gcode path conflicts check." msgstr "" +msgid "Normative check" +msgstr "" + +msgid "Check the normative items." +msgstr "" + msgid "Output Model Info" msgstr "Info Modello di output" @@ -8596,19 +8672,20 @@ msgstr "Generating support" msgid "Checking support necessity" msgstr "Checking support necessity" -#, c-format, boost-format -msgid "" -"It seems object %s has completely floating regions. Please re-orient the " -"object or enable support generation." +msgid "floating regions" +msgstr "" + +msgid "floating cantilever" +msgstr "" + +msgid "large overhangs" msgstr "" -"It seems object %s has completely floating regions. Please re-orient the " -"object or enable support generation." #, c-format, boost-format msgid "" -"It seems object %s has large overhangs. Please enable support generation." +"It seems object %s has %s. Please re-orient the object or enable support " +"generation." msgstr "" -"It seems object %s has large overhangs. Please enable support generation." msgid "Optimizing toolpath" msgstr "Optimizing toolpath" @@ -8931,6 +9008,36 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" +#~ msgid "Start" +#~ msgstr "Start" + +#~ msgid "G-code" +#~ msgstr "G-code" + +#~ msgid "Backup" +#~ msgstr "Backup" + +#~ msgid "Backup interval" +#~ msgstr "Backup interval" + +#, c-format, boost-format +#~ msgid "The %s filament is too soft to be used with the AMS" +#~ msgstr "The %s filament is too soft to be used with the AMS" + +#, c-format, boost-format +#~ msgid "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." +#~ msgstr "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." + +#, c-format, boost-format +#~ msgid "" +#~ "It seems object %s has large overhangs. Please enable support generation." +#~ msgstr "" +#~ "It seems object %s has large overhangs. Please enable support generation." + #~ msgid "\\u2103" #~ msgstr "\\u2103" diff --git a/bbl/i18n/ja/BambuStudio_ja.po b/bbl/i18n/ja/BambuStudio_ja.po index 36c46f91b9..b29f65697e 100644 --- a/bbl/i18n/ja/BambuStudio_ja.po +++ b/bbl/i18n/ja/BambuStudio_ja.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-24 17:47+0800\n" +"POT-Creation-Date: 2023-03-29 14:51+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -289,7 +289,10 @@ msgstr "移動" msgid "Height" msgstr "高度" -msgid "Add/Edit connectors" +msgid "Edit connectors" +msgstr "" + +msgid "Add connectors" msgstr "" msgid "Upper part" @@ -325,12 +328,21 @@ msgstr "リセット" msgid "Connectors" msgstr "" -msgid "Remove connectors" -msgstr "" - msgid "Type" msgstr "タイプ" +msgid "Style" +msgstr "スタイル" + +msgid "Shape" +msgstr "形状" + +msgid "Depth ratio" +msgstr "" + +msgid "Remove connectors" +msgstr "" + msgid "Prizm" msgstr "" @@ -343,15 +355,6 @@ msgstr "" msgid "Hexagon" msgstr "" -msgid "Style" -msgstr "スタイル" - -msgid "Shape" -msgstr "形状" - -msgid "Depth ratio" -msgstr "" - msgid "Confirm connectors" msgstr "" @@ -1307,6 +1310,15 @@ msgstr "次のヒント" msgid "Open Documentation in web browser." msgstr "ブラウザで開く" +msgid "Pause:" +msgstr "" + +msgid "Custom Template:" +msgstr "" + +msgid "Custom G-code:" +msgstr "" + msgid "Custom G-code" msgstr "カスタム G-code" @@ -1316,6 +1328,9 @@ msgstr "現在の積層にカスタムG-codeを追加" msgid "OK" msgstr "OK" +msgid "Jump to Layer" +msgstr "積層に移動" + msgid "Jump to layer" msgstr "積層に移動" @@ -1331,17 +1346,23 @@ msgstr "カスタムG-codeを追加" msgid "Add Custom Template" msgstr "カスタムテンプレートを追加" -msgid "Jump to Layer" -msgstr "積層に移動" - msgid "Filament " msgstr "フィラメント" -msgid "Start" -msgstr "開始" +msgid "Delete Pause" +msgstr "" -msgid "G-code" -msgstr "G-code" +msgid "Delete Custom Template" +msgstr "" + +msgid "Edit Custom G-code" +msgstr "" + +msgid "Delete Custom G-code" +msgstr "" + +msgid "Delete Filament Change" +msgstr "" msgid "No printer" msgstr "プリンタ無し" @@ -1797,6 +1818,9 @@ msgstr "有効な値を入力してください (0 ~ 0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "有効な値を入力してください (K: 0 ~ 0.5, N: 0.6 ~ 2.0)" +msgid "You need to select the material type and color firet." +msgstr "" + msgid "Other color" msgstr "" @@ -2788,10 +2812,6 @@ msgstr "戻る" msgid "Paint Toolbar" msgstr "ペイント ツールバー" -#, boost-format -msgid "Shortcut key %1%" -msgstr "" - msgid "Explosion Ratio" msgstr "分解比率" @@ -2813,6 +2833,12 @@ msgstr "ボリューム" msgid "Size:" msgstr "サイズ:" +#, c-format, boost-format +msgid "" +"Conflicts of gcode paths have been found. Please separate the conflicted " +"objects farther (%s <-> %s)." +msgstr "" + msgid "An object is layed over the boundary of plate." msgstr "プレートの境界を超えるオブジェクトがあります" @@ -4237,6 +4263,9 @@ msgid "The current project has unsaved changes, save it before continue?" msgstr "" "現在のプロジェクトには未保存の変更があります。続行する前に保存しますか?" +msgid "Remember my choice." +msgstr "" + msgid "Number of copies:" msgstr "複製数" @@ -4389,8 +4418,8 @@ msgstr "起動後「毎日のヒント」を表示" msgid "If enabled, useful hints are displayed at startup." msgstr "有効になる場合、起動時にヒントを表示されます。" -msgid "User sync" -msgstr "ユーザー同期" +msgid "Presets" +msgstr "" msgid "Auto sync user presets(Printer/Filament/Process)" msgstr "ユーザープリセットの自動同期 (プリンター/フィラメント/プロセス)" @@ -4398,6 +4427,15 @@ msgstr "ユーザープリセットの自動同期 (プリンター/フィラメ msgid "User Sync" msgstr "ユーザー同期" +msgid "Auto sync system presets(Printer/Filament/Process)" +msgstr "" + +msgid "System Sync" +msgstr "" + +msgid "Clear my choice on the unsaved presets." +msgstr "" + msgid "Associate files to BambuStudio" msgstr "ファイルをBambu Studioに関連付ける" @@ -4419,14 +4457,33 @@ msgstr ".step/.stpファイルをBambu Studioに関連付けます。" msgid "If enabled, sets BambuStudio as default application to open .step files" msgstr "デフォルトで.step/.stpファイルをBambu Studioで開く" -msgid "Backup" -msgstr "バックアップ" +msgid "Online Models" +msgstr "" + +msgid "Show online staff-picked models on the home page" +msgstr "" + +msgid "Maximum recent projects" +msgstr "" + +msgid "Maximum count of recent projects" +msgstr "" + +msgid "Clear my choice on the unsaved projects." +msgstr "" msgid "Auto-Backup" msgstr "自動バックアップ" -msgid "Backup interval" -msgstr "時間間隔" +msgid "" +"Backup your project periodically for restoring from the occasional crash." +msgstr "" + +msgid "every" +msgstr "" + +msgid "The peroid of backup in seconds." +msgstr "" msgid "Downloads" msgstr "ダウンロード" @@ -4446,6 +4503,9 @@ msgstr "起動時にホームページを表示" msgid "Sync settings" msgstr "同期設定" +msgid "User sync" +msgstr "ユーザー同期" + msgid "Preset sync" msgstr "プリセット同期" @@ -4846,8 +4906,8 @@ msgstr "" "か、一致機種でスライスしてください。" #, c-format, boost-format -msgid "The %s filament is too soft to be used with the AMS" -msgstr "%sは柔らかい為AMSに使用できません" +msgid "%s is not supported by AMS." +msgstr "" msgid "" "There are some unknown filaments in the AMS mappings. Please check whether " @@ -4964,8 +5024,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add Primitive" -"\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add " +"Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" "ヘッド無しのタイムラプスビデオを録画する時に、「タイムラプスプライムタワー」" "を追加してください。プレートで右クリックして、「プリミティブを追加」→「タイム" @@ -5027,6 +5087,9 @@ msgstr "特別モード" msgid "G-code output" msgstr "G-code出力" +msgid "Post-processing scripts" +msgstr "" + msgid "Frequent" msgstr "よく使う" @@ -6151,15 +6214,6 @@ msgstr "プレート %d: %s がフィラメント %s を使用できません" msgid "Generating skirt & brim" msgstr "スカートとブリムを生成" -msgid "Checking gcode path conflicts." -msgstr "" - -#, c-format, boost-format -msgid "" -"Conflicts of gcode paths have been found. Please separate the conflicted " -"objects (%s <-> %s) farther." -msgstr "" - msgid "Exporting G-code" msgstr "G-codeをエクスポート中" @@ -6990,6 +7044,12 @@ msgstr "" msgid "None" msgstr "無し" +msgid "Contour" +msgstr "" + +msgid "Contour and hole" +msgstr "" + msgid "All walls" msgstr "すべての壁" @@ -7385,6 +7445,16 @@ msgstr "内壁の造形速度です。" msgid "Number of walls of every layer" msgstr "壁面の層数です。" +msgid "Post-processing Scripts" +msgstr "" + +msgid "" +"If you want to process the output G-code through custom scripts, just list " +"their absolute paths here. Separate multiple scripts with a semicolon. " +"Scripts will be passed the absolute path to the G-code file as the first " +"argument, and variables of settings also can be read" +msgstr "" + msgid "Raft contact Z distance" msgstr "ラフト接触面Z間隔" @@ -8200,6 +8270,12 @@ msgstr "" msgid "Do not run any validity checks, such as gcode path conflicts check." msgstr "" +msgid "Normative check" +msgstr "" + +msgid "Check the normative items." +msgstr "" + msgid "Output Model Info" msgstr "出力モデル情報" @@ -8291,20 +8367,20 @@ msgstr "サポートを生成" msgid "Checking support necessity" msgstr "サポートの必要性を確認" -#, c-format, boost-format -msgid "" -"It seems object %s has completely floating regions. Please re-orient the " -"object or enable support generation." +msgid "floating regions" +msgstr "" + +msgid "floating cantilever" +msgstr "" + +msgid "large overhangs" msgstr "" -"オブジェクト %s がプレートに接触していません。向きを調整するか、サポートを有" -"効にしてください。" #, c-format, boost-format msgid "" -"It seems object %s has large overhangs. Please enable support generation." +"It seems object %s has %s. Please re-orient the object or enable support " +"generation." msgstr "" -"オブジェクト %s に大きなオーバーハングがあります、サポートを有効にしてくださ" -"い。" msgid "Optimizing toolpath" msgstr "ツールパスを最適化" @@ -8599,6 +8675,37 @@ msgstr "" "強度の向上\n" "壁面層数やインフィルの充填密度を増やして造形強度を向上できます。" +#~ msgid "Start" +#~ msgstr "開始" + +#~ msgid "G-code" +#~ msgstr "G-code" + +#~ msgid "Backup" +#~ msgstr "バックアップ" + +#~ msgid "Backup interval" +#~ msgstr "時間間隔" + +#, c-format, boost-format +#~ msgid "The %s filament is too soft to be used with the AMS" +#~ msgstr "%sは柔らかい為AMSに使用できません" + +#, c-format, boost-format +#~ msgid "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." +#~ msgstr "" +#~ "オブジェクト %s がプレートに接触していません。向きを調整するか、サポートを" +#~ "有効にしてください。" + +#, c-format, boost-format +#~ msgid "" +#~ "It seems object %s has large overhangs. Please enable support generation." +#~ msgstr "" +#~ "オブジェクト %s に大きなオーバーハングがあります、サポートを有効にしてくだ" +#~ "さい。" + #~ msgid "\\u2103" #~ msgstr "u2103" diff --git a/bbl/i18n/nl/BambuStudio_nl.po b/bbl/i18n/nl/BambuStudio_nl.po index 89690125a0..a57134effb 100644 --- a/bbl/i18n/nl/BambuStudio_nl.po +++ b/bbl/i18n/nl/BambuStudio_nl.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-24 17:47+0800\n" +"POT-Creation-Date: 2023-03-29 14:51+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -291,7 +291,10 @@ msgstr "Beweging" msgid "Height" msgstr "Hoogte" -msgid "Add/Edit connectors" +msgid "Edit connectors" +msgstr "" + +msgid "Add connectors" msgstr "" msgid "Upper part" @@ -327,12 +330,21 @@ msgstr "Terugzetten" msgid "Connectors" msgstr "" -msgid "Remove connectors" -msgstr "" - msgid "Type" msgstr "Type" +msgid "Style" +msgstr "Stijl" + +msgid "Shape" +msgstr "Vorm" + +msgid "Depth ratio" +msgstr "" + +msgid "Remove connectors" +msgstr "" + msgid "Prizm" msgstr "" @@ -345,15 +357,6 @@ msgstr "" msgid "Hexagon" msgstr "" -msgid "Style" -msgstr "Stijl" - -msgid "Shape" -msgstr "Vorm" - -msgid "Depth ratio" -msgstr "" - msgid "Confirm connectors" msgstr "" @@ -1346,6 +1349,15 @@ msgstr "Volgende tip openen" msgid "Open Documentation in web browser." msgstr "Documentatie openen in een webbrowser" +msgid "Pause:" +msgstr "" + +msgid "Custom Template:" +msgstr "" + +msgid "Custom G-code:" +msgstr "" + msgid "Custom G-code" msgstr "Aangepaste G-code" @@ -1355,6 +1367,9 @@ msgstr "Voer de aangepaste G-code in die op de huidige laag wordt gebruikt:" msgid "OK" msgstr "Offline" +msgid "Jump to Layer" +msgstr "Spring naar laag" + msgid "Jump to layer" msgstr "Jump to layer" @@ -1370,17 +1385,23 @@ msgstr "Aangepaste G-code toevoegen" msgid "Add Custom Template" msgstr "Aangepaste sjabloon toevoegen" -msgid "Jump to Layer" -msgstr "Spring naar laag" - msgid "Filament " msgstr "Filament" -msgid "Start" -msgstr "Starten" +msgid "Delete Pause" +msgstr "" -msgid "G-code" -msgstr "G-code" +msgid "Delete Custom Template" +msgstr "" + +msgid "Edit Custom G-code" +msgstr "" + +msgid "Delete Custom G-code" +msgstr "" + +msgid "Delete Filament Change" +msgstr "" msgid "No printer" msgstr "Geen printer" @@ -1852,6 +1873,9 @@ msgstr "Voer een geldige waarde in (K in 0 ~ 0,5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Voer een geldige waarde in (K in 0 ~ 0,5, N in 0,6 ~ 2,0)" +msgid "You need to select the material type and color firet." +msgstr "" + msgid "Other color" msgstr "" @@ -2902,10 +2926,6 @@ msgstr "Terug" msgid "Paint Toolbar" msgstr "Kleur instellingen" -#, boost-format -msgid "Shortcut key %1%" -msgstr "" - msgid "Explosion Ratio" msgstr "Vergrotings ratio" @@ -2927,6 +2947,12 @@ msgstr "Volume:" msgid "Size:" msgstr "Maat:" +#, c-format, boost-format +msgid "" +"Conflicts of gcode paths have been found. Please separate the conflicted " +"objects farther (%s <-> %s)." +msgstr "" + msgid "An object is layed over the boundary of plate." msgstr "Er bevind zich een object buiten de grenzen van de printplaat." @@ -4406,6 +4432,9 @@ msgstr "" "Het huidige project heeft niet-opgeslagen wijzigingen. Wilt u eerst opslaan " "voordat u verder gaat?" +msgid "Remember my choice." +msgstr "" + msgid "Number of copies:" msgstr "Aantal kopieën:" @@ -4565,8 +4594,8 @@ msgid "If enabled, useful hints are displayed at startup." msgstr "" "Indien ingeschakeld, worden bij het opstarten nuttige tips weergegeven." -msgid "User sync" -msgstr "Gebruikerssynchronisatie" +msgid "Presets" +msgstr "" msgid "Auto sync user presets(Printer/Filament/Process)" msgstr "" @@ -4576,6 +4605,15 @@ msgstr "" msgid "User Sync" msgstr "Gebruiker synchroniseren" +msgid "Auto sync system presets(Printer/Filament/Process)" +msgstr "" + +msgid "System Sync" +msgstr "" + +msgid "Clear my choice on the unsaved presets." +msgstr "" + msgid "Associate files to BambuStudio" msgstr "Koppel bestanden aan Bambu Studio" @@ -4603,14 +4641,33 @@ msgstr "" "Indien ingeschakeld, wordt Bambu Studio ingesteld als de standaardtoepassing " "om .step-bestanden te openen" -msgid "Backup" -msgstr "Backup" +msgid "Online Models" +msgstr "" + +msgid "Show online staff-picked models on the home page" +msgstr "" + +msgid "Maximum recent projects" +msgstr "" + +msgid "Maximum count of recent projects" +msgstr "" + +msgid "Clear my choice on the unsaved projects." +msgstr "" msgid "Auto-Backup" msgstr "Automatisch backup maken" -msgid "Backup interval" -msgstr "Backupinterval" +msgid "" +"Backup your project periodically for restoring from the occasional crash." +msgstr "" + +msgid "every" +msgstr "" + +msgid "The peroid of backup in seconds." +msgstr "" msgid "Downloads" msgstr "Downloads" @@ -4630,6 +4687,9 @@ msgstr "Toon startpagina bij opstanden" msgid "Sync settings" msgstr "Synchroniseer instellingen" +msgid "User sync" +msgstr "Gebruikerssynchronisatie" + msgid "Preset sync" msgstr "Voorinstellingen synchronizeren" @@ -5062,8 +5122,8 @@ msgstr "" "raadzaam opnieuw te slicen nadat het juiste printertype is geselecteerd." #, c-format, boost-format -msgid "The %s filament is too soft to be used with the AMS" -msgstr "Het %s-filament is te zacht om te worden gebruikt met de AMS" +msgid "%s is not supported by AMS." +msgstr "" msgid "" "There are some unknown filaments in the AMS mappings. Please check whether " @@ -5193,8 +5253,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add Primitive" -"\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add " +"Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" "Bij het opnemen van timelapse zonder toolhead is het aan te raden om een " "„Timelapse Wipe Tower” toe te voegen \n" @@ -5259,6 +5319,9 @@ msgstr "Speciale modus" msgid "G-code output" msgstr "G-code uitvoer" +msgid "Post-processing scripts" +msgstr "" + msgid "Frequent" msgstr "Veelgebruikt" @@ -6455,15 +6518,6 @@ msgstr "Printbed %d: %s ondersteunt filament %s niet." msgid "Generating skirt & brim" msgstr "Skirt en brim worden gegenereerd" -msgid "Checking gcode path conflicts." -msgstr "" - -#, c-format, boost-format -msgid "" -"Conflicts of gcode paths have been found. Please separate the conflicted " -"objects (%s <-> %s) farther." -msgstr "" - msgid "Exporting G-code" msgstr "G-code exporteren" @@ -7383,6 +7437,12 @@ msgstr "" msgid "None" msgstr "Geen" +msgid "Contour" +msgstr "" + +msgid "Contour and hole" +msgstr "" + msgid "All walls" msgstr "Alle wanden" @@ -7817,6 +7877,16 @@ msgstr "Dit is de snelheid voor de binnenste wanden" msgid "Number of walls of every layer" msgstr "Dit is het aantal wanden per laag." +msgid "Post-processing Scripts" +msgstr "" + +msgid "" +"If you want to process the output G-code through custom scripts, just list " +"their absolute paths here. Separate multiple scripts with a semicolon. " +"Scripts will be passed the absolute path to the G-code file as the first " +"argument, and variables of settings also can be read" +msgstr "" + msgid "Raft contact Z distance" msgstr "Vlot (raft) contact Z afstand:" @@ -8718,6 +8788,12 @@ msgstr "" msgid "Do not run any validity checks, such as gcode path conflicts check." msgstr "" +msgid "Normative check" +msgstr "" + +msgid "Check the normative items." +msgstr "" + msgid "Output Model Info" msgstr "Model informatie weergeven" @@ -8809,20 +8885,20 @@ msgstr "Support genereren" msgid "Checking support necessity" msgstr "Controleren of support is noodzakelijk" -#, c-format, boost-format -msgid "" -"It seems object %s has completely floating regions. Please re-orient the " -"object or enable support generation." +msgid "floating regions" +msgstr "" + +msgid "floating cantilever" +msgstr "" + +msgid "large overhangs" msgstr "" -"Het lijkt erop dat object %s volledig zwevende gebieden heeft. Heroriënteer " -"het object of schakel het genereren van ondersteuning in." #, c-format, boost-format msgid "" -"It seems object %s has large overhangs. Please enable support generation." +"It seems object %s has %s. Please re-orient the object or enable support " +"generation." msgstr "" -"Het lijkt erop dat object %s grote overhangen heeft. Schakel het genereren " -"van ondersteuning in." msgid "Optimizing toolpath" msgstr "Optimaliseren van het pad" @@ -9148,6 +9224,37 @@ msgstr "" "Wist je dat je meer wandlussen en een hogere dunne invuldichtheid kunt " "gebruiken om de sterkte van het model te verbeteren?" +#~ msgid "Start" +#~ msgstr "Starten" + +#~ msgid "G-code" +#~ msgstr "G-code" + +#~ msgid "Backup" +#~ msgstr "Backup" + +#~ msgid "Backup interval" +#~ msgstr "Backupinterval" + +#, c-format, boost-format +#~ msgid "The %s filament is too soft to be used with the AMS" +#~ msgstr "Het %s-filament is te zacht om te worden gebruikt met de AMS" + +#, c-format, boost-format +#~ msgid "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." +#~ msgstr "" +#~ "Het lijkt erop dat object %s volledig zwevende gebieden heeft. " +#~ "Heroriënteer het object of schakel het genereren van ondersteuning in." + +#, c-format, boost-format +#~ msgid "" +#~ "It seems object %s has large overhangs. Please enable support generation." +#~ msgstr "" +#~ "Het lijkt erop dat object %s grote overhangen heeft. Schakel het " +#~ "genereren van ondersteuning in." + #~ msgid "\\u2103" #~ msgstr "\\ u2103" diff --git a/bbl/i18n/sv/BambuStudio_sv.po b/bbl/i18n/sv/BambuStudio_sv.po index 51d5a88b59..4db1e9e5d2 100644 --- a/bbl/i18n/sv/BambuStudio_sv.po +++ b/bbl/i18n/sv/BambuStudio_sv.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-24 17:47+0800\n" +"POT-Creation-Date: 2023-03-29 14:51+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -291,7 +291,10 @@ msgstr "Rörelse" msgid "Height" msgstr "Höjd" -msgid "Add/Edit connectors" +msgid "Edit connectors" +msgstr "" + +msgid "Add connectors" msgstr "" msgid "Upper part" @@ -327,12 +330,21 @@ msgstr "Återställ" msgid "Connectors" msgstr "" -msgid "Remove connectors" -msgstr "" - msgid "Type" msgstr "Typ" +msgid "Style" +msgstr "Stil" + +msgid "Shape" +msgstr "Form" + +msgid "Depth ratio" +msgstr "" + +msgid "Remove connectors" +msgstr "" + msgid "Prizm" msgstr "" @@ -345,15 +357,6 @@ msgstr "" msgid "Hexagon" msgstr "" -msgid "Style" -msgstr "Stil" - -msgid "Shape" -msgstr "Form" - -msgid "Depth ratio" -msgstr "" - msgid "Confirm connectors" msgstr "" @@ -1330,6 +1333,15 @@ msgstr "Öppna nästa tips" msgid "Open Documentation in web browser." msgstr "Öppna dokumentationen i webbläsaren" +msgid "Pause:" +msgstr "" + +msgid "Custom Template:" +msgstr "" + +msgid "Custom G-code:" +msgstr "" + msgid "Custom G-code" msgstr "Custom G-kod" @@ -1339,6 +1351,9 @@ msgstr "Ange anpassad G-kod som används på det aktuella lagret:" msgid "OK" msgstr "OK" +msgid "Jump to Layer" +msgstr "Hoppa till lager" + msgid "Jump to layer" msgstr "Jump to layer" @@ -1354,17 +1369,23 @@ msgstr "Lägg till anpassad G-kod" msgid "Add Custom Template" msgstr "Lägg till anpassad mall" -msgid "Jump to Layer" -msgstr "Hoppa till lager" - msgid "Filament " msgstr "Filament " -msgid "Start" -msgstr "Start" +msgid "Delete Pause" +msgstr "" -msgid "G-code" -msgstr "G-kod" +msgid "Delete Custom Template" +msgstr "" + +msgid "Edit Custom G-code" +msgstr "" + +msgid "Delete Custom G-code" +msgstr "" + +msgid "Delete Filament Change" +msgstr "" msgid "No printer" msgstr "Ingen skrivare" @@ -1827,6 +1848,9 @@ msgstr "Ange ett giltigt värde (K i 0 ~ 0,5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Ange ett giltigt värde (K i 0 ~ 0,5, N i 0,6 ~ 2,0)" +msgid "You need to select the material type and color firet." +msgstr "" + msgid "Other color" msgstr "" @@ -2868,10 +2892,6 @@ msgstr "tillbaka" msgid "Paint Toolbar" msgstr "Färgläggningsverktyg" -#, boost-format -msgid "Shortcut key %1%" -msgstr "" - msgid "Explosion Ratio" msgstr "Explosions Förhållande" @@ -2893,6 +2913,12 @@ msgstr "Volym:" msgid "Size:" msgstr "Storlek:" +#, c-format, boost-format +msgid "" +"Conflicts of gcode paths have been found. Please separate the conflicted " +"objects farther (%s <-> %s)." +msgstr "" + msgid "An object is layed over the boundary of plate." msgstr "Ett objekt är placerad över byggplattans begränsningar." @@ -4345,6 +4371,9 @@ msgstr "Alla objekt kommer att raderas, fortsätta?" msgid "The current project has unsaved changes, save it before continue?" msgstr "Nuvarande projekt har ej sparade ändringar, spara innan du går vidare?" +msgid "Remember my choice." +msgstr "" + msgid "Number of copies:" msgstr "Antal kopior:" @@ -4498,8 +4527,8 @@ msgstr "Visa \"Dagens tips\" efter start" msgid "If enabled, useful hints are displayed at startup." msgstr "Om aktiverad visas användbara tips vid start." -msgid "User sync" -msgstr "Användar synkronisering" +msgid "Presets" +msgstr "" msgid "Auto sync user presets(Printer/Filament/Process)" msgstr "" @@ -4509,6 +4538,15 @@ msgstr "" msgid "User Sync" msgstr "Användar synkronisering" +msgid "Auto sync system presets(Printer/Filament/Process)" +msgstr "" + +msgid "System Sync" +msgstr "" + +msgid "Clear my choice on the unsaved presets." +msgstr "" + msgid "Associate files to BambuStudio" msgstr "Associerade filer till Bambu Studio" @@ -4530,14 +4568,33 @@ msgstr "Associera .step/.stp-filer till BambuStudio" msgid "If enabled, sets BambuStudio as default application to open .step files" msgstr "Om aktiverad, väljs Bambu Studio som standard att öppna .step filer" -msgid "Backup" -msgstr "Säkerhetskopiering" +msgid "Online Models" +msgstr "" + +msgid "Show online staff-picked models on the home page" +msgstr "" + +msgid "Maximum recent projects" +msgstr "" + +msgid "Maximum count of recent projects" +msgstr "" + +msgid "Clear my choice on the unsaved projects." +msgstr "" msgid "Auto-Backup" msgstr "Auto Säkerhetskopiera" -msgid "Backup interval" -msgstr "Säkerhetskopierings intervall" +msgid "" +"Backup your project periodically for restoring from the occasional crash." +msgstr "" + +msgid "every" +msgstr "" + +msgid "The peroid of backup in seconds." +msgstr "" msgid "Downloads" msgstr "Nedladdningar" @@ -4557,6 +4614,9 @@ msgstr "Visa hemsida vid uppstart" msgid "Sync settings" msgstr "Sync inställningar" +msgid "User sync" +msgstr "Användar synkronisering" + msgid "Preset sync" msgstr "Förinställd synkronisering" @@ -4981,8 +5041,8 @@ msgstr "" "efter att ha valt rätt skrivartyp." #, c-format, boost-format -msgid "The %s filament is too soft to be used with the AMS" -msgstr "Filament %s är för mjukt för att kunna användas med AMS" +msgid "%s is not supported by AMS." +msgstr "" msgid "" "There are some unknown filaments in the AMS mappings. Please check whether " @@ -5106,8 +5166,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add Primitive" -"\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add " +"Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" "När du spelar in timelapse utan verktygshuvud rekommenderas att du lägger " "till ett \"Timelapse Wipe Tower\".\n" @@ -5171,6 +5231,9 @@ msgstr "Special läge" msgid "G-code output" msgstr "G-kod utgång" +msgid "Post-processing scripts" +msgstr "" + msgid "Frequent" msgstr "Återkommande" @@ -6328,15 +6391,6 @@ msgstr "Plate %d: %s stöder inte filamentet %s" msgid "Generating skirt & brim" msgstr "Skapar Skirt & Brim" -msgid "Checking gcode path conflicts." -msgstr "" - -#, c-format, boost-format -msgid "" -"Conflicts of gcode paths have been found. Please separate the conflicted " -"objects (%s <-> %s) farther." -msgstr "" - msgid "Exporting G-code" msgstr "Exporterar G-kod" @@ -6738,9 +6792,9 @@ msgid "" "quality for needle and small details" msgstr "" "Aktivera detta val för att sänka utskifts hastigheten för att göra den sista " -"lager tiden inte kortare än lager tidströskeln \"Max fläkthastighets tröskel" -"\", detta så att lager kan kylas under en längre tid. Detta kan förbättra " -"kylnings kvaliteten för små detaljer" +"lager tiden inte kortare än lager tidströskeln \"Max fläkthastighets " +"tröskel\", detta så att lager kan kylas under en längre tid. Detta kan " +"förbättra kylnings kvaliteten för små detaljer" msgid "Normal printing" msgstr "Normal utskrift" @@ -7225,6 +7279,12 @@ msgstr "" msgid "None" msgstr "Ingen" +msgid "Contour" +msgstr "" + +msgid "Contour and hole" +msgstr "" + msgid "All walls" msgstr "Alla väggar" @@ -7650,6 +7710,16 @@ msgstr "Hastighet för inre vägg" msgid "Number of walls of every layer" msgstr "Antal väggar för varje lager" +msgid "Post-processing Scripts" +msgstr "" + +msgid "" +"If you want to process the output G-code through custom scripts, just list " +"their absolute paths here. Separate multiple scripts with a semicolon. " +"Scripts will be passed the absolute path to the G-code file as the first " +"argument, and variables of settings also can be read" +msgstr "" + msgid "Raft contact Z distance" msgstr "Raft kontakt Z avstånd" @@ -8522,6 +8592,12 @@ msgstr "" msgid "Do not run any validity checks, such as gcode path conflicts check." msgstr "" +msgid "Normative check" +msgstr "" + +msgid "Check the normative items." +msgstr "" + msgid "Output Model Info" msgstr "Mata ut modell information" @@ -8613,20 +8689,20 @@ msgstr "Skapa support" msgid "Checking support necessity" msgstr "Kontrollera supportens nödvändighet" -#, c-format, boost-format -msgid "" -"It seems object %s has completely floating regions. Please re-orient the " -"object or enable support generation." +msgid "floating regions" +msgstr "" + +msgid "floating cantilever" +msgstr "" + +msgid "large overhangs" msgstr "" -"Det verkar som att objekt %s har helt flytande regioner. Omorientera " -"objektet eller aktivera supportgenerering." #, c-format, boost-format msgid "" -"It seems object %s has large overhangs. Please enable support generation." +"It seems object %s has %s. Please re-orient the object or enable support " +"generation." msgstr "" -"Det verkar som om objekt %s har stora överhäng. Vänligen aktivera " -"supportgenerering." msgid "Optimizing toolpath" msgstr "Optimerar verktygsbanan" @@ -8949,6 +9025,37 @@ msgstr "" "Visste du att du kan använda fler väggslingor och högre gles fyllningstäthet " "för att förbättra modellens styrka?" +#~ msgid "Start" +#~ msgstr "Start" + +#~ msgid "G-code" +#~ msgstr "G-kod" + +#~ msgid "Backup" +#~ msgstr "Säkerhetskopiering" + +#~ msgid "Backup interval" +#~ msgstr "Säkerhetskopierings intervall" + +#, c-format, boost-format +#~ msgid "The %s filament is too soft to be used with the AMS" +#~ msgstr "Filament %s är för mjukt för att kunna användas med AMS" + +#, c-format, boost-format +#~ msgid "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." +#~ msgstr "" +#~ "Det verkar som att objekt %s har helt flytande regioner. Omorientera " +#~ "objektet eller aktivera supportgenerering." + +#, c-format, boost-format +#~ msgid "" +#~ "It seems object %s has large overhangs. Please enable support generation." +#~ msgstr "" +#~ "Det verkar som om objekt %s har stora överhäng. Vänligen aktivera " +#~ "supportgenerering." + #~ msgid "\\u2103" #~ msgstr "\\u2103" diff --git a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po index c51fab2238..8b9ac86a95 100644 --- a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po +++ b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-24 17:47+0800\n" -"PO-Revision-Date: 2023-02-24 10:40+0800\n" +"POT-Creation-Date: 2023-03-29 14:51+0800\n" +"PO-Revision-Date: 2023-03-29 12:43+0800\n" "Last-Translator: Jiang Yue \n" "Language-Team: \n" "Language: zh_CN\n" @@ -293,8 +293,11 @@ msgstr "移动" msgid "Height" msgstr "高度" -msgid "Add/Edit connectors" -msgstr "添加/编辑连接件" +msgid "Edit connectors" +msgstr "编辑连接件" + +msgid "Add connectors" +msgstr "添加连接件" msgid "Upper part" msgstr "上半部分" @@ -329,12 +332,21 @@ msgstr "重置" msgid "Connectors" msgstr "连接件" -msgid "Remove connectors" -msgstr "删除所有连接件" - msgid "Type" msgstr "类型" +msgid "Style" +msgstr "样式" + +msgid "Shape" +msgstr "形状" + +msgid "Depth ratio" +msgstr "深度" + +msgid "Remove connectors" +msgstr "删除所有连接件" + msgid "Prizm" msgstr "棱柱" @@ -347,15 +359,6 @@ msgstr "正方形" msgid "Hexagon" msgstr "六边形" -msgid "Style" -msgstr "样式" - -msgid "Shape" -msgstr "形状" - -msgid "Depth ratio" -msgstr "深度" - msgid "Confirm connectors" msgstr "确认" @@ -1307,6 +1310,15 @@ msgstr "打开下一条提示" msgid "Open Documentation in web browser." msgstr "在web浏览器中打开文档。" +msgid "Pause:" +msgstr "暂停" + +msgid "Custom Template:" +msgstr "自定义模板:" + +msgid "Custom G-code:" +msgstr "自定义G代码:" + msgid "Custom G-code" msgstr "自定义 G-code" @@ -1316,6 +1328,9 @@ msgstr "输入当前层上使用的自定义G-code:" msgid "OK" msgstr "确认" +msgid "Jump to Layer" +msgstr "跳转到层" + msgid "Jump to layer" msgstr "跳转到层" @@ -1331,17 +1346,23 @@ msgstr "添加自定义G-code" msgid "Add Custom Template" msgstr "添加自定义模板" -msgid "Jump to Layer" -msgstr "跳转到层" - msgid "Filament " msgstr "耗材丝" -msgid "Start" -msgstr "首层" +msgid "Delete Pause" +msgstr "删除暂停" -msgid "G-code" -msgstr "" +msgid "Delete Custom Template" +msgstr "删除自定义模板" + +msgid "Edit Custom G-code" +msgstr "编辑自定义G代码" + +msgid "Delete Custom G-code" +msgstr "删除自定义G代码" + +msgid "Delete Filament Change" +msgstr "删除耗材丝更新" msgid "No printer" msgstr "无打印机" @@ -1609,13 +1630,13 @@ msgid "Import file" msgstr "导入文件" msgid "Import model and profile" -msgstr "" +msgstr "导入模型和配置" msgid "Import profile only" -msgstr "" +msgstr "仅导入配置" msgid "Import model only" -msgstr "" +msgstr "仅导入模型" msgid "Accurate" msgstr "" @@ -1635,10 +1656,10 @@ msgid "" msgstr "" msgid "Importing canceled." -msgstr "" +msgstr "导入已取消。" msgid "Importing done." -msgstr "" +msgstr "导入完成。" msgid "" "The imported SLA archive did not contain any presets. The current SLA " @@ -1783,6 +1804,9 @@ msgstr "请输入有效的数值 (K的范围为0~0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "请输入有效的数值 (K的范围为0~0.5, N的范围为0.6~2.0)" +msgid "You need to select the material type and color firet." +msgstr "" + msgid "Other color" msgstr "其他颜色" @@ -1903,8 +1927,8 @@ msgid "" "process. During this time, the indicator may not represent the chamber " "accurately." msgstr "" -"注意:当盖子打开或更换干燥剂包装时,可能需要数小时或一晚才能吸收水分,低温也会" -"减慢这一过程。在此期间,指示器的数值可能并不准确。" +"注意:当盖子打开或更换干燥剂包装时,可能需要数小时或一晚才能吸收水分,低温也" +"会减慢这一过程。在此期间,指示器的数值可能并不准确。" msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -2248,8 +2272,8 @@ msgid "" "Spiral mode only works when wall loops is 1, support is disabled, top shell " "layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "" -"旋转模式只能在外墙层数为1,关闭支撑,顶层层数为0,稀疏填充密度为0,传统延" -"时摄影时有效。" +"旋转模式只能在外墙层数为1,关闭支撑,顶层层数为0,稀疏填充密度为0,传统延时摄" +"影时有效。" msgid "" "Change these settings automatically? \n" @@ -2326,7 +2350,7 @@ msgstr "" msgid "" "While printing by Object, the extruder may collide skirt.\n" "Thus, reset the skirt layer to 1 to avoid that." -msgstr "" +msgstr "逐件打印时,挤出机可能与裙边碰撞。因此将裙边的层数重置为1。" msgid "Auto bed leveling" msgstr "自动热床调平" @@ -2780,10 +2804,6 @@ msgstr "返回" msgid "Paint Toolbar" msgstr "上色工具条" -#, boost-format -msgid "Shortcut key %1%" -msgstr "快捷键 %1%" - msgid "Explosion Ratio" msgstr "爆炸比例" @@ -2805,6 +2825,12 @@ msgstr "体积:" msgid "Size:" msgstr "尺寸:" +#, c-format, boost-format +msgid "" +"Conflicts of gcode paths have been found. Please separate the conflicted " +"objects farther (%s <-> %s)." +msgstr "发现gcode路径的冲突。请将有冲突的对象分离得更远(%s <-> %s)。" + msgid "An object is layed over the boundary of plate." msgstr "检测到有对象放在盘的边界上。" @@ -3221,11 +3247,11 @@ msgstr "" #, c-format, boost-format msgid "A file exists with the same name: %s, do you want to override it." -msgstr "" +msgstr "有一个同名的文件 %s。你想覆盖它吗?" #, c-format, boost-format msgid "A config exists with the same name: %s, do you want to override it." -msgstr "" +msgstr "有一个同名的配置 %s。你想覆盖它吗?" msgid "Overwrite file" msgstr "覆盖文件" @@ -3248,7 +3274,7 @@ msgid "Export result" msgstr "导出结果" msgid "Select profile to load:" -msgstr "" +msgstr "选择要加载的配置:" #, c-format, boost-format msgid "There is %d config imported. (Only non-system and compatible configs)" @@ -3431,10 +3457,10 @@ msgstr "未找到打印机的局域网地址!" #, c-format, boost-format msgid "You are going to delete %u files. Are you sure to continue?" -msgstr "" +msgstr "你正在删除%u个文件,你确定吗?" msgid "Delete files" -msgstr "" +msgstr "删除文件" #, c-format, boost-format msgid "File '%s' was lost! Please download it again." @@ -3706,7 +3732,7 @@ msgid "Open Folder." msgstr "打开目录。" msgid "Safely remove hardware." -msgstr "" +msgstr "安全移除硬件。" #, c-format, boost-format msgid "%1$d Object has custom supports." @@ -4006,10 +4032,10 @@ msgid "" msgstr "该3mf的版本%s比%s的版本%s要新,建议升级你的软件。" msgid "Invalid values found in the 3mf:" -msgstr "" +msgstr "在3mf文件中发现无效值:" msgid "Please correct them in the param tabs" -msgstr "" +msgstr "请在参数页更正它们" msgid "The 3mf is not compatible, load geometry data only!" msgstr "该3mf文件与软件不兼容,将只加载几何数据。" @@ -4213,6 +4239,9 @@ msgstr "即将删除所有对象,是否继续?" msgid "The current project has unsaved changes, save it before continue?" msgstr "当前项目包含未保存的修改,是否先保存?" +msgid "Remember my choice." +msgstr "记住我的选择。" + msgid "Number of copies:" msgstr "克隆数量:" @@ -4366,8 +4395,8 @@ msgstr "启动后显示“每日小贴士”通知" msgid "If enabled, useful hints are displayed at startup." msgstr "如果启用,将在启动时显示有用的提示。" -msgid "User sync" -msgstr "用户同步" +msgid "Presets" +msgstr "预设" msgid "Auto sync user presets(Printer/Filament/Process)" msgstr "同步用户预设(打印机/耗材丝/工艺)" @@ -4375,6 +4404,15 @@ msgstr "同步用户预设(打印机/耗材丝/工艺)" msgid "User Sync" msgstr "用户同步" +msgid "Auto sync system presets(Printer/Filament/Process)" +msgstr "自动同步预设(打印机/耗材丝/工艺)" + +msgid "System Sync" +msgstr "系统同步" + +msgid "Clear my choice on the unsaved presets." +msgstr "清除我对未保存的预置的选择。" + msgid "Associate files to BambuStudio" msgstr "Bambu Studio文件关联" @@ -4396,14 +4434,33 @@ msgstr "使用Bambu Studio打开.step/.stp文件" msgid "If enabled, sets BambuStudio as default application to open .step files" msgstr "开启后,将缺省使用Bambu Studio打开.step文件" -msgid "Backup" -msgstr "备份" +msgid "Online Models" +msgstr "在线模型" + +msgid "Show online staff-picked models on the home page" +msgstr "在主页上显示工作人员挑选的在线模型" + +msgid "Maximum recent projects" +msgstr "近期项目的最大数量" + +msgid "Maximum count of recent projects" +msgstr "近期项目的最大计数" + +msgid "Clear my choice on the unsaved projects." +msgstr "清除我对未保存的项目的选择。" msgid "Auto-Backup" msgstr "自动备份" -msgid "Backup interval" -msgstr "备份间隔时长" +msgid "" +"Backup your project periodically for restoring from the occasional crash." +msgstr "定期备份你的项目,以便从偶尔的崩溃中恢复过来。" + +msgid "every" +msgstr "" + +msgid "The peroid of backup in seconds." +msgstr "备份的周期" msgid "Downloads" msgstr "下载" @@ -4423,6 +4480,9 @@ msgstr "启动时显示主页" msgid "Sync settings" msgstr "同步设置" +msgid "User sync" +msgstr "用户同步" + msgid "Preset sync" msgstr "配置同步" @@ -4829,8 +4889,8 @@ msgstr "" "后重新切片。" #, c-format, boost-format -msgid "The %s filament is too soft to be used with the AMS" -msgstr "%s耗材太软,无法与AMS一起使用" +msgid "%s is not supported by AMS." +msgstr "%s耗材无法在AMS中使用" msgid "" "There are some unknown filaments in the AMS mappings. Please check whether " @@ -4943,12 +5003,14 @@ msgid "" "0 top z distance, 0 interface spacing, concentric pattern and disable " "independent support layer height" msgstr "" +"当使用支持界面的支持材料时,我们推荐以下设置:\n" +"0顶层z距离,0接触层间距,同心图案,并且禁用独立支撑层高" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add Primitive" -"\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add " +"Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" "在录制无工具头延时摄影视频时,建议添加“延时摄影擦料塔”\n" "右键单击构建板的空白位置,选择“添加标准模型”->“延时摄影擦料塔”。" @@ -5009,6 +5071,9 @@ msgstr "特殊模式" msgid "G-code output" msgstr "G-code 输出" +msgid "Post-processing scripts" +msgstr "后处理脚本" + msgid "Frequent" msgstr "常用" @@ -5437,7 +5502,7 @@ msgid "Objects list" msgstr "对象列表" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" -msgstr "" +msgstr "从STL/STEP/3MF/OBJ/AMF文件中导入几何数据" msgid "Copy to clipboard" msgstr "复制到剪贴板" @@ -6101,15 +6166,6 @@ msgstr "盘%d:%s不支持耗材丝 %s" msgid "Generating skirt & brim" msgstr "正在生成skirt和brim" -msgid "Checking gcode path conflicts." -msgstr "" - -#, c-format, boost-format -msgid "" -"Conflicts of gcode paths have been found. Please separate the conflicted " -"objects (%s <-> %s) farther." -msgstr "" - msgid "Exporting G-code" msgstr "正在导出G-code" @@ -6900,6 +6956,12 @@ msgstr "打印外墙时随机抖动,使外表面产生绒效果。这个设置 msgid "None" msgstr "无" +msgid "Contour" +msgstr "轮廓" + +msgid "Contour and hole" +msgstr "轮廓和孔" + msgid "All walls" msgstr "所有墙" @@ -7288,6 +7350,19 @@ msgstr "内圈墙打印速度" msgid "Number of walls of every layer" msgstr "每一层的墙层数" +msgid "Post-processing Scripts" +msgstr "后处理脚本" + +msgid "" +"If you want to process the output G-code through custom scripts, just list " +"their absolute paths here. Separate multiple scripts with a semicolon. " +"Scripts will be passed the absolute path to the G-code file as the first " +"argument, and variables of settings also can be read" +msgstr "" +"如果你想通过自定义脚本来处理输出的G代码,只需在这里列出它们的绝对路径。用分号" +"来分隔多个脚本。脚本将被传递给G代码文件的绝对路径作为第一个参数,设置的变量也" +"可以被读取。" + msgid "Raft contact Z distance" msgstr "筏层Z间距" @@ -7665,7 +7740,7 @@ msgstr "" "图案为同心。" msgid "Rectilinear Interlaced" -msgstr "" +msgstr "交叠的直线" msgid "Base pattern spacing" msgstr "主体图案线距" @@ -7715,6 +7790,8 @@ msgid "" "support customizing z-gap and save print time.This option will be invalid " "when the prime tower is enabled." msgstr "" +"支撑层使用与对象层独立的层高。这是为了支持自定义z-gap并且节省打印时间。当擦料" +"塔被启用时,这个选项将无效。" msgid "Threshold angle" msgstr "阈值角度" @@ -8025,7 +8102,7 @@ msgid "Invalid value when spiral vase mode is enabled: " msgstr "旋转花瓶模式下非法的值" msgid "too large line width " -msgstr "过大的线宽值 " +msgstr "线宽过大" msgid " not in range " msgstr " 不在合理的区间" @@ -8043,10 +8120,10 @@ msgid "Export slicing data to a folder." msgstr "导出切片数据到目录" msgid "Load slicing data" -msgstr "" +msgstr "导入切片数据" msgid "Load cached slicing data from directory" -msgstr "" +msgstr "从目录导入缓存的切片数据" msgid "Slice" msgstr "切片" @@ -8081,6 +8158,12 @@ msgstr "" msgid "Do not run any validity checks, such as gcode path conflicts check." msgstr "" +msgid "Normative check" +msgstr "" + +msgid "Check the normative items." +msgstr "" + msgid "Output Model Info" msgstr "输出模型信息" @@ -8172,16 +8255,20 @@ msgstr "正在生成支撑" msgid "Checking support necessity" msgstr "正在检查支撑必要性" -#, c-format, boost-format -msgid "" -"It seems object %s has completely floating regions. Please re-orient the " -"object or enable support generation." -msgstr "似乎对象%s有完全浮空的区域。请调整朝向或打开支撑生成。" +msgid "floating regions" +msgstr "浮空区域" + +msgid "floating cantilever" +msgstr "浮空悬臂" + +msgid "large overhangs" +msgstr "大面积悬空" #, c-format, boost-format msgid "" -"It seems object %s has large overhangs. Please enable support generation." -msgstr "似乎对象%s有很大面积的悬垂面。请打开支撑生成。" +"It seems object %s has %s. Please re-orient the object or enable support " +"generation." +msgstr "似乎对象%s有%s。请重新调整对象的方向或启用支持生成。" msgid "Optimizing toolpath" msgstr "正在优化走线" @@ -8485,6 +8572,45 @@ msgstr "" "提高强度\n" "你知道吗?你可以使用更多的墙层数和更高的疏散填充密度来提高模型的强度。" +#~ msgid "Zoom to mouse position" +#~ msgstr "放大到鼠标位置" + +#~ msgid "" +#~ "Zoom in towards the mouse pointer's position in the 3D view, rather than " +#~ "the 2D window center." +#~ msgstr "在3D视角放大到鼠标位置,而不是2D窗口的中心。" + +#~ msgid "Add/Edit connectors" +#~ msgstr "添加/编辑连接件" + +#~ msgid "Start" +#~ msgstr "首层" + +#, boost-format +#~ msgid "Shortcut key %1%" +#~ msgstr "快捷键 %1%" + +#~ msgid "Backup" +#~ msgstr "备份" + +#~ msgid "Backup interval" +#~ msgstr "备份间隔时长" + +#, c-format, boost-format +#~ msgid "The %s filament is too soft to be used with the AMS" +#~ msgstr "%s耗材太软,无法与AMS一起使用" + +#, c-format, boost-format +#~ msgid "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." +#~ msgstr "似乎对象%s有完全浮空的区域。请调整朝向或打开支撑生成。" + +#, c-format, boost-format +#~ msgid "" +#~ "It seems object %s has large overhangs. Please enable support generation." +#~ msgstr "似乎对象%s有很大面积的悬垂面。请打开支撑生成。" + #~ msgid "" #~ "Spiral mode only works when wall loops is 1, support is disabled, top " #~ "shell layers is 0, sparse infill density is 0 and timelapse type is " @@ -11537,9 +11663,6 @@ msgstr "" #~ msgid "choose a directory" #~ msgstr "选择文件夹" -#~ msgid "Post-processing scripts" -#~ msgstr "后处理脚本" - #~ msgid "Print speed override" #~ msgstr "覆盖打印速度" @@ -12182,8 +12305,8 @@ msgstr "" #~ msgstr "正在准备设置页" #~ msgid "" -#~ "You have the following presets with saved options for \"Print Host upload" -#~ "\"" +#~ "You have the following presets with saved options for \"Print Host " +#~ "upload\"" #~ msgstr "您的以下预设中包含未保存的选项“打印主机上传”" #~ msgid "" diff --git a/resources/i18n/de/BambuStudio.mo b/resources/i18n/de/BambuStudio.mo index 688d6c5b3af085138bd56d3ff00ecd9f7fb9f1e1..945cfbc6d28e562cd77777f0b72e20ec23220649 100644 GIT binary patch delta 47754 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≪iRxstkhdYua7?mYd`V!PVI|ZZ2=B&8HkZalG>V7LQ@B15p4n{vY51AJ z>l%3ehp?w0B-k0$}EV{(s4#=`xtwsPxN<~dX~ab>aDQ$ z&P-nkFiqZ(FLiDi{)~K>I1BGzu}LfQpx5`qs29g2^9sJv!`~C5k%;>(?ZQ_Dd3MC> z<7dNaOFzb+tlvQIcJ;&NnuNv#vzNo})t}&yyJGGH2M^%M+Q1jU@_(UrGLWpI#$kl+ z{213SizhEY{em;J1J>K3uVLQjChr+|Bg@B`+2w#@dWGrDRX5N- zq^_l3->&gyb88!1so0KCI<9SnSd%C7kNIcH<8z9WiA}^hUY$z_9~57Xg`eUT(R-L@?Gn0m;rpX;x_AuT zTzgJ{H7e-mW(p&nt8p(N*=a<&6{MNQ7QV?JhJS3~8$4P1YK|wxvf@=l$BDl2H?u{& z5jXvNI9Xdr_XYI<@n_ibBOb1Q`m6o|%m;y+fQx|pJZZ8j;?iPIt zdsW?*f1Pj#CmYBYnm;oZJ^_CSKAqS0kR|B7mi~CUSfheCHh;`-8h~!dqs2ek0KKAo z0AM0cY0FAkFwZfC)HU^o(K}uLNlUiM)4K}C$-9Qwg`xWlEdBh;H{XEedlLK-6o`T~my-{(%{n<|^Rzps<2Vr>RslMEjR|vF@fp66laW)dXP5-D6PTb@4|3v(vba?PP zsNZya`U;RLVyDoqC%@0^!t{<>dCg(*G^5pOy3v!SD137`OoTRR~Ql zpymJAIeNp16~%j%-ZydhII~sZ6KGA)s~q|haeLWOH2dk~!=x%{BwGXg5&4_Ac9o&~ z)NT0ldL`AZh`xlkPu#0F)$A^QS$ZY${(&=6o~$*_Qhq@1NAYj)8S-SWrr-aY#-bV; z7Xw!jeu~)F@?;;0z17?GrxR%9sgjk|Ybx)dw^n@vyp3M6Z!M@QU&kNRPc{ng?~y-8 z^Bno1^y_~Fk!A*#A*2ue)C6u&&kb@Z{nPY65j#fj#(26has2K2pV4_jeO^3W&%hRn ze}_FCGv~-l=yefuw^>$L^1tj5(r55tz`F8!4k+&6@AU>-I9V)hS#k4^!0xo5iFoLL ziAC>=cz{$kxBvgCWem?J^a|1WM0Sev;z<(ebc>U1=3`-N#1;56#UARZgj+gtnLJrb zdP~h56?1pd{1v|k>`i%X-2DA#STf!4I?bZU`vHgK$>ymC609Jfq+d?|!@wHrU#M3r z7AAi6z#3VUtWN$CKe-*V5Y}1D+8A}U^!9GzfYn4+Ltf<_;^G?+R;nK(b~JpW{1}Ih zR=0|!Yt_xo&x3tIYq|wH^t#Kh;UCcW2wqv7XYOg*o%DN(&+^=Zez+VV*-gB0bUC?A*`+Ci}^B3Ux!`mxJ$%j zQ_`>h#g<&E*b>4Y5ZQ|SIZxI#mZW?NZf9ca^{&Ogh0w7Cn*_Hw&ItKFSRb#_FSyB` zz^{b6QvWgedpIL`i}dbLHN*|#qd^{N;OV$94G)ig%KODJ*E%HGb!oZyD2+P3C^8?AGZ7r z{ev-=IQ4OQ2i`u8Yi?1c;QUpr8h91>?+)#s{``N$@JL0^q{3Re`ii)4y?(MKamWh& zE8%;@ImAxUe}~w`IQ4N$2XC~xw1bjer1y(B7;gl>$$VGGoW;|(vuAv3dFDf;&ww`* z9)pnVHw#V{Z-t)_hrABo3Lg_s@(sKKJfl8?#&a~@Qg07_g396#HTS4uF-{-Y)p(cc z=hoD$4?M%Qg?N2H*7_hPyFl*_3&zVYHvCVqj^SH)vfpUjW41qDjhLSi2PXV@*x2ar zuxnQwcXswuy^m=Y=C32q2Hs@&lUSYvlI{FMy)6V=IHE-XCI81?>Fhp&+X3$`dV7!H z42uK4Kl;Ca{$#o%J!7y+IwZYrVO1>{8c&+-9e@|pE1hkKi}Zds+m4?W{jr`rYs(#S z9-kVA568>@1ZVkZ>`o2#nnPCeyX4jR4Y9nP{LIM5Shk5@5l@<9_9ahMU$29F7tLxk zk~MNfJ##Dg8^M3C0LtW6NBUVY9k35!Cy~4556EkYzr(A*ClRS7KT*GBynG*6QU|AT zELsjb5mpcXL3v+s0#CM^uZ#z5h@XR3JNxmUlCDlxUL4A&1hGA0LyOzQ!uRz1sQam> zSTI_i>>+uwdZF`+cpoe;`j0v^SrPSjpyY;eRr=CigS|7$m1it{=-Zx-Kcy0^Gq+=O~Qd;?E^^QcDUb^a}^ zf^Dl~V>|H&$}7#C?-Ayjn-&`zn0pGgh95B3Jg#q6a7MdK9Rqp5OT{DY9>pC7l9eL7 zfnZadvkCra;a0t5?Lu%B?)B=jyyK*tr}F>n#mu$Xtuf|6OPbyq?EFazjj5LB?I|{a z7mr6;tM?0EkMpwGed5*P`7Zr34YO&%9V}h}f0G~7FKb7s?B7*hQvB7>1%Q(g&Q@tQ@qg?8(Pjjm`p+MM4>7x$<`SN@rSe+o_o{D!S9ywL=fvyVG?q`Y z_%Q!HguBa=t-)_C7A3O4%(B2M(`q02Kvv+VsB4*P25NZ4Yt> zy+QKze4sp84$e4&kH>*4qd!MK*$=Q?vE&7HGxd#eY=1KY@jg}G2%9fHCmw5O?w})H zrWvkU!w(|7Z=i-H|CA@&gLeX~AK|*O{8)7Z*j0KD$5XGv?~_0A-yhmIpeSy#LAaA> zoyAX2Z~wOeeGR|OYw+WE56jyib`sxFf69AVdWK%I^UN$QNd0>q{-6%=etLPlkzS?f zCECe!ZjT3@!hQ3unoy`$ a`Mi0H3r!rH*Pu$_u_g10)GOTo#{U4%JU&?f delta 48451 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 RIEoA62C$ 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 K{?zqY|9=8r*ueS# diff --git a/resources/i18n/es/BambuStudio.mo b/resources/i18n/es/BambuStudio.mo index 12577cd8d3b8fbab186c262ebd10294f2c2088f3..294906a2133ac7692f8127bd680838fd1766b536 100644 GIT binary patch delta 49365 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 P>ukI;U~hfSHQx1K$)1Lg delta 49875 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 diff --git a/resources/i18n/fr/BambuStudio.mo b/resources/i18n/fr/BambuStudio.mo index 7de79e2f2d3ba9b11d241ddbb2fde8c37ba7d368..be805ea50d1c8b920bb8d8569f5302c8c454c687 100644 GIT binary patch delta 47810 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

  • {o4QO6~K(BibGLDn-_KRl|rrR8mOK&x9L4m4IGYY_*m?W({0?B)07iv zO^aF!*-;J6hpqyJY(jBVMP*QPSsOJ}E~-H@@h<+1s(4~9bNvU@eQQwLbQfmF-!Tkd zq8gY!x49mM8oB(r+5Z6qDv_W$uZn6=NBjZ1;TrVkF&{8~#R|m#vGG!Qb%ygr6}4-& zV`U7?$4F9eBUD4$=J$C&*qn^2xNHG45)BHl|J9QgBxsSfNA2G+sG*;a+68M+Bk&ul zr>Aff-ayTDyMiWPKhzXOq0WT`7=$}e^<2eq_%|wFSGSN^^}|pFO+~eE32G#^pw`4r zR09rUIy{d$LSLg+cbvke0U50YF^Kf4sPej^@(o8FK(jD2x`zp9n>|JC^Y}%~ky-}x z6YqiQ@z1DTvKh5a_u2RvRKu^MM(!DEhVHU0qgAbt=2=R5j%^@_X;(a{t{+UB}a8A1M2=FsOx1gH`YTf%F!52 z`~O!0+LxPA8TX*J(P>nVuHq_ugjx$TN}7XY394r+P*buQHPnY~`We)a->~u5sEU21 zOnNxFx}g*StE_Mm1$172DwH;OQ2~>}7qZ;rDwfbY1Gpjp2s)xBy_fXh=3OImzN}WVie9n3ca}s}sdRV0|Zz{-$x-T4c zlov#mR|LIPk6KgpPz`B~>PSzdfvz)#fELRXY=JXT6}(3k{24Wbu`2kSMwl8kGQDvF zMxhEURnhdUp0%yDk98DkYNuOQd$Rxb+l0%gMfC#1Fli;TcuHY7@iwSu#1zbmzoPPA zwtlt-RW|8m@dMY}p?co3im`{)mD>N420uS?H`dP9L0FG` z6Hrrl6E(8;P;23-jsJrh!LR6Qs8duk329J^BOhuzmBpsm95uwdP$O{KUVn+&R)N(` zkMrRt;`LGa>(nq0s}88OFdEgMS*SI!um<~IE%}86dB}R*W_XJlnP@dlk20XvL}t|L z&5bHB5_N)BL48K7i|TPV)X?`wjmQ|(?wDxPr`BZu>qJ{bf?R`o_-sS1{wt^(?%V56 za60k#_WJj=%-Wc1Jz{-p%~acL=bEUFv_my?IBNTjcL}J)OHeJ|h06Fl>M3>$b;B!E z&p)B^#jIm?Ng`AOlcDmbMh$%!7Q|Ahk?N0n_(Y+$=PoRX?m+^Yi|BRDN2esHZPE;N zV;|JWj6+pC9o3KpsHfmc)LJ=$+NO6<4SI(<4?ba4{EE7-YCW^78X#-Ubp{d8P)tC5 zB3X*+@ln(bXHZAybznj4s41$3YFJ~`$=L?g!-1%Vj6kiCF{pYbp*pk-6X^5* z1_By^{TPIQqAGrgS@1Ke2bmlAyx&^siT88H6nkYrXcz^#t_tymqqosJodn9 zsQY$fF+64C@td&!wP-RBkh!rFmPYk_HEIof@?k+tsk?15iUc7S*#= zHogbdz+0&M?xW6yx2SRxw>Be_1~o;wkp{X>egZ>DD34kT2X(>6pKP`9IR}XsZfl16 zE2^Lb?My`}QB#l}HRL%_6_>TwYoSK40qVPD8`PQ_jyZ7whHL+yAfO@th^ioZdov<| z*5s(3rbjKJyr_I7P(7}I8lh^aZPyRIMTnY;@30h3!rFKewfZx5;E2}#uR%bM*)gaV z-odiy?`T?H0ks|5V1A6k%=jCs=l4-P`iwgB!#kPX(gt%7pM?$ZcU1liolOHG(A8tN zB?0wd0BSKULG^GmYKZrsM(8AJ1TLW#*B#WVev2CFFQ}1<+r{UU!wjgQZ;KH)0(HJ@ zv1aVb{#St$yPAq-;aTQ>1*+ho-F;4d9F4{C8fwVX^e_zxw&uV|q!-2uco>)B!f(yj z^m09Y-tQ0mfof=zUZ$Lmz1aUXN$5_37SCR+iYHJ#PSe|Lm&~Y!R!8lQ#;B?2h6$RxCC@?Y)4i20#(6B)DXw%YepswYDB^?4D(?H zY>t}KWvKi+QB!vu)uHpKhTO)T_!iZG4gE}c?im8Q@d{?a$M`KK?Qe!^G^*lhsK@IZ z)SCGf^*P}PYO&rxic^7pbhrPEpVxl^zKm2kv zWI;9|7v>^f(%Kz$fGn^cN6q<1R09(aGw}i#O1v7X0liV@z$nzz%t8(Quc-RASPuJ$r*XI{m}V!zK_lgn3Z;3Zp8jgz8yid%Y!U(RD=id?c!z`KUQxfx2%8 z>LGS)I6YCzo{=Emplj6{Q&Drf9tYy@SQE=kFkc|1 zp+@2qs-d?~1wKN}^*`1xsPdylnZ=eK)qujN2G@(S-~Zc^paO@WTK+w13g)3c5iQ1? zxEEE?GgQH!P^&xnL^CoOQTYp?rlKxtZ45=_pMsi#Rj8x=@I>~%hW;K2+P4WNnUP43 z)rnU{t=2hM0T-is{1BD@74FA??@jy=YE7I&b>K0oAumuPlV-AMNU*i2OF$Xxp$cq_ z>QP5*j(u<>p2PA!u1_&P<5@J-6!;D`$DgqP#++szIwer)4N&E^#KPFs#+RYimb-y~ zcO;^Q_81PqOE$g14`!}9pz`&{W;hO&|30c`Z_s--pbnVC)6MoQfx52}dPgb->4CNgX&1YLesHAs1a(7+Lrwmvj26%coHp6Fj> z7FAzV1;bJKCZYE8G}K(LM>S}#^$4m1r;)*NF5*q%eU`Xpjv6dAL(>ln( z^iO8!yQ6yC4^`0^RKusEI`T7W5pKn5c-~$Q`Pp30kIG*GwYVF)HenI&BVj#iXnHR* zi*F2OBYp`rhyLYet>i=Pmg=Z&*8w#GE(YOz48=XDwRP9VeJjinoE3HOxse3a@-C>= zITY2iX{c?o2y@^T8^43ah=0TySZJmBy}z-j{7F`s3bUaa7Kv)uH&_w}qSnNAvHVuPtGioF*pcbERjrjQD~USzi*>uqLQ{ zJy8uChHLgM+?`J6>~ z9)q#}uVzim#;(M-;uH*B&of5*e=7kEWy}pe?{7jiz_G;dU=ViOXtv$=Se*DdQ~^mg znU7vSVNK%qP$N`mv-!=*R;ca03-{nd)YPrq;`4rs{vNtog)O)GyuY`z68jTRwT+(z z`#6A5tNGe?^J_UDQFGUShxzH%FQ`R%1~te2oo2)`VhHj27=eSZ0ItK#cn^ep;^d?x9_+o5@&#(~IKFI#BPGG`8vt2HuGWrggGrT&kAU+XiW5M6er{&YA#rYPs z*is!f+bIky5wC;Ve)F&n9zd%!khW$9>LL;?1xWrZ{1CK|_p9+-*mo1c4sd2G^n% zQPPv<#uC_o_&Zd-8mG(wG6~NSUx`O>*q=UUFIGP7b8cYVGiC%HqtcU{HT(Z8s+^?f zygzMsojL?GS?sgW&{IK&x{rrUHiW+fdCRZqrOmdLp?kOpw8+Ms0K|#t?JfS%t<*Gb%f4Cr608E z4^i9hE2^UKtEK^YtVL1fmcy9Z|Mdyz^L#VZ$KzHu!%$R1zDJ#SGf_wMGSrE-6IIY@ z)MNE;8-Is731eL|=}9pj@vNxDnjbY%70``NpaB6D)D(3@c0-NCU{pb4Pz{-eTE%lw zQ}P#TXwzIb_h-f!#0#JvPQ_6bH$aus29>{ujSsxe{#VA)Bpb)lm1R0Bh9n>7%D%2yhFSOqib`CpAd zauU8pt?IF;isz%IU<0bhJ1{FAz)*aGnyRFCOoLLR8jt~1P7&0(QWKSb9%}U;K%JoH zF{bu^!n@`|N^5r1QCtkQ9UG$>&=<8RUDSxoK<$#BQ62adgYYnB#0RJb#=B=ak{DG^ zYFv+*Fpu{Cc>*%leV_9ij>YnfQI!Wi=M?d&56$0PX#L3i8E%=!<|)?;Rl#x8h@HWd z+;<-}a=xc#WMZSHE)caH)1pQw8@d{jk_5D$YoUf}A}W0&>L-|oP&fRAn)^4H3qRO+ z_Gjh*%Y_<|eAp68U?eWYW_Sk&VB~Y3_m@$3KWG1kkWl)Cc{sGgHpG8M6%_ZSc{(OX z?SeXZ2HT-lZ;@A~L6cC6YZ|JD^H3wR61BV5p*pn1dIZ&>E3aI$&0dh86EN;;Gv{eh z6&6AbWffF`bx;L0LJfImdwm$Pnw_zzwX+(vR*s_XyM;k`-^OFVG36w138>^KZn;VSET)I)5Wbr-7QeW(#UfU58q>b^fs+;uM63)k$0Tc~aF z07LL4mc=HPru)X;@;cKs*H1kuIp~E^0(3p(Y=s`wf)YcI(8d%K0LwX z+V=@Rm=$4L!9J` z`Iegu8xe1Ys&6amTsiTD{jV0@BS8&#gq83ks)BM~O@)(DQ*sfty^_*DRhSob=9fg> z-xxKOolr;eB-FX^6RP61sQd>}BX)zorsm!FfCR1f_trSR0B`8iSc6e>p9OVe0h?YD z^%N|J1F;sW=f|ukP^EhANNR&p6nA?DWTGAdh=ij0hnTz^j zG6l8RPGC=bidv*CV+44MuQyg9J{UDZhpiV-=f+*^hXFAIyl25cTugiqGIIR>M=Vod zH`F#7jvC@9R70ktR{1g;UyIt$`%wALp^oC~s3Z3kszY&Oo1P{^l^cd?PytlF+L%_) z-A)8F_hV2!n~5rL6)NLi?2H#NJx0bcwnjB%1S$83^%hO##HOWGhzZL5>00xBml1=dA1xHGoGk(dwf zS<@sn4X=SsNS}nd{}F1c-k?^0oMi0(HUv^9GyBp-&1n>BH7`URBx_MO9@O9d<2FNUyW=R=TFo_ z=NhWO+o-kk4%LuP7>w~#ng-`WjZ`G6;-;uYJqUHey3+{!N#MG@ur5`A_pSD@^*J`? zddk!R-j7;(p+@8|s%L*;4}4(L8>i8>;vB&pI0<#|R8DKAwmNDgM`2d&|Jej`k+2`t zvsb8n`T>J5dAb1a=~oc72y0~P%mLnSwPXkl@P5Ak4mWXqah3q@ zr)Leb26%rBH(9m-?=Kt;cYc>=9vhJGHZz_q9YW;1HH>_&CyD5?SH?DYpW{Y5VJ zzgF=l5;T`Fa+`Pp%s@O9s;7lf4XKD4nQEvCTA}8+8)}=4#?-g~b^msoei_w(SE&19 z<}qs|iAz9>D->5@F;qeKQ3d<*ngUaydKiI0SQJ%36I25Sqw-HcjmQ#Ag`2D=QH$~c z=D|<68{M4w0=(ZudV*?U<_L3u6h;l@H>d`-Mh*P{)Rc`zjo1&^73X0X#?2q#{ax^a zSc3Ratb@ByQ<12E=}1~+L|rEn0acvUS`2kk)x`bS4fV9kThPq;FQ`Se8+8!f#B%r# zs>dY?ne(I}W+y%t_0eks>iRa+NSwiH+W&V6j36PRaDeyeb_=S&uc!*j6)|((1ih0D zbCW&^BXEyRe~p@=L`BUAr9_QjC~m-7~Q`cJ5#-Hci@M{N3EsC>^+4fqGOOTLz7|0`qa zGUi~&jX}g~U=Hko+Me@Ki*Gq<=r*AmwgWW`q#KsB&QdDHWD)&ZzR9fd)- z5cSO1XZ_Q9(G;`gb%S8rm1KuXo$M61FE6j zumujlOL!S|zHF>y^1H_g=y7`u)zkN=?H5?ttp0G+wkeA`0h^-cvK7Y1PPh>JqwY^t z#SC>$)Lc)*=J*3@1YV;$6s@YK>*OY&gQN)-#kQ!$wFot|hfs_06sloYQA7IyRbgPY z0Pi0j$%JayFQ|$(qZ)V!wT;iB=KK+s$2irs>)3y_2xK5(9#+6zsDh%`Fh^^AYg*LM zhoOeB1!~OSyo zXCttSgnD=nn_%&V=5zgQR8K!!6Eq6&ep@aWHK%W}B*t$X;4H#wsQaIx%B}iMfO7-; zq7J48P0UDkLXG&KChY$m1g4Xq#Zs%OnS$ol?x+U1m>H*_7T*@s2>fB=7ciLkBMid$ z&CJy0L_MCXqeiqTY7w_bP4y_3fELqq>o2IG{2g@=9Y@XW9n?wr#HRb3oBPsWe$pdQ z4eW$!$Yj*^TaS%!8>*ZnEldN`pw0)k7y&J=3aA69A*zSNQHyXoYL&0Vj(7r>V4;>~ zO8g>6?8;{<>3~eBmAUzcp!iLxur=Ujs9mb-5Css$Z z7!skLUcsoRT`|;WwMwYfJIFf8x(GD_8?7f$+wVSV|0n2Vk8sptD~lSDI;eAD0J^Gh zCIJn}2Grs?hU)24)HeErS`(q2&6E^DO+{l=fjv+a|7g>9p{DW-sw4MNtN#tEAzx98 zFF_afzqV28E+!!q)zdtv)gOuKVG~rozNm(dKs9I%YVE8=O~oPWNz@2j#5(u}gRoLp z^VIBw4T#U_>YA3nB0)V#-OW6$N?}#v3sFP$1hviLbvK`O%b-SX9p=M7upxfMf!MHz zIf~DqI^h4-{AeZ}>LFJXb*@CY1T=K>Q9U_`D)=g@$M0;qzo(gs)TqT6iJGD+7>127 zI*vk(#01ok|9~3m`Ka<%pc=RdyQ7=Cml@K9sFrR+ZM!oz{S_`F9U}ZJyC0A4tk3imG2my!?UQ7T{+M^g!ZA^|&|B50 zx#?lkN1%p!9IAmcP$%Mc{1LCC?&~wyG-Lv5e=k8bWFxA_J5d$C#k?42NPsh6`@c8= z_2eq*LiC~Lxn2k(bRD%gd*Vi%iTSY_i#H8N?{}zkV!<#TF2w&tjoh>00ZstEM>XUV zY7ImiVZQ$-MDOqa7bl=OuZSAL4p<$Bqk3`*wV!XIM&d2L#Ax4{ir=9YUAB?Nyw;+q z`yx?Ky+){p^+Qd`@R96)1!j_R){!!+KQTb8vrl>{wy>$hug8itTT|`ag zZPc20Wc80W9ZQ31Km=-6lo-v>>4d68f(odQ8md;PgQ$~@53!CyZP$r78#kgVtTD!{ zf%>S9bV03^$*66)0X0I~(2u`a54i+X@ln*!p10mc9hEOp1qF;XJ;;ozumoyq%HcAs zZ{uH3Ba&d8=|Bjo;)1A#ltO)GEN^wI5YUj;L_O^~VK}ZuHRvj4Vo^OrRUA0MEXHK0 zwNez7uPzqDR@McmslAFC@>i(U{~5I?6GeH?8rMlmKrJeO2eBxsN4|;Xv)l@7N<79S z6K{jsCHt@?zD8ZI|2^B5k~gA0FC3Z@;B3YhsO`CYs%gk>R7VbD2JQco1VTx8hWf0Q ze3}{Z%&4AKL`_9~9EI&rJ%5b)I34{5Gt|MTcm(Fany9HAio0+;>S(Vx-PjtvpZ^af z5X6P4sFB!!x^XM2;sdA#o<&vg5w%@Y{Ada)h{42bqk7)krY}I{-;Nrw^Oy}|&oJjo zK6DF_(1C!q*CH&4XD|`QooPlS9cnv;qqa>X>hW3wRdE;8$W21c`8-sst40i4g3`~C4XZ{e1W<@&umk08PsB{kLo}R zYfs!xd?ac&m7HUCNvk>Re;uX$NYI?FK^1TaRnaNyb<{{bMvX+~xn@d=qqbKY8}Ewh z`46ZLEWq5j9yK+8qqbq-JhKRsx&%~U8r0n9Lk(piT!j@-L;4D}YU9i|El-3>4@Fg2 z9CeUYM15eXhZ=$2SPn;{rtBDMO+7#zbnbfss@S){7z5SwxTu0tp%!BZYGiWT>qXF8 z&8VKXMvX*YR0muepM<(^2CCDjq})b>gLF=tEHPvREGLp+<79bs1{v)?-@EALj@G&DmWH!RSAk z5y_4^%S)k#x*ne)b=cZ8rce{wbTiYXY(zW^v*IXxg1?{+l({R+RBg5%v0k-4L*)xtX-sP^V6C~* zH3fGfArBd+p-!fQ7=bTPPs7kv=A5X5>d83kYU@esOHAS8&v;jxk<78iSkhX{+8Q;& zeOw!uX#L5$3$=L8p{6M9FUDNfGS+(7o9i7=BX|w9&F-M~`6JZSeneFmeXYrt4zo1S2uIY0_xX430o5gdr0a1#dM`d`gM<_xOgpHXw2aJ|_@ zDNs`qVsxDnHlZPE(ey;E_R**wEkdo<6{v=8MHP4+wJooq9zqXMi!iJ)vfDVjSr~;>;hHO4+H!R1?xEBaHBb$8t#h}r|26d6NYD`7M^*d+t6{))^VO*)Dt$a^ zB<7$-XgTUcTyNv2Q6qE}wMK5CPQ(YOgC}5zS(JgOsSV!2{tqIMj|3H57qtsoqIxh6 ztK)gRkC}G{IMXn2mubLaRL@tVw%4zy9v?xC*dA@pt=7JGhr0gz;zgb&H;0vrglBMlG77sEmK3J~+HVZMQ^+O#Uz|O}sE_?gwF3oQ6TT6E!8* zP#ydmwb&oqc$(kYZQB1K1hkq9p&C#Ib@Ek56;L0wf16l4TL;?f<81tU)D+D}4gFfw zRGveP+#}Qor#fs#q&T`-_0VWF;2%A0uwH<%PP+Wr-@az%x|0Dvdj|Mm+eSG)(gQ3N}$IOtPIBp8MiyDb%sD{2l zt^U9hrhz$8*NdYXP!=^6O;Ou>H+ii1zY(%Z{gQylCL!EGM zP-lMpJLc%kjheFFsO>ly)#JIS3brWD)SSYd#2?)?=_n|08oYhocItiCRppPz4W0EzXgshE7Gz{W8?l>_-)N1=Y~UsGcTxY)px|FBmmN z1yI}9twlg*eS6Gxv#_SmS%#>3L zH8M?6+qVyfVH9dDZS{0{-V;zk2e1jA#yXhmx!G>tp{C+6sv);fQ}Pzo;4i3c7w3g( zSUS`Qg`(!VJgVV!P*d9x&*C6VLH$n6m!_Z&s0w;x2#!VFxCS+6`!Ne%M@>nLS7xzh zKpjA(QA6DgwKk$q4Oou)q_hb&Qtweyo$)pMUqe}!KzVG6YQRz~h+9!}`P`b|jj1pv zmL|O>Y9ywjMsPN2sF$P4-Gf>ihf(=1p&E44`t%L^U;FhV2^zwHw`R_gp|)WT)R5Ic zRnQWZuRE%zBQOFNq88&h)SQ2^*OR_8@w`}#^vYNXXQCQ<>mB=FkK6YosD;V@F%_mq z^&mHDF&0KmMHAGGJyG|KLwyeT8CCHqn||M>M}Kd&buLr`>!2Du(7M(opv83?wc5X+ z8WQV+X+T2Ml%ztX=Ri$OepExcqW1MjRK8i(HK+#dLv`R1s-91%h9v)JeuC;2C!hj{ zpbFZAeeoy`#L}P4({3lK!uP0#Cj4v`Wop!R%8wecq8Nmc_Ig{?VjPAVvAL**Z9}Hk zb^auvmj8`9+uxz)_7m#il=_QVG?h@hqCRTd4MN>F29tes1xls+>d{v*2Hw5-`k$6P>cBxYC9fB zP1y%j#Q_0+Zv=u-`AVSo|NksUKu2O7Y>ur_Pp|!`zXw>+@ArN?=KE--z&ohj@C0k% zN7Q*xCA#0+9c@rk*$;I+3U&P|YUjV@`n@^tjapO#u{i#Kn%mPDgbz_YjT_4}Br&Q1tx!|gC6=Gx|0K|#1hr@`Y6RBc zGK?SF@2%ENSep1%RDtQ^m?_DOp~Q1z9c+N*aTRK@zQmpwJFc06!5B<@4r&B<#pT~W z)`|2737XrB*aq*RdRjG}-}_7GtuR0FTJinfC#5l{p-mj<_ZC|#R0Bq!7U6kZk4^$J zq8qRj(PO9)i=WW%eMQUS5-3SRHBWm+Sd2x%4KeX|*N&MdT1GfeN_4EL0t}o*ue1h878>X;9E;t16CdxM%P zCxyu$AGNKLqDCqoYH^iDjZ76(MGbH+yQnGNB>o|#Sp!#7`PugD|1Sj8((u%N@3Y>w zn1lFXR1e>xdiE7nQIa&K$HA!d!l(nN8g|CcHvIx>5k5kd6Oh*LoiA}wBiR@CQNJ^R zfHGD~=l8xewn43hy;uz2q83fQ^nULwuZ9_j_rTmZ8Fk?7!w7texiC`(v$pD>o&nQP zYhg2LN*mLcd-k8$;kd!g`G2*6L37LL95pOH|Pgn-O`?`w7gEJAz|*2g2Lo&<&ZyrvI%;I+z;sIQXZL^xSlPsG#>&s#<(p%sPJd3SxXm-E%bAg*Kfk`A34)c3|OXV=C z2i?L=gQBnw@tZgc^XKq;zeIKtHH7(dngeGsYKo3w0nC!iY~yCA#hp2~-}_a}PS}Qc zf;@ij|Fq=xCh#)}FK`aqWM*D-c1J{*ldc|W&Tn7{=FV@XrXFe$jl$Bn2sM>|qjpa~ z0l)WgJ2z@7o8TW9g*&lfLBIYKjo<$+-8l+{Vb;>G;lZ^!S# z<-}tbHzTtiTN962!frckPy7OEs!Ephdw+H`9aYXV)I+L!DRaK8!D71di9iP~6fW)e zeqV1fYA$c$4xCcPj7YVze(wuLH`G&d78b(w*aRP;dRj5k@BJ=Vf2>OUPt+8oFK0T^ z8kN2l)2U^j2z-yJ%lo~b$*e?uRJw~J&|kst{Q}WwEJ1uPswZD@Ar`M_ypBqDE14nQ zg<3lUE1O+#0(C-O#Y%V=U7c9DtC&SJ7dI0>guQV{RloPK`6Xr}UaA_~hAHZVaj<7~ zwiyno;rIU6iZg1O$8q0Ue&;#)=b=VsQf)ILk5CV#$U5HKJALc0|1~s+NqCI$>oPPH z_yP5er9yqb_f=^EYW25hU>?&SP-lDWhUOedfZ7ciuscSf_WdVhkvVZ1nf=}bbzd9Q zInt>S`(Fn_R}$i4f7Az&k;*_rrlXG3nT^eq9LK`MAEMGjzA@>IP}{CAs)99`6gOZz zJdD~c=TM(BUSKqI+$QEMkB*x2%&3-^!Q@yIgRnhj#<8gL;TOz^$58h@Lp_Y*H8tBX z2$K;ni3zYCYSFeuHE<{ z8}?x+9!B--87lu9R71X66SXi6&4g6!gkiAue|>wQKdQoEs39ANxp5Y1&W@sbdI>dR zH&G3Eh9~hY>LGNfrJ2%8s404n8rih1O!-+*9n6g>wf~C~P=)nTPpx*SxgUmMI0MzN z{iuA$P(8bfYRFTpi=R-7u2yTm(-PaErsOc{XugfZ(BHj$Z^)Km@Y z;F`cR611&;My<{RHsgKNCze;JH4wL>>0xTr6lKRCERCA$R;Y%LLQTyi)O~YtJ+4A^ zq**8PFq`2L_>F{8oy~VWe;2>^+b)&6QZZwewwqam5#7!6x-DviZlN0d5L1#bRu7XN z{H-w?YAxikmPf6vZ%_^IgO$;ZBA_|EfSQVco@U5WqUJgRHPqEG9BbRSi+kw4F$rym^Q59`MEz+H+d}mQpb`O>Ru{CgzNzaWMnf&M~Lv;dLr9Dt1 z;G%|p7V4q01q=@3$D>mM5h-uhpY)JZSR7YN+@+TW=7IO%y{37VX(x~&IENT&U8Or|G z4U0&qgzKyyP(6v{x*j?ePz5zaEw<*?F4h64BY89i;Y=IfhFa8rU>-b=T5GX}nR6z@ zC7?xB5p_nlMI9g`QByGywU3wC>pM{+bp_S%JE;3#qZ*uOxS5iqsPvSmZJi%A=T&UH z4eF?N2NKZG)MC$s^S(m(zpsW|EU5j&OLM)N|Kum_Cx+uaVXX(fHZswiW!^tr`BoWu zz2~BSL0zw_W_ zQ(Lg|WY>RaTgjxtv9o=_VR3~$BF6h;p z_z^NRB~7ol#6MENU>Y)w0^$>HOSlc`dR-%2o%H5ZoS1vo@eZS`Pn7YNYdyK9tdTf? zJfYrQEO?iM?L@wkDV;4$*LqPw6lt5V3+V$Wu$H~P&EA}gf)&;^6#r9@z^w|6iz1ZAe=-)tB^k)>a~M({%9$u7wJRhueMSzf&b|1_rI?|Zt6y! zxYP11PvTZ0){>&?ky4B-&4>pPpF;`X6V_Lh0=BeWwpn|rP8)eNe#7-|$ybUzEpR<) zdVRx~to~0ol*T{B=KRd{kzCW)<2l~1jB=qG8GF*Nd)S=|6Uj6f6H{Pa($^7QK%?~P zM_8M04|#`>me*FOYvEk0#5))F?WRG~Yy&z_hF;0YKZ|R6rSk66Q%1kbt?=(_3Jpm?`URVR zG3BJAF(Z_3sBPsLDvV9I2^ab1>AiArLqF0U;BH&_HS%2~UY;Cl$TxxOJ9zh_5j(iH z1hZjE^6+PW&Mi}vla2K8suyCh--#W0}lOwEtY2 zK-z68(2ECwQV0za8+)YMZpcZ`4s6}xN(eaY+1r-d8Z>^Hm?6jr7g*um$d)Bx=~g*={b1kh>h*^7SL8iLxT=r&uS~%ixPhO`IQw{)<^7m= zNm|O!WW3iv8greSR+D!J*Z!f9Xk6E~g?98NzOIvV6LGzcabI2DC&^oY>w59$zTO`O z)aBl1l+}QDX6^q{y2`5{Hw;7mtj>9Bd!Lz1Lv_)<+TaY*+LC7*1^vIT1XP&J-g|<4 z=?PEeotv;;C%LB$@fp;my7hKCkid5-?{$*@e&(H?g7ovQNGkgG#b3)}megbQ&k_}?2b8EJFLtJh*%7eTLnXAP~JNvuAtD?>)T&KaCD6w3EG z@70#;4Y)qU_9heIyf(iweBm8QJeYh3Xy7OATTNOTo4*?AdQB(&5#h=)O#MzYB6mn! zPR8S8_)Mh}F)uwU&pQS!Z$X})311?;Jo&y5A7LBTlFF7*@fNQC`^sR$vB;;_G#l?t z-X93xQlo7B4*!U!(}#?Oxj5RkwlIZfA>%Ug@!i{5`k$UoB~M54^N)c3@5S$IIAyp$ zfPBk&SK->9cF6g%;UwpMj`tYS>yURGdEI;zbcIY8c;6tgEAJN+c}R^RV@htgO}L>g zsJLy!V{X=~JMZk|(Q7i-UXxd^VU)9+JY8(QV9MeTk)3aGj`ET2*Z%*^%{{rPA{CV4 z-Gz%M?FdXGT!d?_Nk78-5(QL8zMnf4@H5vM@Ge4lBKqxpAzc5K3iL-+83|9~{fb6) z<$ajEdZp%icm0*|OC+o#1HU%mtRUQxN)u7gaWeEFV|)t!?<+aizoTHi@^kGn`5xFj z)w%YXveFWdPWoMw&HHaA(n5GY=H9mC)64rS>wj>=5;Fh8`y}sB;(9g4eB8jV#5nnA z*c;;I2=}(VRGy@S|D?cCTywb=$h#)@{6;x?eM@+;ZEPR%RHmGwyhC{F#vy%!&3BaWO49U7 zZ{3Hh=)`rdZKs^_wnIf|NGINLy?-*CKsbeTCxc$qs6090*f#SI^yDtr$5B{St`DTJ zjl>_2Pp>n0-Zo+}WhJ#?UE65O{9yBzwAR8v%K6{^KWv9J69xQg!>hlUR?$hfL z?=yruNZWu|I7s9F8=13nu{f1Cr;vVxzo8K?Y(st~{jo~nRhqn0=}|u3`v^bb+8FLx z#63HS^Uq-Odl!77!hc^cZQufV_(ejeFxNYfHz^IMpkEpLmc(jACK3Mk)t5j@;{8eA zO?W=<_!N+qv^>1i+Q#wQsNO3B6?P-Mor3vik)3Av(Ke!*&GU)-`|#H59OYi5;clo+ zSWChK8#Y;Z>=GzJMICu>BlADx38An^;t8qXifzOK8Wfj%`*E!z?=s}A&UL+J+D2p| zJe&L(Y#lX-57Cb-l9D-sOj9U)D(|b@Snod#=}B5SD)^p!Imwp~1GxU&R&X7+@?J*a ze~|7YoRvJsxo;OHXp*ozkzU5@+`CQ+QcvN{=hv2|NA}dPj1}GyON!+gtS&a zmTFHAvT*ab|1@Y3*OrsFB!zUdl^^E%4|Jf|e;UK>&P(FODD$dq*dy}H~!Wl^)MCSHnPEUFU3W-OWUN=b#A$%B1a_u+`*ht=^c%FPSY`$Lf z{=cu8HvUfMPaImehs)P=l{%ko^#LgexLU_-`~CEcJD3nVeoSKtxRk4wfSQG z=DZgy*+X%_ob>tM(E?991z|3NetX(xzUY9PIn8wy;*ht+j)-OW=fHM`SBv#59jlbq2Lc*Kje-rOk z_j24AM<=^TKHVX+QXl_RoQw4a623{Sp|?uB0G{k|bD!$@X~@j8;-K{PpOS#<0o%p9 zh?NIEWZ_eBR1>|S@?k`qTTn;7ksp?~G4mDtuf($UkY$JHU53B5KtJKt^!Dl<<+<|o z@t0X+VKP5KoHycwKD2O)MX!b6De7c1aJS(-h2l(h%c0+J?=EJ|ey-a^nRP#fp zY#f!^PtxfZ{hXc1iwG9i_z2j^)lHD6$~*HVt}n+I%14MZ@ctc(wfqayJ~pC$F%FxH zm#lKsDL-IoH~w01XXeM8%=PiX@w%nE4NL|!*6XVtVX#GrOfq~q>|Xsz7Tgtcr5rqn zCu>kWooe5jy#6jQM@S*PW{u(ZNt4MN3uH>Bw&O5YrTQ-6yM1E1m4W@ ziH1IN!0~!T3C>nG*8f^vPrs36kDIM;Zl!!Xyj&dH2Cp7Z=Klkbsf3erlQ+{fIvScH z9x#xsDZwQM5Afc|KkykA&JdTv*TavRO}1F>Tc?>$@r12u%+S9_JyJZ;%q;r%sms8c z>9xs!z?{r9$#sB(7F8frTt1xV{V+XZtym(>vzKv_welqQ^J(!!yXicdFPbTfGs2=b zU=LfK>@VV2{nPlRcvr$p`<7YWzy5m}!VCwT4m{4n{o;@6tTlAdK1EZ0JbX(Q5U&ef z4#8xbi60cV;(f^9b;LGtK^~g_W)4mVb7$F~`2#`~#X8M~Vi(J&@?`yqcGFL`S+75C zJI6dNFF|xoEPW!Mk~vu~StmM2VXg6oni(MfKCpy0QFqYKc|_7e(!k4eDdB&JZ^Xh+ z5sT@KXQm`wcUj*lT^?mxu&Y;mfKh0ca-+O#y`t#o|3pep( z>8~r!7AuHX6P+NwOXz*E2eHOt))o+6rambC2li@#ryHoAhxjmTll*zueh-?gy4XDO zy6N-3!WQ(8E3YFs&p_7Jsypx_@Io$5Hi$1EaCR)534a7Wo!9r2rRcp4Z=kL$KAJb> z_YD2+xZ}j%EWQ7e4bm*m@0U+PDrZ?)3+6f|{p?g-{SgGu)SqL?R(T=VN%C$u$Yt>*A3GTI^HmnLU|L2iByEB%2MYw|ec6ed22<~uxbG#Zu%ygr% z)7(-0LHId!fM15twCpyqYxG7DD}neX!EfU7iH57gClQ;ZS1lGifqRQ3CG?a1hgVf6 zTMhdG_nSEOH8VrfumAR%OEt@Av?jV7ai6$PZ>r%v{0{_2;QbS4Oo+F|SHWVQFpWSPL&+*4T_f+Qw?_RZczeBM-&#;Z zzK%bvpKJ`?Tamv^^gQ|3@X<6{;xB~{b4)$hM)mCAmeD_>D`2;zOEi1L(~Xbo@6i8@ z&~xew;_3PXwm^IfwlHSSlb6=(CT_E=sBiFA%=ud9Gu3dXHk3ECt)%n5(|eHmWU(CO zlBUMP22g7*9?5&S|NZ7rT$|9A1t_POokwR4&ABvorFZb$I6Lvqv^d#&{4u0eVy=N_ z#9r#Dgj+junLJr*f=kR4kGTOvf5z_#dski`H`!TsOgHwvYqa~ym_ z`UHQ4#*@U3L)a)k-lgNzZDQ$K^|b`%zzz|cZoy8yp7KBPk7?|HpC`^Ww~%=H!096{ z;)nU=@MOLCRgoXm&v{UzoWWZNCR-!VMJOefC9=~I?TB_kUMhZ$R~+8c5$}Xhn)?El zepn`JBk`+e3vn%-b>g$JCm>&7)Hp(@81JB49q|i`lMN8N#H%ntU621;T^skUL z`HOs+rR!mB9e1giY)ZoHXd>Sdx}VV4iu*L{2WEeR9~D3nx;u_(>yTs} zEN?D8Mr1%>OXSH;jH6OM6mMzF+!}a&{FXSIEc;Sknpek5))^<~a*aRo78>^=olc-8 zujHUvo+NAg)U^%n!}*j?H2l2YZDyy519`IZaXMPqCk}W;ET(>yW)*%ccw_OdNnhZ5 zHlCoB#$tp4LHN<~O#~0?WvvlT-@rS?aV;&V8l0EJ8i7|&IPHOs9WNat_70(Tj=nta zK(GG>K(fVg$a27y2w#Y^h@GncA+h>6jd05aZ>+kUgOXjO_oMhA-e`Wa`R ziWhPE!J6YW)vu>_DeNrA7U7NbvzF5jIawXeJ1v+fZ(#Tv@nXZb@?^gfx!3SOyt*Oq zOdOc-lVOiVe}`pz;<$6<$(|64@VDhNVKH z&Ukkb+*^P%A`bX2G!oPk=g;Pd{5sud@n_uR=eO~WZ!`JiE zqyLyE&)Tb&UBIWt(vf%>GnJy=lWO+1Lsszt>G^B%KgIIv~vi*c@sMX$oj!y4j0EWcBHoG07ESHu%G!7q$g-?7O`M?6g&&L`*dax$F|n^@dF z7H$RfQ{SzgV!=3hvPa~}E(xKZ#38U1(VyVZWX06q#t~KYy2*rO>`~%uu^VnYh z`LXyl#8QaQ0^SJGhb%c?Zw&7ohaAJZfl+o4r~enSWm#rB~X*o8o}9 zbBcad^}X`(=?gr`4k9MI5AXm&vIisfBapTE(aY8;E{|ioI(7!%ORKNAUVH~$3%-#L z<2B8%=l_CLwmWB49B_m9y+tbx*78KN3_cyp8XJ58wwfO>cx^n*H8{yG#$N$zDi*YR z6#ej%m7%+l-ZePq()+=_t@(eg-8bn&a3yj_cMv)b%_@oKS_QxB(M_H=L`6t954$N!;U(T=jm#cvPG z6)zd8odAS$)f)&U`#2qExEOpFELj!)i~j$&X97?Cr3LVzW;fGZ%(J#ceqs9l^S8jO zJw>wf;stII%b&9N$MgirSs7n=+Dwm_C0J*ELo;*sqPWS4m2|u@9*lH zVDrQ!;t6)BhcG2W#&zJRpgdp zd2x%FwR`0kDJBZriEJc%X9KnNNncyMk z)A#E4?Q`w-o|!dk*35ro@1(#PJv9EYk@4L-iK9((cx{d4IB7AejN{Dlb(}_HRO&d# zcREgNJb|h4B9_2cSPp}CIZgrWg~f3La=Y^yyW>~%!mhg=Cmg$BDcp+L9LIG&lL(@~ zKgw}@uo}j}T9^kTu>wxQLU;>eEf;(K>WR?p;Q>1d?ssl)B}TUKFnGYHS+S<7i*zLe%5*(qmjReYVR7x z<@wGX66*1DRF6MkAB?-tagyS1s2k^?8eE9EaWQI^E@DlL-0wKmaSIm5=m$*5%V28q zBW!*#D$)R_+IOI4vF$F5r zrBUrx#uV59YhgDmg~tvN|GFf651Y`nK+R1TR7VD(8XAq7nkndmi%}h0j!AF_s@`eT z)LlkB_#UdAm#6`Kve%;@p|j)@9&t@YKMK@fE>s7KqZ+J+YM?%8CsQH!-UDpFlg?e}tR!5~z{k*E>QMLl>SrpMKo4o_eJK0%Ej{xQdC zg6Xj_4nW;^6IJgKYU<)1Hv=eUt!Q=YkQ99+btwahaa_oXzPJq)x&xREFJT~l zM{TR@f0z(1MRjy7DsoX+9?xM$Om)Uw4?{(u5>~~5s0f|GBp4_7b~1K zi>a=)IjV!5Fc$Vf)f-~-6HsesCKkh0SOlM9PRxAH+*cjrlW&0W6qkwD~_#Ya!-&)3E@IK|T*EVg)f8Rz!`k8m7bssE+@N>adH6a4fpIFrP$jT#cLY zCMLx37tE2m0QKPAsCqZB8v0%|4L3qPuq}4RZm7Awk7@BUj>2S@%;H{vI*^uJBK}E8 z?4=+pUO>&=7t~17T{a`kh>B2l)QAe9c0&zRN4ug{`(P}ND{&w`MeT|aPlq3>4;@- zn-OloU&v>@V~*-sIE;M!yCy#chmdz;-DC75#-LVpqWfkFQlmOj6gBdCs7SO&t==A} z#WxJKHpZYLvl_Lg_M+}Pi8}jlVM=_Dsu%BpXN|ayKM6Hh&=ff3Fgp1rs0Xw}g{}jt z;r_TCN21n9i9a1@7M4Lx!Ch2G|3XFdJ*u5(4^6wisCE)z9PR&fwjdiu<3c`EBnqJ# zENSzVY`!+CLy@SCcg1Mvq8>O5^?<3Uxn78hz!pq~r%;i-FL}Q6jf6sy;*q&A5cPlp zs2j@T8f=0JVVuXNekN2y1yCcbfx2EFQ(-q$2gjlo^Bn6&RJ%ve)q`)6&|JO7Z0Plb zk66rs8SxL)etv`g81t!lV0P39bE6hqD?QSF?>xOmB&~Jr6-OTn)2eM~sb=QTu%^YR#;` z2waQ$jQD8tN#C1+H9?j4L4WQ486?V5uoIJ_^TBM7WT-g`#7r21x?UHPU`LxDgz?Bv zLv>^cvOJvisQc%9G$UVviO6q64eTI#_WxxPy77(mE9%A=pG=SATeG8jUK%yh=BS9Y zK{Y%Sv*9!hz`a-mAE6@U|JmFZh?<(*=xTB0CvhEzVsdQ!kD0UXsGbf*jeNQ-UxTW* z3pMxWQ5|}KYWN9iN?+nae2<<8eK9|fEI}X2AAKSIktF`2K#L>ds~K?}RQ?y#b{U9S zaRll>+JG9-1?w$T1RtXo=UddG`;P4}?l%+Bo~U*QqB=C@8}qM`%%UJAZp1J=fdw$e zcXM_Z!y@GCphh+s^}t!yrReDxYVlq`t(ga?-4x@8iKIVj?c~FBSl%U(lSFIOoKL}G zI0tj!4b&7w|7m)j(wYU6QJxny1?5qZs&B71N43|*+6&bo7d4ejFun3SNDL-%71dCE ze#9J$?NPhp6DnlIyu3UkuZVh34OGV(VlC{9r|=MJ3MP1aIiqn7sv`kDUY<|EAnZ%N zEKcM3&H)k?D5x9FR9uWf#;xh@Y>cVkN55rL%XpUMFoiG~?L`7f) zssr0m4IV}9n)}!S)5kMwX9zO=&Iv3>`RVvxo*%)ICh&4Pk#Cv6%k@0y0tNXfxQ*&@ z;)G_=g`qkSfr?B6Ye&pLejw(+`KS(^K#lAgYH{AN`M0Q5|H&FRk%^dpBG=1vR2HB> z5om&{*b4Q4zP5ZeYFjQsMdBU?V(i4`zED&L!fd`GdUgqF^*2OKaSNO8gleycOF{?7 zRxFKIQ6Wy7#59}}l@CF!g;J=gX@q&O4eBJDg&Oe+>n>E}{y^P-2UFoIOpCFSdU*~$ zHwy_h5QbVL6;KC5SJd22Ks|Uh>ZCk`s(-^?e~Mc5KFQ45Nr8%BLDXWbjCyb@REJ#D zR8B+&;yQ~-C^YL(J>70DILB=H1ym?+p+@)!73$BZ`Z1H6`%|Fu{?m1FVD{b!Kld0MRjaLdiK8-!$k_z@FUEQU$G}<$>8Pm$GNCb zr}8sX5ri5+71V?3p-#d-Fc)6H%;@-=NM^ByqUx2w%UHpm{jbpZWi%fu1yBvoM6KGz zs2ieCBR+tN*ag&iaT_%y4^g}29j3u}nY=tdlx9cIu0h>@16BVy>RkB8B@slzE3>JP z8`bl0^y27jjWx-)&EnuIjTdCf z{ZQ=$qdJ}+J76iB-+*c-3SA{mlF*{KhU)2k>tpM4)Pvrj=F$l^k;;X-zbrn+TBrvX z$!)HeMBUdA710iu1AAZ~F3ipTR}W9y3fEDg`xCwK6Kc-CpgNW!kC!tQ)8abZgk>=@ zula(p9F>2Cc`-D^?jEc_J_>zlIA%W6ktF%q|C_l`EWdg1TT~>X7ce7U^k-e%Q_>p^%NnQ8)=zF-;+}>Vr@X zl|V(NIw}&aP-~(+sslYyKTr%qourFVyI=>Zqvx!T(2x8VRC{ik!lq&{22oHBvtUou zHk*t2a5v_{HyDcPi7bVse7(Wnv5Ky`2}>OnWK0RCn3{zXkYxl!9S9OG*LM|cwa zY=_gh&;r%qKd8{gFJ``KrNvIeUoTvyEM%Am2n%Z`#HP#P}`~?YQ!aR4OU03jqj*)C3d)pR033F z)1sy<2wjD+5D85|Sya9O>cMSn`DD}$%TbGU6KbS8Z23`}KX3DQQ5|@O>i9=gN57&v z5WS=sK#G#=e>Iqc0#(R^ibN5cFNJELvdz~(b)*q0q-`)O_QHa=0JZ9`;c|R~8F5A_ zbKfr18araWU&=Kn)prVXCMPd#K2{5(J_{mIi>)_m&c>rgJ_EI?m)Yx4sK{MFb?C0m z$1GzPGlozefT7p`Rez#O!m~Y4q1lRs@F*%0PFZ6t)QA(Jrpgc1v3#fzS3ot`9JP46 zpmxnL)Ig@8?pu$F;6YSm-9Jbu^cPTz=oV^mJx4w82kOT7jen1Su~$o@ZN3vODUqo(AmHE{)#&u%S&T2ys05c{Im z&T`C&CsCgnpD-JysA%e!u(q)NCV9TIio_Q@jT-r}O2#YJN7nbKZ#X`cjp?n0thF$l z>s?S&x5;|Idfs{;YjgcAx|+jsRZM6rqe5NF=9{2G*a{Wu0X9Dv^?+HZ?X(IT;}KMd zGgUPaD2TdV4>MzTRODviH;k&v{?`pVtC>%)GpM!j0yWn^QEMVbb<>fg)|}STsOybT zk!g<_&~VgZ8-rTB(^2iMMs4FwsPBxssD*D@W> zgsPVdwa?3=>eok&yg6!MolsNP3)R7XsQQCYk#{GNC_rL4DpYq+A3pC;2T-Qk=BL*{ zRH!>(1?+>`C5KV>-9$y`HR{1%Q5}h1$9xJVM6HEj)Hbb%bjWoYlhA?C94lcf)Qy`_ z+iDMLvE4^S;w@&uICag4bEE1PLYl5?GzL)1ey+&_f+8=G5go(BP zXOhqe*Pt5QZSzNQDETX>UD2SS`4H)ZCCM*BKYWPlX!J&=gNaZf&VY(Y9@H0+4%X4A zh_6CdBVJ3QD{evEn7Og}eO`W4{#VqZ8E&19?a8k|jXZG^vjz&II#LC-b{e2U-`v^- z{mA!64R~G?_P;8wqd;@B4Yio|p&on@bK)axj)^19jXh8uACCIgI~J?rYRrdUY1sN&$h#EnvW~Mv~sv~)=rLA@B^|q+`Jy26L*j}HC z8pv|gNOz&mmy?(uucNkKLbtg&Dzl(&D1(Yfebjz#hMBQFYQz&zQ!yPCu@$HgZ?f0- zq7JYlw)~X!8mfbjQ0;t1tu^;22{jm}g&AoYR6ZAG!(ymUvo@%XjX-s50%}AvQM+OV zYTIqI<#$mLeT5oWqLwC~1=Ydw$bGI;g@g`c~1>nlj;5J6n{(ne9bMY6J!1q`KL))1L zk3=2O+fW~~FHs$=*xnp8?NA+GhgtC?hT=QSg4sHlkyk+ts0FIM$>?gkoFtJ8e_~zC z)zREA9JT#sV+uTm8o^!EVv60#j4&-K#92@g3PnYrIBM!Dq9WA@73r3!Nd3}@{a=Q} za0)bnQ>YF-MIA8dIvYo#8vGmepr3e&xlho=H2koums5xG7g!Wa{bE8s7l7SM zegR&^plW;>27*@5H)vau^L`REuMfL=B&?$8u4JvhGS3<+=|*A z`%zPI7V~2Co~FDYYQW`O5;|a7qAK=8?S{3eZFd|sS5Hv~hhH!Az`CdhG(&~BD=IRB zQK6oMfjA4x;Stp8kJsDO&xl%_ZU_mDC=At+3K)frP#s9s$23?7^`LOnBCCPFU|-an zzCbYimd4*cgJE^Jb_H_O|)C7(jjt>bW-tv;TDvJf}c& z^Ai>N6hq7d(^+$(I#R@15jC=gsFSlD>cgfxDuOdm^%tNXv;j4+{r37X)S5dxgwSZ@ z&nQqs(T18iPk_47AJuSPRL5#t8=~qr!*J|~+NSGK=fGpsR3sQ?PP&Y!4&+Czfug90 zMz|yt>UyZ{)(ka*!Ke<5LT{Xnmv9~`Qr(7|ML8PPkqM|do{d^78&DC5vgN03{yysd zx2OZijs2TF(NI0hhiae%24ZDYsQRGhaw;kkJ1{HmMb&?d+LnK#_J6VwW&nYxj)kEj zRUNgPrXW-3Ix|heS&nLWD{ADsP$4^odcXziU0ePFHS)i0`47~CeMg!p^hd3c5LCTz z)Ra_0MIaJAfBwIhEtrA|*&5WM+>QGBeAXI!lqoM|t&18-2UO&`qNcJx>f9KP>d*|- zZdiwU@L|-a=q*gZ`QyYGZT53=)Z)pDnwy5Uyf^S7I3cgNj7{ai*i?QSDVnO?8uT?0+R%QlJO4M~!qCssjs9J>HE9-6>Rqf1>90 z18NF<#+#!y76y?IKs~57s@>+ODe8}!+L5TEdG2`jzvf~W1zH>rQ8#=-O+lgw=4=l_ zg}yRs-}XR7Vi;Dz&8WrdHPL+B#zIX^HB|ljcnI6te9lQ`O%!oSXaqG-9jS|o$Y4}Q zMpzf2>g`4~xF0p5vlxjtaTpev%zpv#;yTtQA9Jc{uQ6(hTcEy2bV7aRxJ&JYJ*Wnc zVIjO|^YNyc#gz&@Cn74ed2s+1x8-|KQ+3AX?_d-1uTk}@Og9~Ah@Q^|4AlPbO+x!~ zDe3_m&~sK}Rr1GBJx?*iM8F>vnE+J%5?CIq#t)S~*1jnQ|O*}v_qE@~vxPz^4&`IT6m{5DjFV$Sw*7GO%ui94_%KEeolzt*;BoAQPf^>d>0EOJ_dqqg2sN_Jm;?X7Q2dN@F=(DWF;OGEVDmSu z_fb>)6j$SW^!)yB!F&_aWf;tbeW=y_8iO$10yC0I*qwYIREJ)n7UNGmit!hk$Xv!U zTt&!V>HpQ!pDQ5}f2*o-(8 zYIpcy1ZKf**afw=9-!KPiK_Pn^_A`CV%N-h`X#1kIjy0n9u`BQ>y*a(`<#Ryi8!mxce6m$ z4K-}O6Y40QiaG%|qNd;)YLPxejqE4t(=Of`6M;;qe09`kK^xR|UW%jfy}9l>?ppJ} zX{erUMD^?#7RSe^H4(7RdKG<(g_Tn)33AAu)v9Y$gAedfRKhwkS$Cp>r*=EIW*yqpVRiDWQRUyT5|%t_e(5v;3zC0_nu5S%X4mvZ)mwzc z@D;AYT*tkf*?1N8?YY|tvq-0-*4$2)gtpZw)XDWX24K;XW@Ifro#b&MouV5FNeA`l8N-_^3~}RH!37BdS9o zm>GR;n-en|YRZdZW}fe~vKK~UPVx&-4?2zNzt@j;sJw2); z!Kjn3AnK?thdS6Aq1x$&p1=Py)E3M@eL+}>NpLI1#p9^edKq=pKEdet3DwYd)JYlt zu8BliR6AKw9SK1#;xH_NE^1)A@3Q~Zz!3`co$m_jQ|dPA!JkkKMZ0HiNQla(M$dOZ z)RA4n+89%i?~AH88P$RLs0Xe<4PX;0!UyiTW+X=`(5K#M)X1KoZhVQl@uStbZ*Gi( zDJf5YewYn)Uj%Aus-hlL7yYpfDng@B1D%1oKHs$k>+viF+fWZ2{=ih2fa=%+REKt1 z51|@5jhf?&s0JUPBJ&RQ;S~2z^Bpn+>i&wTdbLnf?6xGKp7q8u_?yk2#%APipelwv zG>fPj)+FBw%i&Jc+VFa0OoCc$Sx_A-jA}mu74o{MscD1^)OFgD&TIY77eh@!P1J}RVm54v0XPmdRa?=s|96p42lk=1 z#|^B6Z%{WBePTw|5_N?3L_J`mE#F~1i8_jJp|;}}R0onjHH$I>Dk23?=S5jeuKiz~ zgdeuWj5rF_!?mafZALY;3pe8-)Ct)0FZM64#Dkdanfcl8Ii4e*_l5q30|(Db^PhAd zV14pQUYYhgp{tPnN+Kn(9f^A2qSt1wR-xu@J!&eVP!T$Tn)AD;{rnacsa$VNc`elL zXpO4xqUL@Y2IFj-Klz6JuM_Mn1q#VU)S|nCrLn|Y^F!ot>_h$`4#6hx%#nH@i<6J> zxA_n%i)v>L>I=*7s9o?kUR1sJX7S!Ybtvcq`(KMI$Fpte^v)JW@E+o49( z54FuEp$@P$s5y^9J@6VTlFw1?{f%npA5_GBKbq@)E(xvXY^cRk33YOkT`JtXy(dargNN5ezw>CySxEU&hEm05b zh`R9?o9}HMV9SS~cF8ErjFYhxZbvQNuQ(fH{bM@11QTihY$j2T3x`o7jr+w^$bgDS z5bD7tkxk-6*z$^~sf$F7d?;!+Oh!HU3~C^WznbgGP*a*2)m{#aqy3wQgnAf;3Vj6X zQ>{K~`}IVPY#3(5aj27TBdUYPP#wRCTAZ&?4~q89EYdirDaec&Fh44?byuF(Txs(=Z2k;JCp33Z^&fsWC+a)YNgD5miEsm~Kz=c5+rIq4 z{@2KJ{WRar3Zp{21y?d9#6lHRD@ zwH5We3#cQX?;oatFBE7l<9K^}LK}oS7s{X>TorXgD^$b=p&mR6wc2M{SEE9|+j;=C zHjbh0yJE}lqCN#5xg`3Mc#9f&M;~Kn)T-}_YOn{Y=lxI}8;Odl1o3D!6EzMB%dSFuR|A8cQTIuws@D`dU~kk9xeu*AaZN`uVp5*(C$=LrPBt}pmccXg#8XI9ya?`*V)Z9)(t^U>65_h4tWrh@H zN^+t)Rs!|Fs;K)~+wy*>4vj{wovAJft?p&0ZTJkeUxQMbifvIN?1nnQhNI?wiFG?_ zt(?M~_`&8grtEaPYP>k=GK{vc{?RQLCGmf>(*f`J*$$#)j@pxdYp{$q`w$xKxy)IbWLc1;n~ znyHSS|Nhs6gifT+sO{JbH6^1^b2S?k;&rGSkD%7T1=RO}$9NoLXZH4d%e{a%$S=?0 z?XFr#=e7Ve`iWy`UT@uVpc?nbpTcM_+8!93LP>XFc2I36VR38dr|7*M4qd+5n zjeh7A?Ctq|Uq)2EJZhxvP$M6UI#L&+=6)aQi^ow^OGtB9q7^p$7z@<~T2E^;W>t*aFqSKwCZ^)q(A(`%alD-j*I^#qk9+YQ7QjuRrh|W>Kl$&d zNM^`yI+zs|`l85`xlRQV3Rykugv~Gz&th5piaL@@7V!4`;$bjqDlVf&at{^KC#cB0 zusQ|J!IcybQJxp|>Gu&e<=qNtO|k!nkkDDZ49j2?YQ)}!%>k1ZbC9ou`YP57b$tLT z5;L$euErtw8Ove6BBs4VsP@yCr~Dp>wDy zeS})Xf4e07z4!?S)qr1lGx8kPqNr6}4gIhsYV{7cPO~mUP1!cghWAn1I!=TcX%5u& z+^7yULJipMLn1ec^%#bCQ4dI4!Q7Y=)ziG#6pP|@oR2!FdRH{{C!szC7okSF2lc(- z0&4ZYLG7BDmCSbaN2bzs0!Sz%LAVgZPz~Hhh58+8uB%t}b|SGJs)IXFBRXz-RL2&g=imR^OF|F4fTQsVYLRuTY97=V)xpuIk<3IbvJF@k z&tOGNR?URG8ETsiMzwPSb@rdP-b01{HKx@5&s^Osnxd#VYlaHdU{r|b*z&DdlKdsq zNK@3XKeAyk`Sz&$W}_ms6*aKKsCKWTcGo|sh{UPM{?{3wl!T7Z0920yQ4NNm7E24% zhzH?5T!5PE$Xedce(Zd7Sd07>Jc)sI*#DZ7k9EvXr`~nV zq8p6?luyLLxE+^bp?YQ!-a$27yuSI+iNNgS2cu5HHP{Hf8kmkXK@IeP^&(y(|EK}` zUvs*vp}q_gHRzaj=QlwYON%TG*ght8iMLT zDa?YkQQNwoOF|KtU<>A;Klu&lhv!jq_YSp)5;rv?_eZVbK-64Epw>!#Yd6#hHwJYO zO+roWD%452$(FmvNa)797>b`!Jq&7QI#LU@{d!`39Dr)*D*EAF)cN2vHxcng9YASO zBP@ejg!NG;V`prKlW~dm|2Gm^6boAraxZ>@!G`2(v@$>cug7WR16rHVN1>+bESA6o zZOoZo4KWn?HdH?FB4`x3M6m zZSU>0!rG|)yc>1@Y1CS{jQUi3g!;5|I+(9&@lcDmxU~klDriMQBkgUSjM{!{QTzWQ zdd_gv17dbG5lMkM7mA`D*a#JoUZ_Pp5jE1ys9m%lwI-gSrsPLQ_P^#LeJ9gkKGcI7 zpvniM=5hvVBx^A??nHIu5Gq0!QM>4l%|Am8>;r1`$Leeb=!dFT7}e3Ton6zTND4H< zUs0hPZJmOOz+9|}JJAp0bupisL0Ff3B&y@vQETN6Mq;$C-k#rpwnRm06NchB?1VAg zUrgw_V+aKkupS=5zL>U~If`eXrsx>v#rs$Ulm2QBmTIUDG)E0&6lzKqqDH*imLEe+ z#T|@+ZmjNRjuK!X1?ez4MxY{56&3P&s8BaYHP{K&!9Lgp-=jj>vWMyD0Ms1MK$UOD z6?hH{V(*^b`kNN6vx!7^3QG1eH*Uv{b zgbx?;(@>$?GSu7g#yzNx>_@GENOMpnMcwa@idZg8jG;DP z-dfEi5x|9dI2)DM15=MOYr!8ik^<;iG^p)45Vbvrp%0F;PC`9+8Y;4jtQ$}#<{nf# zf1n27z9FFp#vX0vCLyjM?{D)bP!YL-8o_JSgT2R?j`*S$St4t4R3y`&KJ`LTYosr# zLn|;7Yik?wT>kx!v1V1?L-i=eI8!kLhLO)@ZI7Dc6{wK!MeTy)sKt2;{qZiULtf*( zJ%2AS25La3u@QEkV1CVa9vf-@2TwHHWh^$M!ai(_{*&0hwCrLI@{^``JHKNTYMcH# z)pTSODuPo`2i9y1z+I@XZ1+(ie}jrZl4)it{BgMUe;yJV`F7OT>T{@2zp(kAn2UUx z>1J*ta1Z&~s53sv3}X-~A`$3^jZu*ph*}dvQEOlVs)GyA)dP=`P|qKr8uXrNLYWRV z^5UrS_Ne;9F)uE{?05WBr%&qtkvS5OgoirP(|X0iXZZ4%5jM`&u) z92P)TtdE-Wwy1h8sw1OOi)_QLDHb zdKyISl98zGI2ZNc-%(Ta2Wq6ZP*e08wPyZ7ElS^2?0+quOsmYNSUc1lcS4P*Cwk*x zR0oEkIxrUX;AN<(+KCG7Nz__;iCX>tU_W$L+r@}#cNl5_6IQ$Cr`q)tWTPO~8gJ(% z=0S}p!&)vHt<3Z~s>tj@iKU))SH2G}S5~#J~)+3=gT43F5Jz~9v-MRi8 zH3dyKnQhh#0g4yxmWP;)&6wTot>reuZnfb}M7&3r&D_SoChQTAVE5?ZY} zQ9Uh!YOp@4!KSDWlTN6`IRRCFChEXhVO@t>{aftylc>db9d%wjLbaFlcM~yxOr-rE zNa6+-MfEV{cJuRoPSj^Y2P}$9u>d|mMJV+Sv$#s2I@S(V-VN2^nW)vi3pL^+s1Dvk zP1z^({QI9?J5A5xqDGVo^`$ZcDwLT}Q&SXcVFOf0H=sUz4xu9Q9-E=hF0(CLVFmI% zQ4c93{$dyVUyJBF1?p+M-DV0>q96JEs1KvMs1K2jsE+-Dm9Piu{(~5d7f>Db zjxuIIg+2@wp$@3?qB~Z`;Zf}WLL@HQ3-R`tNTf%FC=hibhT42>RD>c?YorzGK*1(HISI8rm!cp3j+*6T3jM`rLP$RB{ zidZAmgWBK>?1PF}q66mJa{x9b-vV>u0aQm`q3(0P+C;pA=9kMEFb5Z!qeeasbp)?N zjeH|^#otkjD(fNhACpR=K2*k_LcGYj8HbWTgqosqhfTd+NW@%c90`ST7V5@@)=j9B z@E~f$k5D82VDruqv)U7)Mv@;3V|na`Ls9pAM9qDSqvm5c0ahg+g88)nhmy!n!4AxY z53nI7JZAn#Mn}}*+lUI?Hq`byh??_$|i5~2o_5%q;61XVvAwPq@#XaBb* zp)U@-QQK`Q>W1|gj!~$&|AE;s`3bYAile5aDQbkRQLDX+&Cf?|w-u>O&uw^57p zBj!fmQ|x~|IP8>}f{Lg}^uYW$3Dwi%sKs^;6`|*-5l265%HyNfP<9N!+;|o1;&=@H z!`m6=#m|fw4@;dj5v_iX{jY}FoiiithU#f=)asvv>fk1OeLt!LM^RI854E3TpEuh$ z50)lB2zB2PR3t8;rr@FV6>6ZLT@pGll3p;YJ1c4=c~Oh95UPVM&~pN!Li!78kq*SV zcms1{-iu~+M`CaC8&KbLvRyJAD~CEE$D%s!t|Fl?9_LXZk9pZ#D274gTVpw#hT2}Y zu?VKTV!jvDLhXhVs5S81=2KlY^@^a*{$8lXHy$(NY-BsT&OQ=a?I%$UT|h(1pn+|-y`8t@U*7Tj=F+))*V~y#zUw_R*YWS0sY-`5>ja<%wj5jG zR+~@#z(hP7`l@0R5(-g!)QARS7@k8d#(004xeY)qzM7~bx)W+w%tX!c7Sy7=VEu|Z zF*83j0}Dp2wc@A~vj%!T|67tMK|vSP>fMN%iVvt&n&OceSqQ3uFjRR}+>ISDA7*`Q zLfi<|@s_AHGypY4Yfmw&?kSC6YwpcAe)>dc>rrEm*s&OV{G<4@FxGdwj9 zD2%C@nwl6zdFQ{(0|K9!`eCT{8liTPi<;t*sCH*QWB)5e3n|b^w+6KqHlZH)JL(9% zf(qF))b{*_!_eosxql?;yWgi$BqIrVq z*ay^uotLJ^iBTt9YSi^`R0k{B>rGJ)Zi@cKHz znVu#?&2bLY)RaXv*aX$lE~t@Cw$4F~a4BkvcA~cLCDd8}4D(=`*XDabWu%<%|0J|n z)?+R_h6?=$)JT)PF%J$yjkGdqwKv1~I0zN`38)9JL(TDVR6EyD1N)3RfMUEg14xXq zwNXP!sNv$M9@j*TtR3pcZm19r!W_5?)zBqWWbUE1?`I6e1ndGvWYhyUVK`nyMIzZ}6T)<;PzRzKE{R%{6;bsX zp(4`K`U`5i4n#$8I4UADQP0`e*Js%L zHmpqk4~)PxUra|^p+1cIqdGVX^}I!>0c>$eXgfurrs6JYgdb2h#{Fu(2V_S*xF)K+ zgDoG4+Si*=9lU}%ioaX)elu&U4eC>MFsdVCP#timkkFjWwHG#G0rERg9eIP=*D=4F zdTFh>Q5`Cco+B1L2MVeqv#>bsN44ktFzpn?o@6UyU+w?HB*G{t{?k0LKdPrwP>XUN z>S*49>hWIm!(;aPQ`BPg;r|qw45*HUp+a2?HNe)WqrER`>hw3yg0%nVkc%);=7#i`oqQN-`?bbw_?vYDY7t+v`A?__`g!|!4z>c=o_s6R(R~h^@OtS1=ME zqdvUKM)z^tvR?d(l|*d{62~+Rwng386|3Sv)Om0QwT+&j*2EWkJwYsUJrXr_y;0k8 z2r9BuZ~!huwUa)!nVJHzeOyn25frFLjZh=LkDBvOs73W1i(-m6W^QYvANfwGk&Z`o zbQ-Dyk5E(i8nrvVqB@kp*F+#Ut{^|r*Y)wN)`D?;JO@rBs=-C5Ia-MUxCLwC4J?a6 z@yy)zz;5KnqNd;{>R?G9-$bwkDgsqdA65;qCALQm^sGzb6^Ta}ikA}jc)lvdNoYre zT5OL{9f+RDEW-M@nfy>xNb@K5aY|rSRKzA?7F>`wjyYNX|oo3+yzkCN|- zOtI?}Na5r89dJ?9q8f^ttC^_%z6!M#Hlz0S4%D_hhb8bKmc}e8eLUwtd(*a6?$@}}v{ zV(gBJ*cjA7GZhulpLhV1W-#@xU_B zz_EB0)v=bD%}F>Ab+pbxHM|jP<3%ik*|V6)b-|A0N1z_~9ur`a0CQia0QSE+P?myn z*b~+8Ui8Mxs2i@K*2GiP;`)G^idb1q#{y7ORswZ@71a6B3bkvxqVDUBAvgwW;Xao{ zeiBKu`FMW3u84KW|ArdTZCr#Q*?m0!z3wtDBtJNZkLORbWDGQm>jLWRcXIl8{(fIN zTt#*gHpe2ld_2D=n2+Phf5c_z4i7RT2@Ezpia;GS^Kllw!&W#pw+ZDt%uYTskD01b zr~y1g?dvpo%_@I@OUY*qF(=+>>`y*VJ|EBjYlihWM}L34cBnba-{v~N z*a%mmMjE}GkLS;fg<>W0<536AP1HdA%A4|zs71RIC*W0di;!p&VHVF49729S7Q#{$ z=phb3jU);e;uq_jil#iQk_mBN)Y>Uf+3bcfsFQLQM&J@uNh||rebXqk(Hq2Ig~nJ4Ppe6cgZS)WLEK zyI@2^Gvb|Co%}J>zE9Q2+~NC2ndKZAMfFi(n!QM?J455((F7Mna+JXzh(n z$PdGM_$TU9Ev%V|R2fug>!3#11l4d~R6Ao)i*BaPFGhU_T#q^M0%pVS=&ubQ(ASMMJYR*QW8kmj>*?d$7*5X;*g8EPy+S1JFbkr36j#^~bQ3HC2S`#l(=g1e- z^OCe;|ED66iG=39CLi*OL` zN1c%2ZOj^(VO`gT{jVM!qCgGZLOt*;D&$^mO^;)s8qRBp_j_Qz4d(&Vn)b7ZGm9Q>q zO)Nz*=sI?kuSG90SXmt)oRa}Pp&bJY@29Bdfcoj88PtXs4pyoP5 zN7M0=sHv%ly01QN#t#;P{aA(k2W*9(jzF*CM8H89#2+1$6**Lp`_;>HwOAiqKM2{Z-aew)`b3 zGVg4;??AIia}8wwYhQ*@pwQPr^{_h@!jY)R9JHQ9t$_>HE2xg$u-9*+I`RnB(PuXQ z*80(we?>*w+hzZ2d&I?3SO&FyM&TTsY4iC8nU0mhdX(2ijdUZb{sq**av$~JPw0g| zFdI69%_7W>s^0`7u#;;O+fgI&8e%?lqM;f}hFWZCt=X;lQH!Y*`eALG?}^$SBQXz7 zLG7+1mQPN=7@GPlF-Q)j+%-JsD0ehR_KEY)l5{+7o!^3gzE4a)RdgJ<(E;B zc!!$vSi?--A9auwKt+aM3+m-M8%VrT3%n*X*=N~HO?lU%>>?q!rM+cex4Ax+_dN2y z&`NC5-MRjT{0Cc4>!>>S9p;)|Sy&KtZMr}Al;h36KjX}$&SQQ54^&UcC~T9coP}^G zwEUMB&zDe=PB(>!S0&q!_VWemzU4lRvL)pg=J`Gfx~((9 zrIA>6^r2Mf&qIe&mV&ol`e$`E^N%W9<(gj{+ z@E-3YyieJOs{A?WmDq~=?&CV{(d(*pJRPV_p08`J=WoCAD_qA11-wAO3A0LdsjO z=2YH;(}=`M``|&?);8ip`JXfz*IsK$2l$VgPF2bxxvvE8%QRkz`Z|iQ*baW+VN?DS zAuf4d_55h)9XFKwPcPR}#!u7ETpGSR<^HxL?m==<+;EN({;QFblx7E!52HIHJPk29 zw9uOJT9}CPvDDKm+;-swX@A-|?kQ!MTyJWJp`yv$Q<1uz?RAlk>)-T`B7r_iJrZy~4@-`%+nL8X7HXD#^ybNhw-`W6z83oPX9sK zdHX=!dy2fy&k?q*t<+h-^)j?Kk#;&@d9L>)U5Pr4sqcRLPXoQUfiHi~VJa@d9{BGo zH#f}V#-_SXIv$p?*OybS7yk*}^Xg3b5#Enz?>n7tXrpx6Ty}Qw%;uDR(zAf(bNlc}>LjyuI$<mvTcBt0{Qu`QoJwQt=wjI3{##)K51efu*pfPj$tR?PO=v6$ z<)x{Anft#`uGe9x8qrsk|Gt*d4*x2h=atEJQke>*6VstGwo@vLLmMN_GhL@Fjb-NMO}v*; zIVTmGk?u=*G2VqpKcHcKQ#j9!6}WLK9nv>{zL)>+b%kqs?WHU(_thl5k9wO)>$RG4 z9f_mKucB@Po;6e-(v`RvL4nIdYSOqrH}RWD$BT-Wxi*1o`6(|)daI4ZHqs3#+em}s zC`&mheAL~DdX-20`b5ER+}JA(QQ#^RJdVN9?G6qpULNFdRvp zHFR*GZC9P?NgI0Yqr8japNIrM7&(+lBvW>c@c^9Y6lC;4O1x_K%Lz!M3NXO&3_4y&d*-PPe3T{(SiW~IWKwht#TswmN z^M_6ru0`^mM<>GV!{(4)Z#$x*J)~PvwuJO^(rvgul>A=W-bsbSlux$x7or-?J(Qa#azi2B%~(+Uc?;)H(rvj`pT@`Vu1om<@(;OR|N7&6 z+S02v>8UoYJinaxyw>T*?4vYPlnVOA`5PW`o%}G~U%8HR!dLdumW88Q1x#h!^vpiyMFArhB{(k)CdE z=AS!viqW|01(0q-C-pkWyMRq^@xVh9@a| zM_F@>(ENwk2a`5SsZg$K0Z+9S$qb6;K>4B>s7hc)27bfkT#r$2Z* zf;#E&rfuUc>4nt$_tlrW+f;WeB~$E$QMii26f{1abWAPUXCs6m_*LKqFZQb@<>&N})DBD7MNi4;m*H3#xVjiH^mj8@=6BP$iR+Kt9 zcu%LXE;ORoBHOufq>Mr+$4{o%~xyniLXl=54)T`yckd3T-vxoB)XH>ad< zplz^#eL!X&c#9i%@ZL_HWjw&ocD5k(tJCmxio6zpp}+&#>+O zTUJfm)`F~#@$SY+tj&3r3dyQ zrR_ca?Tz*6+-2Smx#u|VNz_}wJCy6AY~7C9e}7V`78jo565DtI@|U?OD-YdnE59H; z**3n3^epOnQ)fEqKd7IX_fzWTW)O+#^m)pg+WI0h?N_6`9`{A(+DYzxp&!!XlF%zJ zH?AX{hlWb40Hbk3Ic|tUc`DMuy!Gl$-T%JwQAe+*G~AYJN9f2i^0RrbBmWQg9U%QX z??^h*llGGH_WAcGofH&ir&4kn_{fE9Jp8g=ODI%UruG{6)W2ZyrjWSl$YbC(lnfj zcMJQV0B)Xb9}-CYK<_L}Yy17s)_QJD$J2h0j!O%{ zJn0bmjXWt1WpyZf#Jy4fd1`vbT$gu7uKCesKdelBy;75(L>p=BvsC7*&oEyaxoI2G zA1vEMrFc}jX**GfYrj+H(0^{!%{3^`Y3n##t4w+y9jwj$diCV}2c4;oZFs+;ekhaT54C+b`?b_s;c&@xW74>ulGFndF~(gzdO$}nVEOq zd1tV0_g3>7vfpWi?t#SfL{b`8XPNpelpW( z8N`N~A7x1|`55jD+109mRRxIDV~k!h^|$n*4S?8RpXN1jEWJr!d>7SepMj;Zd>n4r zM{s=TTlH0P{vJ|ayJ^Jj5E`*4lIsn-s!26n=E)N*!pnothgTDSNj{vpoGhD;xCh)! zIG52A`;*>f7JsC=9pJom{zE^Sbs&Arz;T+Fs8jH(2o(meiZ5sQIdKNwhrvSnM8U)} z^bET|9!cTOqFrzeGoyQ5U-k^09Rt=h7ten}U#_P#eDV4mG8rsLFXj6VrZ>0+@gU_s zAU_T_H%q3f;8o_v8XJjWES!vAgL9fW`Sy%heXzga){(>I_2-9LO?4?MAatKt60&?v z_9wh8SYe)c62oWV9Yd@KSfC7J5yWPQ@vS`mBh?&3F6Itzdv@x4Yh!*6I(PI~0c(&a z+(W<@;i&+f8S=pcRAe@Sd|}!&6088&K17n>ik+v% zv7Yt=CrzUF1t%0D?vl@K{h{n*Xda|pfDJfi1jMfRe2(D%lVGZZchVyltC&07{cyw_ z_(jpc3xUmWqP+K*iHE-*{1x7dJU4TtICe4qUOu+sX!HTx$5s5Gy=gC`Bzz_!NszYa zlH+j1Ucws=&oD3Yb8zYb{Ha{&Jp$jaymaCbJO$la9Q6x3Gl&J{&(dNQ@gC$gwC+WH zlYtoO11_S%{SpzeVB$uO8Vt{YU|+b`!3t7~NAX76N|&bPTa-mqch2^}GK0SQ59 zn+zagC(1X;4ErA9x8UI{Sp&ELZgD+g3JW@s?MyHr#^vA(utX(V3vS zJIOaObDw^I6XX5=C*WR0ZqX1ctK@pb&%rVf6g$Qdi5Yjf$ zZI|KsG~=m@5@R{4I7BOA*` zOZk#t;bHO``pKzt^ChRJ=D~9&T%$9BM~KnWgLfZZW)ie45`>^$C@UKuVnY$N^C^8K3CO6rK<=McVO>1~$FS29fWK9H|* z8O)84VMD=N>XCWL55rBDBlKa0Q!jx$7S5;i$MK-;@x$y&qjy;TzHZof0I~Ke*cIXv z>QZ9x(TKExgz9IjVM8q;ej`WkP5*U4?wgn^#I~%{@hf=`ST}jrSwzrdU{v^mIi_^VZoX=%N+GoSOSEy9tkl^BU|E zG&>OO&d&y@_yMegunqBLG!`TNP8W<}=rek`sMnCMhf`XQ$WI(VFAp(<-f|9(hPM|z ze{#dhp*arDWq>0b`8_UF+(YU3#)UD}lBWB?X5YDB-eGzU!y_&<# zy7&j`Pw|700(hdDL}EJ)Sq)iWd=vlFQT~gE>j;P zzCf%1eKSki5}&H@H0D;o5i10z8}X?u2EU^R^+YcfuPR^H^i%O`G)qCWbI2_OZsNa@ zA5h`Ra6MIco>QKW73!4;$1vB9{v@=jq4P1=0^FTEiYVp|N9-P){@^RA6a0CzR}YZp zSr!&Wv?@!lfcqobhqxYmGkHJ!9QkQDk>Hz%EpV|};9{GJgW&zel3@Hx4mg_@V$sVgZML~-Y#P6U?!^IeI0A6#}pxMV73%WET9lT3(pkCIMytXczh`@Lb?1@L< zVz2OXDpU;KG4f;dDlzvGes$$FgXc-VCUr491V4KBv5x^iyfY$V zvABbt*cx5f1AbSy$2j~gys3D1J@z&DVtI0U@ygFl&ySgBJX{_6qsgtf^Z8#89#Fj0 zC0ijcmmanj;XZgteN|RFQGSy_e6EVG1k0zd;8MiJX5mH9*(k@MTZeiEd9>;Xr#tl! z`Sm{xa08?Tf?_klUQtiws8Nv0;$rPsQi1$EOMcX2H|S#NM<^CZf3O}Rcw_K9_+0j^ zLAw-gSV9h-q8=h!X@1Snb?3{%FDV$~l{FcTzY6vvFRxF&$K`1TGM7kwf&*K@eWu4u zRJ{@GSjk*BIP-`b@Egwm`6o+804D2G-cxbey%M37Tw9TTN%DI1Lderxo*^%!q7dcyaI*A?Do`S_2ZC_wQw1MxI3tKb{($6W92vTP^<7ZLM= zV^h2foIvJBQ;!F4PCk&?-#O?Cd>e5Gm|=a5gt)}`{a>(N5O*WC44=k82?XzxA7$Z9 z`dttU;K<_O>2SrG)6W67IGl6Ykg2sEc9ePn{Y2)(yud%!ybky+JRzAkNq`nax*!sY za4Bl#@ehvq)xcA|Vet@siq2rc)Tw&J3p9o!{*L}L@GRx601Kz*M}1dc)gi>Sh}VYq zM1KFTL^2oBMq(l2D!eAbXSuis2PG0`g1sZQWcUXDlztpBQm@=gKZ#|BsHfm7(8@_) zY#@0oeZ%&U^Z^sAF7N++5LZCh01!xilxqVJ=^*0Z2`qa+{#b`T=+k9?>f*O+jx=nR za->es16q-*q$5Bvo9csM!1&QTu$-+)#GM|=tXn59+m`t&B#D+o3l|4P1YCiYIq0EX2f zImmEl7X60!Ve<6|+$T>&L~N=aAbAS2gTbrAX#<{)pFy)a@jWxk(P>NGgnTggBKSwh zr^?SYj$o)KB7uPG5V=l%o_Gp8p25-#WRWk&7g8J62>dmocX2Tby>e&_)C2zs_JN+A zIk6Hv#6&ntsNb;MY4ZHD5Q@iZLWol_X?l@ofz?28I{6|v6A;*G48u7^&sP@=k|DLh zV3SnqzRcsE%p3MlA7tn?Nd5?(!fUBef0`{}=I3cnali!PCWZ%Ue*}GR@OjL(XKtGc z+rZpdRF?i6#a_8*G~PS7Owo|xBV$c%EfUNTF%E0oC`(kvf{UTOGXJRVmR_`1Cx_W? zwMN^`wxN;M5Qn*n-5hSQn?r2Tu~AlsH7ed58fCLMB4WbKan`U1Ta4Y;+#||rv0JHq zY;h6R7>C&rZZ+m@ab|0ZIlo)!y8lHv$`Tg_dz3XU+!7P^Z?){H%+)R30)}SZUgdVP zKpk!gjfk>D%ZdoQ*nZf@8k2C=X diff --git a/resources/i18n/hu/BambuStudio.mo b/resources/i18n/hu/BambuStudio.mo index 95ba1646501c65e604aa2750f205965a912b6c0b..61b1687dd1e47f9baff11bf62b3d92f323a1c770 100644 GIT binary patch delta 47810 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�;$oYLV4NHK-NpsO*j!p`kWD9aYfJHhm4YB)-SS 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 bxIBLLz*zgf4MlPdcmJPXhz}mQb`Ja(QCs;6 diff --git a/resources/i18n/it/BambuStudio.mo b/resources/i18n/it/BambuStudio.mo index 2d56d84e6a50e50f2a7793b8fdac4713eb790ec1..d992ffe6827290efd8a6dd47eb7d4840f69b3ccb 100644 GIT binary patch delta 47837 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 WUNIm0^#S>aUzW}<{!8wAUH=QBeJeTu delta 48352 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 K|HAcjpT7WXzs{)u diff --git a/resources/i18n/ja/BambuStudio.mo b/resources/i18n/ja/BambuStudio.mo index bfb66980124ec44e14a77ddf920c87251d7595c9..a557a46bc1fc5c70b41054731063bfed858ce2ae 100644 GIT binary patch delta 47827 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 diff --git a/resources/i18n/nl/BambuStudio.mo b/resources/i18n/nl/BambuStudio.mo index a6d6483d12776eede8b30710c526be466bd22080..19fc32a58ab13914808a5a82cfd1a53d29779510 100644 GIT binary patch delta 47810 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

    |H%Sg_cj+~Ji99Vn4I@1jEGZ~ZTe C;99N# delta 48443 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 delta 48455 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

    i!r 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�M1Z|g=L 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 U+!uOT4G(N?Ev=|W*o(^l0@n^iUjP6A delta 49976 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 Date: Wed, 29 Mar 2023 14:28:38 +0800 Subject: [PATCH 164/339] NEW:support for importing models from browser to Studio on mac Change-Id: Ia4c39b3de1705d66a00442d11bd15a61ebc349ff --- src/slic3r/GUI/GUI_App.cpp | 24 +++++++++++++++++++++++- src/slic3r/GUI/GUI_App.hpp | 1 + 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index c55edd897f..f9ad7eaf95 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -973,7 +973,7 @@ static void generic_exception_handle() //#endif } -static vector split_str(const string& src, const string& separator) +static std::vector split_str(const std::string& src, const std::string& separator) { size_t pos; size_t start_pos = 0; @@ -5500,6 +5500,27 @@ void GUI_App::OSXStoreOpenFiles(const wxArrayString &fileNames) }*/ wxApp::OSXStoreOpenFiles(fileNames); } + +void GUI_App::MacOpenURL(const wxString& url) +{ + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "get mac url " << url; + + if (!url.empty() && boost::starts_with(url, "bambustudioopen://")) { + auto input_str_arr = split_str(url.ToStdString(), "bambustudioopen://"); + + std::string download_origin_url; + for (auto input_str : input_str_arr) { + if (!input_str.empty()) download_origin_url = input_str; + } + + std::string download_file_url = url_decode(download_origin_url); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << download_file_url; + if (!download_file_url.empty() && (boost::starts_with(download_file_url, "http://") || boost::starts_with(download_file_url, "https://"))) { + request_model_download(download_file_url); + } + } +} + // wxWidgets override to get an event on open files. void GUI_App::MacOpenFiles(const wxArrayString &fileNames) { @@ -5565,6 +5586,7 @@ void GUI_App::MacOpenFiles(const wxArrayString &fileNames) start_new_gcodeviewer(&filename);*/ } } + #endif /* __APPLE */ Sidebar& GUI_App::sidebar() diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index af9d1c45d8..51b85bd0b0 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -496,6 +496,7 @@ public: void OSXStoreOpenFiles(const wxArrayString &files); // wxWidgets override to get an event on open files. void MacOpenFiles(const wxArrayString &fileNames) override; + void MacOpenURL(const wxString& url) override; #endif /* __APPLE */ Sidebar& sidebar(); From 8675815fb308a8561e42b7fb302749fca5a53b75 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Wed, 22 Mar 2023 09:54:15 +0800 Subject: [PATCH 165/339] ENH: do not use_open_ssl for engineer machine Change-Id: Ie4b8384324c25f9f402aa78b19e1140492dbef19 Signed-off-by: Stone Li --- src/slic3r/GUI/DeviceManager.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index c3d004c07f..3309c73beb 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -1379,10 +1379,18 @@ void MachineObject::parse_version_func() is_support_ai_monitoring = true; is_support_ams_humidity = true; } - local_use_ssl = ota_version->second.sw_ver.compare("01.03.01.04") >= 0; + if (firmware_type == PrinterFirmwareType::FIRMWARE_TYPE_ENGINEER) + local_use_ssl = false; + else { + local_use_ssl = ota_version->second.sw_ver.compare("01.03.01.04") >= 0; + } } } else if (printer_type == "C11") { - local_use_ssl = true; + if (firmware_type == PrinterFirmwareType::FIRMWARE_TYPE_ENGINEER) + local_use_ssl = false; + else { + local_use_ssl = true; + } is_cloud_print_only = true; if (ota_version != module_vers.end()) { is_support_send_to_sdcard = ota_version->second.sw_ver.compare("01.02.00.00") >= 0; From 9606a041172c5a2b750f8a1f11fd996ac90dc9d9 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Thu, 16 Mar 2023 12:26:23 +0800 Subject: [PATCH 166/339] NEW: support clean print error Change-Id: I0d0b6b5dae22bf5ee793d748d3afb5d45fbf744a --- src/slic3r/GUI/DeviceManager.cpp | 11 +++++++++++ src/slic3r/GUI/DeviceManager.hpp | 1 + src/slic3r/GUI/StatusPanel.cpp | 14 +++++++++++--- src/slic3r/GUI/StatusPanel.hpp | 2 +- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 3309c73beb..82cc286f51 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -1459,6 +1459,17 @@ int MachineObject::command_pushing(std::string cmd) return -1; } +int MachineObject::command_clean_print_error(std::string subtask_id) +{ + BOOST_LOG_TRIVIAL(info) << "command_clean_print_error, id = " << subtask_id; + json j; + j["print"]["command"] = "clean_print_error"; + j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); + j["print"]["subtask_id"] = subtask_id; + + return this->publish_json(j.dump()); +} + int MachineObject::command_upgrade_confirm() { BOOST_LOG_TRIVIAL(info) << "command_upgrade_confirm"; diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 0106e023e0..6c2b1ae0a9 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -692,6 +692,7 @@ public: int command_get_version(bool with_retry = true); int command_request_push_all(); int command_pushing(std::string cmd); + int command_clean_print_error(std::string task_id); /* command upgrade */ int command_upgrade_confirm(); diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 8b69ea1ff2..3a1763118e 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -1591,7 +1591,7 @@ void StatusPanel::show_recenter_dialog() { obj->command_go_home(); } -void StatusPanel::show_error_message(wxString msg, std::string print_error_str) +void StatusPanel::show_error_message(MachineObject* obj, wxString msg, std::string print_error_str) { if (msg.IsEmpty()) { if (m_panel_error_txt->IsShown()) { @@ -1618,6 +1618,14 @@ void StatusPanel::show_error_message(wxString msg, std::string print_error_str) m_print_error_dlg->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::ONLY_CONFIRM, this); } m_print_error_dlg->update_text(msg); + + m_print_error_dlg->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this, obj](wxCommandEvent& e) { + if (obj) { + obj->command_clean_print_error(obj->subtask_id_); + } + }); + + m_print_error_dlg->on_show(); } } @@ -1626,7 +1634,7 @@ void StatusPanel::update_error_message() { if (obj->print_error <= 0) { before_error_code = obj->print_error; - show_error_message(wxEmptyString); + show_error_message(obj, wxEmptyString); return; } else if (before_error_code != obj->print_error && obj->print_error != skip_print_error) { before_error_code = obj->print_error; @@ -1646,7 +1654,7 @@ void StatusPanel::update_error_message() error_msg = wxString::Format("%s[%s %s]", error_msg, print_error_str, show_time); - show_error_message(error_msg, print_error_str); + show_error_message(obj, error_msg, print_error_str); } else { BOOST_LOG_TRIVIAL(info) << "show print error! error_msg is empty, print error = " << obj->print_error; } diff --git a/src/slic3r/GUI/StatusPanel.hpp b/src/slic3r/GUI/StatusPanel.hpp index 422dc94fbe..be3f1108f8 100644 --- a/src/slic3r/GUI/StatusPanel.hpp +++ b/src/slic3r/GUI/StatusPanel.hpp @@ -312,7 +312,7 @@ protected: void on_subtask_pause_resume(wxCommandEvent &event); void on_subtask_abort(wxCommandEvent &event); void on_print_error_clean(wxCommandEvent &event); - void show_error_message(wxString msg, std::string print_error_str = ""); + void show_error_message(MachineObject* obj, wxString msg, std::string print_error_str = ""); void error_info_reset(); void show_recenter_dialog(); From 82ee622ce30502a53db99e6e7ada6dceb39e4a87 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Thu, 30 Mar 2023 15:08:50 +0800 Subject: [PATCH 167/339] ENH: avoid to crash log when parsing sequence_id Change-Id: I14ff7167cf4291a09d955d1ac295197470734546 --- src/slic3r/GUI/DeviceManager.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 82cc286f51..f890dc2be6 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -2384,12 +2384,14 @@ int MachineObject::parse_json(std::string payload) json jj = j["print"]; int sequence_id = 0; if (jj.contains("sequence_id")) { - std::string str_seq = jj["sequence_id"].get(); - try { - sequence_id = stoi(str_seq); - } - catch(...) { - ; + if (jj["sequence_id"].is_string()) { + std::string str_seq = jj["sequence_id"].get(); + try { + sequence_id = stoi(str_seq); + } + catch(...) { + ; + } } } if (jj.contains("command")) { From abf12366e715c942138789aad7325111db6fc7f9 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Wed, 29 Mar 2023 15:22:21 +0800 Subject: [PATCH 168/339] FIX: Problems due to precision errors. STUDIO-2051 Change-Id: I8005f2879b33408df44c476e4297928ca0c52ed9 (cherry picked from commit e789ddd050ee69404a9f6a88686eeed0880da00f) --- src/libslic3r/MultiMaterialSegmentation.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/MultiMaterialSegmentation.cpp b/src/libslic3r/MultiMaterialSegmentation.cpp index 6428ab4561..e5ad474c4a 100644 --- a/src/libslic3r/MultiMaterialSegmentation.cpp +++ b/src/libslic3r/MultiMaterialSegmentation.cpp @@ -48,6 +48,13 @@ struct segment_traits { //#define MMU_SEGMENTATION_DEBUG_COLORIZED_POLYGONS namespace Slic3r { +bool is_equal(float left, float right, float eps = 1e-3) { + return abs(left - right) <= eps; +} + +bool is_less(float left, float right, float eps = 1e-3) { + return left + eps < right; +} // Assumes that is at most same projected_l length or below than projection_l static bool project_line_on_line(const Line &projection_l, const Line &projected_l, Line *new_projected) @@ -1883,7 +1890,7 @@ std::vector> multi_material_segmentation_by_painting(con for (auto layer_it = first_layer; layer_it != (last_layer + 1); ++layer_it) { const Layer *layer = *layer_it; size_t layer_idx = layer_it - layers.begin(); - if (input_expolygons[layer_idx].empty() || facet[0].z() > layer->slice_z || layer->slice_z > facet[2].z()) + if (input_expolygons[layer_idx].empty() || is_less(layer->slice_z, facet[0].z()) || is_less(facet[2].z(), layer->slice_z)) continue; // https://kandepet.com/3d-printing-slicing-3d-objects/ @@ -1891,7 +1898,12 @@ std::vector> multi_material_segmentation_by_painting(con Vec3f line_start_f = facet[0] + t * (facet[2] - facet[0]); Vec3f line_end_f; - if (facet[1].z() > layer->slice_z) { + // BBS: When one side of a triangle coincides with the slice_z. + if ((is_equal(facet[0].z(), facet[1].z()) && is_equal(facet[1].z(), layer->slice_z)) + || (is_equal(facet[1].z(), facet[2].z()) && is_equal(facet[1].z(), layer->slice_z))) { + line_end_f = facet[1]; + } + else if (facet[1].z() > layer->slice_z) { // [P0, P2] and [P0, P1] float t1 = (float(layer->slice_z) - facet[0].z()) / (facet[1].z() - facet[0].z()); line_end_f = facet[0] + t1 * (facet[1] - facet[0]); From e6e0085dccc9a5bf0eb0ee276315a6d762386230 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Thu, 30 Mar 2023 17:08:25 +0800 Subject: [PATCH 169/339] FIX: the volume position is not correct(3mf from solidwork) Change-Id: I69fe3f9896214da502b60bc23deee6525599677e --- src/libslic3r/Format/bbs_3mf.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index d6d9110652..1fd2b1180a 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -4036,16 +4036,17 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) TriangleMesh triangle_mesh(std::move(its), volume_data->mesh_stats); - if (!m_is_bbl_3mf) { - // if the 3mf was not produced by BambuStudio and there is only one instance, - // bake the transformation into the geometry to allow the reload from disk command - // to work properly - if (object.instances.size() == 1) { - triangle_mesh.transform(object.instances.front()->get_transformation().get_matrix(), false); - object.instances.front()->set_transformation(Slic3r::Geometry::Transformation()); - //FIXME do the mesh fixing? - } - } + // BBS: no need to multiply the instance matrix into the volume + //if (!m_is_bbl_3mf) { + // // if the 3mf was not produced by BambuStudio and there is only one instance, + // // bake the transformation into the geometry to allow the reload from disk command + // // to work properly + // if (object.instances.size() == 1) { + // triangle_mesh.transform(object.instances.front()->get_transformation().get_matrix(), false); + // object.instances.front()->set_transformation(Slic3r::Geometry::Transformation()); + // //FIXME do the mesh fixing? + // } + //} if (triangle_mesh.volume() < 0) triangle_mesh.flip_triangles(); From 15ba872d1c6acedde0ef6674172ece938c188bd1 Mon Sep 17 00:00:00 2001 From: Arthur Date: Tue, 28 Mar 2023 15:41:19 +0800 Subject: [PATCH 170/339] ENH: only draw infill in normal nodes of hybrid support 1. Only draw infill in normal nodes of hybrid support. Previously when hybrid support was selected, all nodes would have infill including the circle nodes which don't need infill. Now we draw infill only when there are normal nodes. 2. Move remove_bridge after small overhang removal because the trimmed bridge may be detected as small overhangs. 3. Only split circle nodes in draw_circles to prevent floating circles. 4. Fix the issue where tree support infills may not be aligned, which is caused by the changing spacing of filler. 5. Fix a bug where lightning infill in tree support may crash. Note: it is still not prepared to set lightning infill as default, as for some models the generation time of lightning infill is still too long. Change-Id: I556e5097041d09afae1e2957d4dc9914d4610149 (cherry picked from commit 4c0849a81b60cde0c3b8ca54f03f63ea7c62dcd9) --- src/libslic3r/Layer.hpp | 1 + src/libslic3r/TreeSupport.cpp | 143 ++++++++++++++++++---------------- src/libslic3r/TreeSupport.hpp | 1 + 3 files changed, 79 insertions(+), 66 deletions(-) diff --git a/src/libslic3r/Layer.hpp b/src/libslic3r/Layer.hpp index 8a89de15af..421e33f864 100644 --- a/src/libslic3r/Layer.hpp +++ b/src/libslic3r/Layer.hpp @@ -269,6 +269,7 @@ protected: ExPolygon *area; int type; coordf_t dist_to_top; // mm dist to top + bool need_infill = false; AreaGroup(ExPolygon *a, int t, coordf_t d) : area(a), type(t), dist_to_top(d) {} }; enum OverhangType { Detected = 0, Enforced }; diff --git a/src/libslic3r/TreeSupport.cpp b/src/libslic3r/TreeSupport.cpp index f6d9d6b563..c60cc73356 100644 --- a/src/libslic3r/TreeSupport.cpp +++ b/src/libslic3r/TreeSupport.cpp @@ -923,13 +923,6 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) } } - - if (max_bridge_length > 0 && overhang_areas.size() > 0) { - // do not break bridge for normal part in TreeHybrid - bool break_bridge = !(support_style == smsTreeHybrid && area(overhang_areas) > m_support_params.thresh_big_overhang); - m_object->remove_bridges_from_contacts(lower_layer, layer, extrusion_width_scaled, &overhang_areas, max_bridge_length, break_bridge); - } - SupportLayer* ts_layer = m_object->get_support_layer(layer_nr + m_raft_layers); for (ExPolygon& poly : overhang_areas) { if (!offset_ex(poly, -0.1 * extrusion_width_scaled).empty()) @@ -1138,8 +1131,8 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) SupportLayer* ts_layer = m_object->get_support_layer(layer_nr + m_raft_layers); auto layer = m_object->get_layer(layer_nr); + auto lower_layer = layer->lower_layer; if (support_critical_regions_only) { - auto lower_layer = layer->lower_layer; if (lower_layer == nullptr) ts_layer->overhang_areas = layer->sharp_tails; else @@ -1153,6 +1146,12 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) ts_layer->overhang_areas = diff_ex(ts_layer->overhang_areas, offset_ex(blocker, scale_(radius_sample_resolution))); } + if (max_bridge_length > 0 && ts_layer->overhang_areas.size() > 0) { + // do not break bridge for normal part in TreeHybrid + bool break_bridge = !(support_style == smsTreeHybrid && area(ts_layer->overhang_areas) > m_support_params.thresh_big_overhang); + m_object->remove_bridges_from_contacts(lower_layer, layer, extrusion_width_scaled, &ts_layer->overhang_areas, max_bridge_length, break_bridge); + } + for (auto &area : ts_layer->overhang_areas) { ts_layer->overhang_types.emplace(&area, SupportLayer::Detected); } @@ -1355,14 +1354,15 @@ static void make_perimeter_and_infill(ExtrusionEntitiesPtr& dst, const Print& pr FillParams fill_params; fill_params.density = support_density; fill_params.dont_adjust = true; - ExPolygons to_infill = offset_ex(support_area, -0.5f * float(flow.scaled_spacing()), jtSquare); + ExPolygons to_infill = support_area_new; std::vector fill_boxes = fill_expolygons_generate_paths(dst, std::move(to_infill), filler_support, fill_params, role, flow); // allow wall_count to be zero, which means only draw infill if (wall_count == 0) { for (auto fill_bbox : fill_boxes) { - if (filler_support->angle == 0) { + // extend bounding box on x-axis + if (cos(filler_support->angle)>=sin(filler_support->angle)) { fill_bbox.min[0] -= scale_(10); fill_bbox.max[0] += scale_(10); } @@ -1507,10 +1507,8 @@ void TreeSupport::generate_toolpaths() std::shared_ptr filler_interface = std::shared_ptr(Fill::new_from_type(m_support_params.contact_fill_pattern)); std::shared_ptr filler_Roof1stLayer = std::shared_ptr(Fill::new_from_type(ipRectilinear)); - std::shared_ptr filler_support = std::shared_ptr(Fill::new_from_type(m_support_params.base_fill_pattern)); filler_interface->set_bounding_box(bbox_object); filler_Roof1stLayer->set_bounding_box(bbox_object); - filler_support->set_bounding_box(bbox_object); filler_interface->angle = Geometry::deg2rad(object_config.support_angle.value + 90.); filler_Roof1stLayer->angle = Geometry::deg2rad(object_config.support_angle.value + 90.); @@ -1529,7 +1527,6 @@ void TreeSupport::generate_toolpaths() Flow support_flow(support_extrusion_width, ts_layer->height, nozzle_diameter); coordf_t support_spacing = object_config.support_base_pattern_spacing.value + support_flow.spacing(); coordf_t support_density = std::min(1., support_flow.spacing() / support_spacing); - ts_layer->support_fills.no_sort = false; for (auto& area_group : ts_layer->area_groups) { @@ -1587,25 +1584,27 @@ void TreeSupport::generate_toolpaths() } else { // base_areas - filler_support->spacing = support_flow.spacing(); Flow flow = (layer_id == 0 && m_raft_layers == 0) ? m_object->print()->brim_flow() : support_flow; - if (layer_id>0 && area_group.dist_to_top < 10 && !with_infill && support_style!=smsTreeHybrid) { + bool need_infill = with_infill; + if(m_object_config->support_base_pattern==smpDefault) + need_infill &= area_group.need_infill; + if (layer_id>0 && area_group.dist_to_top < 10 && !need_infill && support_style!=smsTreeHybrid) { if (area_group.dist_to_top < 5) // 1 wall at the top <5mm make_perimeter_and_inner_brim(ts_layer->support_fills.entities, poly, 1, flow, erSupportMaterial); else // at least 2 walls for range [5,10) make_perimeter_and_inner_brim(ts_layer->support_fills.entities, poly, std::max(wall_count, size_t(2)), flow, erSupportMaterial); + } + else if (layer_id > 0 && need_infill && m_support_params.base_fill_pattern != ipLightning) { + std::shared_ptr filler_support = std::shared_ptr(Fill::new_from_type(m_support_params.base_fill_pattern)); + filler_support->set_bounding_box(bbox_object); + filler_support->spacing = object_config.support_base_pattern_spacing.value * support_density;// constant spacing to align support infill lines + filler_support->angle = Geometry::deg2rad(object_config.support_angle.value); - } else if (layer_id > 0 && with_infill && m_support_params.base_fill_pattern != ipLightning) { - filler_support->angle = Geometry::deg2rad(object_config.support_angle.value); - - // allow infill-only mode if support is thick enough - if (offset(poly, -scale_(support_spacing * 1.5)).empty() == false) { - make_perimeter_and_infill(ts_layer->support_fills.entities, *m_object->print(), poly, wall_count, flow, erSupportMaterial, - filler_support.get(), support_density); - } else { // otherwise must draw 1 wall - make_perimeter_and_infill(ts_layer->support_fills.entities, *m_object->print(), poly, std::max(size_t(1), wall_count), flow, - erSupportMaterial, filler_support.get(), support_density); - } + // allow infill-only mode if support is thick enough (so min_wall_count is 0); + // otherwise must draw 1 wall + size_t min_wall_count = offset(poly, -scale_(support_spacing * 1.5)).empty() ? 1 : 0; + make_perimeter_and_infill(ts_layer->support_fills.entities, *m_object->print(), poly, std::max(min_wall_count, wall_count), flow, + erSupportMaterial, filler_support.get(), support_density); } else { make_perimeter_and_inner_brim(ts_layer->support_fills.entities, poly, @@ -1942,7 +1941,7 @@ void TreeSupport::generate() profiler.stage_finish(STAGE_GENERATE_TOOLPATHS); profiler.stage_finish(STAGE_total); - BOOST_LOG_TRIVIAL(debug) << "tree support time " << profiler.report(); + BOOST_LOG_TRIVIAL(info) << "tree support time " << profiler.report(); } coordf_t TreeSupport::calc_branch_radius(coordf_t base_radius, size_t layers_to_top, size_t tip_layers, double diameter_angle_scale_factor) @@ -2044,7 +2043,6 @@ void TreeSupport::draw_circles(const std::vector>& contact_no const coordf_t layer_height = config.layer_height.value; const size_t top_interface_layers = config.support_interface_top_layers.value; const size_t bottom_interface_layers = config.support_interface_bottom_layers.value; - const size_t tip_layers = branch_radius / layer_height; //The number of layers to be shrinking the circle to create a tip. This produces a 45 degree angle. const double diameter_angle_scale_factor = tan(tree_support_branch_diameter_angle * M_PI / 180.);// * layer_height / branch_radius; //Scale factor per layer to produce the desired angle. const coordf_t line_width = config.support_line_width; const coordf_t line_width_scaled = scale_(line_width); @@ -2054,9 +2052,6 @@ void TreeSupport::draw_circles(const std::vector>& contact_no const size_t wall_count = config.tree_support_wall_count.value; const PrintObjectConfig& object_config = m_object->config(); - auto m_support_material_flow = support_material_flow(m_object, float(m_slicing_params.layer_height)); - coordf_t support_spacing = object_config.support_base_pattern_spacing.value + m_support_material_flow.spacing(); - coordf_t support_density = std::min(1., m_support_material_flow.spacing() / support_spacing); BOOST_LOG_TRIVIAL(info) << "draw_circles for object: " << m_object->model_object()->name; // coconut: previously std::unordered_map in m_collision_cache is not multi-thread safe which may cause programs stuck, here we change to tbb::concurrent_unordered_map @@ -2095,6 +2090,8 @@ void TreeSupport::draw_circles(const std::vector>& contact_no coordf_t max_layers_above_base = 0; coordf_t max_layers_above_roof = 0; coordf_t max_layers_above_roof1 = 0; + bool has_polygon_node = false; + bool has_circle_node = false; BOOST_LOG_TRIVIAL(debug) << "circles at layer " << layer_nr << " contact nodes size=" << contact_nodes[layer_nr].size(); //Draw the support areas and add the roofs appropriately to the support roof instead of normal areas. @@ -2115,6 +2112,8 @@ void TreeSupport::draw_circles(const std::vector>& contact_no else { area = offset_ex({ *node.overhang }, scale_(m_ts_data->m_xy_distance)); } + if (node.type == ePolygon) + has_polygon_node = true; } else { Polygon circle; @@ -2155,6 +2154,7 @@ void TreeSupport::draw_circles(const std::vector>& contact_no } append(area, overhang_expanded); } + has_circle_node = true; } if (node.distance_to_top < 0) @@ -2197,11 +2197,15 @@ void TreeSupport::draw_circles(const std::vector>& contact_no // avoid object auto avoid_region_interface = m_ts_data->get_collision(m_ts_data->m_xy_distance, layer_nr); - //roof_areas = std::move(diff_ex(roof_areas, avoid_region_interface)); - //roof_1st_layer = std::move(diff_ex(roof_1st_layer, avoid_region_interface)); - roof_areas = avoid_object_remove_extra_small_parts(roof_areas, avoid_region_interface); + if (has_circle_node) { + roof_areas = avoid_object_remove_extra_small_parts(roof_areas, avoid_region_interface); + roof_1st_layer = avoid_object_remove_extra_small_parts(roof_1st_layer, avoid_region_interface); + } + else { + roof_areas = std::move(diff_ex(roof_areas, avoid_region_interface)); + roof_1st_layer = std::move(diff_ex(roof_1st_layer, avoid_region_interface)); + } roof_areas = intersection_ex(roof_areas, m_machine_border); - roof_1st_layer = avoid_object_remove_extra_small_parts(roof_1st_layer, avoid_region_interface); // roof_1st_layer and roof_areas may intersect, so need to subtract roof_areas from roof_1st_layer roof_1st_layer = std::move(diff_ex(roof_1st_layer, roof_areas)); @@ -2248,7 +2252,10 @@ void TreeSupport::draw_circles(const std::vector>& contact_no } } auto &area_groups = ts_layer->area_groups; - for (auto &area : ts_layer->base_areas) area_groups.emplace_back(&area, SupportLayer::BaseType, max_layers_above_base); + for (auto& area : ts_layer->base_areas) { + area_groups.emplace_back(&area, SupportLayer::BaseType, max_layers_above_base); + area_groups.back().need_infill = has_polygon_node; + } for (auto &area : ts_layer->roof_areas) area_groups.emplace_back(&area, SupportLayer::RoofType, max_layers_above_roof); for (auto &area : ts_layer->floor_areas) area_groups.emplace_back(&area, SupportLayer::FloorType, 10000); for (auto &area : ts_layer->roof_1st_layer) area_groups.emplace_back(&area, SupportLayer::Roof1stLayer, max_layers_above_roof1); @@ -2290,14 +2297,12 @@ void TreeSupport::draw_circles(const std::vector>& contact_no for (layer_nr_lower; layer_nr_lower >= 0; layer_nr_lower--) { if (!m_object->get_support_layer(layer_nr_lower + m_raft_layers)->area_groups.empty()) break; } + if (layer_nr_lower <= 0) continue; + SupportLayer* lower_layer = m_object->get_support_layer(layer_nr_lower + m_raft_layers); - ExPolygons& base_areas_lower = m_object->get_support_layer(layer_nr_lower + m_raft_layers)->base_areas; + ExPolygons& base_areas_lower = lower_layer->base_areas; ExPolygons overhang; - - if (layer_nr_lower == 0) - continue; - if (global_lightning_infill) { //search overhangs globally @@ -2322,7 +2327,7 @@ void TreeSupport::draw_circles(const std::vector>& contact_no } overhangs.emplace_back(to_polygons(overhang)); - contours.emplace_back(to_polygons(base_areas_lower)); //cant guarantee for 100% success probability, infill fails sometimes + contours.emplace_back(to_polygons(base_areas_lower)); printZ_to_lightninglayer[lower_layer->print_z] = overhangs.size() - 1; #ifdef SUPPORT_TREE_DEBUG_TO_SVG @@ -2330,6 +2335,10 @@ void TreeSupport::draw_circles(const std::vector>& contact_no #endif } + + auto m_support_material_flow = support_material_flow(m_object, m_slicing_params.layer_height); + coordf_t support_spacing = object_config.support_base_pattern_spacing.value + m_support_material_flow.spacing(); + coordf_t support_density = std::min(1., m_support_material_flow.spacing() / support_spacing * 2); // for lightning infill the density is defined differently, so need to double it generator = std::make_unique(m_object, contours, overhangs, []() {}, support_density); } @@ -2522,39 +2531,48 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) m_spanning_trees.resize(contact_nodes.size()); //m_mst_line_x_layer_contour_caches.resize(contact_nodes.size()); - if (!is_slim) + if (0) {// get outlines below and avoidance area using tbb - //m_object->print()->set_status(59, "Support: preparing avoidance regions "); + // This part only takes very little time, so we disable it. + typedef std::chrono::high_resolution_clock clock_; + typedef std::chrono::duration > second_; + std::chrono::time_point t0{ clock_::now() }; + // get all the possible radiis std::vector > all_layer_radius(m_highest_overhang_layer+1); std::vector> all_layer_node_dist(m_highest_overhang_layer + 1); for (size_t layer_nr = m_highest_overhang_layer; layer_nr > 0; layer_nr--) { + if (layer_heights[layer_nr].height < EPSILON) continue; auto& layer_radius = all_layer_radius[layer_nr]; auto& layer_node_dist = all_layer_node_dist[layer_nr]; for (Node *p_node : contact_nodes[layer_nr]) { layer_node_dist.emplace(p_node->dist_mm_to_top); } size_t layer_nr_next = layer_heights[layer_nr].next_layer_nr; - if (layer_nr < m_highest_overhang_layer && layer_heights[layer_nr].height>0) { - for (auto node_dist : all_layer_node_dist[layer_nr_next]) - layer_node_dist.emplace(node_dist + layer_heights[layer_nr].height); + if (layer_nr_next <= m_highest_overhang_layer && layer_nr_next>0) { + for (auto node_dist : layer_node_dist) + all_layer_node_dist[layer_nr_next].emplace(node_dist + layer_heights[layer_nr].height); } for (auto node_dist : layer_node_dist) { layer_radius.emplace(calc_branch_radius(branch_radius, node_dist, diameter_angle_scale_factor)); } } // parallel pre-compute avoidance - tbb::parallel_for(tbb::blocked_range(1, m_highest_overhang_layer), [&](const tbb::blocked_range &range) { - for (size_t layer_nr = range.begin(); layer_nr < range.end(); layer_nr++) { + //tbb::parallel_for(tbb::blocked_range(1, m_highest_overhang_layer), [&](const tbb::blocked_range &range) { + //for (size_t layer_nr = range.begin(); layer_nr < range.end(); layer_nr++) { + for (size_t layer_nr = 0; layer_nr < all_layer_radius.size(); layer_nr++) { + BOOST_LOG_TRIVIAL(debug) << "pre calculate_avoidance layer=" << layer_nr; for (auto node_radius : all_layer_radius[layer_nr]) { m_ts_data->get_avoidance(0, layer_nr); m_ts_data->get_avoidance(node_radius, layer_nr); } } - }); + //}); - BOOST_LOG_TRIVIAL(debug) << "before m_avoidance_cache.size()=" << m_ts_data->m_avoidance_cache.size(); + double duration{ std::chrono::duration_cast(clock_::now() - t0).count() }; + BOOST_LOG_TRIVIAL(debug) << "before m_avoidance_cache.size()=" << m_ts_data->m_avoidance_cache.size() + << ", takes " << duration << " secs."; } for (size_t layer_nr = contact_nodes.size() - 1; layer_nr > 0; layer_nr--) // Skip layer 0, since we can't drop down the vertices there. @@ -2565,7 +2583,7 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) auto& layer_contact_nodes = contact_nodes[layer_nr]; if (layer_contact_nodes.empty()) continue; - + int layer_nr_next = layer_heights[layer_nr].next_layer_nr; coordf_t print_z_next = layer_heights[layer_nr_next].print_z; coordf_t height_next = layer_heights[layer_nr_next].height; @@ -2693,7 +2711,6 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) } const std::vector& neighbours = mst.adjacent_nodes(node.position); if (node.type == ePolygon) { - #if 1 // Remove all neighbours that are completely inside the polygon and merge them into this node. for (const Point &neighbour : neighbours) { Node * neighbour_node = nodes_per_part[group_index][neighbour]; @@ -2711,7 +2728,6 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) to_delete.insert(neighbour_node); } } - #endif } else if (neighbours.size() == 1 && vsize2_with_unscale(neighbours[0] - node.position) < max_move_distance2 && mst.adjacent_nodes(neighbours[0]).size() == 1 && nodes_per_part[group_index][neighbours[0]]->type!=ePolygon) // We have just two nodes left, and they're very close, and the only neighbor is not ePolygon @@ -2730,20 +2746,14 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) } Node* neighbour = nodes_per_part[group_index][neighbours[0]]; - size_t new_distance_to_top = std::max(node.distance_to_top, neighbour->distance_to_top) + 1; - size_t new_support_roof_layers_below = std::max(node.support_roof_layers_below, neighbour->support_roof_layers_below) - 1; - double new_dist_mm_to_top = std::max(node.dist_mm_to_top + node.height, neighbour->dist_mm_to_top+neighbour->height); - Node * parent; + Node* node_; if (p_node->parent && neighbour->parent) - parent = ((node.dist_mm_to_top >= neighbour->dist_mm_to_top && p_node->parent) ? p_node : neighbour)->parent; - else if (p_node->parent) - parent = p_node->parent; + node_ = (node.dist_mm_to_top >= neighbour->dist_mm_to_top && p_node->parent) ? p_node : neighbour; else - parent = neighbour->parent; - + node_ = p_node->parent ? p_node : neighbour; const bool to_buildplate = !is_inside_ex(m_ts_data->get_avoidance(0, layer_nr_next), next_position); - Node * next_node = new Node(next_position, new_distance_to_top, layer_nr_next, new_support_roof_layers_below, to_buildplate, p_node, - print_z_next, height_next, new_dist_mm_to_top); + Node * next_node = new Node(next_position, node_->distance_to_top + 1, layer_nr_next, node_->support_roof_layers_below-1, to_buildplate, node_->parent, + print_z_next, height_next); next_node->movement = next_position - node.position; get_max_move_dist(next_node); next_node->is_merged = true; @@ -2858,7 +2868,7 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) if (/*is_slim*/1) sum_direction += direction * (1 / dist2_to_neighbor); else - sum_direction += direction; + sum_direction += direction; } if (/*is_slim*/1) @@ -3565,6 +3575,7 @@ const ExPolygons& TreeSupportData::calculate_avoidance(const RadiusLayerPair& ke { const auto& radius = key.radius; const auto& layer_nr = key.layer_nr; + BOOST_LOG_TRIVIAL(debug) << "calculate_avoidance on radius=" << radius << ", layer=" << layer_nr<<", recursion="<::iterator,bool> ret; constexpr auto max_recursion_depth = 100; if (key.recursions <= max_recursion_depth*2) { diff --git a/src/libslic3r/TreeSupport.hpp b/src/libslic3r/TreeSupport.hpp index eb9c7f0c79..b945ea4c24 100644 --- a/src/libslic3r/TreeSupport.hpp +++ b/src/libslic3r/TreeSupport.hpp @@ -239,6 +239,7 @@ public: , height(0.0) {} + // when dist_mm_to_top_==0, new node's dist_mm_to_top=parent->dist_mm_to_top + parent->height; Node(const Point position, const int distance_to_top, const int obj_layer_nr, const int support_roof_layers_below, const bool to_buildplate, Node* parent, coordf_t print_z_, coordf_t height_, coordf_t dist_mm_to_top_=0) : distance_to_top(distance_to_top) From cf6077fe7d05077b785ebde80d0388bb18c4b4e2 Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Thu, 30 Mar 2023 19:43:40 +0800 Subject: [PATCH 171/339] FIX: CLI: fix the no-check not work issue 1. no-check not work 2. refine the progress updating logic Change-Id: I8acf18d8ab8958310fa3375de50cc9692b3408c1 --- src/BambuStudio.cpp | 72 ++++++++++++++++++++++++++--------- src/libslic3r/PrintConfig.cpp | 2 - 2 files changed, 55 insertions(+), 19 deletions(-) diff --git a/src/BambuStudio.cpp b/src/BambuStudio.cpp index 5d71e39afc..5f11dd9acf 100644 --- a/src/BambuStudio.cpp +++ b/src/BambuStudio.cpp @@ -231,24 +231,26 @@ typedef struct _cli_callback_mgr { lck.unlock(); return; } + int old_total_progress = m_total_progress; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": percent="<("slice"); if (slice_option) plate_to_slice = slice_option->value; + ConfigOptionBool* normative_check_option = m_config.option("normative_check"); if (normative_check_option) normative_check = normative_check_option->value; + ConfigOptionBool* uptodate_option = m_config.option("uptodate"); if (uptodate_option) up_config_to_date = uptodate_option->value; + + ConfigOptionString* pipe_option = m_config.option("pipe"); + if (pipe_option) { + pipe_name = pipe_option->value; + BOOST_LOG_TRIVIAL(info) << boost::format("Will use pipe %1%")%pipe_name; +#if defined(__linux__) || defined(__LINUX__) + g_cli_callback_mgr.start(pipe_name); +#endif + } + /*for (const std::string& file : m_input_files) if (is_gcode_file(file) && boost::filesystem::exists(file)) { start_as_gcodeviewer = true; @@ -1368,6 +1383,13 @@ int CLI::run(int argc, char **argv) arrange_cfg.min_obj_distance = scaled(min_object_distance(m_print_config)); BOOST_LOG_TRIVIAL(info) << "will start transforms, commands count " << m_transforms.size() << "\n"; +#if defined(__linux__) || defined(__LINUX__) + if (g_cli_callback_mgr.is_started()) { + PrintBase::SlicingStatus slicing_status{1, "Loading files finished"}; + cli_status_callback(slicing_status); + } +#endif + for (auto const &opt_key : m_transforms) { BOOST_LOG_TRIVIAL(info) << "process transform " << opt_key << "\n"; if (opt_key == "merge") { @@ -1762,10 +1784,7 @@ int CLI::run(int argc, char **argv) } else if (opt_key == "help_sla") { this->print_help(true, ptSLA); } else if (opt_key == "pipe") { -#if defined(__linux__) || defined(__LINUX__) - std::string pipe_name = m_config.option("pipe")->value; - g_cli_callback_mgr.start(pipe_name); -#endif + //already processed before } else if (opt_key == "load_slicedata") { load_slicedata = true; load_slice_data_dir = m_config.opt_string(opt_key); @@ -1807,8 +1826,10 @@ int CLI::run(int argc, char **argv) export_to_3mf = true; export_3mf_file = m_config.opt_string(opt_key); }else if(opt_key=="no_check"){ - no_check = true; + no_check = m_config.opt_bool(opt_key); //} else if (opt_key == "export_gcode" || opt_key == "export_sla" || opt_key == "slice") { + } else if (opt_key == "normative_check") { + //already processed before } else if (opt_key == "export_slicedata") { export_slicedata = true; export_slice_data_dir = m_config.opt_string(opt_key); @@ -1842,6 +1863,12 @@ int CLI::run(int argc, char **argv) flush_and_exit(1); }*/ BOOST_LOG_TRIVIAL(info) << "Need to slice for plate "<config()); new_print_config.apply(m_extra_config, true); print->apply(model, new_print_config); + BOOST_LOG_TRIVIAL(info) << boost::format("set no_check to %1%:")%no_check; print->set_no_check_flag(no_check);//BBS StringObjectException warning; auto err = print->validate(&warning); @@ -2002,7 +2030,11 @@ int CLI::run(int argc, char **argv) print->set_status_callback(cli_status_callback); g_cli_callback_mgr.set_plate_info(index+1, (plate_to_slice== 0)?partplate_list.get_plate_count():1); if (!warning.string.empty()) { - PrintBase::SlicingStatus slicing_status{2, warning.string, 0, 0}; + PrintBase::SlicingStatus slicing_status{4, warning.string, 0, 0}; + cli_status_callback(slicing_status); + } + else { + PrintBase::SlicingStatus slicing_status{4, "Slicing begins"}; cli_status_callback(slicing_status); } } @@ -2017,6 +2049,12 @@ int CLI::run(int argc, char **argv) } else { BOOST_LOG_TRIVIAL(info) << "plate "<< index+1<< ": load cached data success, go on."; +#if defined(__linux__) || defined(__LINUX__) + if (g_cli_callback_mgr.is_started()) { + PrintBase::SlicingStatus slicing_status{69, "Cache data loaded"}; + cli_status_callback(slicing_status); + } +#endif print->process(true); BOOST_LOG_TRIVIAL(info) << "plate "<< index+1<< ": finished print::process."; } @@ -2099,7 +2137,7 @@ int CLI::run(int argc, char **argv) #if defined(__linux__) || defined(__LINUX__) if (g_cli_callback_mgr.is_started()) { int plate_count = (plate_to_slice== 0)?partplate_list.get_plate_count():1; - g_cli_callback_mgr.set_plate_info(plate_count+1, plate_count); + g_cli_callback_mgr.set_plate_info(0, plate_count); } #endif /* @@ -2153,7 +2191,7 @@ int CLI::run(int argc, char **argv) #if defined(__linux__) || defined(__LINUX__) if (g_cli_callback_mgr.is_started()) { - PrintBase::SlicingStatus slicing_status{91, "Generate thumbnails"}; + PrintBase::SlicingStatus slicing_status{94, "Generate thumbnails"}; cli_status_callback(slicing_status); } #endif @@ -2626,7 +2664,7 @@ int CLI::run(int argc, char **argv) #if defined(__linux__) || defined(__LINUX__) if (g_cli_callback_mgr.is_started()) { - PrintBase::SlicingStatus slicing_status{95, "Exporting 3mf"}; + PrintBase::SlicingStatus slicing_status{97, "Exporting 3mf"}; cli_status_callback(slicing_status); } #endif diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 4e91ec4e35..eea798626c 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -4634,14 +4634,12 @@ CLIActionsConfigDef::CLIActionsConfigDef() def = this->add("no_check", coBool); def->label = L("No check"); def->tooltip = L("Do not run any validity checks, such as gcode path conflicts check."); - def->cli = "no_check"; def->cli_params = "option"; def->set_default_value(new ConfigOptionBool(false)); def = this->add("normative_check", coBool); def->label = L("Normative check"); def->tooltip = L("Check the normative items."); - def->cli = "normative_check"; def->cli_params = "option"; def->set_default_value(new ConfigOptionBool(true)); From ad80943c692e82321fe6abcea82fb32ecf069c06 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Mon, 27 Mar 2023 17:00:55 +0800 Subject: [PATCH 172/339] FIX: delete unnecessary travel of wipe tower STUDIO-2203 Change-Id: Ic55030a09f66a789245f80096e8f3ffea73a904f --- src/libslic3r/GCode/WipeTower.cpp | 60 ++++++++++++++++++++++++++----- 1 file changed, 52 insertions(+), 8 deletions(-) diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index c0e88255ca..6e8aaa79c1 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -30,6 +30,35 @@ inline float align_floor(float value, float base) return std::floor((value) / base) * base; } +static bool is_valid_gcode(const std::string &gcode) +{ + int str_size = gcode.size(); + int start_index = 0; + int end_index = 0; + bool is_valid = false; + while (end_index < str_size) { + if (gcode[end_index] != '\n') { + end_index++; + continue; + } + + if (end_index > start_index) { + std::string line_str = gcode.substr(start_index, end_index - start_index); + line_str.erase(0, line_str.find_first_not_of(" ")); + line_str.erase(line_str.find_last_not_of(" ") + 1); + if (!line_str.empty() && line_str[0] != ';') { + is_valid = true; + break; + } + } + + start_index = end_index + 1; + end_index = start_index; + } + + return is_valid; +} + class WipeTowerWriter { public: @@ -1085,7 +1114,8 @@ void WipeTower::toolchange_Wipe( x_to_wipe -= (xr - xl); if (x_to_wipe < WT_EPSILON) { - writer.travel(m_left_to_right ? xl + 1.5f*m_perimeter_width : xr - 1.5f*m_perimeter_width, writer.y(), 7200); + // BBS: Delete some unnecessary travel + //writer.travel(m_left_to_right ? xl + 1.5f*m_perimeter_width : xr - 1.5f*m_perimeter_width, writer.y(), 7200); break; } // stepping to the next line: @@ -1097,9 +1127,12 @@ void WipeTower::toolchange_Wipe( // We may be going back to the model - wipe the nozzle. If this is followed // by finish_layer, this wipe path will be overwritten. + //writer.add_wipe_point(writer.x(), writer.y()) + // .add_wipe_point(writer.x(), writer.y() - dy) + // .add_wipe_point(! m_left_to_right ? m_wipe_tower_width : 0.f, writer.y() - dy); + // BBS: modify the wipe_path after toolchange writer.add_wipe_point(writer.x(), writer.y()) - .add_wipe_point(writer.x(), writer.y() - dy) - .add_wipe_point(! m_left_to_right ? m_wipe_tower_width : 0.f, writer.y() - dy); + .add_wipe_point(! m_left_to_right ? m_wipe_tower_width : 0.f, writer.y()); if (m_layer_info != m_plan.end() && m_current_tool != m_layer_info->tool_changes.back().new_tool) m_left_to_right = !m_left_to_right; @@ -1167,13 +1200,15 @@ WipeTower::ToolChangeResult WipeTower::finish_layer(bool extrude_perimeter, bool writer.rectangle_fill_box(this, fill_box.ld, fill_box.rd.x() - fill_box.ld.x(), fill_box.ru.y() - fill_box.rd.y(), feedrate); // we are in one of the corners, travel to ld along the perimeter: - if (writer.x() > fill_box.ld.x() + EPSILON) writer.travel(fill_box.ld.x(), writer.y()); - if (writer.y() > fill_box.ld.y() + EPSILON) writer.travel(writer.x(), fill_box.ld.y()); + // BBS: Delete some unnecessary travel + //if (writer.x() > fill_box.ld.x() + EPSILON) writer.travel(fill_box.ld.x(), writer.y()); + //if (writer.y() > fill_box.ld.y() + EPSILON) writer.travel(writer.x(), fill_box.ld.y()); // Extrude infill to support the material to be printed above. const float dy = (fill_box.lu.y() - fill_box.ld.y() - m_perimeter_width); float left = fill_box.lu.x() + 2*m_perimeter_width; float right = fill_box.ru.x() - 2 * m_perimeter_width; + std::vector finish_rect_wipe_path; if (extruder_fill && dy > m_perimeter_width) { writer.travel(fill_box.ld + Vec2f(m_perimeter_width * 2, 0.f)) @@ -1221,6 +1256,9 @@ WipeTower::ToolChangeResult WipeTower::finish_layer(bool extrude_perimeter, bool writer.travel(x,writer.y()); writer.extrude(x,i%2 ? fill_box.rd.y() : fill_box.ru.y()); } + // BBS: add wipe_path for this case: only with finish rectangle + finish_rect_wipe_path.emplace_back(writer.pos()); + finish_rect_wipe_path.emplace_back(Vec2f(left + dx * n, n % 2 ? fill_box.ru.y() : fill_box.rd.y())); } writer.append("; CP EMPTY GRID END\n" @@ -1274,6 +1312,11 @@ WipeTower::ToolChangeResult WipeTower::finish_layer(bool extrude_perimeter, bool (writer.pos() == wt_box.rd ? wt_box.ru : (writer.pos() == wt_box.ru ? wt_box.lu : wt_box.ld))); + + // BBS: add wipe_path for this case: only with finish rectangle + if (finish_rect_wipe_path.size() == 2 && finish_rect_wipe_path[0] == writer.pos()) + target = finish_rect_wipe_path[1]; + writer.add_wipe_point(writer.pos()) .add_wipe_point(target); @@ -1602,7 +1645,7 @@ void WipeTower::generate(std::vector> & else { if (idx == -1) layer_result[0] = merge_tcr(finish_layer_tcr, layer_result[0]); - else + else if (is_valid_gcode(finish_layer_tcr.gcode)) layer_result[idx] = merge_tcr(layer_result[idx], finish_layer_tcr); } @@ -1637,8 +1680,9 @@ WipeTower::ToolChangeResult WipeTower::only_generate_out_wall() bool toolchanges_on_layer = m_layer_info->toolchanges_depth() > WT_EPSILON; // we are in one of the corners, travel to ld along the perimeter: - if (writer.x() > fill_box.ld.x() + EPSILON) writer.travel(fill_box.ld.x(), writer.y()); - if (writer.y() > fill_box.ld.y() + EPSILON) writer.travel(writer.x(), fill_box.ld.y()); + // BBS: Delete some unnecessary travel + //if (writer.x() > fill_box.ld.x() + EPSILON) writer.travel(fill_box.ld.x(), writer.y()); + //if (writer.y() > fill_box.ld.y() + EPSILON) writer.travel(writer.x(), fill_box.ld.y()); // outer perimeter (always): // BBS From 97179d1378100cca28d67cd7d94de4a94b21283e Mon Sep 17 00:00:00 2001 From: "qing.zhang" Date: Wed, 22 Mar 2023 19:09:27 +0800 Subject: [PATCH 173/339] ENH: arachne + overhang slow down Signed-off-by: qing.zhang Change-Id: Ic015c1c6d369edabaa1195416942881c0756f839 --- src/libslic3r/ClipperUtils.cpp | 25 ++-- src/libslic3r/ClipperUtils.hpp | 8 +- src/libslic3r/PerimeterGenerator.cpp | 179 ++++++++++++++++++++++++-- src/slic3r/GUI/ConfigManipulation.cpp | 60 ++++----- 4 files changed, 214 insertions(+), 58 deletions(-) diff --git a/src/libslic3r/ClipperUtils.cpp b/src/libslic3r/ClipperUtils.cpp index bbe98890b0..ecd0ab4f5c 100644 --- a/src/libslic3r/ClipperUtils.cpp +++ b/src/libslic3r/ClipperUtils.cpp @@ -63,7 +63,7 @@ Points SinglePathProvider::s_end; // Clip source polygon to be used as a clipping polygon with a bouding box around the source (to be clipped) polygon. // Useful as an optimization for expensive ClipperLib operations, for example when clipping source polygons one by one // with a set of polygons covering the whole layer below. -template inline void clip_clipper_polygon_with_subject_bbox_templ(const std::vector &src, const BoundingBox &bbox, std::vector &out) +template inline void clip_clipper_polygon_with_subject_bbox_templ(const std::vector &src, const BoundingBox &bbox, std::vector &out, const bool get_entire_polygons=false) { out.clear(); const size_t cnt = src.size(); @@ -97,16 +97,21 @@ template inline void clip_clipper_polygon_with_subject_bbox_ // Never produce just a single point output polygon. if (!out.empty()) - if (int sides_next = sides(out.front()); + if(get_entire_polygons){ + out=src; + }else{ + if (int sides_next = sides(out.front()); // The last point is inside. Take it. sides_this == 0 || // Either this point is outside and previous or next is inside, or // the edge possibly cuts corner of the bounding box. (sides_prev & sides_this & sides_next) == 0) out.emplace_back(src.back()); + } + } - void clip_clipper_polygon_with_subject_bbox(const Points &src, const BoundingBox &bbox, Points &out) { clip_clipper_polygon_with_subject_bbox_templ(src, bbox, out); } +void clip_clipper_polygon_with_subject_bbox(const Points &src, const BoundingBox &bbox, Points &out, const bool get_entire_polygons) { clip_clipper_polygon_with_subject_bbox_templ(src, bbox, out, get_entire_polygons); } void clip_clipper_polygon_with_subject_bbox(const ZPoints &src, const BoundingBox &bbox, ZPoints &out) { clip_clipper_polygon_with_subject_bbox_templ(src, bbox, out); } template [[nodiscard]] std::vector clip_clipper_polygon_with_subject_bbox_templ(const std::vector &src, const BoundingBox &bbox) @@ -123,10 +128,10 @@ void clip_clipper_polygon_with_subject_bbox(const Polygon &src, const BoundingBo clip_clipper_polygon_with_subject_bbox(src.points, bbox, out.points); } -[[nodiscard]] Polygon clip_clipper_polygon_with_subject_bbox(const Polygon &src, const BoundingBox &bbox) +[[nodiscard]] Polygon clip_clipper_polygon_with_subject_bbox(const Polygon &src, const BoundingBox &bbox, const bool get_entire_polygons) { Polygon out; - clip_clipper_polygon_with_subject_bbox(src.points, bbox, out.points); + clip_clipper_polygon_with_subject_bbox(src.points, bbox, out.points, get_entire_polygons); return out; } @@ -138,21 +143,21 @@ void clip_clipper_polygon_with_subject_bbox(const Polygon &src, const BoundingBo out.erase(std::remove_if(out.begin(), out.end(), [](const Polygon &polygon) { return polygon.empty(); }), out.end()); return out; } -[[nodiscard]] Polygons clip_clipper_polygons_with_subject_bbox(const ExPolygon &src, const BoundingBox &bbox) +[[nodiscard]] Polygons clip_clipper_polygons_with_subject_bbox(const ExPolygon &src, const BoundingBox &bbox, const bool get_entire_polygons) { Polygons out; out.reserve(src.num_contours()); - out.emplace_back(clip_clipper_polygon_with_subject_bbox(src.contour, bbox)); - for (const Polygon &p : src.holes) out.emplace_back(clip_clipper_polygon_with_subject_bbox(p, bbox)); + out.emplace_back(clip_clipper_polygon_with_subject_bbox(src.contour, bbox, get_entire_polygons)); + for (const Polygon &p : src.holes) out.emplace_back(clip_clipper_polygon_with_subject_bbox(p, bbox, get_entire_polygons)); out.erase(std::remove_if(out.begin(), out.end(), [](const Polygon &polygon) { return polygon.empty(); }), out.end()); return out; } -[[nodiscard]] Polygons clip_clipper_polygons_with_subject_bbox(const ExPolygons &src, const BoundingBox &bbox) +[[nodiscard]] Polygons clip_clipper_polygons_with_subject_bbox(const ExPolygons &src, const BoundingBox &bbox, const bool get_entire_polygons) { Polygons out; out.reserve(number_polygons(src)); for (const ExPolygon &p : src) { - Polygons temp = clip_clipper_polygons_with_subject_bbox(p, bbox); + Polygons temp = clip_clipper_polygons_with_subject_bbox(p, bbox, get_entire_polygons); out.insert(out.end(), temp.begin(), temp.end()); } diff --git a/src/libslic3r/ClipperUtils.hpp b/src/libslic3r/ClipperUtils.hpp index aa9a73dd26..c36778e827 100644 --- a/src/libslic3r/ClipperUtils.hpp +++ b/src/libslic3r/ClipperUtils.hpp @@ -305,15 +305,15 @@ namespace ClipperUtils { // Clip source polygon to be used as a clipping polygon with a bouding box around the source (to be clipped) polygon. // Useful as an optimization for expensive ClipperLib operations, for example when clipping source polygons one by one // with a set of polygons covering the whole layer below. - void clip_clipper_polygon_with_subject_bbox(const Points &src, const BoundingBox &bbox, Points &out); + void clip_clipper_polygon_with_subject_bbox(const Points &src, const BoundingBox &bbox, Points &out, const bool get_entire_polygons = false); void clip_clipper_polygon_with_subject_bbox(const ZPoints &src, const BoundingBox &bbox, ZPoints &out); [[nodiscard]] Points clip_clipper_polygon_with_subject_bbox(const Points &src, const BoundingBox &bbox); [[nodiscard]] ZPoints clip_clipper_polygon_with_subject_bbox(const ZPoints &src, const BoundingBox &bbox); void clip_clipper_polygon_with_subject_bbox(const Polygon &src, const BoundingBox &bbox, Polygon &out); - [[nodiscard]] Polygon clip_clipper_polygon_with_subject_bbox(const Polygon &src, const BoundingBox &bbox); + [[nodiscard]] Polygon clip_clipper_polygon_with_subject_bbox(const Polygon &src, const BoundingBox &bbox, const bool get_entire_polygons = false); [[nodiscard]] Polygons clip_clipper_polygons_with_subject_bbox(const Polygons &src, const BoundingBox &bbox); - [[nodiscard]] Polygons clip_clipper_polygons_with_subject_bbox(const ExPolygon &src, const BoundingBox &bbox); - [[nodiscard]] Polygons clip_clipper_polygons_with_subject_bbox(const ExPolygons &src, const BoundingBox &bbox); + [[nodiscard]] Polygons clip_clipper_polygons_with_subject_bbox(const ExPolygon &src, const BoundingBox &bbox, const bool get_entire_polygons = false); + [[nodiscard]] Polygons clip_clipper_polygons_with_subject_bbox(const ExPolygons &src, const BoundingBox &bbox, const bool get_entire_polygons = false); } diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index f938a12b99..9a3a7f759a 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -495,6 +495,90 @@ struct PerimeterGeneratorArachneExtrusion bool fuzzify = false; }; + +static void smooth_overhang_level(ExtrusionPaths &paths) +{ + const double threshold_length = scale_(0.8); + const double filter_range = scale_(6.5); + + // 0.save old overhang series first which is input of filter + const int path_num = paths.size(); + if (path_num < 2) + // don't need to do filting if only has one path in vector + return; + std::vector old_overhang_series; + old_overhang_series.reserve(path_num); + for (int i = 0; i < path_num; i++) old_overhang_series.push_back(paths[i].get_overhang_degree()); + + for (int i = 0; i < path_num;) { + if ((paths[i].role() != erPerimeter && paths[i].role() != erExternalPerimeter)) { + i++; + continue; + } + + double current_length = paths[i].length(); + int current_overhang_degree = old_overhang_series[i]; + double total_lens = current_length; + int pt = i + 1; + + for (; pt < path_num; pt++) { + if (paths[pt].get_overhang_degree() != current_overhang_degree || (paths[pt].role() != erPerimeter && paths[pt].role() != erExternalPerimeter)) { + break; + } + total_lens += paths[pt].length(); + } + + if (total_lens < threshold_length) { + double left_total_length = (filter_range - total_lens) / 2; + double right_total_length = left_total_length; + + double temp_length; + int j = i - 1; + int index; + std::vector> neighbor_path; + while (left_total_length > 0) { + index = (j < 0) ? path_num - 1 : j; + if (paths[index].role() == erOverhangPerimeter) break; + temp_length = paths[index].length(); + if (temp_length > left_total_length) + neighbor_path.emplace_back(std::pair(left_total_length, old_overhang_series[index])); + else + neighbor_path.emplace_back(std::pair(temp_length, old_overhang_series[index])); + left_total_length -= temp_length; + j = index; + j--; + } + + j = pt; + while (right_total_length > 0) { + index = j % path_num; + if (paths[index].role() == erOverhangPerimeter) break; + temp_length = paths[index].length(); + if (temp_length > right_total_length) + neighbor_path.emplace_back(std::pair(right_total_length, old_overhang_series[index])); + else + neighbor_path.emplace_back(std::pair(temp_length, old_overhang_series[index])); + right_total_length -= temp_length; + j++; + } + + double sum = 0; + double length_sum = 0; + for (auto it = neighbor_path.begin(); it != neighbor_path.end(); it++) { + sum += (it->first * it->second); + length_sum += it->first; + } + + double average_overhang = (double) (total_lens * current_overhang_degree + sum) / (length_sum + total_lens); + + for (int idx=i; idx& pg_extrusions) { ExtrusionEntityCollection extrusion_coll; @@ -514,26 +598,87 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p if (perimeter_generator.config->detect_overhang_wall && perimeter_generator.layer_id > perimeter_generator.object_config->raft_layers && !((perimeter_generator.object_config->enable_support || perimeter_generator.object_config->enforce_support_layers > 0) && perimeter_generator.object_config->support_top_z_distance.value == 0)) { - ClipperLib_Z::Path extrusion_path; extrusion_path.reserve(extrusion->size()); - for (const Arachne::ExtrusionJunction& ej : extrusion->junctions) + BoundingBox extrusion_path_bbox; + for (const Arachne::ExtrusionJunction &ej : extrusion->junctions) { extrusion_path.emplace_back(ej.p.x(), ej.p.y(), ej.w); - - ClipperLib_Z::Paths lower_slices_paths; - lower_slices_paths.reserve(perimeter_generator.lower_slices_polygons().size()); - for (const Polygon& poly : perimeter_generator.lower_slices_polygons()) { - lower_slices_paths.emplace_back(); - ClipperLib_Z::Path& out = lower_slices_paths.back(); - out.reserve(poly.points.size()); - for (const Point& pt : poly.points) - out.emplace_back(pt.x(), pt.y(), 0); + extrusion_path_bbox.merge(Point(ej.p.x(), ej.p.y())); } - // get non-overhang paths by intersecting this loop with the grown lower slices - extrusion_paths_append(paths, clip_extrusion(extrusion_path, lower_slices_paths, ClipperLib_Z::ctIntersection), role, - is_external ? perimeter_generator.ext_perimeter_flow : perimeter_generator.perimeter_flow); + ClipperLib_Z::Paths lower_slices_paths; + { + lower_slices_paths.reserve(perimeter_generator.lower_slices_polygons().size()); + Points clipped; + extrusion_path_bbox.offset(SCALED_EPSILON); + for (const Polygon &poly : perimeter_generator.lower_slices_polygons()) { + clipped.clear(); + ClipperUtils::clip_clipper_polygon_with_subject_bbox(poly.points, extrusion_path_bbox, clipped); + if (!clipped.empty()) { + lower_slices_paths.emplace_back(); + ClipperLib_Z::Path &out = lower_slices_paths.back(); + out.reserve(clipped.size()); + for (const Point &pt : clipped) + out.emplace_back(pt.x(), pt.y(), 0); + } + } + } + ExtrusionPaths temp_paths; + // get non-overhang paths by intersecting this loop with the grown lower slices + extrusion_paths_append(temp_paths, clip_extrusion(extrusion_path, lower_slices_paths, ClipperLib_Z::ctIntersection), role, + is_external ? perimeter_generator.ext_perimeter_flow : perimeter_generator.perimeter_flow); + + if (perimeter_generator.config->enable_overhang_speed && perimeter_generator.config->fuzzy_skin == FuzzySkinType::None) { + + Flow flow = is_external ? perimeter_generator.ext_perimeter_flow : perimeter_generator.perimeter_flow; + std::map> clipper_serise; + + std::map recognization_paths; + for (const ExtrusionPath &path : temp_paths) { + if (recognization_paths.count(path.width)) + recognization_paths[path.width].emplace_back(std::move(path)); + else + recognization_paths.insert(std::pair(path.width, {std::move(path)})); + } + + for (const auto &it : recognization_paths) { + Polylines be_clipped; + + for (const ExtrusionPath &p : it.second) { + be_clipped.emplace_back(std::move(p.polyline)); + } + + BoundingBox extrusion_bboxs = get_extents(be_clipped); + //ExPolygons lower_slcier_chopped = *perimeter_generator.lower_slices; + Polygons lower_slcier_chopped=ClipperUtils::clip_clipper_polygons_with_subject_bbox(*perimeter_generator.lower_slices, extrusion_bboxs, true); + + double start_pos = -it.first * 0.5; + double end_pos = 0.5 * it.first; + + Polylines remain_polylines; + std::vector degree_polygons; + for (int j = 0; j < overhang_sampling_number; j++) { + Polygons limiton_polygons = offset(lower_slcier_chopped, float(scale_(start_pos + (j + 0.5) * (end_pos - start_pos) / (overhang_sampling_number - 1)))); + + Polylines inside_polines = j == 0 ? intersection_pl(be_clipped, limiton_polygons) : intersection_pl(remain_polylines, limiton_polygons); + + remain_polylines = j == 0 ? diff_pl(be_clipped, limiton_polygons) : diff_pl(remain_polylines, limiton_polygons); + + extrusion_paths_append(paths, std::move(inside_polines), j, int(0), role, it.second.front().mm3_per_mm, it.second.front().width, it.second.front().height); + + if (remain_polylines.size() == 0) break; + } + + if (remain_polylines.size() != 0) { + extrusion_paths_append(paths, std::move(remain_polylines), overhang_sampling_number - 1, int(0), erOverhangPerimeter, it.second.front().mm3_per_mm, it.second.front().width, it.second.front().height); + } + } + + } else { + paths = std::move(temp_paths); + + } // get overhang paths by checking what parts of this loop fall // outside the grown lower slices (thus where the distance between // the loop centerline and original lower slices is >= half nozzle diameter @@ -576,6 +721,12 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p } chain_and_reorder_extrusion_paths(paths, &start_point); + + if (perimeter_generator.config->enable_overhang_speed && perimeter_generator.config->fuzzy_skin == FuzzySkinType::None) { + // BBS: filter the speed + smooth_overhang_level(paths); + } + } } else { diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index eb63dd2037..2d1a7a48a1 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -320,35 +320,35 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con } //BBS - if (config->opt_enum("wall_generator") == PerimeterGeneratorType::Arachne && - config->opt_bool("enable_overhang_speed")) - { - wxString msg_text = _(L("Arachne engine only works when overhang slowing down is disabled.\n" - "This may cause decline in the quality of overhang surface when print fastly")) + "\n"; - if (is_global_config) - msg_text += "\n" + _(L("Disable overhang slowing down automatically? \n" - "Yes - Enable arachne and disable overhang slowing down\n" - "No - Give up using arachne this time")); - MessageDialog dialog(m_msg_dlg_parent, msg_text, "", - wxICON_WARNING | (is_global_config ? wxYES | wxNO : wxOK)); - DynamicPrintConfig new_conf = *config; - is_msg_dlg_already_exist = true; - auto answer = dialog.ShowModal(); - bool enable_overhang_slow_down = true; - if (!is_global_config || answer == wxID_YES) { - new_conf.set_key_value("enable_overhang_speed", new ConfigOptionBool(false)); - enable_overhang_slow_down = false; - } - else { - new_conf.set_key_value("wall_generator", new ConfigOptionEnum(PerimeterGeneratorType::Classic)); - } - apply(config, &new_conf); - if (cb_value_change) { - if (!enable_overhang_slow_down) - cb_value_change("enable_overhang_speed", false); - } - is_msg_dlg_already_exist = false; - } + //if (config->opt_enum("wall_generator") == PerimeterGeneratorType::Arachne && + // config->opt_bool("enable_overhang_speed")) + //{ + // wxString msg_text = _(L("Arachne engine only works when overhang slowing down is disabled.\n" + // "This may cause decline in the quality of overhang surface when print fastly")) + "\n"; + // if (is_global_config) + // msg_text += "\n" + _(L("Disable overhang slowing down automatically? \n" + // "Yes - Enable arachne and disable overhang slowing down\n" + // "No - Give up using arachne this time")); + // MessageDialog dialog(m_msg_dlg_parent, msg_text, "", + // wxICON_WARNING | (is_global_config ? wxYES | wxNO : wxOK)); + // DynamicPrintConfig new_conf = *config; + // is_msg_dlg_already_exist = true; + // auto answer = dialog.ShowModal(); + // bool enable_overhang_slow_down = true; + // if (!is_global_config || answer == wxID_YES) { + // new_conf.set_key_value("enable_overhang_speed", new ConfigOptionBool(false)); + // enable_overhang_slow_down = false; + // } + // else { + // new_conf.set_key_value("wall_generator", new ConfigOptionEnum(PerimeterGeneratorType::Classic)); + // } + // apply(config, &new_conf); + // if (cb_value_change) { + // if (!enable_overhang_slow_down) + // cb_value_change("enable_overhang_speed", false); + // } + // is_msg_dlg_already_exist = false; + //} // BBS int filament_cnt = wxGetApp().preset_bundle->filament_presets.size(); @@ -669,7 +669,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co "min_feature_size", "min_bead_width", "wall_distribution_count" }) toggle_line(el, have_arachne); toggle_field("detect_thin_wall", !have_arachne); - toggle_field("enable_overhang_speed", !have_arachne); + //toggle_field("enable_overhang_speed", !have_arachne); toggle_field("only_one_wall_top", !have_arachne); } From 87471927151551a3dda319f11f234c218b7ec18a Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Mon, 27 Mar 2023 19:13:06 +0800 Subject: [PATCH 174/339] FIX: [STUDIO-2235] FlushFileBuffers on conf bak Change-Id: I26ddf05c8b7105bb9226930e64a736cdc9be4e4f --- src/libslic3r/utils.cpp | 2 ++ src/slic3r/GUI/GUI_App.cpp | 26 +++++++++++++------------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/libslic3r/utils.cpp b/src/libslic3r/utils.cpp index 15bca1f0b2..7ab4bf41e1 100644 --- a/src/libslic3r/utils.cpp +++ b/src/libslic3r/utils.cpp @@ -897,6 +897,8 @@ CopyFileResult copy_file(const std::string &from, const std::string &to, std::st goto __finished; } + FlushFileBuffers(handledst); + __finished: if (src_wstr) delete[] src_wstr; diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index f9ad7eaf95..316e07038a 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -2050,6 +2050,19 @@ void GUI_App::init_app_config() m_datadir_redefined = true; } + // start log here + std::time_t t = std::time(0); + std::tm * now_time = std::localtime(&t); + std::stringstream buf; + buf << std::put_time(now_time, "debug_%a_%b_%d_%H_%M_%S_"); + buf << get_current_pid() << ".log"; + std::string log_filename = buf.str(); +#if !BBL_RELEASE_TO_PUBLIC + set_log_path_and_level(log_filename, 5); +#else + set_log_path_and_level(log_filename, 3); +#endif + //BBS: remove GCodeViewer as seperate APP logic if (!app_config) app_config = new AppConfig(); @@ -2173,19 +2186,6 @@ bool GUI_App::OnInit() bool GUI_App::on_init_inner() { - //start log here - std::time_t t = std::time(0); - std::tm* now_time = std::localtime(&t); - std::stringstream buf; - buf << std::put_time(now_time, "debug_%a_%b_%d_%H_%M_%S_"); - buf << get_current_pid() << ".log"; - std::string log_filename = buf.str(); -#if !BBL_RELEASE_TO_PUBLIC - set_log_path_and_level(log_filename, 5); -#else - set_log_path_and_level(log_filename, 3); -#endif - // Set initialization of image handlers before any UI actions - See GH issue #7469 wxInitAllImageHandlers(); #ifdef NDEBUG From 3c6e68553bc856a4af11d70ff077331fb4402024 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Tue, 21 Mar 2023 17:00:50 +0800 Subject: [PATCH 175/339] ENH: add height_range Change-Id: Ica4def5d54f9e0906d424eea1efd3545b79ed186 --- src/libslic3r/Print.cpp | 7 ++ src/libslic3r/PrintApply.cpp | 2 + src/libslic3r/PrintConfig.hpp | 92 +++++++++++++------------- src/slic3r/CMakeLists.txt | 2 + src/slic3r/GUI/GLCanvas3D.cpp | 4 +- src/slic3r/GUI/GUI_App.cpp | 10 +++ src/slic3r/GUI/GUI_App.hpp | 3 + src/slic3r/GUI/GUI_Factories.cpp | 18 ++++- src/slic3r/GUI/GUI_Factories.hpp | 3 +- src/slic3r/GUI/GUI_ObjectLayers.cpp | 88 ++++++++++++------------ src/slic3r/GUI/GUI_ObjectList.cpp | 53 +++++++++++---- src/slic3r/GUI/GUI_ObjectSettings.cpp | 71 +++++++++++++------- src/slic3r/GUI/MainFrame.cpp | 1 + src/slic3r/GUI/ObjectDataViewModel.cpp | 4 +- src/slic3r/GUI/ParamsPanel.cpp | 10 ++- src/slic3r/GUI/ParamsPanel.hpp | 1 + src/slic3r/GUI/Plater.cpp | 10 +++ src/slic3r/GUI/Plater.hpp | 2 + src/slic3r/GUI/Selection.cpp | 4 +- src/slic3r/GUI/Tab.cpp | 41 +++++++++++- src/slic3r/GUI/Tab.hpp | 13 +++- 21 files changed, 303 insertions(+), 136 deletions(-) diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 5dbe8574b3..315965a65d 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1114,6 +1114,13 @@ StringObjectException Print::validate(StringObjectException *warning, Polygons* if (layer_height > min_nozzle_diameter) return {L("Layer height cannot exceed nozzle diameter"), object, "layer_height"}; + for (auto range : object->m_model_object->layer_config_ranges) { + double range_layer_height = range.second.opt_float("layer_height"); + if (range_layer_height > object->m_slicing_params.max_layer_height || + range_layer_height < object->m_slicing_params.min_layer_height) + return { L("Layer height cannot exceed nozzle diameter"), nullptr, "layer_height" }; + } + // Validate extrusion widths. std::string err_msg; if (!validate_extrusion_width(object->config(), "line_width", layer_height, err_msg)) diff --git a/src/libslic3r/PrintApply.cpp b/src/libslic3r/PrintApply.cpp index 79a9143eac..45e0dd932c 100644 --- a/src/libslic3r/PrintApply.cpp +++ b/src/libslic3r/PrintApply.cpp @@ -168,6 +168,8 @@ static bool layer_height_ranges_equal(const t_layer_config_ranges &lr1, const t_ auto it2 = lr2.begin(); for (const auto &kvp1 : lr1) { const auto &kvp2 = *it2 ++; + if (!kvp2.second.has("layer_height") || !kvp1.second.has("layer_height")) + return false; if (std::abs(kvp1.first.first - kvp2.first.first ) > EPSILON || std::abs(kvp1.first.second - kvp2.first.second) > EPSILON || (check_layer_height && std::abs(kvp1.second.option("layer_height")->getFloat() - kvp2.second.option("layer_height")->getFloat()) > EPSILON)) diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index e83c91a6ef..22808f1b42 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -702,58 +702,58 @@ PRINT_CONFIG_CLASS_DEFINE( PRINT_CONFIG_CLASS_DEFINE( PrintRegionConfig, - ((ConfigOptionInt, bottom_shell_layers)) - ((ConfigOptionFloat, bottom_shell_thickness)) - ((ConfigOptionFloat, bridge_angle)) - ((ConfigOptionFloat, bridge_flow)) - ((ConfigOptionFloat, bridge_speed)) - ((ConfigOptionBool, ensure_vertical_shell_thickness)) - ((ConfigOptionEnum, top_surface_pattern)) - ((ConfigOptionEnum, bottom_surface_pattern)) - ((ConfigOptionFloat, outer_wall_line_width)) - ((ConfigOptionFloat, outer_wall_speed)) - ((ConfigOptionFloat, infill_direction)) - ((ConfigOptionPercent, sparse_infill_density)) - ((ConfigOptionEnum, sparse_infill_pattern)) - ((ConfigOptionEnum, fuzzy_skin)) - ((ConfigOptionFloat, fuzzy_skin_thickness)) - ((ConfigOptionFloat, fuzzy_skin_point_distance)) - ((ConfigOptionFloat, gap_infill_speed)) - ((ConfigOptionInt, sparse_infill_filament)) - ((ConfigOptionFloat, sparse_infill_line_width)) - ((ConfigOptionPercent, infill_wall_overlap)) - ((ConfigOptionFloat, sparse_infill_speed)) + ((ConfigOptionInt, bottom_shell_layers)) + ((ConfigOptionFloat, bottom_shell_thickness)) + ((ConfigOptionFloat, bridge_angle)) + ((ConfigOptionFloat, bridge_flow)) + ((ConfigOptionFloat, bridge_speed)) + ((ConfigOptionBool, ensure_vertical_shell_thickness)) + ((ConfigOptionEnum, top_surface_pattern)) + ((ConfigOptionEnum, bottom_surface_pattern)) + ((ConfigOptionFloat, outer_wall_line_width)) + ((ConfigOptionFloat, outer_wall_speed)) + ((ConfigOptionFloat, infill_direction)) + ((ConfigOptionPercent, sparse_infill_density)) + ((ConfigOptionEnum, sparse_infill_pattern)) + ((ConfigOptionEnum, fuzzy_skin)) + ((ConfigOptionFloat, fuzzy_skin_thickness)) + ((ConfigOptionFloat, fuzzy_skin_point_distance)) + ((ConfigOptionFloat, gap_infill_speed)) + ((ConfigOptionInt, sparse_infill_filament)) + ((ConfigOptionFloat, sparse_infill_line_width)) + ((ConfigOptionPercent, infill_wall_overlap)) + ((ConfigOptionFloat, sparse_infill_speed)) //BBS - ((ConfigOptionBool, infill_combination)) + ((ConfigOptionBool, infill_combination)) // Ironing options - ((ConfigOptionEnum, ironing_type)) - ((ConfigOptionPercent, ironing_flow)) - ((ConfigOptionFloat, ironing_spacing)) - ((ConfigOptionFloat, ironing_speed)) + ((ConfigOptionEnum, ironing_type)) + ((ConfigOptionPercent, ironing_flow)) + ((ConfigOptionFloat, ironing_spacing)) + ((ConfigOptionFloat, ironing_speed)) // Detect bridging perimeters - ((ConfigOptionBool, detect_overhang_wall)) - ((ConfigOptionInt, wall_filament)) - ((ConfigOptionFloat, inner_wall_line_width)) - ((ConfigOptionFloat, inner_wall_speed)) + ((ConfigOptionBool, detect_overhang_wall)) + ((ConfigOptionInt, wall_filament)) + ((ConfigOptionFloat, inner_wall_line_width)) + ((ConfigOptionFloat, inner_wall_speed)) // Total number of perimeters. - ((ConfigOptionInt, wall_loops)) - ((ConfigOptionFloat, minimum_sparse_infill_area)) - ((ConfigOptionInt, solid_infill_filament)) - ((ConfigOptionFloat, internal_solid_infill_line_width)) - ((ConfigOptionFloat, internal_solid_infill_speed)) + ((ConfigOptionInt, wall_loops)) + ((ConfigOptionFloat, minimum_sparse_infill_area)) + ((ConfigOptionInt, solid_infill_filament)) + ((ConfigOptionFloat, internal_solid_infill_line_width)) + ((ConfigOptionFloat, internal_solid_infill_speed)) // Detect thin walls. - ((ConfigOptionBool, detect_thin_wall)) - ((ConfigOptionFloat, top_surface_line_width)) - ((ConfigOptionInt, top_shell_layers)) - ((ConfigOptionFloat, top_shell_thickness)) - ((ConfigOptionFloat, top_surface_speed)) + ((ConfigOptionBool, detect_thin_wall)) + ((ConfigOptionFloat, top_surface_line_width)) + ((ConfigOptionInt, top_shell_layers)) + ((ConfigOptionFloat, top_shell_thickness)) + ((ConfigOptionFloat, top_surface_speed)) //BBS - ((ConfigOptionBool, enable_overhang_speed)) - ((ConfigOptionFloat, overhang_1_4_speed)) - ((ConfigOptionFloat, overhang_2_4_speed)) - ((ConfigOptionFloat, overhang_3_4_speed)) - ((ConfigOptionFloat, overhang_4_4_speed)) - ((ConfigOptionBool, only_one_wall_top)) + ((ConfigOptionBool, enable_overhang_speed)) + ((ConfigOptionFloat, overhang_1_4_speed)) + ((ConfigOptionFloat, overhang_2_4_speed)) + ((ConfigOptionFloat, overhang_3_4_speed)) + ((ConfigOptionFloat, overhang_4_4_speed)) + ((ConfigOptionBool, only_one_wall_top)) ) PRINT_CONFIG_CLASS_DEFINE( diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index f33eb3df15..46d1a87da3 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -195,6 +195,8 @@ set(SLIC3R_GUI_SOURCES GUI/GUI_Factories.hpp GUI/GUI_ObjectList.cpp GUI/GUI_ObjectList.hpp + GUI/GUI_ObjectLayers.cpp + GUI/GUI_ObjectLayers.hpp GUI/GUI_AuxiliaryList.cpp GUI/GUI_AuxiliaryList.hpp GUI/GUI_ObjectSettings.cpp diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 71014054b2..c31ca9bc69 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -4760,6 +4760,7 @@ void GLCanvas3D::handle_sidebar_focus_event(const std::string& opt_key, bool foc void GLCanvas3D::handle_layers_data_focus_event(const t_layer_height_range range, const EditorType type) { std::string field = "layer_" + std::to_string(type) + "_" + std::to_string(range.first) + "_" + std::to_string(range.second); + m_gizmos.reset_all_states(); handle_sidebar_focus_event(field, true); } @@ -8063,8 +8064,7 @@ void GLCanvas3D::_render_sla_slices() void GLCanvas3D::_render_selection_sidebar_hints() const { - //BBS do not render sidebar hints - //m_selection.render_sidebar_hints(m_sidebar_field, m_gizmos.get_uniform_scaling()); + m_selection.render_sidebar_hints(m_sidebar_field, m_gizmos.get_uniform_scaling()); } void GLCanvas3D::_update_volumes_hover_state() diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 316e07038a..bbeca86a3d 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -4908,6 +4908,11 @@ Tab* GUI_App::get_model_tab(bool part) return model_tabs_list[part ? 1 : 0]; } +Tab* GUI_App::get_layer_tab() +{ + return model_tabs_list[2]; +} + ConfigOptionMode GUI_App::get_mode() { if (!app_config->has("user_mode")) @@ -5604,6 +5609,11 @@ ObjectList* GUI_App::obj_list() return sidebar().obj_list(); } +ObjectLayers* GUI_App::obj_layers() +{ + return sidebar().obj_layers(); +} + Plater* GUI_App::plater() { return plater_; diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 51b85bd0b0..62803cb003 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -66,6 +66,7 @@ class MainFrame; class Sidebar; class ObjectSettings; class ObjectList; +class ObjectLayers; class Plater; class ParamsPanel; class NotificationManager; @@ -455,6 +456,7 @@ public: Tab* get_tab(Preset::Type type); Tab* get_model_tab(bool part = false); + Tab* get_layer_tab(); ConfigOptionMode get_mode(); void save_mode(const /*ConfigOptionMode*/int mode) ; void update_mode(); @@ -502,6 +504,7 @@ public: Sidebar& sidebar(); ObjectSettings* obj_settings(); ObjectList* obj_list(); + ObjectLayers* obj_layers(); Plater* plater(); const Plater* plater() const; ParamsPanel* params_panel(); diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index 288fd9ada3..a54a84c270 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -18,6 +18,7 @@ #include #include "slic3r/Utils/FixModelByWin10.hpp" +#include "ParamsPanel.hpp" namespace Slic3r { @@ -200,7 +201,7 @@ std::map> SettingsFactory::get_all_v } -SettingsFactory::Bundle SettingsFactory::get_bundle(const DynamicPrintConfig* config, bool is_object_settings) +SettingsFactory::Bundle SettingsFactory::get_bundle(const DynamicPrintConfig* config, bool is_object_settings, bool is_layer_settings/* = false*/) { auto opt_keys = config->keys(); if (opt_keys.empty()) @@ -208,6 +209,8 @@ SettingsFactory::Bundle SettingsFactory::get_bundle(const DynamicPrintConfig* co // update options list according to print technology auto full_current_opts = get_options(!is_object_settings); + if (is_layer_settings) + full_current_opts.push_back("layer_height"); for (int i = opt_keys.size() - 1; i >= 0; --i) if (find(full_current_opts.begin(), full_current_opts.end(), opt_keys[i]) == full_current_opts.end()) opt_keys.erase(opt_keys.begin() + i); @@ -506,6 +509,15 @@ void MenuFactory::append_menu_items_add_volume(wxMenu* menu) append_submenu(menu, sub_menu, wxID_ANY, _(item.first), "", item.second, []() { return obj_list()->is_instance_or_object_selected(); }, m_parent); } + + append_menu_item_layers_editing(menu); +} + +wxMenuItem* MenuFactory::append_menu_item_layers_editing(wxMenu* menu) +{ + return append_menu_item(menu, wxID_ANY, _L("Height range Modifier"), "", + [](wxCommandEvent&) { obj_list()->layers_editing(); wxGetApp().params_panel()->switch_to_object(); }, "", menu, + []() { return obj_list()->is_instance_or_object_selected(); }, m_parent); } wxMenuItem* MenuFactory::append_menu_item_settings(wxMenu* menu_) @@ -549,7 +561,7 @@ wxMenuItem* MenuFactory::append_menu_item_settings(wxMenu* menu_) if (printer_technology() == ptFFF || (menu->GetMenuItems().size() > 0 && !menu->GetMenuItems().back()->IsSeparator())) - menu->SetFirstSeparator(); + ;// menu->SetFirstSeparator(); // detect itemm for adding of the setting ObjectList* object_list = obj_list(); @@ -573,7 +585,7 @@ wxMenuItem* MenuFactory::append_menu_item_settings(wxMenu* menu_) // BBS remvoe freq setting popupmenu // create_freq_settings_popupmenu(menu, is_object_settings, item); - menu->SetSecondSeparator(); + //menu->SetSecondSeparator(); // Add full settings list auto menu_item = new wxMenuItem(menu, wxID_ANY, menu_name); diff --git a/src/slic3r/GUI/GUI_Factories.hpp b/src/slic3r/GUI/GUI_Factories.hpp index 8e2814b572..3d99a072bd 100644 --- a/src/slic3r/GUI/GUI_Factories.hpp +++ b/src/slic3r/GUI/GUI_Factories.hpp @@ -37,7 +37,7 @@ struct SettingsFactory static std::map> PART_CATEGORY_SETTINGS; static wxBitmap get_category_bitmap(const std::string& category_name, bool menu_bmp = true); - static Bundle get_bundle(const DynamicPrintConfig* config, bool is_object_settings); + static Bundle get_bundle(const DynamicPrintConfig* config, bool is_object_settings, bool is_layer_settings = false); static std::vector get_options(bool is_part); //BBS: add api to get options for catogary static std::vector get_visible_options(const std::string& category, const bool is_part); @@ -115,6 +115,7 @@ private: wxMenu* append_submenu_add_generic(wxMenu* menu, ModelVolumeType type); void append_menu_items_add_volume(wxMenu* menu); + wxMenuItem* append_menu_item_layers_editing(wxMenu* menu); wxMenuItem* append_menu_item_settings(wxMenu* menu); wxMenuItem* append_menu_item_change_type(wxMenu* menu); wxMenuItem* append_menu_item_instance_to_object(wxMenu* menu); diff --git a/src/slic3r/GUI/GUI_ObjectLayers.cpp b/src/slic3r/GUI/GUI_ObjectLayers.cpp index a1e4f09c2c..4dc2a2e77b 100644 --- a/src/slic3r/GUI/GUI_ObjectLayers.cpp +++ b/src/slic3r/GUI/GUI_ObjectLayers.cpp @@ -22,24 +22,15 @@ namespace GUI ObjectLayers::ObjectLayers(wxWindow* parent) : OG_Settings(parent, true) { - m_grid_sizer = new wxFlexGridSizer(3, 5, wxGetApp().em_unit()); // "Min Z", "Max Z", "Layer height" & buttons sizer + m_grid_sizer = new wxFlexGridSizer(3, 0, wxGetApp().em_unit()); // "Min Z", "Max Z", "Layer height" & buttons sizer m_grid_sizer->SetFlexibleDirection(wxHORIZONTAL); - // Legend for object layers - for (const std::string col : { L("From height"), L("To height"), L("Layer height") }) { - auto temp = new wxStaticText(m_parent, wxID_ANY, _(col), wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_MIDDLE); - temp->SetBackgroundStyle(wxBG_STYLE_PAINT); - temp->SetFont(wxGetApp().bold_font()); - - m_grid_sizer->Add(temp); - } - m_og->activate(); m_og->sizer->Clear(true); - m_og->sizer->Add(m_grid_sizer, 0, wxEXPAND | wxALL, wxOSX ? 0 : 5); + m_og->sizer->Add(m_grid_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, wxOSX ? 0 : 5); - m_bmp_delete = ScalableBitmap(parent, "remove_copies"/*"cross"*/); - m_bmp_add = ScalableBitmap(parent, "add_copies"); + m_bmp_delete = ScalableBitmap(parent, "delete_filament"/*"cross"*/); + m_bmp_add = ScalableBitmap(parent, "add_filament"); } void ObjectLayers::select_editor(LayerRangeEditor* editor, const bool is_last_edited_range) @@ -80,6 +71,12 @@ wxSizer* ObjectLayers::create_layer(const t_layer_height_range& range, PlusMinus m_selection_type = type; }; + // Add text + auto head_text = new wxStaticText(m_parent, wxID_ANY, _L("Height Range"), wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); + head_text->SetBackgroundStyle(wxBG_STYLE_PAINT); + head_text->SetFont(wxGetApp().normal_font()); + m_grid_sizer->Add(head_text, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, wxGetApp().em_unit()); + // Add control for the "Min Z" auto editor = new LayerRangeEditor(this, double_to_string(range.first), etMinZ, set_focus_data, @@ -103,7 +100,15 @@ wxSizer* ObjectLayers::create_layer(const t_layer_height_range& range, PlusMinus }); select_editor(editor, is_last_edited_range); - m_grid_sizer->Add(editor); + + auto sizer1 = new wxBoxSizer(wxHORIZONTAL); + sizer1->Add(editor); + auto middle_text = new wxStaticText(m_parent, wxID_ANY, _L("to"), wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); + middle_text->SetBackgroundStyle(wxBG_STYLE_PAINT); + middle_text->SetFont(wxGetApp().normal_font()); + sizer1->Add(middle_text, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, wxGetApp().em_unit()); + + m_grid_sizer->Add(sizer1); // Add control for the "Max Z" @@ -127,29 +132,38 @@ wxSizer* ObjectLayers::create_layer(const t_layer_height_range& range, PlusMinus }); select_editor(editor, is_last_edited_range); - m_grid_sizer->Add(editor); + auto sizer2 = new wxBoxSizer(wxHORIZONTAL); + sizer2->Add(editor); + auto unit_text = new wxStaticText(m_parent, wxID_ANY, _L("mm"), wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); + unit_text->SetBackgroundStyle(wxBG_STYLE_PAINT); + unit_text->SetFont(wxGetApp().normal_font()); + sizer2->Add(unit_text, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, wxGetApp().em_unit()); + + m_grid_sizer->Add(sizer2); + + // BBS // Add control for the "Layer height" - editor = new LayerRangeEditor(this, double_to_string(m_object->layer_config_ranges[range].option("layer_height")->getFloat()), etLayerHeight, set_focus_data, - [range](coordf_t layer_height, bool, bool) - { - return wxGetApp().obj_list()->edit_layer_range(range, layer_height); - }); + //editor = new LayerRangeEditor(this, double_to_string(m_object->layer_config_ranges[range].option("layer_height")->getFloat()), etLayerHeight, set_focus_data, + // [range](coordf_t layer_height, bool, bool) + //{ + // return wxGetApp().obj_list()->edit_layer_range(range, layer_height); + //}); - select_editor(editor, is_last_edited_range); + //select_editor(editor, is_last_edited_range); - auto sizer = new wxBoxSizer(wxHORIZONTAL); - sizer->Add(editor); + //auto sizer = new wxBoxSizer(wxHORIZONTAL); + //sizer->Add(editor); - auto temp = new wxStaticText(m_parent, wxID_ANY, _L("mm")); - temp->SetBackgroundStyle(wxBG_STYLE_PAINT); - temp->SetFont(wxGetApp().normal_font()); - sizer->Add(temp, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, wxGetApp().em_unit()); + //auto temp = new wxStaticText(m_parent, wxID_ANY, _L("mm")); + //temp->SetBackgroundStyle(wxBG_STYLE_PAINT); + //temp->SetFont(wxGetApp().normal_font()); + //sizer->Add(temp, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, wxGetApp().em_unit()); - m_grid_sizer->Add(sizer); + //m_grid_sizer->Add(sizer); - return sizer; + return sizer2; } void ObjectLayers::create_layers_list() @@ -157,9 +171,11 @@ void ObjectLayers::create_layers_list() for (const auto &layer : m_object->layer_config_ranges) { const t_layer_height_range& range = layer.first; auto del_btn = new PlusMinusButton(m_parent, m_bmp_delete, range); + del_btn->SetBackgroundColour(m_parent->GetBackgroundColour()); del_btn->SetToolTip(_L("Remove height range")); auto add_btn = new PlusMinusButton(m_parent, m_bmp_add, range); + add_btn->SetBackgroundColour(m_parent->GetBackgroundColour()); wxString tooltip = wxGetApp().obj_list()->can_add_new_range_after_current(range); add_btn->SetToolTip(tooltip.IsEmpty() ? _L("Add height range") : tooltip); add_btn->Enable(tooltip.IsEmpty()); @@ -195,18 +211,8 @@ void ObjectLayers::update_layers_list() m_object = objects_ctrl->object(obj_idx); if (!m_object || m_object->layer_config_ranges.empty()) return; - // Delete all controls from options group except of the legends - - const int cols = m_grid_sizer->GetEffectiveColsCount(); - const int rows = m_grid_sizer->GetEffectiveRowsCount(); - for (int idx = cols*rows-1; idx >= cols; idx--) { - wxSizerItem* t = m_grid_sizer->GetItem(idx); - if (t->IsSizer()) - t->GetSizer()->Clear(true); - else - t->DeleteWindows(); - m_grid_sizer->Remove(idx); - } + // Delete all controls from options group + m_grid_sizer->Clear(true); // Add new control according to the selected item diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 76d968cdfc..d15a60afed 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -946,15 +946,13 @@ void ObjectList::selection_changed() const ItemType type = m_objects_model->GetItemType(item); // to correct visual hints for layers editing on the Scene if (type & (itLayer|itLayerRoot)) { - //BBS remove obj_layers - // wxGetApp().obj_layers()->reset_selection(); + wxGetApp().obj_layers()->reset_selection(); if (type & itLayerRoot) wxGetApp().plater()->canvas3D()->handle_sidebar_focus_event("", false); else { - //BBS remove obj_layers - //wxGetApp().obj_layers()->set_selectable_range(m_objects_model->GetLayerRangeByItem(item)); - //wxGetApp().obj_layers()->update_scene_from_editor_selection(); + wxGetApp().obj_layers()->set_selectable_range(m_objects_model->GetLayerRangeByItem(item)); + wxGetApp().obj_layers()->update_scene_from_editor_selection(); } } } @@ -1221,7 +1219,10 @@ void ObjectList::list_manipulation(const wxPoint& mouse_pos, bool evt_context_me get_selected_item_indexes(obj_idx, vol_idx, item); //wxGetApp().plater()->PopupObjectTable(obj_idx, vol_idx, mouse_pos); - dynamic_cast(wxGetApp().get_model_tab(vol_idx >= 0))->reset_model_config(); + if (m_objects_model->GetItemType(item) & itLayer) + dynamic_cast(wxGetApp().get_layer_tab())->reset_model_config(); + else + dynamic_cast(wxGetApp().get_model_tab(vol_idx >= 0))->reset_model_config(); } else if (col_num == colName) { @@ -2865,8 +2866,7 @@ void ObjectList::layers_editing() return; // to correct visual hints for layers editing on the Scene, reset previous selection - //BBS remove obj_layers - //wxGetApp().obj_layers()->reset_selection(); + wxGetApp().obj_layers()->reset_selection(); wxGetApp().plater()->canvas3D()->handle_sidebar_focus_event("", false); // select LayerRoor item and expand @@ -3268,7 +3268,14 @@ void ObjectList::part_selection_changed() m_config = &(*m_objects)[obj_idx]->config; disable_ss_manipulation = (*m_objects)[obj_idx]->is_cut(); } - // BBS: remove height range logics + else if (type & (itLayerRoot | itLayer)) { + og_name = type & itLayerRoot ? _L("Height ranges") : _L("Settings for height range"); + update_and_show_layers = true; + update_and_show_settings = true; + + if (type & itLayer) + m_config = &get_item_config(item); + } } } } @@ -3300,8 +3307,7 @@ void ObjectList::part_selection_changed() if (printer_technology() == ptSLA) update_and_show_layers = false; else if (update_and_show_layers) { - //BBS remove obj layers - //wxGetApp().obj_layers()->get_og()->set_name(" "); + ;//wxGetApp().obj_layers()->get_og()->set_name(" " + og_name + " "); } update_min_height(); @@ -3313,8 +3319,7 @@ void ObjectList::part_selection_changed() // BBS //wxGetApp().obj_manipul() ->UpdateAndShow(update_and_show_manipulations); wxGetApp().obj_settings()->UpdateAndShow(update_and_show_settings); - //BBS - //wxGetApp().obj_layers() ->UpdateAndShow(update_and_show_layers); + wxGetApp().obj_layers() ->UpdateAndShow(update_and_show_layers); wxGetApp().plater()->show_object_info(); panel.Layout(); @@ -3330,13 +3335,33 @@ wxDataViewItem ObjectList::add_settings_item(wxDataViewItem parent_item, const D return ret; const bool is_object_settings = m_objects_model->GetItemType(parent_item) == itObject; + const bool is_volume_settings = m_objects_model->GetItemType(parent_item) == itVolume; + const bool is_layer_settings = m_objects_model->GetItemType(parent_item) == itLayer; if (!is_object_settings) { ModelVolumeType volume_type = m_objects_model->GetVolumeType(parent_item); if (volume_type == ModelVolumeType::NEGATIVE_VOLUME || volume_type == ModelVolumeType::SUPPORT_BLOCKER || volume_type == ModelVolumeType::SUPPORT_ENFORCER) return ret; } - SettingsFactory::Bundle cat_options = SettingsFactory::get_bundle(config, is_object_settings); + SettingsFactory::Bundle cat_options = SettingsFactory::get_bundle(config, is_object_settings, is_layer_settings); + if (is_layer_settings) { + auto tab_object = dynamic_cast(wxGetApp().get_model_tab()); + auto object_cfg = tab_object->get_config(); + if (config->opt_float("layer_height") == object_cfg->opt_float("layer_height")) { + SettingsFactory::Bundle new_cat_options; + for (auto cat_opt : cat_options) { + std::vector temp; + for (auto value : cat_opt.second) { + if (value != "layer_height") + temp.push_back(value); + } + if (!temp.empty()) + new_cat_options[cat_opt.first] = temp; + } + cat_options = new_cat_options; + } + } + if (cat_options.empty()) { #if NEW_OBJECT_SETTING ObjectDataViewModelNode *node = static_cast(parent_item.GetID()); diff --git a/src/slic3r/GUI/GUI_ObjectSettings.cpp b/src/slic3r/GUI/GUI_ObjectSettings.cpp index d6662b8b4d..f11085543e 100644 --- a/src/slic3r/GUI/GUI_ObjectSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectSettings.cpp @@ -26,7 +26,9 @@ namespace GUI OG_Settings::OG_Settings(wxWindow* parent, const bool staticbox) : m_parent(parent) { - wxString title = staticbox ? " " : ""; // temporary workaround - #ys_FIXME + //BBS + wxString title = ""; + //wxString title = staticbox ? " " : ""; // temporary workaround - #ys_FIXME m_og = std::make_shared(parent, title); } @@ -106,13 +108,14 @@ bool ObjectSettings::update_settings_list() auto opt_key = (line.get_options())[0].opt_id; //we assume that we have one option per line auto btn = new ScalableButton(parent, wxID_ANY, m_bmp_delete); + btn->SetBackgroundColour(parent->GetBackgroundColour()); btn->SetToolTip(_(L("Remove parameter"))); btn->SetBitmapFocus(m_bmp_delete_focus.bmp()); btn->SetBitmapHover(m_bmp_delete_focus.bmp()); btn->Bind(wxEVT_BUTTON, [opt_key, config, this](wxEvent &event) { - wxGetApp().plater()->take_snapshot(from_u8(boost::format(("Delete Option %s") % opt_key).str())); + wxGetApp().plater()->take_snapshot(from_u8((boost::format("Delete Option %s") % opt_key).str()).ToStdString()); config->erase(opt_key); wxGetApp().obj_list()->changed_object(); wxTheApp->CallAfter([this]() { @@ -159,7 +162,7 @@ bool ObjectSettings::update_settings_list() for (auto& opt : cat.second) optgroup->get_field(opt)->m_on_change = [optgroup](const std::string& opt_id, const boost::any& value) { // first of all take a snapshot and then change value in configuration - wxGetApp().plater()->take_snapshot(from_u8((boost::format("Change Option %s")% opt_id).str())); + wxGetApp().plater()->take_snapshot(from_u8((boost::format("Change Option %s")% opt_id).str()).ToStdString()); optgroup->on_change_OG(opt_id, value); }; @@ -183,7 +186,6 @@ bool ObjectSettings::update_settings_list() } #else - bool ObjectSettings::update_settings_list() { if (!wxGetApp().is_editor()) @@ -198,51 +200,74 @@ bool ObjectSettings::update_settings_list() objects_ctrl->GetSelections(items); std::map object_configs; - bool is_object_settings = true; - bool is_volume_settings = true; + bool is_object_settings = false; + bool is_volume_settings = false; + bool is_layer_range_settings = false; + bool is_layer_root = false; ModelObject * parent_object = nullptr; for (auto item : items) { auto type = objects_model->GetItemType(item); - if (type != itObject && type != itVolume) { + if (type != itObject && type != itVolume && type != itLayerRoot && type != itLayer) { continue; } const int obj_idx = objects_model->GetObjectIdByItem(item); assert(obj_idx >= 0); auto object = wxGetApp().model().objects[obj_idx]; if (type == itObject) { - if (!is_object_settings) - return false; - is_volume_settings = false; + is_object_settings = true; object_configs.emplace(object, &object->config); - } else { - if (!is_volume_settings) - return false; + } + else if(type == itVolume){ + is_volume_settings = true; if (parent_object && parent_object != object) return false; parent_object = object; - is_object_settings = false; const int vol_idx = objects_model->GetVolumeIdByItem(item); assert(vol_idx >= 0); auto volume = object->volumes[vol_idx]; object_configs.emplace(volume, &volume->config); } + else if(type == itLayer){ + is_layer_range_settings = true; + if (parent_object && parent_object != object) + return false; + parent_object = object; + + t_layer_height_range height_range = objects_model->GetLayerRangeByItem(item); + object_configs.emplace( (ObjectBase*)(&object->layer_config_ranges.at(height_range)), &object->layer_config_ranges.at(height_range) ); + } + else if (type == itLayerRoot) { + is_layer_root = true; + } } auto tab_object = dynamic_cast(wxGetApp().get_model_tab()); auto tab_volume = dynamic_cast(wxGetApp().get_model_tab(true)); + auto tab_layer = dynamic_cast(wxGetApp().get_layer_tab()); - if (is_volume_settings == is_object_settings) { - tab_object->set_model_config({}); - tab_volume->set_model_config({}); - m_tab_active = nullptr; - } else if (is_volume_settings) { - tab_object->set_model_config({{parent_object, &parent_object->config}}); - tab_volume->set_model_config(object_configs); - m_tab_active = tab_volume; - } else if (is_object_settings) { + if (is_object_settings) { tab_object->set_model_config(object_configs); tab_volume->set_model_config({}); + tab_layer->set_model_config({}); m_tab_active = tab_object; + } + else if (is_volume_settings) { + tab_object->set_model_config({ {parent_object, &parent_object->config} }); + tab_volume->set_model_config(object_configs); + tab_layer->set_model_config({}); + m_tab_active = tab_volume; + } + else if (is_layer_range_settings) { + tab_object->set_model_config({ {parent_object, &parent_object->config} }); + tab_volume->set_model_config({}); + tab_layer->set_model_config(object_configs); + m_tab_active = tab_layer; + } + else { + tab_object->set_model_config({}); + tab_volume->set_model_config({}); + tab_layer->set_model_config({}); + m_tab_active = nullptr; } ((ParamsPanel*) tab_object->GetParent())->set_active_tab(nullptr); return true; diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 8b0cbc3c42..cd3a3b6f36 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -1093,6 +1093,7 @@ void MainFrame::create_preset_tabs() add_created_tab(new TabPrint(m_param_panel), "cog"); add_created_tab(new TabPrintObject(m_param_panel), "cog"); add_created_tab(new TabPrintPart(m_param_panel), "cog"); + add_created_tab(new TabPrintLayer(m_param_panel), "cog"); add_created_tab(new TabFilament(m_param_dialog->panel()), "spool"); /* BBS work around to avoid appearance bug */ //add_created_tab(new TabSLAPrint(m_param_panel)); diff --git a/src/slic3r/GUI/ObjectDataViewModel.cpp b/src/slic3r/GUI/ObjectDataViewModel.cpp index 936de904c3..aead8232d8 100644 --- a/src/slic3r/GUI/ObjectDataViewModel.cpp +++ b/src/slic3r/GUI/ObjectDataViewModel.cpp @@ -1207,7 +1207,7 @@ void ObjectDataViewModel::DeleteSettings(const wxDataViewItem& parent) node->set_action_icon(false); ItemChanged(parent); #else - if volume has a "settings"item, than delete it before volume deleting + // if volume has a "settings"item, than delete it before volume deleting if (node->GetChildCount() > 0 && node->GetNthChild(0)->GetType() == itSettings) { auto settings_node = node->GetNthChild(0); auto settings_item = wxDataViewItem(settings_node); @@ -2208,8 +2208,10 @@ void ObjectDataViewModel::Rescale() break; case itLayerRoot: node->m_bmp = create_scaled_bitmap(LayerRootIcon); + break; case itLayer: node->m_bmp = create_scaled_bitmap(LayerIcon); + break; case itInfo: node->m_bmp = m_info_bmps.at(node->m_info_item_type); break; diff --git a/src/slic3r/GUI/ParamsPanel.cpp b/src/slic3r/GUI/ParamsPanel.cpp index 6148823ff7..b4c72137ad 100644 --- a/src/slic3r/GUI/ParamsPanel.cpp +++ b/src/slic3r/GUI/ParamsPanel.cpp @@ -404,6 +404,10 @@ void ParamsPanel::create_layout() m_left_sizer->Add( m_tab_print_part, 0, wxEXPAND ); } + if (m_tab_print_layer) { + m_left_sizer->Add(m_tab_print_layer, 0, wxEXPAND); + } + if (m_tab_filament) { if (m_staticline_filament) m_left_sizer->Add(m_staticline_filament, 0, wxEXPAND); @@ -488,6 +492,7 @@ void ParamsPanel::refresh_tabs() if (m_top_panel) { m_tab_print_object = wxGetApp().get_model_tab(); m_tab_print_part = wxGetApp().get_model_tab(true); + m_tab_print_layer = wxGetApp().get_layer_tab(); } return; } @@ -557,6 +562,8 @@ void ParamsPanel::set_active_tab(wxPanel* tab) cur_tab = (Tab*) m_tab_print; } else if (m_tab_print_part && ((TabPrintModel*) m_tab_print_part)->has_model_config()) { cur_tab = (Tab*) m_tab_print_part; + } else if (m_tab_print_layer && ((TabPrintModel*)m_tab_print_layer)->has_model_config()) { + cur_tab = (Tab*)m_tab_print_layer; } else if (m_tab_print_object && ((TabPrintModel*) m_tab_print_object)->has_model_config()) { cur_tab = (Tab*) m_tab_print_object; } @@ -578,6 +585,7 @@ void ParamsPanel::set_active_tab(wxPanel* tab) {m_tab_print, m_staticline_print}, {m_tab_print_object, m_staticline_print_object}, {m_tab_print_part, m_staticline_print_part}, + {m_tab_print_layer, nullptr}, {m_tab_filament, m_staticline_filament}, {m_tab_printer, m_staticline_printer}})) { if (!t.first) continue; @@ -641,7 +649,7 @@ void ParamsPanel::msw_rescale() ((SwitchButton* )m_mode_region)->Rescale(); if (m_mode_view) ((SwitchButton* )m_mode_view)->Rescale(); - for (auto tab : {m_tab_print, m_tab_print_object, m_tab_print_part, m_tab_filament, m_tab_printer}) { + for (auto tab : {m_tab_print, m_tab_print_object, m_tab_print_part, m_tab_print_layer, m_tab_filament, m_tab_printer}) { if (tab) dynamic_cast(tab)->msw_rescale(); } //((Button*)m_export_to_file)->Rescale(); diff --git a/src/slic3r/GUI/ParamsPanel.hpp b/src/slic3r/GUI/ParamsPanel.hpp index c39f7cfbc9..7e752aa335 100644 --- a/src/slic3r/GUI/ParamsPanel.hpp +++ b/src/slic3r/GUI/ParamsPanel.hpp @@ -93,6 +93,7 @@ class ParamsPanel : public wxPanel wxPanel* m_tab_print_object { nullptr }; wxStaticLine* m_staticline_print_object { nullptr }; wxPanel* m_tab_print_part { nullptr }; + wxPanel* m_tab_print_layer { nullptr }; wxStaticLine* m_staticline_print_part { nullptr }; wxStaticLine* m_staticline_filament { nullptr }; //wxBoxSizer* m_filament_sizer { nullptr }; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 8d60fa64ad..0035201787 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -325,6 +325,7 @@ struct Sidebar::priv ObjectList *m_object_list{ nullptr }; ObjectSettings *object_settings{ nullptr }; + ObjectLayers *object_layers{ nullptr }; wxButton *btn_export_gcode; wxButton *btn_reslice; @@ -924,6 +925,10 @@ Sidebar::Sidebar(Plater *parent) #endif } + p->object_layers = new ObjectLayers(p->scrolled); + p->object_layers->Hide(); + p->sizer_params->Add(p->object_layers->get_sizer(), 0, wxEXPAND | wxTOP, 0); + auto *sizer = new wxBoxSizer(wxVERTICAL); sizer->Add(p->scrolled, 1, wxEXPAND); SetSizer(sizer); @@ -1458,6 +1463,11 @@ ObjectSettings* Sidebar::obj_settings() return p->object_settings; } +ObjectLayers* Sidebar::obj_layers() +{ + return p->object_layers; +} + wxPanel* Sidebar::scrolled_panel() { return p->scrolled; diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 130b20f174..d735a550f6 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -63,6 +63,7 @@ namespace GUI { class MainFrame; class ConfigOptionsGroup; class ObjectSettings; +class ObjectLayers; class ObjectList; class GLCanvas3D; class Mouse3DController; @@ -128,6 +129,7 @@ public: ObjectList* obj_list(); ObjectSettings* obj_settings(); + ObjectLayers* obj_layers(); wxPanel* scrolled_panel(); wxPanel* print_panel(); wxPanel* filament_panel(); diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index dea947993a..d91db4725d 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -2350,7 +2350,7 @@ void Selection::render_sidebar_layers_hints(const std::string& sidebar_field) co ::glBegin(GL_QUADS); if ((camera_on_top && type == 1) || (!camera_on_top && type == 2)) - ::glColor4f(1.0f, 0.38f, 0.0f, 1.0f); + ::glColor4f(0.0f, 174.0f / 255.0f, 66.0f / 255.0f, 1.0f); else ::glColor4f(0.8f, 0.8f, 0.8f, 0.5f); ::glVertex3f(min_x, min_y, z1); @@ -2361,7 +2361,7 @@ void Selection::render_sidebar_layers_hints(const std::string& sidebar_field) co ::glBegin(GL_QUADS); if ((camera_on_top && type == 2) || (!camera_on_top && type == 1)) - ::glColor4f(1.0f, 0.38f, 0.0f, 1.0f); + ::glColor4f(0.0f, 174.0f / 255.0f, 66.0f / 255.0f, 1.0f); else ::glColor4f(0.8f, 0.8f, 0.8f, 0.5f); ::glVertex3f(min_x, min_y, z2); diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index ea5a7d8232..c4f2e87c99 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2283,8 +2283,9 @@ void TabPrintModel::reset_model_config() wxGetApp().plater()->take_snapshot(std::string("Reset Options")); for (auto config : m_object_configs) { auto rmkeys = intersect(m_keys, config.second->keys()); - for (auto & k : rmkeys) + for (auto& k : rmkeys) { config.second->erase(k); + } notify_changed(config.first); } update_model_config(); @@ -2405,6 +2406,44 @@ void TabPrintPart::notify_changed(ObjectBase * object) wxGetApp().obj_list()->object_config_options_changed({vol->get_object(), vol}); } +static std::string layer_height = "layer_height"; +TabPrintLayer::TabPrintLayer(ParamsPanel* parent) : + TabPrintModel(parent, concat({ layer_height }, PrintRegionConfig().keys())) +{ + m_parent_tab = wxGetApp().get_model_tab(); +} + +void TabPrintLayer::notify_changed(ObjectBase * object) +{ + for (auto config : m_object_configs) { + if (!config.second->has(layer_height)) { + auto option = m_parent_tab->get_config()->option(layer_height); + config.second->set_key_value(layer_height, option->clone()); + } + auto objects_list = wxGetApp().obj_list(); + wxDataViewItemArray items; + objects_list->GetSelections(items); + for (auto item : items) + objects_list->add_settings_item(item, &config.second->get()); + } +} + +void TabPrintLayer::update_custom_dirty() +{ + for (auto k : m_null_keys) m_options_list[k] = 0; + for (auto k : m_all_keys) m_options_list[k] &= ~osSystemValue; + + auto option = m_parent_tab->get_config()->option(layer_height); + for (auto config : m_object_configs) { + if (!config.second->has(layer_height)) { + config.second->set_key_value(layer_height, option->clone()); + m_options_list[layer_height] = osInitValue | osSystemValue; + } + else if (config.second->opt_float(layer_height) == option->getFloat()) + m_options_list[layer_height] = osInitValue | osSystemValue; + } +} + bool Tab::validate_custom_gcode(const wxString& title, const std::string& gcode) { std::vector tags; diff --git a/src/slic3r/GUI/Tab.hpp b/src/slic3r/GUI/Tab.hpp index b495d3f9b6..4a2224b6a9 100644 --- a/src/slic3r/GUI/Tab.hpp +++ b/src/slic3r/GUI/Tab.hpp @@ -461,7 +461,7 @@ public: void update_model_config(); - void reset_model_config(); + virtual void reset_model_config(); bool has_key(std::string const &key); @@ -506,6 +506,17 @@ protected: virtual void notify_changed(ObjectBase * object) override; }; +class TabPrintLayer : public TabPrintModel +{ +public: + //BBS: GUI refactor + TabPrintLayer(ParamsPanel* parent); + ~TabPrintLayer() {} +protected: + virtual void notify_changed(ObjectBase* object) override; + virtual void update_custom_dirty() override; +}; + class TabFilament : public Tab { private: From ce9ac8b3d6cd8298481f556b8c6171cd7a3cfb6d Mon Sep 17 00:00:00 2001 From: tao wang Date: Fri, 31 Mar 2023 14:25:37 +0800 Subject: [PATCH 176/339] ENH:display the correct author name on the project page Change-Id: I3ce5718b82cc6ae3ed4bf4e3e19673f790cd5788 --- src/slic3r/GUI/Project.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Project.cpp b/src/slic3r/GUI/Project.cpp index 57f43d13db..0a6635f9a2 100644 --- a/src/slic3r/GUI/Project.cpp +++ b/src/slic3r/GUI/Project.cpp @@ -91,7 +91,25 @@ void ProjectPanel::on_reload(wxCommandEvent& evt) description = model.model_info->description; update_type = model.model_info->origin; - if (model.design_info != nullptr) + + try { + if (!model.model_info->copyright.empty()) { + json copy_right = json::parse(model.model_info->copyright); + + if (copy_right.is_array()) { + for (auto it = copy_right.begin(); it != copy_right.end(); it++) { + if ((*it).contains("author")) { + model_author = (*it)["author"].get(); + } + } + } + } + } + catch (...) { + ; + } + + if (model_author.empty() && model.design_info != nullptr) model_author = model.design_info->Designer; if (model.profile_info != nullptr) { From e0bd62504157446ecd92621a62f8d1cb9c77b101 Mon Sep 17 00:00:00 2001 From: tao wang Date: Fri, 31 Mar 2023 09:18:12 +0800 Subject: [PATCH 177/339] FIX:update the url address of the model mall Change-Id: I2021c141402f8eca999a66607e92b691e847b7be --- src/slic3r/GUI/GUI_App.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index bbeca86a3d..03dc392335 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -5663,7 +5663,7 @@ void GUI_App::open_mall_page_dialog() //model url wxString language_code = this->current_language_code().BeforeFirst('_'); - model_url += (language_code.ToStdString() + "/models"); + model_url = language_code.ToStdString(); if (getAgent() && mainframe) { From 97bdeb777120fea5630e2975a193a2c6c5289951 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Mon, 27 Mar 2023 14:03:54 +0800 Subject: [PATCH 178/339] ENH:support clear ams setting Change-Id: Id91bd8f69de640650770067d6159748ee7e416c9 --- src/slic3r/GUI/AMSMaterialsSetting.cpp | 95 ++++++++++++++++++++++---- src/slic3r/GUI/AMSMaterialsSetting.hpp | 2 + 2 files changed, 85 insertions(+), 12 deletions(-) diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index 458011fa6c..06a7e41864 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -42,10 +42,18 @@ void AMSMaterialsSetting::create() m_button_confirm->SetCornerRadius(FromDIP(12)); m_button_confirm->Bind(wxEVT_BUTTON, &AMSMaterialsSetting::on_select_ok, this); - m_button_close = new Button(this, _L("Close")); - m_btn_bg_gray = StateColor(std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(*wxWHITE, StateColor::Focused), + m_button_reset = new Button(this, _L("Reset")); + m_btn_bg_gray = StateColor(std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(*wxWHITE, StateColor::Focused), std::pair(wxColour(238, 238, 238), StateColor::Hovered), - std::pair(*wxWHITE, StateColor::Normal)); + std::pair(*wxWHITE, StateColor::Normal)); + m_button_reset->SetBackgroundColor(m_btn_bg_gray); + m_button_reset->SetBorderColor(AMS_MATERIALS_SETTING_GREY900); + m_button_reset->SetTextColor(AMS_MATERIALS_SETTING_GREY900); + m_button_reset->SetMinSize(AMS_MATERIALS_SETTING_BUTTON_SIZE); + m_button_reset->SetCornerRadius(FromDIP(12)); + m_button_reset->Bind(wxEVT_BUTTON, &AMSMaterialsSetting::on_select_reset, this); + + m_button_close = new Button(this, _L("Close")); m_button_close->SetBackgroundColor(m_btn_bg_gray); m_button_close->SetBorderColor(AMS_MATERIALS_SETTING_GREY900); m_button_close->SetTextColor(AMS_MATERIALS_SETTING_GREY900); @@ -54,6 +62,7 @@ void AMSMaterialsSetting::create() m_button_close->Bind(wxEVT_BUTTON, &AMSMaterialsSetting::on_select_close, this); m_sizer_button->Add(m_button_confirm, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(20)); + m_sizer_button->Add(m_button_reset, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(20)); m_sizer_button->Add(m_button_close, 0, wxALIGN_CENTER, 0); m_sizer_main->Add(m_panel_normal, 0, wxALL, FromDIP(2)); @@ -379,6 +388,62 @@ void AMSMaterialsSetting::enable_confirm_button(bool en) } } +void AMSMaterialsSetting::on_select_reset(wxCommandEvent& event) { + MessageDialog msg_dlg(nullptr, _L("Are you sure you want to clear the filament information?"), wxEmptyString, wxICON_WARNING | wxOK | wxCANCEL); + auto result = msg_dlg.ShowModal(); + if (result != wxID_OK) + return; + + m_input_nozzle_min->GetTextCtrl()->SetValue(""); + m_input_nozzle_max->GetTextCtrl()->SetValue(""); + ams_filament_id = ""; + ams_setting_id = ""; + wxString k_text = "0.000"; + wxString n_text = "0.000"; + m_filament_type = ""; + long nozzle_temp_min_int = 0; + long nozzle_temp_max_int = 0; + wxColour color = *wxWHITE; + char col_buf[10]; + sprintf(col_buf, "%02X%02X%02XFF", (int)color.Red(), (int)color.Green(), (int)color.Blue()); + + if (obj) { + // set filament + if (obj->is_support_filament_edit_virtual_tray || !is_virtual_tray()) { + if (is_virtual_tray()) { + obj->command_ams_filament_settings(255, VIRTUAL_TRAY_ID, ams_filament_id, ams_setting_id, std::string(col_buf), m_filament_type, nozzle_temp_min_int, nozzle_temp_max_int); + } + else { + obj->command_ams_filament_settings(ams_id, tray_id, ams_filament_id, ams_setting_id, std::string(col_buf), m_filament_type, nozzle_temp_min_int, nozzle_temp_max_int); + } + } + + // set k / n value + if (obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)) { + // set extrusion cali ratio + int cali_tray_id = ams_id * 4 + tray_id; + + double k = 0.0; + try { + k_text.ToDouble(&k); + } + catch (...) { + ; + } + + double n = 0.0; + try { + n_text.ToDouble(&n); + } + catch (...) { + ; + } + obj->command_extrusion_cali_set(cali_tray_id, "", "", k, n); + } + } + Close(); +} + void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) { wxString k_text = m_input_k_val->GetTextCtrl()->GetValue(); @@ -408,7 +473,8 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) } obj->command_extrusion_cali_set(VIRTUAL_TRAY_ID, "", "", k, n); Close(); - } else { + } + else { if (!m_is_third) { // check and set k n if (obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)) { @@ -448,7 +514,7 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) return; } wxString nozzle_temp_min = m_input_nozzle_min->GetTextCtrl()->GetValue(); - auto filament = m_comboBox_filament->GetValue(); + auto filament = m_comboBox_filament->GetValue(); wxString nozzle_temp_max = m_input_nozzle_max->GetTextCtrl()->GetValue(); @@ -457,11 +523,11 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) nozzle_temp_max.ToLong(&nozzle_temp_max_int); wxColour color = m_clr_picker->m_colour; char col_buf[10]; - sprintf(col_buf, "%02X%02X%02XFF", (int) color.Red(), (int) color.Green(), (int) color.Blue()); + sprintf(col_buf, "%02X%02X%02XFF", (int)color.Red(), (int)color.Green(), (int)color.Blue()); ams_filament_id = ""; ams_setting_id = ""; - PresetBundle *preset_bundle = wxGetApp().preset_bundle; + PresetBundle* preset_bundle = wxGetApp().preset_bundle; if (preset_bundle) { for (auto it = preset_bundle->filaments.begin(); it != preset_bundle->filaments.end(); it++) { if (it->alias.compare(m_comboBox_filament->GetValue().ToStdString()) == 0) { @@ -476,7 +542,8 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) MessageDialog msg_dlg(nullptr, _L("You need to select the material type and color firet."), wxEmptyString, wxICON_WARNING | wxOK); msg_dlg.ShowModal(); return; - } else { + } + else { if (obj) { if (obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)) { if (!ExtrusionCalibration::check_k_validation(k_text)) { @@ -492,7 +559,8 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) if (obj->is_support_filament_edit_virtual_tray || !is_virtual_tray()) { if (is_virtual_tray()) { obj->command_ams_filament_settings(255, VIRTUAL_TRAY_ID, ams_filament_id, ams_setting_id, std::string(col_buf), m_filament_type, nozzle_temp_min_int, nozzle_temp_max_int); - } else { + } + else { obj->command_ams_filament_settings(ams_id, tray_id, ams_filament_id, ams_setting_id, std::string(col_buf), m_filament_type, nozzle_temp_min_int, nozzle_temp_max_int); } } @@ -634,6 +702,7 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi m_input_n_val->GetTextCtrl()->SetValue(n); if (is_virtual_tray() && obj && !obj->is_support_filament_edit_virtual_tray) { + m_button_reset->Show(); m_button_confirm->Show(); update(); Layout(); @@ -649,6 +718,7 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi ));*/ if (!m_is_third) { + m_button_reset->Hide(); if (obj && obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)) { m_button_confirm->Show(); } else { @@ -671,6 +741,7 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi return; } + m_button_reset->Show(); m_button_confirm->Show(); m_panel_SN->Hide(); m_comboBox_filament->Show(); @@ -762,7 +833,7 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt) PresetBundle* preset_bundle = wxGetApp().preset_bundle; if (preset_bundle) { for (auto it = preset_bundle->filaments.begin(); it != preset_bundle->filaments.end(); it++) { - if (it->alias.compare(m_comboBox_filament->GetValue().ToStdString()) == 0) { + if (!m_comboBox_filament->GetValue().IsEmpty() && it->alias.compare(m_comboBox_filament->GetValue().ToStdString()) == 0) { //check is it in the filament blacklist bool in_blacklist = false; @@ -824,10 +895,10 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt) } } if (m_input_nozzle_min->GetTextCtrl()->GetValue().IsEmpty()) { - m_input_nozzle_min->GetTextCtrl()->SetValue("220"); + m_input_nozzle_min->GetTextCtrl()->SetValue("0"); } if (m_input_nozzle_max->GetTextCtrl()->GetValue().IsEmpty()) { - m_input_nozzle_max->GetTextCtrl()->SetValue("220"); + m_input_nozzle_max->GetTextCtrl()->SetValue("0"); } m_filament_selection = evt.GetSelection(); diff --git a/src/slic3r/GUI/AMSMaterialsSetting.hpp b/src/slic3r/GUI/AMSMaterialsSetting.hpp index 572324d5a2..7889c32f22 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.hpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.hpp @@ -119,6 +119,7 @@ protected: void on_dpi_changed(const wxRect &suggested_rect) override; void on_select_filament(wxCommandEvent& evt); void on_select_ok(wxCommandEvent &event); + void on_select_reset(wxCommandEvent &event); void on_select_close(wxCommandEvent &event); void on_clr_picker(wxMouseEvent &event); bool is_virtual_tray(); @@ -137,6 +138,7 @@ protected: wxStaticText * m_title_temperature; TextInput * m_input_nozzle_min; TextInput* m_input_nozzle_max; + Button * m_button_reset; Button * m_button_confirm; wxStaticText* m_tip_readonly; Button * m_button_close; From 62df53f86eccb04132e975e5a812fd1d740ff323 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Thu, 30 Mar 2023 15:05:13 +0800 Subject: [PATCH 179/339] FIX: A mesh with overlapping faces cannot be painted STUDIO-2591 Change-Id: Iad566cdc45d123b5c8342c732c0dc964c261753a (cherry picked from commit eb9f7297e0ea0557b32e5f59c3a91692ac8afa5b) --- src/libslic3r/SLA/IndexedMesh.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/SLA/IndexedMesh.cpp b/src/libslic3r/SLA/IndexedMesh.cpp index 07c4203ab2..cd1c28278d 100644 --- a/src/libslic3r/SLA/IndexedMesh.cpp +++ b/src/libslic3r/SLA/IndexedMesh.cpp @@ -184,10 +184,11 @@ IndexedMesh::query_ray_hits(const Vec3d &s, const Vec3d &dir) const // Remove duplicates. They sometimes appear, for example when the ray is cast // along an axis of a cube due to floating-point approximations in igl (?) - hits.erase(std::unique(hits.begin(), hits.end(), - [](const igl::Hit& a, const igl::Hit& b) - { return a.t == b.t; }), - hits.end()); + // BBS: STUDIO-2591 A mesh with overlapping faces cannot be painted + //hits.erase(std::unique(hits.begin(), hits.end(), + // [](const igl::Hit& a, const igl::Hit& b) + // { return a.t == b.t; }), + // hits.end()); // Convert the igl::Hit into hit_result outs.reserve(hits.size()); From 87df72a67f5276f1b08264654fb4236db6d1dd14 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Mon, 27 Mar 2023 14:46:11 +0800 Subject: [PATCH 180/339] ENH: modify zoom interaction Change-Id: I7a888a8980b5b10e5d2c515158c9c4cdf8654b7c --- src/libslic3r/AppConfig.cpp | 3 +++ src/slic3r/GUI/GLCanvas3D.cpp | 3 ++- src/slic3r/GUI/Preferences.cpp | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index e4ab1134f4..c54429fc75 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -170,6 +170,9 @@ void AppConfig::set_defaults() set_bool("reverse_mouse_wheel_zoom", false); #endif + if (get("zoom_to_mouse").empty()) + set_bool("zoom_to_mouse", false); + //#ifdef SUPPORT_SHOW_HINTS if (get("show_hints").empty()) set_bool("show_hints", true); diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index c31ca9bc69..f7dc0f4b4e 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -3596,7 +3596,8 @@ void GLCanvas3D::on_mouse_wheel(wxMouseEvent& evt) double direction_factor = 1.0; #endif auto delta = direction_factor * (double)evt.GetWheelRotation() / (double)evt.GetWheelDelta(); - if (evt.CmdDown()) { + bool zoom_to_mouse = wxGetApp().app_config->get("zoom_to_mouse") == "true"; + if (!zoom_to_mouse) {// zoom to center _update_camera_zoom(delta); } else { diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 10aaca05de..dd7ab427e6 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -914,6 +914,8 @@ wxWindow* PreferencesDialog::create_general_page() std::vector Units = {_L("Metric") + " (mm, g)", _L("Imperial") + " (in, oz)"}; auto item_currency = create_item_combobox(_L("Units"), page, _L("Units"), "use_inches", Units); + auto item_mouse_zoom_settings = create_item_checkbox(_L("Zoom to mouse position"), page, _L("Zoom in towards the mouse pointer's position in the 3D view, rather than the 2D window center."), 50, "zoom_to_mouse"); + auto item_hints = create_item_checkbox(_L("Show \"Tip of the day\" notification after start"), page, _L("If enabled, useful hints are displayed at startup."), 50, "show_hints"); auto title_presets = create_item_title(_L("Presets"), page, _L("Presets")); @@ -968,6 +970,7 @@ wxWindow* PreferencesDialog::create_general_page() sizer_page->Add(item_language, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_region, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_currency, 0, wxTOP, FromDIP(3)); + sizer_page->Add(item_mouse_zoom_settings, 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_user_sync, 0, wxTOP, FromDIP(3)); From f596a822e27fbe616c8c04eb0102376e7a022469 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Mon, 3 Apr 2023 09:50:06 +0800 Subject: [PATCH 181/339] ENH: update version to 01.05.05.63 Change-Id: I79847e97e6f0a85b28e3ca85297249a9c46ef913 --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index 7ac91f8953..9d84c3be6a 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.05.04.62") +set(SLIC3R_VERSION "01.05.05.63") From 00e1c509479bdccaace79e1226f862689aeb73ad Mon Sep 17 00:00:00 2001 From: tao wang Date: Fri, 24 Mar 2023 16:08:20 +0800 Subject: [PATCH 182/339] NEW:AMS supports ams filament backup Change-Id: I0bc84f52bcd88dbbc1b9614b15474433c748cc14 --- resources/config.json | 23 +- .../images/automatic_material_renewal.svg | 5 + resources/images/replace_arrow_down.svg | 3 + resources/images/replace_arrow_left.svg | 3 + resources/images/replace_arrow_right.svg | 3 + src/slic3r/GUI/AmsMappingPopup.cpp | 378 ++++++++++++++++++ src/slic3r/GUI/AmsMappingPopup.hpp | 69 ++++ src/slic3r/GUI/DeviceManager.cpp | 15 + src/slic3r/GUI/DeviceManager.hpp | 2 + src/slic3r/GUI/SelectMachine.cpp | 39 +- src/slic3r/GUI/SelectMachine.hpp | 3 +- src/slic3r/GUI/StatusPanel.cpp | 10 + src/slic3r/GUI/StatusPanel.hpp | 4 +- src/slic3r/GUI/Widgets/AMSControl.cpp | 62 +-- src/slic3r/GUI/Widgets/AMSControl.hpp | 1 + src/slic3r/GUI/Widgets/Label.cpp | 2 + src/slic3r/GUI/Widgets/Label.hpp | 1 + 17 files changed, 585 insertions(+), 38 deletions(-) create mode 100644 resources/images/automatic_material_renewal.svg create mode 100644 resources/images/replace_arrow_down.svg create mode 100644 resources/images/replace_arrow_left.svg create mode 100644 resources/images/replace_arrow_right.svg diff --git a/resources/config.json b/resources/config.json index 20489ed325..c69e70b33b 100644 --- a/resources/config.json +++ b/resources/config.json @@ -26,21 +26,22 @@ "ftp_folder" : "sdcard/", "printer_thumbnail_image": "printer_thumbnail_p1p" }, - { - "display_name": "Bambu Lab X1", - "func": { - "FUNC_EXTRUSION_CALI": false, - "FUNC_LOCAL_TUNNEL": false - }, - "camera_resolution":["720p","1080p"], - "model_id": "BL-P002", - "printer_type": "3DPrinter-X1", - "printer_thumbnail_image": "printer_thumbnail" + { + "display_name": "Bambu Lab X1", + "func": { + "FUNC_EXTRUSION_CALI": true, + "FUNC_LOCAL_TUNNEL": false }, + "camera_resolution": [ "720p", "1080p" ], + "model_id": "BL-P002", + "printer_type": "3DPrinter-X1", + "printer_thumbnail_image": "printer_thumbnail" + }, + { "display_name": "Bambu Lab X1 Carbon", "func": { - "FUNC_EXTRUSION_CALI": false, + "FUNC_EXTRUSION_CALI": true, "FUNC_LOCAL_TUNNEL": false }, "model_id": "BL-P001", diff --git a/resources/images/automatic_material_renewal.svg b/resources/images/automatic_material_renewal.svg new file mode 100644 index 0000000000..a1138c5e6e --- /dev/null +++ b/resources/images/automatic_material_renewal.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/replace_arrow_down.svg b/resources/images/replace_arrow_down.svg new file mode 100644 index 0000000000..d46126623d --- /dev/null +++ b/resources/images/replace_arrow_down.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/images/replace_arrow_left.svg b/resources/images/replace_arrow_left.svg new file mode 100644 index 0000000000..0c95675d13 --- /dev/null +++ b/resources/images/replace_arrow_left.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/images/replace_arrow_right.svg b/resources/images/replace_arrow_right.svg new file mode 100644 index 0000000000..76bb1f417b --- /dev/null +++ b/resources/images/replace_arrow_right.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index 2b8f551e89..390d897629 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -1107,4 +1107,382 @@ void MappingContainer::doRender(wxDC& dc) dc.DrawBitmap(ams_mapping_item_container, 0, 0); } +AmsReplaceMaterialDialog::AmsReplaceMaterialDialog(wxWindow* parent) + : DPIDialog(parent, wxID_ANY, _L("Filaments replace"), wxDefaultPosition, wxDefaultSize, wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX) +{ + SetBackgroundColour(*wxWHITE); + create(); + wxGetApp().UpdateDlgDarkUI(this); +} + +void AmsReplaceMaterialDialog::create() +{ + SetSize(wxSize(FromDIP(376), -1)); + SetMinSize(wxSize(FromDIP(376), -1)); + SetMaxSize(wxSize(FromDIP(376), -1)); + + // set icon for dialog + std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str(); + SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); + SetSizeHints(wxDefaultSize, wxDefaultSize); + + m_main_sizer = new wxBoxSizer(wxVERTICAL); + auto m_top_line = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); + m_top_line->SetBackgroundColour(wxColour(166, 169, 170)); + m_main_sizer->Add(m_top_line, 0, wxEXPAND, 0); + + + auto m_button_sizer = new wxBoxSizer(wxHORIZONTAL); + + StateColor btn_bg_white(std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Disabled), + std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Pressed), + std::pair(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, StateColor::Hovered), + std::pair(AMS_CONTROL_WHITE_COLOUR, StateColor::Normal)); + + StateColor btn_bd_white(std::pair(wxColour(255, 255, 254), StateColor::Disabled), + std::pair(wxColour(38, 46, 48), StateColor::Enabled)); + + StateColor btn_text_white(std::pair(wxColour(255, 255, 254), StateColor::Disabled), + std::pair(wxColour(38, 46, 48), StateColor::Enabled)); + + auto m_button_close = new Button(this, _L("Close")); + m_button_close->SetCornerRadius(FromDIP(11)); + m_button_close->SetBackgroundColor(btn_bg_white); + m_button_close->SetBorderColor(btn_bd_white); + m_button_close->SetTextColor(btn_text_white); + m_button_close->SetFont(Label::Body_13); + m_button_close->SetMinSize(wxSize(FromDIP(42), FromDIP(24))); + m_button_close->Bind(wxEVT_BUTTON, [this](auto& e) { + EndModal(wxCLOSE); + }); + + m_button_sizer->Add( 0, 0, 1, wxEXPAND, 0 ); + m_button_sizer->Add(m_button_close, 0, wxALIGN_CENTER, 0); + + + m_groups_sizer = new wxBoxSizer(wxVERTICAL); + m_main_sizer->Add(0,0,0, wxTOP, FromDIP(12)); + m_main_sizer->Add(m_groups_sizer,0,wxEXPAND|wxLEFT|wxRIGHT, FromDIP(16)); + m_main_sizer->Add(0,0,0, wxTOP, FromDIP(20)); + m_main_sizer->Add(m_button_sizer,0,wxEXPAND|wxLEFT|wxRIGHT, FromDIP(16)); + m_main_sizer->Add(0,0,0, wxTOP, FromDIP(20)); + + + CenterOnParent(); + SetSizer(m_main_sizer); + Layout(); + Fit(); +} + +std::vector AmsReplaceMaterialDialog::GetStatus(unsigned int status) +{ + std::vector listStatus; + bool current = false; + for (int i = 0; i < 16; i++) { + if (status & (1 << i)) { + current = true; + } + else { + current = false; + } + listStatus.push_back(current); + } + return listStatus; +} + +void AmsReplaceMaterialDialog::update_machine_obj(MachineObject* obj) +{ + if (obj) {m_obj = obj;} + else {return;} + + AmsTray* tray_list[4*4]; + for (auto i = 0; i < 4*4; i++) { + tray_list[i] = nullptr; + } + + try { + for (auto ams_info : obj->amsList) { + int ams_id_int = atoi(ams_info.first.c_str()) * 4; + + for (auto tray_info : ams_info.second->trayList) { + int tray_id_int = atoi(tray_info.first.c_str()); + tray_id_int = ams_id_int + tray_id_int; + tray_list[tray_id_int] = tray_info.second; + } + } + } + catch (...) {} + + //creat group + int group_index = 1; + for (int filam : m_obj->filam_bak) { + auto status_list = GetStatus(filam); + + wxColour group_color; + std::string group_material; + + //get color & material + for (auto i = 0; i < status_list.size(); i++) { + if (status_list[i] && tray_list[i] != nullptr) { + group_color = AmsTray::decode_color(tray_list[i]->color); + group_material = tray_list[i]->get_display_filament_type(); + } + } + + m_groups_sizer->Add(create_split_line(wxString::Format("%s%d", _L("Group"), group_index), group_color, group_material, status_list), 0, wxEXPAND, 0); + m_groups_sizer->Add(0, 0, 0, wxTOP, FromDIP(12)); + group_index++; + } + + Layout(); + Fit(); +} + +wxWindow* AmsReplaceMaterialDialog::create_split_line(wxString gname, wxColour col, wxString material, std::vector status_list) +{ + wxColour background_color = wxColour(0xF4F4F4); + + if (abs(col.Red() - background_color.Red()) <= 5 && + abs(col.Green() - background_color.Green()) <= 5 && + abs(col.Blue() - background_color.Blue()) <= 5) { + background_color = wxColour(0xE6E6E6); + } + + auto m_panel_group = new StaticBox(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); + m_panel_group->SetCornerRadius(FromDIP(4)); + m_panel_group->SetBackgroundColor(StateColor(std::pair(background_color, StateColor::Normal))); + + m_panel_group->SetSize(wxSize(FromDIP(344), -1)); + m_panel_group->SetMinSize(wxSize(FromDIP(344), -1)); + m_panel_group->SetMaxSize(wxSize(FromDIP(344), -1)); + + wxBoxSizer* group_sizer = new wxBoxSizer(wxVERTICAL); + + //group title + wxBoxSizer* title_sizer = new wxBoxSizer(wxHORIZONTAL); + auto group_name = new Label(m_panel_group, gname); + group_name->SetFont(::Label::Head_12); + + Button* material_info = new Button(m_panel_group, material); + material_info->SetFont(Label::Head_12); + material_info->SetCornerRadius(FromDIP(2)); + material_info->SetBorderColor(background_color); + + if (col.GetLuminance() < 0.5) + material_info->SetTextColor(*wxWHITE); + else + material_info->SetTextColor(0x6B6B6B); + + material_info->SetMinSize(wxSize(-1, FromDIP(24))); + material_info->SetBackgroundColor(col); + + + title_sizer->Add(group_name, 0, wxALIGN_CENTER, 0); + title_sizer->Add(0, 0, 0, wxLEFT, FromDIP(10)); + title_sizer->Add(material_info, 0, wxALIGN_CENTER, 0); + + + //group item + wxGridSizer* grid_Sizer = new wxGridSizer(0, 8, 0, 0); + + for (int i = 0; i < status_list.size(); i++) { + if (status_list[i]) { + AmsRMItem* amsitem = new AmsRMItem(m_panel_group, wxID_ANY, wxDefaultPosition, wxDefaultSize); + amsitem->set_color(col); + + //set current tray + if (!m_obj->m_tray_now.empty() && m_obj->m_tray_now == std::to_string(i)) { + amsitem->set_focus(true); + } + + amsitem->set_type(RMTYPE_NORMAL); + amsitem->set_index(wxGetApp().transition_tridid(i).ToStdString()); + amsitem->SetBackgroundColour(background_color); + grid_Sizer->Add(amsitem, 0, wxALIGN_CENTER | wxTOP | wxBottom, FromDIP(10)); + } + } + + //add the first tray + for (int i = 0; i < status_list.size(); i++) { + if (status_list[i]) { + AmsRMItem* amsitem = new AmsRMItem(m_panel_group, wxID_ANY, wxDefaultPosition, wxDefaultSize); + amsitem->set_color(col); + amsitem->set_type(RMTYPE_VIRTUAL); + amsitem->set_index(wxGetApp().transition_tridid(i).ToStdString()); + amsitem->SetBackgroundColour(background_color); + grid_Sizer->Add(amsitem, 0, wxALIGN_CENTER | wxTOP | wxBottom, FromDIP(10)); + break; + } + } + + group_sizer->Add(0, 0, 0, wxTOP, FromDIP(10)); + group_sizer->Add(title_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(12)); + group_sizer->Add(grid_Sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(12)); + group_sizer->Add(0, 0, 0, wxTOP, FromDIP(10)); + + m_panel_group->SetSizer(group_sizer); + m_panel_group->Layout(); + group_sizer->Fit(m_panel_group); + return m_panel_group; +} + +void AmsReplaceMaterialDialog::paintEvent(wxPaintEvent& evt) +{ + wxPaintDC dc(this); + dc.SetPen(wxColour(0xAC, 0xAC, 0xAC)); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y, 0); +} + +void AmsReplaceMaterialDialog::on_dpi_changed(const wxRect& suggested_rect) +{ + +} + +AmsRMItem::AmsRMItem(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size) +{ + wxWindow::Create(parent, id, pos, size); + + SetSize(wxSize(FromDIP(42), FromDIP(32))); + SetMinSize(wxSize(FromDIP(42), FromDIP(32))); + SetMaxSize(wxSize(FromDIP(42), FromDIP(32))); + + SetBackgroundColour(*wxWHITE); + + Bind(wxEVT_PAINT, &AmsRMItem::paintEvent, this); +} + +void AmsRMItem::paintEvent(wxPaintEvent& evt) +{ + wxPaintDC dc(this); + render(dc); +} + +void AmsRMItem::render(wxDC& dc) +{ +#ifdef __WXMSW__ + wxSize size = GetSize(); + wxMemoryDC memdc; + wxBitmap bmp(size.x, size.y); + memdc.SelectObject(bmp); + memdc.Blit({ 0, 0 }, size, &dc, { 0, 0 }); + + { + wxGCDC dc2(memdc); + doRender(dc2); + } + + memdc.SelectObject(wxNullBitmap); + dc.DrawBitmap(bmp, 0, 0); +#else + doRender(dc); +#endif +} + +void AmsRMItem::doRender(wxDC& dc) +{ + wxSize size = GetSize(); + + if (m_type == RMTYPE_NORMAL) { + dc.SetPen(wxPen(m_color, 2)); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + } + else { + dc.SetPen(wxPen(m_color, 2, wxSHORT_DASH)); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + } + + //top bottom line + dc.DrawLine(FromDIP(0), FromDIP(4), size.x - FromDIP(5), FromDIP(4)); + dc.DrawLine(FromDIP(0), size.y - FromDIP(4), size.x - FromDIP(5), size.y - FromDIP(4)); + + //left right line + dc.DrawLine(FromDIP(1), FromDIP(4), FromDIP(1), FromDIP(11)); + dc.DrawLine(FromDIP(1), FromDIP(22), FromDIP(1), size.y - FromDIP(4)); + + dc.DrawLine(size.x - FromDIP(5), FromDIP(4), size.x - FromDIP(5), FromDIP(11)); + dc.DrawLine(size.x - FromDIP(5), FromDIP(22), size.x - FromDIP(5), size.y - FromDIP(4)); + + //delta + dc.DrawLine(FromDIP(0), FromDIP(11), FromDIP(5), size.y / 2); + dc.DrawLine(FromDIP(0), FromDIP(22), FromDIP(5), size.y / 2); + + dc.DrawLine(size.x - FromDIP(5), FromDIP(11), size.x - FromDIP(1), size.y / 2); + dc.DrawLine(size.x - FromDIP(5), FromDIP(22), size.x - FromDIP(1), size.y / 2); + + + if (m_focus) { + dc.SetPen(wxPen(wxColour(0x00AE42), 2)); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.DrawLine(FromDIP(0), FromDIP(1), size.x - FromDIP(5), FromDIP(1)); + dc.DrawLine(FromDIP(0), size.y - FromDIP(1), size.x - FromDIP(5), size.y - FromDIP(1)); + } + + if (m_selected) { + } + + auto tsize = dc.GetMultiLineTextExtent(m_index); + auto tpot = wxPoint((size.x - tsize.x) / 2 - FromDIP(2), (size.y - tsize.y) / 2 + FromDIP(2)); + dc.SetTextForeground(wxColour(0x6B6B6B)); + dc.SetFont(::Label::Head_12); + dc.DrawText(m_index, tpot); +} + +AmsRMArrow::AmsRMArrow(wxWindow* parent) +{ + + wxWindow::Create(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize); + SetBackgroundColour(*wxWHITE); + Bind(wxEVT_PAINT, &AmsRMArrow::paintEvent, this); + + m_bitmap_left = ScalableBitmap(this, "replace_arrow_left", 7); + m_bitmap_right = ScalableBitmap(this, "replace_arrow_right", 7); + m_bitmap_down = ScalableBitmap(this, "replace_arrow_down", 7); + + + SetSize(wxSize(FromDIP(16), FromDIP(32))); + SetMinSize(wxSize(FromDIP(16), FromDIP(32))); + SetMaxSize(wxSize(FromDIP(16), FromDIP(32))); +} + +void AmsRMArrow::paintEvent(wxPaintEvent& evt) +{ + wxPaintDC dc(this); + render(dc); +} + +void AmsRMArrow::render(wxDC& dc) +{ +#ifdef __WXMSW__ + wxSize size = GetSize(); + wxMemoryDC memdc; + wxBitmap bmp(size.x, size.y); + memdc.SelectObject(bmp); + memdc.Blit({ 0, 0 }, size, &dc, { 0, 0 }); + + { + wxGCDC dc2(memdc); + doRender(dc2); + } + + memdc.SelectObject(wxNullBitmap); + dc.DrawBitmap(bmp, 0, 0); +#else + doRender(dc); +#endif +} + +void AmsRMArrow::doRender(wxDC& dc) +{ + wxSize size = GetSize(); + + dc.SetPen(wxPen(wxColour(0, 174, 66))); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + + + dc.SetPen(wxPen(wxColour(0xACACAC))); + dc.SetBrush(wxBrush(wxColour(0xACACAC))); + dc.DrawCircle(size.x / 2, size.y / 2, FromDIP(7)); +} + }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/AmsMappingPopup.hpp b/src/slic3r/GUI/AmsMappingPopup.hpp index 06fadaa82a..7606a172ff 100644 --- a/src/slic3r/GUI/AmsMappingPopup.hpp +++ b/src/slic3r/GUI/AmsMappingPopup.hpp @@ -239,6 +239,75 @@ public: }; +class AmsReplaceMaterialDialog : public DPIDialog +{ +public: + AmsReplaceMaterialDialog(wxWindow* parent); + ~AmsReplaceMaterialDialog() {}; + +public: + wxWindow* create_split_line(wxString gname, wxColour col, wxString material, std::vector status_list); + void create(); + void update_machine_obj(MachineObject* obj); + void on_left_down(wxMouseEvent& evt); + void paintEvent(wxPaintEvent& evt); + void on_dpi_changed(const wxRect &suggested_rect) override; + std::vector GetStatus(unsigned int status); + +public: + wxBoxSizer* m_main_sizer{nullptr}; + wxBoxSizer* m_groups_sizer{nullptr}; + + MachineObject* m_obj{nullptr}; +}; + + +enum RMTYPE { + RMTYPE_NORMAL = 0, + RMTYPE_VIRTUAL = 1, +}; + +class AmsRMItem : public wxWindow +{ +public: + AmsRMItem(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); + ~AmsRMItem() {}; + +public: + void set_color(wxColour col) {m_color = col;}; + void set_type(RMTYPE type) {m_type = type;}; + void set_index(std::string index) {m_index = index;}; + void set_focus(bool focus) {m_focus = focus;}; + + void paintEvent(wxPaintEvent& evt); + void render(wxDC& dc); + void doRender(wxDC& dc); + +private: + RMTYPE m_type; + wxColour m_color; + std::string m_index; + bool m_focus = false; + bool m_selected = false; +}; + +class AmsRMArrow : public wxWindow +{ +public: + AmsRMArrow(wxWindow* parent); + ~AmsRMArrow() {}; + +public: + void paintEvent(wxPaintEvent& evt); + void render(wxDC& dc); + void doRender(wxDC& dc); + +private: + ScalableBitmap m_bitmap_left; + ScalableBitmap m_bitmap_right; + ScalableBitmap m_bitmap_down; +}; + wxDECLARE_EVENT(EVT_SET_FINISH_MAPPING, wxCommandEvent); }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index f890dc2be6..9a35bde598 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -2673,6 +2673,21 @@ int MachineObject::parse_json(std::string payload) ; } + /*get filam_bak*/ + try { + if (jj.contains("filam_bak")) { + filam_bak.clear(); + if (jj["filam_bak"].is_array()) { + for (auto it = jj["filam_bak"].begin(); it != jj["filam_bak"].end(); it++) { + filam_bak.push_back(it.value().get()); + } + } + } + } + catch (...) { + ; + } + /* get fimware type */ try { if (jj.contains("lifecycle")) { diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 6c2b1ae0a9..213341fd91 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -433,6 +433,8 @@ public: std::string get_printer_thumbnail_img_str(); std::string product_name; // set by iot service, get /user/print + std::vector filam_bak; + std::string bind_user_name; std::string bind_user_id; std::string bind_state; /* free | occupied */ diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 7f45a65ce2..57d5fcd874 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -1197,8 +1197,28 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) m_sizer_prepare->Add(hyperlink_sizer, 0, wxALIGN_CENTER | wxALL, 5); + auto m_sizer_backup = new wxBoxSizer(wxHORIZONTAL); + auto m_ams_backup_tip = new Label(m_panel_prepare, _L("Ams filament backup")); + m_ams_backup_tip->SetFont(::Label::Head_12); + m_ams_backup_tip->SetForegroundColour(wxColour(0x00AE42)); + m_ams_backup_tip->SetBackgroundColour(*wxWHITE); + auto img_ams_backup = new wxStaticBitmap(m_panel_prepare, wxID_ANY, create_scaled_bitmap("automatic_material_renewal", this, 16), wxDefaultPosition, wxSize(FromDIP(16), FromDIP(16)), 0); + img_ams_backup->SetBackgroundColour(*wxWHITE); + + m_sizer_backup->Add(0, 0, 1, wxEXPAND, 0); + m_sizer_backup->Add(img_ams_backup, 0, wxALL, FromDIP(3)); + m_sizer_backup->Add(m_ams_backup_tip, 0, wxTOP, FromDIP(5)); + + m_ams_backup_tip->Bind(wxEVT_ENTER_WINDOW, [this, img_amsmapping_tip](auto& e) {SetCursor(wxCURSOR_HAND); }); + img_ams_backup->Bind(wxEVT_ENTER_WINDOW, [this, img_amsmapping_tip](auto& e) {SetCursor(wxCURSOR_HAND); }); + + m_ams_backup_tip->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); }); + img_ams_backup->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); }); + + m_ams_backup_tip->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {popup_filament_backup();}); + img_ams_backup->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {popup_filament_backup();}); + - m_sizer_pcont->Add(0, 0, 1, wxEXPAND, 0); m_button_ensure = new Button(m_panel_prepare, _L("Send")); m_button_ensure->SetBackgroundColor(btn_bg_enable); m_button_ensure->SetBorderColor(btn_bg_enable); @@ -1206,9 +1226,13 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) m_button_ensure->SetSize(SELECT_MACHINE_DIALOG_BUTTON_SIZE); m_button_ensure->SetMinSize(SELECT_MACHINE_DIALOG_BUTTON_SIZE); m_button_ensure->SetCornerRadius(FromDIP(12)); - m_button_ensure->Bind(wxEVT_BUTTON, &SelectMachineDialog::on_ok_btn, this); + + m_sizer_pcont->Add(m_sizer_backup, 0, wxEXPAND | wxBOTTOM, FromDIP(10)); + m_sizer_pcont->Add(0, 0, 1, wxEXPAND, 0); m_sizer_pcont->Add(m_button_ensure, 0, wxEXPAND | wxBOTTOM, FromDIP(10)); + + m_sizer_prepare->Add(m_sizer_pcont, 0, wxEXPAND, 0); m_panel_prepare->SetSizer(m_sizer_prepare); m_panel_prepare->Layout(); @@ -1335,6 +1359,17 @@ void SelectMachineDialog::check_fcous_state(wxWindow* window) } } +void SelectMachineDialog::popup_filament_backup() +{ + DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) return; + if (dev->get_selected_machine() && dev->get_selected_machine()->filam_bak.size() > 0) { + AmsReplaceMaterialDialog* m_replace_material_popup = new AmsReplaceMaterialDialog(this); + m_replace_material_popup->update_machine_obj(dev->get_selected_machine()); + m_replace_material_popup->ShowModal(); + } +} + wxWindow *SelectMachineDialog::create_ams_checkbox(wxString title, wxWindow *parent, wxString tooltip) { auto checkbox = new wxWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); diff --git a/src/slic3r/GUI/SelectMachine.hpp b/src/slic3r/GUI/SelectMachine.hpp index 9da96621b5..8326abc12e 100644 --- a/src/slic3r/GUI/SelectMachine.hpp +++ b/src/slic3r/GUI/SelectMachine.hpp @@ -365,7 +365,8 @@ public: void check_focus(wxWindow* window); void check_fcous_state(wxWindow* window); - wxWindow *create_ams_checkbox(wxString title, wxWindow *parent, wxString tooltip); + void popup_filament_backup(); + wxWindow* create_ams_checkbox(wxString title, wxWindow* parent, wxString tooltip); wxWindow* create_item_checkbox(wxString title, wxWindow* parent, wxString tooltip, std::string param); void update_select_layout(MachineObject *obj); void prepare_mode(); diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 3a1763118e..c54cc26c47 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -1266,6 +1266,7 @@ StatusPanel::StatusPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, co Bind(EVT_AMS_EXTRUSION_CALI, &StatusPanel::on_filament_extrusion_cali, this); Bind(EVT_AMS_LOAD, &StatusPanel::on_ams_load, this); Bind(EVT_AMS_UNLOAD, &StatusPanel::on_ams_unload, this); + Bind(EVT_AMS_FILAMENT_BACKUP, &StatusPanel::on_ams_filament_backup, this); Bind(EVT_AMS_SETTINGS, &StatusPanel::on_ams_setting_click, this); Bind(EVT_AMS_REFRESH_RFID, &StatusPanel::on_ams_refresh_rfid, this); Bind(EVT_AMS_ON_SELECTED, &StatusPanel::on_ams_selected, this); @@ -2651,6 +2652,15 @@ void StatusPanel::on_ams_unload(SimpleEvent &event) if (obj) { obj->command_ams_switch(255); } } +void StatusPanel::on_ams_filament_backup(SimpleEvent& event) +{ + if (obj && obj->filam_bak.size() > 0) { + AmsReplaceMaterialDialog* m_replace_material_popup = new AmsReplaceMaterialDialog(this); + m_replace_material_popup->update_machine_obj(obj); + m_replace_material_popup->ShowModal(); + } +} + void StatusPanel::on_ams_setting_click(SimpleEvent &event) { if (!m_ams_setting_dlg) m_ams_setting_dlg = new AMSSetting((wxWindow *) this, wxID_ANY); diff --git a/src/slic3r/GUI/StatusPanel.hpp b/src/slic3r/GUI/StatusPanel.hpp index be3f1108f8..7150c8653a 100644 --- a/src/slic3r/GUI/StatusPanel.hpp +++ b/src/slic3r/GUI/StatusPanel.hpp @@ -277,6 +277,7 @@ protected: SecondaryCheckDialog* con_load_dlg = nullptr; SecondaryCheckDialog* ctrl_e_hint_dlg = nullptr; SecondaryCheckDialog* sdcard_hint_dlg = nullptr; + FanControlPopup* m_fan_control_popup{nullptr}; ExtrusionCalibration *m_extrusion_cali_dlg{nullptr}; @@ -340,7 +341,8 @@ protected: void on_ams_load(SimpleEvent &event); void on_ams_load_curr(); void on_ams_unload(SimpleEvent &event); - void on_ams_setting_click(SimpleEvent &event); + void on_ams_filament_backup(SimpleEvent& event); + void on_ams_setting_click(SimpleEvent& event); void on_filament_edit(wxCommandEvent &event); void on_ext_spool_edit(wxCommandEvent &event); void on_filament_extrusion_cali(wxCommandEvent &event); diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index f966cd8c02..74de27c1cc 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -19,6 +19,7 @@ wxDEFINE_EVENT(EVT_AMS_EXTRUSION_CALI, wxCommandEvent); wxDEFINE_EVENT(EVT_AMS_LOAD, SimpleEvent); wxDEFINE_EVENT(EVT_AMS_UNLOAD, SimpleEvent); wxDEFINE_EVENT(EVT_AMS_SETTINGS, SimpleEvent); +wxDEFINE_EVENT(EVT_AMS_FILAMENT_BACKUP, SimpleEvent); wxDEFINE_EVENT(EVT_AMS_REFRESH_RFID, wxCommandEvent); wxDEFINE_EVENT(EVT_AMS_ON_SELECTED, wxCommandEvent); wxDEFINE_EVENT(EVT_AMS_ON_FILAMENT_EDIT, wxCommandEvent); @@ -1769,14 +1770,16 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons wxBoxSizer *m_sizer_bottom = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer *m_sizer_left = new wxBoxSizer(wxVERTICAL); + //ams tip m_sizer_ams_tips = new wxBoxSizer(wxHORIZONTAL); - auto m_ams_tip = new wxStaticText(m_amswin, wxID_ANY, _L("AMS")); + auto m_ams_tip = new Label(m_amswin, _L("AMS")); m_ams_tip->SetFont(::Label::Body_12); m_ams_tip->SetBackgroundColour(*wxWHITE); auto img_amsmapping_tip = new wxStaticBitmap(m_amswin, wxID_ANY, create_scaled_bitmap("enable_ams", this, 16), wxDefaultPosition, wxSize(FromDIP(16), FromDIP(16)), 0); img_amsmapping_tip->SetBackgroundColour(*wxWHITE); - m_sizer_ams_tips->Add(m_ams_tip, 0, wxALIGN_CENTER, 0); - m_sizer_ams_tips->Add(img_amsmapping_tip, 0, wxALL, FromDIP(2)); + + m_sizer_ams_tips->Add(m_ams_tip, 0, wxTOP, FromDIP(5)); + m_sizer_ams_tips->Add(img_amsmapping_tip, 0, wxALL, FromDIP(3)); img_amsmapping_tip->Bind(wxEVT_ENTER_WINDOW, [this, img_amsmapping_tip](auto& e) { wxPoint img_pos = img_amsmapping_tip->ClientToScreen(wxPoint(0, 0)); @@ -1785,12 +1788,34 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_ams_introduce_popup.Position(popup_pos, wxSize(0, 0)); m_ams_introduce_popup.Popup(); }); - - img_amsmapping_tip->Bind(wxEVT_LEAVE_WINDOW, [this](wxMouseEvent& e) { + img_amsmapping_tip->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) { m_ams_introduce_popup.Dismiss(); }); + //backup tips + auto m_ams_backup_tip = new Label(m_amswin, _L("Ams filament backup")); + m_ams_backup_tip->SetFont(::Label::Head_12); + m_ams_backup_tip->SetForegroundColour(wxColour(0x00AE42)); + m_ams_backup_tip->SetBackgroundColour(*wxWHITE); + auto img_ams_backup = new wxStaticBitmap(m_amswin, wxID_ANY, create_scaled_bitmap("automatic_material_renewal", this, 16), wxDefaultPosition, wxSize(FromDIP(16), FromDIP(16)), 0); + img_ams_backup->SetBackgroundColour(*wxWHITE); + + m_sizer_ams_tips->Add( 0, 0, 1, wxEXPAND, 0 ); + m_sizer_ams_tips->Add(img_ams_backup, 0, wxALL, FromDIP(3)); + m_sizer_ams_tips->Add(m_ams_backup_tip, 0, wxTOP, FromDIP(5)); + + m_ams_backup_tip->Bind(wxEVT_ENTER_WINDOW, [this, img_amsmapping_tip](auto& e) {SetCursor(wxCURSOR_HAND);}); + img_ams_backup->Bind(wxEVT_ENTER_WINDOW, [this, img_amsmapping_tip](auto& e) {SetCursor(wxCURSOR_HAND);}); + + m_ams_backup_tip->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW);}); + img_ams_backup->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW);}); + + m_ams_backup_tip->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {post_event(SimpleEvent(EVT_AMS_FILAMENT_BACKUP));}); + img_ams_backup->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {post_event(SimpleEvent(EVT_AMS_FILAMENT_BACKUP));}); + + + //ams cans m_panel_can = new StaticBox(m_amswin, wxID_ANY, wxDefaultPosition, AMS_CANS_SIZE, wxBORDER_NONE); m_panel_can->SetMinSize(AMS_CANS_SIZE); m_panel_can->SetCornerRadius(FromDIP(10)); @@ -1825,20 +1850,6 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_none_ams_panel->SetSizer(sizer_ams_panel_h); m_none_ams_panel->Layout(); - /*wxBoxSizer *sizer_ams_panel = new wxBoxSizer(wxHORIZONTAL); - AMSinfo none_ams = AMSinfo{ "0", std::vector{Caninfo{"0", wxEmptyString, *wxWHITE, AMSCanType::AMS_CAN_TYPE_EMPTY}} }; - auto amscans = new AmsCans(m_none_ams_panel, wxID_ANY, none_ams); - sizer_ams_panel->Add(amscans, 0, wxALL, 0); - sizer_ams_panel->Add(0, 0, 0, wxLEFT, 20); - auto m_tip_none_ams = new wxStaticText(m_none_ams_panel, wxID_ANY, _L("Click the pencil icon to edit the filament."), wxDefaultPosition, wxDefaultSize, 0); - m_tip_none_ams->Wrap(150); - m_tip_none_ams->SetFont(::Label::Body_13); - m_tip_none_ams->SetForegroundColour(AMS_CONTROL_GRAY500); - m_tip_none_ams->SetMinSize({150, -1}); - sizer_ams_panel->Add(m_tip_none_ams, 0, wxALIGN_CENTER, 0); - m_none_ams_panel->SetSizer(sizer_ams_panel); - m_none_ams_panel->Layout();*/ - m_simplebook_ams->AddPage(m_simplebook_cans, wxEmptyString, true); m_simplebook_ams->AddPage(m_none_ams_panel, wxEmptyString, false); @@ -1846,7 +1857,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_panel_can->Layout(); m_sizer_cans->Fit(m_panel_can); - m_sizer_left->Add(m_sizer_ams_tips, 0, wxALIGN_CENTER, 0); + m_sizer_left->Add(m_sizer_ams_tips, 0, wxEXPAND, 0); m_sizer_left->Add(m_panel_can, 1, wxEXPAND, 0); wxBoxSizer *m_sizer_left_bottom = new wxBoxSizer(wxHORIZONTAL); @@ -1888,6 +1899,9 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_button_area = new wxWindow(m_amswin, wxID_ANY); m_button_area->SetBackgroundColour(m_amswin->GetBackgroundColour()); + + + wxBoxSizer *m_sizer_button = new wxBoxSizer(wxVERTICAL); wxBoxSizer *m_sizer_button_area = new wxBoxSizer(wxHORIZONTAL); m_button_extrusion_cali = new Button(m_button_area, _L("Cali")); @@ -1914,7 +1928,9 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_sizer_button_area->Add(m_button_extruder_back, 0, wxLEFT, FromDIP(6)); m_sizer_button_area->Add(m_button_extruder_feed, 0, wxLEFT, FromDIP(6)); - m_button_area->SetSizer(m_sizer_button_area); + m_sizer_button->Add(m_sizer_button_area, 0, 1, wxEXPAND, 0); + + m_button_area->SetSizer(m_sizer_button); m_button_area->Layout(); m_button_area->Fit(); @@ -2002,8 +2018,8 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_ams_introduce_popup.Dismiss(); }); - m_sizer_vams_tips->Add(m_vams_tip, 0, wxALIGN_CENTER, 0); - m_sizer_vams_tips->Add(img_vams_tip, 0, wxALL, FromDIP(2)); + m_sizer_vams_tips->Add(m_vams_tip, 0, wxTOP, FromDIP(5)); + m_sizer_vams_tips->Add(img_vams_tip, 0, wxALL, FromDIP(3)); m_vams_extra_road = new AMSVirtualRoad(m_amswin, wxID_ANY); m_vams_extra_road->SetMinSize(wxSize(m_panel_virtual->GetSize().x + FromDIP(16), -1)); diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index 8b1015b452..6ddb3ee55d 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -627,6 +627,7 @@ wxDECLARE_EVENT(EVT_AMS_EXTRUSION_CALI, wxCommandEvent); wxDECLARE_EVENT(EVT_AMS_LOAD, SimpleEvent); wxDECLARE_EVENT(EVT_AMS_UNLOAD, SimpleEvent); wxDECLARE_EVENT(EVT_AMS_SETTINGS, SimpleEvent); +wxDECLARE_EVENT(EVT_AMS_FILAMENT_BACKUP, SimpleEvent); wxDECLARE_EVENT(EVT_AMS_REFRESH_RFID, wxCommandEvent); wxDECLARE_EVENT(EVT_AMS_ON_SELECTED, wxCommandEvent); wxDECLARE_EVENT(EVT_AMS_ON_FILAMENT_EDIT, wxCommandEvent); diff --git a/src/slic3r/GUI/Widgets/Label.cpp b/src/slic3r/GUI/Widgets/Label.cpp index 43ab5efb2b..8d23033bd7 100644 --- a/src/slic3r/GUI/Widgets/Label.cpp +++ b/src/slic3r/GUI/Widgets/Label.cpp @@ -29,6 +29,7 @@ wxFont Label::Head_15; wxFont Label::Head_14; wxFont Label::Head_13; wxFont Label::Head_12; +wxFont Label::Head_11; wxFont Label::Head_10; wxFont Label::Body_16; @@ -62,6 +63,7 @@ void Label::initSysFont() Head_14 = Label::sysFont(14, true); Head_13 = Label::sysFont(13, true); Head_12 = Label::sysFont(12, true); + Head_11 = Label::sysFont(11, true); Head_10 = Label::sysFont(10, true); Body_16 = Label::sysFont(16, false); diff --git a/src/slic3r/GUI/Widgets/Label.hpp b/src/slic3r/GUI/Widgets/Label.hpp index 950601b925..e13faf5602 100644 --- a/src/slic3r/GUI/Widgets/Label.hpp +++ b/src/slic3r/GUI/Widgets/Label.hpp @@ -33,6 +33,7 @@ public: static wxFont Head_14; static wxFont Head_13; static wxFont Head_12; + static wxFont Head_11; static wxFont Head_10; static wxFont Body_16; From cb2f6dd772e357a47cbef769f8ea92cadf859c82 Mon Sep 17 00:00:00 2001 From: tao wang Date: Fri, 31 Mar 2023 19:34:08 +0800 Subject: [PATCH 183/339] NEW:add network test entry when has network error Change-Id: Ie315191e26148e520d3e8e3e4323fd619efb982a --- src/slic3r/GUI/BBLStatusBar.cpp | 5 ++ src/slic3r/GUI/BBLStatusBar.hpp | 1 + src/slic3r/GUI/BBLStatusBarBind.cpp | 5 ++ src/slic3r/GUI/BBLStatusBarBind.hpp | 1 + src/slic3r/GUI/BBLStatusBarSend.cpp | 64 +++++++++++++++---- src/slic3r/GUI/BBLStatusBarSend.hpp | 3 + src/slic3r/GUI/Jobs/Job.cpp | 5 ++ src/slic3r/GUI/Jobs/Job.hpp | 2 + .../Jobs/NotificationProgressIndicator.cpp | 5 ++ .../Jobs/NotificationProgressIndicator.hpp | 1 + src/slic3r/GUI/Jobs/PrintJob.cpp | 3 +- src/slic3r/GUI/Jobs/ProgressIndicator.hpp | 1 + src/slic3r/GUI/SelectMachine.hpp | 2 +- 13 files changed, 82 insertions(+), 16 deletions(-) diff --git a/src/slic3r/GUI/BBLStatusBar.cpp b/src/slic3r/GUI/BBLStatusBar.cpp index 448b074aa0..612fb887c4 100644 --- a/src/slic3r/GUI/BBLStatusBar.cpp +++ b/src/slic3r/GUI/BBLStatusBar.cpp @@ -128,6 +128,11 @@ void BBLStatusBar::clear_percent() } +void BBLStatusBar::show_networking_test() +{ + +} + void BBLStatusBar::show_progress(bool show) { if (show) { diff --git a/src/slic3r/GUI/BBLStatusBar.hpp b/src/slic3r/GUI/BBLStatusBar.hpp index ec3864193b..04168b8963 100644 --- a/src/slic3r/GUI/BBLStatusBar.hpp +++ b/src/slic3r/GUI/BBLStatusBar.hpp @@ -45,6 +45,7 @@ public: int get_range() const override; void set_range(int = 100) override; void clear_percent() override; + void show_networking_test() override; void show_progress(bool); void start_busy(int = 100); void stop_busy(); diff --git a/src/slic3r/GUI/BBLStatusBarBind.cpp b/src/slic3r/GUI/BBLStatusBarBind.cpp index 2117e60794..f2e1cbf460 100644 --- a/src/slic3r/GUI/BBLStatusBarBind.cpp +++ b/src/slic3r/GUI/BBLStatusBarBind.cpp @@ -97,6 +97,11 @@ void BBLStatusBarBind::clear_percent() } +void BBLStatusBarBind::show_networking_test() +{ + +} + void BBLStatusBarBind::show_progress(bool show) { if (show) { diff --git a/src/slic3r/GUI/BBLStatusBarBind.hpp b/src/slic3r/GUI/BBLStatusBarBind.hpp index e30fff085c..17f5564f1b 100644 --- a/src/slic3r/GUI/BBLStatusBarBind.hpp +++ b/src/slic3r/GUI/BBLStatusBarBind.hpp @@ -48,6 +48,7 @@ public: int get_range() const override; void set_range(int = 100) override; void clear_percent() override; + void show_networking_test() override; void show_progress(bool); void start_busy(int = 100); void stop_busy(); diff --git a/src/slic3r/GUI/BBLStatusBarSend.cpp b/src/slic3r/GUI/BBLStatusBarSend.cpp index e3dd7f9869..327b5d2655 100644 --- a/src/slic3r/GUI/BBLStatusBarSend.cpp +++ b/src/slic3r/GUI/BBLStatusBarSend.cpp @@ -29,23 +29,16 @@ BBLStatusBarSend::BBLStatusBarSend(wxWindow *parent, int id) m_status_text = new wxStaticText(m_self, wxID_ANY, wxEmptyString); m_status_text->SetForegroundColour(wxColour(107, 107, 107)); m_status_text->SetFont(::Label::Body_13); - m_status_text->SetSize(wxSize(m_self->FromDIP(280), m_self->FromDIP(46))); - m_status_text->SetMaxSize(wxSize(m_self->FromDIP(280), m_self->FromDIP(46))); + m_status_text->SetSize(wxSize(m_self->FromDIP(300), m_self->FromDIP(46))); + m_status_text->SetMaxSize(wxSize(m_self->FromDIP(300), m_self->FromDIP(46))); m_prog = new wxGauge(m_self, wxID_ANY, 100, wxDefaultPosition, wxSize(-1, m_self->FromDIP(6)), wxGA_HORIZONTAL); m_prog->SetValue(0); - /* block_left = new wxWindow(m_prog, wxID_ANY, wxPoint(0, 0), wxSize(2, m_prog->GetSize().GetHeight() * 2)); - block_left->SetBackgroundColour(wxColour(255, 255, 255)); - block_right = new wxWindow(m_prog, wxID_ANY, wxPoint(m_prog->GetSize().GetWidth() - 2, 0), wxSize(2, m_prog->GetSize().GetHeight() * 2)); - block_right->SetBackgroundColour(wxColour(255, 255, 255));*/ - - m_sizer_bottom->Add(m_prog, 1, wxALIGN_CENTER, 0); - - StateColor btn_bd_white(std::pair(*wxWHITE, StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); + StateColor btn_bd_white(std::pair(*wxWHITE, StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); m_cancelbutton = new Button(m_self, _L("Cancel")); - m_cancelbutton->SetMinSize(wxSize(m_self->FromDIP(64), m_self->FromDIP(24))); + m_cancelbutton->SetMinSize(wxSize(m_self->FromDIP(58), m_self->FromDIP(22))); m_cancelbutton->SetBackgroundColor(wxColour(255, 255, 255)); m_cancelbutton->SetBorderColor(btn_bd_white); m_cancelbutton->SetCornerRadius(m_self->FromDIP(12)); @@ -60,10 +53,17 @@ BBLStatusBarSend::BBLStatusBarSend(wxWindow *parent, int id) m_stext_percent->SetForegroundColour(wxColour(107, 107, 107)); m_stext_percent->SetFont(::Label::Body_13); m_stext_percent->Wrap(-1); - m_sizer_bottom->Add(m_stext_percent, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, 10); + m_hyperlink = new wxHyperlinkCtrl(m_self, wxID_ANY, _L("Check the status of current system services"), wxT("https://status.bambulab.com/"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE); + m_hyperlink->SetFont(::Label::Body_12); + m_hyperlink->Hide(); + m_sizer_bottom->Add(m_prog, 1, wxALIGN_CENTER, 0); + m_sizer_bottom->Add(m_stext_percent, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, 10); + m_sizer_bottom->Add(m_hyperlink, 0, wxALIGN_CENTER, 10); + m_sizer_bottom->Add(0, 0, 1, wxEXPAND, 0); m_sizer_bottom->Add(m_cancelbutton, 0, wxALIGN_CENTER, 0); + m_sizer_body->Add(m_status_text, 0, 0, 0); m_sizer_body->Add(0, 0, 0, wxTOP, 1); m_sizer_body->Add(m_sizer_bottom, 1, wxEXPAND, 0); @@ -123,6 +123,38 @@ void BBLStatusBarSend::clear_percent() m_cancelbutton->Hide(); } +void BBLStatusBarSend::show_networking_test() +{ + m_prog->Hide(); + m_stext_percent->Hide(); + m_hyperlink->Show(); + + std::string url; + std::string country_code = Slic3r::GUI::wxGetApp().app_config->get_country_code(); + + + if (country_code == "US") { + url = "https://status.bambulab.com"; + } + else if (country_code == "CN") { + url = "https://status.bambulab.cn"; + } + else if (country_code == "ENV_CN_DEV") { + url = "https://status.bambu-lab.com"; + } + else if (country_code == "ENV_CN_QA") { + url = "https://status.bambu-lab.com"; + } + else if (country_code == "ENV_CN_PRE") { + url = "https://status.bambu-lab.com"; + } + else { + url = "https://status.bambu-lab.com"; + } + + m_hyperlink->SetURL(url); +} + void BBLStatusBarSend::show_progress(bool show) { if (show) { @@ -234,7 +266,7 @@ void BBLStatusBarSend::set_status_text(const wxString& txt) //auto txtss = "The printing project is being uploaded... 25%%"; //m_status_text->SetLabelText(txtss); wxString str; - format_text(m_status_text, m_self->FromDIP(280), txt, str); + format_text(m_status_text, m_self->FromDIP(300), txt, str); m_status_text->SetLabelText(str); m_self->Layout(); //if (is_english_text(str)) m_status_text->Wrap(m_self->FromDIP(280)); @@ -281,9 +313,13 @@ bool BBLStatusBarSend::update_status(wxString &msg, bool &was_cancel, int percen void BBLStatusBarSend::reset() { + m_hyperlink->Hide(); + m_prog->Show(); + m_stext_percent->Show(); m_cancelbutton->Show(); - set_status_text(""); m_was_cancelled = false; + + set_status_text(""); set_progress(0); set_percent_text(wxString::Format("%d%%", 0)); } diff --git a/src/slic3r/GUI/BBLStatusBarSend.hpp b/src/slic3r/GUI/BBLStatusBarSend.hpp index 1abe97ee74..10159f436a 100644 --- a/src/slic3r/GUI/BBLStatusBarSend.hpp +++ b/src/slic3r/GUI/BBLStatusBarSend.hpp @@ -8,6 +8,7 @@ #include #include #include +#include #include "Jobs/ProgressIndicator.hpp" #include "Widgets/Label.hpp" @@ -29,6 +30,7 @@ class BBLStatusBarSend : public ProgressIndicator { wxPanel * m_self; // we cheat! It should be the base class but: perl! wxGauge * m_prog; + wxHyperlinkCtrl * m_hyperlink; Button * m_cancelbutton; wxStaticText *m_status_text; wxStaticText *m_stext_percent; @@ -49,6 +51,7 @@ public: int get_range() const override; void set_range(int = 100) override; void clear_percent() override; + void show_networking_test() override; void show_progress(bool); void start_busy(int = 100); void stop_busy(); diff --git a/src/slic3r/GUI/Jobs/Job.cpp b/src/slic3r/GUI/Jobs/Job.cpp index 8224285cf3..bb8ec8c460 100644 --- a/src/slic3r/GUI/Jobs/Job.cpp +++ b/src/slic3r/GUI/Jobs/Job.cpp @@ -35,6 +35,11 @@ void GUI::Job::update_percent_finish() m_progress->clear_percent(); } +void GUI::Job::show_networking_test() +{ + m_progress->show_networking_test(); +} + GUI::Job::Job(std::shared_ptr pri) : m_progress(std::move(pri)) { diff --git a/src/slic3r/GUI/Jobs/Job.hpp b/src/slic3r/GUI/Jobs/Job.hpp index 4041e498f2..97926ba59e 100644 --- a/src/slic3r/GUI/Jobs/Job.hpp +++ b/src/slic3r/GUI/Jobs/Job.hpp @@ -47,6 +47,8 @@ protected: void update_percent_finish(); + void show_networking_test(); + bool was_canceled() const { return m_canceled.load(); } // Launched just before start(), a job can use it to prepare internals diff --git a/src/slic3r/GUI/Jobs/NotificationProgressIndicator.cpp b/src/slic3r/GUI/Jobs/NotificationProgressIndicator.cpp index e9f957e4f3..197347490e 100644 --- a/src/slic3r/GUI/Jobs/NotificationProgressIndicator.cpp +++ b/src/slic3r/GUI/Jobs/NotificationProgressIndicator.cpp @@ -10,6 +10,11 @@ void NotificationProgressIndicator::clear_percent() } +void NotificationProgressIndicator::show_networking_test() +{ + +} + void NotificationProgressIndicator::set_range(int range) { m_nm->progress_indicator_set_range(range); diff --git a/src/slic3r/GUI/Jobs/NotificationProgressIndicator.hpp b/src/slic3r/GUI/Jobs/NotificationProgressIndicator.hpp index 388bfea935..03f88136ae 100644 --- a/src/slic3r/GUI/Jobs/NotificationProgressIndicator.hpp +++ b/src/slic3r/GUI/Jobs/NotificationProgressIndicator.hpp @@ -15,6 +15,7 @@ public: explicit NotificationProgressIndicator(NotificationManager *nm); void clear_percent() override; + void show_networking_test() override; void set_range(int range) override; void set_cancel_callback(CancelFn = CancelFn()) override; void set_progress(int pr) override; diff --git a/src/slic3r/GUI/Jobs/PrintJob.cpp b/src/slic3r/GUI/Jobs/PrintJob.cpp index ea56483f34..c9a36c0baa 100644 --- a/src/slic3r/GUI/Jobs/PrintJob.cpp +++ b/src/slic3r/GUI/Jobs/PrintJob.cpp @@ -384,7 +384,8 @@ void PrintJob::process() } else if (result == BAMBU_NETWORK_ERR_TIMEOUT) { msg_text = timeout_to_upload_str; } else if (result == BAMBU_NETWORK_ERR_INVALID_RESULT) { - msg_text = _L("Failed to send the print job. Please try again."); + msg_text = _L("Failed to send the print job. Please try again."); + this->show_networking_test(); } else if (result == BAMBU_NETWORK_ERR_FTP_UPLOAD_FAILED) { msg_text = _L("Failed to send the print job. Please try again."); } else { diff --git a/src/slic3r/GUI/Jobs/ProgressIndicator.hpp b/src/slic3r/GUI/Jobs/ProgressIndicator.hpp index b029fa762a..66a6db3c0a 100644 --- a/src/slic3r/GUI/Jobs/ProgressIndicator.hpp +++ b/src/slic3r/GUI/Jobs/ProgressIndicator.hpp @@ -18,6 +18,7 @@ public: virtual ~ProgressIndicator() = default; virtual void clear_percent() = 0; + virtual void show_networking_test() = 0; virtual void set_range(int range) = 0; virtual void set_cancel_callback(CancelFn = CancelFn()) = 0; virtual void set_progress(int pr) = 0; diff --git a/src/slic3r/GUI/SelectMachine.hpp b/src/slic3r/GUI/SelectMachine.hpp index 8326abc12e..c94a653af0 100644 --- a/src/slic3r/GUI/SelectMachine.hpp +++ b/src/slic3r/GUI/SelectMachine.hpp @@ -230,7 +230,7 @@ private: }; #define SELECT_MACHINE_DIALOG_BUTTON_SIZE wxSize(FromDIP(68), FromDIP(24)) -#define SELECT_MACHINE_DIALOG_SIMBOOK_SIZE wxSize(FromDIP(350), FromDIP(70)) +#define SELECT_MACHINE_DIALOG_SIMBOOK_SIZE wxSize(FromDIP(360), FromDIP(70)) enum PrintDialogStatus { From 1eb96b697933667ab33d5ea230070f82c73d8791 Mon Sep 17 00:00:00 2001 From: tao wang Date: Sat, 1 Apr 2023 14:43:18 +0800 Subject: [PATCH 184/339] ENH:synchronize the status of AMS and printers Change-Id: Ied38fbee8d78a984df9d7a46d3f69b54fea7fef2 --- src/slic3r/GUI/StatusPanel.cpp | 33 ++++++++++++++----- src/slic3r/GUI/StatusPanel.hpp | 1 + src/slic3r/GUI/Widgets/AMSControl.cpp | 47 +++++++++++++++++++-------- src/slic3r/GUI/Widgets/AMSControl.hpp | 4 +-- 4 files changed, 62 insertions(+), 23 deletions(-) diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index c54cc26c47..476ac6c4c5 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -2042,7 +2042,12 @@ void StatusPanel::update_ams(MachineObject *obj) } } else if (obj->ams_status_sub == 0x05) { if (!obj->is_ams_unload()) { - m_ams_control->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); + if(m_is_load_with_temp){ + m_ams_control->SetFilamentStep(FilamentStep::STEP_CUT_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); + }else{ + m_ams_control->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); + } + } else { m_ams_control->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, FilamentStepType::STEP_TYPE_UNLOAD); @@ -2056,7 +2061,11 @@ void StatusPanel::update_ams(MachineObject *obj) } } else if (obj->ams_status_sub == 0x07) { if (!obj->is_ams_unload()) { - m_ams_control->SetFilamentStep(FilamentStep::STEP_PURGE_OLD_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); + if (m_is_load_with_temp) { + m_ams_control->SetFilamentStep(FilamentStep::STEP_PULL_CURR_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); + }else{ + m_ams_control->SetFilamentStep(FilamentStep::STEP_PURGE_OLD_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); + } } else { m_ams_control->SetFilamentStep(FilamentStep::STEP_PURGE_OLD_FILAMENT, FilamentStepType::STEP_TYPE_UNLOAD); @@ -2144,23 +2153,23 @@ void StatusPanel::update_ams_control_state(bool is_support_virtual_tray, bool is enable[ACTION_BTN_UNLOAD] = false; } - /*if (obj->ams_status_main == AMS_STATUS_MAIN_FILAMENT_CHANGE) { + if (obj->ams_status_main == AMS_STATUS_MAIN_FILAMENT_CHANGE) { enable[ACTION_BTN_LOAD] = false; enable[ACTION_BTN_UNLOAD] = false; - }*/ + } // select current if (is_curr_tray_selected) { enable[ACTION_BTN_LOAD] = false; } - /*if (!obj->is_filament_at_extruder()) { + if (!obj->is_filament_at_extruder()) { enable[ACTION_BTN_UNLOAD] = false; } - if (obj->m_tray_now == "255") { - enable[ACTION_BTN_UNLOAD] = false; - }*/ +// if (obj->m_tray_now == "255") { +// enable[ACTION_BTN_UNLOAD] = false; +// } m_ams_control->SetActionState(enable); } @@ -2587,6 +2596,14 @@ void StatusPanel::on_ams_load_curr() std::string curr_ams_id = m_ams_control->GetCurentAms(); std::string curr_can_id = m_ams_control->GetCurrentCan(curr_ams_id); + m_ams_control->UpdateStepCtrl(obj->is_filament_at_extruder()); + if(!obj->is_filament_at_extruder()){ + m_is_load_with_temp = true; + }else{ + m_is_load_with_temp = false; + } + + //virtual tray if (curr_ams_id.compare(std::to_string(VIRTUAL_TRAY_ID)) == 0) { /*if (con_load_dlg == nullptr) { diff --git a/src/slic3r/GUI/StatusPanel.hpp b/src/slic3r/GUI/StatusPanel.hpp index 7150c8653a..01b34d5a1f 100644 --- a/src/slic3r/GUI/StatusPanel.hpp +++ b/src/slic3r/GUI/StatusPanel.hpp @@ -290,6 +290,7 @@ protected: int m_last_timelapse = -1; int m_last_extrusion = -1; int m_last_vcamera = -1; + bool m_is_load_with_temp = false; wxWebRequest web_request; bool bed_temp_input = false; diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index 74de27c1cc..32bfcf3421 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -10,6 +10,7 @@ namespace Slic3r { namespace GUI { static const int LOAD_STEP_COUNT = 5; +static const int LOAD_WITH_TEMP_STEP_COUNT = 3; static const int UNLOAD_STEP_COUNT = 3; static const int VT_LOAD_STEP_COUNT = 4; @@ -2197,7 +2198,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons AddPage(m_amswin, wxEmptyString, false); AddPage(m_simplebook_calibration, wxEmptyString, false); - UpdateStepCtrl(); + UpdateStepCtrl(false); m_button_extrusion_cali->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AMSControl::on_extrusion_cali), NULL, this); m_button_extruder_feed->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AMSControl::on_filament_load), NULL, this); @@ -2403,15 +2404,35 @@ void AMSControl::msw_rescale() Refresh(); } -void AMSControl::UpdateStepCtrl() +void AMSControl::UpdateStepCtrl(bool is_extrusion) { - wxString FILAMENT_LOAD_STEP_STRING[LOAD_STEP_COUNT] = { - _L("Heat the nozzle"), - _L("Cut filament"), - _L("Pull back current filament"), - _L("Push new filament into extruder"), - _L("Purge old filament"), - }; + m_filament_load_step->DeleteAllItems(); + m_filament_unload_step->DeleteAllItems(); + m_filament_vt_load_step->DeleteAllItems(); + + if(is_extrusion){ + wxString FILAMENT_LOAD_STEP_STRING[LOAD_STEP_COUNT] = { + _L("Heat the nozzle"), + _L("Cut filament"), + _L("Pull back current filament"), + _L("Push new filament into extruder"), + _L("Purge old filament"), + }; + + for (int i = 0; i < LOAD_STEP_COUNT; i++) { + m_filament_load_step->AppendItem(FILAMENT_LOAD_STEP_STRING[i]); + } + }else{ + wxString FILAMENT_LOAD_STEP_STRING[LOAD_WITH_TEMP_STEP_COUNT] = { + _L("Heat the nozzle"), + _L("Push new filament into extruder"), + _L("Purge old filament"), + }; + + for (int i = 0; i < LOAD_WITH_TEMP_STEP_COUNT; i++) { + m_filament_load_step->AppendItem(FILAMENT_LOAD_STEP_STRING[i]); + } + } wxString VT_TRAY_LOAD_STEP_STRING[VT_LOAD_STEP_COUNT] = { _L("Heat the nozzle"), @@ -2426,9 +2447,9 @@ void AMSControl::UpdateStepCtrl() _L("Pull back current filament") }; - for (int i = 0; i < LOAD_STEP_COUNT; i++) { - m_filament_load_step->AppendItem(FILAMENT_LOAD_STEP_STRING[i]); - } +// for (int i = 0; i < LOAD_STEP_COUNT; i++) { +// m_filament_load_step->AppendItem(FILAMENT_LOAD_STEP_STRING[i]); +// } for (int i = 0; i < UNLOAD_STEP_COUNT; i++) { m_filament_unload_step->AppendItem(FILAMENT_UNLOAD_STEP_STRING[i]); } @@ -2687,7 +2708,7 @@ void AMSControl::SwitchAms(std::string ams_id) } } -void AMSControl::SetFilamentStep(int item_idx, FilamentStepType f_type) +void AMSControl::SetFilamentStep(int item_idx, FilamentStepType f_type, bool is_extrusion_exist) { if (item_idx == FilamentStep::STEP_IDLE) { m_simplebook_right->SetSelection(0); diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index 6ddb3ee55d..6cd71b52e9 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -588,11 +588,11 @@ public: void PlayRridLoading(wxString amsid, wxString canid); void StopRridLoading(wxString amsid, wxString canid); - void SetFilamentStep(int item_idx, FilamentStepType f_type); + void SetFilamentStep(int item_idx, FilamentStepType f_type, bool is_extrusion_exist = false); void ShowFilamentTip(bool hasams = true); void SetHumidity(std::string amsid, int humidity); - void UpdateStepCtrl(); + void UpdateStepCtrl(bool is_extrusion_exist); void CreateAms(); void UpdateAms(std::vector info, bool keep_selection = true, bool has_extrusion_cali = true, bool is_reset = false); void AddAms(AMSinfo info, bool refresh = true); From 483fc9f147666b8199e1f65401f410f122777c76 Mon Sep 17 00:00:00 2001 From: gerrit Date: Mon, 13 Mar 2023 08:32:26 +0800 Subject: [PATCH 185/339] ci: update network module based on commit be95fa8 Change-Id: I3ba0ac192eb9ee9e6fe1e1deff2d18c770ae63a3 (cherry picked from commit a38f0804ab1fa1131e7955f4c13c27972d36b93e) --- src/slic3r/Utils/bambu_networking.hpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/slic3r/Utils/bambu_networking.hpp b/src/slic3r/Utils/bambu_networking.hpp index 6ae7ad8827..646988d502 100644 --- a/src/slic3r/Utils/bambu_networking.hpp +++ b/src/slic3r/Utils/bambu_networking.hpp @@ -41,7 +41,8 @@ namespace BBL { #define BAMBU_NETWORK_LIBRARY "bambu_networking" #define BAMBU_NETWORK_AGENT_NAME "bambu_network_agent" -#define BAMBU_NETWORK_AGENT_VERSION "01.05.00.08" +#define BAMBU_NETWORK_AGENT_VERSION "01.05.05.01" + //iot preset type strings #define IOT_PRINTER_TYPE_STRING "printer" @@ -143,6 +144,8 @@ struct PrintParams { bool task_layer_inspect; /* first layer inspection of task */ bool task_record_timelapse; /* record timelapse of task */ bool task_use_ams; + std::string task_bed_type; + std::string extra_options; }; struct PublishParams { From 32b69529504689bc71c62558c22041b2864fa872 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Fri, 31 Mar 2023 09:14:22 +0800 Subject: [PATCH 186/339] FIX: [STUDIO-2596] import preset missing base_id Change-Id: I2725906da26a471aef66eb8f29bf156ad00b1ec0 --- src/libslic3r/PresetBundle.cpp | 4 +++- src/slic3r/GUI/Preferences.cpp | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index d875eaad3f..c1f859b5c1 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -666,9 +666,10 @@ PresetsConfigSubstitutions PresetBundle::import_presets(std::vector DynamicPrintConfig new_config; Preset * inherit_preset = nullptr; ConfigOption *inherits_config = config.option(BBL_JSON_KEY_INHERITS); + std::string inherits_value; if (inherits_config) { ConfigOptionString *option_str = dynamic_cast(inherits_config); - std::string inherits_value = option_str->value; + inherits_value = option_str->value; inherit_preset = collection->find_preset(inherits_value, false, true); } if (inherit_preset) { @@ -685,6 +686,7 @@ PresetsConfigSubstitutions PresetBundle::import_presets(std::vector Preset &preset = collection->load_preset(collection->path_from_name(name), name, std::move(new_config), false); preset.is_external = true; preset.version = *version; + inherit_preset = collection->find_preset(inherits_value, false, true); // pointer maybe wrong after insert, redo find if (inherit_preset) preset.base_id = inherit_preset->setting_id; Preset::normalize(preset.config); diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index dd7ab427e6..a7e6142368 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -920,7 +920,7 @@ wxWindow* PreferencesDialog::create_general_page() auto title_presets = create_item_title(_L("Presets"), page, _L("Presets")); 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("Auto sync system presets(Printer/Filament/Process)"), page, _L("System Sync"), 50, "sync_system_preset"); + auto item_system_sync = create_item_checkbox(_L("Update built-in Presets automatically."), page, _L("System Sync"), 50, "sync_system_preset"); auto item_save_presets = create_item_button(_L("Clear my choice on the unsaved presets."), _L("Clear"), page, _L("Clear my choice on the unsaved presets."), []() { wxGetApp().app_config->set("save_preset_choise", ""); }); From 5ec2e91b9d369cea7b98aed35e4fdcb6013460fb Mon Sep 17 00:00:00 2001 From: gerrit Date: Mon, 3 Apr 2023 11:18:15 +0800 Subject: [PATCH 187/339] ci: update build version to 01.05.05.64 Change-Id: Ib8a7c5ac4e6c71568534c75292a287f31e48dec2 --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index 9d84c3be6a..5e1382516d 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.05.05.63") +set(SLIC3R_VERSION "01.05.05.64") From 31667d04b0320985751679af6d410c4e68726be3 Mon Sep 17 00:00:00 2001 From: "zorro.zhang" Date: Mon, 20 Mar 2023 16:12:35 +0800 Subject: [PATCH 188/339] ENH: Optimize Dialog Position Change-Id: I6795d6d0f979ff379b8c4f1f010eeaba6aa339b1 (cherry picked from commit 2ce1e9a9f3141bc2149a4d1f62656f1a3d57b26e) --- src/slic3r/GUI/WebGuideDialog.cpp | 9 ++++----- src/slic3r/GUI/WebUserLoginDialog.cpp | 5 ++++- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/slic3r/GUI/WebGuideDialog.cpp b/src/slic3r/GUI/WebGuideDialog.cpp index 1ae709bcc5..0006c0bef4 100644 --- a/src/slic3r/GUI/WebGuideDialog.cpp +++ b/src/slic3r/GUI/WebGuideDialog.cpp @@ -75,11 +75,10 @@ GuideFrame::GuideFrame(GUI_App *pGUI, long style) wxSize pSize = FromDIP(wxSize(820, 660)); SetSize(pSize); - CenterOnParent(); - //int screenheight = wxSystemSettings::GetMetric(wxSYS_SCREEN_Y, NULL); - //int screenwidth = wxSystemSettings::GetMetric(wxSYS_SCREEN_X, NULL); - //int MaxY = (screenheight - pSize.y) > 0 ? (screenheight - pSize.y) / 2 : 0; - //MoveWindow(this->m_hWnd, (screenwidth - pSize.x) / 2, MaxY, pSize.x, pSize.y, TRUE); + int screenheight = wxSystemSettings::GetMetric(wxSYS_SCREEN_Y, NULL); + int screenwidth = wxSystemSettings::GetMetric(wxSYS_SCREEN_X, NULL); + int MaxY = (screenheight - pSize.y) > 0 ? (screenheight - pSize.y) / 2 : 0; + MoveWindow(this->m_hWnd, (screenwidth - pSize.x) / 2, MaxY, pSize.x, pSize.y, TRUE); #ifdef __WXMSW__ this->Bind(wxEVT_CHAR_HOOK, [this](wxKeyEvent& e) { if ((m_page == BBL_FILAMENT_ONLY || m_page == BBL_MODELS_ONLY) && e.GetKeyCode() == WXK_ESCAPE) { diff --git a/src/slic3r/GUI/WebUserLoginDialog.cpp b/src/slic3r/GUI/WebUserLoginDialog.cpp index 1c324b8d3b..9162ac1ea1 100644 --- a/src/slic3r/GUI/WebUserLoginDialog.cpp +++ b/src/slic3r/GUI/WebUserLoginDialog.cpp @@ -109,7 +109,10 @@ ZUserLogin::ZUserLogin() : wxDialog((wxWindow *) (wxGetApp().mainframe), wxID_AN wxSize pSize = FromDIP(wxSize(650, 840)); SetSize(pSize); - CenterOnParent(); + int screenheight = wxSystemSettings::GetMetric(wxSYS_SCREEN_Y, NULL); + int screenwidth = wxSystemSettings::GetMetric(wxSYS_SCREEN_X, NULL); + int MaxY = (screenheight - pSize.y) > 0 ? (screenheight - pSize.y) / 2 : 0; + MoveWindow(this->m_hWnd, (screenwidth - pSize.x) / 2, MaxY, pSize.x, pSize.y, TRUE); //Param m_AutotestToken = ""; From 14c63c9e9ea052bd86ecbd1e02d6358839c564c4 Mon Sep 17 00:00:00 2001 From: tao wang Date: Mon, 3 Apr 2023 11:05:47 +0800 Subject: [PATCH 189/339] NEW:studio support for Italian Change-Id: I79aeffee01decd915c5f0719e0fc58a24ce01780 --- src/slic3r/GUI/GUI_App.cpp | 3 ++- src/slic3r/GUI/Preferences.cpp | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 03dc392335..340e17bce0 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -4841,7 +4841,8 @@ bool GUI_App::load_language(wxString language, bool initial) wxLANGUAGE_SWEDISH, wxLANGUAGE_DUTCH, wxLANGUAGE_HUNGARIAN, - wxLANGUAGE_JAPANESE + wxLANGUAGE_JAPANESE, + wxLANGUAGE_ITALIAN }; std::string cur_language = app_config->get("language"); if (cur_language != "") { diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index a7e6142368..6a9a3e22b4 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -133,6 +133,9 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox( else if (vlist[i] == wxLocale::GetLanguageInfo(wxLANGUAGE_JAPANESE)) { language_name = wxString::FromUTF8("\xE6\x97\xA5\xE6\x9C\xAC\xE8\xAA\x9E"); } + else if (vlist[i] == wxLocale::GetLanguageInfo(wxLANGUAGE_ITALIAN)) { + language_name = wxString::FromUTF8("\x69\x74\x61\x6c\x69\x61\x6e\x6f"); + } if (app_config->get(param) == vlist[i]->CanonicalName) { m_current_language_selected = i; @@ -886,7 +889,8 @@ wxWindow* PreferencesDialog::create_general_page() wxLANGUAGE_SWEDISH, wxLANGUAGE_DUTCH, wxLANGUAGE_HUNGARIAN, - wxLANGUAGE_JAPANESE + wxLANGUAGE_JAPANESE, + wxLANGUAGE_ITALIAN }; auto translations = wxTranslations::Get()->GetAvailableTranslations(SLIC3R_APP_KEY); From 8dabc0ce9730a982e1e9716a567f81e48313213b Mon Sep 17 00:00:00 2001 From: tao wang Date: Mon, 3 Apr 2023 16:57:00 +0800 Subject: [PATCH 190/339] ENH:add protection when Unable to get filtration supplier information Change-Id: I64481ace6948cfab67bd864c2925cdce7dcae034 --- src/slic3r/GUI/SelectMachine.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 57d5fcd874..fec4104ee3 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -3109,7 +3109,11 @@ void SelectMachineDialog::set_default() std::string filament_type = iter->config.get_filament_type(display_filament_type); display_materials.push_back(display_filament_type); materials.push_back(filament_type); - brands.push_back(iter->vendor->name); + + if (iter->vendor && !iter->vendor->name.empty()) + brands.push_back(iter->vendor->name); + else + brands.push_back(""); } } } From fddd101685aac55398a801acf418aefc4a744538 Mon Sep 17 00:00:00 2001 From: tao wang Date: Mon, 3 Apr 2023 15:54:48 +0800 Subject: [PATCH 191/339] FIX:fixed the publish button will be hidden after switch languages Change-Id: I2f618d8440ebf7a00af6e7ad2bcda63746e04eef --- src/slic3r/GUI/GUI_App.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 340e17bce0..ae3aa46a82 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -3256,6 +3256,21 @@ void GUI_App::recreate_GUI(const wxString& msg_name) // config_wizard_startup(true); // }); + //show publish button + if (m_agent->is_user_login() && mainframe) { + int identifier; + int result = m_agent->get_user_info(&identifier); + auto publish_identifier = identifier & 1; + +#ifdef __WINDOWS__ + if (result == 0 && publish_identifier >= 0) { + mainframe->m_topbar->show_publish_button(publish_identifier == 0 ? false : true); + } +#else + mainframe->show_publish_button(publish_identifier == 0 ? false : true); +#endif + } + m_is_recreating_gui = false; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "recreate_GUI exit"; From 02fbd881506a79d854ab1ac8c10d02cd5a15b252 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Mon, 3 Apr 2023 16:53:10 +0800 Subject: [PATCH 192/339] ENH: rename tracked crash log Change-Id: I60d1c1af873c60776334f26503e22230bb541e0a --- src/slic3r/GUI/GUI_App.cpp | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index ae3aa46a82..37a68ef988 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1141,22 +1141,26 @@ void GUI_App::post_init() { std::string file_name = iter->path().stem().string(); if (boost::starts_with(file_name, "crash")) { - std::ifstream ifs(iter->path().string(), ios::in); - std::stringstream data; - data << ifs.rdbuf(); - ifs.close(); + if (file_name.find("done") == std::string::npos) { + std::ifstream ifs(iter->path().string(), ios::in); + std::stringstream data; + data << ifs.rdbuf(); + ifs.close(); - NetworkAgent* agent = wxGetApp().getAgent(); - json j; - j["time"] = file_name.substr(file_name.find("crash") + strlen("crash") + 1); - j["verion"] = std::string(SLIC3R_VERSION); - j["content"] = decode_path(data.str().c_str()); - try { - if (agent) { - agent->track_event("studio_crash", j.dump()); } - } catch (...) {} - std::string new_file_name = file_name.insert(0, "_done_"); - boost::filesystem::rename(iter->path(), iter->path().parent_path() / boost::filesystem::path(new_file_name + iter->path().extension().string())); + NetworkAgent* agent = wxGetApp().getAgent(); + json j; + j["time"] = file_name.substr(file_name.find("crash") + strlen("crash") + 1); + j["verion"] = std::string(SLIC3R_VERSION); + j["content"] = decode_path(data.str().c_str()); + try { + if (agent) { + agent->track_event("studio_crash", j.dump()); + } + } + catch (...) {} + std::string new_file_name = file_name.append("_done"); + boost::filesystem::rename(iter->path(), iter->path().parent_path() / boost::filesystem::path(new_file_name + iter->path().extension().string())); + } } } } From fa1be6465203e2d951ea30991b3e50e1be2296b3 Mon Sep 17 00:00:00 2001 From: gerrit Date: Mon, 3 Apr 2023 18:08:29 +0800 Subject: [PATCH 193/339] ci: update build version to 01.05.05.65 Change-Id: Ia1998a60f0f8970ff6797a2c18136785f2a6b037 --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index 5e1382516d..624a30fe85 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.05.05.64") +set(SLIC3R_VERSION "01.05.05.65") From 74d558e612684479dd29f90a8823dfe569ac148e Mon Sep 17 00:00:00 2001 From: Arthur Date: Mon, 3 Apr 2023 18:04:03 +0800 Subject: [PATCH 194/339] FIX: tree support crashes when lower_layer is null Change-Id: I942bdf1dfc253be5ebf659274f230290c5260d63 (cherry picked from commit 05b033cd0dfacadab9ea3e725e364a6156d068f2) --- src/libslic3r/TreeSupport.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libslic3r/TreeSupport.cpp b/src/libslic3r/TreeSupport.cpp index c60cc73356..ff1065e6ad 100644 --- a/src/libslic3r/TreeSupport.cpp +++ b/src/libslic3r/TreeSupport.cpp @@ -1146,7 +1146,7 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) ts_layer->overhang_areas = diff_ex(ts_layer->overhang_areas, offset_ex(blocker, scale_(radius_sample_resolution))); } - if (max_bridge_length > 0 && ts_layer->overhang_areas.size() > 0) { + if (max_bridge_length > 0 && ts_layer->overhang_areas.size() > 0 && lower_layer) { // do not break bridge for normal part in TreeHybrid bool break_bridge = !(support_style == smsTreeHybrid && area(ts_layer->overhang_areas) > m_support_params.thresh_big_overhang); m_object->remove_bridges_from_contacts(lower_layer, layer, extrusion_width_scaled, &ts_layer->overhang_areas, max_bridge_length, break_bridge); From 69dcbef2907f5f38548369fd5b3b44e0352c00a3 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Mon, 3 Apr 2023 18:08:26 +0800 Subject: [PATCH 195/339] FIX: cannot save project after adding custom gcode tick (STUDIO-2451) Change-Id: I8e787d7bd8eebd793a6e070a18f36afda57b0ecf --- src/slic3r/GUI/Plater.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 0035201787..09b3bdc25a 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -2451,6 +2451,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) plate->update_slice_result_valid_state(false); } } + set_plater_dirty(true); preview->on_tick_changed(tick_event_type); From 34ec55db8027d431a320b0ef86df771d5af34d67 Mon Sep 17 00:00:00 2001 From: "yifan.wu" Date: Mon, 3 Apr 2023 21:29:27 +0800 Subject: [PATCH 196/339] ENH: optimize thumbnail effect 1. enlarge objects in thumbnail 2. restore the background color to the light color Signed-off-by: yifan.wu Change-Id: I0829f93f619c48467c91d55267cdaf5bf43c5beb --- src/slic3r/GUI/GLCanvas3D.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index f7dc0f4b4e..3ee4b12ec5 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -5464,12 +5464,12 @@ void GLCanvas3D::render_thumbnail_internal(ThumbnailData& thumbnail_data, const double width = volumes_box.max.x() - volumes_box.min.x(); double depth = volumes_box.max.y() - volumes_box.min.y(); double height = volumes_box.max.z() - volumes_box.min.z(); - volumes_box.max.x() = volumes_box.max.x() + width * 0.25f; - volumes_box.min.x() = volumes_box.min.x() - width * 0.25f; - volumes_box.max.y() = volumes_box.max.y() + depth * 0.25f; - volumes_box.min.y() = volumes_box.min.y() - depth * 0.25f; - volumes_box.max.z() = volumes_box.max.z() + height * 0.25f; - volumes_box.min.z() = volumes_box.min.z() - height * 0.25f; + volumes_box.max.x() = volumes_box.max.x() + width * 0.1f; + volumes_box.min.x() = volumes_box.min.x() - width * 0.1f; + volumes_box.max.y() = volumes_box.max.y() + depth * 0.1f; + volumes_box.min.y() = volumes_box.min.y() - depth * 0.1f; + volumes_box.max.z() = volumes_box.max.z() + height * 0.1f; + volumes_box.min.z() = volumes_box.min.z() - height * 0.1f; Camera camera; camera.set_type(camera_type); @@ -5525,7 +5525,8 @@ void GLCanvas3D::render_thumbnail_internal(ThumbnailData& thumbnail_data, const //glsafe(::glClearColor(0.906f, 0.906f, 0.906f, 1.0f)); //glsafe(::glClearColor(0.50f, 0.5f, 0.5f, 1.0f)); //glsafe(::glClearColor(0.121568f, 0.121568f, 0.121568f, 1.0f)); - glsafe(::glClearColor(0.17647f, 0.17647f, 0.17647f, 1.0f)); + //glsafe(::glClearColor(0.17647f, 0.17647f, 0.17647f, 1.0f)); + glsafe(::glClearColor(0.906f, 0.906f, 0.906f, 1.0f)); //glsafe(::glClearColor(0.37647f, 0.37647f, 0.37647f, 0.5f)); too lite //glsafe(::glClearColor(0.23529f, 0.26666f, 0.2745f, 1.0f)); } From f3aa76e4c255dc0228d0279244b032ed5adc8049 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Sun, 12 Mar 2023 18:02:33 +0800 Subject: [PATCH 197/339] NEW: set bed type when printing Change-Id: I94b32e6264ecae4a8a6ca20eed0d08d13c6e391d Signed-off-by: Stone Li --- src/slic3r/GUI/Jobs/PrintJob.cpp | 5 +++++ src/slic3r/GUI/PartPlate.cpp | 8 +++++++- src/slic3r/GUI/PartPlate.hpp | 2 +- src/slic3r/GUI/SelectMachine.cpp | 4 +++- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/Jobs/PrintJob.cpp b/src/slic3r/GUI/Jobs/PrintJob.cpp index c9a36c0baa..7bc7937268 100644 --- a/src/slic3r/GUI/Jobs/PrintJob.cpp +++ b/src/slic3r/GUI/Jobs/PrintJob.cpp @@ -157,6 +157,10 @@ void PrintJob::process() else curr_plate_idx = m_plater->get_partplate_list().get_curr_plate_index() + 1; + PartPlate* curr_plate = m_plater->get_partplate_list().get_curr_plate(); + if (curr_plate) { + this->task_bed_type = bed_type_to_gcode_string(curr_plate->get_bed_type(true)); + } BBL::PrintParams params; @@ -200,6 +204,7 @@ void PrintJob::process() params.ams_mapping_info = this->task_ams_mapping_info; params.connection_type = this->connection_type; params.task_use_ams = this->task_use_ams; + params.task_bed_type = this->task_bed_type; if (wxGetApp().model().model_info && wxGetApp().model().model_info.get()) { ModelInfo* model_info = wxGetApp().model().model_info.get(); auto origin_profile_id = model_info->metadata_items.find(BBL_DESIGNER_PROFILE_ID_TAG); diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 77b42dad80..e11662d9d6 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -133,7 +133,7 @@ void PartPlate::init() m_print = nullptr; } -BedType PartPlate::get_bed_type() const +BedType PartPlate::get_bed_type(bool load_from_project) const { std::string bed_type_key = "curr_bed_type"; @@ -144,6 +144,12 @@ BedType PartPlate::get_bed_type() const return bed_type; } + if (!load_from_project || !wxGetApp().preset_bundle) + return btDefault; + + DynamicConfig& proj_cfg = wxGetApp().preset_bundle->project_config; + if (proj_cfg.has(bed_type_key)) + return proj_cfg.opt_enum(bed_type_key); return btDefault; } diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index 0046a29187..cfb19d00aa 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -210,7 +210,7 @@ public: //clear alll the instances in plate void clear(bool clear_sliced_result = true); - BedType get_bed_type() const; + BedType get_bed_type(bool load_from_project = false) const; void set_bed_type(BedType bed_type); void reset_bed_type(); DynamicPrintConfig* config() { return &m_config; } diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index fec4104ee3..ab52261e6c 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -415,9 +415,11 @@ SelectMachinePopup::SelectMachinePopup(wxWindow *parent) #if !BBL_RELEASE_TO_PUBLIC && defined(__WINDOWS__) m_sizer_search_bar = new wxBoxSizer(wxVERTICAL); - m_search_bar = new wxSearchCtrl( this, wxID_ANY, _L("Search"), wxDefaultPosition, wxDefaultSize, 0 ); + m_search_bar = new wxSearchCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_search_bar->ShowSearchButton( true ); m_search_bar->ShowCancelButton( false ); + m_search_bar->SetHint(_L("Search")); + m_search_bar->SetDescriptiveText(_L("Search")); m_sizer_search_bar->Add( m_search_bar, 1, wxALL| wxEXPAND, 1 ); m_sizer_main->Add(m_sizer_search_bar, 0, wxALL | wxEXPAND, FromDIP(2)); m_search_bar->Bind( wxEVT_COMMAND_TEXT_UPDATED, &SelectMachinePopup::update_machine_list, this ); From b30644c84d4d180f6ea99b59986895aff50a22ba Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Mon, 3 Apr 2023 21:37:03 +0800 Subject: [PATCH 198/339] ENH: CLI: add the cache logic of brim data 1. cache the first layer group cache data for brim 2. fix some crash under debug mode when app exits Change-Id: I81d716564af414353e9dfeed42e5f4eef08b2d6f (cherry picked from commit a6ecdaed6f63f1c5c41fd343f72165fe27fda9d3) --- src/BambuStudio.cpp | 374 ++++++++++++++++++----------------- src/libslic3r/Print.cpp | 107 +++++++++- src/slic3r/GUI/PartPlate.cpp | 7 +- 3 files changed, 294 insertions(+), 194 deletions(-) diff --git a/src/BambuStudio.cpp b/src/BambuStudio.cpp index 5f11dd9acf..822d5f3ded 100644 --- a/src/BambuStudio.cpp +++ b/src/BambuStudio.cpp @@ -374,18 +374,18 @@ int CLI::run(int argc, char **argv) /*BOOST_LOG_TRIVIAL(info) << "begin to setup params, argc=" << argc << std::endl; for (int index=0; index < argc; index++) BOOST_LOG_TRIVIAL(info) << "index="<< index <<", arg is "<< argv[index] <setup(debug_argc, debug_argv))*/ if (!this->setup(argc, argv)) @@ -2179,7 +2179,6 @@ int CLI::run(int argc, char **argv) if (export_to_3mf) { //BBS: export as bbl 3mf - Slic3r::GUI::OpenGLManager opengl_mgr; std::vector thumbnails, top_thumbnails, pick_thumbnails; std::vector plate_bboxes; PlateDataPtrs plate_data_list; @@ -2312,195 +2311,200 @@ int CLI::run(int argc, char **argv) else glfwMakeContextCurrent(window); } - bool opengl_valid = opengl_mgr.init_gl(); - if (!opengl_valid) { - BOOST_LOG_TRIVIAL(error) << "init opengl failed! skip thumbnail generating" << std::endl; - } - else { - BOOST_LOG_TRIVIAL(info) << "glewInit Sucess." << std::endl; - GLVolumeCollection glvolume_collection; - Model &model = m_models[0]; - int extruder_id = 1; - for (unsigned int obj_idx = 0; obj_idx < (unsigned int)model.objects.size(); ++ obj_idx) { - const ModelObject &model_object = *model.objects[obj_idx]; - const ConfigOption* option = model_object.config.option("extruder"); - if (option) - extruder_id = (dynamic_cast(option))->getInt(); - for (int volume_idx = 0; volume_idx < (int)model_object.volumes.size(); ++ volume_idx) { - const ModelVolume &model_volume = *model_object.volumes[volume_idx]; - option = model_volume.config.option("extruder"); - if (option) extruder_id = (dynamic_cast(option))->getInt(); - //if (!model_volume.is_model_part()) - // continue; - for (int instance_idx = 0; instance_idx < (int)model_object.instances.size(); ++ instance_idx) { - const ModelInstance &model_instance = *model_object.instances[instance_idx]; - glvolume_collection.load_object_volume(&model_object, obj_idx, volume_idx, instance_idx, "volume", true, false, true); - //glvolume_collection.volumes.back()->geometry_id = key.geometry_id; - std::string color = filament_color?filament_color->get_at(extruder_id - 1):"#00FF00"; - unsigned char rgb_color[3] = {}; - Slic3r::GUI::BitmapCache::parse_color(color, rgb_color); - glvolume_collection.volumes.back()->set_render_color( float(rgb_color[0]) / 255.f, float(rgb_color[1]) / 255.f, float(rgb_color[2]) / 255.f, 1.f); - - std::array new_color; - new_color[0] = float(rgb_color[0]) / 255.f; - new_color[1] = float(rgb_color[1]) / 255.f; - new_color[2] = float(rgb_color[2]) / 255.f; - new_color[3] = 1.f; - glvolume_collection.volumes.back()->set_color(new_color); - glvolume_collection.volumes.back()->printable = model_instance.printable; - } - } - } - - ThumbnailsParams thumbnail_params; - GLShaderProgram* shader = opengl_mgr.get_shader("gouraud_light"); - if (!shader) { - BOOST_LOG_TRIVIAL(error) << boost::format("can not get shader for rendering thumbnail"); + //opengl manager related logic + { + Slic3r::GUI::OpenGLManager opengl_mgr; + bool opengl_valid = opengl_mgr.init_gl(); + if (!opengl_valid) { + BOOST_LOG_TRIVIAL(error) << "init opengl failed! skip thumbnail generating" << std::endl; } else { - for (int i = 0; i < partplate_list.get_plate_count(); i++) { - Slic3r::GUI::PartPlate *part_plate = partplate_list.get_plate(i); - PlateData *plate_data = plate_data_list[i]; - if (plate_data->plate_thumbnail.is_valid()) { - if ((plate_to_slice != 0) && (plate_to_slice != (i + 1))) { - BOOST_LOG_TRIVIAL(info) << boost::format("Line %1%: regenerate thumbnail, reset plate %2%'s thumbnail.")%__LINE__%(i+1); - plate_data->plate_thumbnail.reset(); - } - else - BOOST_LOG_TRIVIAL(info) << boost::format("plate %1% has a valid thumbnail, width %2%, height %3%, directly using it")%(i+1) %plate_data->plate_thumbnail.width %plate_data->plate_thumbnail.height; - } - else if (!plate_data->thumbnail_file.empty() && (boost::filesystem::exists(plate_data->thumbnail_file))) - { - if ((plate_to_slice != 0) && (plate_to_slice != (i + 1))) { - BOOST_LOG_TRIVIAL(info) << boost::format("Line %1%: regenerate thumbnail, clear plate %2%'s thumbnail file path to empty.")%__LINE__%(i+1); - plate_data->thumbnail_file.clear(); - } - else - BOOST_LOG_TRIVIAL(info) << boost::format("plate %1% has a valid thumbnail %2% extracted from 3mf, directly using it")%(i+1) %plate_data->thumbnail_file; - } - else { - ThumbnailData* thumbnail_data = &plate_data->plate_thumbnail; + BOOST_LOG_TRIVIAL(info) << "glewInit Sucess." << std::endl; + GLVolumeCollection glvolume_collection; + Model &model = m_models[0]; + int extruder_id = 1; + for (unsigned int obj_idx = 0; obj_idx < (unsigned int)model.objects.size(); ++ obj_idx) { + const ModelObject &model_object = *model.objects[obj_idx]; + const ConfigOption* option = model_object.config.option("extruder"); + if (option) + extruder_id = (dynamic_cast(option))->getInt(); + for (int volume_idx = 0; volume_idx < (int)model_object.volumes.size(); ++ volume_idx) { + const ModelVolume &model_volume = *model_object.volumes[volume_idx]; + option = model_volume.config.option("extruder"); + if (option) extruder_id = (dynamic_cast(option))->getInt(); + //if (!model_volume.is_model_part()) + // continue; + for (int instance_idx = 0; instance_idx < (int)model_object.instances.size(); ++ instance_idx) { + const ModelInstance &model_instance = *model_object.instances[instance_idx]; + glvolume_collection.load_object_volume(&model_object, obj_idx, volume_idx, instance_idx, "volume", true, false, true); + //glvolume_collection.volumes.back()->geometry_id = key.geometry_id; + std::string color = filament_color?filament_color->get_at(extruder_id - 1):"#00FF00"; - if ((plate_to_slice != 0) && (plate_to_slice != (i + 1))) { - BOOST_LOG_TRIVIAL(info) << boost::format("Line %1%: regenerate thumbnail, Skip plate %2%.")%__LINE__%(i+1); - } - else { - unsigned int thumbnail_width = 512, thumbnail_height = 512; - const ThumbnailsParams thumbnail_params = {{}, false, true, true, true, i}; + unsigned char rgb_color[3] = {}; + Slic3r::GUI::BitmapCache::parse_color(color, rgb_color); + glvolume_collection.volumes.back()->set_render_color( float(rgb_color[0]) / 255.f, float(rgb_color[1]) / 255.f, float(rgb_color[2]) / 255.f, 1.f); - BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s thumbnail, need to regenerate")%(i+1); - switch (Slic3r::GUI::OpenGLManager::get_framebuffers_type()) - { - case Slic3r::GUI::OpenGLManager::EFramebufferType::Arb: - { - BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: ARB"); - Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer(*thumbnail_data, - thumbnail_width, thumbnail_height, thumbnail_params, - partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho); - break; - } - case Slic3r::GUI::OpenGLManager::EFramebufferType::Ext: - { - BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: EXT"); - Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer_ext(*thumbnail_data, - thumbnail_width, thumbnail_height, thumbnail_params, - partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho); - break; - } - default: - BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: unknown"); - break; + std::array new_color; + new_color[0] = float(rgb_color[0]) / 255.f; + new_color[1] = float(rgb_color[1]) / 255.f; + new_color[2] = float(rgb_color[2]) / 255.f; + new_color[3] = 1.f; + glvolume_collection.volumes.back()->set_color(new_color); + glvolume_collection.volumes.back()->printable = model_instance.printable; + } + } + } + + ThumbnailsParams thumbnail_params; + GLShaderProgram* shader = opengl_mgr.get_shader("gouraud_light"); + if (!shader) { + BOOST_LOG_TRIVIAL(error) << boost::format("can not get shader for rendering thumbnail"); + } + else { + for (int i = 0; i < partplate_list.get_plate_count(); i++) { + Slic3r::GUI::PartPlate *part_plate = partplate_list.get_plate(i); + PlateData *plate_data = plate_data_list[i]; + if (plate_data->plate_thumbnail.is_valid()) { + if ((plate_to_slice != 0) && (plate_to_slice != (i + 1))) { + BOOST_LOG_TRIVIAL(info) << boost::format("Line %1%: regenerate thumbnail, reset plate %2%'s thumbnail.")%__LINE__%(i+1); + plate_data->plate_thumbnail.reset(); } - BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s thumbnail,finished rendering")%(i+1); + else + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1% has a valid thumbnail, width %2%, height %3%, directly using it")%(i+1) %plate_data->plate_thumbnail.width %plate_data->plate_thumbnail.height; } - } - if (need_create_thumbnail_group) { - thumbnails.push_back(&plate_data->plate_thumbnail); - BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%: add thumbnail data into group")%(i+1); - } - - //top thumbnails - /*if (part_plate->top_thumbnail_data.is_valid() && part_plate->pick_thumbnail_data.is_valid()) { - if ((plate_to_slice != 0) && (plate_to_slice != (i + 1))) { - BOOST_LOG_TRIVIAL(info) << boost::format("Line %1%: regenerate thumbnail, reset plate %2%'s top/pick thumbnail.")%__LINE__%(i+1); - part_plate->top_thumbnail_data.reset(); - part_plate->pick_thumbnail_data.reset(); - plate_data->top_file.clear(); - plate_data->pick_file.clear(); - } - else { - plate_data->top_file = "valid_top"; - plate_data->pick_file = "valid_pick"; - BOOST_LOG_TRIVIAL(info) << boost::format("plate %1% has a valid top/pick thumbnail data, directly using it")%(i+1); - } - } - else*/ - if ((!plate_data->top_file.empty() && (boost::filesystem::exists(plate_data->top_file))) - &&(!plate_data->pick_file.empty() && (boost::filesystem::exists(plate_data->pick_file)))) - { - if ((plate_to_slice != 0) && (plate_to_slice != (i + 1))) { - BOOST_LOG_TRIVIAL(info) << boost::format("Line %1%: regenerate thumbnail, clear plate %2%'s top/pick thumbnail file path to empty.")%__LINE__%(i+1); - plate_data->top_file.clear(); - plate_data->pick_file.clear(); - } - else - BOOST_LOG_TRIVIAL(info) << boost::format("plate %1% has valid top/pick thumbnail extracted from 3mf, directly using it")%(i+1); - } - else{ - ThumbnailData* top_thumbnail = &part_plate->top_thumbnail_data; - ThumbnailData* picking_thumbnail = &part_plate->pick_thumbnail_data; - if ((plate_to_slice != 0) && (plate_to_slice != (i + 1))) { - BOOST_LOG_TRIVIAL(info) << boost::format("Line %1%: regenerate thumbnail, Skip plate %2%.")%__LINE__%(i+1); - part_plate->top_thumbnail_data.reset(); - part_plate->pick_thumbnail_data.reset(); - plate_data->top_file.clear(); - plate_data->pick_file.clear(); - } - else { - unsigned int thumbnail_width = 512, thumbnail_height = 512; - const ThumbnailsParams thumbnail_params = { {}, false, true, false, true, i }; - - BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s top/pick thumbnail missed, need to regenerate")%(i+1); - - switch (Slic3r::GUI::OpenGLManager::get_framebuffers_type()) - { - case Slic3r::GUI::OpenGLManager::EFramebufferType::Arb: - { - BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: ARB"); - Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer(*top_thumbnail, - thumbnail_width, thumbnail_height, thumbnail_params, - partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, false); - Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer(*picking_thumbnail, - thumbnail_width, thumbnail_height, thumbnail_params, - partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, true); - break; - } - case Slic3r::GUI::OpenGLManager::EFramebufferType::Ext: - { - BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: EXT"); - Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer_ext(*top_thumbnail, - thumbnail_width, thumbnail_height, thumbnail_params, - partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, false); - Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer_ext(*picking_thumbnail, - thumbnail_width, thumbnail_height, thumbnail_params, - partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, true); - break; - } - default: - BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: unknown"); - break; + else if (!plate_data->thumbnail_file.empty() && (boost::filesystem::exists(plate_data->thumbnail_file))) + { + if ((plate_to_slice != 0) && (plate_to_slice != (i + 1))) { + BOOST_LOG_TRIVIAL(info) << boost::format("Line %1%: regenerate thumbnail, clear plate %2%'s thumbnail file path to empty.")%__LINE__%(i+1); + plate_data->thumbnail_file.clear(); } - plate_data->top_file = "valid_top"; - plate_data->pick_file = "valid_pick"; - BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s top_thumbnail,finished rendering")%(i+1); + else + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1% has a valid thumbnail %2% extracted from 3mf, directly using it")%(i+1) %plate_data->thumbnail_file; } - } + else { + ThumbnailData* thumbnail_data = &plate_data->plate_thumbnail; - if (need_create_top_group) { - top_thumbnails.push_back(&part_plate->top_thumbnail_data); - pick_thumbnails.push_back(&part_plate->pick_thumbnail_data); - BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%: add thumbnail data for top and pick into group")%(i+1); + if ((plate_to_slice != 0) && (plate_to_slice != (i + 1))) { + BOOST_LOG_TRIVIAL(info) << boost::format("Line %1%: regenerate thumbnail, Skip plate %2%.")%__LINE__%(i+1); + } + else { + unsigned int thumbnail_width = 512, thumbnail_height = 512; + const ThumbnailsParams thumbnail_params = {{}, false, true, true, true, i}; + + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s thumbnail, need to regenerate")%(i+1); + switch (Slic3r::GUI::OpenGLManager::get_framebuffers_type()) + { + case Slic3r::GUI::OpenGLManager::EFramebufferType::Arb: + { + BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: ARB"); + Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer(*thumbnail_data, + thumbnail_width, thumbnail_height, thumbnail_params, + partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho); + break; + } + case Slic3r::GUI::OpenGLManager::EFramebufferType::Ext: + { + BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: EXT"); + Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer_ext(*thumbnail_data, + thumbnail_width, thumbnail_height, thumbnail_params, + partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho); + break; + } + default: + BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: unknown"); + break; + } + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s thumbnail,finished rendering")%(i+1); + } + } + if (need_create_thumbnail_group) { + thumbnails.push_back(&plate_data->plate_thumbnail); + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%: add thumbnail data into group")%(i+1); + } + + //top thumbnails + /*if (part_plate->top_thumbnail_data.is_valid() && part_plate->pick_thumbnail_data.is_valid()) { + if ((plate_to_slice != 0) && (plate_to_slice != (i + 1))) { + BOOST_LOG_TRIVIAL(info) << boost::format("Line %1%: regenerate thumbnail, reset plate %2%'s top/pick thumbnail.")%__LINE__%(i+1); + part_plate->top_thumbnail_data.reset(); + part_plate->pick_thumbnail_data.reset(); + plate_data->top_file.clear(); + plate_data->pick_file.clear(); + } + else { + plate_data->top_file = "valid_top"; + plate_data->pick_file = "valid_pick"; + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1% has a valid top/pick thumbnail data, directly using it")%(i+1); + } + } + else*/ + if ((!plate_data->top_file.empty() && (boost::filesystem::exists(plate_data->top_file))) + &&(!plate_data->pick_file.empty() && (boost::filesystem::exists(plate_data->pick_file)))) + { + if ((plate_to_slice != 0) && (plate_to_slice != (i + 1))) { + BOOST_LOG_TRIVIAL(info) << boost::format("Line %1%: regenerate thumbnail, clear plate %2%'s top/pick thumbnail file path to empty.")%__LINE__%(i+1); + plate_data->top_file.clear(); + plate_data->pick_file.clear(); + } + else + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1% has valid top/pick thumbnail extracted from 3mf, directly using it")%(i+1); + } + else{ + ThumbnailData* top_thumbnail = &part_plate->top_thumbnail_data; + ThumbnailData* picking_thumbnail = &part_plate->pick_thumbnail_data; + if ((plate_to_slice != 0) && (plate_to_slice != (i + 1))) { + BOOST_LOG_TRIVIAL(info) << boost::format("Line %1%: regenerate thumbnail, Skip plate %2%.")%__LINE__%(i+1); + part_plate->top_thumbnail_data.reset(); + part_plate->pick_thumbnail_data.reset(); + plate_data->top_file.clear(); + plate_data->pick_file.clear(); + } + else { + unsigned int thumbnail_width = 512, thumbnail_height = 512; + const ThumbnailsParams thumbnail_params = { {}, false, true, false, true, i }; + + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s top/pick thumbnail missed, need to regenerate")%(i+1); + + switch (Slic3r::GUI::OpenGLManager::get_framebuffers_type()) + { + case Slic3r::GUI::OpenGLManager::EFramebufferType::Arb: + { + BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: ARB"); + Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer(*top_thumbnail, + thumbnail_width, thumbnail_height, thumbnail_params, + partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, false); + Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer(*picking_thumbnail, + thumbnail_width, thumbnail_height, thumbnail_params, + partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, true); + break; + } + case Slic3r::GUI::OpenGLManager::EFramebufferType::Ext: + { + BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: EXT"); + Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer_ext(*top_thumbnail, + thumbnail_width, thumbnail_height, thumbnail_params, + partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, false); + Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer_ext(*picking_thumbnail, + thumbnail_width, thumbnail_height, thumbnail_params, + partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, true); + break; + } + default: + BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: unknown"); + break; + } + plate_data->top_file = "valid_top"; + plate_data->pick_file = "valid_pick"; + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s top_thumbnail,finished rendering")%(i+1); + } + } + + if (need_create_top_group) { + top_thumbnails.push_back(&part_plate->top_thumbnail_data); + pick_thumbnails.push_back(&part_plate->pick_thumbnail_data); + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%: add thumbnail data for top and pick into group")%(i+1); + } } } } diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 315965a65d..5a327ee3ba 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -2261,7 +2261,11 @@ std::string PrintStatistics::finalize_output_path(const std::string &path_in) co #define JSON_SUPPORT_LAYERS "support_layers" #define JSON_TREE_SUPPORT_LAYERS "tree_support_layers" #define JSON_LAYER_REGIONS "layer_regions" +#define JSON_FIRSTLAYER_GROUPS "first_layer_groups" +#define JSON_FIRSTLAYER_GROUP_ID "group_id" +#define JSON_FIRSTLAYER_GROUP_VOLUME_IDS "volume_ids" +#define JSON_FIRSTLAYER_GROUP_SLICES "slices" #define JSON_LAYER_PRINT_Z "print_z" #define JSON_LAYER_SLICE_Z "slice_z" @@ -2587,6 +2591,24 @@ static void to_json(json& j, const LayerRegion& layer_region) { return; } +static void to_json(json& j, const groupedVolumeSlices& first_layer_group) { + json volumes_json = json::array(), slices_json = json::array(); + j[JSON_FIRSTLAYER_GROUP_ID] = first_layer_group.groupId; + + for (const ObjectID& obj_id : first_layer_group.volume_ids) + { + volumes_json.push_back(obj_id.id); + } + j[JSON_FIRSTLAYER_GROUP_VOLUME_IDS] = std::move(volumes_json); + + for (const ExPolygon& slice_expolygon : first_layer_group.slices) { + json slice_expolygon_json = slice_expolygon; + + slices_json.push_back(std::move(slice_expolygon_json)); + } + j[JSON_FIRSTLAYER_GROUP_SLICES] = std::move(slices_json); +} + //load apis from json static void from_json(const json& j, Points& p_s) { int array_size = j.size(); @@ -2933,6 +2955,29 @@ void extract_support_layer(const json& support_layer_json, SupportLayer& support return; } +static void from_json(const json& j, groupedVolumeSlices& firstlayer_group) +{ + firstlayer_group.groupId = j[JSON_FIRSTLAYER_GROUP_ID]; + + int volume_count = j[JSON_FIRSTLAYER_GROUP_VOLUME_IDS].size(); + for (int volume_index = 0; volume_index < volume_count; volume_index++) + { + ObjectID obj_id; + + obj_id.id = j[JSON_FIRSTLAYER_GROUP_VOLUME_IDS][volume_index]; + firstlayer_group.volume_ids.push_back(std::move(obj_id)); + } + + int slices_count = j[JSON_FIRSTLAYER_GROUP_SLICES].size(); + for (int slice_index = 0; slice_index < slices_count; slice_index++) + { + ExPolygon polygon; + + polygon = j[JSON_FIRSTLAYER_GROUP_SLICES][slice_index]; + firstlayer_group.slices.push_back(std::move(polygon)); + } +} + int Print::export_cached_data(const std::string& directory, bool with_space) { int ret = 0; @@ -2999,7 +3044,7 @@ int Print::export_cached_data(const std::string& directory, bool with_space) BOOST_LOG_TRIVIAL(info) << boost::format("begin to dump object %1%, identify_id %2% to %3%")%model_obj->name %identify_id %file_name; try { - json root_json, layers_json = json::array(), support_layers_json = json::array(); + json root_json, layers_json = json::array(), support_layers_json = json::array(), first_layer_groups = json::array(); root_json[JSON_OBJECT_NAME] = model_obj->name; root_json[JSON_IDENTIFY_ID] = identify_id; @@ -3108,6 +3153,35 @@ int Print::export_cached_data(const std::string& directory, bool with_space) } // for each layer*/ root_json[JSON_SUPPORT_LAYERS] = std::move(support_layers_json); + const std::vector &first_layer_obj_groups = obj->firstLayerObjGroups(); + for (size_t s_group_index = 0; s_group_index < first_layer_obj_groups.size(); ++ s_group_index) { + groupedVolumeSlices group = first_layer_obj_groups[s_group_index]; + + //convert the id + for (ObjectID& obj_id : group.volume_ids) + { + const ModelVolume* currentModelVolumePtr = nullptr; + //BBS: support shared object logic + const PrintObject* shared_object = obj->get_shared_object(); + if (!shared_object) + shared_object = obj; + const ModelVolumePtrs& volumes_ptr = shared_object->model_object()->volumes; + size_t volume_count = volumes_ptr.size(); + for (size_t index = 0; index < volume_count; index ++) { + currentModelVolumePtr = volumes_ptr[index]; + if (currentModelVolumePtr->id() == obj_id) { + obj_id.id = index; + break; + } + } + } + + json first_layer_group_json; + + first_layer_group_json = group; + first_layer_groups.push_back(std::move(first_layer_group_json)); + } + root_json[JSON_FIRSTLAYER_GROUPS] = std::move(first_layer_groups); filename_vector.push_back(file_name); json_vector.push_back(std::move(root_json)); @@ -3239,12 +3313,14 @@ int Print::load_cached_data(const std::string& directory) std::string name = root_json.at(JSON_OBJECT_NAME); int identify_id = root_json.at(JSON_IDENTIFY_ID); - int layer_count = 0, support_layer_count = 0; + int layer_count = 0, support_layer_count = 0, firstlayer_group_count = 0; layer_count = root_json[JSON_LAYERS].size(); support_layer_count = root_json[JSON_SUPPORT_LAYERS].size(); + firstlayer_group_count = root_json[JSON_FIRSTLAYER_GROUPS].size(); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__<& firstlayer_objgroups = obj->firstLayerObjGroupsMod(); + for (int index = 0; index < firstlayer_group_count; index++) + { + json& firstlayer_group_json = root_json[JSON_FIRSTLAYER_GROUPS][index]; + groupedVolumeSlices firstlayer_group = firstlayer_group_json; + //convert the id + for (ObjectID& obj_id : firstlayer_group.volume_ids) + { + ModelVolume* currentModelVolumePtr = nullptr; + ModelVolumePtrs& volumes_ptr = obj->model_object()->volumes; + size_t volume_count = volumes_ptr.size(); + if (obj_id.id < volume_count) { + currentModelVolumePtr = volumes_ptr[obj_id.id]; + obj_id = currentModelVolumePtr->id(); + } + else { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< boost::format(": can not find volume_id %1% from object file %2% in firstlayer groups, volume_count %3%!") + %obj_id.id %object_filenames[obj_index].first %volume_count; + return CLI_IMPORT_CACHE_LOAD_FAILED; + } + } + firstlayer_objgroups.push_back(std::move(firstlayer_group)); + } + count ++; BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< boost::format(": load object %1% from %2% successfully.")%count%object_filenames[obj_index].first; } diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index e11662d9d6..0b737efb27 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -137,14 +137,12 @@ BedType PartPlate::get_bed_type(bool load_from_project) const { std::string bed_type_key = "curr_bed_type"; - // should be called in GUI context - assert(m_plater != nullptr); if (m_config.has(bed_type_key)) { BedType bed_type = m_config.opt_enum(bed_type_key); return bed_type; } - if (!load_from_project || !wxGetApp().preset_bundle) + if (!load_from_project || !m_plater || !wxGetApp().preset_bundle) return btDefault; DynamicConfig& proj_cfg = wxGetApp().preset_bundle->project_config; @@ -226,9 +224,6 @@ PrintSequence PartPlate::get_print_seq() const { std::string print_seq_key = "print_sequence"; - // should be called in GUI context - assert(m_plater != nullptr); - if (m_config.has(print_seq_key)) { PrintSequence print_seq = m_config.opt_enum(print_seq_key); return print_seq; From 49f6e3f3c62bb4ea6ff87edfff7ae70fe3a22c56 Mon Sep 17 00:00:00 2001 From: gerrit Date: Tue, 4 Apr 2023 09:04:58 +0800 Subject: [PATCH 199/339] ci: update build version to 01.05.05.66 Change-Id: I6f38bddfef8ed5ae13ad355326690c312e0e364e --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index 624a30fe85..537d6f7d82 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.05.05.65") +set(SLIC3R_VERSION "01.05.05.66") From b2e4935b6f130d0abeb6e562e1c0c9dec5f8d112 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Mon, 3 Apr 2023 12:02:20 +0800 Subject: [PATCH 200/339] FIX: german translation Ctrl -> Strg Del -> Entf Shift -> Umschalt Change-Id: Ifa340ee86cb9fb96ec3694ef47cac5235f519c40 --- bbl/i18n/BambuStudio.pot | 53 +++++++++++----- bbl/i18n/de/BambuStudio_de.po | 89 ++++++++++++++++++-------- bbl/i18n/en/BambuStudio_en.po | 81 +++++++++++++++++------- bbl/i18n/es/BambuStudio_es.po | 79 ++++++++++++++++------- bbl/i18n/fr/BambuStudio_fr.po | 91 +++++++++++++++++++-------- bbl/i18n/hu/BambuStudio_hu.po | 81 +++++++++++++++++------- bbl/i18n/it/BambuStudio_it.po | 81 +++++++++++++++++------- bbl/i18n/ja/BambuStudio_ja.po | 75 ++++++++++++++++------ bbl/i18n/nl/BambuStudio_nl.po | 77 +++++++++++++++++------ bbl/i18n/sv/BambuStudio_sv.po | 85 ++++++++++++++++++------- bbl/i18n/zh_cn/BambuStudio_zh_CN.po | 88 +++++++++++++++++--------- resources/i18n/de/BambuStudio.mo | Bin 234880 -> 234447 bytes resources/i18n/en/BambuStudio.mo | Bin 214753 -> 214157 bytes resources/i18n/es/BambuStudio.mo | Bin 234298 -> 233629 bytes resources/i18n/fr/BambuStudio.mo | Bin 229770 -> 229174 bytes resources/i18n/hu/BambuStudio.mo | Bin 227756 -> 227160 bytes resources/i18n/it/BambuStudio.mo | Bin 216355 -> 215759 bytes resources/i18n/ja/BambuStudio.mo | Bin 223857 -> 223189 bytes resources/i18n/nl/BambuStudio.mo | Bin 231123 -> 230477 bytes resources/i18n/sv/BambuStudio.mo | Bin 221115 -> 220472 bytes resources/i18n/zh_cn/BambuStudio.mo | Bin 212589 -> 212222 bytes src/slic3r/GUI/GUI.cpp | 2 +- src/slic3r/GUI/GUI_Factories.cpp | 4 +- src/slic3r/GUI/KBShortcutsDialog.cpp | 20 +++--- src/slic3r/GUI/MainFrame.cpp | 75 +++++++++++----------- 25 files changed, 685 insertions(+), 296 deletions(-) diff --git a/bbl/i18n/BambuStudio.pot b/bbl/i18n/BambuStudio.pot index 582556a274..689d38876c 100644 --- a/bbl/i18n/BambuStudio.pot +++ b/bbl/i18n/BambuStudio.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-29 14:51+0800\n" +"POT-Creation-Date: 2023-04-03 12:20+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -521,6 +521,9 @@ msgstr "" msgid "Horizontal text" msgstr "" +msgid "Ctrl+" +msgstr "" + msgid "Notice" msgstr "" @@ -802,6 +805,9 @@ msgstr "" msgid "Show" msgstr "" +msgid "Del" +msgstr "" + msgid "Delete the selected object" msgstr "" @@ -820,6 +826,9 @@ msgstr "" msgid "Cone" msgstr "" +msgid "Height range Modifier" +msgstr "" + msgid "Add settings" msgstr "" @@ -1169,6 +1178,12 @@ msgstr "" msgid "Instance manipulation" msgstr "" +msgid "Height ranges" +msgstr "" + +msgid "Settings for height range" +msgstr "" + msgid "Object" msgstr "" @@ -1779,6 +1794,9 @@ msgstr "" msgid "Setting Virtual slot information while printing is not supported" msgstr "" +msgid "Are you sure you want to clear the filament information?" +msgstr "" + msgid "Please input a valid value (K in 0~0.5)" msgstr "" @@ -2219,17 +2237,6 @@ msgid "" "No - Give up using spiral mode this time" msgstr "" -msgid "" -"Arachne engine only works when overhang slowing down is disabled.\n" -"This may cause decline in the quality of overhang surface when print fastly" -msgstr "" - -msgid "" -"Disable overhang slowing down automatically? \n" -"Yes - Enable arachne and disable overhang slowing down\n" -"No - Give up using arachne this time" -msgstr "" - msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -2984,6 +2991,9 @@ msgstr "" msgid "Save Project as" msgstr "" +msgid "Shift+" +msgstr "" + msgid "Save current project as" msgstr "" @@ -4866,8 +4876,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" msgid "Line width" @@ -5349,6 +5359,9 @@ msgstr "" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "" +msgid "Ctrl+Shift+G" +msgstr "" + msgid "Copy to clipboard" msgstr "" @@ -5376,12 +5389,21 @@ msgstr "" msgid "Zoom View" msgstr "" +msgid "Shift+A" +msgstr "" + +msgid "Shift+R" +msgstr "" + msgid "" "Auto orientates selected objects or all objects.If there are selected " "objects, it just orientates the selected ones.Otherwise, it will orientates " "all objects in the current disk." msgstr "" +msgid "Shift+Tab" +msgstr "" + msgid "Collapse/Expand the sidebar" msgstr "" @@ -5448,6 +5470,9 @@ msgstr "" msgid "Movement step set to 1 mm" msgstr "" +msgid "Esc" +msgstr "" + msgid "keyboard 1-9: set filament for object/part" msgstr "" diff --git a/bbl/i18n/de/BambuStudio_de.po b/bbl/i18n/de/BambuStudio_de.po index 72a560232b..010e79bd80 100644 --- a/bbl/i18n/de/BambuStudio_de.po +++ b/bbl/i18n/de/BambuStudio_de.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-29 14:51+0800\n" +"POT-Creation-Date: 2023-04-03 12:20+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -524,6 +524,9 @@ msgstr "" msgid "Horizontal text" msgstr "" +msgid "Ctrl+" +msgstr "Strg+" + msgid "Notice" msgstr "Hinweis" @@ -825,6 +828,9 @@ msgstr "Ausblenden" msgid "Show" msgstr "Anzeigen" +msgid "Del" +msgstr "Entf" + msgid "Delete the selected object" msgstr "Ausgewähltes Objekt löschen" @@ -843,6 +849,9 @@ msgstr "Zylinder" msgid "Cone" msgstr "Kegel" +msgid "Height range Modifier" +msgstr "" + msgid "Add settings" msgstr "Einstellungen hinzufügen" @@ -1210,6 +1219,12 @@ msgstr "" msgid "Instance manipulation" msgstr "" +msgid "Height ranges" +msgstr "" + +msgid "Settings for height range" +msgstr "" + msgid "Object" msgstr "Objekt" @@ -1869,6 +1884,9 @@ msgstr "Faktor N" msgid "Setting Virtual slot information while printing is not supported" msgstr "" +msgid "Are you sure you want to clear the filament information?" +msgstr "" + msgid "Please input a valid value (K in 0~0.5)" msgstr "Bitte geben Sie einen gültigen Wert ein (K in 0~0.5)" @@ -2420,24 +2438,6 @@ msgstr "" "Ja - Diese Einstellungen ändern und den Spiralmodus automatisch aktivieren\n" "Nein - Verzichten Sie dieses Mal auf den Spiralmodus" -msgid "" -"Arachne engine only works when overhang slowing down is disabled.\n" -"This may cause decline in the quality of overhang surface when print fastly" -msgstr "" -"Die Arachne-Engine funktioniert nur, wenn die Überhangverlangsamung " -"deaktiviert ist.\n" -"Dies kann zu einer Verschlechterung der Qualität der Überhangsfläche führen, " -"wenn schnell gedruckt wird." - -msgid "" -"Disable overhang slowing down automatically? \n" -"Yes - Enable arachne and disable overhang slowing down\n" -"No - Give up using arachne this time" -msgstr "" -"Automatische Verlangsamung des Überhangs deaktivieren?\n" -"Ja - Arachne aktivieren und die Überhangsverlangsamung deaktivieren\n" -"Nein - Arachne für diesen Druck nicht verwenden" - msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -3222,6 +3222,9 @@ msgstr "Aktuelles Projekt in Datei speichern" msgid "Save Project as" msgstr "Projekt speichern als" +msgid "Shift+" +msgstr "Umschalt+" + msgid "Save current project as" msgstr "Aktuelles Projekt speichern als" @@ -5274,8 +5277,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "Wenn Sie einen Zeitraffer ohne Werkzeugkopf aufnehmen, wird empfohlen, einen " "\"Timelapse Wipe Tower\" (Zeitraffer-Wischturm) hinzuzufügen, indem Sie mit " @@ -5819,6 +5822,9 @@ msgstr "Liste der Objekte" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "" +msgid "Ctrl+Shift+G" +msgstr "Strg+Umschalt+G" + msgid "Copy to clipboard" msgstr "Zu Zwischenablage kopieren" @@ -5846,6 +5852,12 @@ msgstr "Mausrad" msgid "Zoom View" msgstr "Zoom der Ansicht" +msgid "Shift+A" +msgstr "Umschalt+A" + +msgid "Shift+R" +msgstr "Umschalt+R" + msgid "" "Auto orientates selected objects or all objects.If there are selected " "objects, it just orientates the selected ones.Otherwise, it will orientates " @@ -5855,6 +5867,9 @@ msgstr "" "ausgewählte Objekte gibt, werden nur die ausgewählten Objekte ausgerichtet. " "Andernfalls werden alle Objekte auf der aktuellen Druckplatte ausgerichtet." +msgid "Shift+Tab" +msgstr "Umschalt+Tab" + msgid "Collapse/Expand the sidebar" msgstr "Seitenleiste zu-/ausklappen" @@ -5886,7 +5901,7 @@ msgid "Ctrl+Left mouse button" msgstr "Strg+Linke Maustaste" msgid "Shift+Left mouse button" -msgstr "Umschalttaste+linke Maustaste" +msgstr "Umschalt+linke Maustaste" msgid "Select objects by rectangle" msgstr "Objekte per Rechteck auswählen" @@ -5916,11 +5931,14 @@ msgid "Move selection 10 mm in positive X direction" msgstr "Auswahl 10 mm in positiver X-Richtung verschieben" msgid "Shift+Any arrow" -msgstr "Umschalttaste+beliebiger Pfeil" +msgstr "Umschalt+beliebiger Pfeil" msgid "Movement step set to 1 mm" msgstr "Bewegungsschritt auf 1 mm eingestellt" +msgid "Esc" +msgstr "" + msgid "keyboard 1-9: set filament for object/part" msgstr "Tastatur 1-9: Filament für Objekt/Teil einstellen" @@ -6040,7 +6058,7 @@ msgid "Move slider 5x faster" msgstr "Schieberegler 5x schneller bewegen" msgid "Shift+Mouse wheel" -msgstr "Umschalttaste+Mausrad" +msgstr "Umschalt+Mausrad" msgid "Release Note" msgstr "Hinweis zur Veröffentlichung" @@ -9247,6 +9265,25 @@ msgstr "" "Wussten Sie, dass Sie die Festigkeit des Modells durch mehr Wandschleifen " "und eine höhere Dichte der Füllung verbessern können?" +#~ msgid "" +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly" +#~ msgstr "" +#~ "Die Arachne-Engine funktioniert nur, wenn die Überhangverlangsamung " +#~ "deaktiviert ist.\n" +#~ "Dies kann zu einer Verschlechterung der Qualität der Überhangsfläche " +#~ "führen, wenn schnell gedruckt wird." + +#~ msgid "" +#~ "Disable overhang slowing down automatically? \n" +#~ "Yes - Enable arachne and disable overhang slowing down\n" +#~ "No - Give up using arachne this time" +#~ msgstr "" +#~ "Automatische Verlangsamung des Überhangs deaktivieren?\n" +#~ "Ja - Arachne aktivieren und die Überhangsverlangsamung deaktivieren\n" +#~ "Nein - Arachne für diesen Druck nicht verwenden" + #~ msgid "Start" #~ msgstr "Starten" @@ -10219,8 +10256,8 @@ msgstr "" #~ "Wenn Sie einen Zeitraffer ohne Werkzeugkopf aufnehmen, wird empfohlen, " #~ "einen \"Timelapse Wipe Tower\" (Zeitraffer-Wischturm) hinzuzufügen\n" #~ "hinzuzufügen, indem Sie mit der rechten Maustaste auf die leere Position " -#~ "der Bauplatte klicken und \"Primitiv hinzufügen\"->\"Timelapse Wipe " -#~ "Tower\" wählen.\n" +#~ "der Bauplatte klicken und \"Primitiv hinzufügen\"->\"Timelapse Wipe Tower" +#~ "\" wählen.\n" #~ msgid "" #~ "When sparse infill density is low, the internal solid infill or internal " diff --git a/bbl/i18n/en/BambuStudio_en.po b/bbl/i18n/en/BambuStudio_en.po index 0fe9d7dd4c..4829fd527b 100644 --- a/bbl/i18n/en/BambuStudio_en.po +++ b/bbl/i18n/en/BambuStudio_en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-29 14:51+0800\n" +"POT-Creation-Date: 2023-04-03 12:20+0800\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -518,6 +518,9 @@ msgstr "" msgid "Horizontal text" msgstr "" +msgid "Ctrl+" +msgstr "" + msgid "Notice" msgstr "Notice" @@ -812,6 +815,9 @@ msgstr "Hide" msgid "Show" msgstr "Show" +msgid "Del" +msgstr "" + msgid "Delete the selected object" msgstr "Delete the selected object" @@ -830,6 +836,9 @@ msgstr "Cylinder" msgid "Cone" msgstr "Cone" +msgid "Height range Modifier" +msgstr "" + msgid "Add settings" msgstr "Add Settings" @@ -1181,6 +1190,12 @@ msgstr "" msgid "Instance manipulation" msgstr "" +msgid "Height ranges" +msgstr "" + +msgid "Settings for height range" +msgstr "" + msgid "Object" msgstr "Object" @@ -1826,6 +1841,9 @@ msgstr "Factor N" msgid "Setting Virtual slot information while printing is not supported" msgstr "" +msgid "Are you sure you want to clear the filament information?" +msgstr "" + msgid "Please input a valid value (K in 0~0.5)" msgstr "Please input a valid value (K in 0~0.5)" @@ -2352,23 +2370,6 @@ msgstr "" "Yes - Change these settings and enable spiral/vase mode automatically\n" "No - Cancel enabling spiral mode" -msgid "" -"Arachne engine only works when overhang slowing down is disabled.\n" -"This may cause decline in the quality of overhang surface when print fastly" -msgstr "" -"The Arachne engine only works when overhang slowdown is disabled.\n" -"This may cause decline in the quality of overhang surface when printing " -"quickly." - -msgid "" -"Disable overhang slowing down automatically? \n" -"Yes - Enable arachne and disable overhang slowing down\n" -"No - Give up using arachne this time" -msgstr "" -"Disable overhang slowdown automatically? \n" -"Yes - Enable Arachne and disable overhang slowing down\n" -"No - Don't use Arachne for this print" - msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -3151,6 +3152,9 @@ msgstr "Save current project to file" msgid "Save Project as" msgstr "Save Project as" +msgid "Shift+" +msgstr "" + msgid "Save current project as" msgstr "Save current project as" @@ -5141,13 +5145,13 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "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\"." msgid "Line width" msgstr "Line width" @@ -5671,6 +5675,9 @@ msgstr "Objects list" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "" +msgid "Ctrl+Shift+G" +msgstr "" + msgid "Copy to clipboard" msgstr "Copy to clipboard" @@ -5698,6 +5705,12 @@ msgstr "Mouse wheel" msgid "Zoom View" msgstr "Zoom View" +msgid "Shift+A" +msgstr "" + +msgid "Shift+R" +msgstr "" + msgid "" "Auto orientates selected objects or all objects.If there are selected " "objects, it just orientates the selected ones.Otherwise, it will orientates " @@ -5707,6 +5720,9 @@ msgstr "" "objects, it just orients the selected ones. Otherwise, it will orient all " "objects in the current plate." +msgid "Shift+Tab" +msgstr "" + msgid "Collapse/Expand the sidebar" msgstr "Collapse/Expand the sidebar" @@ -5773,6 +5789,9 @@ msgstr "Shift+Any arrow" msgid "Movement step set to 1 mm" msgstr "Movement step set to 1mm" +msgid "Esc" +msgstr "" + msgid "keyboard 1-9: set filament for object/part" msgstr "Keyboard 1-9: set filament for object/part" @@ -9005,6 +9024,24 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" +#~ msgid "" +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly" +#~ msgstr "" +#~ "The Arachne engine only works when overhang slowdown is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when printing " +#~ "quickly." + +#~ msgid "" +#~ "Disable overhang slowing down automatically? \n" +#~ "Yes - Enable arachne and disable overhang slowing down\n" +#~ "No - Give up using arachne this time" +#~ msgstr "" +#~ "Disable overhang slowdown automatically? \n" +#~ "Yes - Enable Arachne and disable overhang slowing down\n" +#~ "No - Don't use Arachne for this print" + #~ msgid "Start" #~ msgstr "Start" diff --git a/bbl/i18n/es/BambuStudio_es.po b/bbl/i18n/es/BambuStudio_es.po index b83cf29b98..7c9eaa873c 100644 --- a/bbl/i18n/es/BambuStudio_es.po +++ b/bbl/i18n/es/BambuStudio_es.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-29 14:51+0800\n" +"POT-Creation-Date: 2023-04-03 12:20+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -524,6 +524,9 @@ msgstr "" msgid "Horizontal text" msgstr "" +msgid "Ctrl+" +msgstr "" + msgid "Notice" msgstr "Date cuenta" @@ -827,6 +830,9 @@ msgstr "Ocultar" msgid "Show" msgstr "Mostrar" +msgid "Del" +msgstr "" + msgid "Delete the selected object" msgstr "Eliminar el objeto seleccionado" @@ -845,6 +851,9 @@ msgstr "Cilindro" msgid "Cone" msgstr "Cono" +msgid "Height range Modifier" +msgstr "" + msgid "Add settings" msgstr "Añadir ajustes" @@ -1206,6 +1215,12 @@ msgstr "" msgid "Instance manipulation" msgstr "" +msgid "Height ranges" +msgstr "" + +msgid "Settings for height range" +msgstr "" + msgid "Object" msgstr "Objeto" @@ -1866,6 +1881,9 @@ msgstr "Factor N" msgid "Setting Virtual slot information while printing is not supported" msgstr "" +msgid "Are you sure you want to clear the filament information?" +msgstr "" + msgid "Please input a valid value (K in 0~0.5)" msgstr "Introduzca un valor válido (K en 0~0.5)" @@ -2405,24 +2423,6 @@ msgstr "" "Sí - Cambiar estos ajustes y activar el modo espiral automáticamente\n" "No - Dejar de usar el modo espiral esta vez" -msgid "" -"Arachne engine only works when overhang slowing down is disabled.\n" -"This may cause decline in the quality of overhang surface when print fastly" -msgstr "" -"El motor Arachne solo funciona cuando la ralentización por voladizo está " -"desactivada.\n" -"Esto puede provocar una disminución en la calidad de los voladizos al " -"imprimir rápidamente." - -msgid "" -"Disable overhang slowing down automatically? \n" -"Yes - Enable arachne and disable overhang slowing down\n" -"No - Give up using arachne this time" -msgstr "" -"¿Desactivar automáticamente la ralentización del voladizo?\n" -"Sí - Activar Arachne y desactivar la ralentización del voladizo\n" -"No - No utilizar Arachne para esta impresión" - msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -3212,6 +3212,9 @@ msgstr "Guardar el proyecto actual en un archivo" msgid "Save Project as" msgstr "Guardar proyecto como" +msgid "Shift+" +msgstr "" + msgid "Save current project as" msgstr "Guardar el proyecto actual como" @@ -5244,8 +5247,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "Al grabar timelapse sin el cabezal de la herramienta, se recomienda añadir " "una «Torre de purga para el timelapse» \n" @@ -5783,6 +5786,9 @@ msgstr "Lista de objetos" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "" +msgid "Ctrl+Shift+G" +msgstr "" + msgid "Copy to clipboard" msgstr "Copiar al portapapeles" @@ -5812,6 +5818,12 @@ msgstr "Rueda de ratón" msgid "Zoom View" msgstr "Zoom de vista" +msgid "Shift+A" +msgstr "" + +msgid "Shift+R" +msgstr "" + msgid "" "Auto orientates selected objects or all objects.If there are selected " "objects, it just orientates the selected ones.Otherwise, it will orientates " @@ -5821,6 +5833,9 @@ msgstr "" "objetos seleccionados, sólo orienta los seleccionados.En caso contrario, " "orientará todos los objetos del disco actual." +msgid "Shift+Tab" +msgstr "" + msgid "Collapse/Expand the sidebar" msgstr "Ocultar/Expandir barra lateral" @@ -5887,6 +5902,9 @@ msgstr "Mayúsculas+Cualquier flecha" msgid "Movement step set to 1 mm" msgstr "Paso de movimiento configurado a 1 mm" +msgid "Esc" +msgstr "" + msgid "keyboard 1-9: set filament for object/part" msgstr "teclado 1-9: ajustar el filamento para el objeto/pieza" @@ -9202,6 +9220,25 @@ msgstr "" "¿Sabía que puede utilizar más bucles de pared y una densidad de relleno " "dispersa más alta para mejorar la resistencia del modelo?" +#~ msgid "" +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly" +#~ msgstr "" +#~ "El motor Arachne solo funciona cuando la ralentización por voladizo está " +#~ "desactivada.\n" +#~ "Esto puede provocar una disminución en la calidad de los voladizos al " +#~ "imprimir rápidamente." + +#~ msgid "" +#~ "Disable overhang slowing down automatically? \n" +#~ "Yes - Enable arachne and disable overhang slowing down\n" +#~ "No - Give up using arachne this time" +#~ msgstr "" +#~ "¿Desactivar automáticamente la ralentización del voladizo?\n" +#~ "Sí - Activar Arachne y desactivar la ralentización del voladizo\n" +#~ "No - No utilizar Arachne para esta impresión" + #~ msgid "Start" #~ msgstr "Iniciar" diff --git a/bbl/i18n/fr/BambuStudio_fr.po b/bbl/i18n/fr/BambuStudio_fr.po index fd9db77602..29416877b7 100644 --- a/bbl/i18n/fr/BambuStudio_fr.po +++ b/bbl/i18n/fr/BambuStudio_fr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-29 14:51+0800\n" +"POT-Creation-Date: 2023-04-03 12:20+0800\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -520,6 +520,9 @@ msgstr "" msgid "Horizontal text" msgstr "" +msgid "Ctrl+" +msgstr "" + msgid "Notice" msgstr "Remarquer" @@ -821,6 +824,9 @@ msgstr "Hide" msgid "Show" msgstr "Show" +msgid "Del" +msgstr "" + msgid "Delete the selected object" msgstr "Supprimer l'objet sélectionné" @@ -839,6 +845,9 @@ msgstr "Cylindre" msgid "Cone" msgstr "Cône" +msgid "Height range Modifier" +msgstr "" + msgid "Add settings" msgstr "Ajouter des paramètres" @@ -1195,6 +1204,12 @@ msgstr "" msgid "Instance manipulation" msgstr "" +msgid "Height ranges" +msgstr "" + +msgid "Settings for height range" +msgstr "" + msgid "Object" msgstr "Objet" @@ -1470,8 +1485,8 @@ msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " "load or unload filiament." msgstr "" -"Choisissez un slot AMS puis appuyez sur le bouton \"charger\" " -"ou\"Décharger\" pour charger ou décharger automatiquement le filament." +"Choisissez un slot AMS puis appuyez sur le bouton \"charger\" ou\"Décharger" +"\" pour charger ou décharger automatiquement le filament." msgid "Edit" msgstr "Éditer" @@ -1843,6 +1858,9 @@ msgstr "Factor N" msgid "Setting Virtual slot information while printing is not supported" msgstr "" +msgid "Are you sure you want to clear the filament information?" +msgstr "" + msgid "Please input a valid value (K in 0~0.5)" msgstr "Please input a valid value (K in 0~0.5)" @@ -2363,23 +2381,6 @@ msgstr "" "support est désactivé, les couches de coque supérieures sont à 0 et la " "densité de remplissage clairsemée est à 0" -msgid "" -"Arachne engine only works when overhang slowing down is disabled.\n" -"This may cause decline in the quality of overhang surface when print fastly" -msgstr "" -"The Arachne engine only works when overhang slowdown is disabled.\n" -"This may cause decline in the quality of overhang surface when printing " -"quickly." - -msgid "" -"Disable overhang slowing down automatically? \n" -"Yes - Enable arachne and disable overhang slowing down\n" -"No - Give up using arachne this time" -msgstr "" -"Disable overhang slowdown automatically? \n" -"Yes - Enable Arachne and disable overhang slowing down\n" -"No - Don't use Arachne for this print" - msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -3161,6 +3162,9 @@ msgstr "Enregistrer le projet actuel dans un fichier" msgid "Save Project as" msgstr "Enregistrer le projet sous" +msgid "Shift+" +msgstr "" + msgid "Save current project as" msgstr "Enregistrer le projet actuel sous" @@ -5177,13 +5181,13 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "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\"." msgid "Line width" msgstr "Largeur de ligne" @@ -5302,9 +5306,9 @@ msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " "does not support to print on the Cool Plate" msgstr "" -"Il s'agit de la température du plateau lorsque le plateau froid (\"Cool " -"plate\") est installé. Une valeur à 0 signifie que ce filament ne peut pas " -"être imprimé sur le plateau froid." +"Il s'agit de la température du plateau lorsque le plateau froid (\"Cool plate" +"\") est installé. Une valeur à 0 signifie que ce filament ne peut pas être " +"imprimé sur le plateau froid." msgid "Engineering plate" msgstr "Plaque d'ingénierie" @@ -5717,6 +5721,9 @@ msgstr "Liste des objets" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "" +msgid "Ctrl+Shift+G" +msgstr "" + msgid "Copy to clipboard" msgstr "Copier dans le presse-papier" @@ -5744,6 +5751,12 @@ msgstr "Mouse wheel" msgid "Zoom View" msgstr "Zoom View" +msgid "Shift+A" +msgstr "" + +msgid "Shift+R" +msgstr "" + msgid "" "Auto orientates selected objects or all objects.If there are selected " "objects, it just orientates the selected ones.Otherwise, it will orientates " @@ -5753,6 +5766,9 @@ msgstr "" "des objets sélectionnés, il oriente uniquement ceux qui sont sélectionnés. " "Sinon, il oriente tous les objets du disque actuel." +msgid "Shift+Tab" +msgstr "" + msgid "Collapse/Expand the sidebar" msgstr "Réduire/Agrandir la barre latérale" @@ -5819,6 +5835,9 @@ msgstr "Maj+n'importe quelle flèche" msgid "Movement step set to 1 mm" msgstr "Pas de mouvement réglé sur 1 mm" +msgid "Esc" +msgstr "" + msgid "keyboard 1-9: set filament for object/part" msgstr "clavier 1-9 : définir le filament pour l'objet/la pièce" @@ -9119,6 +9138,24 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" +#~ msgid "" +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly" +#~ msgstr "" +#~ "The Arachne engine only works when overhang slowdown is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when printing " +#~ "quickly." + +#~ msgid "" +#~ "Disable overhang slowing down automatically? \n" +#~ "Yes - Enable arachne and disable overhang slowing down\n" +#~ "No - Give up using arachne this time" +#~ msgstr "" +#~ "Disable overhang slowdown automatically? \n" +#~ "Yes - Enable Arachne and disable overhang slowing down\n" +#~ "No - Don't use Arachne for this print" + #~ msgid "Start" #~ msgstr "Start" diff --git a/bbl/i18n/hu/BambuStudio_hu.po b/bbl/i18n/hu/BambuStudio_hu.po index 1305085182..ec23df7ef6 100644 --- a/bbl/i18n/hu/BambuStudio_hu.po +++ b/bbl/i18n/hu/BambuStudio_hu.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-29 14:51+0800\n" +"POT-Creation-Date: 2023-04-03 12:20+0800\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -520,6 +520,9 @@ msgstr "" msgid "Horizontal text" msgstr "" +msgid "Ctrl+" +msgstr "" + msgid "Notice" msgstr "Megjegyzés" @@ -819,6 +822,9 @@ msgstr "Hide" msgid "Show" msgstr "Show" +msgid "Del" +msgstr "" + msgid "Delete the selected object" msgstr "Kiválasztott objektum törlése" @@ -837,6 +843,9 @@ msgstr "Henger" msgid "Cone" msgstr "Kúp" +msgid "Height range Modifier" +msgstr "" + msgid "Add settings" msgstr "Beállítások hozzáadása" @@ -1197,6 +1206,12 @@ msgstr "" msgid "Instance manipulation" msgstr "" +msgid "Height ranges" +msgstr "" + +msgid "Settings for height range" +msgstr "" + msgid "Object" msgstr "Objektum" @@ -1853,6 +1868,9 @@ msgstr "Factor N" msgid "Setting Virtual slot information while printing is not supported" msgstr "" +msgid "Are you sure you want to clear the filament information?" +msgstr "" + msgid "Please input a valid value (K in 0~0.5)" msgstr "Please input a valid value (K in 0~0.5)" @@ -2377,23 +2395,6 @@ msgstr "" "spirál mód használatát\n" "Nem - Ne használja a spirál módot ez alkalommal" -msgid "" -"Arachne engine only works when overhang slowing down is disabled.\n" -"This may cause decline in the quality of overhang surface when print fastly" -msgstr "" -"The Arachne engine only works when overhang slowdown is disabled.\n" -"This may cause decline in the quality of overhang surface when printing " -"quickly." - -msgid "" -"Disable overhang slowing down automatically? \n" -"Yes - Enable arachne and disable overhang slowing down\n" -"No - Give up using arachne this time" -msgstr "" -"Disable overhang slowdown automatically? \n" -"Yes - Enable Arachne and disable overhang slowing down\n" -"No - Don't use Arachne for this print" - msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -3177,6 +3178,9 @@ msgstr "Jelenlegi projekt mentése egy fájlba" msgid "Save Project as" msgstr "Projekt mentése másként" +msgid "Shift+" +msgstr "" + msgid "Save current project as" msgstr "Jelenlegi projekt mentése másként" @@ -5177,13 +5181,13 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "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\"." msgid "Line width" msgstr "Nyomtatott vonal szélessége" @@ -5712,6 +5716,9 @@ msgstr "Objektumok listája" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "" +msgid "Ctrl+Shift+G" +msgstr "" + msgid "Copy to clipboard" msgstr "Másolás a vágólapra" @@ -5739,6 +5746,12 @@ msgstr "Mouse wheel" msgid "Zoom View" msgstr "Zoom View" +msgid "Shift+A" +msgstr "" + +msgid "Shift+R" +msgstr "" + msgid "" "Auto orientates selected objects or all objects.If there are selected " "objects, it just orientates the selected ones.Otherwise, it will orientates " @@ -5748,6 +5761,9 @@ msgstr "" "tájolását. Ha vannak kijelölt objektumok, akkor csak a kijelölteket, " "ellenkező esetben az aktuális tálcán lévő összes objektumot orientálja." +msgid "Shift+Tab" +msgstr "" + msgid "Collapse/Expand the sidebar" msgstr "Az oldalsáv összecsukása/kinyitása" @@ -5814,6 +5830,9 @@ msgstr "Shift+Bármelyik nyílgomb" msgid "Movement step set to 1 mm" msgstr "Mozgatás lépéstávolsága 1mm-re állítva" +msgid "Esc" +msgstr "" + msgid "keyboard 1-9: set filament for object/part" msgstr "filament hozzárendelése az objektumhoz/tárgyhoz" @@ -9084,6 +9103,24 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" +#~ msgid "" +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly" +#~ msgstr "" +#~ "The Arachne engine only works when overhang slowdown is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when printing " +#~ "quickly." + +#~ msgid "" +#~ "Disable overhang slowing down automatically? \n" +#~ "Yes - Enable arachne and disable overhang slowing down\n" +#~ "No - Give up using arachne this time" +#~ msgstr "" +#~ "Disable overhang slowdown automatically? \n" +#~ "Yes - Enable Arachne and disable overhang slowing down\n" +#~ "No - Don't use Arachne for this print" + #~ msgid "Start" #~ msgstr "Start" diff --git a/bbl/i18n/it/BambuStudio_it.po b/bbl/i18n/it/BambuStudio_it.po index 3c26ee27f9..e8a83579e7 100644 --- a/bbl/i18n/it/BambuStudio_it.po +++ b/bbl/i18n/it/BambuStudio_it.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-29 14:51+0800\n" +"POT-Creation-Date: 2023-04-03 12:20+0800\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -519,6 +519,9 @@ msgstr "" msgid "Horizontal text" msgstr "" +msgid "Ctrl+" +msgstr "" + msgid "Notice" msgstr "Avvertenza" @@ -813,6 +816,9 @@ msgstr "Hide" msgid "Show" msgstr "Show" +msgid "Del" +msgstr "" + msgid "Delete the selected object" msgstr "Delete the selected object" @@ -831,6 +837,9 @@ msgstr "Cilindro" msgid "Cone" msgstr "Cone" +msgid "Height range Modifier" +msgstr "" + msgid "Add settings" msgstr "Aggiungi impostazioni" @@ -1182,6 +1191,12 @@ msgstr "" msgid "Instance manipulation" msgstr "" +msgid "Height ranges" +msgstr "" + +msgid "Settings for height range" +msgstr "" + msgid "Object" msgstr "Object" @@ -1827,6 +1842,9 @@ msgstr "Factor N" msgid "Setting Virtual slot information while printing is not supported" msgstr "" +msgid "Are you sure you want to clear the filament information?" +msgstr "" + msgid "Please input a valid value (K in 0~0.5)" msgstr "Please input a valid value (K in 0~0.5)" @@ -2354,23 +2372,6 @@ msgstr "" "Yes - Change these settings and enable spiral/vase mode automatically\n" "No - Cancel enabling spiral mode" -msgid "" -"Arachne engine only works when overhang slowing down is disabled.\n" -"This may cause decline in the quality of overhang surface when print fastly" -msgstr "" -"The Arachne engine only works when overhang slowdown is disabled.\n" -"This may cause decline in the quality of overhang surface when printing " -"quickly." - -msgid "" -"Disable overhang slowing down automatically? \n" -"Yes - Enable arachne and disable overhang slowing down\n" -"No - Give up using arachne this time" -msgstr "" -"Disable overhang slowdown automatically? \n" -"Yes - Enable Arachne and disable overhang slowing down\n" -"No - Don't use Arachne for this print" - msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -3153,6 +3154,9 @@ msgstr "Save current project to file" msgid "Save Project as" msgstr "Save Project as" +msgid "Shift+" +msgstr "" + msgid "Save current project as" msgstr "Save current project as" @@ -5143,13 +5147,13 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "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\"." msgid "Line width" msgstr "Line width" @@ -5673,6 +5677,9 @@ msgstr "Objects list" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "" +msgid "Ctrl+Shift+G" +msgstr "" + msgid "Copy to clipboard" msgstr "Copia negli appunti" @@ -5700,6 +5707,12 @@ msgstr "Mouse wheel" msgid "Zoom View" msgstr "Zoom View" +msgid "Shift+A" +msgstr "" + +msgid "Shift+R" +msgstr "" + msgid "" "Auto orientates selected objects or all objects.If there are selected " "objects, it just orientates the selected ones.Otherwise, it will orientates " @@ -5709,6 +5722,9 @@ msgstr "" "objects, it just orients the selected ones. Otherwise, it will orient all " "objects in the current plate." +msgid "Shift+Tab" +msgstr "" + msgid "Collapse/Expand the sidebar" msgstr "Riduci/Espandi barra laterale" @@ -5775,6 +5791,9 @@ msgstr "Shift+Any arrow" msgid "Movement step set to 1 mm" msgstr "Passo movimento impostato a 1 mm" +msgid "Esc" +msgstr "" + msgid "keyboard 1-9: set filament for object/part" msgstr "Keyboard 1-9: set filament for object/part" @@ -9008,6 +9027,24 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" +#~ msgid "" +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly" +#~ msgstr "" +#~ "The Arachne engine only works when overhang slowdown is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when printing " +#~ "quickly." + +#~ msgid "" +#~ "Disable overhang slowing down automatically? \n" +#~ "Yes - Enable arachne and disable overhang slowing down\n" +#~ "No - Give up using arachne this time" +#~ msgstr "" +#~ "Disable overhang slowdown automatically? \n" +#~ "Yes - Enable Arachne and disable overhang slowing down\n" +#~ "No - Don't use Arachne for this print" + #~ msgid "Start" #~ msgstr "Start" diff --git a/bbl/i18n/ja/BambuStudio_ja.po b/bbl/i18n/ja/BambuStudio_ja.po index b29f65697e..7ba5e01516 100644 --- a/bbl/i18n/ja/BambuStudio_ja.po +++ b/bbl/i18n/ja/BambuStudio_ja.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-29 14:51+0800\n" +"POT-Creation-Date: 2023-04-03 12:20+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -519,6 +519,9 @@ msgstr "" msgid "Horizontal text" msgstr "" +msgid "Ctrl+" +msgstr "" + msgid "Notice" msgstr "通知" @@ -808,6 +811,9 @@ msgstr "非表示" msgid "Show" msgstr "表示" +msgid "Del" +msgstr "" + msgid "Delete the selected object" msgstr "選択したオブジェクトを削除" @@ -826,6 +832,9 @@ msgstr "シリンダー" msgid "Cone" msgstr "コーン" +msgid "Height range Modifier" +msgstr "" + msgid "Add settings" msgstr "設定を追加" @@ -1173,6 +1182,12 @@ msgstr "" msgid "Instance manipulation" msgstr "" +msgid "Height ranges" +msgstr "" + +msgid "Settings for height range" +msgstr "" + msgid "Object" msgstr "OBJ" @@ -1812,6 +1827,9 @@ msgstr "係数N" msgid "Setting Virtual slot information while printing is not supported" msgstr "" +msgid "Are you sure you want to clear the filament information?" +msgstr "" + msgid "Please input a valid value (K in 0~0.5)" msgstr "有効な値を入力してください (0 ~ 0.5)" @@ -2293,22 +2311,6 @@ msgstr "" "はい - 変更して、スパイラルモードを有効にします\n" "いいえ - 変更せず、スパイラルモードを有効しません" -msgid "" -"Arachne engine only works when overhang slowing down is disabled.\n" -"This may cause decline in the quality of overhang surface when print fastly" -msgstr "" -"Arachneを使用するには、オーハーハング減速を無効にする必要があります。従って" -"オーバーハングの造形品質が劣る可能性があります。" - -msgid "" -"Disable overhang slowing down automatically? \n" -"Yes - Enable arachne and disable overhang slowing down\n" -"No - Give up using arachne this time" -msgstr "" -"オーバーハング減速を無効にしますか?\n" -"はい - Arachneを有効し、オーバーハング減速を無効にする\n" -"いいえ - Arachneを無効にします" - msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -3086,6 +3088,9 @@ msgstr "現在のプロジェクトを保存" msgid "Save Project as" msgstr "プロジェクトを名前を付けて保存" +msgid "Shift+" +msgstr "" + msgid "Save current project as" msgstr "プロジェクトを名前を付けて保存" @@ -5024,8 +5029,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "ヘッド無しのタイムラプスビデオを録画する時に、「タイムラプスプライムタワー」" "を追加してください。プレートで右クリックして、「プリミティブを追加」→「タイム" @@ -5532,6 +5537,9 @@ msgstr "オブジェクト一覧" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "" +msgid "Ctrl+Shift+G" +msgstr "" + msgid "Copy to clipboard" msgstr "コピー" @@ -5559,12 +5567,21 @@ msgstr "マウスホイール" msgid "Zoom View" msgstr "ズーム" +msgid "Shift+A" +msgstr "" + +msgid "Shift+R" +msgstr "" + msgid "" "Auto orientates selected objects or all objects.If there are selected " "objects, it just orientates the selected ones.Otherwise, it will orientates " "all objects in the current disk." msgstr "選択した或いは全てのオブジェクトの向きを自動調整します。" +msgid "Shift+Tab" +msgstr "" + msgid "Collapse/Expand the sidebar" msgstr "サイドバーを展開/隠す" @@ -5631,6 +5648,9 @@ msgstr "Shift + ↑↓←→" msgid "Movement step set to 1 mm" msgstr "移動ステップを1mmに設定" +msgid "Esc" +msgstr "" + msgid "keyboard 1-9: set filament for object/part" msgstr "キー1-9: オブジェクト/パーツのフィラメントを設定" @@ -8675,6 +8695,23 @@ msgstr "" "強度の向上\n" "壁面層数やインフィルの充填密度を増やして造形強度を向上できます。" +#~ msgid "" +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly" +#~ msgstr "" +#~ "Arachneを使用するには、オーハーハング減速を無効にする必要があります。従っ" +#~ "てオーバーハングの造形品質が劣る可能性があります。" + +#~ msgid "" +#~ "Disable overhang slowing down automatically? \n" +#~ "Yes - Enable arachne and disable overhang slowing down\n" +#~ "No - Give up using arachne this time" +#~ msgstr "" +#~ "オーバーハング減速を無効にしますか?\n" +#~ "はい - Arachneを有効し、オーバーハング減速を無効にする\n" +#~ "いいえ - Arachneを無効にします" + #~ msgid "Start" #~ msgstr "開始" diff --git a/bbl/i18n/nl/BambuStudio_nl.po b/bbl/i18n/nl/BambuStudio_nl.po index a57134effb..d70ffa303f 100644 --- a/bbl/i18n/nl/BambuStudio_nl.po +++ b/bbl/i18n/nl/BambuStudio_nl.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-29 14:51+0800\n" +"POT-Creation-Date: 2023-04-03 12:20+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -523,6 +523,9 @@ msgstr "" msgid "Horizontal text" msgstr "" +msgid "Ctrl+" +msgstr "" + msgid "Notice" msgstr "Let op" @@ -820,6 +823,9 @@ msgstr "Verbergen" msgid "Show" msgstr "Weergeven" +msgid "Del" +msgstr "" + msgid "Delete the selected object" msgstr "Verwijder het geselecteerde object" @@ -838,6 +844,9 @@ msgstr "Cilinder" msgid "Cone" msgstr "Kegel" +msgid "Height range Modifier" +msgstr "" + msgid "Add settings" msgstr "Instellingen toevoegen" @@ -1202,6 +1211,12 @@ msgstr "" msgid "Instance manipulation" msgstr "" +msgid "Height ranges" +msgstr "" + +msgid "Settings for height range" +msgstr "" + msgid "Object" msgstr "Voorwerp" @@ -1867,6 +1882,9 @@ msgstr "Factor N" msgid "Setting Virtual slot information while printing is not supported" msgstr "" +msgid "Are you sure you want to clear the filament information?" +msgstr "" + msgid "Please input a valid value (K in 0~0.5)" msgstr "Voer een geldige waarde in (K in 0 ~ 0,5)" @@ -2404,23 +2422,6 @@ msgstr "" "Ja - Pas de instellingen aan en zet de vaas modus automatisch aan\n" "Nee - Pas de vaas modus deze keer niet toe" -msgid "" -"Arachne engine only works when overhang slowing down is disabled.\n" -"This may cause decline in the quality of overhang surface when print fastly" -msgstr "" -"De Arachne-motor werkt alleen als vertraging van de overhang is " -"uitgeschakeld. Dit kan leiden tot een achteruitgang van de kwaliteit van het " -"overhangende oppervlak bij snel printen." - -msgid "" -"Disable overhang slowing down automatically? \n" -"Yes - Enable arachne and disable overhang slowing down\n" -"No - Give up using arachne this time" -msgstr "" -"Overhangvertraging automatisch uitschakelen?\n" -"Ja - Arachne inschakelen en overhangvertraging uitschakelen\n" -"Nee - Arachne niet gebruiken voor deze afdruk" - msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -3204,6 +3205,9 @@ msgstr "Bewaar huidig project als" msgid "Save Project as" msgstr "Bewaar project als" +msgid "Shift+" +msgstr "" + msgid "Save current project as" msgstr "Bewaar huidig project als" @@ -5253,8 +5257,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "Bij het opnemen van timelapse zonder toolhead is het aan te raden om een " "„Timelapse Wipe Tower” toe te voegen \n" @@ -5798,6 +5802,9 @@ msgstr "Object lijst" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "" +msgid "Ctrl+Shift+G" +msgstr "" + msgid "Copy to clipboard" msgstr "Kopieer naar klembord" @@ -5827,6 +5834,12 @@ msgstr "Muiswiel" msgid "Zoom View" msgstr "Zoom View" +msgid "Shift+A" +msgstr "" + +msgid "Shift+R" +msgstr "" + msgid "" "Auto orientates selected objects or all objects.If there are selected " "objects, it just orientates the selected ones.Otherwise, it will orientates " @@ -5836,6 +5849,9 @@ msgstr "" "geselecteerde objecten zijn, oriënteert het alleen de geselecteerde " "objecten. Anders oriënteert het alle objecten op de disk." +msgid "Shift+Tab" +msgstr "" + msgid "Collapse/Expand the sidebar" msgstr "De menubalk in-/uitschuiven" @@ -5902,6 +5918,9 @@ msgstr "Shift+willekeurige pijl" msgid "Movement step set to 1 mm" msgstr "Bewegingsinterval ingesteld op 1mm" +msgid "Esc" +msgstr "" + msgid "keyboard 1-9: set filament for object/part" msgstr "Toets 1-9: kies filament voor het object/onderdeel" @@ -9224,6 +9243,24 @@ msgstr "" "Wist je dat je meer wandlussen en een hogere dunne invuldichtheid kunt " "gebruiken om de sterkte van het model te verbeteren?" +#~ msgid "" +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly" +#~ msgstr "" +#~ "De Arachne-motor werkt alleen als vertraging van de overhang is " +#~ "uitgeschakeld. Dit kan leiden tot een achteruitgang van de kwaliteit van " +#~ "het overhangende oppervlak bij snel printen." + +#~ msgid "" +#~ "Disable overhang slowing down automatically? \n" +#~ "Yes - Enable arachne and disable overhang slowing down\n" +#~ "No - Give up using arachne this time" +#~ msgstr "" +#~ "Overhangvertraging automatisch uitschakelen?\n" +#~ "Ja - Arachne inschakelen en overhangvertraging uitschakelen\n" +#~ "Nee - Arachne niet gebruiken voor deze afdruk" + #~ msgid "Start" #~ msgstr "Starten" diff --git a/bbl/i18n/sv/BambuStudio_sv.po b/bbl/i18n/sv/BambuStudio_sv.po index 4db1e9e5d2..d5830f9fde 100644 --- a/bbl/i18n/sv/BambuStudio_sv.po +++ b/bbl/i18n/sv/BambuStudio_sv.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-29 14:51+0800\n" +"POT-Creation-Date: 2023-04-03 12:20+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -522,6 +522,9 @@ msgstr "" msgid "Horizontal text" msgstr "" +msgid "Ctrl+" +msgstr "" + msgid "Notice" msgstr "Iakttag" @@ -817,6 +820,9 @@ msgstr "Dölj" msgid "Show" msgstr "Visa" +msgid "Del" +msgstr "" + msgid "Delete the selected object" msgstr "Radera det valda objektet" @@ -835,6 +841,9 @@ msgstr "Cylinder" msgid "Cone" msgstr "Kon" +msgid "Height range Modifier" +msgstr "" + msgid "Add settings" msgstr "Lägg till inställning" @@ -1186,6 +1195,12 @@ msgstr "" msgid "Instance manipulation" msgstr "" +msgid "Height ranges" +msgstr "" + +msgid "Settings for height range" +msgstr "" + msgid "Object" msgstr "Objekt" @@ -1842,6 +1857,9 @@ msgstr "Faktor N" msgid "Setting Virtual slot information while printing is not supported" msgstr "" +msgid "Are you sure you want to clear the filament information?" +msgstr "" + msgid "Please input a valid value (K in 0~0.5)" msgstr "Ange ett giltigt värde (K i 0 ~ 0,5)" @@ -2370,24 +2388,6 @@ msgstr "" "JA -Ändra dessa inställningar och möjliggör Spiral läge automatiskt\n" "NEJ -Avbryt Spiral läge denna gång" -msgid "" -"Arachne engine only works when overhang slowing down is disabled.\n" -"This may cause decline in the quality of overhang surface when print fastly" -msgstr "" -"Arachne funktionen fungerar bara när ned saktning vid överhäng är " -"inaktiverad.\n" -"Detta kan leda till en minskning av kvaliteten på överhängens yta när du " -"skriver ut snabbt." - -msgid "" -"Disable overhang slowing down automatically? \n" -"Yes - Enable arachne and disable overhang slowing down\n" -"No - Give up using arachne this time" -msgstr "" -"Inaktivera överhäng sakta ner automatiskt? \n" -"Ja - Aktivera Arachne och inaktivera överhäng sakta ner\n" -"Nej - Använd inte Arachne för denna utskrift" - msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -3169,6 +3169,9 @@ msgstr "Spara nuvarande projekt till fil" msgid "Save Project as" msgstr "Spara Projekt som" +msgid "Shift+" +msgstr "" + msgid "Save current project as" msgstr "Spara nuvarande projekt som" @@ -5166,8 +5169,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "När du spelar in timelapse utan verktygshuvud rekommenderas att du lägger " "till ett \"Timelapse Wipe Tower\".\n" @@ -5702,6 +5705,9 @@ msgstr "Objektlista" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "" +msgid "Ctrl+Shift+G" +msgstr "" + msgid "Copy to clipboard" msgstr "Kopiera till urklipp" @@ -5729,6 +5735,12 @@ msgstr "Mus hjul" msgid "Zoom View" msgstr "Zoom View" +msgid "Shift+A" +msgstr "" + +msgid "Shift+R" +msgstr "" + msgid "" "Auto orientates selected objects or all objects.If there are selected " "objects, it just orientates the selected ones.Otherwise, it will orientates " @@ -5737,6 +5749,9 @@ msgstr "" "Auto placera valda objekt eller alla objekt. Om det finns valda objekt så " "placeras endast dem. Alternativt så placeras alla objekt på nuvarande disk." +msgid "Shift+Tab" +msgstr "" + msgid "Collapse/Expand the sidebar" msgstr "Dölj/Visa meny" @@ -5803,6 +5818,9 @@ msgstr "Shift+valfri pil" msgid "Movement step set to 1 mm" msgstr "Rörelse steg är vald till 1mm" +msgid "Esc" +msgstr "" + msgid "keyboard 1-9: set filament for object/part" msgstr "tangentbord 1-9: fastställer filament för objekt/del" @@ -6792,9 +6810,9 @@ msgid "" "quality for needle and small details" msgstr "" "Aktivera detta val för att sänka utskifts hastigheten för att göra den sista " -"lager tiden inte kortare än lager tidströskeln \"Max fläkthastighets " -"tröskel\", detta så att lager kan kylas under en längre tid. Detta kan " -"förbättra kylnings kvaliteten för små detaljer" +"lager tiden inte kortare än lager tidströskeln \"Max fläkthastighets tröskel" +"\", detta så att lager kan kylas under en längre tid. Detta kan förbättra " +"kylnings kvaliteten för små detaljer" msgid "Normal printing" msgstr "Normal utskrift" @@ -9025,6 +9043,25 @@ msgstr "" "Visste du att du kan använda fler väggslingor och högre gles fyllningstäthet " "för att förbättra modellens styrka?" +#~ msgid "" +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly" +#~ msgstr "" +#~ "Arachne funktionen fungerar bara när ned saktning vid överhäng är " +#~ "inaktiverad.\n" +#~ "Detta kan leda till en minskning av kvaliteten på överhängens yta när du " +#~ "skriver ut snabbt." + +#~ msgid "" +#~ "Disable overhang slowing down automatically? \n" +#~ "Yes - Enable arachne and disable overhang slowing down\n" +#~ "No - Give up using arachne this time" +#~ msgstr "" +#~ "Inaktivera överhäng sakta ner automatiskt? \n" +#~ "Ja - Aktivera Arachne och inaktivera överhäng sakta ner\n" +#~ "Nej - Använd inte Arachne för denna utskrift" + #~ msgid "Start" #~ msgstr "Start" diff --git a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po index 8b9ac86a95..6b6f7872c7 100644 --- a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po +++ b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-29 14:51+0800\n" +"POT-Creation-Date: 2023-04-03 12:20+0800\n" "PO-Revision-Date: 2023-03-29 12:43+0800\n" "Last-Translator: Jiang Yue \n" "Language-Team: \n" @@ -523,6 +523,9 @@ msgstr "附着曲面" msgid "Horizontal text" msgstr "水平文字" +msgid "Ctrl+" +msgstr "" + msgid "Notice" msgstr "通知" @@ -809,6 +812,9 @@ msgstr "隐藏" msgid "Show" msgstr "显示" +msgid "Del" +msgstr "" + msgid "Delete the selected object" msgstr "删除所选对象" @@ -827,6 +833,9 @@ msgstr "圆柱体" msgid "Cone" msgstr "锥体" +msgid "Height range Modifier" +msgstr "高度范围修改器" + msgid "Add settings" msgstr "添加设置" @@ -1176,6 +1185,12 @@ msgstr "零件操作" msgid "Instance manipulation" msgstr "实例操作" +msgid "Height ranges" +msgstr "高度范围" + +msgid "Settings for height range" +msgstr "高度范围设置" + msgid "Object" msgstr "对象" @@ -1798,6 +1813,9 @@ msgstr "系数N" msgid "Setting Virtual slot information while printing is not supported" msgstr "不支持在打印时设置虚拟槽位信息" +msgid "Are you sure you want to clear the filament information?" +msgstr "" + msgid "Please input a valid value (K in 0~0.5)" msgstr "请输入有效的数值 (K的范围为0~0.5)" @@ -2284,22 +2302,6 @@ msgstr "" "是 - 自动调整这些设置并开启旋转模式\n" "否 - 暂不使用旋转模式" -msgid "" -"Arachne engine only works when overhang slowing down is disabled.\n" -"This may cause decline in the quality of overhang surface when print fastly" -msgstr "" -"Arachne引擎只在关闭悬垂降速时起作用。\n" -"这可能会导致高速打印时悬垂表面质量的下降。" - -msgid "" -"Disable overhang slowing down automatically? \n" -"Yes - Enable arachne and disable overhang slowing down\n" -"No - Give up using arachne this time" -msgstr "" -"自动关闭悬垂降速?\n" -"是 - 使用arachne并关闭悬垂降速\n" -"否 - 此次放弃使用arachne" - msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -3079,6 +3081,9 @@ msgstr "保存当前项目到文件" msgid "Save Project as" msgstr "项目另存为" +msgid "Shift+" +msgstr "" + msgid "Save current project as" msgstr "项目另存为" @@ -5009,8 +5014,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "在录制无工具头延时摄影视频时,建议添加“延时摄影擦料塔”\n" "右键单击构建板的空白位置,选择“添加标准模型”->“延时摄影擦料塔”。" @@ -5504,6 +5509,9 @@ msgstr "对象列表" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "从STL/STEP/3MF/OBJ/AMF文件中导入几何数据" +msgid "Ctrl+Shift+G" +msgstr "" + msgid "Copy to clipboard" msgstr "复制到剪贴板" @@ -5531,6 +5539,12 @@ msgstr "鼠标滚轮" msgid "Zoom View" msgstr "缩放视角" +msgid "Shift+A" +msgstr "" + +msgid "Shift+R" +msgstr "" + msgid "" "Auto orientates selected objects or all objects.If there are selected " "objects, it just orientates the selected ones.Otherwise, it will orientates " @@ -5539,6 +5553,9 @@ msgstr "" "自动调整选定零件/所有零件的方向,\n" "有选定零件时调整选定零件的朝向,没有选择零件时调整当前盘所有零件的朝向" +msgid "Shift+Tab" +msgstr "" + msgid "Collapse/Expand the sidebar" msgstr "收起/展开 侧边栏" @@ -5605,6 +5622,9 @@ msgstr "Shift+方向键" msgid "Movement step set to 1 mm" msgstr "沿X、Y轴以1mm为步进移动对象" +msgid "Esc" +msgstr "" + msgid "keyboard 1-9: set filament for object/part" msgstr "按键1-9:设置对象/零件的耗材丝" @@ -8572,6 +8592,23 @@ msgstr "" "提高强度\n" "你知道吗?你可以使用更多的墙层数和更高的疏散填充密度来提高模型的强度。" +#~ msgid "" +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly" +#~ msgstr "" +#~ "Arachne引擎只在关闭悬垂降速时起作用。\n" +#~ "这可能会导致高速打印时悬垂表面质量的下降。" + +#~ msgid "" +#~ "Disable overhang slowing down automatically? \n" +#~ "Yes - Enable arachne and disable overhang slowing down\n" +#~ "No - Give up using arachne this time" +#~ msgstr "" +#~ "自动关闭悬垂降速?\n" +#~ "是 - 使用arachne并关闭悬垂降速\n" +#~ "否 - 此次放弃使用arachne" + #~ msgid "Zoom to mouse position" #~ msgstr "放大到鼠标位置" @@ -12305,8 +12342,8 @@ msgstr "" #~ msgstr "正在准备设置页" #~ msgid "" -#~ "You have the following presets with saved options for \"Print Host " -#~ "upload\"" +#~ "You have the following presets with saved options for \"Print Host upload" +#~ "\"" #~ msgstr "您的以下预设中包含未保存的选项“打印主机上传”" #~ msgid "" @@ -12412,9 +12449,6 @@ msgstr "" #~ msgid "Slab" #~ msgstr "板坯" -#~ msgid "Height range Modifier" -#~ msgstr "高度范围修改器" - #~ msgid "Set as a Separated Object" #~ msgstr "设置为独立的对象" @@ -12602,12 +12636,6 @@ msgstr "" #~ msgid "Add Layers" #~ msgstr "添加图层" -#~ msgid "Height ranges" -#~ msgstr "高度范围" - -#~ msgid "Settings for height range" -#~ msgstr "高度范围设置" - #~ msgid "Delete Selected Item" #~ msgstr "删除所选项目" diff --git a/resources/i18n/de/BambuStudio.mo b/resources/i18n/de/BambuStudio.mo index 945cfbc6d28e562cd77777f0b72e20ec23220649..2393438f98e764bcaf79b9848d70087454ee4c7e 100644 GIT binary patch delta 48082 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 KYF4+NwBY~5`Ij#M delta 48487 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 diff --git a/resources/i18n/en/BambuStudio.mo b/resources/i18n/en/BambuStudio.mo index 954d481c88cb9aa2fd9e344560a6c128f4371d0f..843012d8ca06a5f96bd378f124ea30aa72a982af 100644 GIT binary patch delta 47669 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 Ou5Ot(b#=?4)&37HQ1Frf delta 48218 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 S%8N37ScHGZu!wBs8vYl^=PSJc diff --git a/resources/i18n/fr/BambuStudio.mo b/resources/i18n/fr/BambuStudio.mo index be805ea50d1c8b920bb8d8569f5302c8c454c687..cf2cedf2f443bab251d2af96554c39159f195247 100644 GIT binary patch delta 47653 zcmZ791#}h18 zy!V{j&&=%X_{`oI9W^9i>-X61o%oTaI=ogzbDWgey^P~bj_Ek3Mk&>ClJ0Pv=$H(X zV>&F3MX?;Zm=BL)G5mqt?iAZeSy%~uxF1X4K`e!lb~#Qkw>#wtWF?_1`r~|zfr~K* zuEUCW9}8gEZpX=ntuYx+!&tZ;Q{Wy{gRf&^{KNVg>7x^GkK@F}+qC%(^ zm%%>R2ovHJ)Q!(j1-{1Y_!dWFx_ypQ6W3vN^xto$qBd&Cr($xvYU6KFBc1yIok&C= zKLPb99MzD97#mw*JnV*=ieZ=rx1r|tD#pjk2h9jJ!7$=&P(wWhRqh;2f-A8W9z?By zB!?LPx&#^?GDEisH8=ZE4LOG@=mu(P{y=|xi)z^4m;j^wZt|r>OU zoV{Kf;}CE9JL9j6T}V)Y{ZS1VkE(b+s(=-!e4DU6?nhM|de}@+F>5VrJJiSwK;@f= zTC7V@Yi%E@{G+Z-IETu34b{WvsES`>YW$3;Fxe5u$%y$-J!p)Lu@nA;r&0HX9yR&$ zpr)=7ssrP!v#joN0_yn|)LJ--D)=_$#}}x@mhqV56vVoi8z

    Jc?v-+8#ICIQt2+ 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 M|I+ns3#`5He{H@<8vpkU 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 diff --git a/resources/i18n/hu/BambuStudio.mo b/resources/i18n/hu/BambuStudio.mo index 61b1687dd1e47f9baff11bf62b3d92f323a1c770..654d3103a107cc9999afb348d2d42adfa5f7e93d 100644 GIT binary patch delta 47668 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 P?NVRI+)I6nO{w>993lZ0 diff --git a/resources/i18n/it/BambuStudio.mo b/resources/i18n/it/BambuStudio.mo index d992ffe6827290efd8a6dd47eb7d4840f69b3ccb..b75e439c969bc1d7973e030f4e92d78f8292ea5f 100644 GIT binary patch delta 47656 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 JuX1~x{sdYn-`M~F diff --git a/resources/i18n/ja/BambuStudio.mo b/resources/i18n/ja/BambuStudio.mo index a557a46bc1fc5c70b41054731063bfed858ce2ae..4e5281379504c38faf3d2fd934e570b8175969d8 100644 GIT binary patch delta 47653 zcmZ791(a3Q|M&4TGjw-%!wlU$#LzG_NOwth9~$WvDM{%@kOl$i5@{qAq(lUi#{c_s z_t)R!dd^zc*RHdBpL-`5|GXIY(z&?)twd4gcwFmZcwQRp8{v7gVtd}{iAwdn6uUex zCZ@zxm>I*d3|2-Ti{ddXi~k_Edu4Z17gon0Jc#A+5LUn_dps`(w|i9x1`t8KakQpXVjORG6Cfy-)(t zNvMqRFcQ^)7O09kV^r*84nj5PTYR!P6E*U$a4@bwjXeE+XGV-dJTt1k92kf8y*vce zP)SseBXAHl!z6eab>kCMh0ie`zQ9SC`GDuu!%bKRLk_y7Xn>mXIhYEsSo{TQrVD+~ zAd(U&MnEH~h3ZICjEn6tA@)Hn#aK*_-=Ws_3MRrDhujRd#4zF=QByq|RqrB9j%%?# z9zyMb6RmaplsWmM$x*;e4oi zN}~o;+437;eB!N+F#jsplLS>b4Ap^YsD_uIDp-Rmw+*}CK~%$`Ke#0-Yt}bAqh@9} zs@x3JX8i`W*AAfSKjvG)c~rrxs1ZIzHT)dY;X6!=DUW(yHY|!7K?`hw-LW~ILERU6 z%#|yQTDoSa0ZcU)nEq-48u@nAUO0xT_$C&^-%*<_+i}k;fsL>b&cr2n3@PGuI^m9S zzLRb1=QxQd&=$p&KO-;JqW}mV*qN(Mq>{A5<~F->Nq_?Ztyysb{*`F znz7+n1!rO=ykYsDP$Q3bh9iyPsF|6Lx^F(lSJyTYs7b2UKgW`|7Q^rX>b}J1+$K(gafydwd`(SpOQ?#Oi8sQWIK<-Lpr-N! z#=?gf4PT;W>>WnIxaZvn6JZMCX;2+6jOuVX)Kb^7^j7HSBcUsSt+)siVC^5>qqH@u z;bEw93$ZqyK~gaV$gikE~33Y$` ztM0xus7G>`Pe9N5$~XeQM~$fbHP0KVIKIUS*J%t(-(b1$Pt*uo{LDKiUckOs@g|+d zU8s1OTb?%xx8YbUa@%!yFKWj99|))?4^blzx#MOcDaIq70kzrkVmd5>nwbWuJ5HJ`Tv!GD*Qc=;CZht?)~CA6bse!)TkSC zp&HDKYM?A?t*fJEpamwy{-~LqY_3Ah$RX5ymoWkDd-n+FhL^YwWB%%KTVxs`;1$*Q39Tz$F5iaNq;CRtqpA@vW!^ zFQP_x1GS5vp?3Rw)Xc^F&27rWn3MPjtb=Q@EPlWeSn8p>e*i`!KIS3wABDgq5;UdL z%_XQ!vl*x3F&u=AAGxW!fO;<6LXGGH=EZoA-IA3-ppS%sE(~ijeIYvV<#{t-oZi`>#1wFENW!6F$Olm=-3L^U?LTT zD4S290SRGP14p4cbPfw+$TQC?fW@&mcEuvN64mfcizoWSt$kJ0qqha>{vlWjx1g5v z8EPgHJa;qWCnFG#g#4(Ca2$`7FgBh=HFO;lVEjK_hcci(Zr4NI*8^2gKa7K8%o&#c zHEL!ynBQW2o&P-qv=*mOJ->yj_&sLDyw(q1Jk-#Sfs?JmyQ6 zo&`1X@>mJmp-#ykBFb9TXHtdWgaXQAt z)2RC{qn73dYH!`eYnbP?+r%;6F#lS!^aRw?JeUN_q0$>-GHj1p`=O|cr=TjHiCWXI za0xEPzzn^0UwG8Q5Yne(OPr0`8?R6^67-JwS3;V1?zrT{?8FP89!O14BN}FoM@``j z)aG1>>ga0hjNhS_BIA44P)<~bil7Ek5mR7O)T!wEp7}3IU<(O)c0a?xd@C!-MASwBZtlN zn3VWU)DpZzJy@cAa^>QpMx4sbgz8W()Kb>Mbl4V0;wV%-QU2kL3H_u5bS##k8h(UY z)4x#-eMEIE8ee+W$CP*qyQ7w%L{O01{iqqNg@dsJ&cVA_4F?3fa)&Sv@sr5$_Pw_R z>XMK?B*<%my|ERZL9K0`C_#Z;UmA}Pk3_9ulBj_Syxh2fcs(qELD5`#DZE9z4QdI? zMGp#$yasAUo8u&%|2_mX(tl8E8Y6}?1?srvKzizxK&@#j)X4iUFUSw9NoNu?HG|E`n4b98 zm<#u#I`jxNvNxzr`N`r5;|B$HdvY@jHDl#48#Y4Cz;MeSi>iNqeBWj4CZP-o-=k*2 zOAr+J!XYQ>#s;VkG_&~Us6Epgb^L~))_AnVr=aSagL+J+FOvZE>}YVmSr9aMv@F|ZWo5KKe*7}OFhMRoKJ7Qi=H z9z&CAK%Bqs1hg5ZVF%oVg)vz&H_{rIop@_(hZ9g8eTKC#D0xueQ*LeSM|?Ww#b_y9 zM~Yx-;`LDPEj>^JTZe)3zlVTEco8-Aw@~N%sinU`ElqGrxBF9~^3$W9^`Vv?iJFN9 zsQOxhv#K-81) zcg&41Fbif#@1`=sY=A1)9xq`R)XarvaPKLNQ1$LaZQ4T_e0RgoBxuBUQB(E;b?!f+ zmLy6>cU%&o)-pHF!>SlKHK_aFp~}b3O1uGTU`8?ytY6+nTBBC*^KJgZq$?NBC6+qpel@>%T<&LRdFb4qyj>ihrnr}w+@H&2HC2^R6}7|%*bUWi{X8zeDeAtys3{$Txo|3m z;x1GN?_2&0)XaUrU`&wLEqUU+oPYH!9|^OuFmAw;SP2K_a~~`YpyJWD9ks{u6z2Tv{MI5tQ`{bP3i_gEU;=8S zb8#%LLhX&*MO?Wus3oe0dMT!&jxd!a=c_aNzl8d*=&k_q1xM5mh-PEJx)S)yo$xp3%6%Dt|VFq^+9RQ00B$B2dYD(Q8VdJBA|DvFHsFIG}mAr;yW<#u7zsg5$eX5sAu^n zRE0qiw(C(-n+Da9T&RH*N8MiwwO1NrE1mzA1k}JmRK-V7Q+N(P!@H=NDOo8f@Dq@F zs0yQ3b|Xt;hMA?z8mJ{{X7({BnoBX0&i_sVp%lD<+C0&#xOc-))SESRW-$db`CBpl0wWYNl^l{2m70|KAbNGdfm{pumsOvZ1DU3~C1Eq4Ia3j@2d9 zOuWMnn6{=XpQ@I7v&xIwd^J%WYK7Vp9Z?R$w1$YEGd>^Z>Odo}zZ| zYgC1?Bi%Vpg!+t_8a3j=sHrcDy1y3cbkw)>&rlDvPG;Xo&cEJ#Mv$Q0zYKN5CM)nQ z&LMu#@*CE6d!wy6-P~tBMjhwmb=*L5qaHX_P{+3ps>5AS9UkKo(1@p^&iNYD4ZBez zKa47P7PWR)Q62mlRsJq&sa{}Fj9%BxR9V!UPd(J}9D`+XGHNMKV>R@z6VNfqTF>2B z3N=NwQ4Kdkb)*C8U9cBwFHA=r)Agth?MFQi4r2{Gin=dxeRrzTp*C}Q)J)XHtUCXn z6VQlfpl+Ct#qk@=iMK61W&^iGNl+cjh??q9)CkL=I#Lz2M{1!OYJeJ0cT@)kqh??t zX3+Wnihvs4h1u~4Y6MTQ0v2x=kaR6Q9` z9VvuiSP9!;AJl!9n{ocNRu4$fr`+E$5@R=apH7>i(x+oK+=#XC5@x_GE!>(%pgLF$ z^fmuy#~z|O=07K(5xqrix)`n9u}g+Z4@XUDBx+>6Ej|v_ z!8NG+Hldyi`%o2ML(R-R)UkYx>fi?)j&a)r_JZ$CCXgVA&t&)m8D2X#)kjekT}Cx@ z+tTl&D*g-AaIE$&KLu(j)1khf5Q^G6RWJ{BKyAV~s2M+mfuH}MCZH*~WZp!L^ge1& zyhU{+Y6sU)Jk*0J32F(-phg&hT8e5Ijt#Ibeu--M5$X}0tfPCEt%YfI{?`-GgXScv z=kYqZ;~0vCiPyudH~}^CO{ftaK~?w?3t?zy_mxsBY(#u2s{8{~2i{|H%+bXSARK*d zrY;0D!eOX$ISw^NU!rDU32N=uqh@L!YN~%g&C~^qzz3)SgnjNhR2B7n8E!s8)mOi( zYo}FL&i_T$z9$K)IHG%y*AQ!BX9;R@{7(|ws9r&mzm z_XcL7I-0q+t0y1UCSC-!cgFYj-LrlU2^#S|%z;l)4JPg5PC-W0Qslz|*um20p+>wK zb?kmXmAisE4RQOrW0w=PR8>*WjghGKcKQT#%nqTZ_(#+d+(XUC3k=0~SQ)eRb8Ffi zRem&T>1Lxwv-cJ#Lq=tbZLYN~1ua0Q#7-d@|FHqAiP z=Y;8~&AJNJ!6&G4FHs+4Vh(fOoR*sB5T=*&Q{NgHaVvLVe(vjvCM!%im)0L#P=(Y3Wxmwa))T z0+}(&Fjrv?)Uhm%8c_|@+SWsz=hkL_R0k%R3sD~~H=yo2hT0ovQ3Je!nz7$3{x|x0 zNr*Pw{luaO<|f|3oQ+!ZL#Pg3v-n5MMm!0pM;$1MdJfb;Eln%b)DJ{8INY3q>c~QK zz0djA$o7(;N9Re@o6RNE6uz;7-U!!F0@TPdqVjW~HeEi{$g893X^%PuJy9JTg{pTJ zs$)CMy(6sQLnM?V;|vzX_#@qOpfYMHdZI=+8r6Zhs7?1ZYJ_W1Q@smy+zz2Scn{Tq z#~6(7@gjag&D2l+D7Sf@pnCoswZ`vJnA5Xl9#uhI)B~ssY9_~{IyMJ& z|5DWRVOZUB+1T^ycmeCT`a97kCjzTps8&z%@YDqSrX5b*|QG3NeMLad-%bJ=$!XNo{fJu2o2U*vKy~O1>NLa~?;6gEIf<7> zHP{i=kpY+kXQ7s6ucco@Ex})y9TR-Prq%f`MnDbLMQxgh7O{hY-cV1Dyl;dQRSjcaHk|8<|ZDBzAF5TfYx>p4#ufi8)Hs%UqCcL&BR<( zN7tY#+=|*n2h1N($M6(tr1w!B@Fuwqr$H@Q7^=RClkEIABtc8i4)v(*jCpW8s-YdI ziVvff=q74r9-+#AL@h2%pvpH!EkSS8qkS4`>Nlc}?d8dwe@(@G5^7=MDQ>s6 z!OFxtqei?1b;E8vj3+EUWvbf~3sD2uhU&;p)XdyNb>yKLJk6C$gQ_p1Pe3Eehb^%b zj=_akDTo5o-S>Dp&2Sa&N3HP@)CY;Ps5hOcGhKQ*RDC(HI2N*achue*j5?O1P&4b# zA~1}=63a+8%dJ&jRKc>?0&Amg*n}F{UJSf9U?}lxsN)%Rw!1F@1|HQINqP=c#|NTj zY7{avzBitL8d{1~a4Yt~_oz+OV~+dCH4)YDKGaAKqt^Zumc~b@8Oi>oI}I(cIq|Nj z<9pJ)gBr-+7*+58A#+_qOsqpjGE|2;;bI(wVVLr(Ag?J_!h*OAwFxg{8GMX7O*!Ye z4Az!uT03#Az6KWG-+cEr^PjG|QvbxGJv22B?|w z7P`$A4f7JsfZE)(F%J$$4P*oM#p@XO`G4dhw;NmGQ8Id0Z=8PGBzl2Q@>v7Q16v235WeY9`t)=KO19eM!)!7=l%C1op<0s7+OR ziEE$=s$2uqd2WJw@(n_DXuLTcHGp}@Aic$Smw2gVZi&(@cQaFFx$k~2rz;5!DX_&d zVytjeUj#McGN^`Xp?cm7HIi=ch>>et`Rk|#pQD}!vDdneWx}$=%c1tfNYu0c zJM4<*kam5q)H*lC)li?&nqUSThMI}5QJe2L>Lb(@REMvlPQgReQoKSv>!YoA9m|X= zR~*%`%Ba260`>gpjEQvqdl4v4!Wh)KK88i{J!(%B+~6L;6LC24JE&vYa$}IU1V7+X zT(rr3aw@yo?TOadjdUMp;O|&V@hxs9&*BuF|8!e}0{<#yJ!T+Yc$+(R4N*_Fg{TUy zV>#^lt$Takh?=2)unFee?#}lZJV1O4YUz6I2nzi6{6^FhHph2Cfq$;k3;ls4+#ygc zhzHP4*Yg#-f&#yma|pF|Wp}&pUiCw5%K50xcM>&Yk1Rj!9`|*Bc`QQu0L+RT@g!cv zy|{R<`|*9VeVqSr8s5B*8}ZNmLEc;nWIO1-aj+j%QO@s!ydl^M>*LQDf%y-)pAikf zI>diOrDs0uzO3(zZHVu{Vwm!XTY|c%)3Wpk=f4Jl<0O>9q(1}&eowzX&L{o}^>KOL zQMWnwp*Gtc)Ny)&dSInG<|=H5^@vYG?WxanFe~SKWI+7{(_( zKUTnUsI?!9G4T{?1}~xBGqPWE?+Ib3=STsJrSo5yfZja9QP1Y8s17y3EST%MdsIfE z*1R1meX^x*LA|XWMK$yi)qyu=@C{dQ9Mpp+E$ZWZRt$XopVJCNpgPhJ^~7t5dPa9g zJ(@?OIyes#<64XFM?DG8S^5ps+wmW$&H4c~Q}KRwGms8dPZkXP{J$^(JsK;ZDyoI* zNE6g9Zi^*xC2C~%P!&AIX!sHJ<`m_oYd9UMo={Zzq82ZQDpwQJV8@%Be+9;npf`u5 zR&W=p13#cDIExy=Rn!ze#Hjc?>doh+#pB&__a#Bym)6XVx-UPbz#^CdBX4p3RZ&k8 zv^M=w4GqVPI2Cn#Hls$m-|~O3_$Aa{`5D#V`rGdQ9jJ~SMGfSx`50BtOVkp-^9iWI zn0MUNq(prlD2Sn02~|OFRJkFjwV#CQ*kaVK-(c~V*qV6IU01FxY7Y&-dN>&?;~muA z@N?XAffA^KHBdckjcTALYU+lg)^s##q|;C%oQHZue~aqi6V&E=k17}A7k<+b6QQ1@ zNiZ1}LpHVVMG{cM?NLiG7&YQim;)!F9xUIYmg)woLw8Xfcz`+`LBF~OOLA2CcBm0f zLOnqjq3XY4>9+%N{{JMPXK~1V_oT~+>Og7KrmTdTkrt>^(hW6&ftUfOVJ6&+>fleP zhOVLNxr)#s4i701`J4M%FVVvw?>zC(9=U(Hkn6Gg8E(uc?p>|~s)5<4 z8JmwOnA=UL29G~=GjkrbbeB*|@e68(o}*?Y+VAc-r$Ap*RiA(|hMNEFgx+AtAz8(i*>_376{|I#~W+5KqxqENO{hagPj)ZO` zsGJ->vyCB&flEP*a)crK>O%s-g_2DKCJ^uZ-Hwk*K}X2ensbpgOV!GvFqRpGVbm z8P(21)Si0p6HrfLy>g~D!_3mCg0)Z;G)FB-57bEeqMipsP{(f?>fLQIs-b1(cGP{x zQA>Qr()|Yn)WBO*M`HZtW+Wx5!NQmeE2A3hZ4N^1ff42yRKs7OW@r+s!C9#LzOwjY zbA?Oyy)^`MOg3W{+=UhJ7HVxX{p~)AcBe7--YVnIg8)6_+RKJVs4_obH^#gd$-n^usS!?#40!s>*GD_fJHyJz4A3q zBfbeW#brOb&;R96A5!~cR{R$AW_BIb!Dye{48;1x`B%m1NN9?E%yXy;LjQ3c>Wo_B z*{I#S3U&SuqMjEgQ4K_A9<(F{QTgE(uV(Q^W^40v&kqhvO+PC*)-qAxg~Pz!#y(QRzicUOW8OfOe~+psA-|C>Gol8R zA2mb8P@6MC`Lypv63~;cC1%7iSQS^I8h(!bFisrjC{)F7PY0IB$_?f*^z{+yE&=($Odik03*ZpaYvMpWf#tD${NTWs(_>K;@5lLg9ko>b61WjB zLOrlnpvtXB9pB@a5AP-j_5+_@6D14|{F+^3)X1Kprt%Z&h9rrC0}r0us5hh8sQd#M zj+am$IFcoHYu*plkuOl?Hsd@zYWb~_xYN-m3FlwOWPl|MF@03Sqfu+N5VdA&uq|%G zR+v0#aNw)lfvAq}#J~tq4c|qr{cF_ypRg##NERG;z=it+lrS7~;|^58U(IJ2SZh>8 zF_OCx#z#$QCR7K@nAK6cy)kO{4?yjaiKyfFy`?8h;qLQu63`7ruo*VMrnnU~l6Way z!R*+Mcp+5zd6vEtrxO1G)xr9yTz*s3{ew{*nT6`eN>sU<$Wr>=uLM*uerjh9)X2(V z32csw@GI<&MbfwizQNVRkDxw+bxRu@_*c*XSGCRlOEaK6!xcGb=Mm%*^H|6tiF7X`Mg1tR>5EUPq-E}xg4z~$2 zqB>R-HPG6Y-UNL;aC#EZn#@G?c%BtlZ|R3npIA;<`c3mCYD#0~bS6X9lNnV{E{m78 z{EC)d$849A^Zx|}2auqidAWiE|IQ~Cs)9PG2HK&{b1zf_^HAlNpvtYa_&(Iq978R^ z155uKbsW7=>nH{~8tS`(xh$cCSq}A}se-Do52nYNm;<+>X6^>6V;?O&YnXcztA*Oc zeNpA6n_F=`@r$UvGt$rP3amsmcpNpdm#7|oG^6Bk9gU4jPic*p31MgXS-a>9ymqkr+ zV^l+fQ3Dx?TJtri4j;hH_!5ibio(HscI5osA`s|V5qCpT)aUq`s444WEV{i9E~-Kxurgj1!>=VPe6~xyv3azP(56P4e$!;y&-oA zH{zzK5%)!n^h;F!e$)q)r>G9bFX{4=nPpHN>VVy_CkB51{}usF(KA%VnMwr*exOhh z(-U8eA$R~)!C}-MIb-oV=3`X3SEvrWK|Of>LG7UwrQLm5Q8QbtH0NIj=WzoKR=QCYVsYoL~7gSih?{~0Wa7cm1S2>0Du>gj&jl604DViJ6a`ntpa zNI;+c;zu}hp=KZgHIlj(Z;w@p_r}Dy7rWwl)KZnM6dd?n&&sHo*ovB&v*vH8j(e3| zy$O)b>wB3kp*pJK78dV~>hW0A2p8gDT#l+JT@}|r9#lswqfSE;ER3VDA?`$d!irxt zIPg>O%2=Cte~hN{e~f@CJZs*4iR-$HN1L~{f-!L2t)^&TPFAgVuw=U;j4Y#W2M&1*b6Q6)OUb*WB2fmkE z0jCh}f@Veg;fva#Ls-D-V%@@6)Tbj%`k$4r`9jt#obP2Lpl5g~)QG#FHrr@a1rt#{osXL86{w1KqrUfZ8+BaMv~nG3hG~g+ zM!m_5$5^-%b!rY{BtFFgI{&3wy9RooMluN1&^U~N3sF=34XR^nP~|qGmS!JT#8)^9 zi??z4dr^Dh1Zp5ZqXzgCQ)1M%%oy!^=?Q3!+L*&JFk;kqL{^|~Jc*jxUr;j;wVg8; zYRw}p-W_#1W}!N8%)D;-zoY6))SmON5rh)Z1E`HT#oUR>N&f}4MDI}zNB^(45XyCF3yBP(i(3!CLpkIYE35o%;DQKzCe zY9OmooB1}@!%Usr9_Wu6z$zS$mr#45erMlh4D0NsY#lZt<2GtWigt0EtPS=gz8Ll7 zOYpfXw-~j_UZb9PIl8(}PHj*l-Dh4y&D3A0wU6D+#k2YZG}4l&HLZf0x^Acu4nQrz zMASDFms$F1a}VlW^DL@?d#Eqt-(V$d(A}-|LUTK6sm@y5|D8Z*5~B5R1$$yY;uBCa z@ek^TMm^os_D5~PU8tqIVZK6@i`&Z`uP~fWd?+qfdT;mcxdCybMrtRxSSRA!SB2i1y664}|tc$l$Gnc=go9c?FW7`7N@%E@09v_hN zH-mttZh;lpf*Q$Bcokou*7#I^SMCEUKhXf!k^HD{RFp$CJQTGTrr}&Xfn~AvK=&or zQq+?Fh*fp|ZxP6YIR*uL8?g~;>Z1+j<984}M^!j{i2GV@C#r%PL*4g`Kf}NX&Gx7n z>x$~o7v=)X--tRT+cEI(f8JPu*uz}K=};XB#W1{X>CuO~{3K>Z)Xe2UEmcKSM}}Db zDAZC-!%VmsHIPH7Pf{O-bN)4zSvZEW0&0!gpei1Ns$f2<;I;vbei>F4_pJ{|uP|PwSP{*(aHpX748&9I9@(SwF`q)f2(luBYmER2Y zUeUwsgZg>F0My6s(Wr*MLY3d>6VM31w}c;2J^vNe@DtQ&cw_Naquh<%P{(Kls{B0E z$d{OFE&W?mLwit5bQU%BQAfLu__+xjC7}YUqF7_xQY1t*kPp?7s;DV$X!b^Rd@8De zuTf97Ef|caP)m9i)v@1kA-={TID2g1)bRJ;#sz!fBveNoqsbV7$FM8L9q%4UgK;9K z;W_Ff*^mkD+5aV~Bd1Xf{cQ0Es7LtUsAqk~iLP8V)C@Giz~BEIML;9_3iUww7L#Gt zNp9DcLRHif^?iYfsFAHgHGCA0;bqhed_CE@6SdYCFbp4}W;p2-XBv#I^Pic38Vtn* zSRVC6t7q}nmfsuIzyymgM{TOzm=n*TPS0D^CQd!oeWVLVeNvi$n%SeMj>nm1pa0Vk z(1&96m=)tfF)w4%f8sA#H=nR)$8P#ATi?>5{yf5~{S*RI^In$+wViV%kQ1^Xp zc6QC={3~#R1l@QI)uH#OFOQSYawE-&n$ofu3)@+G57c|ZSkxZbfokBc`4H9c9~S?B znz@kK?wegHeF7>l3w7fXREJif-q*jg{8Q#t)Kc6>mHUKMFy0)O-UwA+PgH%w%rU6b zF$uM|=AZ`RFDIZU)JD_|yUp)W4IM}I_^zeDMy=f^R0k4%>Eant_ZKotqB>F@wTB|H z5VpdOI0u{U~E)=7SxjDM>SXx zwG?eFy$foohFSU)R0n6Huj8@SGNLYW4aGrCc{0?qJUgm_T&NM0KsDG9RZ(Y4_bq(^ zsskHwAa1vKp08bp3!`SN{MVfS&IFp0po)LMXLuLY!1=|&f#3P~#e87~Eph1yP{%aA zncu8nHb8Z-BWh-bq4vT;)J%WBg!8Wge^`O2OWm={Viq%Nn5}R)<@;hhd}#(RbMb^` z1~ac&#;j>JLv`eH-x8*qi_MMZKI}@t)2OvBzT8c1CDfACM5Q-Jy~}m6{8^|OosXKy z9jFJ@37moNQ1|!!Q1$$7 zhOBbWm6WLT+NgRuVBr7%(~ZDx5++zi#no;E)y>aP6?ZiIqE5v~)QpWmRX7*b(XUa@ zi|;J`nx)?{-&%U2HFQYlKP3TGlovIk@~8?csQ}hQO?g|4#8Ig77f@?@AN71lw${BD zWI)~583&<{TFSSm@>$lojy6DFBkN8;Hw;0&4bMO|aLUqep*r*m)zEvKg;CeL<2MiW z0b?C%1|FjJLeK{HIUp^nz6jL)jZx2?HXAtq`c%5l3cNC-Z*;pe73$-5E{nH7b)>u5 z57ppM%b$Z9&^MO96;=N()BvBOIvQ=0`$lJlO`QK`B+MhBb`T#Hu|Dz2TUi+$xnK+BO|E^C!4LrjZ_y#p~jkdXw^+9d6 z$*8?C4ZpxymY?QZ_v8A)sQYH1K6-61FX2GqA5owE`fqn1!So7 zP5o0PVAQ>?!T6|nCe#gKmR=Aw1C`8Xs8iA#HS(3H@~15S0;(eqEgof`I|ZrGSHq16 zXa;(sD*nm}Y($Od3F-sN8_a`A_qzrvqRLlCb+k3AzRyvcZ4CCqlVcO-E^%Ib{*b5sSbxU^wYZ3nwH51{- z+;7qXBhDUSkvwS-q zyPtD!J_F7>WB=$XUX1GSChUlNQT1iH5FGd;)+JEyqK8m3cozeI|F`T zJFUjR3|w?moB$OshAJ0s>YOuXI5Vb^;FfK;B>hhDIpNWL*1j4Wy zDn0-;Me|W3euHWt>NU4HvzV3e1L>V`I<~*=I{Y{4SjM^GzEmrL>ToMm2Rd53-wn>c z8W?H`6Hp_ajwx|IYQ*1K`Vmz5v$zp&pemmDvpZ%pQ1Kn+K2&{2P*1?Ks2P2XI=0?T z&VLQ8decqGm#7=opeovC>AO)4pFxf6I;vcZTP{5js-x*q4dg}5SOlu!cBnVE5vY2; zv-BfA0X1|7Rl#qlXZUMWMQLuk<5vKcUmf*)Xln6csI{JgYG{eM7uC>J)Pv|g>iJOm zj@!JGu`F@_0s%Fc=&n20MNt)XMm>irgKow3kSDg{|bYRS%`X7C28BhenZ0mMaLYm}Ej0<486Rm@1UA?m*7sG07DTDsAXIR8pmOoBGWb}M)sHG-?C5qXcDSy4AuLsi(p?2i?Q zk26nNdb}sDo^+^=RzlrZ6E)E0Pka~XPl76*X0F3*#E+ql&ofj{E1?Ej6E%aad;+?mixrrL+B9FHDm-RhL3Q9a^P`#gnHynF zRDKTD&K!#{)0}j>NRM z%shxmh~KjKOEcl0u48#oOAvwDj5VCTH-LbqWErZ5+b#Yh>X`kC+N9B5xOi4nyfSK! zbU@AERLp?eEPfGH?ybdBymY_7R2ntV@mO5ve=Y%y>_^lT-oX9%r^PqFaw9v6Dt80b z(fb$+gZ^?2#W6!s$F3S`V2x1ayP%e09BRhD!(%%Ce-dbbyZ&}J#((W9OoLj(lBkM? zn=?=itiWox#nL~ZMi&2#o2m4uhRb1hY>ry8)2NU0k1_D`zvyp+1AlHK6>7?+pc+_@ zs$dtY1D7oQp~e5Qc#L=M!)a1fxh@z5hoP2e6sluuQJ*Vz<6KPfp7XEGu=&0Fw0Z;8 zaEcFZvt&i>fiTnz)xt423Mjs-42Y4`*0DSLbcQR6X##= z%l$vOwb_9Eh~L6ySpOe4BU`W#@$+U>o_D>8mq3kh1D3%{sLhxpC?s(Hi=*oAh#JV( zs3kp!>R5;$>;kdOgs7gUFms@$s+i@UM>Ti_^&#{hEQJvvEd*kx=~;}r zZ#(L=>_y#o)Y7kETjF=HlivR;Mt21_pho^3s)A#vN9bA9gXIINqJ%MAeiqaSLNQ?w zGlcz#SBn`E_#*XtEI|A@R>aJ)TzV%|hv#D8^Zx+?>iKEZ?!Ra8pxACElA{_fh$FEQ zYAuhW?t5(cUK}^F#Hg7WfUR*ls@x09j}bQ{u<5&EcAfvZ1T>NZ7>1`YGrq;Fm^NOB zmjNqa9&Cr%a2D!IvE8WhPc1(|eAj`pW@FUbdoR>XjzYbu&Beg`{~rXpk`OOJNZ>1< zAvlfrWz_NPkkHM{4AjUsqn73Zwn8saNZ`kHtx*G6jH++F#ZxABOO_2a6S+})tU}@t zKkz7QNkSSD=3y}IKrO{C)LyuXs`$3~)O>6C(UQ0k$3>OPhT2O7%?db#cs=Zl=gi_s z{gA-Ve3vH;34DE?Bw0w{tJop9l!8%`hj=4!C3e8qE5wWtb~7}K3*3~84~!{ zGviSM_ysRvaH-GgH+s-eAD4)3DMXHFLq z_!ew$RE5#fyAfu^-o%$;9ZZtJrFX#1#P6Y&a8|~Uz=O`;PC!qj&`fSkyQ3Ofh}u-Q zP!E*g%(kge@y6yH)VtXQ9EfqUxO&E7W8&NJw$ihPcu(*tYKg993(^1b#rN(LXhOo^ z?12Y@cL|3RFOwrA@EgthQ1S9Po!^_`xm^AM97}%1(2&5p;YrlUlZLsO>xf$O$*3j# z8^6KkxkLE9BhFt)9yfwMsHxe2I=|;oQ~eOzV$r;ArWT;SOuvO1d9Hl!(c2C+khQ4$ zqULwIy*~CM-Uapke+PA}6BY>Z>g)U$B~TP6V`)5ssvx*vNZ|hiQU`TjKcc=aXi&&) zrmm>;Qia_EYBuV$tU|r%Y((w)`=}>g>mniEXqNjpt&c6yaB%n<+1!v)UT#Vtx zLIVG==nj4$zOcA!XkLksz+XgPkM&8PQ!*s*_WT&t@$gb^38tZ*6L;}jj9)s$yMRYf z>2u3){`V93p-f2N|LriQtlJ#L!re$BP@AO&PQ=e}I{u1!B=;*9!vDjO-*7^`*(53N zOot)FbD$nLVW@h_V-AeOhd8jj@7A()1-IrKP@n6MqNeB_2A)(EU5{I$8k&N7q|QZk zWHoAO_Mjd-7f|Kyq4v^KGiro&5L1$#!zZ8y%A*RlKvg)voM`EbP$Sr3@x!Q*{fvq6 z1*+j_mE6oFLzPd9>PRlLkmZ*#{Rje)6sUn3@j}bEj~d}qi+@CQEJ|fpadK40v!K$$ zQ3I%ldSG=$?Wq~&X7e1XL(iPP_r?-}tGJQGK^4eg=0dGmA&WORJDR;vGcg1;;u)yT z^|g5#bt>MOK~>#M#lSF~{}co?f(Wy*75Lm7g2~CBgc|X3RQUs_=fwro)W1T_K$L2( z!L+Cu$YNGNm1|@1-Wd4*|IHwv5wArx@U3|sRl!s2fw8N*{2|zy_*~S;-=aDazlMAB z$&Y%ZPr>wf-h7Ukh$pD&I#LjQHCTawI?xgo?~EGZSkzj6g?iHMLwz22jVhO^mMd2V zgNWBbot}EAnHZ1i;1UdMUepX6Hh-$c`B#Botl(QzN8(4iDNKp#Kn7F=5vT`FT@1%n zsI`5FW$_PG19@wQ1isZ$)@*`G?}vebq3-*tHs@bGU2Fw*q8d7G1uvoUA6j})9d~0q zGpU&dJ5w$*s>4%I9o>oV*XU#7mF*A%TC;5bie!34Eb(7PZ!)4c(Kg z8mgjNn1UPoSo-8fu7lH2BUxl_Mm^&XTmBQ&o75ZBl2mN$PQ^gfv0jOKZus93h(h2L z7RK|aM`yIp+(=_#LgERrA7(~<4L1+#U<@~)d*z7rl<;rp_XJCs;9G26)ZqixE{4c$1yFQHXozP$7te^Fjk_TxDxT8JfWgGGV{FWY>Sz(mFKO}eW@SsS zVb()^c5H(Bq%^k;=U+X0L4rQX1h;h!H$k0-E~rg50X32fsHuI98c9ey*TFQ%A@MS! zW+*F`$8xAOAA_oYhWQ9JgXP-$ZmJ^MyMkR%BOZWiXt+7UT!EUp?@$%rMm6{pbiu_Czz(2Z?Ux zcyp<_2Q@R1QCTit*9rgk@*9y`m<(O2crE`aMA~w?`I>O_Kn}-_h3-WB3*xU-kn1&> zsZ=}HGQxu}m|l(xq%ghQ6O*#3dClb&BZkW;NtswK$j^T$6otnA!ki=yqoRQnZe|s$ zoZfUkk$(ffAU`V={X`{ecr7HpjlA*_~uS0ucpg28lTCKbdc+?H?~(skV+T$A+XG@O8nHuB0zW$&ou6?whLQ_%`IfHK(v zck$RIzKifj%A~fsl+}y+Cz7_!C(wnA0aO@i1$NraxvA)D3h_NBuPznox=Welr2l)J zqXRy#_m=R0PW_?EDU*lr2<~OGd+G4sYpS&qN?Kg}Qc;&UfJhS6|A0oYieg>X>oJ?M5u-tQk`h`<02c z(MT_3o!w*Y@26gE{4v;s{2r7mLzx!1nKWIWG5EFr>95lG z8*APQ@<)+3pYXiE|NDWA>J;orNAF{IGA2=I2qvJyx}Q7kDoqd!YLRvm+ zPi)~OnmJmY z7f!j1yn?LE7Q)GRwI=%~8tg=P1a+LX{H@l(Cf0B=>r8J|YwdemxlteQc3@R*ZexX3 z5!aV<6R|fH|M!YUnyz(}*QI}_GL**tB0QY%zt=Q6l9cpIR(=Wfq^2{YDBusZUj9gf z(Fr#plTUzwE0i1hk@g$zwZ{2ruXmYvB}%NL+ywG>@#;q>c9FLfvtu&K@beMxuB*z+ zPWl&=A5FTh^sdvsx1EIByhf6^m|pX4@V_gP_-bC!TwyQxKY0^KyGH~6Ud8FeMqbk> zf7Yh@-#l54*9U9-|D`kk{iw92RrDL9>|~9tB<&BY=mzQ0x%n`!qIUNt>&yr93XT7J zHT+LQ$H{L@#(0dN&gIl~lTLP`Zr}gUO_Rvj$4l2jI&qe8HEx(o89sUjzInBS8^>B_ z%M(tm7v-{(KbuBdQZ_$n|Gm0WS1!^+d4=(sNZFgz!H*(6pYL;cy=;`Jxa%eb(h(ob zO*sjFiO-3DBCiACpOL#eJU{#lz%`K0{LD>jDZ7ijzo{gI z{N%jaF`C%q-=yTX#C4tIKEB-W&QP`x`MUTSSm1xIRhN5zr>+LPvg-VYE0?PTiLa8DcJb7)I#>*aMI zfzK#`>n#7(_nFdAQ9UeAL;qg=DYMGrS-7V>@x_$mXINeeW~QZ$z82vkx&wC}B>cXNr=r+48L)OFF}U7*s=c0*h88<0Q5Mw5|nJ}a-{A9HZ%l6Gb6dH%ZR|1N&s?S*r{{>Ai4Ue(AuXH!0i`;+kciPt#N>ri$) zW&QkAbd5rnc-;|P@(qhK;_xJS65RaDYC@mLLU_289*GPSCSJOHenlW~6|x@vM63&$)2Lvzr9C3Ng^F~YFvAEBwu+U0 zg>Z7pJth1lb!MSlO5~d?-W}4m(9t*K|9g!iuZ#ZnM_F#XMT2X};cH*-00sHd((7&= zD?t2v^7Z`#T?HtA0$*SZ(zjT-pUK-vJr!+0#pp;UUNQA=|2~nC zi%PnoF20lJB_SN$3eRLDzmoq2mDM1BAeC(;{u||V{fHN>6HBNxk%g7F)#`j>WlNiU zkIaihJ^wrZM{Qa&Qo$w*uc6RX;?F3^Z+dx&2BQ$Th4%|)0f)ZHv`*I zKA6`?>OV(XX3Dg}SGbz=xU{i|JYBn~E+OfEQn!ZQhnk^U>;(WEuArd4J%X&tdC z^)!sav^1x|+g6zhOrfEFuY>UzxUN5Y*X>AIrf5IjiP9ORXv@#fUg zkML)7;t%V{H>5ua+`+aeOX2B^C_k?Qg!#kG-dJv0%uTzA|4Mv5dA;%9>rV?@q71(_ z@~x8)`{v?<{kI<;ic;*D!xp|vsios@!u@$O7PStP>Oas^7@Xl{@)bJL}lek zh(`n0tP_jqP)u&_M_wgf;S{bxzOK2}iOht*qI_CwB$D_L$|Ry}LCQ>{?&-X)lUDCP z9qCD01?r!ow}spk%+C!T1)f<0KjRKw-%$Ap(*Gep8?RH`xCi5L^FzYA{^4~Y5Mtda z`-=MVlJ~Wxy&+tZdb)C7tN(OD*{k(f7(wP_8he82?WX#Kzp&0IX#+RwN@f*oCES!U z-&njZ@hiOEa8D7N9irYj?%TnuvMpD9^5T)+o&jX#-tmDy38a!-OUPVF;nGyn)fzua zp_z=J#D6-Yvd@W^pwjEsu}73yz-twC^dVi}Cre5ruT_|9wRJ$@45SaDYzNBvX~;-R zC9z1L!YQ~nCw0^$ zewc7>!gl%IY%1(WW0kq#TQZ{3=pn+o;!tT`!an(lU6NOm3c`4;Cq05!8}f7wu?{RD z@6Z2?b`JT=$mj382fpvBvJ>f47u@u}$1;%zBGK8=nfF%^-I+;E-nRKg2+ z4ds=Rii%L?OKup0SIAFAKF5c9ihh|8&&l@L`zre|W8;-c#gXM!zRL zZcXpT(Q91=2!BOKzE(PglT)ZLX?>}<1!gC0H|8Q=*HrGiK^niE=FP|cyyB2vpY+Sv zgSrxvHoHjMCaJ^v$UAPR4!b=V*`Lxe6F`JfR9007u8t6^Rc|c2iOB z{|y>j9B^e22F8*^sAJ|OpJ;A7?p@-?u^{y~$Peiah==$_ z-aGK-d6rK!w95g-G;;|)r9M~xkh;EpQ_CJQ+`wSIdO<@ZPwGdEQJ5pO7p@SdZ|%;bbq$`^me+6SgDrg#KOX(P9ZR zvn;qrT^iOxuYEk>bn!C%{T3Zhr-*zwzn>?o6+5I}f3^rISzAx?cRoFy=wm_;hG-d_ z5f-h64YNGiQgN*Q-*^+ei{Yh+FN0mcXFA|S*im}>#3SmgHFnItw7;27F@(3Xh)So&xIC;h5p#<~#t9@Y+Th?)NK9|KE-^VOa7hlwr4MqZsJbPtHDW8tTG zh4n`AWSQ5$3E{>FUljB*KP)?%@KB3N!Y+>f7BVtMfrniCUd*H-a{^w+}kBw3qJc!_$y_%orUe|owB>UoIi7270V0NdwDlT{Nh zjl7=uLKgJHOLn<>E`HY5syp+8@ISKO78(SdPvF#8_$0zGgc-bnrz}bEb$CN{C2>Ni zU8#RP?gQdq?Oweid?4TvoU&e>GW6#-rjWY6{)qH6Cj(|%vQ7R6KSq9isGSwU&+2E* zZ?Nag$0;t3GMnrs-ca6`c%679GJrQf#?$Yx^f{cNW>1q>pqbYvz#bYiUAK|wYy!s{ zTp->OVq^86GcZNJH-XP_SIcXfyI0*N>A=hLC(NuSSLb&CnYg2mB+3YTzc@qaGD`s+(Ezs`(DV|4#h~&KvY@(JvgjiF=Ix zd9=??-@<0@1F*9T(#-GJ{i?2J zwyNHf;y~J2I|DW`eX8AKL2Y1VV*W278M{4}d`6KQur@0JopSV|Vs@YxqLV6?8pa1_LjS2A%NDKLXy`RKa2t6iG zw$_2IVo^PHL)Z$!PZK*RPxhgBt9pn24D;>HBrC7iN`9l>8uiuij(VAof8SY9U9pbm z0g{bHd@b@tM61dV!ABEmjlUQ^)G_s78`Vz*w~YQt`k#p1qIW|)+_*UYHvP}&JgH8< z&YH2_0nQg+13nW&Rpq7ht`oOgmYaT->l-&knjX^qOlPF|#`1HlEaAi-^afioSu9Jv zgvkeC{VBE-55>2BiWK^C@{$)SQzgV8E9leESip1OKgEt4p^B!0jz|q-m)If|Y(HR#Sk7P{g2~p%m%~emWr%#_hz>-%;l3p9#w!Bv;fOavC(V5hE1r_D zk@z*Tg}8=J-s_UbV^J16N_~(}VSc4%HN?*?PS#)S7O%oY^;!JC>e{&L5+SU!<pv=g7iSD_3$KB;vWO*z7 z2}Jq_wn(0=cpR1TA$Tvv%*}x}z;BJS$*!-`H-Jj!WYqaOT8ob(wy@6!_7@lJde{C zb}8Nk`t|gh!cIwF02Ja)0a@#doUD%C?G`>HZ)o^iv611Mc(UJ!+--IMUfq~~EDlWg zv9R&c|H!gkaop+hWRHq@x!$Z-JOS)!_>)+kVR*CiFZK2iZ0m^2vLx|WI=lbG?TU8? zy}f_pjEDn%2n|qPP7kDK4OUBsc%rOTw_tcYX|}f?UQDlCwjnOi``zqSyi)YXd-AL; zwd_njHI|OT`-4}^)ZYKQ70F(A$Vz^vybixQmR~JDHS%$mZQ>VYpVaI!Pt{bft9%#H z8Z?qMcf>j7mh(4*|84=4Qyb@J`Hb`pzUtVAQ9ickHBqH_Y$LY6=m+yT` z8sW5vMN47F!J6Qwk0<@bhk3HyJU<@r{KUs=;MioPM9=Tjt7JHz62vZu=Udz{7QU9 z6`+d70E@=O@-GpS-J^dWJlWugeFaDStI~S=EAz za$3dmNfsaBzlU%Sd9qdb9mS#q=9yU>_!$;;iF_cedxq^D6vrGk*AxHw&|iapFnz=r zVrWN@yJ`-WZ{P#v8N-=KaC#h=AN^VSS=$v$mT0uby&;YrU}hlRr|KTCx#A-6XglvS zlYWYmvBzAsiXT9D&p=&EzLh82gIE%FC*j7iytw*2*d=-+xKWM`ULSdivyhZPC!yYyb>&Go88 zPuVl)1VXpP>5q#K5_=D!t^V2ae}`Bvd0j`1C(z3>WzJf8RovF%@#0o7Yj?{VDkd*& r^h)n?ORI0))@baA+(P*ya&vo?&YxK>w`;SpvpePH&+b(C-3tE)(bN?Q delta 48158 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 JIuzPb=RX_hHm?8x delta 48280 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 kXGR6{Ljg3i8O_<;a_uu6R&v8BUzg}=P<^TWy diff --git a/resources/i18n/sv/BambuStudio.mo b/resources/i18n/sv/BambuStudio.mo index 1d6c1e9085fe381c4d0697bd87e3aee2239b544f..42bd8cfc4a3fcaaebf5df92424c8a9d81ec64795 100644 GIT binary patch delta 47653 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 z0fo^?)remove_selected(); }, "menu_delete", nullptr, []() { return plater()->can_delete(); }, m_parent); #else @@ -1197,7 +1197,7 @@ void MenuFactory::create_plate_menu() // delete current plate #ifdef __WINDOWS__ - append_menu_item(menu, wxID_ANY, _L("Delete") + "\tDel", _L("Remove the selected plate"), + append_menu_item(menu, wxID_ANY, _L("Delete") + "\t" + _L("Del"), _L("Remove the selected plate"), [](wxCommandEvent&) { plater()->delete_plate(); }, "menu_delete", nullptr, []() { return plater()->can_delete_plate(); }, m_parent); #else diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp index 776752847c..318714c5e8 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.cpp +++ b/src/slic3r/GUI/KBShortcutsDialog.cpp @@ -183,7 +183,7 @@ void KBShortcutsDialog::fill_shortcuts() // Slice plate { ctrl + "R", L("Slice plate")}, // Send to Print - { ctrl + "Shift" + "G", L("Print plate")}, + { L("Ctrl+Shift+G"), L("Print plate")}, // Edit { ctrl + "X", L("Cut") }, { ctrl + "C", L("Copy to clipboard") }, @@ -196,7 +196,7 @@ void KBShortcutsDialog::fill_shortcuts() #ifdef __APPLE__ {"fn+⌫", L("Delete selected")}, #else - {"Del", L("Delete selected")}, + {L("Del"), L("Delete selected")}, #endif // Help { "?", L("Show keyboard shortcuts list") } @@ -208,12 +208,12 @@ void KBShortcutsDialog::fill_shortcuts() { L("Right mouse button"), L("Pan View") }, { L("Mouse wheel"), L("Zoom View") }, { "A", L("Arrange all objects") }, - { "Shift+A", L("Arrange objects on selected plates") }, + { L("Shift+A"), L("Arrange objects on selected plates") }, //{ "R", L("Auto orientates selected objects or all objects.If there are selected objects, it just orientates the selected ones.Otherwise, it will orientates all objects in the project.") }, - {"Shift+R", L("Auto orientates selected objects or all objects.If there are selected objects, it just orientates the selected ones.Otherwise, it will orientates all objects in the current disk.")}, + {L("Shift+R"), L("Auto orientates selected objects or all objects.If there are selected objects, it just orientates the selected ones.Otherwise, it will orientates all objects in the current disk.")}, - {"Shift+Tab", L("Collapse/Expand the sidebar")}, + {L("Shift+Tab"), L("Collapse/Expand the sidebar")}, #ifdef __APPLE__ {L("⌘+Any arrow"), L("Movement in camera space")}, {L("⌥+Left mouse button"), L("Select a part")}, @@ -230,7 +230,7 @@ void KBShortcutsDialog::fill_shortcuts() {L("Arrow Left"), L("Move selection 10 mm in negative X direction")}, {L("Arrow Right"), L("Move selection 10 mm in positive X direction")}, {L("Shift+Any arrow"), L("Movement step set to 1 mm")}, - {"Esc", L("Deselect all")}, + {L("Esc"), L("Deselect all")}, {"1-9", L("keyboard 1-9: set filament for object/part")}, {ctrl + "0", L("Camera view - Default")}, {ctrl + "1", L("Camera view - Top")}, @@ -256,8 +256,8 @@ void KBShortcutsDialog::fill_shortcuts() m_full_shortcuts.push_back({ { _L("Plater"), "" }, plater_shortcuts }); Shortcuts gizmos_shortcuts = { - {"Esc", L("Deselect all")}, - {"Shift+", L("Move: press to snap by 1mm") }, + {L("Esc"), L("Deselect all")}, + {L("Shift+"), L("Move: press to snap by 1mm")}, #ifdef __APPLE__ {L("⌘+Mouse wheel"), L("Support/Color Painting: adjust pen radius")}, {L("⌥+Mouse wheel"), L("Support/Color Painting: adjust section position")}, @@ -270,8 +270,8 @@ void KBShortcutsDialog::fill_shortcuts() Shortcuts object_list_shortcuts = { {"1-9", L("Set extruder number for the objects and parts") }, - {"Del", L("Delete objects, parts, modifiers ")}, - {"Esc", L("Deselect all")}, + {L("Del"), L("Delete objects, parts, modifiers ")}, + {L("Esc"), L("Deselect all")}, {ctrl + "C", L("Copy to clipboard")}, {ctrl + "V", L("Paste from clipboard")}, {ctrl + "X", L("Cut")}, diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index cd3a3b6f36..cb80ca66a5 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -1974,26 +1974,27 @@ static void add_common_publish_menu_items(wxMenu* publish_menu, MainFrame* mainF static void add_common_view_menu_items(wxMenu* view_menu, MainFrame* mainFrame, std::function can_change_view) { + const std::string& ctrl = GUI::shortkey_ctrl_prefix(); // The camera control accelerators are captured by GLCanvas3D::on_char(). - append_menu_item(view_menu, wxID_ANY, _L("Default View") + "\tCtrl+0", _L("Default View"), [mainFrame](wxCommandEvent&) { + append_menu_item(view_menu, wxID_ANY, _L("Default View") + "\t" + ctrl + "0", _L("Default View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("plate"); mainFrame->plater()->get_current_canvas3D()->zoom_to_bed(); }, "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame); //view_menu->AppendSeparator(); //TRN To be shown in the main menu View->Top - append_menu_item(view_menu, wxID_ANY, _L("Top") + "\tCtrl+1", _L("Top View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("top"); }, + append_menu_item(view_menu, wxID_ANY, _L("Top") + "\t" + ctrl + "1", _L("Top View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("top"); }, "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame); //TRN To be shown in the main menu View->Bottom - append_menu_item(view_menu, wxID_ANY, _L("Bottom") + "\tCtrl+2", _L("Bottom View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("bottom"); }, + append_menu_item(view_menu, wxID_ANY, _L("Bottom") + "\t" + ctrl + "2", _L("Bottom View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("bottom"); }, "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame); - append_menu_item(view_menu, wxID_ANY, _L("Front") + "\tCtrl+3", _L("Front View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("front"); }, + append_menu_item(view_menu, wxID_ANY, _L("Front") + "\t" + ctrl + "3", _L("Front View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("front"); }, "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame); - append_menu_item(view_menu, wxID_ANY, _L("Rear") + "\tCtrl+4", _L("Rear View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("rear"); }, + append_menu_item(view_menu, wxID_ANY, _L("Rear") + "\t" + ctrl + "4", _L("Rear View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("rear"); }, "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame); - append_menu_item(view_menu, wxID_ANY, _L("Left") + "\tCtrl+5", _L("Left View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("left"); }, + append_menu_item(view_menu, wxID_ANY, _L("Left") + "\t" + ctrl + "5", _L("Left View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("left"); }, "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame); - append_menu_item(view_menu, wxID_ANY, _L("Right") + "\tCtrl+6", _L("Right View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("right"); }, + append_menu_item(view_menu, wxID_ANY, _L("Right") + "\t" + ctrl + "6", _L("Right View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("right"); }, "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame); } @@ -2003,6 +2004,8 @@ void MainFrame::init_menubar_as_editor() wxMenuBar::SetAutoWindowMenu(false); m_menubar = new wxMenuBar(); #endif + + const std::string& ctrl = GUI::shortkey_ctrl_prefix(); // File menu wxMenu* fileMenu = new wxMenu; @@ -2014,17 +2017,17 @@ void MainFrame::init_menubar_as_editor() []{ return true; }, this); #endif // New Project - append_menu_item(fileMenu, wxID_ANY, _L("New Project") + "\tCtrl+N", _L("Start a new project"), + append_menu_item(fileMenu, wxID_ANY, _L("New Project") + "\t" + ctrl + "N", _L("Start a new project"), [this](wxCommandEvent&) { if (m_plater) m_plater->new_project(); }, "", nullptr, [this](){return can_start_new_project(); }, this); // Open Project #ifndef __APPLE__ - append_menu_item(fileMenu, wxID_ANY, _L("Open Project") + dots + "\tCtrl+O", _L("Open a project file"), + append_menu_item(fileMenu, wxID_ANY, _L("Open Project") + dots + "\t" + ctrl + "O", _L("Open a project file"), [this](wxCommandEvent&) { if (m_plater) m_plater->load_project(); }, "menu_open", nullptr, [this](){return can_open_project(); }, this); #else - append_menu_item(fileMenu, wxID_ANY, _L("Open Project") + dots + "\tCtrl+O", _L("Open a project file"), + append_menu_item(fileMenu, wxID_ANY, _L("Open Project") + dots + "\t" + ctrl + "O", _L("Open a project file"), [this](wxCommandEvent&) { if (m_plater) m_plater->load_project(); }, "", nullptr, [this](){return can_open_project(); }, this); #endif @@ -2051,22 +2054,22 @@ void MainFrame::init_menubar_as_editor() // BBS: close save project #ifndef __APPLE__ - append_menu_item(fileMenu, wxID_ANY, _L("Save Project") + "\tCtrl+S", _L("Save current project to file"), + append_menu_item(fileMenu, wxID_ANY, _L("Save Project") + "\t" + ctrl + "S", _L("Save current project to file"), [this](wxCommandEvent&) { if (m_plater) m_plater->save_project(); }, "menu_save", nullptr, [this](){return m_plater != nullptr && can_save(); }, this); #else - append_menu_item(fileMenu, wxID_ANY, _L("Save Project") + "\tCtrl+S", _L("Save current project to file"), + append_menu_item(fileMenu, wxID_ANY, _L("Save Project") + "\t" + ctrl + "S", _L("Save current project to file"), [this](wxCommandEvent&) { if (m_plater) m_plater->save_project(); }, "", nullptr, [this](){return m_plater != nullptr && can_save(); }, this); #endif #ifndef __APPLE__ - append_menu_item(fileMenu, wxID_ANY, _L("Save Project as") + dots + "\tCtrl+Shift+S", _L("Save current project as"), + append_menu_item(fileMenu, wxID_ANY, _L("Save Project as") + dots + "\t" + ctrl + _L("Shift+") + "S", _L("Save current project as"), [this](wxCommandEvent&) { if (m_plater) m_plater->save_project(true); }, "menu_save", nullptr, [this](){return m_plater != nullptr && can_save_as(); }, this); #else - append_menu_item(fileMenu, wxID_ANY, _L("Save Project as") + dots + "\tCtrl+Shift+S", _L("Save current project as"), + append_menu_item(fileMenu, wxID_ANY, _L("Save Project as") + dots + "\t" + ctrl + _L("Shift+") + "S", _L("Save current project as"), [this](wxCommandEvent&) { if (m_plater) m_plater->save_project(true); }, "", nullptr, [this](){return m_plater != nullptr && can_save_as(); }, this); #endif @@ -2077,13 +2080,13 @@ void MainFrame::init_menubar_as_editor() // BBS wxMenu *import_menu = new wxMenu(); #ifndef __APPLE__ - append_menu_item(import_menu, wxID_ANY, _L("Import 3MF/STL/STEP/SVG/OBJ/AMF") + dots + "\tCtrl+I", _L("Load a model"), + append_menu_item(import_menu, wxID_ANY, _L("Import 3MF/STL/STEP/SVG/OBJ/AMF") + dots + "\t" + ctrl + "I", _L("Load a model"), [this](wxCommandEvent&) { if (m_plater) { m_plater->add_file(); } }, "menu_import", nullptr, [this](){return can_add_models(); }, this); #else - append_menu_item(import_menu, wxID_ANY, _L("Import 3MF/STL/STEP/SVG/OBJ/AMF") + dots + "\tCtrl+I", _L("Load a model"), + append_menu_item(import_menu, wxID_ANY, _L("Import 3MF/STL/STEP/SVG/OBJ/AMF") + dots + "\t" + ctrl + "I", _L("Load a model"), [this](wxCommandEvent&) { if (m_plater) { m_plater->add_model(); } }, "", nullptr, [this](){return can_add_models(); }, this); #endif @@ -2103,7 +2106,7 @@ void MainFrame::init_menubar_as_editor() [this](wxCommandEvent&) { if (m_plater) m_plater->export_core_3mf(); }, "menu_export_sliced_file", nullptr, [this](){return can_export_model(); }, this); // BBS export .gcode.3mf - append_menu_item(export_menu, wxID_ANY, _L("Export plate sliced file") + dots + "\tCtrl+G", _L("Export current sliced file"), + append_menu_item(export_menu, wxID_ANY, _L("Export plate sliced file") + dots + "\t" + ctrl + "G", _L("Export current sliced file"), [this](wxCommandEvent&) { if (m_plater) wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_EXPORT_SLICED_FILE)); }, "menu_export_sliced_file", nullptr, [this](){return can_export_gcode(); }, this); @@ -2147,32 +2150,32 @@ void MainFrame::init_menubar_as_editor() #ifndef __APPLE__ // BBS undo - append_menu_item(editMenu, wxID_ANY, _L("Undo") + "\tCtrl+Z", + append_menu_item(editMenu, wxID_ANY, _L("Undo") + "\t" + ctrl + "Z", _L("Undo"), [this](wxCommandEvent&) { m_plater->undo(); }, "menu_undo", nullptr, [this](){return m_plater->can_undo(); }, this); // BBS redo - append_menu_item(editMenu, wxID_ANY, _L("Redo") + "\tCtrl+Y", + append_menu_item(editMenu, wxID_ANY, _L("Redo") + "\t" + ctrl + "Y", _L("Redo"), [this](wxCommandEvent&) { m_plater->redo(); }, "menu_redo", nullptr, [this](){return m_plater->can_redo(); }, this); editMenu->AppendSeparator(); // BBS Cut TODO - append_menu_item(editMenu, wxID_ANY, _L("Cut") + "\tCtrl+X", + append_menu_item(editMenu, wxID_ANY, _L("Cut") + "\t" + ctrl + "X", _L("Cut selection to clipboard"), [this](wxCommandEvent&) {m_plater->cut_selection_to_clipboard(); }, "menu_cut", nullptr, [this]() {return m_plater->can_copy_to_clipboard(); }, this); // BBS Copy - append_menu_item(editMenu, wxID_ANY, _L("Copy") + "\tCtrl+C", + append_menu_item(editMenu, wxID_ANY, _L("Copy") + "\t" + ctrl + "C", _L("Copy selection to clipboard"), [this](wxCommandEvent&) { m_plater->copy_selection_to_clipboard(); }, "menu_copy", nullptr, [this](){return m_plater->can_copy_to_clipboard(); }, this); // BBS Paste - append_menu_item(editMenu, wxID_ANY, _L("Paste") + "\tCtrl+V", + append_menu_item(editMenu, wxID_ANY, _L("Paste") + "\t" + ctrl + "V", _L("Paste clipboard"), [this](wxCommandEvent&) { m_plater->paste_from_clipboard(); }, "menu_paste", nullptr, [this](){return m_plater->can_paste_from_clipboard(); }, this); // BBS Delete selected - append_menu_item(editMenu, wxID_ANY, _L("Delete selected") + "\tDel", + append_menu_item(editMenu, wxID_ANY, _L("Delete selected") + "\t" + _L("Del"), _L("Deletes the current selection"),[this](wxCommandEvent&) { m_plater->remove_selected(); }, "menu_remove", nullptr, [this](){return can_delete(); }, this); //BBS: delete all - append_menu_item(editMenu, wxID_ANY, _L("Delete all") + "\tCtrl+D", + append_menu_item(editMenu, wxID_ANY, _L("Delete all") + "\t" + ctrl + "D", _L("Deletes all objects"),[this](wxCommandEvent&) { m_plater->delete_all_objects_from_model(); }, "menu_remove", nullptr, [this](){return can_delete_all(); }, this); editMenu->AppendSeparator(); @@ -2185,24 +2188,24 @@ void MainFrame::init_menubar_as_editor() editMenu->AppendSeparator(); #else // BBS undo - append_menu_item(editMenu, wxID_ANY, _L("Undo") + "\tCtrl+Z", + append_menu_item(editMenu, wxID_ANY, _L("Undo") + "\t" + ctrl + "Z", _L("Undo"), [this](wxCommandEvent&) { m_plater->undo(); }, "", nullptr, [this](){return m_plater->can_undo(); }, this); // BBS redo - append_menu_item(editMenu, wxID_ANY, _L("Redo") + "\tCtrl+Y", + append_menu_item(editMenu, wxID_ANY, _L("Redo") + "\t" + ctrl + "Y", _L("Redo"), [this](wxCommandEvent&) { m_plater->redo(); }, "", nullptr, [this](){return m_plater->can_redo(); }, this); editMenu->AppendSeparator(); // BBS Cut TODO - append_menu_item(editMenu, wxID_ANY, _L("Cut") + "\tCtrl+X", + append_menu_item(editMenu, wxID_ANY, _L("Cut") + "\t" + ctrl + "X", _L("Cut selection to clipboard"), [this](wxCommandEvent&) {m_plater->cut_selection_to_clipboard(); }, "", nullptr, [this]() {return m_plater->can_copy_to_clipboard(); }, this); // BBS Copy - append_menu_item(editMenu, wxID_ANY, _L("Copy") + "\tCtrl+C", + append_menu_item(editMenu, wxID_ANY, _L("Copy") + "\t" + ctrl + "C", _L("Copy selection to clipboard"), [this](wxCommandEvent&) { m_plater->copy_selection_to_clipboard(); }, "", nullptr, [this](){return m_plater->can_copy_to_clipboard(); }, this); // BBS Paste - append_menu_item(editMenu, wxID_ANY, _L("Paste") + "\tCtrl+V", + append_menu_item(editMenu, wxID_ANY, _L("Paste") + "\t" + ctrl + "V", _L("Paste clipboard"), [this](wxCommandEvent&) { m_plater->paste_from_clipboard(); }, "", nullptr, [this](){return m_plater->can_paste_from_clipboard(); }, this); #if 0 @@ -2212,12 +2215,12 @@ void MainFrame::init_menubar_as_editor() "", nullptr, [this](){return can_delete(); }, this); #endif //BBS: delete all - append_menu_item(editMenu, wxID_ANY, _L("Delete all") + "\tCtrl+D", + append_menu_item(editMenu, wxID_ANY, _L("Delete all") + "\t" + ctrl + "D", _L("Deletes all objects"),[this](wxCommandEvent&) { m_plater->delete_all_objects_from_model(); }, "", nullptr, [this](){return can_delete_all(); }, this); editMenu->AppendSeparator(); // BBS Clone Selected - append_menu_item(editMenu, wxID_ANY, _L("Clone selected") + "\tCtrl+M", + append_menu_item(editMenu, wxID_ANY, _L("Clone selected") + "\t" + ctrl + "M", _L("Clone copies of selections"),[this](wxCommandEvent&) { m_plater->clone_selection(); }, @@ -2226,7 +2229,7 @@ void MainFrame::init_menubar_as_editor() #endif // BBS Select All - append_menu_item(editMenu, wxID_ANY, _L("Select all") + "\tCtrl+A", + append_menu_item(editMenu, wxID_ANY, _L("Select all") + "\t" + ctrl + "A", _L("Selects all objects"), [this](wxCommandEvent&) { m_plater->select_all(); }, "", nullptr, [this](){return can_select(); }, this); // BBS Deslect All @@ -2285,7 +2288,7 @@ void MainFrame::init_menubar_as_editor() viewMenu->Check(wxID_CAMERA_ORTHOGONAL + camera_id_base, true); viewMenu->AppendSeparator(); - append_menu_check_item(viewMenu, wxID_ANY, _L("Show &Labels") + "\tCtrl+E", _L("Show object labels in 3D scene"), + append_menu_check_item(viewMenu, wxID_ANY, _L("Show &Labels") + "\t" + ctrl + "E", _L("Show object labels in 3D scene"), [this](wxCommandEvent&) { m_plater->show_view3D_labels(!m_plater->are_view3D_labels_shown()); m_plater->get_current_canvas3D()->post_event(SimpleEvent(wxEVT_PAINT)); }, this, [this]() { return m_plater->is_view3D_shown(); }, [this]() { return m_plater->are_view3D_labels_shown(); }, this); @@ -2316,7 +2319,7 @@ void MainFrame::init_menubar_as_editor() //auto preference_item = new wxMenuItem(parent_menu, BambuStudioMenuPreferences + bambu_studio_id_base, _L("Preferences") + "\tCtrl+,", ""); #else wxMenu* parent_menu = m_topbar->GetTopMenu(); - auto preference_item = new wxMenuItem(parent_menu, ConfigMenuPreferences + config_id_base, _L("Preferences") + "\tCtrl+P", ""); + auto preference_item = new wxMenuItem(parent_menu, ConfigMenuPreferences + config_id_base, _L("Preferences") + "\t" + ctrl + "P", ""); #endif //auto printer_item = new wxMenuItem(parent_menu, ConfigMenuPrinter + config_id_base, _L("Printer"), ""); @@ -2416,7 +2419,7 @@ void MainFrame::init_menubar_as_editor() [this](wxCommandEvent &) { Slic3r::GUI::about();}, "", nullptr, []() { return true; }, this, 0); append_menu_item( - parent_menu, wxID_ANY, _L("Preferences") + "\tCtrl+,", "", + parent_menu, wxID_ANY, _L("Preferences") + "\t" + ctrl + ",", "", [this](wxCommandEvent &) { PreferencesDialog dlg(this); dlg.ShowModal(); @@ -2443,7 +2446,7 @@ void MainFrame::init_menubar_as_editor() //BBS add Preference append_menu_item( - m_topbar->GetTopMenu(), wxID_ANY, _L("Preferences") + "\tCtrl+P", "", + m_topbar->GetTopMenu(), wxID_ANY, _L("Preferences") + "\t" + ctrl + "P", "", [this](wxCommandEvent &) { PreferencesDialog dlg(this); dlg.ShowModal(); From d4907f0e4f00947585bbc3a95b1f6675c9d3fddb Mon Sep 17 00:00:00 2001 From: "zorro.zhang" Date: Mon, 20 Mar 2023 19:40:50 +0800 Subject: [PATCH 201/339] ENH: Optimize Dialog Positon Again 2 Change-Id: I3f2af3ee696415d07fc926596e110d5874dc579c (cherry picked from commit 73baa282ab7a98df9cde95703da096c6a02eac61) --- src/slic3r/GUI/WebGuideDialog.cpp | 3 ++- src/slic3r/GUI/WebUserLoginDialog.cpp | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/WebGuideDialog.cpp b/src/slic3r/GUI/WebGuideDialog.cpp index 0006c0bef4..ae2b3ad308 100644 --- a/src/slic3r/GUI/WebGuideDialog.cpp +++ b/src/slic3r/GUI/WebGuideDialog.cpp @@ -78,7 +78,8 @@ GuideFrame::GuideFrame(GUI_App *pGUI, long style) int screenheight = wxSystemSettings::GetMetric(wxSYS_SCREEN_Y, NULL); int screenwidth = wxSystemSettings::GetMetric(wxSYS_SCREEN_X, NULL); int MaxY = (screenheight - pSize.y) > 0 ? (screenheight - pSize.y) / 2 : 0; - MoveWindow(this->m_hWnd, (screenwidth - pSize.x) / 2, MaxY, pSize.x, pSize.y, TRUE); + wxPoint tmpPT((screenwidth - pSize.x) / 2, MaxY); + Move(tmpPT); #ifdef __WXMSW__ this->Bind(wxEVT_CHAR_HOOK, [this](wxKeyEvent& e) { if ((m_page == BBL_FILAMENT_ONLY || m_page == BBL_MODELS_ONLY) && e.GetKeyCode() == WXK_ESCAPE) { diff --git a/src/slic3r/GUI/WebUserLoginDialog.cpp b/src/slic3r/GUI/WebUserLoginDialog.cpp index 9162ac1ea1..301fe51397 100644 --- a/src/slic3r/GUI/WebUserLoginDialog.cpp +++ b/src/slic3r/GUI/WebUserLoginDialog.cpp @@ -112,7 +112,8 @@ ZUserLogin::ZUserLogin() : wxDialog((wxWindow *) (wxGetApp().mainframe), wxID_AN int screenheight = wxSystemSettings::GetMetric(wxSYS_SCREEN_Y, NULL); int screenwidth = wxSystemSettings::GetMetric(wxSYS_SCREEN_X, NULL); int MaxY = (screenheight - pSize.y) > 0 ? (screenheight - pSize.y) / 2 : 0; - MoveWindow(this->m_hWnd, (screenwidth - pSize.x) / 2, MaxY, pSize.x, pSize.y, TRUE); + wxPoint tmpPT((screenwidth - pSize.x) / 2, MaxY); + Move(tmpPT); //Param m_AutotestToken = ""; From b15e9a89cf94636ebc01e02f8ec912d2ba5ff8c7 Mon Sep 17 00:00:00 2001 From: wintergua Date: Mon, 3 Apr 2023 17:25:13 +0800 Subject: [PATCH 202/339] FIX: grouping single layer volumes during briming If an object has only one empty layer, error will encount during grouping volumes studio-2602 Change-Id: I25871b8cc8e4772c347c615db346875a9658db71 (cherry picked from commit 78b7e7706f6c8e7e86f4bd2e8daab7036499ced2) --- src/libslic3r/PrintObjectSlice.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libslic3r/PrintObjectSlice.cpp b/src/libslic3r/PrintObjectSlice.cpp index 2194fc98a8..fa5aa1e790 100644 --- a/src/libslic3r/PrintObjectSlice.cpp +++ b/src/libslic3r/PrintObjectSlice.cpp @@ -721,7 +721,7 @@ std::string fix_slicing_errors(PrintObject* object, LayerPtrs &layers, const std // BBS: first layer slices are sorted by volume group, if the first layer is empty and replaced by the 2nd layer // the later will be stored in "object->firstLayerObjGroupsMod()" int firstLayerReplacedBy = 0; - if (!buggy_layers.empty() && buggy_layers.front() == 0) + if (!buggy_layers.empty() && buggy_layers.front() == 0 && layers.size() > 1) firstLayerReplacedBy = 1; const auto scaled_resolution = scaled(object->print()->config().resolution.value); From ceea4bb7cbe3bbc50af122390c3353ab560f96b0 Mon Sep 17 00:00:00 2001 From: gerrit Date: Tue, 4 Apr 2023 10:46:49 +0800 Subject: [PATCH 203/339] ci: update build version to 01.05.05.67 Change-Id: I69e4c5d72debabc3e24a41f70fc5b02124adb1a0 --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index 537d6f7d82..2a74609230 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.05.05.66") +set(SLIC3R_VERSION "01.05.05.67") From cc6bd668ae991fd1f6ca12c3837b08516dd8cd16 Mon Sep 17 00:00:00 2001 From: "zorro.zhang" Date: Tue, 21 Mar 2023 18:12:31 +0800 Subject: [PATCH 204/339] NEW: Staff Pick UI WebPage Change-Id: I85c5b5ba28144a75dc231b99d73a8f5c2ce941f4 --- resources/web/data/text.js | 9 +- resources/web/homepage/css/dark.css | 11 + resources/web/homepage/css/home.css | 82 ++++- resources/web/homepage/img/t1.svg | 14 + resources/web/homepage/img/t2.svg | 10 + resources/web/homepage/index.html | 71 +++- resources/web/homepage/js/globalapi.js | 340 ------------------ resources/web/homepage/js/home.js | 91 +++++ resources/web/homepage/js/jquery-3.6.0.min.js | 2 - resources/web/homepage/js/json2.js | 185 ---------- 10 files changed, 260 insertions(+), 555 deletions(-) create mode 100644 resources/web/homepage/img/t1.svg create mode 100644 resources/web/homepage/img/t2.svg delete mode 100644 resources/web/homepage/js/globalapi.js delete mode 100644 resources/web/homepage/js/jquery-3.6.0.min.js delete mode 100644 resources/web/homepage/js/json2.js diff --git a/resources/web/data/text.js b/resources/web/data/text.js index 6ea1cd37ae..54fbfb0040 100644 --- a/resources/web/data/text.js +++ b/resources/web/data/text.js @@ -97,7 +97,8 @@ var LangText={ "t103":"Other", "t104":"Profile name", "t105":"Profile Author", - "t106":"Profile description" + "t106":"Profile description", + "t107":"Staff Pick" }, "zh_CN": { "t1": "欢迎使用Bambu Studio", @@ -197,7 +198,8 @@ var LangText={ "t103":"其他", "t104":"配置名称", "t105":"配置作者", - "t106":"配置介绍", + "t106":"配置介绍", + "t107":"人工精选", "wk1": "快速入门指南", "wk2": "本文介绍了Bambu Studio的最基本用法。它指导用户配置软件,创建项目,并逐步完成第一个打印任务。", "wk3": "基于项目的工作流", @@ -313,7 +315,8 @@ var LangText={ "t103":"その他", "t104":"構成名", "t105":"構成著者", - "t106":"構成の概要", + "t106":"構成の概要", + "t107":"スタッフが選ぶ" } }; diff --git a/resources/web/homepage/css/dark.css b/resources/web/homepage/css/dark.css index c1f5dfa91e..362de35d4b 100644 --- a/resources/web/homepage/css/dark.css +++ b/resources/web/homepage/css/dark.css @@ -83,4 +83,15 @@ body .UG_DESC { color:#818183; +} + +/*---Staff PIck----*/ +#HotModel_Swiper +{ + background-color: #323238; +} + +.HotModel_NameText +{ + background-color: #636368; } \ No newline at end of file diff --git a/resources/web/homepage/css/home.css b/resources/web/homepage/css/home.css index bebb01976c..08392714de 100644 --- a/resources/web/homepage/css/home.css +++ b/resources/web/homepage/css/home.css @@ -244,6 +244,13 @@ body height: 100%; } +.TitleSmallIcon +{ + width:30px; + height: 30px; + margin-right: 10px; +} + #MenuArea { height: 140px; @@ -302,6 +309,22 @@ body height: 420px; } +#HotModelBlock +{ + display:flex; + align-items: center; + padding: 6px 2px; + border-bottom-width: 0px; + border-bottom-style: solid; +} + +.HotModel_PrevImg +{ + width: 200px; + height: 148px; +} + + #RecentFileArea { margin-top: 10px; @@ -314,7 +337,7 @@ body { display:flex; align-items: center; - padding: 6px; + padding: 6px 2px; border-bottom-width: 1px; border-bottom-style: solid; } @@ -627,28 +650,53 @@ body font-size: 14px; } -/*------Christmas cabin---*/ -#ChristmasArea +/*--Staff Pick--*/ +#HotModelArea { - margin-top: 10px; - display: flex; - flex-direction: column; + display: none; } -#ChristmasTitleBlock +#HotModel_Swiper { + background-color: #EEEEEE; + padding: 20px 16px 20px 16px; +} + +.HotModelPiece +{ + width: 200px!important; display:flex; - align-items: center; - padding: 6px; - border-bottom-width: 1px; - border-bottom-style: solid; + flex-direction: column; + cursor: pointer; } -#CabinList +.HotModel_PrevBlock { - display: flex; - flex-wrap: wrap; - align-content: flex-start; - overflow-y: auto; + border:2px solid #656568; + height: 148px; +} -} \ No newline at end of file +.HotModel_PrevImg +{ + width: 100%; +} + +.HotModel_NameText +{ + height: 28px; + line-height: 28px; + padding: 0px 8px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + background-color: #cecece; +} + + +.swiper-scrollbar +{ + height: 10px!important; +} + + +} diff --git a/resources/web/homepage/img/t1.svg b/resources/web/homepage/img/t1.svg new file mode 100644 index 0000000000..319067548b --- /dev/null +++ b/resources/web/homepage/img/t1.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/resources/web/homepage/img/t2.svg b/resources/web/homepage/img/t2.svg new file mode 100644 index 0000000000..a7864b126c --- /dev/null +++ b/resources/web/homepage/img/t2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/resources/web/homepage/index.html b/resources/web/homepage/index.html index 0c19e78a12..39a5403d62 100644 --- a/resources/web/homepage/index.html +++ b/resources/web/homepage/index.html @@ -5,12 +5,17 @@ homepage - - - - - - + + + + + + + + + + + @@ -74,9 +79,59 @@

  • -
    +
    + +
    +
    + +
    Staff pick
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + + +
    -
    +
    +
    recent open
    Clear all
    diff --git a/resources/web/homepage/js/globalapi.js b/resources/web/homepage/js/globalapi.js deleted file mode 100644 index ab7d5e6a20..0000000000 --- a/resources/web/homepage/js/globalapi.js +++ /dev/null @@ -1,340 +0,0 @@ - -/*------------------ Date Function ------------------------*/ -function GetFullToday( ) -{ - var d=new Date(); - - var nday=d.getDate(); - var nmonth=d.getMonth()+1; - var nyear=d.getFullYear(); - - var strM=nmonth+''; - if( nmonth<10 ) - strM='0'+nmonth; - - var strD=nday+''; - if( nday<10 ) - strD='0'+nday; - - return nyear+'-'+strM+'-'+strD; -} - -function GetFullDate() -{ - var d=new Date(); - - var tDate={}; - - tDate.nyear=d.getFullYear(); - tDate.nmonth=d.getMonth()+1; - tDate.nday=d.getDate(); - - tDate.nhour=d.getHours(); - tDate.nminute=d.getMinutes(); - tDate.nsecond=d.getSeconds(); - - tDate.nweek=d.getDay(); - tDate.ndate=d.getDate(); - - var strM=tDate.nmonth+''; - if( tDate.nmonth<10 ) - strM='0'+tDate.nmonth; - - var strD=tDate.nday+''; - if( tDate.nday<10 ) - strD='0'+tDate.nday; - - var strH=tDate.nhour+''; - if( tDate.nhour<10 ) - strH='0'+tDate.nhour; - - var strMin=tDate.nminute+''; - if( tDate.nminute<10 ) - strMin='0'+tDate.nminute; - - var strS=tDate.nsecond+''; - if( tDate.nsecond<10 ) - strS='0'+tDate.nsecond; - - tDate.strdate=tDate.nyear+'-'+strM+'-'+strD; - tDate.strFulldate=tDate.strdate+' '+strH+':'+strMin+':'+strS; - - return tDate; -} - - -function Unixtimestamp2Date( nSecond ) -{ - var d=new Date(nSecond*1000); - - var tDate={}; - - tDate.nyear=d.getFullYear(); - tDate.nmonth=d.getMonth()+1; - tDate.nday=d.getDate(); - - tDate.nhour=d.getHours(); - tDate.nminute=d.getMinutes(); - tDate.nsecond=d.getSeconds(); - - tDate.nweek=d.getDay(); - tDate.ndate=d.getDate(); - - var strM=tDate.nmonth+''; - if( tDate.nmonth<10 ) - strM='0'+tDate.nmonth; - - var strD=tDate.nday+''; - if( tDate.nday<10 ) - strD='0'+tDate.nday; - - tDate.strdate=tDate.nyear+'-'+strM+'-'+strD; - - return tDate.strdate; -} - - -//------------Array Function------------- -Array.prototype.in_array = function (e) { - let sArray= ',' + this.join(this.S) + ','; - let skey=','+e+','; - - if(sArray.indexOf(skey)>=0) - return true; - else - return false; - } - - - -//------------String Function------------------ -/** -* Delete Left/Right Side Blank -*/ -String.prototype.trim=function() -{ - return this.replace(/(^\s*)|(\s*$)/g, ''); -} -/** -* Delete Left Side Blank -*/ -String.prototype.ltrim=function() -{ - return this.replace(/(^\s*)/g,''); -} -/** -* Delete Right Side Blank -*/ -String.prototype.rtrim=function() -{ - return this.replace(/(\s*$)/g,''); -} - - -//----------------Get Param------------- -function GetQueryString(name) -{ - var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); - var r = window.location.search.substr(1).match(reg); - if (r!=null) - { - return unescape(r[2]); - } - else - { - return null; - } -} - -function GetGetStr() -{ - let strGet=""; - - //获取当前URL - let url = document.location.href; - - //获取?的位置 - let index = url.indexOf("?") - if(index != -1) { - //截取出?后面的字符串 - strGet = url.substr(index + 1); - } - - return strGet; -} - - -/*--------------------JSON Function------------*/ - -/* -功能:检查一个字符串是不是标准的JSON格式 -参数: strJson 被检查的字符串 -返回值: 如果字符串是一个标准的JSON格式,则返回JSON对象 - 如果字符串不是标准JSON格式,则返回null -*/ -function IsJson( strJson ) -{ - var tJson=null; - try - { - tJson=JSON.parse(strJson); - } - catch(exception) - { - return null; - } - - return tJson; -} - -/*-----------------------Ajax Function--------------------*/ -/*对JQuery的Ajax函数的封装,只支持异步 -参数说明: - url 目标地址 - action post/get - data 字符串格式的发送内容 - asyn true---异步模式;false-----同步模式; -*/ -function HttpReq( url,action, data,callbackfunc) -{ - var strAction=action.toLowerCase(); - - if( strAction=="post") - { - $.post(url,data,callbackfunc); - } - else if( strAction=="get") - { - $.get(url,callbackfunc); - } -} - -/*---------------Cookie Function-------------------*/ -function setCookie(name, value, time='',path='') { - if(time && path){ - var strsec = time * 1000; - var exp = new Date(); - exp.setTime(exp.getTime() + strsec * 1); - document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString() + ";path="+path; - }else if(time){ - var strsec = time * 1000; - var exp = new Date(); - exp.setTime(exp.getTime() + strsec * 1); - document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString(); - }else if(path){ - document.cookie = name + "=" + escape(value) + ";path="+path; - }else{ - document.cookie = name + "=" + escape(value); - } -} - -function getCookie(c_name) -{ - if(document.cookie.length > 0) { - c_start = document.cookie.indexOf(c_name + "=");//获取字符串的起点 - if(c_start != -1) { - c_start = c_start + c_name.length + 1;//获取值的起点 - c_end = document.cookie.indexOf(";", c_start);//获取结尾处 - if(c_end == -1) c_end = document.cookie.length;//如果是最后一个,结尾就是cookie字符串的结尾 - return decodeURI(document.cookie.substring(c_start, c_end));//截取字符串返回 - } - } - - return ""; -} - -function checkCookie(c_name) { - username = getCookie(c_name); - console.log(username); - if (username != null && username != "") - { return true; } - else - { return false; } -} - -function clearCookie(name) { - setCookie(name, "", -1); -} - - -/*--------Studio WX Message-------*/ -function IsInSlicer() -{ - let bMatch=navigator.userAgent.match( RegExp('BBL-Slicer','i') ); - - return bMatch; -} - - - -function SendWXMessage( strMsg ) -{ - let bCheck=IsInSlicer(); - - if(bCheck!=null) - { - window.wx.postMessage(strMsg); - } -} - - -/*------CSS Link Control----*/ -function RemoveCssLink( LinkPath ) -{ - let pNow=$("head link[href='"+LinkPath+"']"); - - let nTotal=pNow.length; - for( let n=0;n0) - RemoveCssLink(DarkCssPath); - } - else - { - if(nNow==0) - AddCssLink(DarkCssPath); - } -} - -SwitchDarkMode("css/dark.css"); \ No newline at end of file diff --git a/resources/web/homepage/js/home.js b/resources/web/homepage/js/home.js index bfb27fe72c..7be05a331f 100644 --- a/resources/web/homepage/js/home.js +++ b/resources/web/homepage/js/home.js @@ -12,6 +12,9 @@ function OnInit() SendMsg_GetLoginInfo(); SendMsg_GetRecentFile(); + SendMsg_GetStaffPick(); + + //InitStaffPick(); } //------最佳打开文件的右键菜单功能---------- @@ -118,6 +121,10 @@ function HandleStudio( pVal ) $("#NoPluginTip").hide(); } } + else if( strCmd=="modelmall_model_advise_get") + { + ShowStaffPick( pVal['hits'] ); + } } function GotoMenu( strMenu ) @@ -398,6 +405,90 @@ function OpenWikiUrl( strUrl ) SendWXMessage( JSON.stringify(tSend) ); } +//--------------Staff Pick------- +var StaffPickSwiper=null; +function InitStaffPick() +{ + if( StaffPickSwiper!=null ) + { + StaffPickSwiper.destroy(true,true); + StaffPickSwiper=null; + } + + StaffPickSwiper = new Swiper('#HotModel_Swiper.swiper', { + slidesPerView : 'auto', + spaceBetween: 16, + navigation: { + nextEl: '.swiper-button-next', + prevEl: '.swiper-button-prev', + }, +// autoplay: { +// delay: 3000, +// stopOnLastSlide: false, +// disableOnInteraction: true, +// disableOnInteraction: false +// }, +// pagination: { +// el: '.swiper-pagination', +// }, + scrollbar: { + el: '.swiper-scrollbar', + draggable: true + } + }); +} + +function SendMsg_GetStaffPick() +{ + var tSend={}; + tSend['sequence_id']=Math.round(new Date() / 1000); + tSend['command']="modelmall_model_advise_get"; + + SendWXMessage( JSON.stringify(tSend) ); +} + +function ShowStaffPick( ModelList ) +{ + let PickTotal=ModelList.length; + if(PickTotal==0) + { + $('#HotModelList').html(''); + $('#HotModelArea').hide(); + + return; + } + + let strPickHtml=''; + for(let a=0;a'+ + '
    '+ + '
    '+ModelName+'
    '+ + '
    '; + } + + $('#HotModelList').html(strPickHtml); + InitStaffPick(); + $('#HotModelArea').show(); +} + +function OpenOneStaffPickModel( ModelID ) +{ + var tSend={}; + tSend['sequence_id']=Math.round(new Date() / 1000); + tSend['command']="modelmall_model_open"; + tSend['data']={}; + tSend['data']['id']=ModelID; + + SendWXMessage( JSON.stringify(tSend) ); +} + //---------------Global----------------- window.postMessage = HandleStudio; diff --git a/resources/web/homepage/js/jquery-3.6.0.min.js b/resources/web/homepage/js/jquery-3.6.0.min.js deleted file mode 100644 index c4c6022f29..0000000000 --- a/resources/web/homepage/js/jquery-3.6.0.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="
    ",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
    ",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0 Date: Tue, 4 Apr 2023 10:53:08 +0800 Subject: [PATCH 205/339] ci: update build version to 01.05.05.68 Change-Id: Iff517c101fb4c500f463a93aa74fccf8818eaa1e --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index 2a74609230..d2aef24b9b 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.05.05.67") +set(SLIC3R_VERSION "01.05.05.68") From 37ed71b7641e777f1d1102e44b0ebcec6ae30700 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Mon, 3 Apr 2023 14:52:30 +0800 Subject: [PATCH 206/339] ENH: Save text information to 3mf file Change-Id: I28b984b5ad3f7a8e3332eb4b7fe9e8f942e81418 (cherry picked from commit e56d21a376d96605b071af906b653101f63ec9e2) --- src/libslic3r/Format/bbs_3mf.cpp | 140 +++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 1fd2b1180a..ad7d8fff68 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -206,6 +206,24 @@ static constexpr const char* ASSEMBLE_ITEM_TAG = "assemble_item"; static constexpr const char* SLICE_HEADER_TAG = "header"; static constexpr const char* SLICE_HEADER_ITEM_TAG = "header_item"; +// text_info +static constexpr const char* TEXT_INFO_TAG = "text_info"; +static constexpr const char* TEXT_ATTR = "text"; +static constexpr const char* FONT_NAME_ATTR = "font_name"; +static constexpr const char* FONT_INDEX_ATTR = "font_index"; +static constexpr const char* FONT_SIZE_ATTR = "font_size"; +static constexpr const char* THICKNESS_ATTR = "thickness"; +static constexpr const char* EMBEDED_DEPTH_ATTR = "embeded_depth"; +static constexpr const char* ROTATE_ANGLE_ATTR = "rotate_angle"; +static constexpr const char* TEXT_GAP_ATTR = "text_gap"; +static constexpr const char* BOLD_ATTR = "bold"; +static constexpr const char* ITALIC_ATTR = "italic"; +static constexpr const char* SURFACE_TEXT_ATTR = "surface_text"; +static constexpr const char* KEEP_HORIZONTAL_ATTR = "keep_horizontal"; +static constexpr const char* HIT_MESH_ATTR = "hit_mesh"; +static constexpr const char* HIT_POSITION_ATTR = "hit_position"; +static constexpr const char* HIT_NORMAL_ATTR = "hit_normal"; + // BBS: encrypt static constexpr const char* RELATIONSHIP_TAG = "Relationship"; static constexpr const char* PID_ATTR = "pid"; @@ -371,6 +389,33 @@ bool bbs_get_attribute_value_bool(const char** attributes, unsigned int attribut return (text != nullptr) ? (bool)::atoi(text) : true; } +void add_vec3(std::stringstream &stream, const Slic3r::Vec3f &tr) +{ + for (unsigned r = 0; r < 3; ++r) { + stream << tr(r); + if (r != 2) + stream << " "; + } +} + +Slic3r::Vec3f get_vec3_from_string(const std::string &pos_str) +{ + Slic3r::Vec3f pos(0, 0, 0); + if (pos_str.empty()) + return pos; + + std::vector values; + boost::split(values, pos_str, boost::is_any_of(" "), boost::token_compress_on); + + if (values.size() != 3) + return pos; + + for (int i = 0; i < 3; ++i) + pos(i) = ::atof(values[i].c_str()); + + return pos; +} + Slic3r::Transform3d bbs_get_transform_from_3mf_specs_string(const std::string& mat_str) { // check: https://3mf.io/3d-manufacturing-format/ or https://github.com/3MFConsortium/spec_core/blob/master/3MF%20Core%20Specification.md @@ -656,6 +701,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) MetadataList metadata; RepairedMeshErrors mesh_stats; ModelVolumeType part_type; + TextInfo text_info; VolumeMetadata(unsigned int first_triangle_id, unsigned int last_triangle_id, ModelVolumeType type = ModelVolumeType::MODEL_PART) : first_triangle_id(first_triangle_id) @@ -1060,6 +1106,9 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) bool _handle_start_assemble_item(const char** attributes, unsigned int num_attributes); bool _handle_end_assemble_item(); + bool _handle_start_text_info_item(const char **attributes, unsigned int num_attributes); + bool _handle_end_text_info_item(); + // BBS: callbacks to parse the .rels file static void XMLCALL _handle_start_relationships_element(void* userData, const char* name, const char** attributes); static void XMLCALL _handle_end_relationships_element(void* userData, const char* name); @@ -2820,6 +2869,8 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) res = _handle_start_assemble(attributes, num_attributes); else if (::strcmp(ASSEMBLE_ITEM_TAG, name) == 0) res = _handle_start_assemble_item(attributes, num_attributes); + else if (::strcmp(TEXT_INFO_TAG, name) == 0) + res = _handle_start_text_info_item(attributes, num_attributes); if (!res) _stop_xml_parser(); @@ -3851,6 +3902,56 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) return true; } + bool _BBS_3MF_Importer::_handle_start_text_info_item(const char **attributes, unsigned int num_attributes) + { + IdToMetadataMap::iterator object = m_objects_metadata.find(m_curr_config.object_id); + if (object == m_objects_metadata.end()) { + add_error("can not find object for text_info, id " + std::to_string(m_curr_config.object_id)); + return false; + } + if ((m_curr_config.volume_id == -1) || ((object->second.volumes.size() - 1) < m_curr_config.volume_id)) { + add_error("can not find part for text_info"); + return false; + } + + ObjectMetadata::VolumeMetadata &volume = object->second.volumes[m_curr_config.volume_id]; + + TextInfo text_info; + text_info.m_text = bbs_get_attribute_value_string(attributes, num_attributes, TEXT_ATTR); + text_info.m_font_name = bbs_get_attribute_value_string(attributes, num_attributes, FONT_NAME_ATTR); + + text_info.m_curr_font_idx = bbs_get_attribute_value_int(attributes, num_attributes, FONT_INDEX_ATTR); + + text_info.m_font_size = bbs_get_attribute_value_float(attributes, num_attributes, FONT_SIZE_ATTR); + text_info.m_thickness = bbs_get_attribute_value_float(attributes, num_attributes, THICKNESS_ATTR); + text_info.m_embeded_depth = bbs_get_attribute_value_float(attributes, num_attributes, EMBEDED_DEPTH_ATTR); + text_info.m_rotate_angle = bbs_get_attribute_value_float(attributes, num_attributes, ROTATE_ANGLE_ATTR); + text_info.m_text_gap = bbs_get_attribute_value_float(attributes, num_attributes, TEXT_GAP_ATTR); + + text_info.m_bold = bbs_get_attribute_value_int(attributes, num_attributes, BOLD_ATTR); + text_info.m_italic = bbs_get_attribute_value_int(attributes, num_attributes, ITALIC_ATTR); + text_info.m_is_surface_text = bbs_get_attribute_value_int(attributes, num_attributes, SURFACE_TEXT_ATTR); + text_info.m_keep_horizontal = bbs_get_attribute_value_int(attributes, num_attributes, KEEP_HORIZONTAL_ATTR); + + text_info.m_rr.mesh_id = bbs_get_attribute_value_int(attributes, num_attributes, HIT_MESH_ATTR); + + std::string hit_pos = bbs_get_attribute_value_string(attributes, num_attributes, HIT_POSITION_ATTR); + if (!hit_pos.empty()) + text_info.m_rr.hit = get_vec3_from_string(hit_pos); + + std::string hit_normal = bbs_get_attribute_value_string(attributes, num_attributes, HIT_NORMAL_ATTR); + if (!hit_normal.empty()) + text_info.m_rr.normal = get_vec3_from_string(hit_normal); + + volume.text_info = text_info; + return true; + } + + bool _BBS_3MF_Importer::_handle_end_text_info_item() + { + return true; + } + void XMLCALL _BBS_3MF_Importer::_handle_start_relationships_element(void* userData, const char* name, const char** attributes) { _BBS_3MF_Importer* importer = (_BBS_3MF_Importer*)userData; @@ -4103,6 +4204,9 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) volume->set_type(volume_data->part_type); + if (!volume_data->text_info.m_text.empty()) + volume->set_text_info(volume_data->text_info); + // apply the remaining volume's metadata for (const Metadata& metadata : volume_data->metadata) { if (metadata.key == NAME_KEY) @@ -6522,6 +6626,38 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) return true; } + void _add_text_info_to_archive(std::stringstream& stream, const TextInfo& text_info) { + stream << " <" << TEXT_INFO_TAG << " "; + + stream << TEXT_ATTR << "=\"" << text_info.m_text << "\" "; + stream << FONT_NAME_ATTR << "=\"" << text_info.m_font_name << "\" "; + + stream << FONT_INDEX_ATTR << "=\"" << text_info.m_curr_font_idx << "\" "; + + stream << FONT_SIZE_ATTR << "=\"" << text_info.m_font_size << "\" "; + stream << THICKNESS_ATTR << "=\"" << text_info.m_thickness << "\" "; + stream << EMBEDED_DEPTH_ATTR << "=\"" << text_info.m_embeded_depth << "\" "; + stream << ROTATE_ANGLE_ATTR << "=\"" << text_info.m_rotate_angle << "\" "; + stream << TEXT_GAP_ATTR << "=\"" << text_info.m_text_gap << "\" "; + + stream << BOLD_ATTR << "=\"" << (text_info.m_bold ? 1 : 0) << "\" "; + stream << ITALIC_ATTR << "=\"" << (text_info.m_italic ? 1 : 0) << "\" "; + stream << SURFACE_TEXT_ATTR << "=\"" << (text_info.m_is_surface_text ? 1 : 0) << "\" "; + stream << KEEP_HORIZONTAL_ATTR << "=\"" << (text_info.m_keep_horizontal ? 1 : 0) << "\" "; + + stream << HIT_MESH_ATTR << "=\"" << text_info.m_rr.mesh_id << "\" "; + + stream << HIT_POSITION_ATTR << "=\""; + add_vec3(stream, text_info.m_rr.hit); + stream << "\" "; + + stream << HIT_NORMAL_ATTR << "=\""; + add_vec3(stream, text_info.m_rr.normal); + stream << "\" "; + + stream << "/>\n"; + } + bool _BBS_3MF_Exporter::_add_model_config_file_to_archive(mz_zip_archive& archive, const Model& model, PlateDataPtrs& plate_data_list, const IdToObjectDataMap &objects_data, int export_plate_idx, bool save_gcode, bool use_loaded_id) { std::stringstream stream; @@ -6618,6 +6754,10 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) stream << " <" << METADATA_TAG << " "<< KEY_ATTR << "=\"" << key << "\" " << VALUE_ATTR << "=\"" << volume->config.opt_serialize(key) << "\"/>\n"; } + const TextInfo &text_info = volume->get_text_info(); + if (!text_info.m_text.empty()) + _add_text_info_to_archive(stream, text_info); + //add the shared mesh logic const TriangleMesh* current_mesh = volume->mesh_ptr(); std::map::iterator mesh_iter; From 74e1ba796302bc8efdc9528c1d0cd8f3dbcecae4 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Tue, 4 Apr 2023 10:29:36 +0800 Subject: [PATCH 207/339] FIX: failed to import svg file(path + width) STUDIO-1807 Change-Id: I2a4e1866c0f23bfbec4ae6765a78f6f7d994cd19 (cherry picked from commit c8b59f4e3ffd0ba34a5d56ca7a0538ee854f1a91) --- src/libslic3r/Format/svg.cpp | 56 +++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/Format/svg.cpp b/src/libslic3r/Format/svg.cpp index bf2f3cf492..edca80e770 100644 --- a/src/libslic3r/Format/svg.cpp +++ b/src/libslic3r/Format/svg.cpp @@ -19,6 +19,9 @@ #include "TopExp_Explorer.hxx" #include "TopoDS.hxx" #include "BRepExtrema_SelfIntersection.hxx" +#include "clipper/clipper.hpp" + +using namespace ClipperLib; namespace Slic3r { const double STEP_TRANS_CHORD_ERROR = 0.005; @@ -188,7 +191,8 @@ bool get_svg_profile(const char *path, std::vector &element_infos, } } // keep the start and end points of profile connected - profile_line_points.back().second = profile_line_points[0].first; + if (shape->fill.gradient != nullptr) + profile_line_points.back().second = profile_line_points[0].first; if (is_profile_self_interaction(profile_line_points)) BOOST_LOG_TRIVIAL(warning) << "the profile is self interaction."; @@ -196,6 +200,56 @@ bool get_svg_profile(const char *path, std::vector &element_infos, path_line_points.push_back(profile_line_points); } + if (shape->fill.gradient == nullptr) { + double scale_size = 1e6; + std::vector>> new_path_line_points; + float stroke_width = shape->strokeWidth * scale_size; + Polygons polygons; + bool close_polygon = false; + for (int i = 0; i < path_line_points.size(); ++i) { + ClipperLib::Path pt_path; + for (auto line_point : path_line_points[i]) { + pt_path.push_back(IntPoint(line_point.first.X() * scale_size, line_point.first.Y() * scale_size)); + } + pt_path.push_back(IntPoint(path_line_points[i].back().second.X() * scale_size, path_line_points[i].back().second.Y() * scale_size)); + + ClipperLib::Paths out_paths; + ClipperLib::ClipperOffset co; + if (pt_path.front() == pt_path.back()) { + co.AddPath(pt_path, ClipperLib::jtMiter, ClipperLib::etClosedLine); + close_polygon = true; + } else { + co.AddPath(pt_path, ClipperLib::jtMiter, ClipperLib::etOpenSquare); + close_polygon = false; + } + co.Execute(out_paths, stroke_width / 2); + + for (auto out_path : out_paths) { + polygons.emplace_back(Polygon(out_path)); + } + } + + if (!close_polygon) + polygons = union_(polygons); + + std::vector> profile_line_points; + for (auto polygon : polygons) { + profile_line_points.clear(); + for (int i = 0; i < polygon.size() - 1; ++i) { + gp_Pnt pt1(double(polygon[i][0] / scale_size), double(polygon[i][1] / scale_size), 0); + gp_Pnt pt2(double(polygon[i + 1][0] / scale_size), double(polygon[i + 1][1] / scale_size), 0); + profile_line_points.push_back({pt1, pt2}); + } + gp_Pnt pt1(double(polygon.back()[0] / scale_size), double(polygon.back()[1] / scale_size), 0); + gp_Pnt pt2(double(polygon.front()[0] / scale_size), double(polygon.front()[1] / scale_size), 0); + profile_line_points.push_back({pt1, pt2}); + + new_path_line_points.push_back(profile_line_points); + } + + path_line_points = new_path_line_points; + } + // generate all profile curves std::vector wires; int index = 0; From 3d710609d9610608fb1620e3a2a338f8fa6e8051 Mon Sep 17 00:00:00 2001 From: Arthur Date: Mon, 3 Apr 2023 20:49:25 +0800 Subject: [PATCH 208/339] ENH: improve cantilever detection's speed and accuracy Cantilever detection should be done layer by layer, instead of using merged_poly of clusters. Jira: STUDIO-2198 Change-Id: Ifea017fc4c13425a944ee80f7dedb603a8e14cc2 (cherry picked from commit 0803a439a458ffeb9c6d91e90344a5b78794a6bd) --- src/libslic3r/PrintObject.cpp | 2 +- src/libslic3r/SupportMaterial.cpp | 76 ++++++++--------- src/libslic3r/TreeSupport.cpp | 131 ++++++++++++------------------ src/libslic3r/TreeSupport.hpp | 2 +- 4 files changed, 94 insertions(+), 117 deletions(-) diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index ed05e60e2c..bd93015522 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -2657,7 +2657,7 @@ SupportNecessaryType PrintObject::is_support_necessary() this->clear_support_layers(); if (tree_support.has_sharp_tails) return SharpTail; - else if (tree_support.has_cantilever && tree_support.max_cantilevel_dist > cantilevel_dist_thresh) + else if (tree_support.has_cantilever && tree_support.max_cantilever_dist > cantilevel_dist_thresh) return Cantilever; #endif return NoNeedSupp; diff --git a/src/libslic3r/SupportMaterial.cpp b/src/libslic3r/SupportMaterial.cpp index 261637959d..32f5f8391b 100644 --- a/src/libslic3r/SupportMaterial.cpp +++ b/src/libslic3r/SupportMaterial.cpp @@ -1651,7 +1651,7 @@ static inline ExPolygons detect_overhangs( overhang = offset_ex(overhang, 0.05 * fw); polygons_append(diff_polygons, to_polygons(overhang)); } - } + } } if (diff_polygons.empty()) @@ -1680,7 +1680,30 @@ static inline ExPolygons detect_overhangs( } // for each layer.region } - return union_ex(overhang_polygons); + ExPolygons overhang_areas = union_ex(overhang_polygons); + // check cantilever + if (layer.lower_layer) { + for (ExPolygon& poly : overhang_areas) { + float fw = float(layer.regions().front()->flow(frExternalPerimeter).scaled_width()); + auto cluster_boundary_ex = intersection_ex(poly, offset_ex(layer.lower_layer->lslices, scale_(0.5))); + Polygons cluster_boundary = to_polygons(cluster_boundary_ex); + if (cluster_boundary.empty()) continue; + double dist_max = 0; + for (auto& pt : poly.contour.points) { + double dist_pt = std::numeric_limits::max(); + for (auto& ply : cluster_boundary) { + double d = ply.distance_to(pt); + dist_pt = std::min(dist_pt, d); + } + dist_max = std::max(dist_max, dist_pt); + } + if (dist_max > scale_(3)) { // is cantilever if the farmost point is larger than 3mm away from base + layer.cantilevers.emplace_back(poly); + } + } + } + + return overhang_areas; } // Tuple: overhang_polygons, contact_polygons, enforcer_polygons, no_interface_offset @@ -2154,19 +2177,21 @@ struct OverhangCluster { } }; -static void add_overhang(std::vector& clusters, ExPolygon* overhang, int layer_nr, coordf_t offset_scaled) { +static OverhangCluster* add_overhang(std::vector& clusters, ExPolygon* overhang, int layer_nr, coordf_t offset_scaled) { + OverhangCluster* cluster = nullptr; bool found = false; for (int i = 0; i < clusters.size(); i++) { - auto& cluster = clusters[i]; - if (cluster.intersects(*overhang, layer_nr)) { - cluster.insert(overhang, layer_nr); - found = true; + auto cluster_i = &clusters[i]; + if (cluster_i->intersects(*overhang, layer_nr)) { + cluster_i->insert(overhang, layer_nr); + cluster = cluster_i; break; } } - if (!found) { - clusters.emplace_back(overhang, layer_nr, offset_scaled); + if (!cluster) { + cluster = &clusters.emplace_back(overhang, layer_nr, offset_scaled); } + return cluster; }; // Generate top contact layers supporting overhangs. @@ -2328,13 +2353,15 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_ std::set removed_overhang; for (size_t layer_id = layer_id_start; layer_id < num_layers; layer_id++) { + const Layer* layer = object.get_layer(layer_id); for (auto& overhang : overhangs_per_layers[layer_id]) { - add_overhang(clusters, &overhang, layer_id, fw_scaled); + OverhangCluster* cluster = add_overhang(clusters, &overhang, layer_id, fw_scaled); + if (overlaps({ overhang }, layer->cantilevers)) + cluster->is_cantilever = true; } } for (OverhangCluster& cluster : clusters) { - // 3. check whether the small overhang is sharp tail cluster.is_sharp_tail = false; for (size_t layer_id = cluster.min_layer; layer_id <= cluster.max_layer; layer_id++) { @@ -2344,33 +2371,6 @@ PrintObjectSupportMaterial::MyLayersPtr PrintObjectSupportMaterial::top_contact_ break; } } - if (cluster.is_sharp_tail) - continue; - - if (!cluster.is_sharp_tail) { - // 4. check whether the overhang cluster is cantilever (far awary from main body) - const Layer* layer = object.get_layer(cluster.min_layer); - if (layer->lower_layer == NULL) continue; - Layer* lower_layer = layer->lower_layer; - auto cluster_boundary = intersection(cluster.merged_overhangs_dilated, offset(lower_layer->lslices, scale_(0.5))); - if (cluster_boundary.empty()) continue; - double dist_max = 0; - Points cluster_pts; - for (auto& poly : cluster.merged_overhangs_dilated) - append(cluster_pts, poly.contour.points); - for (auto& pt : cluster_pts) { - double dist_pt = std::numeric_limits::max(); - for (auto& poly : cluster_boundary) { - double d = poly.distance_to(pt); - dist_pt = std::min(dist_pt, d); - } - dist_max = std::max(dist_max, dist_pt); - } - if (dist_max > scale_(3)) { - cluster.is_cantilever = true; - continue; - } - } if (!cluster.is_sharp_tail && !cluster.is_cantilever) { // 2. check overhang cluster size is small diff --git a/src/libslic3r/TreeSupport.cpp b/src/libslic3r/TreeSupport.cpp index ff1065e6ad..8c07dc37e9 100644 --- a/src/libslic3r/TreeSupport.cpp +++ b/src/libslic3r/TreeSupport.cpp @@ -824,21 +824,24 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) }; std::vector overhangClusters; - auto find_and_insert_cluster = [](auto& regionClusters, const ExPolygon& region, int layer_nr, coordf_t offset) { - bool found = false; - for (int i = 0; i < regionClusters.size();i++) { - auto& cluster = regionClusters[i]; - if (cluster.push_back_if_intersects(region, layer_nr, offset)) { - found = true; + auto find_and_insert_cluster = [](auto ®ionClusters, const ExPolygon ®ion, int layer_nr, coordf_t offset) { + OverhangCluster *cluster = nullptr; + for (int i = 0; i < regionClusters.size(); i++) { + auto cluster_i = ®ionClusters[i]; + if (cluster_i->push_back_if_intersects(region, layer_nr, offset)) { + cluster = cluster_i; break; } } - if (!found) { - regionClusters.emplace_back(®ion, layer_nr); + if (!cluster) { + cluster = ®ionClusters.emplace_back(®ion, layer_nr); } + return cluster; }; - if (!is_tree(stype)) return; + if (!is_tree(stype)) return; + + max_cantilever_dist = 0; // main part of overhang detection can be parallel tbb::parallel_for(tbb::blocked_range(0, m_object->layer_count()), @@ -912,26 +915,43 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) if (!overhang.empty()) has_sharp_tails = true; -#ifdef SUPPORT_TREE_DEBUG_TO_SVG - SVG svg(get_svg_filename(std::to_string(layer->print_z), "sharp_tail"), m_object->bounding_box()); - if (svg.is_opened()) { - svg.draw(overhang, "yellow"); - svg.draw(lower_layer->lslices, "red"); - } -#endif - } + } } } SupportLayer* ts_layer = m_object->get_support_layer(layer_nr + m_raft_layers); for (ExPolygon& poly : overhang_areas) { - if (!offset_ex(poly, -0.1 * extrusion_width_scaled).empty()) - ts_layer->overhang_areas.emplace_back(poly); + if (offset_ex(poly, -0.1 * extrusion_width_scaled).empty()) continue; + ts_layer->overhang_areas.emplace_back(poly); + + // check cantilever + { + auto cluster_boundary_ex = intersection_ex(poly, offset_ex(lower_layer->lslices, scale_(0.5))); + Polygons cluster_boundary = to_polygons(cluster_boundary_ex); + if (cluster_boundary.empty()) continue; + double dist_max = 0; + for (auto& pt : poly.contour.points) { + double dist_pt = std::numeric_limits::max(); + for (auto& ply : cluster_boundary) { + double d = ply.distance_to(pt); + dist_pt = std::min(dist_pt, d); + } + dist_max = std::max(dist_max, dist_pt); + } + if (dist_max > scale_(3)) { // is cantilever if the farmost point is larger than 3mm away from base + max_cantilever_dist = std::max(max_cantilever_dist, dist_max); + layer->cantilevers.emplace_back(poly); + BOOST_LOG_TRIVIAL(debug) << "found a cantilever cluster. layer_nr=" << layer_nr << dist_max; + has_cantilever = true; + } + } } } } ); // end tbb::parallel_for + BOOST_LOG_TRIVIAL(info) << "max_cantilever_dist=" << max_cantilever_dist; + // check if the sharp tails should be extended higher if (is_auto(stype) && g_config_support_sharp_tails && !detect_first_sharp_tail_only) { for (size_t layer_nr = 0; layer_nr < m_object->layer_count(); layer_nr++) { @@ -1026,8 +1046,11 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) if (m_object->print()->canceled()) break; SupportLayer* ts_layer = m_object->get_support_layer(layer_nr + m_raft_layers); + Layer* layer = m_object->get_layer(layer_nr); for (auto& overhang : ts_layer->overhang_areas) { - find_and_insert_cluster(overhangClusters, overhang, layer_nr, extrusion_width_scaled); + OverhangCluster* cluster = find_and_insert_cluster(overhangClusters, overhang, layer_nr, extrusion_width_scaled); + if (overlaps({ overhang },layer->cantilevers)) + cluster->is_cantilever = true; } } @@ -1035,57 +1058,19 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) auto blockers = m_object->slice_support_blockers(); m_object->project_and_append_custom_facets(false, EnforcerBlockerType::ENFORCER, enforcers); m_object->project_and_append_custom_facets(false, EnforcerBlockerType::BLOCKER, blockers); - - // check whether the overhang cluster is sharp tail or cantilever - max_cantilevel_dist = 0; - for (auto& cluster : overhangClusters) { - // 3. check whether the small overhang is sharp tail - cluster.is_sharp_tail = false; - for (size_t layer_id = cluster.min_layer; layer_id <= cluster.max_layer; layer_id++) { - Layer* layer = m_object->get_layer(layer_id); - if (overlaps(layer->sharp_tails, cluster.merged_poly)) { - cluster.is_sharp_tail = true; - break; - } - } - if (cluster.is_sharp_tail) continue; - - // check whether the overhang cluster is cantilever (far awary from main body) - Layer* layer = m_object->get_layer(cluster.min_layer); - if (layer->lower_layer == NULL) continue; - Layer* lower_layer = layer->lower_layer; - auto cluster_boundary = intersection(cluster.merged_poly, offset(lower_layer->lslices, scale_(0.5))); - if (cluster_boundary.empty()) continue; - double dist_max = 0; - Points cluster_pts; - for (auto& poly : cluster.merged_poly) - append(cluster_pts, poly.contour.points); - for (auto& pt : cluster_pts) { - double dist_pt = std::numeric_limits::max(); - for (auto& poly : cluster_boundary) { - double d = poly.distance_to(pt); - dist_pt = std::min(dist_pt, d); - } - dist_max = std::max(dist_max, dist_pt); - } - if (dist_max > scale_(3)) { // this cluster is cantilever if the farmost point is larger than 3mm away from base - for (auto it = cluster.layer_overhangs.begin(); it != cluster.layer_overhangs.end(); it++) { - int layer_nr = it->first; - auto p_overhang = it->second; - m_object->get_layer(layer_nr)->cantilevers.emplace_back(*p_overhang); - } - max_cantilevel_dist = std::max(max_cantilevel_dist, dist_max); - cluster.is_cantilever = true; - } - } - BOOST_LOG_TRIVIAL(info) << "max_cantilevel_dist=" << max_cantilevel_dist; - if (is_auto(stype) && g_config_remove_small_overhangs) { if (blockers.size() < m_object->layer_count()) blockers.resize(m_object->layer_count()); for (auto& cluster : overhangClusters) { - // 4. check whether the overhang cluster is cantilever or sharp tail - if (cluster.is_cantilever || cluster.is_sharp_tail) continue; + // 3. check whether the small overhang is sharp tail + cluster.is_sharp_tail = false; + for (size_t layer_id = cluster.min_layer; layer_id <= cluster.max_layer; layer_id++) { + Layer* layer = m_object->get_layer(layer_id); + if (overlaps(layer->sharp_tails, cluster.merged_poly)) { + cluster.is_sharp_tail = true; + break; + } + } if (!cluster.is_sharp_tail && !cluster.is_cantilever) { // 2. check overhang cluster size is smaller than 3.0 * fw_scaled @@ -1111,15 +1096,6 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) int layer_nr = it->first; auto p_overhang = it->second; blockers[layer_nr].push_back(p_overhang->contour); - // auto dilate1 = offset_ex(*p_overhang, extrusion_width_scaled); - // auto erode1 = offset_ex(*p_overhang, -extrusion_width_scaled); - // Layer* layer = m_object->get_layer(layer_nr); - // auto inter_with_others = intersection_ex(dilate1, diff_ex(layer->lslices, *p_overhang)); - //// the following cases are small overhangs: - //// 1) overhang is single line (erode1.empty()==true) - //// 2) overhang is not island (intersects with others) - // if (erode1.empty() && !inter_with_others.empty()) - // blockers[layer_nr].push_back(p_overhang->contour); } } } @@ -1133,6 +1109,7 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) auto layer = m_object->get_layer(layer_nr); auto lower_layer = layer->lower_layer; if (support_critical_regions_only) { + ts_layer->overhang_areas.clear(); if (lower_layer == nullptr) ts_layer->overhang_areas = layer->sharp_tails; else @@ -1177,7 +1154,7 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) if (layer->overhang_areas.empty()) continue; - SVG svg(get_svg_filename(std::to_string(layer->print_z), "overhang_areas"), m_object->bounding_box()); + SVG svg(format("SVG/overhang_areas_%s.svg", layer->print_z), m_object->bounding_box()); if (svg.is_opened()) { svg.draw_outline(m_object->get_layer(layer->id())->lslices, "yellow"); svg.draw(layer->overhang_areas, "red"); diff --git a/src/libslic3r/TreeSupport.hpp b/src/libslic3r/TreeSupport.hpp index b945ea4c24..639b671a7c 100644 --- a/src/libslic3r/TreeSupport.hpp +++ b/src/libslic3r/TreeSupport.hpp @@ -381,7 +381,7 @@ public: bool has_overhangs = false; bool has_sharp_tails = false; bool has_cantilever = false; - double max_cantilevel_dist = 0; + double max_cantilever_dist = 0; SupportType support_type; SupportMaterialStyle support_style; From 4d958df4b360452488b7819c5a9f3f6ea9b51e17 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Wed, 29 Mar 2023 10:59:31 +0800 Subject: [PATCH 209/339] FIX: Concave painting of thin objects does not work.STUDIO-2334 Change-Id: I4812e7940f4f2764a51881d10bc513e7e6c028b6 --- src/libslic3r/MultiMaterialSegmentation.cpp | 38 ++++++++++++++++++--- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/MultiMaterialSegmentation.cpp b/src/libslic3r/MultiMaterialSegmentation.cpp index e5ad474c4a..06efb5fdd5 100644 --- a/src/libslic3r/MultiMaterialSegmentation.cpp +++ b/src/libslic3r/MultiMaterialSegmentation.cpp @@ -1525,6 +1525,12 @@ static inline std::vector> mmu_segmentation_top_and_bott triangles_by_color_bottom.assign(num_extruders, std::vector(num_layers * 2)); triangles_by_color_top.assign(num_extruders, std::vector(num_layers * 2)); + // BBS: use shell_triangles_by_color_bottom & shell_triangles_by_color_top to save the top and bottom embedded layers's color information + std::vector> shell_triangles_by_color_bottom(num_extruders); + std::vector> shell_triangles_by_color_top(num_extruders); + shell_triangles_by_color_bottom.assign(num_extruders, std::vector(num_layers * 2)); + shell_triangles_by_color_top.assign(num_extruders, std::vector(num_layers * 2)); + struct LayerColorStat { // Number of regions for a queried color. int num_regions { 0 }; @@ -1567,7 +1573,8 @@ static inline std::vector> mmu_segmentation_top_and_bott }; tbb::parallel_for(tbb::blocked_range(0, num_layers, granularity), [&granularity, &num_layers, &num_extruders, &layer_color_stat, &top_raw, &triangles_by_color_top, - &throw_on_cancel_callback, &input_expolygons, &bottom_raw, &triangles_by_color_bottom](const tbb::blocked_range &range) { + &throw_on_cancel_callback, &input_expolygons, &bottom_raw, &triangles_by_color_bottom, + &shell_triangles_by_color_top, &shell_triangles_by_color_bottom](const tbb::blocked_range &range) { size_t group_idx = range.begin() / granularity; size_t layer_idx_offset = (group_idx & 1) * num_layers; for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++ layer_idx) { @@ -1590,7 +1597,7 @@ static inline std::vector> mmu_segmentation_top_and_bott ExPolygons last = opening_ex(intersection_ex(top_ex, offset_ex(layer_slices_trimmed, offset)), stat.small_region_threshold); if (last.empty()) break; - append(triangles_by_color_top[color_idx][last_idx + layer_idx_offset], std::move(last)); + append(shell_triangles_by_color_top[color_idx][last_idx + layer_idx_offset], std::move(last)); } } } @@ -1610,7 +1617,7 @@ static inline std::vector> mmu_segmentation_top_and_bott ExPolygons last = opening_ex(intersection_ex(bottom_ex, offset_ex(layer_slices_trimmed, offset)), stat.small_region_threshold); if (last.empty()) break; - append(triangles_by_color_bottom[color_idx][last_idx + layer_idx_offset], std::move(last)); + append(shell_triangles_by_color_bottom[color_idx][last_idx + layer_idx_offset], std::move(last)); } } } @@ -1620,9 +1627,11 @@ static inline std::vector> mmu_segmentation_top_and_bott std::vector> triangles_by_color_merged(num_extruders); triangles_by_color_merged.assign(num_extruders, std::vector(num_layers)); - tbb::parallel_for(tbb::blocked_range(0, num_layers), [&triangles_by_color_merged, &triangles_by_color_bottom, &triangles_by_color_top, &num_layers, &throw_on_cancel_callback](const tbb::blocked_range &range) { + tbb::parallel_for(tbb::blocked_range(0, num_layers), [&triangles_by_color_merged, &triangles_by_color_bottom, &triangles_by_color_top, &num_layers, &throw_on_cancel_callback, + &shell_triangles_by_color_top, &shell_triangles_by_color_bottom](const tbb::blocked_range &range) { for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++ layer_idx) { throw_on_cancel_callback(); + ExPolygons painted_exploys; for (size_t color_idx = 0; color_idx < triangles_by_color_merged.size(); ++color_idx) { auto &self = triangles_by_color_merged[color_idx][layer_idx]; append(self, std::move(triangles_by_color_bottom[color_idx][layer_idx])); @@ -1630,6 +1639,27 @@ static inline std::vector> mmu_segmentation_top_and_bott append(self, std::move(triangles_by_color_top[color_idx][layer_idx])); append(self, std::move(triangles_by_color_top[color_idx][layer_idx + num_layers])); self = union_ex(self); + + append(painted_exploys, self); + } + + painted_exploys = union_ex(painted_exploys); + + //BBS: merge the top and bottom shell layers + for (size_t color_idx = 0; color_idx < triangles_by_color_merged.size(); ++color_idx) { + auto &self = triangles_by_color_merged[color_idx][layer_idx]; + + auto top_area = diff_ex(union_ex(shell_triangles_by_color_top[color_idx][layer_idx], + shell_triangles_by_color_top[color_idx][layer_idx + num_layers]), + painted_exploys); + + auto bottom_area = diff_ex(union_ex(shell_triangles_by_color_bottom[color_idx][layer_idx], + shell_triangles_by_color_bottom[color_idx][layer_idx + num_layers]), + painted_exploys); + + append(self, top_area); + append(self, bottom_area); + self = union_ex(self); } // Trim one region by the other if some of the regions overlap. for (size_t color_idx = 1; color_idx < triangles_by_color_merged.size(); ++ color_idx) From 4e5ed34fde6999ad8d1b8a0acc7b8fe115cd7e9d Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Tue, 4 Apr 2023 12:22:30 +0800 Subject: [PATCH 210/339] ENH: CLI: set the default pipe to null to remove warning Change-Id: I9e2cbb3bba02892a6a97a6a3e0bd9b0f729d202a (cherry picked from commit 1b94c924919c60231e9a87717d0b51204e37dcbc) --- src/BambuStudio.cpp | 6 ++++-- src/libslic3r/PrintConfig.cpp | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/BambuStudio.cpp b/src/BambuStudio.cpp index 822d5f3ded..adfc3aac26 100644 --- a/src/BambuStudio.cpp +++ b/src/BambuStudio.cpp @@ -519,10 +519,12 @@ int CLI::run(int argc, char **argv) ConfigOptionString* pipe_option = m_config.option("pipe"); if (pipe_option) { pipe_name = pipe_option->value; - BOOST_LOG_TRIVIAL(info) << boost::format("Will use pipe %1%")%pipe_name; + if (!pipe_name.empty()) { + BOOST_LOG_TRIVIAL(info) << boost::format("Will use pipe %1%")%pipe_name; #if defined(__linux__) || defined(__LINUX__) - g_cli_callback_mgr.start(pipe_name); + g_cli_callback_mgr.start(pipe_name); #endif + } } /*for (const std::string& file : m_input_files) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index eea798626c..e9f2422274 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -4668,7 +4668,7 @@ CLIActionsConfigDef::CLIActionsConfigDef() def->label = L("Send progress to pipe"); def->tooltip = L("Send progress to pipe."); def->cli_params = "pipename"; - def->set_default_value(new ConfigOptionString("cli_pipe")); + def->set_default_value(new ConfigOptionString("")); } //BBS: remove unused command currently From a64f587cc2d02b4d21a4b38eff1b83f260879dbd Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Tue, 4 Apr 2023 14:48:37 +0800 Subject: [PATCH 211/339] ENH: add some cn translation Change-Id: I325f06264780acf8ab69f1f32fef22b6e175a0b9 --- bbl/i18n/BambuStudio.pot | 39 ++++++++++++---- bbl/i18n/de/BambuStudio_de.po | 39 ++++++++++++---- bbl/i18n/en/BambuStudio_en.po | 39 ++++++++++++---- bbl/i18n/es/BambuStudio_es.po | 39 ++++++++++++---- bbl/i18n/fr/BambuStudio_fr.po | 39 ++++++++++++---- bbl/i18n/hu/BambuStudio_hu.po | 39 ++++++++++++---- bbl/i18n/it/BambuStudio_it.po | 39 ++++++++++++---- bbl/i18n/ja/BambuStudio_ja.po | 39 ++++++++++++---- bbl/i18n/list.txt | 1 + bbl/i18n/nl/BambuStudio_nl.po | 39 ++++++++++++---- bbl/i18n/sv/BambuStudio_sv.po | 39 ++++++++++++---- bbl/i18n/zh_cn/BambuStudio_zh_CN.po | 66 ++++++++++++++++------------ resources/i18n/zh_cn/BambuStudio.mo | Bin 212222 -> 212525 bytes 13 files changed, 350 insertions(+), 107 deletions(-) diff --git a/bbl/i18n/BambuStudio.pot b/bbl/i18n/BambuStudio.pot index 689d38876c..9166e7d188 100644 --- a/bbl/i18n/BambuStudio.pot +++ b/bbl/i18n/BambuStudio.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-03 12:20+0800\n" +"POT-Creation-Date: 2023-04-04 14:45+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1254,6 +1254,18 @@ msgstr "" msgid "Remove parameter" msgstr "" +msgid "to" +msgstr "" + +msgid "Remove height range" +msgstr "" + +msgid "Add height range" +msgstr "" + +msgid "Invalid numeric." +msgstr "" + msgid "one cell can only be copied to one or multiple cells in the same column" msgstr "" @@ -1389,6 +1401,9 @@ msgstr "" msgid "AMS" msgstr "" +msgid "Ams filament backup" +msgstr "" + msgid "AMS not connected" msgstr "" @@ -1947,6 +1962,12 @@ msgstr "" msgid "Print with filaments mounted on the back of the chassis" msgstr "" +msgid "Filaments replace" +msgstr "" + +msgid "Group" +msgstr "" + msgid "AMS Settings" msgstr "" @@ -2385,9 +2406,6 @@ msgstr "" msgid "N/A" msgstr "" -msgid "Invalid numeric." -msgstr "" - #, possible-c-format, possible-boost-format msgid "%s can't be percentage" msgstr "" @@ -2491,9 +2509,6 @@ msgstr "" msgid "from" msgstr "" -msgid "to" -msgstr "" - msgid "Color Scheme" msgstr "" @@ -4279,6 +4294,14 @@ msgstr "" msgid "Units" msgstr "" +msgid "Zoom to mouse position" +msgstr "" + +msgid "" +"Zoom in towards the mouse pointer's position in the 3D view, rather than the " +"2D window center." +msgstr "" + msgid "Show \"Tip of the day\" notification after start" msgstr "" @@ -4294,7 +4317,7 @@ msgstr "" msgid "User Sync" msgstr "" -msgid "Auto sync system presets(Printer/Filament/Process)" +msgid "Update built-in Presets automatically." msgstr "" msgid "System Sync" diff --git a/bbl/i18n/de/BambuStudio_de.po b/bbl/i18n/de/BambuStudio_de.po index 010e79bd80..d18bc426b3 100644 --- a/bbl/i18n/de/BambuStudio_de.po +++ b/bbl/i18n/de/BambuStudio_de.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-03 12:20+0800\n" +"POT-Creation-Date: 2023-04-04 14:45+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1299,6 +1299,18 @@ msgstr "Zusätzliche Prozessvoreinstellung" msgid "Remove parameter" msgstr "Parameter entfernen" +msgid "to" +msgstr "bis" + +msgid "Remove height range" +msgstr "" + +msgid "Add height range" +msgstr "" + +msgid "Invalid numeric." +msgstr "Ungültige Zahl." + msgid "one cell can only be copied to one or multiple cells in the same column" msgstr "" "eine Zelle kann nur in eine oder mehrere Zellen in derselben Spalte kopiert " @@ -1438,6 +1450,9 @@ msgstr "Leer" msgid "AMS" msgstr "AMS" +msgid "Ams filament backup" +msgstr "" + msgid "AMS not connected" msgstr "AMS ist nicht verbunden" @@ -2060,6 +2075,12 @@ msgstr "Mit Filament in der AMS drucken" msgid "Print with filaments mounted on the back of the chassis" msgstr "Drucken mit Filament von einer externen Spule" +msgid "Filaments replace" +msgstr "" + +msgid "Group" +msgstr "" + msgid "AMS Settings" msgstr "AMS Einstellungen" @@ -2603,9 +2624,6 @@ msgstr "Name des Parameters" msgid "N/A" msgstr "N/A" -msgid "Invalid numeric." -msgstr "Ungültige Zahl." - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s kann nicht Prozent sein" @@ -2712,9 +2730,6 @@ msgstr "über" msgid "from" msgstr "von" -msgid "to" -msgstr "bis" - msgid "Color Scheme" msgstr "Farbschema" @@ -4604,6 +4619,14 @@ msgstr "Impirisch" msgid "Units" msgstr "Einheiten" +msgid "Zoom to mouse position" +msgstr "" + +msgid "" +"Zoom in towards the mouse pointer's position in the 3D view, rather than the " +"2D window center." +msgstr "" + msgid "Show \"Tip of the day\" notification after start" msgstr "Benachrichtigung \"Tipp des Tages\" nach dem Start anzeigen" @@ -4623,7 +4646,7 @@ msgstr "" msgid "User Sync" msgstr "Benutzer-Synchronisation" -msgid "Auto sync system presets(Printer/Filament/Process)" +msgid "Update built-in Presets automatically." msgstr "" msgid "System Sync" diff --git a/bbl/i18n/en/BambuStudio_en.po b/bbl/i18n/en/BambuStudio_en.po index 4829fd527b..17179fcb55 100644 --- a/bbl/i18n/en/BambuStudio_en.po +++ b/bbl/i18n/en/BambuStudio_en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-03 12:20+0800\n" +"POT-Creation-Date: 2023-04-04 14:45+0800\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1270,6 +1270,18 @@ msgstr "Additional process preset" msgid "Remove parameter" msgstr "Remove parameter" +msgid "to" +msgstr "to" + +msgid "Remove height range" +msgstr "" + +msgid "Add height range" +msgstr "" + +msgid "Invalid numeric." +msgstr "Invalid numeric." + msgid "one cell can only be copied to one or multiple cells in the same column" msgstr "One cell can only be copied to one or more cells in the same column." @@ -1405,6 +1417,9 @@ msgstr "Empty" msgid "AMS" msgstr "AMS" +msgid "Ams filament backup" +msgstr "" + msgid "AMS not connected" msgstr "AMS not connected" @@ -2010,6 +2025,12 @@ msgstr "Print with filament in AMS" msgid "Print with filaments mounted on the back of the chassis" msgstr "Print with filament on an external spool" +msgid "Filaments replace" +msgstr "" + +msgid "Group" +msgstr "" + msgid "AMS Settings" msgstr "AMS Settings" @@ -2534,9 +2555,6 @@ msgstr "parameter name" msgid "N/A" msgstr "N/A" -msgid "Invalid numeric." -msgstr "Invalid numeric." - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s can’t be a percentage" @@ -2643,9 +2661,6 @@ msgstr "above" msgid "from" msgstr "from" -msgid "to" -msgstr "to" - msgid "Color Scheme" msgstr "Color scheme" @@ -4504,6 +4519,14 @@ msgstr "Imperial" msgid "Units" msgstr "Units" +msgid "Zoom to mouse position" +msgstr "" + +msgid "" +"Zoom in towards the mouse pointer's position in the 3D view, rather than the " +"2D window center." +msgstr "" + msgid "Show \"Tip of the day\" notification after start" msgstr "Show \"Tip of the day\" notification after start" @@ -4519,7 +4542,7 @@ msgstr "Auto sync user presets (Printer/Filament/Process)" msgid "User Sync" msgstr "User Sync" -msgid "Auto sync system presets(Printer/Filament/Process)" +msgid "Update built-in Presets automatically." msgstr "" msgid "System Sync" diff --git a/bbl/i18n/es/BambuStudio_es.po b/bbl/i18n/es/BambuStudio_es.po index 7c9eaa873c..39fb35774b 100644 --- a/bbl/i18n/es/BambuStudio_es.po +++ b/bbl/i18n/es/BambuStudio_es.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-03 12:20+0800\n" +"POT-Creation-Date: 2023-04-04 14:45+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1295,6 +1295,18 @@ msgstr "Proceso adicional preestablecido" msgid "Remove parameter" msgstr "Eliminar parámetro" +msgid "to" +msgstr "a" + +msgid "Remove height range" +msgstr "" + +msgid "Add height range" +msgstr "" + +msgid "Invalid numeric." +msgstr "Numérico inválido." + msgid "one cell can only be copied to one or multiple cells in the same column" msgstr "" "Una celda sólo puede copiarse en una o varias celdas de la misma columna" @@ -1431,6 +1443,9 @@ msgstr "Vacío" msgid "AMS" msgstr "AMS" +msgid "Ams filament backup" +msgstr "" + msgid "AMS not connected" msgstr "AMS no conectado" @@ -2052,6 +2067,12 @@ msgstr "Impresión con filamento en AMS" msgid "Print with filaments mounted on the back of the chassis" msgstr "Impresión con filamento en una bobina externa" +msgid "Filaments replace" +msgstr "" + +msgid "Group" +msgstr "" + msgid "AMS Settings" msgstr "Ajustes del AMS" @@ -2594,9 +2615,6 @@ msgstr "Nombre del parámetro" msgid "N/A" msgstr "N/A" -msgid "Invalid numeric." -msgstr "Numérico inválido." - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s no puede ser un porcentaje" @@ -2703,9 +2721,6 @@ msgstr "sobre" msgid "from" msgstr "desde" -msgid "to" -msgstr "a" - msgid "Color Scheme" msgstr "Esquema de colores" @@ -4587,6 +4602,14 @@ msgstr "Imperial" msgid "Units" msgstr "Unidades" +msgid "Zoom to mouse position" +msgstr "" + +msgid "" +"Zoom in towards the mouse pointer's position in the 3D view, rather than the " +"2D window center." +msgstr "" + msgid "Show \"Tip of the day\" notification after start" msgstr "Mostrar la «Sugerencia del día» después del inicio" @@ -4604,7 +4627,7 @@ msgstr "" msgid "User Sync" msgstr "Sincronización de usuario" -msgid "Auto sync system presets(Printer/Filament/Process)" +msgid "Update built-in Presets automatically." msgstr "" msgid "System Sync" diff --git a/bbl/i18n/fr/BambuStudio_fr.po b/bbl/i18n/fr/BambuStudio_fr.po index 29416877b7..61052570da 100644 --- a/bbl/i18n/fr/BambuStudio_fr.po +++ b/bbl/i18n/fr/BambuStudio_fr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-03 12:20+0800\n" +"POT-Creation-Date: 2023-04-04 14:45+0800\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1283,6 +1283,18 @@ msgstr "Préréglage de processus supplémentaire" msgid "Remove parameter" msgstr "Supprimer le paramètre" +msgid "to" +msgstr "à" + +msgid "Remove height range" +msgstr "" + +msgid "Add height range" +msgstr "" + +msgid "Invalid numeric." +msgstr "Chiffre non valide." + msgid "one cell can only be copied to one or multiple cells in the same column" msgstr "" "une cellule ne peut être copiée que dans une ou plusieurs cellules de la " @@ -1420,6 +1432,9 @@ msgstr "verser" msgid "AMS" msgstr "AMS" +msgid "Ams filament backup" +msgstr "" + msgid "AMS not connected" msgstr "AMS not connected" @@ -2027,6 +2042,12 @@ msgstr "Print with filament in AMS" msgid "Print with filaments mounted on the back of the chassis" msgstr "Print with filament on an external spool" +msgid "Filaments replace" +msgstr "" + +msgid "Group" +msgstr "" + msgid "AMS Settings" msgstr "Paramètres AMS" @@ -2546,9 +2567,6 @@ msgstr "parameter name" msgid "N/A" msgstr "N / A" -msgid "Invalid numeric." -msgstr "Chiffre non valide." - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s ne peut pas être un pourcentage" @@ -2652,9 +2670,6 @@ msgstr "au dessus" msgid "from" msgstr "de" -msgid "to" -msgstr "à" - msgid "Color Scheme" msgstr "Schéma de couleur" @@ -4524,6 +4539,14 @@ msgstr "Impérial" msgid "Units" msgstr "Unités" +msgid "Zoom to mouse position" +msgstr "" + +msgid "" +"Zoom in towards the mouse pointer's position in the 3D view, rather than the " +"2D window center." +msgstr "" + msgid "Show \"Tip of the day\" notification after start" msgstr "Show \"Tip of the day\" notification after start" @@ -4541,7 +4564,7 @@ msgstr "" msgid "User Sync" msgstr "Synchronisation utilisateur" -msgid "Auto sync system presets(Printer/Filament/Process)" +msgid "Update built-in Presets automatically." msgstr "" msgid "System Sync" diff --git a/bbl/i18n/hu/BambuStudio_hu.po b/bbl/i18n/hu/BambuStudio_hu.po index ec23df7ef6..36c82cdb33 100644 --- a/bbl/i18n/hu/BambuStudio_hu.po +++ b/bbl/i18n/hu/BambuStudio_hu.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-03 12:20+0800\n" +"POT-Creation-Date: 2023-04-04 14:45+0800\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1286,6 +1286,18 @@ msgstr "További folyamatbeállítások" msgid "Remove parameter" msgstr "Paraméter eltávolítása" +msgid "to" +msgstr "eddig" + +msgid "Remove height range" +msgstr "" + +msgid "Add height range" +msgstr "" + +msgid "Invalid numeric." +msgstr "Érvénytelen számjegy." + msgid "one cell can only be copied to one or multiple cells in the same column" msgstr "" "egy cellát csak az ugyanabban az oszlopban lévő egy vagy több cellába lehet " @@ -1423,6 +1435,9 @@ msgstr "Üres" msgid "AMS" msgstr "AMS" +msgid "Ams filament backup" +msgstr "" + msgid "AMS not connected" msgstr "AMS not connected" @@ -2037,6 +2052,12 @@ msgstr "Print with filament in AMS" msgid "Print with filaments mounted on the back of the chassis" msgstr "Print with filament on an external spool" +msgid "Filaments replace" +msgstr "" + +msgid "Group" +msgstr "" + msgid "AMS Settings" msgstr "AMS beállítások" @@ -2560,9 +2581,6 @@ msgstr "parameter name" msgid "N/A" msgstr "N/A" -msgid "Invalid numeric." -msgstr "Érvénytelen számjegy." - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s nem lehet százalék" @@ -2669,9 +2687,6 @@ msgstr "felett" msgid "from" msgstr "ettől" -msgid "to" -msgstr "eddig" - msgid "Color Scheme" msgstr "Színséma" @@ -4535,6 +4550,14 @@ msgstr "Angolszász" msgid "Units" msgstr "Mértékegység" +msgid "Zoom to mouse position" +msgstr "" + +msgid "" +"Zoom in towards the mouse pointer's position in the 3D view, rather than the " +"2D window center." +msgstr "" + msgid "Show \"Tip of the day\" notification after start" msgstr "Show \"Tip of the day\" notification after start" @@ -4552,7 +4575,7 @@ msgstr "" msgid "User Sync" msgstr "Felhasználó szinkronizálás" -msgid "Auto sync system presets(Printer/Filament/Process)" +msgid "Update built-in Presets automatically." msgstr "" msgid "System Sync" diff --git a/bbl/i18n/it/BambuStudio_it.po b/bbl/i18n/it/BambuStudio_it.po index e8a83579e7..f7fd0d0298 100644 --- a/bbl/i18n/it/BambuStudio_it.po +++ b/bbl/i18n/it/BambuStudio_it.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-03 12:20+0800\n" +"POT-Creation-Date: 2023-04-04 14:45+0800\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1271,6 +1271,18 @@ msgstr "Additional process preset" msgid "Remove parameter" msgstr "Rimuovi parametro" +msgid "to" +msgstr "a" + +msgid "Remove height range" +msgstr "" + +msgid "Add height range" +msgstr "" + +msgid "Invalid numeric." +msgstr "Invalid numeric." + msgid "one cell can only be copied to one or multiple cells in the same column" msgstr "One cell can only be copied to one or more cells in the same column." @@ -1406,6 +1418,9 @@ msgstr "Empty" msgid "AMS" msgstr "AMS" +msgid "Ams filament backup" +msgstr "" + msgid "AMS not connected" msgstr "AMS not connected" @@ -2011,6 +2026,12 @@ msgstr "Print with filament in AMS" msgid "Print with filaments mounted on the back of the chassis" msgstr "Print with filament on an external spool" +msgid "Filaments replace" +msgstr "" + +msgid "Group" +msgstr "" + msgid "AMS Settings" msgstr "AMS Settings" @@ -2536,9 +2557,6 @@ msgstr "parameter name" msgid "N/A" msgstr "N/A" -msgid "Invalid numeric." -msgstr "Invalid numeric." - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s can’t be a percentage" @@ -2645,9 +2663,6 @@ msgstr "sopra" msgid "from" msgstr "da" -msgid "to" -msgstr "a" - msgid "Color Scheme" msgstr "Color scheme" @@ -4506,6 +4521,14 @@ msgstr "Imperial" msgid "Units" msgstr "Units" +msgid "Zoom to mouse position" +msgstr "" + +msgid "" +"Zoom in towards the mouse pointer's position in the 3D view, rather than the " +"2D window center." +msgstr "" + msgid "Show \"Tip of the day\" notification after start" msgstr "Show \"Tip of the day\" notification after start" @@ -4521,7 +4544,7 @@ msgstr "Auto sync user presets (Printer/Filament/Process)" msgid "User Sync" msgstr "User Sync" -msgid "Auto sync system presets(Printer/Filament/Process)" +msgid "Update built-in Presets automatically." msgstr "" msgid "System Sync" diff --git a/bbl/i18n/ja/BambuStudio_ja.po b/bbl/i18n/ja/BambuStudio_ja.po index 7ba5e01516..ef8be765f1 100644 --- a/bbl/i18n/ja/BambuStudio_ja.po +++ b/bbl/i18n/ja/BambuStudio_ja.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-03 12:20+0800\n" +"POT-Creation-Date: 2023-04-04 14:45+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1259,6 +1259,18 @@ msgstr "他のプリセット" msgid "Remove parameter" msgstr "パラメータを削除" +msgid "to" +msgstr "→" + +msgid "Remove height range" +msgstr "" + +msgid "Add height range" +msgstr "" + +msgid "Invalid numeric." +msgstr "無効な数値" + msgid "one cell can only be copied to one or multiple cells in the same column" msgstr "一つのセルは、同じ列のセルにしかコピーできません" @@ -1394,6 +1406,9 @@ msgstr "空" msgid "AMS" msgstr "AMS" +msgid "Ams filament backup" +msgstr "" + msgid "AMS not connected" msgstr "AMS が接続されていません" @@ -1987,6 +2002,12 @@ msgstr "AMSのフィラメントで造形します" msgid "Print with filaments mounted on the back of the chassis" msgstr "外部スプールホルダーのフィラメントで造形します" +msgid "Filaments replace" +msgstr "" + +msgid "Group" +msgstr "" + msgid "AMS Settings" msgstr "AMS 設定" @@ -2475,9 +2496,6 @@ msgstr "パラメータ名" msgid "N/A" msgstr "N/A" -msgid "Invalid numeric." -msgstr "無効な数値" - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s をパーセンテージにすることはできません" @@ -2583,9 +2601,6 @@ msgstr "以上" msgid "from" msgstr "from" -msgid "to" -msgstr "→" - msgid "Color Scheme" msgstr "配色スキーム" @@ -4417,6 +4432,14 @@ msgstr "インチ" msgid "Units" msgstr "単位" +msgid "Zoom to mouse position" +msgstr "" + +msgid "" +"Zoom in towards the mouse pointer's position in the 3D view, rather than the " +"2D window center." +msgstr "" + msgid "Show \"Tip of the day\" notification after start" msgstr "起動後「毎日のヒント」を表示" @@ -4432,7 +4455,7 @@ msgstr "ユーザープリセットの自動同期 (プリンター/フィラメ msgid "User Sync" msgstr "ユーザー同期" -msgid "Auto sync system presets(Printer/Filament/Process)" +msgid "Update built-in Presets automatically." msgstr "" msgid "System Sync" diff --git a/bbl/i18n/list.txt b/bbl/i18n/list.txt index 020b0e71a5..39cafaf11f 100644 --- a/bbl/i18n/list.txt +++ b/bbl/i18n/list.txt @@ -21,6 +21,7 @@ src/slic3r/GUI/GUI_Init.cpp src/slic3r/GUI/GUI_Factories.cpp src/slic3r/GUI/GUI_ObjectList.cpp src/slic3r/GUI/GUI_ObjectSettings.cpp +src/slic3r/GUI/GUI_ObjectLayers.cpp src/slic3r/GUI/GUI_ObjectTable.cpp src/slic3r/GUI/GUI_ObjectTable.hpp src/slic3r/GUI/GUI_ObjectTableSettings.cpp diff --git a/bbl/i18n/nl/BambuStudio_nl.po b/bbl/i18n/nl/BambuStudio_nl.po index d70ffa303f..3aebdc89b1 100644 --- a/bbl/i18n/nl/BambuStudio_nl.po +++ b/bbl/i18n/nl/BambuStudio_nl.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-03 12:20+0800\n" +"POT-Creation-Date: 2023-04-04 14:45+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1296,6 +1296,18 @@ msgstr "Extra procesvoorinstelling" msgid "Remove parameter" msgstr "Verwijder parameter" +msgid "to" +msgstr "naar" + +msgid "Remove height range" +msgstr "" + +msgid "Add height range" +msgstr "" + +msgid "Invalid numeric." +msgstr "Onjuist getal." + msgid "one cell can only be copied to one or multiple cells in the same column" msgstr "" "één cel kan alleen naar één of meerdere cellen in dezelfde kolom worden " @@ -1433,6 +1445,9 @@ msgstr "Leeg" msgid "AMS" msgstr "AMS" +msgid "Ams filament backup" +msgstr "" + msgid "AMS not connected" msgstr "AMS niet aangesloten" @@ -2055,6 +2070,12 @@ msgstr "Printen met filament in AMS" msgid "Print with filaments mounted on the back of the chassis" msgstr "Print met filament op een externe spoel" +msgid "Filaments replace" +msgstr "" + +msgid "Group" +msgstr "" + msgid "AMS Settings" msgstr "AMS Instellingen" @@ -2587,9 +2608,6 @@ msgstr "parameternaam" msgid "N/A" msgstr "N/B" -msgid "Invalid numeric." -msgstr "Onjuist getal." - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s kan geen percentage zijn" @@ -2696,9 +2714,6 @@ msgstr "Boven" msgid "from" msgstr "Van" -msgid "to" -msgstr "naar" - msgid "Color Scheme" msgstr "Kleurschema" @@ -4591,6 +4606,14 @@ msgstr "Imperiaal" msgid "Units" msgstr "Eenheden" +msgid "Zoom to mouse position" +msgstr "" + +msgid "" +"Zoom in towards the mouse pointer's position in the 3D view, rather than the " +"2D window center." +msgstr "" + msgid "Show \"Tip of the day\" notification after start" msgstr "Toon de melding 'Tip van de dag' na het starten" @@ -4609,7 +4632,7 @@ msgstr "" msgid "User Sync" msgstr "Gebruiker synchroniseren" -msgid "Auto sync system presets(Printer/Filament/Process)" +msgid "Update built-in Presets automatically." msgstr "" msgid "System Sync" diff --git a/bbl/i18n/sv/BambuStudio_sv.po b/bbl/i18n/sv/BambuStudio_sv.po index d5830f9fde..116f7b13c6 100644 --- a/bbl/i18n/sv/BambuStudio_sv.po +++ b/bbl/i18n/sv/BambuStudio_sv.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-03 12:20+0800\n" +"POT-Creation-Date: 2023-04-04 14:45+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1281,6 +1281,18 @@ msgstr "Ytterligare process inställning" msgid "Remove parameter" msgstr "Ta bort parameter" +msgid "to" +msgstr "till" + +msgid "Remove height range" +msgstr "" + +msgid "Add height range" +msgstr "" + +msgid "Invalid numeric." +msgstr "Ogiltig siffra." + msgid "one cell can only be copied to one or multiple cells in the same column" msgstr "" "En cell kan endast kopieras till en eller flertalet celler i samma kolumn" @@ -1417,6 +1429,9 @@ msgstr "Tom" msgid "AMS" msgstr "AMS" +msgid "Ams filament backup" +msgstr "" + msgid "AMS not connected" msgstr "AMS ej ansluten" @@ -2029,6 +2044,12 @@ msgstr "Skriv ut med filament i AMS" msgid "Print with filaments mounted on the back of the chassis" msgstr "Skriv ut med filament på en extern spole" +msgid "Filaments replace" +msgstr "" + +msgid "Group" +msgstr "" + msgid "AMS Settings" msgstr "AMS Inställningar" @@ -2552,9 +2573,6 @@ msgstr "Parameter namn" msgid "N/A" msgstr "N/A" -msgid "Invalid numeric." -msgstr "Ogiltig siffra." - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s kan inte vara procent" @@ -2661,9 +2679,6 @@ msgstr "över" msgid "from" msgstr "från" -msgid "to" -msgstr "till" - msgid "Color Scheme" msgstr "Färgschema" @@ -4524,6 +4539,14 @@ msgstr "Brittisk standard" msgid "Units" msgstr "Enheter" +msgid "Zoom to mouse position" +msgstr "" + +msgid "" +"Zoom in towards the mouse pointer's position in the 3D view, rather than the " +"2D window center." +msgstr "" + msgid "Show \"Tip of the day\" notification after start" msgstr "Visa \"Dagens tips\" efter start" @@ -4541,7 +4564,7 @@ msgstr "" msgid "User Sync" msgstr "Användar synkronisering" -msgid "Auto sync system presets(Printer/Filament/Process)" +msgid "Update built-in Presets automatically." msgstr "" msgid "System Sync" diff --git a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po index 6b6f7872c7..f6a346e75d 100644 --- a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po +++ b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-03 12:20+0800\n" +"POT-Creation-Date: 2023-04-04 14:45+0800\n" "PO-Revision-Date: 2023-03-29 12:43+0800\n" "Last-Translator: Jiang Yue \n" "Language-Team: \n" @@ -1259,6 +1259,18 @@ msgstr "附加工艺预设" msgid "Remove parameter" msgstr "删除参数" +msgid "to" +msgstr "到" + +msgid "Remove height range" +msgstr "移除高度范围" + +msgid "Add height range" +msgstr "添加高度范围" + +msgid "Invalid numeric." +msgstr "数值错误。" + msgid "one cell can only be copied to one or multiple cells in the same column" msgstr "一个单元格仅能被复制到同一列的一个或多个单元格" @@ -1332,7 +1344,7 @@ msgid "Custom Template:" msgstr "自定义模板:" msgid "Custom G-code:" -msgstr "自定义G代码:" +msgstr "自定义G-code:" msgid "Custom G-code" msgstr "自定义 G-code" @@ -1371,13 +1383,13 @@ msgid "Delete Custom Template" msgstr "删除自定义模板" msgid "Edit Custom G-code" -msgstr "编辑自定义G代码" +msgstr "编辑自定义G-code" msgid "Delete Custom G-code" -msgstr "删除自定义G代码" +msgstr "删除自定义G-code" msgid "Delete Filament Change" -msgstr "删除耗材丝更新" +msgstr "删除耗材丝更换" msgid "No printer" msgstr "无打印机" @@ -1394,6 +1406,9 @@ msgstr "空" msgid "AMS" msgstr "AMS" +msgid "Ams filament backup" +msgstr "" + msgid "AMS not connected" msgstr "AMS未连接" @@ -1973,6 +1988,12 @@ msgstr "采用AMS里的材料打印" msgid "Print with filaments mounted on the back of the chassis" msgstr "采用挂载在机箱背部的材料打印" +msgid "Filaments replace" +msgstr "" + +msgid "Group" +msgstr "" + msgid "AMS Settings" msgstr "AMS 设置" @@ -2465,9 +2486,6 @@ msgstr "参数名称" msgid "N/A" msgstr "N/A" -msgid "Invalid numeric." -msgstr "数值错误。" - #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s 不可以是百分比" @@ -2574,9 +2592,6 @@ msgstr "高于" msgid "from" msgstr "从" -msgid "to" -msgstr "到" - msgid "Color Scheme" msgstr "颜色方案" @@ -4394,6 +4409,14 @@ msgstr "英制" msgid "Units" msgstr "单位" +msgid "Zoom to mouse position" +msgstr "放大到鼠标位置" + +msgid "" +"Zoom in towards the mouse pointer's position in the 3D view, rather than the " +"2D window center." +msgstr "在3D视角放大到鼠标位置,而不是2D窗口的中心。" + msgid "Show \"Tip of the day\" notification after start" msgstr "启动后显示“每日小贴士”通知" @@ -4409,8 +4432,8 @@ msgstr "同步用户预设(打印机/耗材丝/工艺)" msgid "User Sync" msgstr "用户同步" -msgid "Auto sync system presets(Printer/Filament/Process)" -msgstr "自动同步预设(打印机/耗材丝/工艺)" +msgid "Update built-in Presets automatically." +msgstr "自动更新系统预设" msgid "System Sync" msgstr "系统同步" @@ -8592,6 +8615,9 @@ msgstr "" "提高强度\n" "你知道吗?你可以使用更多的墙层数和更高的疏散填充密度来提高模型的强度。" +#~ msgid "Auto sync system presets(Printer/Filament/Process)" +#~ msgstr "自动同步预设(打印机/耗材丝/工艺)" + #~ msgid "" #~ "Arachne engine only works when overhang slowing down is disabled.\n" #~ "This may cause decline in the quality of overhang surface when print " @@ -8609,14 +8635,6 @@ msgstr "" #~ "是 - 使用arachne并关闭悬垂降速\n" #~ "否 - 此次放弃使用arachne" -#~ msgid "Zoom to mouse position" -#~ msgstr "放大到鼠标位置" - -#~ msgid "" -#~ "Zoom in towards the mouse pointer's position in the 3D view, rather than " -#~ "the 2D window center." -#~ msgstr "在3D视角放大到鼠标位置,而不是2D窗口的中心。" - #~ msgid "Add/Edit connectors" #~ msgstr "添加/编辑连接件" @@ -10710,12 +10728,6 @@ msgstr "" #~ msgid "To height" #~ msgstr "到高度" -#~ msgid "Remove height range" -#~ msgstr "移除高度范围" - -#~ msgid "Add height range" -#~ msgstr "添加高度范围" - #~ msgid "Local coordinates" #~ msgstr "本地坐标" diff --git a/resources/i18n/zh_cn/BambuStudio.mo b/resources/i18n/zh_cn/BambuStudio.mo index 5c1721a22cb0657df887ff5f244ffa29223aa0e8..e0383a455faa7ea18ec3e76fbb43d2610da72113 100644 GIT binary patch delta 46518 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 Lj0=5UzwlGC|-J3A)c8OwX|u>{FYuB)nQH4 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 Date: Thu, 6 Apr 2023 08:16:57 +0800 Subject: [PATCH 212/339] NEW: update po files Change-Id: I73c63d9155c8c612d629623a633b8bfcfcee0a1a Signed-off-by: Stone Li --- bbl/i18n/BambuStudio.pot | 9 +- bbl/i18n/de/BambuStudio_de.po | 2578 +++++++------ bbl/i18n/en/BambuStudio_en.po | 202 +- bbl/i18n/es/BambuStudio_es.po | 351 +- bbl/i18n/fr/BambuStudio_fr.po | 2925 ++++++++------- bbl/i18n/hu/BambuStudio_hu.po | 202 +- bbl/i18n/it/BambuStudio_it.po | 5424 ++++++++++++++------------- bbl/i18n/ja/BambuStudio_ja.po | 199 +- bbl/i18n/nl/BambuStudio_nl.po | 226 +- bbl/i18n/sv/BambuStudio_sv.po | 213 +- bbl/i18n/zh_cn/BambuStudio_zh_CN.po | 15 +- resources/i18n/de/BambuStudio.mo | Bin 234447 -> 233785 bytes resources/i18n/en/BambuStudio.mo | Bin 214157 -> 214261 bytes resources/i18n/es/BambuStudio.mo | Bin 233629 -> 233748 bytes resources/i18n/fr/BambuStudio.mo | Bin 229174 -> 239766 bytes resources/i18n/hu/BambuStudio.mo | Bin 227160 -> 227264 bytes resources/i18n/it/BambuStudio.mo | Bin 215759 -> 229684 bytes resources/i18n/ja/BambuStudio.mo | Bin 223189 -> 223258 bytes resources/i18n/nl/BambuStudio.mo | Bin 230477 -> 230576 bytes resources/i18n/sv/BambuStudio.mo | Bin 220472 -> 220543 bytes resources/i18n/zh_cn/BambuStudio.mo | Bin 212525 -> 212566 bytes 21 files changed, 6314 insertions(+), 6030 deletions(-) diff --git a/bbl/i18n/BambuStudio.pot b/bbl/i18n/BambuStudio.pot index 9166e7d188..0bbcdb9ca1 100644 --- a/bbl/i18n/BambuStudio.pot +++ b/bbl/i18n/BambuStudio.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-04 14:45+0800\n" +"POT-Creation-Date: 2023-04-06 08:26+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1848,13 +1848,13 @@ msgstr "" msgid "Max volumetric speed" msgstr "" -msgid "℃" +msgid "\\u2103" msgstr "" msgid "Bed temperature" msgstr "" -msgid "mm³" +msgid "mm\\u00B3" msgstr "" msgid "Start calibration" @@ -6638,6 +6638,9 @@ msgstr "" msgid "Minimal purge on wipe tower" msgstr "" +msgid "mm³" +msgstr "" + msgid "Filament load time" msgstr "" diff --git a/bbl/i18n/de/BambuStudio_de.po b/bbl/i18n/de/BambuStudio_de.po index d18bc426b3..a23080f09b 100644 --- a/bbl/i18n/de/BambuStudio_de.po +++ b/bbl/i18n/de/BambuStudio_de.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-04 14:45+0800\n" +"POT-Creation-Date: 2023-04-06 08:26+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -14,13 +14,13 @@ msgstr "" "X-Generator: Poedit 3.2.2\n" msgid "Supports Painting" -msgstr "Supports aufmalen" +msgstr "Stützen aufmalen" msgid "Alt + Mouse wheel" msgstr "Alt + Mausrad" msgid "Section view" -msgstr "Abschnittsansicht" +msgstr "Schnittansicht" msgid "Reset direction" msgstr "Richtung zurücksetzen" @@ -35,16 +35,16 @@ msgid "Left mouse button" msgstr "Linke Maustaste" msgid "Enforce supports" -msgstr "Support erzwingen" +msgstr "Stützen erzwingen" msgid "Right mouse button" msgstr "Rechte Maustaste" msgid "Block supports" -msgstr "Support blockieren" +msgstr "Stützen blockieren" msgid "Shift + Left mouse button" -msgstr "Shift + Linke Maustaste" +msgstr "Umschalttaste + Linke Maustaste" msgid "Erase" msgstr "Löschen" @@ -59,7 +59,7 @@ msgid "Gap fill" msgstr "Lückenfüllung" msgid "Perform" -msgstr "Ausführen" +msgstr "Anwenden" msgid "Gap area" msgstr "Lückenbereich" @@ -94,13 +94,13 @@ msgstr "" "Erlaubt das Malen nur auf Flächen, die ausgewählt wurden durch: \"%1%\"" msgid "Highlight faces according to overhang angle." -msgstr "Markieren der Flächen entsprechend dem Überhangwinkel." +msgstr "Hervorheben der Flächen entsprechend dem Überhangwinkel." msgid "No auto support" -msgstr "Kein automatischer Support" +msgstr "Keine automatischen Stützstrukturen" msgid "Support Generated" -msgstr "Support generiert" +msgstr "Stützstrukturen generiert" msgid "Lay on face" msgstr "Auf Fläche legen" @@ -115,7 +115,7 @@ msgstr "" "verfügbar sein." msgid "Color Painting" -msgstr "Farben malen" +msgstr "Farbe malen" msgid "Pen shape" msgstr "Pinselform" @@ -127,7 +127,7 @@ msgid "Key 1~9" msgstr "Schlüssel 1~9" msgid "Choose filament" -msgstr "Filament wählen" +msgstr "Filament auswählen" msgid "Edge detection" msgstr "Kantenerkennung" @@ -157,7 +157,7 @@ msgid "Toggle Wireframe" msgstr "Gittermodell ein-/ausblenden" msgid "Shortcut Key " -msgstr "Shortcut Taste " +msgstr "Tastenkürzel" msgid "Triangle" msgstr "Dreieck" @@ -188,10 +188,10 @@ msgid "Scale" msgstr "Skalieren" msgid "Error: Please close all toolbar menus first" -msgstr "Fehler: Bitte schließen sie zuerst alle Werkzeugleistenmenüs" +msgstr "Fehler: Bitte schließen sie zuerst alle Werkzeugleisten" msgid "Tool-Lay on Face" -msgstr "Werkzeug-lege auf Fläche" +msgstr "\"Auf Fläche legen\" Werkzeug" msgid "in" msgstr "in" @@ -215,7 +215,7 @@ msgid "Volume Operations" msgstr "Volumen Operationen" msgid "Translate" -msgstr "Versetzen" +msgstr "Übersetzen" msgid "Group Operations" msgstr "Gruppen Operationen" @@ -233,7 +233,7 @@ msgid "Reset Position" msgstr "Position zurücksetzen" msgid "Reset Rotation" -msgstr "Rotation zurücksetzen" +msgstr "Drehung zurücksetzen" msgid "World coordinates" msgstr "Weltkoordinaten" @@ -278,7 +278,7 @@ msgid "Select all connectors" msgstr "" msgid "Cut" -msgstr "Schneiden" +msgstr "Zerschneiden" msgid "Connector" msgstr "" @@ -317,7 +317,7 @@ msgid "After cut" msgstr "" msgid "Cut to parts" -msgstr "In Einzelteile schneiden" +msgstr "In Einzelteile trennen" msgid "Auto Segment" msgstr "Automatische Segmentierung" @@ -424,7 +424,7 @@ msgstr "Vereinfachen" msgid "Simplification is currently only allowed when a single part is selected" msgstr "" -"Die Simplifizierung ist derzeit nur möglich, wenn ein einzelnes Teil " +"Die Vereinfachung ist derzeit nur möglich, wenn ein einzelnes Teil " "ausgewählt ist" msgid "Error" @@ -457,7 +457,7 @@ msgid "%1%" msgstr "%1%" msgid "Can't apply when proccess preview." -msgstr "Kann nicht angewendet werden, wenn die Vorschau angezeigt wird." +msgstr "Kann nicht angewendet werden, wenn die Vorschau verarbeitet wird." msgid "Operation already cancelling. Please wait few seconds." msgstr "Operation wird bereits abgebrochen. Bitte warten Sie einige Sekunden." @@ -525,7 +525,7 @@ msgid "Horizontal text" msgstr "" msgid "Ctrl+" -msgstr "Strg+" +msgstr "" msgid "Notice" msgstr "Hinweis" @@ -539,8 +539,8 @@ msgstr "%1% wurde mit %2% getauscht" msgid "The configuration may be generated by a newer version of BambuStudio." msgstr "" -"Die Konfiguration kann durch eine neuere Version von BambuStudio erzeugt " -"werden." +"Die Konfiguration wurde möglicherweise mit einer neueren Version von Bambu " +"Studio generiert." msgid "Some values have been replaced. Please check them:" msgstr "Einige Werte sind ersetzt worden. Bitte überprüfen Sie diese:" @@ -578,11 +578,11 @@ msgid "" "BambuStudio will terminate because of running out of memory.It may be a bug. " "It will be appreciated if you report the issue to our team." msgstr "" -"BambuStudio wird wegen Speichermangels beendet, was ein Fehler sein kann. " -"Unser Team würde sich über einen Fehlerbericht freuen." +"BambuStudio wird wegen Arbeitsspeichermangels beendet, was ein Bug sein " +"kann. Bitte melden Sie diesen Fehler dem technischen Support." msgid "Fatal error" -msgstr "Fataler Fehler" +msgstr "Schwerwiegender Fehler" msgid "" "BambuStudio will terminate because of a localization error. It will be " @@ -597,7 +597,7 @@ msgid "BambuStudio got an unhandled exception: %1%" msgstr "BambuStudio hat eine unbehandelte Ausnahme erhalten: %1%" msgid "Downloading Bambu Network Plug-in" -msgstr "Herunterladen des Bambu-Netzwerk-Plug-In" +msgstr "Herunterladen des Bambu-Netzwerk-Plugins" msgid "Incorrect password" msgstr "Falsches Passwort" @@ -638,45 +638,45 @@ msgid "The Bambu Studio needs an upgrade" msgstr "Bambu Studio benötigt ein Upgrade" msgid "This is the newest version." -msgstr "Das ist die aktuellste Version." +msgstr "Dies ist die neueste Version." msgid "Info" -msgstr "Infos" +msgstr "Info" msgid "Rebuild" -msgstr "Neubauen" +msgstr "Wiederaufbau" msgid "Loading current presets" -msgstr "Aktuelle Voreinstellungen laden" +msgstr "Aktuelle Profile laden" msgid "Loading a mode view" msgstr "Laden einer Modusansicht" msgid "Choose one file (3mf):" -msgstr "Wählen sie eine Datei (3mf):" +msgstr "Wählen Sie eine Datei (3mf):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" msgstr "Wählen Sie eine oder mehrere Dateien (3mf/step/stl/svg/obj/amf):" msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" -msgstr "Wählen sie eine Datei (gcode/.gco/.g/.ngc/ngc):" +msgstr "Wählen Sie eine Datei (gcode/.gco/.g/.ngc/ngc):" msgid "Some presets are modified." -msgstr "Einige Voreinstellungen wurden geändert." +msgstr "Einige Profileinstellungen wurden geändert." msgid "" "You can keep the modifield presets to the new project, discard or save " "changes as new presets." msgstr "" -"Sie können die geänderten Voreinstellungen in das neue Projekt übernehmen, " -"verwerfen oder als neue Voreinstellungen speichern." +"Sie können die geänderten Profile in das neue Projekt übernehmen, verwerfen " +"oder als neue Profile speichern." msgid "User logged out" msgstr "Benutzer abgemeldet" msgid "new or open project file is not allowed during the slicing process!" msgstr "" -"Eine neue oder geöffnete Projektdatei ist während des Slicingvorgangs nicht " +"Eine neue oder offene Projektdatei ist während des Slicing-Vorgangs nicht " "erlaubt!" msgid "Open Project" @@ -699,13 +699,13 @@ msgid "Loading" msgstr "Lade" msgid "Loading user preset" -msgstr "Benutzervoreinstellung wird geladen" +msgstr "Benutzerprofil wird geladen" msgid "Switching application language" msgstr "Wechsel der Sprache" msgid "Select the language" -msgstr "Wählen Sie die Sprache aus" +msgstr "Sprache wählen" msgid "Language" msgstr "Spache" @@ -717,7 +717,7 @@ msgid "The uploads are still ongoing" msgstr "Die Uploads sind noch nicht abgeschlossen." msgid "Stop them and continue anyway?" -msgstr "Stoppen und trotzdem weitermachen?" +msgstr "Stoppen und trotzdem fortsetzen?" msgid "Ongoing uploads" msgstr "Laufende Uploads" @@ -748,7 +748,7 @@ msgstr "Initialisierung der Bambu Studio GUI ist fehlgeschlagen" #, boost-format msgid "Fatal error, exception catched: %1%" -msgstr "Fataler Fehler, abgefangene Ausnahme: %1%" +msgstr "Schwerwiegender Fehler, Ausnahme: %1%" msgid "Quality" msgstr "Qualität" @@ -760,10 +760,10 @@ msgid "Infill" msgstr "Füllung" msgid "Support" -msgstr "Support" +msgstr "Stützen" msgid "Flush options" -msgstr "Optionen für die Druckdüsensäuberung" +msgstr "Optionen für die Düsenreinigung" msgid "Speed" msgstr "Geschwindigkeit" @@ -775,7 +775,7 @@ msgid "Top Solid Layers" msgstr "Obere volle Schichten" msgid "Top Minimum Shell Thickness" -msgstr "Minimale Dicke der Decke" +msgstr "Obere minimale Schalendicke" msgid "Bottom Solid Layers" msgstr "Untere volle Schichten" @@ -808,7 +808,7 @@ msgid "Add part" msgstr "Teil hinzufügen" msgid "Add negative part" -msgstr "Ein negativ des Teiles einfügen" +msgstr "Negatives Teil hinzufügen" msgid "Add modifier" msgstr "Modifizierer hinzufügen" @@ -829,7 +829,7 @@ msgid "Show" msgstr "Anzeigen" msgid "Del" -msgstr "Entf" +msgstr "" msgid "Delete the selected object" msgstr "Ausgewähltes Objekt löschen" @@ -874,16 +874,16 @@ msgid "Export as STL" msgstr "Als STL exportieren" msgid "Reload from disk" -msgstr "Vom Speicher neu laden" +msgstr "Von der Festplatte neu laden" msgid "Reload the selected parts from disk" -msgstr "Laden Sie die ausgewählten Teile vom Speicher neu" +msgstr "Die ausgewählten Teile von der Festplatte neu laden" msgid "Replace with STL" msgstr "Durch STL ersetzen" msgid "Replace the selected part with new STL" -msgstr "Ersetzen Sie das ausgewählte Teil durch eine neue STL" +msgstr "Ausgewähltes Teil durch eine neue STL ersetzen." msgid "Change filament" msgstr "Filament wechseln" @@ -908,16 +908,16 @@ msgid "Scale an object to fit the build volume" msgstr "Objekt so skalieren, dass es in den Druckraum passt" msgid "Flush Options" -msgstr "Optionen für die Druckdüsensäuberung" +msgstr "Optionen für die Düsenreinigung" msgid "Flush into objects' infill" -msgstr "Druckdüse in der Füllung der Objekte säubern" +msgstr "Düse in der Füllung des Objekts reinigen" msgid "Flush into this object" -msgstr "Druckdüse in diesem Objekt säubern" +msgstr "Düse in diesem Objekt reinigen" msgid "Flush into objects' support" -msgstr "Druckdüse in der Supportstruktur des Objekts säubern" +msgstr "Düse in der Stützstruktur des Objekts reinigen" msgid "Edit in Parameter Table" msgstr "Bearbeiten in der Parametertabelle" @@ -929,7 +929,7 @@ msgid "Restore to inch" msgstr "Zu Inch zurücksetzen" msgid "Convert from meter" -msgstr "Von Meter umrechnen" +msgstr "Von Metern umrechnen" msgid "Restore to meter" msgstr "Auf Meter zurücksetzen" @@ -951,19 +951,19 @@ msgid "Along X axis" msgstr "Entlang der X Achse" msgid "Mirror along the X axis" -msgstr "An der X-Achse spiegeln" +msgstr "Entlang der X-Achse spiegeln" msgid "Along Y axis" msgstr "Entlang der Y Achse" msgid "Mirror along the Y axis" -msgstr "An der Y-Achse spiegeln" +msgstr "Entlang der Y-Achse spiegeln" msgid "Along Z axis" msgstr "Entlang der Z Achse" msgid "Mirror along the Z axis" -msgstr "An der Z-Achse spiegeln" +msgstr "Entlang der Z-Achse spiegeln" msgid "Mirror" msgstr "Spiegeln" @@ -978,7 +978,7 @@ msgid "Add Primitive" msgstr "Primitiv hinzufügen" msgid "Show Labels" -msgstr "Labels anzeigen" +msgstr "Etiketten anzeigen" msgid "To objects" msgstr "Zu Objekten" @@ -1006,10 +1006,10 @@ msgstr "" "Automatische Ausrichtung des Objekts zur Verbesserung der Druckqualität." msgid "Split the selected object into mutiple objects" -msgstr "Aufteilung des ausgewählten Objekts in mehrere Objekte" +msgstr "Das ausgewählte Objekt in mehrere Objekte aufteilen" msgid "Split the selected object into mutiple parts" -msgstr "Aufteilung des ausgewählten Objekts in mehrere Teile" +msgstr "Das ausgewählte Objekt in mehrere Teile aufteilen" msgid "Select All" msgstr "Alle auswählen" @@ -1018,7 +1018,7 @@ msgid "select all objects on current plate" msgstr "Alle Objekte auf der aktuellen Druckplatte auswählen" msgid "Delete All" -msgstr "Alle löschen" +msgstr "Alles löschen" msgid "delete all objects on current plate" msgstr "Alle Objekte auf der aktuellen Druckplatte löschen" @@ -1030,7 +1030,7 @@ msgid "arrange current plate" msgstr "Aktuelle Druckplatte anordnen" msgid "Auto Rotate" -msgstr "automatische Rotation" +msgstr "Automatisch rotieren" msgid "auto rotate current plate" msgstr "Aktuelle Druckplatte automatisch rotieren" @@ -1039,7 +1039,7 @@ msgid "Remove the selected plate" msgstr "Aktuelle Druckplatte entfernen" msgid "Clone" -msgstr "Klonen" +msgstr "Duplizieren" msgid "Simplify Model" msgstr "Modell vereinfachen" @@ -1089,8 +1089,8 @@ msgstr[1] "%1$d Fehler repariert" #, c-format, boost-format msgid "Error: %1$d non-manifold edge." msgid_plural "Error: %1$d non-manifold edges." -msgstr[0] "Fehler: %1$d nicht-vielfältige Kante." -msgstr[1] "Fehler: %1$d nicht-vielfältige Kanten." +msgstr[0] "Fehler: %1$d „non-manifold\" Kante." +msgstr[1] "Fehler: %1$d „non-manifold\" Kanten." msgid "Remaining errors" msgstr "Verbleibende Fehler" @@ -1098,8 +1098,8 @@ msgstr "Verbleibende Fehler" #, c-format, boost-format msgid "%1$d non-manifold edge" msgid_plural "%1$d non-manifold edges" -msgstr[0] "%1$d nicht-vielfältige Kante" -msgstr[1] "%1$d nicht-vielfältige Kanten" +msgstr[0] "%1$d „non-manifold\" Kante" +msgstr[1] "%1$d „non-manifold\" Kanten" msgid "Right click the icon to fix model object" msgstr "" @@ -1127,7 +1127,7 @@ msgstr "" msgid "Click the icon to edit support painting of the object" msgstr "" -"Klicken Sie auf das Symbol, um die gemalten Supports des Objekts zu " +"Klicken Sie auf das Symbol, um die aufgemalten Stützen des Objekts zu " "bearbeiten" msgid "Click the icon to edit color painting of the object" @@ -1158,7 +1158,7 @@ msgid "" "Switch to per-object setting mode to edit process settings of selected " "objects." msgstr "" -"Wechseln Sie in den Einstellungsmodus pro Objekt, um die " +"Wechseln Sie in den objektbezogenen Einstellungsmodus, um die " "Prozesseinstellungen der ausgewählten Objekte zu bearbeiten." msgid "Delete connector from object which is a part of cut" @@ -1187,7 +1187,7 @@ msgid "Delete all connectors" msgstr "" msgid "Deleting the last solid part is not allowed." -msgstr "Das Löschen des letzten festen Teils ist nicht erlaubt." +msgstr "Das Löschen des letzten soliden Teils ist nicht erlaubt." msgid "The target object contains only one part and can not be splited." msgstr "Das Zielobjekt enthält nur einen Teil und kann nicht geteilt werden." @@ -1260,22 +1260,22 @@ msgid "Modifier" msgstr "Modifizierer" msgid "Support Blocker" -msgstr "Supportblocker" +msgstr "Stützblocker" msgid "Support Enforcer" -msgstr "Supportverstärker" +msgstr "Stützverstärker" msgid "Type:" msgstr "Typ:" msgid "Choose part type" -msgstr "Wähle Teiletyp" +msgstr "Bauteiltyp auswählen" msgid "Enter new name" -msgstr "Geben Sie den neuen Namen ein" +msgstr "Neuen Namen eingeben" msgid "Renaming" -msgstr "Am Umbenennen" +msgstr "Wird umbenannt" msgid "Repairing model object" msgstr "Modellobjekt reparieren" @@ -1294,7 +1294,7 @@ msgid "Repairing was canceled" msgstr "Reparieren wurde abgebrochen" msgid "Additional process preset" -msgstr "Zusätzliche Prozessvoreinstellung" +msgstr "Zusätzliche Prozesseinstellung" msgid "Remove parameter" msgstr "Parameter entfernen" @@ -1341,13 +1341,13 @@ msgid "Wall loops" msgstr "Wandschleifen" msgid "Infill density(%)" -msgstr "Füllungsdichte(%)" +msgstr "Füllungdichte(%)" msgid "Auto Brim" msgstr "Automatische Umrandung" msgid "Outer wall speed" -msgstr "Äußere Wandgeschwindigkeit" +msgstr "Geschwindigkeit Außenwand" msgid "Plate" msgstr "Druckplatte" @@ -1393,8 +1393,8 @@ msgstr "Benutzerdefinierter G-Code" msgid "Enter Custom G-code used on current layer:" msgstr "" -"Geben Sie den auf der aktuellen Ebene verwendeten benutzerdefinierten G-Code " -"ein:" +"Den auf der aktuellen Ebene zu verwendeten benutzerdefinierten G-Code " +"eingeben:" msgid "OK" msgstr "OK" @@ -1481,7 +1481,7 @@ msgid "Retry" msgstr "Wiederholen" msgid "Calibrating AMS..." -msgstr "AMS Kalibrieren..." +msgstr "AMS kalibrieren..." msgid "A problem occured during calibration. Click to view the solution." msgstr "" @@ -1495,16 +1495,16 @@ msgid "Cancel calibration" msgstr "Kalibration abbrechen" msgid "Heat the nozzle" -msgstr "Druckdüse aufheizen" +msgstr "Düse aufheizen" msgid "Cut filament" -msgstr "Material abschneiden" +msgstr "Filament abschneiden" msgid "Pull back current filament" msgstr "Ziehen Sie das aktuelle Filament zurück" msgid "Push new filament into extruder" -msgstr "Neues Filament in den Extruder drücken" +msgstr "Neues Filament in den Extruder schieben" msgid "Purge old filament" msgstr "Altes Filament entfernen" @@ -1519,8 +1519,8 @@ msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " "load or unload filiament." msgstr "" -"Wählen Sie einen AMS-Slot und drücken Sie dann die Taste \"Laden\" oder " -"\"Entladen\", um automatisch Filament zu laden oder zu entladen." +"Wählen Sie einen AMS-Slot und drücken Sie dann \"Laden\" oder \"Entladen\", " +"um automatisch Filament zu laden oder zu entladen." msgid "Edit" msgstr "Bearbeiten" @@ -1529,8 +1529,8 @@ msgid "" "All the selected objects are on the locked plate,\n" "We can not do auto-arrange on these objects." msgstr "" -"Alle ausgewählten Objekte befinden sich auf der gesperrten Druckplatte,\n" -"Wir können diese Objekte nicht automatisch anordnen." +"Alle ausgewählten Objekte befinden sich auf einer gesperrten Druckplatte.\n" +"Die Objekte können nicht automatisch angeordnet werden." msgid "No arrangable objects are selected." msgstr "Es sind keine anordnungsfähigen Objekte ausgewählt." @@ -1539,8 +1539,8 @@ msgid "" "This plate is locked,\n" "We can not do auto-arrange on this plate." msgstr "" -"Diese Druckplatte ist gesperrt,\n" -"Wir können auf dieser Druckplatte keine automatische Anordnung vornehmen." +"Diese Druckplatte ist gesperrt.\n" +"Wir können diese Druckplatte nicht automatisch anordnen." msgid "Arranging..." msgstr "Anordnen..." @@ -1560,8 +1560,8 @@ msgstr "Anordnen abgebrochen." msgid "" "Arranging is done but there are unpacked items. Reduce spacing and try again." msgstr "" -"Das Anordnen ist erledigt, aber es gibt noch unverpackte Gegenstände. " -"Verringern Sie die Abstände und versuchen Sie es erneut." +"Das Anordnen ist abgeschlossen, aber einige Elemente konnten nicht " +"angeordnet werden. Verringern Sie die Abstände und versuchen Sie es erneut." msgid "Arranging done." msgstr "Anordnung beendet." @@ -1572,7 +1572,7 @@ msgid "" "bed:\n" "%s" msgstr "" -"Die folgendenObjekte, die nicht auf ein einzelnes Druckbett passen, wurden " +"Die folgenden Objekte, die nicht auf ein einzelnes Druckbett passen, wurden " "bei der Anordnung ignoriert:\n" "%s" @@ -1580,15 +1580,15 @@ msgid "" "All the selected objects are on the locked plate,\n" "We can not do auto-orient on these objects." msgstr "" -"Alle ausgewählten Objekte befinden sich auf der gesperrten Druckplatte,\n" -"Wir können diese Objekte nicht automatisch ausrichten." +"Alle ausgewählten Objekte befinden sich auf einer gesperrten Druckplatte.\n" +"Die Objekte können nicht automatisch ausgerichtet werden." msgid "" "This plate is locked,\n" "We can not do auto-orient on this plate." msgstr "" -"Diese Druckplatte ist gesperrt,\n" -"Wir können keine automatische Ausrichtung auf dieser Druckplatte vornehmen." +"Diese Druckplatte ist gesperrt.\n" +"Wir können diese Druckplatte nicht automatisch ausrichten." msgid "Orienting..." msgstr "Ausrichten..." @@ -1597,7 +1597,7 @@ msgid "Orienting" msgstr "Ausrichten" msgid "Error! Unable to create thread!" -msgstr "Fehler! Thema kann nicht erstellt werden!" +msgstr "Fehler. Thread kann nicht erstellt werden." msgid "Exception" msgstr "Ausnahme" @@ -1637,22 +1637,22 @@ msgstr "Auftrag abgebrochen" msgid "Upload task timed out. Please check the network problem and try again" msgstr "" -"Upload-Aufgabe wurde abgebrochen. Bitte überprüfen Sie das Netzwerkproblem " -"und versuchen Sie es erneut" +"Zeitüberschreitung beim Upload. Bitte überprüfen Sie das Netzwerk und " +"versuchen Sie es erneut" msgid "Cloud service connection failed. Please try again." msgstr "" "Die Verbindung zum Cloud-Dienst ist fehlgeschlagen. Bitte versuche es erneut." msgid "Print file not found, please slice again" -msgstr "Druckdatei nicht gefunden, bitte noch einmal probieren (erneut Slicen)" +msgstr "Druckdatei nicht gefunden. Bitte erneut slicen" msgid "" "The print file exceeds the maximum allowable size (1GB). Please simplify the " "model and slice again" msgstr "" "Die Druckdatei überschreitet die maximal zulässige Größe (1 GB). Bitte " -"vereinfachen Sie das Modell und slicen Sie es erneut" +"vereinfachen Sie das Modell und slicen Sie diese erneut." msgid "Failed uploading print file" msgstr "Fehler beim Hochladen der Druckdatei" @@ -1670,7 +1670,7 @@ msgid "Service Unavailable" msgstr "Dienst nicht verfügbar" msgid "Unkown Error." -msgstr "Unbekannter Fehler" +msgstr "Unbekannter Fehler." msgid "Sending print configuration" msgstr "Druckkonfiguration senden" @@ -1703,7 +1703,7 @@ msgstr "Senden der G-Code-Datei an die MicroSD-Karte" #, c-format, boost-format msgid "Successfully sent. Close current page in %s s" -msgstr "Erfolgreich gesendet. Aktuelle Seite schließen in %s s" +msgstr "Erfolgreich gesendet. Aktuelle Seite schließt in %ss" msgid "An SD card needs to be inserted before sending to printer." msgstr "" @@ -1770,7 +1770,7 @@ msgid "Attention!" msgstr "Achtung!" msgid "Downloading" -msgstr "" +msgstr "Herunterladen" msgid "Download failed" msgstr "Download fehlgeschlagen" @@ -1785,10 +1785,10 @@ msgid "Installing" msgstr "Installieren" msgid "Install failed" -msgstr "Installierung fehlgeschlagen" +msgstr "Installation fehlgeschlagen" msgid "Portions copyright" -msgstr "Teile des Urheberrechts" +msgstr "Informationen zum Urheberrecht" msgid "Copyright" msgstr "Urheberrecht" @@ -1867,7 +1867,7 @@ msgstr "Farbe" msgid "" "Nozzle\n" "Temperature" -msgstr "Druckdüsentemperatur" +msgstr "Düsentemperatur" msgid "max" msgstr "max" @@ -1884,11 +1884,11 @@ msgstr "SN" msgid "Setting AMS slot information while printing is not supported" msgstr "" -"Die Einstellung von AMS-Steckplatzinformationen während des Drucks wird " -"nicht unterstützt." +"Das Einstellen von AMS-Slot-Informationen während des Drucks wird nicht " +"unterstützt." msgid "Factors of dynamic flow cali" -msgstr "Faktoren der dynamischen Druckflusskalibrierung" +msgstr "Faktoren der dynamischen Flusskalibrierung" msgid "Factor K" msgstr "Faktor K" @@ -1915,7 +1915,7 @@ msgid "Other color" msgstr "" msgid "Dynamic flow calibration" -msgstr "Dynamische Druckflusskalibrierung" +msgstr "Dynamische Flusskalibrierung" msgid "" "The nozzle temp and max volumetric speed will affect the calibration " @@ -1925,16 +1925,16 @@ msgstr "" "Die Düsentemperatur und die maximale volumetrische Geschwindigkeit " "beeinflussen die Kalibrierungsergebnisse. Bitte geben Sie die gleichen Werte " "ein wie beim tatsächlichen Druck. Sie können automatisch ausgefüllt werden, " -"indem Sie eine Filamentvoreinstellung auswählen." +"indem Sie eine Filamentprofil auswählen." msgid "Nozzle Diameter" -msgstr "Druckdüsendurchmesser" +msgstr "Düsendurchmesser" msgid "Bed Type" msgstr "Druckbetttyp" msgid "Nozzle temperature" -msgstr "Druckdüsentemperatur" +msgstr "Düsentemperatur" msgid "Bed Temperature" msgstr "Druckbetttemperatur" @@ -1942,14 +1942,14 @@ msgstr "Druckbetttemperatur" msgid "Max volumetric speed" msgstr "Maximale Volumengeschwindigkeit" -msgid "℃" -msgstr "" +msgid "\\u2103" +msgstr "\\u2103" msgid "Bed temperature" msgstr "Druckbetttemperatur" -msgid "mm³" -msgstr "mm³" +msgid "mm\\u00B3" +msgstr "mm\\u00B3" msgid "Start calibration" msgstr "Starten" @@ -1988,25 +1988,25 @@ msgid "%s does not support %s" msgstr "%s unterstützt %s nicht" msgid "Dynamic flow Calibration" -msgstr "Dynamische Druckflusskalibrierung" +msgstr "Dynamische Flusskalibrierung" msgid "Step" msgstr "Schritt" msgid "AMS Slots" -msgstr "AMS-Steckplätze" +msgstr "AMS-Slots" msgid "" "Note: Only the AMS slots loaded with the same material type can be selected." msgstr "" -"Hinweis: Es können nur die AMS-Steckplätze ausgewählt werden, die mit " -"demselben Materialtyp geladen sind." +"Hinweis: Es können nur die AMS-Slots ausgewählt werden, die mit demselben " +"Materialtyp geladen sind." msgid "Enable AMS" msgstr "AMS aktivieren" msgid "Print with filaments in the AMS" -msgstr "Mit Filament in der AMS drucken" +msgstr "Mit Filament aus dem AMS drucken" msgid "Disable AMS" msgstr "AMS deaktivieren" @@ -2043,16 +2043,16 @@ msgid "" "accurately." msgstr "" "Hinweis: Wenn der Deckel geöffnet ist oder die Trockenmittelpackung " -"gewechselt wird, kann es Stunden oder eine Nacht dauern, bis die " -"Feuchtigkeit aufgenommen ist. Niedrige Temperaturen verlangsamen den Prozess " -"ebenfalls. Während dieser Zeit stellt der Indikator die Werte der Kammer " -"möglicherweise nicht genau dar." +"gewechselt wird, kann es Stunden oder gar eine Nacht dauern, bis die " +"Feuchtigkeit aufgenommen wurde. Niedrige Temperaturen verlangsamen den " +"Prozess ebenfalls. Während dieser Zeit stellt der Indikator die Werte der " +"Kammer möglicherweise nicht genau dar." msgid "" "Config which AMS slot should be used for a filament used in the print job" msgstr "" -"Legen Sie fest, welcher AMS-Slot für ein im Druckauftrag verwendetes " -"Filament verwendet werden soll." +"Legen Sie fest, welcher AMS-Slot für das im Druckauftrag genutzte Filament " +"verwendet werden soll." msgid "Filament used in this print job" msgstr "Für diesen Druckauftrag verwendetes Filament" @@ -2061,7 +2061,7 @@ msgid "AMS slot used for this filament" msgstr "Für dieses Filament verwendeter AMS-Slot" msgid "Click to select AMS slot manually" -msgstr "Klicken Sie, um den AMS-Slot manuell auszuwählen" +msgstr "Klicken Sie hier, um den AMS-Slot manuell auszuwählen" msgid "Do not Enable AMS" msgstr "AMS nicht aktivieren" @@ -2070,7 +2070,7 @@ msgid "Print using materials mounted on the back of the case" msgstr "Drucken mit Filament von einer externen Spule." msgid "Print with filaments in ams" -msgstr "Mit Filament in der AMS drucken" +msgstr "Mit Filament aus dem AMS drucken" msgid "Print with filaments mounted on the back of the chassis" msgstr "Drucken mit Filament von einer externen Spule" @@ -2085,13 +2085,13 @@ msgid "AMS Settings" msgstr "AMS Einstellungen" msgid "Insertion update" -msgstr "Update einfügen" +msgstr "Aktualisierung des Einfügens" msgid "" "The AMS will automatically read the filament information when inserting a " "new Bambu Lab filament. This takes about 20 seconds." msgstr "" -"Die AMS liest automatisch die Filamentinformationen, wenn ein neues Bambu " +"Das AMS liest automatisch die Filamentinformationen, wenn ein neues Bambu " "Lab Filament eingesetzt wird. Dies dauert etwa 20 Sekunden." msgid "" @@ -2099,16 +2099,16 @@ msgid "" "automatically read any information until printing is completed." msgstr "" "Hinweis: Wenn während des Drucks neues Filament eingelegt wird, liest das " -"AMS nicht automatisch Informationen ein, bis der Druckvorgang abgeschlossen " -"ist." +"AMS nicht automatisch die Informationen ein, bis der Druckvorgang " +"abgeschlossen ist." msgid "" "When inserting a new filament, the AMS will not automatically read its " "information, leaving it blank for you to enter manually." msgstr "" "Hinweis: Wenn während des Drucks neues Filament eingelegt wird, liest das " -"AMS nicht automatisch Informationen ein, bis der Druckvorgang abgeschlossen " -"ist." +"AMS die Informationen nicht automatisch ein, bis der Druckvorgang " +"abgeschlossen ist." msgid "Power on update" msgstr "Update beim einschalten" @@ -2127,9 +2127,9 @@ msgid "" "during startup and will continue to use the information recorded before the " "last shutdown." msgstr "" -"Das AMS liest beim Start nicht automatisch Informationen vom eingesetzten " -"Filament und verwendet weiterhin die vor dem letzten Herunterfahren " -"aufgezeichneten Informationen." +"Das AMS liest während dem Start nicht automatisch Informationen vom " +"eingesetzten Filament und verwendet weiterhin die vor dem letzten " +"Ausschalten aufgezeichneten Informationen." msgid "Update remaining capacity" msgstr "Restkapazität aktualisieren" @@ -2151,7 +2151,7 @@ msgid "" "automatically when current filament runs out" msgstr "" "AMS wechselt automatisch zu einer anderen Spule mit denselben " -"Filamenteigenschaften, wenn das aktuelle Filament zu Ende geht." +"Filamenteigenschaften, wenn das aktuelle Filament leer ist." msgid "File" msgstr "Datei" @@ -2160,15 +2160,15 @@ msgid "" "Failed to download the plug-in. Please check your firewall settings and vpn " "software, check and retry." msgstr "" -"Der Download des Plug-ins ist fehlgeschlagen. Bitte überprüfen Sie Ihre " -"Firewall-Einstellungen, Ihre VPN-Software und versuchen Sie es erneut." +"Der Download des Plugins ist fehlgeschlagen. Bitte überprüfen Sie Ihre " +"Firewall-Einstellungen und VPN-Software und versuchen Sie es erneut." msgid "" "Failed to install the plug-in. Please check whether it is blocked or deleted " "by anti-virus software." msgstr "" -"Die Installation des Plug-ins ist fehlgeschlagen. Bitte prüfen Sie, ob es " -"von einer Antiviren-Software blockiert oder gelöscht wurde." +"Die Installation des Plugins ist fehlgeschlagen. Bitte prüfen Sie, ob es von " +"einer Antiviren-Software blockiert oder gelöscht wurde." msgid "click here to see more info" msgstr "Klicken Sie hier, um weitere Informationen zu erhalten" @@ -2181,24 +2181,24 @@ msgid "" "printable boundary and causing equipment wear." msgstr "" "), um die Position des Werkzeugkopfs zu ermitteln. Dadurch wird verhindert, " -"dass sich das Gerät über die druckbare Grenze bewegt und das Gerät abgenutzt " -"wird." +"dass sich das Gerät über die Bewegungsgrenzen bewegt und das Gerät " +"beschädigt wird." msgid "Go Home" -msgstr "Werkzeugkopf zur Ausgangsposition" +msgstr "Werkzeugkopf zur Referenzposition fahren" msgid "" "A error occurred. Maybe memory of system is not enough or it's a bug of the " "program" msgstr "" -"Ein Fehler ist aufgetreten. Vielleicht reicht der Speicher des Systems nicht " -"aus oder es handelt sich um einen Fehler im Programm" +"Ein Fehler ist aufgetreten. Vielleicht reicht der Arbeitsspeicher des " +"Systems nicht aus oder es handelt sich um einen Fehler im Programm." msgid "Please save project and restart the program. " msgstr "Bitte speichern Sie das Projekt und starten Sie das Programm neu. " msgid "Processing G-Code from Previous file..." -msgstr "Bearbeite G-Code der vorherigen Datei..." +msgstr "Verarbeite G-Code der vorherigen Datei..." msgid "Slicing complete" msgstr "Slicing abgeschlossen" @@ -2210,7 +2210,7 @@ msgid "Illegal instruction" msgstr "Unzulässiger Befehl" msgid "Divide by zero" -msgstr "Division durch Null" +msgstr "Geteilt durch Null" msgid "Overflow" msgstr "Überlauf" @@ -2219,13 +2219,13 @@ msgid "Underflow" msgstr "Unterlauf" msgid "Floating reserved operand" -msgstr "Reservierter Gleitkomma-Operand" +msgstr "Reservierter Operand" msgid "Stack overflow" msgstr "Stapelüberlauf" msgid "Unknown error when export G-code." -msgstr "Unbekannter Fehler beim exportieren des G-Code." +msgstr "Unbekannter Fehler beim exportieren des G-Codes." #, boost-format msgid "" @@ -2251,8 +2251,7 @@ msgstr "" #, boost-format msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" msgstr "" -"Planen des Uploads auf `%1%`. Siehe Fenster -> Host-Upload-Warteschlange " -"drucken" +"Planen des Uploads auf `%1%`. Siehe Fenster -> Host-Upload-Druckwarteschlange" msgid "Origin" msgstr "Nullpunkt" @@ -2261,7 +2260,7 @@ msgid "Diameter" msgstr "Durchmesser" msgid "Size in X and Y of the rectangular plate." -msgstr "Größe der rechteckigen Platte in X und Y." +msgstr "Größe der rechteckigen Druckplatte in X und Y." msgid "" "Distance of the 0,0 G-code coordinate from the front left corner of the " @@ -2305,14 +2304,13 @@ msgstr "Modell" msgid "Choose an STL file to import bed shape from:" msgstr "" -"Wählen Sie eine STL-Datei aus, aus der Sie die Druckbettform importieren " -"möchten:" +"Wählen Sie eine STL-Datei aus, die Sie als Druckbettform importieren möchten:" msgid "Invalid file format." msgstr "Ungültiges Dateiformat." msgid "Error! Invalid model" -msgstr "Fehler! Ungültiges Modell" +msgstr "Fehler: Ungültiges Modell" msgid "The selected file contains no geometry." msgstr "Die ausgewählte Datei enthält keine Geometrie." @@ -2325,12 +2323,12 @@ msgstr "" msgid "Choose a file to import bed texture from (PNG/SVG):" msgstr "" -"Wählen Sie eine Datei aus, aus der Sie die Druckbetttextur importieren " -"möchten (PNG/SVG):" +"Wählen Sie eine Datei aus, die Sie als Druckbetttextur importieren möchten " +"(PNG/SVG):" msgid "Choose an STL file to import bed model from:" msgstr "" -"Wählen Sie eine STL-Datei aus, aus der Sie das Druckbettmodell importieren " +"Wählen Sie eine STL-Datei aus, die Sie als Druckbettmodell importieren " "möchten:" msgid "Bed Shape" @@ -2341,9 +2339,10 @@ msgid "" "Please make sure whether to use the temperature to print.\n" "\n" msgstr "" -"Die Druckdüse kann blockiert werden, wenn die Temperatur außerhalb des " -"empfohlenen Bereichs liegt.\n" -"Vergewissern Sie sich, ob Sie die Temperatur zum Drucken verwenden wollen.\n" +"Die Düse kann verstopfen, wenn die Temperatur außerhalb des empfohlenen " +"Bereichs liegt.\n" +"Vergewissern Sie sich, ob Sie wirklich diese Temperatur zum Drucken " +"verwenden möchten.\n" "\n" #, c-format, boost-format @@ -2351,8 +2350,7 @@ msgid "" "Recommended nozzle temperature of this filament type is [%d, %d] degree " "centigrade" msgstr "" -"Die empfohlene Druckdüsentemperatur für diesen Filamenttyp beträgt [%d, %d] " -"°C" +"Die empfohlene Düsentemperatur für diesen Filamenttyp beträgt [%d, %d] °C" #, c-format, boost-format msgid "" @@ -2363,7 +2361,7 @@ msgstr "" "Die Betttemperatur der anderen Schicht ist um mehr als %d Grad Celsius " "niedriger als die Betttemperatur der ersten Schicht.\n" "Dies kann dazu führen, dass sich das Modell während des Drucks von der " -"Bauplatte löst" +"Druckplatte löst" msgid "" "Bed temperature is higher than vitrification temperature of this filament.\n" @@ -2373,10 +2371,10 @@ msgid "" msgstr "" "Die Druckbetttemperatur ist höher als die Verglasungstemperatur dieses " "Filaments.\n" -"Dies kann zu einer Verstopfung der Druckdüse und zu Druckfehlern führen.\n" +"Dies kann zu einer Verstopfung der Düse und zu Druckfehlern führen.\n" "Bitte lassen Sie den Drucker während des Druckvorgangs geöffnet, um die " "Luftzirkulation zu gewährleisten, oder reduzieren Sie die Temperatur des " -"Heizbett." +"Heizbetts." msgid "" "Too small max volumetric speed.\n" @@ -2396,22 +2394,22 @@ msgid "" "Too large layer height.\n" "Reset to 0.2" msgstr "" -"Zu große Schichthöhe.\n" -"Auf 0,2 zurücksetzen" +"Schichthöhe zu groß\n" +"Auf 0.2 zurückgesetzt" msgid "" "Too small ironing spacing.\n" "Reset to 0.1" msgstr "" "Zu kleiner Ironing-Abstand.\n" -"Auf 0,1 zurücksetzen" +"Auf 0,1 zurückgesetzt" msgid "" "Zero initial layer height is invalid.\n" "\n" "The first layer height will be reset to 0.2." msgstr "" -"Eine anfängliche Schichthöhe von Null ist ungültig.\n" +"Eine erste Schichthöhe von Null ist ungültig.\n" "\n" "Die erste Schichthöhe wird auf 0,2 zurückgesetzt." @@ -2423,11 +2421,11 @@ msgid "" "\n" "The value will be reset to 0." msgstr "" -"Diese Einstellung wird nur in einigen Fällen für die Einstellung der " -"Modellgröße mit kleinen Werten verwendet.\n" -"Zum Beispiel, wenn die Modellgröße einen kleinen Fehler hat und schwer zu " -"montieren ist.\n" -"Für große Abstimmungen verwenden Sie bitte die Modellskalierungsfunktion.\n" +"Diese Einstellung wird für Anpassung der Modellgröße um kleine Werte " +"verwendet.\n" +"Zum Beispiel, wenn die Modellgröße leicht abweicht und schwer zu montieren " +"ist.\n" +"Für große Anpassungen verwenden Sie bitte die Modellskalierung.\n" "\n" "Der Wert wird auf 0 zurückgesetzt." @@ -2438,7 +2436,7 @@ msgid "" "\n" "The value will be reset to 0." msgstr "" -"Ein zu großer Elefantenfußausgleich ist unangemessen.\n" +"Der Elefantenfußausgleich ist zu groß.\n" "Wenn der Elefantenfuß-Effekt wirklich gravierend ist, überprüfen Sie bitte " "andere Einstellungen.\n" "Zum Beispiel, ob die Betttemperatur zu hoch ist.\n" @@ -2457,7 +2455,7 @@ msgid "" msgstr "" "Diese Einstellungen automatisch ändern? \n" "Ja - Diese Einstellungen ändern und den Spiralmodus automatisch aktivieren\n" -"Nein - Verzichten Sie dieses Mal auf den Spiralmodus" +"Nein - Spiralmodus nicht aktivieren" msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " @@ -2466,11 +2464,11 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Adaptive Layer Height and Independent Support Layer Height" msgstr "" -"Prime Tower funktioniert nicht, wenn Adaptive Schichthöhe oder unabhängige " -"Support-Schichthöhe aktiviert ist.\n" +"Der Reinigungsturm funktioniert nicht, wenn adaptive Schichthöhen oder " +"unabhängige Stütz-Schichthöhen aktiviert sind.\n" "Was möchten Sie beibehalten?\n" -"YES - Prime Tower beibehalten\n" -"NEIN - Adaptive Schichthöhe und Unabhängige Support-Schichthöhe beibehalten" +"JA - Reinigungsturm beibehalten\n" +"NEIN - Adaptive Schichthöhen und Unabhängige Stütz-Schichthöhen beibehalten" msgid "" "Prime tower does not work when Adaptive Layer Height is on.\n" @@ -2478,10 +2476,11 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Adaptive Layer Height" msgstr "" -"Prime Tower funktioniert nicht, wenn Adaptive Schichthöhet aktiviert ist.\n" +"Der Reinigungsturm funktioniert nicht, wenn adaptive Schichthöhen aktiviert " +"sind.\n" "Was möchten Sie beibehalten?\n" -"YES - Prime Tower beibehalten\n" -"NEIN - Adaptive Schichthöhe beibehalten" +"Ja - Reinigungsturm beibehalten\n" +"NEIN - Adaptive Schichthöhen beibehalten" msgid "" "Prime tower does not work when Independent Support Layer Height is on.\n" @@ -2489,15 +2488,15 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Independent Support Layer Height" msgstr "" -"Prime Tower funktioniert nicht, wenn Unabhängige Support-Schichthöhe " -"aktiviert ist.\n" +"Reinigungsturm funktioniert nicht, wenn unabhängige Stütz-Schichthöhen " +"aktiviert sind.\n" "Was möchten Sie beibehalten?\n" -"YES - Prime Tower beibehalten\n" -"NEIN - Adaptive Schichthöhe beibehalten" +"JA - Reinigungsturm beibehalten\n" +"NEIN - unabhängige Stütz-Schichthöhen beibehalten" #, boost-format msgid "%1% infill pattern doesn't support 100%% density." -msgstr "Das %1%-Infill-Muster unterstützt keine 100%% Dichte." +msgstr "Das %1% Füllmuster unterstützt keine 100%% Dichte." msgid "" "Switch to rectilinear pattern?\n" @@ -2505,8 +2504,8 @@ msgid "" "No - reset density to default non 100% value automaticlly" msgstr "" "Zu geradlinigen Mustern wechseln?\n" -"Ja - Automatisches Umschalten auf ein geradliniges Muster\n" -"Nein - Dichte automatisch auf den Standardwert von nicht 100% zurücksetzen" +"Ja - Automatisches auf das geradlinige Muster wechseln\n" +"Nein - Dichte automatisch auf den Standardwert unter 100% zurücksetzen" msgid "" "While printing by Object, the extruder may collide skirt.\n" @@ -2520,7 +2519,7 @@ msgid "Heatbed preheating" msgstr "Heizbett vorheizen" msgid "Sweeping XY mech mode" -msgstr "Säubern von XY mechanisch Modus" +msgstr "Frequenzmessung der XY-Mechanik" msgid "Changing filament" msgstr "Filament wechseln" @@ -2529,7 +2528,7 @@ msgid "M400 pause" msgstr "M400 Pause" msgid "Paused due to filament runout" -msgstr "Angehalten wegen Filament-Auslauf" +msgstr "Pausiert aufgrund leerem Filaments" msgid "Heating hotend" msgstr "Heizen des Hotend" @@ -2544,25 +2543,25 @@ msgid "Inspecting first layer" msgstr "Überprüfung der ersten Schicht" msgid "Identifying build plate type" -msgstr "Identifikation der Bauplatte" +msgstr "Identifikation der Druckplatte" msgid "Calibrating Micro Lidar" -msgstr "Kalibrierung des Mikro-Lidars" +msgstr "Kalibrierung der Mikro-Lidar" msgid "Homing toolhead" -msgstr "Homing des Werkzeugkopfes" +msgstr "Referenzfahrt des Werkzeugkopfes" msgid "Cleaning nozzle tip" -msgstr "Reinigen der Druckdüsenspitze" +msgstr "Reinigen der Düse" msgid "Checking extruder temperature" msgstr "Überprüfen der Extruder Temperatur" msgid "Printing was paused by the user" -msgstr "Der Druckvorgang wurde vom Benutzer angehalten" +msgstr "Der Druckvorgang wurde vom Benutzer pausiert" msgid "Pause of front cover falling" -msgstr "Pause, da die Abdeckung des Werkzeugkopfes abgefallen ist" +msgstr "Pausiert, da die Abdeckung des Werkzeugkopfes abgefallen ist" msgid "Calibrating the micro lida" msgstr "Kalibrierung des Mikro-Lidars" @@ -2656,7 +2655,7 @@ msgid "Layer Height" msgstr "Schichthöhe" msgid "Line Width" -msgstr "Linienweite" +msgstr "Linienbreite" msgid "Fan Speed" msgstr "Lüftergeschwindigkeit" @@ -2698,10 +2697,10 @@ msgid "Loading G-codes" msgstr "Laden von G-Codes" msgid "Generating geometry vertex data" -msgstr "Erzeugen von Geometrie-Eckpunktdaten" +msgstr "Generieren von Geometrie-Eckpunktdaten" msgid "Generating geometry index data" -msgstr "Erzeugung von Geometrie-Indexdaten" +msgstr "Generieren von Geometrie-Indexdaten" msgid "Statistics of All Plates" msgstr "" @@ -2710,7 +2709,7 @@ msgid "Display" msgstr "Anzeigen" msgid "Flushed" -msgstr "Gespült" +msgstr "Gereinigt" msgid "Total" msgstr "Gesamt" @@ -2743,7 +2742,7 @@ msgid "Layer Height (mm)" msgstr "Schichthöhe (mm)" msgid "Line Width (mm)" -msgstr "Linienweite (mm)" +msgstr "Linienbreite (mm)" msgid "Speed (mm/s)" msgstr "Geschwindigkeit (mm/s)" @@ -2770,10 +2769,10 @@ msgid "Seams" msgstr "Nähte" msgid "Retract" -msgstr "Einzug" +msgstr "Rückzug" msgid "Unretract" -msgstr "Auseinzug" +msgstr "Einzug" msgid "Filament Changes" msgstr "Filamentwechsel" @@ -2785,7 +2784,7 @@ msgid "Options" msgstr "Optionen" msgid "travel" -msgstr "bewegung" +msgstr "Bewegung" msgid "Extruder" msgstr "Extruder" @@ -2812,10 +2811,10 @@ msgid "Print settings" msgstr "Druckeinstellungen" msgid "Total Estimation" -msgstr "Gesamtvorhersage" +msgstr "Gesamtschätzung" msgid "Time Estimation" -msgstr "Zeitabschätzung" +msgstr "Geschätzte Zeit" msgid "Normal mode" msgstr "Normaler Modus" @@ -2827,7 +2826,7 @@ msgid "Model printing time" msgstr "Druckzeit des Modell" msgid "Switch to silent mode" -msgstr "Zum Leisemodus wechseln" +msgstr "Zum Leise-Modus wechseln" msgid "Switch to normal mode" msgstr "Zum Normalen Modus wechseln" @@ -2839,7 +2838,7 @@ msgid "Adaptive" msgstr "Adaptiv" msgid "Quality / Speed" -msgstr "Qualität/Geschwindigkeit" +msgstr "Qualität / Geschwindigkeit" msgid "Smooth" msgstr "Smooth" @@ -2863,10 +2862,10 @@ msgid "Remove detail" msgstr "Detail entfernen" msgid "Shift + Left mouse button:" -msgstr "Shift + Linke Maustaste" +msgstr "Umschalttaste + Linke Maustaste:" msgid "Reset to base" -msgstr "Zurücksetzen auf Basis" +msgstr "Auf Ausgangsposition zurücksetzen" msgid "Shift + Right mouse button:" msgstr "Shift + Rechte Maustaste:" @@ -2899,10 +2898,10 @@ msgid "Auto Orientation options" msgstr "Auto-Ausrichtungsoptionen" msgid "Enable rotation" -msgstr "Rotation aktivieren" +msgstr "Drehung aktivieren" msgid "Optimize support interface area" -msgstr "Optimieren Sie den Support-Schnittstellenbereich" +msgstr "Optimieren des Stützen-Schnittstellbereichs" msgid "Orient" msgstr "Orientieren" @@ -3012,7 +3011,7 @@ msgid "Calibration step selection" msgstr "Auswahl des Kalibrierungsschritts" msgid "Micro lidar calibration" -msgstr "Mikro-Lidar-Kalibrierung" +msgstr "Mikro-Lidar Kalibrierung" msgid "Bed leveling" msgstr "Druckbettnivellierung" @@ -3084,11 +3083,11 @@ msgid "Open a new window" msgstr "Ein neues Fenster öffnen" msgid "Application is closing" -msgstr "Anwendung schließt" +msgstr "Anwendung wird geschlossen" msgid "Closing Application while some presets are modified." msgstr "" -"Schließen der Anwendung, während einige Voreinstellungen geändert werden." +"Schließen der Anwendung, während einige Profileinstellungen geändert wurden" msgid "Logging" msgstr "Protokollierung" @@ -3130,7 +3129,7 @@ msgid "Send" msgstr "Senden" msgid "Export plate sliced file" -msgstr "Exportieren einer gesliceten Druckplattendatei" +msgstr "Exportieren der Datei einer gesliceten Druckplatte" msgid "Export all sliced file" msgstr "Alle gesliceten Dateien exportieren" @@ -3157,7 +3156,7 @@ msgid "Show Tip of the Day" msgstr "Tipp des Tages anzeigen" msgid "Check for Update" -msgstr "Prüfen auf Update" +msgstr "Nach Updates suchen" msgid "Open Network Test" msgstr "Netzwerktest öffnen" @@ -3214,7 +3213,7 @@ msgid "Right View" msgstr "Ansicht von rechts" msgid "Start a new window" -msgstr "Starte ein neues Fenster" +msgstr "Neues Fenster starten" msgid "New Project" msgstr "Neues Projekt" @@ -3223,7 +3222,7 @@ msgid "Start a new project" msgstr "Ein neues Projekt beginnen" msgid "Open a project file" -msgstr "Öffne eine Projektdatei" +msgstr "Projektdatei öffnen" msgid "Recent projects" msgstr "Letzte Projekte" @@ -3238,7 +3237,7 @@ msgid "Save Project as" msgstr "Projekt speichern als" msgid "Shift+" -msgstr "Umschalt+" +msgstr "" msgid "Save current project as" msgstr "Aktuelles Projekt speichern als" @@ -3262,7 +3261,7 @@ msgid "Export all objects as STL" msgstr "Alle Objekte als STL exportieren" msgid "Export Generic 3MF" -msgstr "Generisches 3MF exportieren" +msgstr "Generische 3mf exportieren" msgid "Export 3mf file without using some 3mf-extensions" msgstr "Exportieren einer 3mf-Datei ohne Verwendung von 3mf-Erweiterungen" @@ -3274,13 +3273,13 @@ msgid "Export all plate sliced file" msgstr "Exportieren aller gesliceten Druckplatten" msgid "Export G-code" -msgstr "Exportiere G-Code" +msgstr "G-Code exportieren" msgid "Export current plate as G-code" -msgstr "Aktuelle Drucklatte als G-Code exportieren" +msgstr "Aktuelle Druckplatte als G-Code exportieren" msgid "Export &Configs" -msgstr "Exportieren &Konfigurieren" +msgstr "Exportieren & Konfigurieren" msgid "Export current configuration to files" msgstr "Aktuelle Konfiguration in Dateien exportieren" @@ -3298,7 +3297,7 @@ msgid "Redo" msgstr "Wiederholen" msgid "Cut selection to clipboard" -msgstr "Auswahl in Zwischenablage ausschneiden" +msgstr "Auswahl in die Zwischenablage ausschneiden" msgid "Copy" msgstr "Kopieren" @@ -3310,25 +3309,25 @@ msgid "Paste" msgstr "Einfügen" msgid "Paste clipboard" -msgstr "Aus Zwischenablage einfügen" +msgstr "Zwischenablage einfügen" msgid "Delete selected" -msgstr "Ausgewählte löschen" +msgstr "Auswahl löschen" msgid "Deletes the current selection" msgstr "Löscht die aktuelle Auswahl" msgid "Delete all" -msgstr "Alle löschen" +msgstr "Alles löschen" msgid "Deletes all objects" -msgstr "Löscht alle Objekte" +msgstr "Alle Objekte löschen" msgid "Clone selected" -msgstr "Klonen ausgewählt" +msgstr "Auswahl duplizieren" msgid "Clone copies of selections" -msgstr "Kopien von Auswahlen klonen" +msgstr "Ausgewählte Kopien duplizieren" msgid "Select all" msgstr "Alles auswählen" @@ -3355,7 +3354,7 @@ msgid "Show object labels in 3D scene" msgstr "Objektbeschriftungen in der 3D-Szene anzeigen" msgid "Preferences" -msgstr "Vorlieben" +msgstr "Einstellungen" msgid "View" msgstr "Ansicht" @@ -3367,10 +3366,10 @@ msgid "3D Models" msgstr "3D-Modelle" msgid "&Open G-code" -msgstr "Öffne G-C&ode" +msgstr "&Öffne G-Ccode" msgid "Open a G-code file" -msgstr "Öffne eine G-Code-Datei" +msgstr "G-Code-Datei öffnen" msgid "Re&load from Disk" msgstr "Neu&laden von Festplatte" @@ -3379,7 +3378,7 @@ msgid "Reload the plater from disk" msgstr "Druckplatte neu von der Festplatte laden" msgid "Export &Toolpaths as OBJ" -msgstr "Werkzeugwege als OBJ expor&tieren" +msgstr "Werkzeugwege als OBJ exportieren" msgid "Export toolpaths as OBJ" msgstr "Werkzeugweg als OBJ exportieren" @@ -3424,7 +3423,7 @@ msgid "No to All" msgstr "Nein zu allem" msgid "Choose a directory" -msgstr "Ordner wählen …" +msgstr "Ordner auswählen" #, c-format, boost-format msgid "There is %d config exported. (Only non-system configs)" @@ -3465,10 +3464,10 @@ msgid "" "3. The Printer presets" msgstr "" "Möchten Sie Ihre persönlichen Daten aus der Bambu Cloud synchronisieren?\n" -"Sie enthält die folgenden Informationen:\n" -"1. Die Prozessvoreinstellungen\n" -"2. Die Voreinstellungen des Filaments\n" -"3. Die Druckervoreinstellungen" +"Diese enthalten die folgenden Informationen:\n" +"1. Druckprofile\n" +"2. Filamenteinstellungen\n" +"3. Druckerprofile" msgid "Synchronization" msgstr "Synchronisierung" @@ -3494,7 +3493,7 @@ msgstr "Initialisierung fehlgeschlagen (Kein Zugriff im reinen LAN-Modus)!" msgid "Printer is busy downloading, Please wait for the downloading to finish." msgstr "" -"Der Drucker ist mit dem Herunterladen beschäftigt; bitte warten Sie, bis der " +"Der Drucker ist mit dem Herunterladen beschäftigt; Bitte warten Sie, bis der " "Download beendet ist." msgid "Initialize failed (Missing LAN ip of printer)!" @@ -3512,7 +3511,7 @@ msgstr "Netzwerk nicht erreichbar" #, c-format, boost-format msgid "Stopped [%d]!" -msgstr "Angehalten [%d]!" +msgstr "[%d] gestoppt!" msgid "Stopped." msgstr "Gestoppt." @@ -3525,17 +3524,17 @@ msgid "" "Do you want to install them?" msgstr "" "Virtuelle Kamerawerkzeuge werden für diese Aufgabe benötigt!\n" -"Möchten Sie sie installieren?" +"Möchten Sie diese installieren?" msgid "Downloading Virtual Camera Tools" -msgstr "Herunterladen von virtuellen Kameratools" +msgstr "Herunterladen des virtuellen Kameratools" msgid "" "Another virtual camera is running.\n" "Bambu Studio supports only a single virtual camera.\n" "Do you want to stop this virtual camera?" msgstr "" -"Eine weitere virtuelle Kamera wird ausgeführt.\n" +"Eine weitere virtuelle Kamera wird verwendet.\n" "Bambu Studio unterstützt nur eine einzige virtuelle Kamera.\n" "Möchten Sie diese virtuelle Kamera stoppen?" @@ -3563,7 +3562,7 @@ msgid "All Files" msgstr "Alle Dateien" msgid "Group files by year, recent first." -msgstr "Gruppieren Sie die Dateien nach Jahr, die neuesten zuerst." +msgstr "Dateien nach Jahr gruppieren, neuste zuerst." msgid "Group files by month, recent first." msgstr "Dateien nach Monat gruppieren, neueste zuerst." @@ -3599,7 +3598,7 @@ msgid "Batch manage files." msgstr "Batch-Verwaltung von Dateien." msgid "No printers." -msgstr "Keine Drucker" +msgstr "Keine Drucker." msgid "Not supported by this model of printer!" msgstr "Wird von diesem Druckermodell nicht unterstützt!" @@ -3633,10 +3632,10 @@ msgstr "" #, c-format, boost-format msgid "File '%s' was lost! Please download it again." msgstr "" -"Die Datei '%s' ist verloren gegangen! Bitte laden Sie sie erneut herunter." +"Die Datei '%s' ist verloren gegangen! Bitte laden Sie diese erneut herunter." msgid "Download waiting..." -msgstr "Download wartet..." +msgstr "Auf Download warten..." msgid "Play" msgstr "Abspielen" @@ -3736,7 +3735,7 @@ msgid "Printing List" msgstr "Druckliste" msgid "Cancel print" -msgstr "Drucken abbrechen" +msgstr "Druck abbrechen" msgid "Are you sure you want to cancel this print?" msgstr "Möchten Sie diesen Druck wirklich abbrechen?" @@ -3780,7 +3779,7 @@ msgstr "Schichten: %d/%d" msgid "Please heat the nozzle to above 170 degree before loading filament." msgstr "" -"Bitte heizen Sie die Düse auf über 170 Grad auf, bevor Sie Filament einlegen." +"Bitte heizen Sie die Düse auf über 170 Grad auf, bevor Sie Filament laden." msgid "Still unload" msgstr "Immer noch entladen" @@ -3794,7 +3793,7 @@ msgstr "" "Spule nicht." msgid "Please select an AMS slot before calibration" -msgstr "Bitte wählen Sie vor der Kalibrierung einen AMS-Steckplatz aus." +msgstr "Bitte wählen Sie vor der Kalibrierung einen AMS-Slot aus." msgid "" "Cannot read filament info: the filament is loaded to the tool head,please " @@ -3841,7 +3840,7 @@ msgid "Failed to connect to the printer" msgstr "Verbindung zum Drucker fehlgeschlagen" msgid "Don't show again" -msgstr "Nicht mehr anzeigen" +msgstr "Nicht erneut anzeigen" #, c-format, boost-format msgid "%s error" @@ -3857,7 +3856,7 @@ msgstr "%s Warnung" #, c-format, boost-format msgid "%s has a warning" -msgstr "%s hat eine Warnmeldung" +msgstr "%s hat eine Warnung" #, c-format, boost-format msgid "%s info" @@ -3874,10 +3873,10 @@ msgid "3D Mouse disconnected." msgstr "3D-Maus nicht angeschlossen." msgid "Configuration can update now." -msgstr "Die Konfiguration kann jetzt aktualisiert werden." +msgstr "Eine neue Konfiguration ist verfügbar. Jetzt aktualisieren?" msgid "Detail." -msgstr "Detail." +msgstr "Detail" msgid "Integration was successful." msgstr "Die Integration war erfolgreich." @@ -3886,7 +3885,7 @@ msgid "Integration failed." msgstr "Die Integration ist gescheitert." msgid "Undo integration was successful." -msgstr "Die Rückgängigmachung der Integration war erfolgreich." +msgstr "Integration erfolgreich rückgängig gemacht." msgid "New network plug-in available." msgstr "Neues Netzwerk-Plugin verfügbar" @@ -3895,19 +3894,19 @@ msgid "Details" msgstr "Details" msgid "Undo integration failed." -msgstr "Die Rückgängigmachung der Integration war nicht erfolgreich." +msgstr "Die Integration konnte nicht rückgängig gemacht werden." msgid "Exporting." -msgstr "Exportieren." +msgstr "Exportieren" msgid "Software has New version." -msgstr "Die Software hat eine neue Version." +msgstr "Ein Update ist verfügbar!" msgid "Goto download page." msgstr "Zur Download-Seite gehen." msgid "Open Folder." -msgstr "Öffne Ordner." +msgstr "Ordner öffnen." msgid "Safely remove hardware." msgstr "" @@ -3915,14 +3914,14 @@ msgstr "" #, c-format, boost-format msgid "%1$d Object has custom supports." msgid_plural "%1$d Objects have custom supports." -msgstr[0] "%1$d Objekt hat benutzerdefinierte Supports." -msgstr[1] "%1$d Objekte haben benutzerdefinierte Supports." +msgstr[0] "%1$d Objekt hat benutzerdefinierte Stützstrukturen." +msgstr[1] "%1$d Objekte haben benutzerdefinierte Stützstrukturen." #, c-format, boost-format msgid "%1$d Object has color painting." msgid_plural "%1$d Objects have color painting." -msgstr[0] "%1$d Objekt hat gemalte Farbe." -msgstr[1] "%1$d Objekte haben gemalte Farbe." +msgstr[0] "%1$d Objekt hat gemalte Farben." +msgstr[1] "%1$d Objekte haben gemalte Farben." #, c-format, boost-format msgid "%1$d object was loaded as a part of cut object." @@ -3931,7 +3930,7 @@ msgstr[0] "" msgstr[1] "" msgid "ERROR" -msgstr "Fehler" +msgstr "FEHLER" msgid "CANCELED" msgstr "Abgebrochen" @@ -3943,7 +3942,7 @@ msgid "Cancel upload" msgstr "Upload abbrechen" msgid "Slice ok." -msgstr "Slice ok." +msgstr "Slice abgeschlossen" msgid "Jump to" msgstr "Wechsle zu" @@ -3967,13 +3966,14 @@ msgid "WARNING:" msgstr "WARNUNG:" msgid "Your model needs support ! Please make support material enable." -msgstr "Ihr Modell braucht Support! Bitte aktivieren Sie das Supportmaterial." +msgstr "" +"Ihr Modell braucht Stützstrukturen! Bitte aktivieren Sie das Stützmaterial." msgid "Gcode path overlap" msgstr "G-Code Pfadüberlappung" msgid "Support painting" -msgstr "Supports malen" +msgstr "Stützen malen" msgid "Color painting" msgstr "Farbe malen" @@ -3995,7 +3995,7 @@ msgstr "" "niedriger als 2.0 ist.\n" msgid "Please upgrade your graphics card driver." -msgstr "Bitte aktualisieren Sie Ihren Grafikkartentreiber." +msgstr "Bitte aktualisieren Sie Ihren Grafiktreiber." msgid "Unsupported OpenGL version" msgstr "Nicht unterstützte OpenGL Version" @@ -4009,7 +4009,7 @@ msgstr "" "%s" msgid "Error loading shaders" -msgstr "Fehler beim Laden von Shadern" +msgstr "Fehler beim Laden der Shader" msgctxt "Layers" msgid "Top" @@ -4020,20 +4020,20 @@ msgid "Bottom" msgstr "Untere" msgid "Enable AI monitoring of printing" -msgstr "AI-Überwachung des Druckens aktivieren" +msgstr "AI-Überwachung des Druckvorgangs aktivieren" msgid "Sensitivity of pausing is" -msgstr "Die Empfindlichkeit der Pause ist " +msgstr "Die Empfindlichkeit des Pausierens ist" msgid "Enable detection of build plate position" -msgstr "Erkennung der Position der Druckplatte aktivieren" +msgstr "Positionserkennung der Druckplatte aktivieren" msgid "" "The localization tag of build plate is detected, and printing is paused if " "the tag is not in predefined range." msgstr "" -"Die Lokalisierungsmarke der Druckplatte wird erkannt und der Druckvorgang " -"wird unterbrochen, wenn die Marke nicht im vordefinierten Bereich liegt." +"Die Erkennungsmarke auf den Druckplatten wird erkannt und der Druckvorgang " +"unterbrochen, falls die Marke nicht im definierten Bereich liegt." msgid "First Layer Inspection" msgstr "Inspektion der ersten Schicht" @@ -4042,7 +4042,7 @@ msgid "Auto-recovery from step loss" msgstr "Automatische Wiederherstellung bei Positionsverlust (Schrittverlust)" msgid "Global" -msgstr "Allgemein" +msgstr "Global" msgid "Objects" msgstr "Objekte" @@ -4051,7 +4051,7 @@ msgid "Advance" msgstr "Fortgeschritten" msgid "Compare presets" -msgstr "Voreinstellungen vergleichen" +msgstr "Profile vergleichen" msgid "View all object's settings" msgstr "Alle Einstellungen des Objekts anzeigen" @@ -4091,7 +4091,7 @@ msgid "Filament changes" msgstr "Filamentwechsel" msgid "Click to edit preset" -msgstr "Klicken zum Bearbeiten der Voreinstellung" +msgstr "Klicken Sie hier, um das Profil zu bearbeiten" msgid "Connection" msgstr "Verbindung" @@ -4100,7 +4100,7 @@ msgid "Bed type" msgstr "Druckbetttyp" msgid "Flushing volumes" -msgstr "Säuberungsvolumen" +msgstr "Reinigungsvolumen" msgid "Add one filament" msgstr "Ein Filament hinzufügen" @@ -4127,9 +4127,8 @@ msgid "" "Sync filaments with AMS will drop all current selected filament presets and " "colors. Do you want to continue?" msgstr "" -"Bei der Synchronisierung von Filamenten mit AMS werden alle aktuell " -"ausgewählten Filamentvoreinstellungen und Farben gelöscht. Möchten Sie " -"fortfahren?" +"Bei der Synchronisierung von Filamenten mit dem AMS werden alle aktuell " +"ausgewählten Filamentprofile und Farben gelöscht. Möchten Sie fortfahren?" msgid "" "Already did a synchronization, do you want to sync only changes or resync " @@ -4145,23 +4144,23 @@ msgstr "" msgid "There are no compatible filaments, and sync is not performed." msgstr "" "Es gibt keine kompatiblen Filamente und die Synchronisierung wird nicht " -"durchgeführt." +"ausgeführt." msgid "" "There are some unknown filaments mapped to generic preset. Please update " "Bambu Studio or restart Bambu Studio to check if there is an update to " "system presets." msgstr "" -"Es gibt einige unbekannte Filamente, denen generischen Voreinstellungen " -"zugewiesen sind. Bitte aktualisieren Sie Bambu Studio oder starten Sie Bambu " -"Studio neu, um zu prüfen, ob es ein Update der Systemvorgaben gibt." +"Es gibt einige unbekannte Filamente, die generischen Profilen zugewiesen " +"sind. Bitte aktualisieren Sie Bambu Studio oder starten Sie Bambu Studio " +"neu, um zu prüfen, ob es ein Update der Systemvorgaben gibt." msgid "Untitled" msgstr "Unbenannt" #, boost-format msgid "Do you want to save changes to \"%1%\"?" -msgstr "Möchten Sie Änderungen unter \" %1% \" speichern?" +msgstr "Möchten Sie die Änderungen unter \" %1% \" speichern?" #, c-format, boost-format msgid "" @@ -4177,8 +4176,7 @@ msgstr "Das Auswerfen des Geräts %s (%s) ist fehlgeschlagen." msgid "Previous unsaved project detected, do you want to restore it?" msgstr "" -"Ein früheres ungespeichertes Projekt wurde entdeckt, möchten Sie es " -"wiederherstellen?" +"Ein ungespeichertes Projekt wurde entdeckt, möchten Sie es wiederherstellen?" msgid "Restore" msgstr "Wiederherstellen" @@ -4188,25 +4186,25 @@ msgid "" "open the front door of printer before printing to avoid nozzle clog." msgstr "" "Die Druckbetttemperatur überschreitet die Verglasungstemperatur des " -"Filaments. Bitte öffnen Sie die Vordertür des Druckers vor dem Drucken, um " -"ein Verstopfen der Druckdüse zu vermeiden." +"Filaments. Bitte öffnen Sie die Vordertür des Druckers vor dem Druck, um ein " +"Verstopfen der Düse zu vermeiden." msgid "" "The nozzle hardness required by the filament is higher than the default " "nozzle hardness of the printer. Please replace the hardened nozzle or " "filament, otherwise, the nozzle will be attrited or damaged." msgstr "" -"Die für das Filament erforderliche Druckdüsenhärte ist höher als die " -"Standard-Druckdüsenhärte des Druckers. Bitte tauschen Sie gegen eine " -"ausgehärtete Druckdüse aus oder ändern sie das Filament, da sonst die " -"Druckdüse abgenutzt oder beschädigt wird." +"Die für das Filament erforderliche Düsenhärte ist höher als die Standard-" +"Düsenhärte des Druckers. Bitte wechseln Sie zu einer gehärteten Düse oder " +"ändern Sie das Filament, da sich sonst die Düse abgenutzt oder beschädigt " +"wird." #, c-format, boost-format msgid "Loading file: %s" msgstr "Datei wird geladen: %s" msgid "The 3mf is not from Bambu Lab, load geometry data only." -msgstr "Die 3mf stammt nicht vom BambuLab, sondern lädt nur Geometriedaten." +msgstr "Die 3mf stammt nicht vom Bambu Lab, lädt nur Geometriedaten." msgid "Load 3mf" msgstr "3mf laden" @@ -4238,8 +4236,8 @@ msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " "software." msgstr "" -"Die Version %s von 3mf ist neuer als die Version %s von %s, wir schlagen " -"vor, Ihre Software zu aktualisieren." +"Die Version %s von 3mf ist neuer als die Version %s von %s, wir schlagen vor " +"Ihre Software zu aktualisieren." msgid "Invalid values found in the 3mf:" msgstr "" @@ -4248,22 +4246,24 @@ msgid "Please correct them in the param tabs" msgstr "" msgid "The 3mf is not compatible, load geometry data only!" -msgstr "die 3mf ist nicht kompatibel, laden nur von Geometriedaten!" +msgstr "Der 3mf ist nicht kompatibel, lädt nur Geometriedaten!" msgid "Incompatible 3mf" msgstr "Inkompatible 3mf" msgid "Name of components inside step file is not UTF8 format!" -msgstr "Der Name der Komponenten in der Step-Datei ist nicht im UTF8-Format!" +msgstr "Namen der Komponenten in der Step-Datei sind nicht im UTF8-Format!" msgid "The name may show garbage characters!" -msgstr "Der Name könnte Müllzeichen enthalten!" +msgstr "" +"Aufgrund der nicht unterstützten Textkodierung können unbrauchbare Zeichen " +"erscheinen!" #, boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." msgstr "" "Das Laden der Datei \"%1%\" ist fehlgeschlagen. Es wurde eine ungültige " -"Konfiguration gefunden." +"Konfiguration erkannt." msgid "Objects with zero volume removed" msgstr "Objekte mit nicht vorhandenem Volumen entfernt" @@ -4276,8 +4276,8 @@ msgid "" "The object from file %s is too small, and maybe in meters or inches.\n" " Do you want to scale to millimeters?" msgstr "" -"Das Objekt aus der Datei %s ist zu klein und vielleicht in Metern oder " -"Zoll.\n" +"Das Objekt aus der Datei %s ist zu klein und vielleicht in Metern oder Zoll " +"angeben.\n" " Möchten Sie auf Millimeter skalieren?" msgid "Object too small" @@ -4310,7 +4310,7 @@ msgid "" "heat bed automatically?" msgstr "" "Ihr Objekt scheint zu groß zu sein. Möchten Sie es automatisch verkleinern, " -"damit es in das Druckbett passt?" +"damit es auf das Druckbett passt?" msgid "Object too large" msgstr "Objekt zu groß" @@ -4337,13 +4337,13 @@ msgid "Another export job is running." msgstr "Ein weiterer Exportauftrag läuft gerade." msgid "Select a new file" -msgstr "Wählen Sie eine neue Datei" +msgstr "Wähle eine neue Datei aus" msgid "File for the replace wasn't selected" msgstr "Datei für die Ersetzung wurde nicht ausgewählt" msgid "Error during replace" -msgstr "Fehler beim Austausch" +msgstr "Fehler beim Ersetzen" msgid "Please select a file" msgstr "Bitte wählen Sie eine Datei" @@ -4352,7 +4352,7 @@ msgid "Slicing" msgstr "Slicen" msgid "There are warnings after slicing models:" -msgstr "Nach dem Slicen von den Modellen gibt es Warnungen:" +msgstr "Es gibt Warnungen nach dem slicen des Modells:" msgid "warnings" msgstr "Warnungen" @@ -4368,26 +4368,27 @@ msgid "Slicing Plate %d" msgstr "Slicen der Druckplatte %d" msgid "Please resolve the slicing errors and publish again." -msgstr "Bitte beheben Sie die Slicing-Fehler und veröffentlichen Sie erneut." +msgstr "" +"Bitte beheben Sie die Slicing-Fehler und veröffentlichen Sie es erneut." msgid "" "Network Plug-in is not detected. Network related features are unavailable." msgstr "" -"Das Netzwerk-Plug-in wird nicht erkannt. Netzwerkbezogene Funktionen sind " +"Das Netzwerk-Plugin wurde nicht erkannt. Netzwerkbezogene Funktionen sind " "nicht verfügbar." msgid "" "Preview only mode:\n" "The loaded file contains gcode only, Can not enter the Prepare page" msgstr "" -"Nur Vorschaumodus:\n" -"Die geladene Datei enthält nur G-Code, die Seite \"Vorbereiten\" kann nicht " -"aufgerufen werden." +"Vorschaumodus:\n" +"Die geladene Datei enthält nur G-Code Befehle. Die Seite \"Vorbereiten\" " +"kann nicht aufgerufen werden." msgid "You can keep the modified presets to the new project or discard them" msgstr "" -"Sie können die geänderten Voreinstellungen in das neue Projekt übernehmen " -"oder sie verwerfen" +"Sie können die geänderten Profile in das neue Projekt übernehmen oder sie " +"verwerfen" msgid "Creating a new project" msgstr "Neues Projekt erstellen" @@ -4421,13 +4422,13 @@ msgid "Project downloaded %d%%" msgstr "Projekt heruntergeladen %d%%" msgid "The selected file" -msgstr "Die gewählte Datei" +msgstr "Die ausgewählte Datei" msgid "does not contain valid gcode." -msgstr "enthält keinen gültigen G-Code." +msgstr "Enthält keinen gültigen G-Code." msgid "Error occurs while loading G-code file" -msgstr "Beim Laden einer G-Code-Datei tritt ein Fehler auf" +msgstr "Beim Laden der G-Code-Datei ist ein Fehler aufgetreten." msgid "Drop project file" msgstr "Projektdatei ablegen" @@ -4445,10 +4446,10 @@ msgid "Only one G-code file can be opened at the same time." msgstr "Es kann immer nur eine G-Code-Datei gleichzeitig geöffnet werden." msgid "G-code loading" -msgstr "G-Code ladend" +msgstr "G-Code wird geladen" msgid "G-code files can not be loaded with models together!" -msgstr "G-Code-Dateien können nicht mit Modellen zusammen geladen werden!" +msgstr "G-Code-Dateien und Modelle können nicht zusammen geladen werden!" msgid "Can not add models when in preview mode!" msgstr "Modelle können im Vorschaumodus nicht hinzugefügt werden" @@ -4461,8 +4462,8 @@ msgstr "Alle Objekte werden entfernt, fortfahren?" msgid "The current project has unsaved changes, save it before continue?" msgstr "" -"Das aktuelle Projekt hat ungespeicherte Änderungen, speichern Sie es, bevor " -"Sie fortfahren?" +"Das aktuelle Projekt enthält nicht gespeicherte Änderungen. Möchten Sie " +"speichern, bevor Sie fortfahren?" msgid "Remember my choice." msgstr "" @@ -4484,8 +4485,8 @@ msgid "" "The file %s has been sent to the printer's storage space and can be viewed " "on the printer." msgstr "" -"Die Datei %s wurde an den Speicherplatz des Druckers gesendet und kann auf " -"dem Drucker angezeigt werden." +"Die Datei %s wurde an den Speicher des Druckers gesendet und kann auf dem " +"Drucker angezeigt werden." msgid "" "Print By Object: \n" @@ -4503,7 +4504,7 @@ msgstr "Zum Drucker senden" msgid "Custom supports and color painting were removed before repairing." msgstr "" -"Benutzerdefinierte Supports und Farbanstriche wurden vor der Instandsetzung " +"Benutzerdefinierte Stützstrukturen und Farbgebungen wurden vor der Reparatur " "entfernt." msgid "Invalid number" @@ -4568,11 +4569,10 @@ msgstr "Sprachauswahl" msgid "Switching application language while some presets are modified." msgstr "" -"Umschalten der Anwendungssprache, während einige Voreinstellungen geändert " -"werden." +"Umschalten der Anwendungssprache, während einige Profile geändert werden." msgid "Changing application language" -msgstr "Wechsel der Sprache der Anwendung" +msgstr "Anwendungssprache ändern" msgid "Changing the region will log out your account.\n" msgstr "Wenn Sie die Region ändern, werden Sie von Ihrem Konto abgemeldet.\n" @@ -4584,7 +4584,7 @@ msgid "Second" msgstr "Sekunde" msgid "Browse" -msgstr "Durchstöbern" +msgstr "Suchen" msgid "Choose Download Directory" msgstr "Download-Verzeichnis wählen" @@ -4614,7 +4614,7 @@ msgid "Metric" msgstr "Metrisch" msgid "Imperial" -msgstr "Impirisch" +msgstr "Imperial" msgid "Units" msgstr "Einheiten" @@ -4639,9 +4639,7 @@ msgid "Presets" msgstr "" msgid "Auto sync user presets(Printer/Filament/Process)" -msgstr "" -"Benutzervoreinstellungen automatisch synchronisieren (Drucker/Filament/" -"Prozess)" +msgstr "Benutzerprofile automatisch synchronisieren (Drucker/Filament/Prozess)" msgid "User Sync" msgstr "Benutzer-Synchronisation" @@ -4659,7 +4657,7 @@ msgid "Associate files to BambuStudio" msgstr "Dateien mit BambuStudio verknüpfen" msgid "Associate .3mf files to BambuStudio" -msgstr "Zuordnen von .3mf-Dateien zu BambuStudio" +msgstr ".3mf-Dateien mit Bambu Studio verknüpfen" msgid "If enabled, sets BambuStudio as default application to open .3mf files" msgstr "" @@ -4667,7 +4665,7 @@ msgstr "" "Dateien festgelegt" msgid "Associate .stl files to BambuStudio" -msgstr "Verknüpfung von .stl-Dateien mit BambuStudio" +msgstr ".stl-Dateien mit BambuStudio verknüpfen" msgid "If enabled, sets BambuStudio as default application to open .stl files" msgstr "" @@ -4675,7 +4673,7 @@ msgstr "" "Dateien festgelegt" msgid "Associate .step/.stp files to BambuStudio" -msgstr "Verknüpfen Sie .step/.stp-Dateien mit BambuStudio" +msgstr ".step/.stp-Dateien mit BambuStudio verknüpfen" msgid "If enabled, sets BambuStudio as default application to open .step files" msgstr "" @@ -4732,19 +4730,19 @@ msgid "User sync" msgstr "Benutzer-Synchronisation" msgid "Preset sync" -msgstr "Voreinstellungs Synchronisation" +msgstr "Profil Synchronisation" msgid "Preferences sync" -msgstr "Präferenzen Synchronisation" +msgstr "Synchronisierung der Einstellungen" msgid "View control settings" -msgstr "Ansicht der Steuerungseinstellungen" +msgstr "Ansicht-Steuerungseinstellungen" msgid "Rotate of view" msgstr "Drehen der Ansicht" msgid "Move of view" -msgstr "Verschiebung der Ansicht" +msgstr "Pan-Ansicht" msgid "Zoom of view" msgstr "Zoom der Ansicht" @@ -4753,19 +4751,19 @@ msgid "Other" msgstr "Sonstige" msgid "Mouse wheel reverses when zooming" -msgstr "Mausrad kehrt beim Zoomen um" +msgstr "Scrollrichtung beim Zoomen umkehren" msgid "Develop mode" -msgstr "Entwicklungsmodus" +msgstr "Entwicklermodus" msgid "Dump video" -msgstr "Video abladen" +msgstr "Video löschen" msgid "Log Level" msgstr "Protokollstufe" msgid "fatal" -msgstr "verhängnisvoll" +msgstr "fatal" msgid "error" msgstr "Fehler" @@ -4798,7 +4796,7 @@ msgid "Product host" msgstr "Produkt Moderator" msgid "debug save button" -msgstr "Speicher Taste Debuggen" +msgstr "Debug Speicher-Taste" msgid "save debug settings" msgstr "Debug-Einstellungen speichern" @@ -4807,34 +4805,34 @@ msgid "DEBUG settings have saved successfully!" msgstr "DEBUG-Einstellungen wurden erfolgreich gespeichert!" msgid "Switch cloud environment, Please login again!" -msgstr "Cloud-Umgebung umgestellt; bitte erneut anmelden!" +msgstr "Cloud-Umgebung gewechselt; Bitte erneut anmelden!" msgid "System presets" msgstr "Systemvoreinstellungen" msgid "User presets" -msgstr "Benutzerdefinierte Voreinstellungen" +msgstr "Benutzerdefinierte Profile" msgid "Incompatible presets" -msgstr "Inkompatible Voreinstellungen" +msgstr "Inkompatible Profile" msgid "AMS filaments" msgstr "AMS Filament" msgid "Click to pick filament color" -msgstr "Klicken, um die Farbe des Filaments auszuwählen" +msgstr "Klicken Sie hier, um die Filamentfarbe auszuwählen" msgid "Please choose the filament colour" msgstr "" msgid "Add/Remove presets" -msgstr "Voreinstellungen hinzufügen/entfernen" +msgstr "Profil hinzufügen/entfernen" msgid "Edit preset" -msgstr "Voreinstellung bearbeiten" +msgstr "Profil bearbeiten" msgid "Project-inside presets" -msgstr "Projektinterne Voreinstellungen" +msgstr "Projektinternes Profil" msgid "Add/Remove filaments" msgstr "Filament hinzufügen/entfernen" @@ -4858,7 +4856,7 @@ msgid "Cool Plate" msgstr "kalte Druckplatte" msgid "Engineering Plate" -msgstr "technische Druckplatte" +msgstr "Technische Druckplatte" msgid "High Temp Plate" msgstr "Hochtemperaturdruckplatte" @@ -4883,7 +4881,7 @@ msgstr "" "Slicen Sie alle Druckplatten, um Zeit- und Filamentschätzungen zu erhalten" msgid "Packing project data into 3mf file" -msgstr "Packen der Projektdaten in eine 3mf-Datei" +msgstr "Verpacken der Projektdaten in eine 3mf-Datei" msgid "Uploading 3mf" msgstr "Hochladen der 3mf" @@ -4902,10 +4900,10 @@ msgid "Publish was cancelled" msgstr "Veröffentlichung wurde abgebrochen" msgid "Slicing Plate 1" -msgstr "Slicen von Bauplatte 1" +msgstr "Slicen der Druckplatte 1" msgid "Packing data to 3mf" -msgstr "Daten in 3mf packen" +msgstr "Daten in 3mf verpacken" msgid "Jump to webpage" msgstr "Zu einer Website springen" @@ -4915,43 +4913,41 @@ msgid "Save %s as" msgstr "%s speichern als" msgid "User Preset" -msgstr "Benutzer-Voreinstellung" +msgstr "Benutzer-Profil" msgid "Project Inside Preset" -msgstr "Projektbasierte Voreinstellung" +msgstr "Projektbasiertes Profil" msgid "Name is invalid;" -msgstr "Der Name ist ungültig;" +msgstr "Name ist ungültig;" msgid "illegal characters:" -msgstr "unzulässige Zeichen:" +msgstr "Unzulässige Zeichen:" msgid "illegal suffix:" msgstr "unzulässiger Zusatz:" msgid "Name is unavailable." -msgstr "Der Name ist nicht verfügbar." +msgstr "Name ist nicht verfügbar." msgid "Overwrite a system profile is not allowed" msgstr "Überschreiben eines Systemprofils ist nicht erlaubt" #, boost-format msgid "Preset \"%1%\" already exists." -msgstr "Voreinstellung \"%1%\" existiert bereits." +msgstr "Profil \"%1%\" existiert bereits." #, boost-format msgid "Preset \"%1%\" already exists and is incompatible with current printer." msgstr "" -"Die Voreinstellung \"%1%\" existiert bereits und ist mit dem aktuellen " -"Drucker nicht kompatibel." +"Profil \"%1%\" existiert bereits und ist mit dem aktuellen Drucker nicht " +"kompatibel." msgid "Please note that saving action will replace this preset" -msgstr "" -"Bitte beachten Sie, dass das Speichern der Aktion diese Voreinstellung " -"ersetzt" +msgstr "Bitte beachten Sie, dass das Speichern dieses Profil überschreibt." msgid "The name is not allowed to be empty." -msgstr "Der Name darf nicht leer sein." +msgstr "Das Namensfeld darf nicht leer sein." msgid "The name is not allowed to start with space character." msgstr "Der Name darf nicht mit einem Leerzeichen beginnen." @@ -4960,11 +4956,10 @@ msgid "The name is not allowed to end with space character." msgstr "Der Name darf nicht mit einem Leerzeichen enden." msgid "The name cannot be the same as a preset alias name." -msgstr "" -"Der Name kann nicht mit einem Voreinstellungs-Aliasnamen identisch sein." +msgstr "Der Name kann nicht mit einem Profil-Aliasnamen identisch sein." msgid "Save preset" -msgstr "Sichern der Voreinstellung" +msgstr "Profil speichern" msgctxt "PresetName" msgid "Copy" @@ -4972,13 +4967,12 @@ msgstr "Kopieren" #, boost-format msgid "Printer \"%1%\" is selected with preset \"%2%\"" -msgstr "Drucker \"%1%\" ist mit Voreinstellung \"%2%\" ausgewählt" +msgstr "Drucker \"%1%\" ist mit Profil \"%2%\" ausgewählt" #, boost-format msgid "Please choose an action with \"%1%\" preset after saving." msgstr "" -"Bitte wählen Sie nach dem Speichern eine Aktion mit der Voreinstellung \"%1%" -"\"." +"Bitte wählen Sie nach dem Speichern eine Aktion mit dem Profil \"%1%\"." #, boost-format msgid "For \"%1%\", change \"%2%\" to \"%3%\" " @@ -4986,7 +4980,7 @@ msgstr "Für \"%1%\", ändern Sie \"%2%\" in \"%3%\" " #, boost-format msgid "For \"%1%\", add \"%2%\" as a new preset" -msgstr "Für \"%1%\", fügen Sie \"%2%\" als neue Voreinstellung hinzu" +msgstr "Für \"%1%\", fügen Sie \"%2%\" als neues Profil hinzu" #, boost-format msgid "Simply switch to \"%1%\"" @@ -5023,13 +5017,13 @@ msgid "Busy" msgstr "Beschäftigt" msgid "Bambu Cool Plate" -msgstr "Bambu kalte Druckplatte" +msgstr "Bambu Kalte-Druckplatte" msgid "Bamabu Engineering Plate" -msgstr "Bambu technische Druckplatte" +msgstr "Bambu Technische-Druckplatte" msgid "Bamabu High Temperature Plate" -msgstr "Bambu Hochtemperaturdruckplatte" +msgstr "Bambu Hochtemperatur-Druckplatte" msgid "Send print job to" msgstr "Druckauftrag senden an" @@ -5041,13 +5035,13 @@ msgid "Bed Leveling" msgstr "Druckbettnivellierung" msgid "Flow Calibration" -msgstr "Durchfluss-Kalibrierung" +msgstr "Flusskalibrierung" msgid "send completed" -msgstr "senden abgeschlossen" +msgstr "Senden abgeschlossen" msgid "No login account, only printers in LAN mode are displayed" -msgstr "Kein Anmeldekonto, nur Drucker im LAN-Modus werden angezeigt" +msgstr "Kein Login-Konto, nur Drucker im LAN-Modus werden angezeigt" msgid "Connecting to server" msgstr "Verbindung zum Server wird hergestellt" @@ -5066,7 +5060,7 @@ msgstr "" msgid "" "The printer is executing instructions. Please restart printing after it ends" msgstr "" -"Der Drucker führt gerade Anweisungen aus. Bitte starten Sie den Druckvorgang " +"Der Drucker führt gerade Befehle aus. Bitte starten Sie den Druckvorgang " "nach deren Beendigung erneut" msgid "The printer is busy on other print job" @@ -5077,23 +5071,22 @@ msgid "" "Filament %s exceeds the number of AMS slots. Please update the printer " "firmware to support AMS slot assignment." msgstr "" -"Filament %s überschreitet die Anzahl der AMS-Steckplätze. Bitte " -"aktualisieren Sie die Druckerfirmware, um die AMS-Steckplatzzuweisung zu " -"unterstützen." +"Filament %s überschreitet die Anzahl der AMS-Slots. Bitte aktualisieren Sie " +"die Druckerfirmware, um die AMS-Slots-Zuordnung zu unterstützen." msgid "" "Filament exceeds the number of AMS slots. Please update the printer firmware " "to support AMS slot assignment." msgstr "" -"Filament überschreitet die Anzahl der AMS-Steckplätze. Bitte aktualisieren " -"Sie die Druckerfirmware, um die AMS-Steckplatzzuweisung zu unterstützen." +"Filament überschreitet die Anzahl der AMS-Slots. Bitte aktualisieren Sie die " +"Druckerfirmware, um die AMS-Slots-Zuordnung zu unterstützen." msgid "" "Filaments to AMS slots mappings have been established. You can click a " "filament above to change its mapping AMS slot" msgstr "" -"Die Zuordnung von Filament zu AMS-Slots wurde eingerichtet. Sie können oben " -"auf ein Filament klicken, um dessen Zuordnung zum AMS-Steckplatz zu ändern" +"Die Zuordnung von Filamenten zu AMS-Slots wurde eingerichtet. Sie können " +"oben auf ein Filament klicken, um dessen Zuordnung zu ändern" msgid "" "Please click each filament above to specify its mapping AMS slot before " @@ -5107,16 +5100,16 @@ msgid "" "Filament %s does not match the filament in AMS slot %s. Please update the " "printer firmware to support AMS slot assignment." msgstr "" -"Filament %s stimmt nicht mit dem Filament in AMS-Steckplatz %s überein. " -"Bitte aktualisieren Sie die Druckerfirmware, um die AMS-Steckplatzzuweisung " -"zu unterstützen." +"Filament %s stimmt nicht mit dem Filament in AMS-Slot %s überein. Bitte " +"aktualisieren Sie die Druckerfirmware, um die AMS-Slot-Zuordnung zu " +"unterstützen." msgid "" "Filament does not match the filament in AMS slot. Please update the printer " "firmware to support AMS slot assignment." msgstr "" -"Filament stimmt nicht mit dem Filament in AMS-Steckplatz überein. Bitte " -"aktualisieren Sie die Druckerfirmware, um die AMS-Steckplatzzuweisung zu " +"Filament stimmt nicht mit dem Filament in AMS-Slot überein. Bitte " +"aktualisieren Sie die Druckerfirmware, um die AMS-Slot-Zuordnung zu " "unterstützen." msgid "" @@ -5127,7 +5120,7 @@ msgstr "" "=> AMS-Slot." msgid "An SD card needs to be inserted before printing." -msgstr "Vor dem Drucken muss eine microSD-Karte eingelegt werden." +msgstr "Vor dem Drucken muss eine MicroSD-Karte eingelegt werden." msgid "An SD card needs to be inserted to record timelapse." msgstr "" @@ -5164,7 +5157,7 @@ msgid "" msgstr "" "Der zur Erzeugung des G-Codes verwendete Druckertyp ist nicht derselbe wie " "der aktuell ausgewählte physische Drucker. Es wird empfohlen, nach der " -"Auswahl des richtigen Druckertyps erneut zu Slicen." +"Auswahl des richtigen Druckertyps erneut zu slicen." #, c-format, boost-format msgid "%s is not supported by AMS." @@ -5176,8 +5169,8 @@ msgid "" "start printing." msgstr "" "Es gibt einige unbekannte Filamente in den AMS-Zuordnungen. Bitte prüfen " -"Sie, ob es sich um die erforderlichen Filamente handelt. Wenn sie in Ordnung " -"sind, klicken Sie auf \"Bestätigen\", um den Druck zu starten." +"Sie, ob es sich um die erforderlichen Filamente handelt. Wenn diese in " +"Ordnung sind, klicken Sie auf \"Bestätigen\", um den Druck zu starten." msgid "Preparing print job" msgstr "Druckauftrag vorbereiten" @@ -5190,7 +5183,7 @@ msgstr "An MicroSD-Karte des Druckers senden" msgid "Cannot send the print task when the upgrade is in progress" msgstr "" -"Die Druckaufgabe kann nicht gesendet werden, während das Upgrade ausgeführt " +"Der Druckauftrag kann nicht gesendet werden, während ein Update ausgeführt " "wird" msgid "An SD card needs to be inserted before send to printer SD card." @@ -5233,34 +5226,34 @@ msgstr "Abmeldung fehlgeschlagen." #. TRN "Save current Settings" #, c-format, boost-format msgid "Save current %s" -msgstr "Speichere aktuelle %s" +msgstr "Aktuelles %s speichern" msgid "Delete this preset" -msgstr "Lösche diese Voreinstellung" +msgstr "Dieses Profil löschen" msgid "Search in preset" -msgstr "In Voreinstellungen suchen" +msgstr "In Profilen suchen" msgid "Click to reset all settings to the last saved preset." msgstr "" -"Klicken Sie auf , um alle Einstellungen auf die zuletzt gespeicherte " -"Voreinstellung zurückzusetzen." +"Klicken Sie hier, um alle Einstellungen auf die zuletzt gespeicherten " +"Parameter zurückzusetzen." msgid "" "Prime tower is required for smooth timeplase. There may be flaws on the " "model without prime tower. Are you sure you want to disable prime tower?" msgstr "" -"Ein Prime-Tower ist für den gewählten Zeitraffer-Modus erforderlich. Ohne " -"Prime-Tower kann es zu Fehlern am Modell kommen. Sind Sie sicher, dass Sie " -"den Prime-Turm deaktivieren möchten?" +"Ein Reinigungsturm ist für den gewählten Zeitraffer-Modus erforderlich. Ohne " +"Reinigungsturm kann es zu Fehlern am Modell kommen. Sind Sie sicher, dass " +"Sie den Reinigungsturm deaktivieren möchten?" msgid "" "Prime tower is required for smooth timelapse. There may be flaws on the " "model without prime tower. Do you want to enable prime tower?" msgstr "" -"Für den gewählten Zeitraffermodus ist ein Prime-Tower erforderlich. Ohne " -"Prime-Tower kann es zu Fehlern am Modell kommen. Möchten Sie den Prime-Tower " -"aktivieren?" +"Für den gewählten Zeitraffermodus ist ein Reinigungsturm erforderlich. Ohne " +"Reinigungsturm kann es zu Fehlern am Modell kommen. Möchten Sie den " +"Reinigungsturm aktivieren?" msgid "" "We have added an experimental style \"Tree Slim\" that features smaller " @@ -5268,8 +5261,9 @@ msgid "" "We recommend using it with: 0 interface layers, 0 top distance, 2 walls." msgstr "" "Wir haben einen experimentellen Stil \"Baum schmal\" hinzugefügt, der ein " -"geringeres Supportvolumen, aber eine geringere Stärke aufweist.\n" -"Wir empfehlen, ihn zu verwenden mit: 0 Oberflächenschichten, 0 oberer " +"geringeres Stützvolumen benötigt, aber dafür eine geringere Stärke " +"aufweist.\n" +"Wir empfehlen folgende Einstellungen: 0 Oberflächenschichten, 0 oberer " "Abstand, 2 Wände." msgid "" @@ -5278,17 +5272,18 @@ msgid "" "No - Do not change these settings for me" msgstr "" "Diese Einstellungen automatisch ändern?\n" -"Ja - Diese Einstellungen werden automatisch geändert.\n" -"Nein - Ändern Sie diese Einstellungen nicht für mich." +"Ja - Diese Einstellungen automatisch ändern.\n" +"Nein - Diese Einstellungen für mich nicht ändern." msgid "" "For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommend the following " "settings: at least 2 interface layers, at least 0.1mm top z distance or " "using support materials on interface." msgstr "" -"Für die Stile \"Baum stark\" und \"Baum hybrid\" empfehlen wir die folgenden " -"Einstellungen: mindestens 2 Interface-Schichten, mindestens 0,1 mm oberer z-" -"Abstand oder die Verwendung von Supportmaterialien auf dem Interface." +"Für die Stile \"Baumstützen Stark\" und \"Baumstützen Hybrid\" empfehlen wir " +"die folgenden Einstellungen: Mindestens 2 Schnittstellschichten, mindestens " +"0,1 mm oberer Z-Abstand oder die Verwendung von Stützmaterialien bei der " +"Schnittstelle." msgid "" "When using support material for the support interface, We recommend the " @@ -5304,15 +5299,15 @@ msgid "" "\"->\"Timelapse Wipe Tower\"." msgstr "" "Wenn Sie einen Zeitraffer ohne Werkzeugkopf aufnehmen, wird empfohlen, einen " -"\"Timelapse Wipe Tower\" (Zeitraffer-Wischturm) hinzuzufügen, indem Sie mit " -"der rechten Maustaste auf die leere Position der Bauplatte klicken und " -"\"Primitiv hinzufügen\"->\"Timelapse Wipe Tower\" wählen." +"\"Timelapse Wischturm\" hinzuzufügen, indem Sie mit der rechten Maustaste " +"auf die leere Position der Bauplatte klicken und \"Primitiv hinzufügen\"->" +"\"Timelapse Wischturm\" wählen." msgid "Line width" msgstr "Breite der Linie" msgid "Seam" -msgstr "Nahtstelle" +msgstr "Naht" msgid "Precision" msgstr "Präzision" @@ -5341,9 +5336,9 @@ msgid "" "the overhang degree range and wall speed is used" msgstr "" "Dies ist die Geschwindigkeit für verschiedene Überhangsgrade. Überhangsgrade " -"werden als Prozentsatz der Linienbreite ausgedrückt. Geschwindigkeit 0 " -"bedeutet keine Verlangsamung für den Überhanggradbereich und es wird die " -"Wandgeschwindigkeit verwendet" +"werden als Prozentsatz der Linienbreite ausgedrückt. Eine Geschwindigkeit " +"von 0 bedeutet keine Verlangsamung für den Überhangsbereich und es wird die " +"Wandgeschwindigkeit verwendet." msgid "Travel speed" msgstr "Fahrgeschwindigkeit" @@ -5352,13 +5347,13 @@ msgid "Acceleration" msgstr "Beschleunigung" msgid "Raft" -msgstr "Raft" +msgstr "Floß" msgid "Support filament" -msgstr "Supportfilament" +msgstr "Filament für Stützen" msgid "Prime tower" -msgstr "Prime-Turm" +msgstr "Reinigungsturm" msgid "Special mode" msgstr "Spezialmodus" @@ -5394,21 +5389,21 @@ msgid "Reserved keywords found" msgstr "Reservierte Schlüsselwörter gefunden" msgid "Setting Overrides" -msgstr "überschreiben der Einstellungen" +msgstr "Überschreibungen der Einstellungen" msgid "Retraction" -msgstr "Einzug" +msgstr "Rückzug" msgid "Basic information" msgstr "Grundlegende Informationen" msgid "Recommended nozzle temperature" -msgstr "Empfohlene Druckdüsentemperatur" +msgstr "Empfohlene Düsentemperatur" msgid "Recommended nozzle temperature range of this filament. 0 means no set" msgstr "" -"Empfohlener Druckdüsentemperaturbereich für dieses Filament. 0 bedeutet " -"keine Einstellung" +"Empfohlener Düsentemperaturbereich für dieses Filament. 0 bedeutet nicht " +"gesetzt" msgid "Recommended temperature range" msgstr "Empfohlener Temperaturbereich" @@ -5417,10 +5412,10 @@ msgid "Print temperature" msgstr "Drucktemperatur" msgid "Nozzle" -msgstr "Druckdüse" +msgstr "Düse" msgid "Nozzle temperature when printing" -msgstr "Druckdüsentemperatur beim Drucken" +msgstr "Düsentemperatur beim Drucken" msgid "Cool plate" msgstr "kalte Druckplatte" @@ -5429,28 +5424,28 @@ msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " "does not support to print on the Cool Plate" msgstr "" -"Dies ist die Betttemperatur, wenn die cool plate installiert ist. Ein Wert " -"von 0 bedeutet, dass das Filament das Drucken auf der cool plate nicht " +"Dies ist die Betttemperatur, wenn die kalte Druckplatte installiert ist. Ein " +"Wert von 0 bedeutet, dass das Filament auf der kalten Druckplatte nicht " "unterstützt." msgid "Engineering plate" -msgstr "technische Druckplatte" +msgstr "Technische Druckplatte" msgid "" "Bed temperature when engineering plate is installed. Value 0 means the " "filament does not support to print on the Engineering Plate" msgstr "" "Dies ist die Betttemperatur, wenn die technische Druckplatte installiert " -"wird. Ein Wert von 0 bedeutet, dass das Filament das Drucken auf der " -"technischen Druckplatte nicht unterstützt." +"wird. Ein Wert von 0 bedeutet, dass das Filament auf der technischen " +"Druckplatte nicht unterstützt wird." msgid "" "Bed temperature when high temperature plate is installed. Value 0 means the " "filament does not support to print on the High Temp Plate" msgstr "" -"Dies ist die Betttemperatur, wenn die Hochtemperaturdruckplatte installiert " -"ist. Ein Wert von 0 bedeutet, dass das Filament das Drucken auf der " -"Hochtemperaturdruckplatte nicht unterstützt." +"Dies ist die Betttemperatur, wenn die Hochtemperatur-Druckplatte installiert " +"ist. Ein Wert von 0 bedeutet, dass das Filament auf der Hochtemperatur-" +"Druckplatte nicht unterstützt wird." msgid "" "Bed temperature when Textured PEI Plate is installed. Value 0 means the " @@ -5469,10 +5464,10 @@ msgid "Cooling for specific layer" msgstr "Kühlung für eine bestimmte Schicht" msgid "Part cooling fan" -msgstr "Teilelüfter" +msgstr "Bauteillüfter" msgid "Min fan speed threshold" -msgstr "Schwelle für minimale Lüftergeschwindigkeit" +msgstr "Minimale Lüftergeschwindigkeit" msgid "" "Part cooling fan speed will start to run at min speed when the estimated " @@ -5480,11 +5475,11 @@ msgid "" "shorter than threshold, fan speed is interpolated between the minimum and " "maximum fan speed according to layer printing time" msgstr "" -"Die Gebläsedrehzahl der Teilekühlung beginnt mit der Mindestdrehzahl zu " -"laufen, wenn die geschätzte Schichtzeit nicht länger als die eingestellte " -"Schichtzeit ist. Wenn die Schichtzeit kürzer als der Schwellenwert ist, wird " -"die Lüftergeschwindigkeit zwischen der minimalen und maximalen " -"Lüftergeschwindigkeit entsprechend der Schichtdruckzeit interpoliert" +"Der Bauteillüfter beginnt mit der Mindestdrehzahl zu laufen, wenn die " +"geschätzte Schichtzeit nicht länger als der dafür eingestellte Wert ist. " +"Wenn die Schichtzeit kürzer als der eingestellte Wert ist, wird die " +"Lüftergeschwindigkeit zwischen der minimalen und maximalen Geschwindigkeit " +"entsprechend der Schichtzeit interpoliert." msgid "Max fan speed threshold" msgstr "Schwellenwert für die maximale Lüftergeschwindigkeit" @@ -5493,8 +5488,8 @@ msgid "" "Part cooling fan speed will be max when the estimated layer time is shorter " "than the setting value" msgstr "" -"Die Lüfterdrehzahl ist maximal, wenn die geschätzte Schichtzeit kürzer ist " -"als der Einstellwert" +"Der Bauteillüfter wird auf maximaler Drehzahl laufen, wenn die geschätzte " +"Schichtzeit kürzer ist als der eingestellte Wert." msgid "Auxiliary part cooling fan" msgstr "Hilfslüfter" @@ -5518,7 +5513,7 @@ msgid "Machine gcode" msgstr "Maschinen G-Code" msgid "Machine start G-code" -msgstr "Maschinenstart G-Code" +msgstr "Maschinen Start G-Code" msgid "Machine end G-code" msgstr "Maschine Ende G-Code" @@ -5533,7 +5528,7 @@ msgid "Change filament G-code" msgstr "Filamentwechsel G-Code" msgid "Pause G-code" -msgstr "Pausen G-Code" +msgstr "G-Code pausieren" msgid "Template Custom G-code" msgstr "Vorlage Benutzerdefinierter G-Code" @@ -5564,39 +5559,39 @@ msgstr "Losgelöst" msgid "Following preset will be deleted too." msgid_plural "Following presets will be deleted too." -msgstr[0] "Die folgende Voreinstellung wird ebenfalls gelöscht." -msgstr[1] "Die folgende Voreinstellungen werden ebenfalls gelöscht." +msgstr[0] "Das folgende Profil wird ebenfalls gelöscht." +msgstr[1] "Die folgenden Profile werden ebenfalls gelöscht." #, boost-format msgid "Are you sure to %1% the selected preset?" -msgstr "Sind sie sicher, dass sie die ausgewählte Voreinstellung %1%en wollen?" +msgstr "Sind sie sicher, dass sie das ausgewählte Profil %1% wollen?" #. TRN Remove/Delete #, boost-format msgid "%1% Preset" -msgstr "%1% Voreinstellung" +msgstr "%1% Profil" msgid "All" msgstr "Alle" msgid "Set" -msgstr "Setzen" +msgstr "Festlegen" msgid "Click to reset current value and attach to the global value." msgstr "" -"Klicken Sie, um den aktuellen Wert zurückzusetzen und auf den globalen Wert " -"zurückzusetzen." +"Klicken Sie hier, um den aktuellen Wert zurückzusetzen und ihn dem globalen " +"Wert zuzuordnen." msgid "Click to drop current modify and reset to saved value." msgstr "" -"Klicken Sie, um die aktuelle Änderung zu verwerfen und auf den gespeicherten " -"Wert zurückzusetzen." +"Klicken Sie hier, um die aktuellen Änderungen zu verwerfen und auf den " +"gespeicherten Wert zurückzusetzen." msgid "Process Settings" msgstr "Prozesseinstellungen" msgid "Undef" -msgstr "Undef" +msgstr "Undefiniert" msgid "Unsaved Changes" msgstr "Nicht gespeicherte Änderungen" @@ -5614,7 +5609,7 @@ msgid "Transfer" msgstr "Übertragen" msgid "Don't save" -msgstr "Nicht sichern" +msgstr "Nicht speichern" msgid "Discard" msgstr "Verwerfen" @@ -5637,15 +5632,14 @@ msgstr "Behalten Sie die ausgewählten Optionen bei." msgid "Transfer the selected options to the newly selected preset." msgstr "" -"Übertragen Sie die ausgewählten Optionen auf die neu ausgewählte " -"Voreinstellung." +"Übertragen Sie die ausgewählten Optionen auf das neu ausgewählte Profil." #, boost-format msgid "" "Save the selected options to preset \n" "\"%1%\"." msgstr "" -"Speichern der ausgewählten Optionen in der Voreinstellung \n" +"Speichern der ausgewählten Optionen in dem Profil\n" "\"%1%\"." #, boost-format @@ -5653,30 +5647,28 @@ msgid "" "Transfer the selected options to the newly selected preset \n" "\"%1%\"." msgstr "" -"Übertragen Sie die ausgewählten Optionen auf die neu ausgewählte " -"Voreinstellung \n" +"Übertragen Sie die ausgewählten Optionen auf das neu ausgewählte Profil \n" "\"%1%\"." #, boost-format msgid "Preset \"%1%\" contains the following unsaved changes:" -msgstr "" -"Die Voreinstellung \"%1%\" enthält die folgenden ungespeicherten Änderungen:" +msgstr "Profil \"%1%\" enthält die folgenden ungespeicherten Änderungen:" #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new printer profile and it " "contains the following unsaved changes:" msgstr "" -"Die Voreinstellung \"%1%\" ist nicht mit dem neuen Druckerprofil kompatibel " -"und enthält die folgenden nicht gespeicherten Änderungen:" +"Profil \"%1%\" ist nicht mit dem neuen Druckerprofil kompatibel und enthält " +"die folgenden nicht gespeicherten Änderungen:" #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new process profile and it " "contains the following unsaved changes:" msgstr "" -"Die Voreinstellung \"%1%\" ist nicht mit dem neuen Prozessprofil kompatibel " -"und enthält die folgenden nicht gespeicherten Änderungen:" +"Profil \"%1%\" ist nicht mit dem neuen Prozessprofil kompatibel und enthält " +"die folgenden nicht gespeicherten Änderungen:" #, boost-format msgid "" @@ -5684,18 +5676,18 @@ msgid "" "Would you like to keep these changed settings (new value) after switching " "preset?" msgstr "" -"Sie haben einige Einstellungen der Voreinstellung \"%1%\" geändert.\n" +"Sie haben einige Einstellungen des Profils \"%1%\" geändert.\n" "Möchten Sie diese geänderten Einstellungen (neuer Wert) nach einem Wechsel " -"der Voreinstellung beibehalten?" +"der Profile beibehalten?" msgid "" "You have changed some preset settings. \n" "Would you like to keep these changed settings (new value) after switching " "preset?" msgstr "" -"Sie haben einige voreingestellte Einstellungen geändert.\n" -"Möchten Sie diese geänderten Einstellungen (neuer Wert) nach dem Umschalten " -"der Voreinstellungen beibehalten?" +"Sie haben einige Profileinstellungen geändert.\n" +"Möchten Sie diese geänderten Einstellungen (neuer Wert) nach einem Wechseln " +"der Profile beibehalten?" msgid "Extruders count" msgstr "Anzahl der Extruder" @@ -5710,7 +5702,7 @@ msgid "Select presets to compare" msgstr "" msgid "Show all presets (including incompatible)" -msgstr "Alle Voreinstellungen anzeigen (auch inkompatible)" +msgstr "Alle Profile anzeigen (auch inkompatible)" msgid "Add File" msgstr "Datei hinzufügen" @@ -5774,14 +5766,16 @@ msgid "" msgstr "" "Das Konfigurationspaket ist mit der aktuellen Anwendung nicht kompatibel.\n" "%s wird das Konfigurationspaket aktualisieren, andernfalls wird es nicht " -"starten können" +"starten" #, c-format, boost-format msgid "Exit %s" -msgstr "%s beenden" +msgstr "%s verlassen" msgid "the Configuration package is incompatible with current APP." -msgstr "das Konfigurationspaket ist mit der aktuellen APP nicht kompatibel." +msgstr "" +"Das Konfigurationspaket ist mit der aktuellen Version von Bambu Studio nicht " +"kompatibel." msgid "Configuration updates" msgstr "Konfigurationsupdates" @@ -5796,27 +5790,27 @@ msgid "Auto-Calc" msgstr "Automatisch berechnen" msgid "Flushing volumes for filament change" -msgstr "Säuberungsvolumen für Filamentwechsel" +msgstr "Reinigungsvolumen für Filamentwechsel" msgid "Multiplier" msgstr "Multiplikator " msgid "Flushing volume (mm³) for each filament pair." -msgstr "Säuberungvolumen (mm³) für jedes Filamentpaar." +msgstr "Reinigungsvolumen (mm³) für jedes Filamentpaar." #, c-format, boost-format msgid "Suggestion: Flushing Volume in range [%d, %d]" -msgstr "Anregung: Spülvolumen im Bereich [%d, %d]" +msgstr "Anmerkung: Reinigungsvolumen im Bereich [%d, %d]" #, c-format, boost-format msgid "The multiplier should be in range [%.2f, %.2f]." msgstr "Der Multiplikator sollte im Bereich [%.2f, %.2f] liegen." msgid "unloaded" -msgstr "entladen wird" +msgstr "entladen" msgid "loaded" -msgstr "geladen wird" +msgstr "geladen" msgid "Filament #" msgstr "Filament #" @@ -5831,7 +5825,8 @@ msgid "Login" msgstr "Anmelden" msgid "The configuration package is changed in previous Config Guide" -msgstr "Das Konfigurationspaket wurde im vorherigen Config Guide geändert" +msgstr "" +"Das Konfigurationspaket wurde im vorherigen Konfigurationsleitfaden geändert" msgid "Configuration package changed" msgstr "Konfigurationspaket geändert" @@ -5846,16 +5841,16 @@ msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "" msgid "Ctrl+Shift+G" -msgstr "Strg+Umschalt+G" +msgstr "" msgid "Copy to clipboard" -msgstr "Zu Zwischenablage kopieren" +msgstr "In Zwischenablage kopieren" msgid "Paste from clipboard" msgstr "Aus Zwischenablage einfügen" msgid "Show/Hide 3Dconnexion devices settings dialog" -msgstr "Dialogfeld \"3Dconnexion-Geräteeinstellungen\" anzeigen/ausblenden" +msgstr "Dialogfeld für 3Dconnexion Geräteeinstellungen anzeigen/ausblenden" msgid "Show keyboard shortcuts list" msgstr "Liste der Tastaturkürzel anzeigen" @@ -5867,34 +5862,35 @@ msgid "Rotate View" msgstr "Drehen der Ansicht" msgid "Pan View" -msgstr "Verschiebung der Ansicht" +msgstr "Pan-Ansicht" msgid "Mouse wheel" msgstr "Mausrad" msgid "Zoom View" -msgstr "Zoom der Ansicht" +msgstr "Ansicht zoomen" msgid "Shift+A" -msgstr "Umschalt+A" +msgstr "" msgid "Shift+R" -msgstr "Umschalt+R" +msgstr "" msgid "" "Auto orientates selected objects or all objects.If there are selected " "objects, it just orientates the selected ones.Otherwise, it will orientates " "all objects in the current disk." msgstr "" -"Orientiert ausgewählte Objekte oder alle Objekte automatisch. Wenn es " -"ausgewählte Objekte gibt, werden nur die ausgewählten Objekte ausgerichtet. " -"Andernfalls werden alle Objekte auf der aktuellen Druckplatte ausgerichtet." +"Diese Funktion richtet ausgewählte Objekte oder alle Objekte automatisch " +"aus. Wenn es ausgewählte Objekte gibt, werden nur die ausgewählten Objekte " +"ausgerichtet. Andernfalls werden alle Objekte auf der aktuellen Druckplatte " +"ausgerichtet." msgid "Shift+Tab" -msgstr "Umschalt+Tab" +msgstr "" msgid "Collapse/Expand the sidebar" -msgstr "Seitenleiste zu-/ausklappen" +msgstr "Seitenleiste zu-/aufklappen" msgid "⌘+Any arrow" msgstr "⌘+beliebiger Pfeil" @@ -5903,7 +5899,7 @@ msgid "Movement in camera space" msgstr "Bewegung im Kameraraum" msgid "⌥+Left mouse button" -msgstr "Alt+Linke Maustaste" +msgstr "⌥+Linke Maustaste" msgid "Select a part" msgstr "Teil auswählen" @@ -5915,16 +5911,16 @@ msgid "Select multiple objects" msgstr "Mehrere Objekte auswählen" msgid "Ctrl+Any arrow" -msgstr "Strg+beliebiger Pfeil" +msgstr "Strg + beliebige Pfeiltaste" msgid "Alt+Left mouse button" -msgstr "Alt+Linke Maustaste" +msgstr "Alt + Linke Maustaste" msgid "Ctrl+Left mouse button" -msgstr "Strg+Linke Maustaste" +msgstr "Strg + Linke Maustaste" msgid "Shift+Left mouse button" -msgstr "Umschalt+linke Maustaste" +msgstr "Umschalttaste + Linke Maustaste" msgid "Select objects by rectangle" msgstr "Objekte per Rechteck auswählen" @@ -5954,7 +5950,7 @@ msgid "Move selection 10 mm in positive X direction" msgstr "Auswahl 10 mm in positiver X-Richtung verschieben" msgid "Shift+Any arrow" -msgstr "Umschalt+beliebiger Pfeil" +msgstr "Umschalttaste + beliebige Pfeiltaste" msgid "Movement step set to 1 mm" msgstr "Bewegungsschritt auf 1 mm eingestellt" @@ -5999,13 +5995,13 @@ msgid "Gizmo rotate" msgstr "Rotieren" msgid "Gizmo cut" -msgstr "Schneiden" +msgstr "Trennen" msgid "Gizmo Place face on bed" msgstr "Fläche auf Druckbett platzieren " msgid "Gizmo SLA support points" -msgstr "SLA Support Punkte" +msgstr "SLA Stützpunkte" msgid "Gizmo FDM paint-on seam" msgstr "FDM Naht aufmalen " @@ -6014,25 +6010,25 @@ msgid "Plater" msgstr "Druckplatte" msgid "Move: press to snap by 1mm" -msgstr "Verschieben: drücken, um um 1 mm zu verschieben" +msgstr "Verschieben: Drücken, um in 1 mm einzurasten" msgid "⌘+Mouse wheel" msgstr "⌘+Mausrad" msgid "Support/Color Painting: adjust pen radius" -msgstr "Support/Farbmalen: Stiftradius einstellen" +msgstr "Stützen/Farbmalen: Stiftradius einstellen" msgid "⌥+Mouse wheel" -msgstr "Alt+Mausrad" +msgstr "⌥+Mausrad" msgid "Support/Color Painting: adjust section position" -msgstr "Support/Farbmalerei: Position des Abschnitts anpassen" +msgstr "Stützen/Farbmalen: Position des Abschnitts anpassen" msgid "Ctrl+Mouse wheel" -msgstr "Strg+Mausrad" +msgstr "Strg + Mausrad" msgid "Alt+Mouse wheel" -msgstr "Alt+Mausrad" +msgstr "Alt + Mausrad" msgid "Gizmo" msgstr "Gizmo" @@ -6048,16 +6044,14 @@ msgstr "Platz" msgid "Select the object/part and press space to change the name" msgstr "" -"Wählen Sie das Objekt/Teil aus und drücken Sie die Leertaste, um den Namen " -"zu ändern" +"Wähle das Objekt/Teil aus und drücke die Leertaste, um den Namen zu ändern" msgid "Mouse click" msgstr "Mausklick" msgid "Select the object/part and mouse click to change the name" msgstr "" -"Wählen Sie das Objekt/Teil und klicken Sie mit der Maus, um den Namen zu " -"ändern" +"Wähle das Objekt/Teil aus und klicke mit der Maus, um den Namen zu ändern" msgid "Objects List" msgstr "Objektliste" @@ -6081,7 +6075,7 @@ msgid "Move slider 5x faster" msgstr "Schieberegler 5x schneller bewegen" msgid "Shift+Mouse wheel" -msgstr "Umschalt+Mausrad" +msgstr "Umschalttaste + Mausrad" msgid "Release Note" msgstr "Hinweis zur Veröffentlichung" @@ -6091,7 +6085,7 @@ msgid "version %s update information :" msgstr "Version %s Update-Informationen:" msgid "Network plug-in update" -msgstr "Aktualisierung des Netzwerk-Plug-ins" +msgstr "Aktualisierung des Netzwerk-Plugins" msgid "" "Click OK to update the Network plug-in when Bambu Studio launches next time." @@ -6102,7 +6096,7 @@ msgstr "" #, c-format, boost-format msgid "A new Network plug-in(%s) available, Do you want to install it?" msgstr "" -"Ein neues Netzwerk-Plug-in (%s) ist verfügbar. Möchten Sie es installieren?" +"Ein neues Netzwerk-Plugin (%s) ist verfügbar. Möchten Sie es installieren?" msgid "New version of Bambu Studio" msgstr "Neue Version von Bambu Studio" @@ -6127,7 +6121,7 @@ msgid "" "on your printer, please correct them." msgstr "" "Schritt 2: Wenn die IP und der Zugriffscode unten von den tatsächlichen " -"Werten Ihres Druckers abweichen, korrigieren Sie sie bitte." +"Werten Ihres Druckers abweichen, korrigieren Sie diese bitte." msgid "IP" msgstr "IP" @@ -6175,9 +6169,9 @@ msgid "" "Are you sure you want to update? This will take about 10 minutes. Do not " "turn off the power while the printer is updating." msgstr "" -"Bist du sicher, dass du ein Update durchführen möchtest? Dies dauert etwa 10 " -"Minuten. Schalten Sie das Gerät nicht aus, während der Drucker aktualisiert " -"wird." +"Sind Sie sicher, dass Sie die Aktualisierung jetzt durchführen möchten? " +"Dieser Vorgang dauert etwa 10 Minuten. Schalten Sie den Drucker nicht aus, " +"während er aktualisiert wird." msgid "" "An important update was detected and needs to be run before printing can " @@ -6195,9 +6189,9 @@ msgid "" "update next time starting the studio." msgstr "" "Die Firmware-Version ist nicht korrekt. Vor dem Drucken müssen Sie die " -"Firmware reparieren und aktualisieren. Möchten Sie jetzt aktualisieren? Sie " -"können das Update auch später auf dem Drucker oder beim nächsten Start von " -"Bambu Studio durchführen." +"Firmware reparieren und aktualisieren. Möchten Sie diese jetzt " +"aktualisieren? Sie können das Update auch später auf dem Drucker oder beim " +"nächsten Start von Bambu Studio durchführen." msgid "Extension Board" msgstr "Erweiterungsboard" @@ -6206,7 +6200,7 @@ msgid "Saving objects into the 3mf failed." msgstr "Das Speichern von Objekten in der 3mf ist fehlgeschlagen." msgid "Only Windows 10 is supported." -msgstr "Es wird nur Windows 10 unterstützt." +msgstr "Nur Windows 10 wird unterstützt." msgid "Failed to initialize the WinRT library." msgstr "Die WinRT-Bibliothek konnte nicht initialisiert werden." @@ -6215,7 +6209,7 @@ msgid "Exporting objects" msgstr "Objekte exportieren" msgid "Failed loading objects." -msgstr "Das Laden der Objekte ist fehlgeschlagen." +msgstr "Laden der Objekte fehlgeschlagen." msgid "Repairing object by Windows service" msgstr "Objekt durch Windows-Dienst reparieren" @@ -6273,13 +6267,14 @@ msgid "" "One object has empty initial layer and can't be printed. Please Cut the " "bottom or enable supports." msgstr "" -"Ein Objekt hat eine leere erste Ebene und kann nicht gedruckt werden. Bitte " -"schneiden Sie den Boden ab oder aktivieren Sie Supports." +"Ein Objekt hat eine leere erste Schicht und kann nicht gedruckt werden. " +"Bitte schneiden Sie den Boden ab oder aktivieren Sie die Stützstrukturen." #, boost-format msgid "Object can't be printed for empty layer between %1% and %2%." msgstr "" -"Objekt kann aufgrund leerer Ebene zwischen %1% und %2% nicht gedruckt werden." +"Objekt kann aufgrund leerer Schichten zwischen %1% und %2% nicht gedruckt " +"werden." #, boost-format msgid "Object: %1%" @@ -6294,7 +6289,7 @@ msgstr "" msgid "No object can be printed. Maybe too small" msgstr "" -"Es kann kein Objekt gedruckt werden. Vielleicht sind die Objekte zu klein" +"Es kann kein Objekt gedruckt werden. Vielleicht sind die Objekte zu klein." msgid "" "Failed to generate gcode for invalid custom G-code.\n" @@ -6311,13 +6306,13 @@ msgstr "" #, boost-format msgid "Generating G-code: layer %1%" -msgstr "Erzeugen von G-Code: Schicht %1%" +msgstr "G-Code wird generiert: Schicht %1%" msgid "Inner wall" msgstr "Innere Wand" msgid "Outer wall" -msgstr "Äußere Wand" +msgstr "Außenwand" msgid "Overhang wall" msgstr "Überhang Wand" @@ -6326,13 +6321,13 @@ msgid "Sparse infill" msgstr "Füllung" msgid "Internal solid infill" -msgstr "Interne massive Füllung" +msgstr "Innere massive Füllung" msgid "Top surface" -msgstr "Obere Oberfläche" +msgstr "Oberfläche" msgid "Bottom surface" -msgstr "Untere Oberfläche" +msgstr "Untere Fläche" msgid "Bridge" msgstr "Überbrückung" @@ -6341,10 +6336,10 @@ msgid "Gap infill" msgstr "Lückenfüllung" msgid "Support interface" -msgstr "Support-Schnittstelle" +msgstr "Stützstruktur-Schnittstelle" msgid "Support transition" -msgstr "Support Übergang" +msgstr "Stützübergang" msgid "Multiple" msgstr "Mehrere" @@ -6353,10 +6348,10 @@ msgstr "Mehrere" msgid "Failed to calculate line width of %1%. Can not get value of \"%2%\" " msgstr "" "Berechnung der Linienbreite von %1% fehlgeschlagen. Kann den Wert von \"%2%" -"\" nicht erhalten " +"\" nicht abrufen" msgid "undefined error" -msgstr "unbekannter Fehler" +msgstr "Undefinierter Fehler" msgid "too many files" msgstr "zu viele Dateien" @@ -6380,10 +6375,10 @@ msgid "not a ZIP archive" msgstr "kein ZIP Archiv" msgid "invalid header or corrupted" -msgstr "ungültiger Header oder beschädigt" +msgstr "ungültiger oder korrupter Header" msgid "unsupported multidisk" -msgstr "nicht unterstützte Multidisk" +msgstr "Das Speichern auf RAID wird nicht unterstützt." msgid "decompression failed" msgstr "Dekomprimierung fehlgeschlagen" @@ -6401,7 +6396,7 @@ msgid "unsupported central directory size" msgstr "nicht unterstützte zentrale Verzeichnisgröße" msgid "allocation failed" -msgstr "Allokation fehlgeschlagen" +msgstr "Zuordnung fehlgeschlagen" msgid "file open failed" msgstr "Öffnen der Datei fehlgeschlagen" @@ -6413,10 +6408,10 @@ msgid "file write failed" msgstr "Schreiben der Datei fehlgeschlagen" msgid "file read failed" -msgstr "Dateilesen fehlgeschlagen" +msgstr "Lesen der Datei fehlgeschlagen" msgid "file close failed" -msgstr "Dateischließen fehlgeschlagen" +msgstr "Datei schließen fehlgeschlagen" msgid "file seek failed" msgstr "Dateizugriff fehlgeschlagen" @@ -6446,40 +6441,39 @@ msgid "validation failed" msgstr "Überprüfung fehlgeschlagen" msgid "write callback failed" -msgstr "Schreibrückruf fehlgeschlagen" +msgstr "Schreib-Callback fehlgeschlagen" #, boost-format msgid "" "%1% is too close to exclusion area, there may be collisions when printing." msgstr "" -"%1% liegt zu nahe am Ausschlussbereich. Beim Drucken kann es zu Kollisionen " -"kommen." +"%1% liegt zu nahe an einem ausgeschlossenen Bereich. Beim Drucken kann es zu " +"Kollisionen kommen." #, boost-format msgid "%1% is too close to others, and collisions may be caused." -msgstr "" -"%1% ist zu nah an anderen, und es können Kollisionen verursacht werden." +msgstr "%1% ist zu nah an anderen, was Kollisionen verursachen kann." #, boost-format msgid "%1% is too tall, and collisions will be caused." msgstr "%1% ist zu hoch und es kommt zu Kollisionen." msgid " is too close to others, there may be collisions when printing." -msgstr " zu nahe an anderen liegt; beim Drucken kann es zu Kollisionen kommen." +msgstr " zu nahe an anderen; Beim Drucken kann es zu Kollisionen kommen." msgid " is too close to exclusion area, there may be collisions when printing." msgstr "" -" befindet sich zu nahe an einem Ausschlussbereich, beim Drucken kann es zu " +" befindet sich zu nahe an einem Sperrbereich. Beim Drucken kann es zu " "Kollisionen kommen." msgid "Prime Tower" -msgstr "Prime Turm" +msgstr "Reinigungsturm" msgid " is too close to others, and collisions may be caused.\n" msgstr " ist zu nah an anderen und es können Kollisionen verursacht werden.\n" msgid " is too close to exclusion area, and collisions will be caused.\n" -msgstr " ist zu nahe am Sperrgebiet und es werden Kollisionen verursacht.\n" +msgstr " ist zu nahe am Sperrbereich und es werden Kollisionen verursacht.\n" msgid "" "Can not print multiple filaments which have large difference of temperature " @@ -6487,8 +6481,8 @@ msgid "" "during printing" msgstr "" "Es können nicht mehrere Filamente mit einem großen Temperaturunterschied " -"zusammen gedruckt werden. Andernfalls können der Extruder und die Druckdüse " -"während des Drucks blockiert oder beschädigt werden" +"zusammen gedruckt werden. Andernfalls können der Extruder und die Düse " +"während des Drucks blockiert oder beschädigt werden." msgid "No extrusions under current settings." msgstr "Keine Extrusion unter den aktuellen Einstellungen." @@ -6511,48 +6505,49 @@ msgid "" "The spiral vase mode does not work when an object contains more than one " "materials." msgstr "" -"Der Modus \"Spiralvase\" funktioniert nicht, wenn ein Objekt mehr als ein " -"Material enthält." +"Der Vasen-Modus funktioniert nicht, wenn ein Objekt mehr als ein Material " +"enthält." msgid "The prime tower is not supported in \"By object\" print." -msgstr "Der Prime Turm wird im \"Nach Objekt\"-Druck nicht unterstützt." +msgstr "Der Reinigungsturm wird im \"Nach Objekt\"-Druck nicht unterstützt." msgid "" "The prime tower is not supported when adaptive layer height is on. It " "requires that all objects have the same layer height." msgstr "" -"Der Prime Turm wird nicht unterstützt, wenn die adaptive Schichthöhe " +"Der Reinigungsturm wird nicht unterstützt, wenn die adaptive Schichthöhe " "aktiviert ist. Er erfordert, dass alle Objekte die gleiche Schichthöhe haben." msgid "The prime tower requires \"support gap\" to be multiple of layer height" msgstr "" -"Der Prime Tower erfordert einen \"Stützabstand\", der ein Vielfaches der " -"Schichthöhe beträgt" +"Der Reinigungsturm erfordert einen \"Stützabstand\", der ein Vielfaches der " +"Schichthöhe sein muss." msgid "The prime tower requires that all objects have the same layer heights" msgstr "" -"Der Prime Turm setzt voraus, dass alle Objekte die gleiche Schichthöhe haben" +"Der Reinigungsturm setzt voraus, dass alle Objekte die gleiche Schichthöhe " +"haben." msgid "" "The prime tower requires that all objects are printed over the same number " "of raft layers" msgstr "" -"Der Prime Turm erfordert, dass alle Objekte über die gleiche Anzahl von Raft-" -"Ebenen gedruckt werden" +"Der Reinigungsturm erfordert, dass alle Objekte über der gleichen Anzahl von " +"Floßschichten gedruckt werden." msgid "" "The prime tower requires that all objects are sliced with the same layer " "heights." msgstr "" -"Der Prime Turm setzt voraus, dass alle Objekte mit den gleichen Schichthöhen " -"gesliced werden." +"Der Reinigungsturm setzt voraus, dass alle Objekte mit der gleichen " +"Schichthöhe geslicet werden." msgid "" "The prime tower is only supported if all objects have the same variable " "layer height" msgstr "" -"Der Prime-Tower wird nur unterstützt, wenn alle Objekte die gleiche variable " -"Schichthöhe haben" +"Der Reinigungsturm wird nur unterstützt, wenn alle Objekte die gleiche " +"variable Schichthöhe haben" msgid "Too small line width" msgstr "Zu geringe Linienbreite" @@ -6563,24 +6558,24 @@ msgstr "Zu große Linienbreite" msgid "" "The prime tower requires that support has the same layer height with object." msgstr "" -"Der Prime Turm erfordert, dass der Support die gleiche Schichthöhe wie das " -"Objekt hat." +"Der Reinigungsturm erfordert, dass die Stützstrukturen die gleiche " +"Schichthöhe wie das Objekt haben." msgid "" "Support enforcers are used but support is not enabled. Please enable support." msgstr "" -"Support Enforcer werden verwendet, aber der Support ist nicht aktiviert. " -"Bitte aktivieren Sie die Support-Funktion." +"Stützerzwinger werden verwendet, aber die Stützstrukturen sind nicht " +"aktiviert. Bitte aktivieren Sie die Stützstruktur-Funktion." msgid "Layer height cannot exceed nozzle diameter" -msgstr "Schichthöhe kann Druckdüsendurchmesser nicht überschreiten" +msgstr "Schichthöhe darf den Düsendurchmesser nicht überschreiten." #, c-format, boost-format msgid "Plate %d: %s does not support filament %s" msgstr "Druckplatte %d: %s unterstützt kein Filament %s" msgid "Generating skirt & brim" -msgstr "Erzeugen von Schürze und Rand (skirt & brim)" +msgstr "Generieren von Schürze und Rand (skirt & brim)" msgid "Exporting G-code" msgstr "Exportiere G-Code" @@ -6602,7 +6597,7 @@ msgid "" "left corner to cut filament during filament change. The area is expressed as " "polygon by points in following format: \"XxY, XxY, ...\"" msgstr "" -"Unbedruckbarer Bereich in der XY-Ebene. Bei Druckern der Serie X1 wird zum " +"Unbedruckbarer Bereich in der XY-Ebene. Bei Druckern der X1 Serie wird zum " "Beispiel die vordere linke Ecke verwendet, um das Filament während des " "Filamentwechsels zu schneiden. Der Bereich wird als Polygon durch Punkte im " "folgenden Format ausgedrückt: \"XxY, XxY, ...\"" @@ -6620,26 +6615,26 @@ msgid "" "Shrink the initial layer on build plate to compensate for elephant foot " "effect" msgstr "" -"Schrumpfen der ersten Schicht auf der Druckplatte, um den Elefantenfuß-" -"Effekt auszugleichen" +"Schrumpft die erste Schicht auf der Druckplatte, um den Elefantenfuß-Effekt " +"auszugleichen." msgid "" "Slicing height for each layer. Smaller layer height means more accurate and " "more printing time" msgstr "" -"Slicing-Höhe für jede Schicht. Geringere Schichthöhe bedeutet mehr " -"Genauigkeit und dafür mehr Druckzeit" +"Definiert die Höhe der einzelnen Schichten. Eine geringe Schichthöhe " +"steigert die Genauigkeit und verringert die Sichtbarkeit der einzelnen " +"Schichten, verlängert dafür aber die Druckzeit." msgid "Printable height" msgstr "Druckbare Höhe" msgid "Maximum printable height which is limited by mechanism of printer" msgstr "" -"Maximale bedruckbare Höhe, die durch den Mechanismus des Druckers begrenzt " -"ist" +"Maximale bedruckbare Höhe, die durch den Bauraum des Druckers begrenzt ist." msgid "Printer preset names" -msgstr "Drucker-Voreinstellungsnamen" +msgstr "Drucker Profilname" msgid "Hostname, IP or URL" msgstr "Hostname, IP oder URL" @@ -6659,7 +6654,7 @@ msgstr "" "password@Ihre-octopi-Adresse/" msgid "API Key / Password" -msgstr "API-Schlüssel/Passwort" +msgstr "API-Schlüssel / Passwort" msgid "" "Slic3r can upload G-code files to a printer host. This field should contain " @@ -6680,9 +6675,9 @@ msgid "" "in crt/pem format. If left blank, the default OS CA certificate repository " "is used." msgstr "" -"Für HTTPS-OctoPrint-Verbindungen kann eine eigene CA-Zertifikatsdatei im crt/" -"pem-Format angegeben werden. Wenn das Feld leer gelassen wird, wird das " -"Standard-OS-CA-Zertifikatsspeicher verwendet." +"Für HTTPS OctoPrint-Verbindungen kann eine eigene CA-Zertifikatsdatei im crt/" +"pem-Format hinterlegt werden. Wenn das Feld leer gelassen wird, wird das " +"Standard CA-Zertifikat des Betriebssystems genutzt." msgid "User" msgstr "Benutzer" @@ -6703,8 +6698,7 @@ msgstr "" "Zertifikate aktivieren, wenn die Verbindung fehlschlägt." msgid "Names of presets related to the physical printer" -msgstr "" -"Namen der Voreinstellungen, die sich auf den physischen Drucker beziehen" +msgstr "Namen der Profile, die sich auf den physischen Drucker beziehen" msgid "Authorization Type" msgstr "Autorisierungstyp" @@ -6713,14 +6707,14 @@ msgid "API key" msgstr "API-Schlüssel" msgid "HTTP digest" -msgstr "HTTP-Auszug" +msgstr "HTTP-Digest" msgid "Avoid crossing wall" msgstr "Vermeiden von Wandüberquerungen" msgid "Detour and avoid to travel across wall which may cause blob on surface" msgstr "" -"Fahren Sie einen Umweg und vermeiden Sie es, über die Wand zu fahren, was zu " +"Es wird ein Umweg genommen, um über keine Wände zu fahren, was zu " "Tropfenbildung auf der Oberfläche führen kann" msgid "Avoid crossing wall - Max detour length" @@ -6732,9 +6726,9 @@ msgid "" "either as an absolute value or as percentage (for example 50%) of a direct " "travel path. Zero to disable" msgstr "" -"Maximale Umleitungsstrecke zur Vermeidung einer Wandüberquerung: Der Drucker " -"fährt keinen Umweg, wenn die Umwegstrecke größer als dieser Wert ist. Die " -"Umleitungslänge kann entweder als absoluter Wert oder als Prozentsatz (z. B. " +"Maximale Umleitstrecke zur Vermeidung einer Wandüberquerung: Der Drucker " +"fährt keinen Umweg, wenn die Umleitstrecke größer als dieser Wert ist. Die " +"Umleitstrecke kann entweder als absoluter Wert oder als Prozentsatz (z. B. " "50 %) eines direkten Fahrwegs angegeben werden. Ein Wert von 0 deaktiviert " "diese Funktion." @@ -6749,8 +6743,8 @@ msgid "" "filament does not support to print on the Cool Plate" msgstr "" "Dies ist die Betttemperatur für Schichten mit Ausnahme der Ersten. Ein Wert " -"von 0 bedeutet, dass das Filament das Drucken auf der kalten Druckplatte " -"nicht unterstützt." +"von 0 bedeutet, dass das Filament auf der kalten Druckplatte nicht " +"unterstützt wird." msgid "°C" msgstr "°C" @@ -6760,16 +6754,16 @@ msgid "" "filament does not support to print on the Engineering Plate" msgstr "" "Dies ist die Betttemperatur für Schichten mit Ausnahme der Ersten. Ein Wert " -"von 0 bedeutet, dass das Filament das Drucken auf der technischen " -"Druckplatte nicht unterstützt." +"von 0 bedeutet, dass das Filament auf der technischen Druckplatte nicht " +"unterstützt wird." msgid "" "Bed temperature for layers except the initial one. Value 0 means the " "filament does not support to print on the High Temp Plate" msgstr "" "Dies ist die Betttemperatur für Schichten mit Ausnahme der Ersten. Ein Wert " -"von 0 bedeutet, dass das Filament das Drucken auf der " -"Hochtemperaturdruckplatte nicht unterstützt." +"von 0 bedeutet, dass das Filament auf der Hochtemperaturdruckplatte nicht " +"unterstützt wird." msgid "" "Bed temperature for layers except the initial one. Value 0 means the " @@ -6788,24 +6782,22 @@ msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate" msgstr "" -"Dies ist die Betttemperatur der Ausgangsschicht. Ein Wert von 0 bedeutet, " -"dass das Filament das Drucken auf der kalten Druckplatte nicht unterstützt." +"Dies ist die Betttemperatur der ersten Schicht. Ein Wert von 0 bedeutet, " +"dass das Filament auf der kalten Druckplatte nicht unterstützt wird." msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Engineering Plate" msgstr "" -"Dies ist die Betttemperatur der Ausgangsschicht. Ein Wert von 0 bedeutet, " -"dass das Filament das Drucken auf der technischen Druckplatte nicht " -"unterstützt." +"Dies ist die Betttemperatur der ersten Schicht. Ein Wert von 0 bedeutet, " +"dass das Filament auf der technischen Druckplatte nicht unterstützt wird." msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the High Temp Plate" msgstr "" -"Dies ist die Betttemperatur der Ausgangsschicht. Ein Wert von 0 bedeutet, " -"dass das Filament das Drucken auf der Hochtemperaturdruckplatte nicht " -"unterstützt." +"Dies ist die Betttemperatur der ersten Schicht. Ein Wert von 0 bedeutet, " +"dass das Filament auf der Hochtemperatur-Druckplatte nicht unterstützt wird." msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " @@ -6819,7 +6811,7 @@ msgstr "Vom Drucker unterstützte Druckbettypen" msgid "This G-code is inserted at every layer change before lifting z" msgstr "" -"Dieser G-Code wird bei jedem Schichtwechsel vor dem Heben von Z eingefügt" +"Dieser G-Code wird bei jedem Schichtwechsel vor dem anheben von Z eingefügt." msgid "Bottom shell layers" msgstr "Untere Schalenschichten" @@ -6829,13 +6821,12 @@ msgid "" "surface layer. When the thickness calculated by this value is thinner than " "bottom shell thickness, the bottom shell layers will be increased" msgstr "" -"Dies ist die Anzahl der festen Schichten der Unterschale, einschließlich der " -"unteren Oberflächenschicht. Wenn die mit diesem Wert berechnete Dicke dünner " -"ist als die Dicke der unteren Schale, werden die unteren Schalenschichten " -"erhöht" +"Dies ist die Anzahl der massiven Schichten der Unterschale, einschließlich " +"der ersten Schicht. Wenn die mit diesem Wert berechnete Dicke dünner ist als " +"die Dicke der unteren Schale, werden die unteren Schalenschichten erhöht." msgid "Bottom shell thickness" -msgstr "Dicke der Unterschale" +msgstr "Dicke der unteren Schale" msgid "" "The number of bottom solid layers is increased when slicing if the thickness " @@ -6845,20 +6836,19 @@ msgid "" "bottom shell layers" msgstr "" "Die Anzahl der unteren festen Schichten wird beim Slicen erhöht, wenn die " -"durch die unteren Schalenschichten berechnete Dicke dünner als dieser Wert " -"ist. Dies kann verhindern, dass die Schale zu dünn wird, wenn die " -"Schichthöhe gering ist. 0 bedeutet, dass diese Einstellung deaktiviert ist " -"und die Dicke der unteren Schale absolut durch die unteren Schalenschichten " -"bestimmt wird" +"untere Schalenstärke dünner als dieser Wert ist. Dies kann verhindern, dass " +"die Schale zu dünn wird, wenn eine geringe Schichthöhe verwendet wird. 0 " +"bedeutet, dass diese Einstellung deaktiviert ist und die Dicke der unteren " +"Schale absolut durch die unteren Schalenschichten bestimmt wird." msgid "Force cooling for overhang and bridge" -msgstr "Zwangskühlung für Überhang und Brücken" +msgstr "Zwangskühlung für Überhänge und Brücken" msgid "" "Enable this option to optimize part cooling fan speed for overhang and " "bridge to get better cooling" msgstr "" -"Aktivieren Sie diese Option, um die Lüftergeschwindigkeit für Überhang und " +"Aktivieren Sie diese Option, um die Lüftergeschwindigkeit für Überhänge und " "Brücken zu optimieren, um eine bessere Kühlung zu erreichen" msgid "Fan speed for overhang" @@ -6869,13 +6859,12 @@ msgid "" "wall which has large overhang degree. Forcing cooling for overhang and " "bridge can get better quality for these part" msgstr "" -"Erzwingen Sie diese Lüftergeschwindigkeit beim Drucken von Brücken oder " -"überhängenden Wänden, die einen großen Überhang aufweisen. Erzwungene " -"Kühlung für Überhang und Brücke kann eine bessere Qualität für diese Teile " -"erzielen" +"Erzwinge diese Lüftergeschwindigkeit beim Drucken von Brücken oder Wänden, " +"die einen großen Überhang aufweisen. Erzwungene Kühlung für Überhänge und " +"Brücken kann eine bessere Qualität für diese Abschnitte erzielen." msgid "Cooling overhang threshold" -msgstr "Schwellenwert für die Kühlung des Überhangs" +msgstr "Schwellenwert für die Kühlung von Überhängen" #, c-format msgid "" @@ -6884,11 +6873,11 @@ msgid "" "of the line without support from lower layer. 0% means forcing cooling for " "all outer wall no matter how much overhang degree" msgstr "" -"Erzwingt eine bestimmte Lüftergeschwindigkeit, wenn der Grad des Überhangs " +"Erzwingt eine bestimmte Lüftergeschwindigkeit, wenn der Winkel des Überhangs " "des gedruckten Teils diesen Wert überschreitet. Dies wird als Prozentsatz " "ausgedrückt, der angibt, wie groß die Breite der Linie ohne Unterstützung " "durch die untere Schicht ist. 0%% bedeutet, dass die Kühlung für die gesamte " -"Außenwand erzwungen wird, unabhängig vom Grad des Überhangs." +"Außenwand erzwungen wird, unabhängig vom Winkel des Überhangs." msgid "Bridge direction" msgstr "Richtung der Brücke" @@ -6900,17 +6889,17 @@ msgid "" msgstr "" "Überbrückungswinkel überschreiben. 0 bedeutet, dass der Überbrückungswinkel " "automatisch berechnet wird. Andernfalls wird der angegebene Winkel für " -"externe Brücken verwendet. Verwenden Sie 180° für den Winkel Null." +"externe Brücken verwendet. Verwenden Sie 180° für keinen Winkel." msgid "Bridge flow" -msgstr "Fluss der Brücke" +msgstr "Brücken Flussrate" msgid "" "Decrease this value slightly(for example 0.9) to reduce the amount of " "material for bridge, to improve sag" msgstr "" -"Verringern Sie diesen Wert geringfügig (z. B. 0,9), um die Materialmenge für " -"die Brücke zu verringern und den Durchhang zu verbessern" +"Verringern Sie diesen Wert geringfügig (z. B. 0,9), um den Materialfluss für " +"Brücken zu verringern und den Durchhang zu minimieren" msgid "Only one wall on top surfaces" msgstr "Nur eine Wand auf den oberen Flächen" @@ -6919,8 +6908,8 @@ msgid "" "Use only one wall on flat top surface, to give more space to the top infill " "pattern" msgstr "" -"Verwenden Sie nur eine Wand auf der flachen Oberseite, um mehr Platz für das " -"obere Füllungsmuster zu schaffen." +"Verwenden Sie nur eine Wand auf der Oberfläche, um mehr Platz für das obere " +"Füllmuster zu schaffen." msgid "Slow down for overhang" msgstr "Verlangsamen bei Überhängen" @@ -6934,13 +6923,13 @@ msgid "mm/s" msgstr "mm/s" msgid "Speed of bridge and completely overhang wall" -msgstr "Geschwindigkeit der Brücken und vollständig überhängenden Wänden" +msgstr "Geschwindigkeit für Brücken und vollständig überhängende Wände." msgid "Brim width" msgstr "Randbreite" msgid "Distance from model to the outermost brim line" -msgstr "Abstand vom Modell zur äußersten Randlinie" +msgstr "Abstand vom Modell zur äußersten Randlinie." msgid "Brim type" msgstr "Randtyp" @@ -6966,8 +6955,8 @@ msgid "" "A gap between innermost brim line and object can make brim be removed more " "easily" msgstr "" -"Eine Lücke zwischen der innersten Randlinie und dem Objekt kann das Abnehmen " -"des Randes erleichtern" +"Eine Lücke zwischen der innersten Randlinie und dem Objekt kann das " +"Entfernen des Randes erleichtern." msgid "Compatible machine" msgstr "Kompatible Maschine" @@ -6982,10 +6971,12 @@ msgid "Compatible process profiles" msgstr "Kompatible Prozessprofile" msgid "Compatible process profiles condition" -msgstr "Kompatible Prozessprofile Bedingung" +msgstr "Bedingung für kompatible Prozessprofile" msgid "Print sequence, layer by layer or object by object" -msgstr "Druckreihenfolge, Schicht für Schicht oder Objekt für Objekt" +msgstr "" +"Dies bestimmt die Druckreihenfolge, sodass Sie Schicht für Schicht oder " +"Objekt für Objekt drucken können." msgid "By layer" msgstr "Nach Ebene" @@ -6994,7 +6985,7 @@ msgid "By object" msgstr "Nach Objekt" msgid "Slow printing down for better layer cooling" -msgstr "Verlangsamen Sie den Druck für eine bessere Schichtkühlung" +msgstr "Verlangsamen für eine bessere Schichtkühlung" msgid "" "Enable this option to slow printing speed down to make the final layer time " @@ -7003,10 +6994,10 @@ msgid "" "quality for needle and small details" msgstr "" "Aktivieren Sie diese Option, um die Druckgeschwindigkeit zu verlangsamen, so " -"dass die endgültige Schichtenzeit nicht kürzer als der Schwellenwert für die " -"Schichtenzeit in \"Max fan speed threshold\" ist, so dass die Schichten " -"länger gekühlt werden können. Dies kann die Kühlungsqualität für Nadeln und " -"kleine Details verbessern" +"dass die endgültige Schichtzeit nicht kürzer als die Mindestschichtzeit in " +"\"Maximale Lüftergeschwindigkeit\" ist, so dass die Schichten länger gekühlt " +"werden können. Dies kann die Druckqualität für Spitzen und kleine Details " +"verbessern." msgid "Normal printing" msgstr "Normales Drucken" @@ -7015,23 +7006,23 @@ msgid "" "The default acceleration of both normal printing and travel except initial " "layer" msgstr "" -"Die Standardbeschleunigung für den normalen Druck und den Verfahrweg mit " -"Ausnahme der ersten Ebene" +"Die Standardbeschleunigung für den normalen Druck und den Eilgang nach der " +"ersten Schicht." msgid "mm/s²" msgstr "mm/s²" msgid "Default filament profile" -msgstr "Standard-Filamentprofil" +msgstr "Standard Filamentprofil" msgid "Default filament profile when switch to this machine profile" -msgstr "Standard-Filamentprofil beim Wechsel zu diesem Maschinenprofil" +msgstr "Standard Filamentprofil beim Wechsel zu diesem Maschinenprofil" msgid "Default process profile" -msgstr "Standard-Prozessprofil" +msgstr "Standard Prozessprofil" msgid "Default process profile when switch to this machine profile" -msgstr "Standardprozessprofil beim Wechsel zu diesem Maschinenprofil" +msgstr "Standard Prozessprofil beim Wechsel zu diesem Maschinenprofil" msgid "No cooling for the first" msgstr "Keine Kühlung für die erste" @@ -7040,9 +7031,8 @@ msgid "" "Close all cooling fan for the first certain layers. Cooling fan of the first " "layer used to be closed to get better build plate adhesion" msgstr "" -"Schließen Sie alle Kühlgebläse für die ersten Schichten. Das Kühlgebläse der " -"ersten Schicht sollte geschlossen sein, um eine bessere Haftung der " -"Bauplatte zu erreichen" +"Schalte alle Lüfter für die ersten Schichten aus. Dies kann genutzt werden, " +"um die Betthaftung zu verbessern." msgid "layers" msgstr "Schichten" @@ -7054,9 +7044,9 @@ msgid "" "Don't support the whole bridge area which make support very large. Bridge " "usually can be printing directly without support if not very long" msgstr "" -"Stützen Sie nicht den gesamten Brückenbereich ab, was die Auflage sehr groß " -"macht. Brücke kann in der Regel direkt ohne Unterstützung gedruckt werden, " -"wenn diese nicht sehr lang ist" +"Stützt den Brückenbereich nicht ab, was die die Menge der benötigten Stützen " +"reduziert. Brücken können in der Regel direkt ohne Stützen gedruckt werden, " +"wenn diese nicht sehr lang sind." msgid "Thick bridges" msgstr "Dicke Brücken" @@ -7084,14 +7074,13 @@ msgstr "" "einen sehr großen Wert fest, wenn keine Brücken unterstützt werden sollen." msgid "End G-code" -msgstr "G-Code am Ende" +msgstr "End G-Code" msgid "End G-code when finish the whole printing" -msgstr "End G-Code nach dem fertigstellen des kompletten Drucks" +msgstr "End G-Code nach dem fertigstellen des Drucks hinzufügen." msgid "End G-code when finish the printing of this filament" -msgstr "" -"Fügen Sie den End-G-Code hinzu, wenn Sie den Druck dieses Filaments beenden." +msgstr "End-G-Code hinzufügen, wenn der Druck dieses Filaments beenden ist." msgid "Ensure vertical shell thickness" msgstr "Sicherstellung der vertikalen Wanddicke" @@ -7100,7 +7089,7 @@ msgid "" "Add solid infill near sloping surfaces to guarantee the vertical shell " "thickness (top+bottom solid layers)" msgstr "" -"Fügen Sie in der Nähe von schrägen Flächen massive Füllung hinzu, um die " +"In der Nähe von schrägen Flächen massive Füllungen hinzufügen, um die " "vertikale Wanddicke zu gewährleisten (obere + untere massive Schichten)." msgid "Internal bridge support thickness" @@ -7115,10 +7104,10 @@ msgid "" msgstr "" msgid "Top surface pattern" -msgstr "Muster der oberen Oberfläche" +msgstr "Muster der Oberfläche" msgid "Line pattern of top surface infill" -msgstr "Linienmuster der Füllung der oberen Oberfläche" +msgstr "Füllmuster der obersten Fläche" msgid "Concentric" msgstr "Konzentrisch" @@ -7130,7 +7119,7 @@ msgid "Monotonic" msgstr "Monotonisch" msgid "Monotonic line" -msgstr "Monotone Linie" +msgstr "Monotonische Linie" msgid "Aligned Rectilinear" msgstr "Geradlinig ausgerichtet" @@ -7145,10 +7134,10 @@ msgid "Octagram Spiral" msgstr "Oktagramm Spirale" msgid "Bottom surface pattern" -msgstr "Muster der unteren Oberfläche" +msgstr "Muster der unteren Fläche" msgid "Line pattern of bottom surface infill, not bridge infill" -msgstr "Linienmuster der Bodenausfüllung, nicht der Brückenausfüllung" +msgstr "Linienmuster der Bodenfüllung. Brückenfüllung nicht eingeschlossen" msgid "Line width of outer wall" msgstr "Linienbreite der Außenwand" @@ -7157,9 +7146,9 @@ msgid "" "Speed of outer wall which is outermost and visible. It's used to be slower " "than inner wall speed to get better quality." msgstr "" -"Geschwindigkeit der äußeren Wand, die am weitesten außen und sichtbar ist. " -"Sie ist langsamer als die Geschwindigkeit der Innenwand, um eine bessere " -"Qualität zu erzielen." +"Geschwindigkeit der äußersten Wand, welche später sichtbar ist. Wird in der " +"Regel langsamer als die Innenwände gedruckt, um eine bessere Qualität zu " +"erzielen." msgid "Order of inner wall/outer wall/infil" msgstr "Reihenfolge Innenwand/Außenwand/Füllung" @@ -7183,7 +7172,7 @@ msgid "inner-outer-inner/infill" msgstr "Innen-Außen-Innen/Füllung" msgid "Height to rod" -msgstr "Höhe zur Stange" +msgstr "Höhe zur Führung" msgid "" "Distance of the nozzle tip to the lower rod. Used for collision avoidance in " @@ -7206,7 +7195,7 @@ msgid "" "Clearance radius around extruder. Used for collision avoidance in by-object " "printing." msgstr "" -"Abstandsradius um den Extruder: dient zur Kollisionsvermeidung beim " +"Sicherheitsradius um den Extruder: Dient zur Kollisionsvermeidung beim " "objektweisen Drucken." msgid "Max Radius" @@ -7226,10 +7215,10 @@ msgid "Only used as a visual help on UI" msgstr "Nur als visuelle Hilfe auf der UI verwendet" msgid "Extruder offset" -msgstr "Extruder Offset" +msgstr "Extruder-Versatz" msgid "Flow ratio" -msgstr "Durchflussverhältnis" +msgstr "Flussverhältnis" msgid "" "The material may have volumetric change after switching between molten state " @@ -7241,12 +7230,12 @@ msgstr "" "Das Material kann sich nach dem Wechsel zwischen geschmolzenem und " "kristallinem Zustand volumetrisch verändern. Mit dieser Einstellung werden " "alle Extrusionsströme dieses Filaments im G-Code proportional geändert. Der " -"empfohlene Wertebereich liegt zwischen 0,95 und 1,05. Vielleicht können Sie " -"diesen Wert anpassen, um eine schöne flache Oberfläche zu erhalten, wenn es " -"einen leichten Über- oder Unterlauf gibt" +"empfohlene Wertebereich liegt zwischen 0,95 und 1,05. Sie können diesen Wert " +"anpassen, um eine schöne flache Oberfläche zu erhalten, wenn es eine leichte " +"Über- oder Unterextrusion gibt." msgid "Default line width if some line width is set to be zero" -msgstr "Standardlinienbreite, wenn eine Linienbreite auf Null gesetzt ist" +msgstr "Standardlinienbreite für Linienbreiten, die auf 0 gesetzt sind" msgid "Keep fan always on" msgstr "Lüfter ständig laufen lassen" @@ -7267,10 +7256,10 @@ msgid "" "shorter than this value. Fan speed is interpolated between the minimum and " "maximum fan speeds according to layer printing time" msgstr "" -"Der Teillüfter wird für Schichten aktiviert, deren geschätzte Zeit kürzer " +"Der Bauteillüfter wird für Schichten aktiviert, deren geschätzte Zeit kürzer " "als dieser Wert ist. Die Lüftergeschwindigkeit wird zwischen der minimalen " -"und maximalen Lüftergeschwindigkeit entsprechend der Druckzeit der Schicht " -"interpoliert" +"und maximalen Geschwindigkeit entsprechend der Druckzeit der Schicht " +"interpoliert." msgid "s" msgstr "s" @@ -7279,7 +7268,7 @@ msgid "Default color" msgstr "Standardfarbe" msgid "Default filament color" -msgstr "Standard-Filamentfarbe" +msgstr "Standard Filamentfarbe" msgid "Color" msgstr "Farbe" @@ -7310,12 +7299,15 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimale Wischmenge im Wischturm" +msgid "mm³" +msgstr "mm³" + msgid "Filament load time" msgstr "Ladedauer des Filaments" msgid "Time to load new filament when switch filament. For statistics only" msgstr "" -"Zeit zum Laden des neuen Filaments beim Wechseln des Filaments, nur für " +"Zeit zum Laden des neuen Filaments, beim Wechseln des Filaments. Nur für " "statistische Zwecke." msgid "Filament unload time" @@ -7323,7 +7315,7 @@ msgstr "Entladezeit des Filaments" msgid "Time to unload old filament when switch filament. For statistics only" msgstr "" -"Zeit zum Entladen des alten Filaments beim Wechseln des Filaments, nur für " +"Zeit zum Entladen des alten Filaments, beim Wechseln des Filaments. Nur für " "statistische Zwecke." msgid "" @@ -7337,13 +7329,13 @@ msgid "Density" msgstr "Dichte" msgid "Filament density. For statistics only" -msgstr "Filamentdichte. Nur für die Statistik" +msgstr "Filamentdichte. Nur für statistische Zwecke." msgid "g/cm³" msgstr "g/cm³" msgid "The material type of filament" -msgstr "Material des Filaments." +msgstr "Filament-Materialtyp" msgid "Soluble material" msgstr "Lösliches Material" @@ -7351,8 +7343,8 @@ msgstr "Lösliches Material" msgid "" "Soluble material is commonly used to print support and support interface" msgstr "" -"Lösliches Material wird in der Regel für den Druck von Support und Support-" -"Interface verwendet" +"Lösliches Material wird in der Regel für den Druck von Stützen und Stütz-" +"Schnittstellen verwendet" msgid "Support material" msgstr "Stützmaterial" @@ -7360,8 +7352,8 @@ msgstr "Stützmaterial" msgid "" "Support material is commonly used to print support and support interface" msgstr "" -"Stützmaterial wird üblicherweise zum Drucken von Stützen und " -"Stützschnittstellen verwendet." +"Stützmaterial wird üblicherweise zum Drucken von Stützen und Stütz-" +"Schnittstellen verwendet." msgid "Temperature of vitrificaiton" msgstr "Verglasungstemperatur" @@ -7377,10 +7369,10 @@ msgid "Price" msgstr "Preis" msgid "Filament price. For statistics only" -msgstr "Filamentpreis, nur für statistische Zwecke." +msgstr "Filamentpreis. Nur für statistische Zwecke." msgid "money/kg" -msgstr "Kosten/kg" +msgstr "Preis/kg" msgid "(Undefined)" msgstr "(undefiniert)" @@ -7391,22 +7383,20 @@ msgstr "Richtung der Füllung" msgid "" "Angle for sparse infill pattern, which controls the start or main direction " "of line" -msgstr "" -"Winkel für das Infill-Muster, das die Anfangs- oder Hauptrichtung der Linie " -"bestimmt" +msgstr "Winkel des Füllmusters, das die Richtung der Linien bestimmt." msgid "Sparse infill density" -msgstr "Dichte der Füllung" +msgstr "Fülldichte" #, c-format msgid "Density of internal sparse infill, 100% means solid throughout" -msgstr "Dichte des internen Infill, 100%% bedeutet durchgehend fest" +msgstr "Dichte der inneren Füllung, 100%% bedeuten eine solide Füllung" msgid "Sparse infill pattern" -msgstr "Muster der Füllung" +msgstr "Füllmuster" msgid "Line pattern for internal sparse infill" -msgstr "Linienmuster für interne Füllung." +msgstr "Linienmuster für innere Füllung." msgid "Grid" msgstr "Gitternetz" @@ -7418,7 +7408,7 @@ msgid "Cubic" msgstr "Kubisch" msgid "Tri-hexagon" -msgstr "Dreifach-Sechseck" +msgstr "Tri-Hexagon" msgid "Gyroid" msgstr "Gyroid" @@ -7430,10 +7420,10 @@ msgid "Adaptive Cubic" msgstr "Adaptiv kubisch" msgid "3D Honeycomb" -msgstr "3D-Wabe" +msgstr "3D-Waben" msgid "Support Cubic" -msgstr "Kubisch Supporten" +msgstr "Kubisch Stützen" msgid "Lightning" msgstr "Blitz" @@ -7442,8 +7432,8 @@ msgid "" "Acceleration of top surface infill. Using a lower value may improve top " "surface quality" msgstr "" -"Dies ist die Beschleunigung der Füllung der oberen Oberfläche. Die " -"Verwendung eines niedrigeren Werts kann die Qualität der oberen Oberfläche " +"Dies ist die Beschleunigung der Füllung von der obersten Schicht. Die " +"Verwendung eines niedrigeren Werts kann die Qualität der Oberfläche " "verbessern." msgid "Acceleration of outer wall. Using a lower value can improve quality" @@ -7456,36 +7446,36 @@ msgid "" "adhensive" msgstr "" "Beschleunigung der ersten Schicht. Die Verwendung eines niedrigeren Wertes " -"kann die Haftfähigkeit der Druckplatte verbessern" +"kann die Druckbetthaftung verbessern" msgid "Line width of initial layer" msgstr "Linienbreite der ersten Schicht" msgid "Initial layer height" -msgstr "Anfangsschichthöhe" +msgstr "Höhe der ersten Schicht" msgid "" "Height of initial layer. Making initial layer height to be thick slightly " "can improve build plate adhension" msgstr "" "Höhe der ersten Schicht. Eine etwas dickere erste Schicht kann die Haftung " -"der Druckplatte verbessern" +"verbessern" msgid "Speed of initial layer except the solid infill part" -msgstr "Geschwindigkeit der ersten Schicht mit Ausnahme des festen Füllteils" +msgstr "Geschwindigkeit der ersten Schicht mit Ausnahme der massiven Füllung." msgid "Initial layer infill" msgstr "Füllung der ersten Schicht" msgid "Speed of solid infill part of initial layer" -msgstr "Geschwindigkeit des festen Füllmaterials in der ersten Schicht" +msgstr "Geschwindigkeit des massiven Füllung der ersten Schicht." msgid "Initial layer nozzle temperature" -msgstr "Druckdüsentemperatur für die erste Schicht" +msgstr "Düsentemperatur für die erste Schicht" msgid "Nozzle temperature to print initial layer when using this filament" msgstr "" -"Druckdüsentemperatur zum Drucken der ersten Schicht bei Verwendung dieses " +"Düsentemperatur zum Drucken der ersten Schicht bei Verwendung dieses " "Filaments" msgid "Full fan speed at layer" @@ -7495,8 +7485,9 @@ msgid "" "Randomly jitter while printing the wall, so that the surface has a rough " "look. This setting controls the fuzzy position" msgstr "" -"Zufälliges Zittern beim Drucken der Wand, so dass die Oberfläche ein raues " -"Aussehen erhält. Diese Einstellung steuert die Unschärfe" +"Diese Einstellung bewirkt, dass der Werkzeugkopf beim Drucken von Wänden " +"zufällig zittert, so dass die Oberfläche ein raues, strukturiertes Aussehen " +"erhält. Diese Einstellung steuert die Fuzzy-Position." msgid "None" msgstr "Keine" @@ -7517,8 +7508,8 @@ msgid "" "The width within which to jitter. It's adversed to be below outer wall line " "width" msgstr "" -"Die Breite, innerhalb derer gezittert werden soll. Sie sollte unter der " -"Breite der Außenwandlinie liegen" +"Die Breite, innerhalb der gezittert werden soll. Sie sollte unter der Breite " +"der Außenwandlinie liegen." msgid "Fuzzy skin point distance" msgstr "Fuzzy Skin Punktabstand" @@ -7534,8 +7525,8 @@ msgid "" "Speed of gap infill. Gap usually has irregular line width and should be " "printed more slowly" msgstr "" -"Geschwindigkeit des Lückenfüllens. Die Lücke hat normalerweise eine " -"unregelmäßige Linienbreite und sollte langsamer gedruckt werden" +"Geschwindigkeit für die Lückenfüllung. Lücken haben normalerweise eine " +"unregelmäßige Linienbreite und sollten deshalb langsamer gedruckt werden." msgid "Arc fitting" msgstr "Bogenanpassung" @@ -7544,8 +7535,8 @@ msgid "" "Enable this to get a G-code file which has G2 and G3 moves. And the fitting " "tolerance is same with resolution" msgstr "" -"Aktivieren Sie dies, um eine G-Code-Datei zu erhalten, die G2- und G3-Züge " -"enthält. Und die Anpassungstoleranz ist die gleiche wie die Auflösung" +"Aktivieren Sie dies, um eine G-Code-Datei zu erhalten, die G2 und G3 Befehle " +"enthält. Die Bogentoleranz ist die gleiche wie die Auflösung." msgid "Add line number" msgstr "Liniennummer hinzufügen" @@ -7562,18 +7553,18 @@ msgid "" "Enable this to enable the camera on printer to check the quality of first " "layer" msgstr "" -"Aktivieren Sie diese Option, um die Kamera am Drucker zu aktivieren und die " -"Qualität der ersten Schicht zu prüfen" +"Aktivieren Sie diese Option, damit die Kamera des Druckers die Qualität der " +"ersten Schicht überprüft." msgid "Nozzle type" -msgstr "Druckdüsentyp" +msgstr "Düsentyp" msgid "" "The metallic material of nozzle. This determines the abrasive resistance of " "nozzle, and what kind of filament can be printed" msgstr "" -"Das metallische Material der Druckdüse. Dies bestimmt die Abriebfestigkeit " -"der Druckdüse und welche Art von Filament gedruckt werden kann" +"Das metallische Material der Düse. Dies bestimmt die Abriebfestigkeit der " +"Düse und welche Art von Filamenten gedruckt werden kann." msgid "Undefine" msgstr "Undefiniert" @@ -7582,7 +7573,7 @@ msgid "Hardened steel" msgstr "Gehärteter Stahl" msgid "Stainless steel" -msgstr "Rostfreier Edelstahl" +msgstr "Edelstahl" msgid "Brass" msgstr "Messing" @@ -7612,35 +7603,35 @@ msgid "What kind of gcode the printer is compatible with" msgstr "Mit welcher Art von G-Code ist der Drucker kompatibel" msgid "Infill combination" -msgstr "Kombination der Füllung" +msgstr "Kombinieren der Füllung" msgid "" "Automatically Combine sparse infill of several layers to print together to " "reduce time. Wall is still printed with original layer height." msgstr "" -"Kombinieren Sie automatisch das Infill aus mehreren Schichten, um gemeinsam " -"zu drucken und die Zeit zu reduzieren. Die Wand wird weiterhin mit der " +"Kombinieren Sie automatisch die Füllung von mehreren Schichten, um diese " +"gemeinsam zu drucken und Zeit zu sparen. Die Wand wird weiterhin mit der " "ursprünglichen Schichthöhe gedruckt." msgid "Filament to print internal sparse infill." -msgstr "Filament für den Druck von Infill." +msgstr "Filament für den Druck der inneren Füllung." msgid "Line width of internal sparse infill" -msgstr "Linienbreite der internen Füllung" +msgstr "Linienbreite der inneren Füllung" msgid "Infill/Wall overlap" -msgstr "Überstand Füllung/Wand" +msgstr "Überlappung Füllung/Wand" msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " "The percentage value is relative to line width of sparse infill" msgstr "" "Der Bereich der Füllung wird leicht vergrößert, damit er sich mit der Wand " -"überschneidet, um eine bessere Haftung zu erreichen. Der Prozentwert bezieht " -"sich auf die Linienbreite der Füllung." +"überlappt, um eine bessere Haftung zu erreichen. Der Prozentwert bezieht " +"sich auf die Linienbreite der inneren Füllung." msgid "Speed of internal sparse infill" -msgstr "Geschwindigkeit der internen Füllung." +msgstr "Geschwindigkeit der inneren Füllung." msgid "Ironing Type" msgstr "Glätten-Typ" @@ -7657,30 +7648,30 @@ msgid "No ironing" msgstr "Kein Glätten" msgid "Top surfaces" -msgstr "Obere Oberflächen" +msgstr "Alle Oberflächen" msgid "Topmost surface" -msgstr "Oberste Oberfläche" +msgstr "Nur oberste Oberfläche" msgid "All solid layer" -msgstr "Alle festen Schichten" +msgstr "Alle soliden Schichten" msgid "Ironing flow" -msgstr "Glätten Fluss" +msgstr "Glätten-Fluss" msgid "" "The amount of material to extrude during ironing. Relative to flow of normal " "layer height. Too high value results in overextrusion on the surface" msgstr "" -"Die Materialmenge, die während des Glättens extrudiert wird. Relativ zum " -"Fluss der normalen Schichthöhe. Ein zu hoher Wert führt zu einer " -"Überextrusion an der Oberfläche" +"Die Materialmenge, die während des Glättens extrudiert wird. Dies ist " +"relativ zum Fluss der normalen Schichthöhe. Ein zu hoher Wert führt zu einer " +"Überextrusion der Oberfläche." msgid "Ironing line spacing" msgstr "Abstand der Glättlinien" msgid "The distance between the lines of ironing" -msgstr "Der Abstand zwischen den Linien des Glätten" +msgstr "Der Abstand zwischen den Linien beim Glätten" msgid "Ironing speed" msgstr "Geschwindigkeit beim Glätten" @@ -7690,8 +7681,7 @@ msgstr "Druckgeschwindigkeit der Glättlinien" msgid "This gcode part is inserted at every layer change after lift z" msgstr "" -"Dieser G-Code-Teil wird bei jedem Ebenenwechsel nach dem heben von Z " -"eingefügt" +"Dieser G-Code wird bei jedem Schichtwechsel nach dem anheben von Z eingefügt." msgid "Supports silent mode" msgstr "Unterstützt den Leise-Modus" @@ -7700,15 +7690,15 @@ msgid "" "Whether the machine supports silent mode in which machine use lower " "acceleration to print" msgstr "" -"ob das Gerät den geräuschlosen Modus unterstützt, bei dem das Gerät eine " -"geringere Beschleunigung zum Drucken verwendet" +"Ob das Gerät den Leisen-Modus unterstützt, bei dem das Gerät eine geringere " +"Beschleunigung zum Drucken verwendet" msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" msgstr "" -"Dieser G-Code wird als Code für den Pausendruck verwendet. Benutzer können " -"den Pausen-G-Code in den G-Code-Viewer einfügen." +"Dieser G-Code wird für die Druckpause verwendet. Benutzer können den Pausen-" +"G-Code in dem G-Code-Viewer einfügen." msgid "This G-code will be used as a custom code" msgstr "Dieser G-Code wird als benutzerdefinierter Code verwendet" @@ -7726,7 +7716,7 @@ msgid "Maximum speed E" msgstr "Maximale Geschwindigkeit E" msgid "Machine limits" -msgstr "Maschinengrenzen" +msgstr "Maschinenlimits" msgid "Maximum X speed" msgstr "Maximale Geschwindigkeit X" @@ -7825,9 +7815,9 @@ msgid "" "Part cooling fan speed may be increased when auto cooling is enabled. This " "is the maximum speed limitation of part cooling fan" msgstr "" -"Die Lüfterdrehzahl der Teilkühlung kann erhöht werden, wenn die automatische " +"Die Drehzahl des Bauteillüfters kann sich erhöhen, wenn die automatische " "Kühlung aktiviert ist. Dies ist die maximale Drehzahlbegrenzung des " -"Teilelüfter" +"Bauteillüfters." msgid "Max" msgstr "Maximal" @@ -7838,10 +7828,10 @@ msgid "" msgstr "" "Die größte druckbare Schichthöhe für den Extruder. Wird verwendet, um die " "maximale Schichthöhe zu begrenzen, wenn die adaptive Schichthöhe aktiviert " -"ist" +"ist." msgid "Minimum speed for part cooling fan" -msgstr "Mindestdrehzahl für Teillüfter" +msgstr "Mindestdrehzahl der Bauteilkühlung" msgid "" "Speed of auxiliary part cooling fan. Auxiliary fan will run at this speed " @@ -7850,7 +7840,7 @@ msgid "" msgstr "" "Geschwindigkeit des Hilfslüfters für die Teilekühlung. Der Hilfslüfter läuft " "während des Drucks mit dieser Geschwindigkeit, mit Ausnahme der ersten " -"Lagen, für die keine Kühlung vorgesehen ist" +"Schichten, für die keine Kühlung vorgesehen ist." msgid "Min" msgstr "Min" @@ -7861,19 +7851,21 @@ msgid "" msgstr "" "Die niedrigste druckbare Schichthöhe für den Extruder. Wird verwendet, um " "die minimale Schichthöhe zu begrenzen, wenn die adaptive Schichthöhe " -"aktiviert ist" +"aktiviert ist." msgid "Min print speed" msgstr "Minimale Druckgeschwindigkeit" msgid "The minimum printing speed when slow down for cooling" -msgstr "Die minimale Druckgeschwindigkeit bei Verlangsamung zum Abkühlen" +msgstr "" +"Die minimale Druckgeschwindigkeit wenn diese für eine bessere Kühlung " +"verringert wird." msgid "Nozzle diameter" -msgstr "Druckdüsendurchmesser" +msgstr "Düsendurchmesser" msgid "Diameter of nozzle" -msgstr "Druckdüsendurchmesser" +msgstr "Düsendurchmesser" msgid "Host Type" msgstr "Host-Typ" @@ -7886,7 +7878,7 @@ msgstr "" "muss die Art des Hosts enthalten." msgid "Nozzle volume" -msgstr "Volumen der Druckdüse" +msgstr "Volumen der Düse" msgid "Volume of nozzle between the cutter and the end of nozzle" msgstr "Volumen der Düse zwischen dem Messer und dem Ende der Düse" @@ -7895,9 +7887,7 @@ msgid "Start end points" msgstr "Anfangs- und Endpunkte" msgid "The start and end points which is from cutter area to garbage can." -msgstr "" -"Die Start- und Endpunkte, die vom Schneidebereich bis zur Überschussrutsche " -"reichen." +msgstr "Die Start- und Endpunkte, vom Schnittbereich bis zum Auswurfschacht." msgid "Reduce infill retraction" msgstr "Rückzug bei der Füllung verringern" @@ -7907,11 +7897,11 @@ msgid "" "oozing can't been seen. This can reduce times of retraction for complex " "model and save printing time, but make slicing and G-code generating slower" msgstr "" -"Kein zurückziehen des Filament, wenn sich das Verfahren des Druckkopfes " -"vollständig in einem Infill-Bereich befindet. Das bedeutet, dass das " -"herauslaufen des Filament nicht zu sehen ist. Dies kann die Zeit für das " -"zurückziehen von Filament bei komplexeren Modellen verkürzen und Druckzeit " -"sparen, macht aber das Slicen und die G-Code-Erstellung langsamer." +"Kein Rückzug, wenn sich die Bewegung des Druckkopfes vollständig in einem " +"Füllbereich befindet. Das bedeutet, dass das herauslaufen des Filaments " +"nicht zu sehen ist. Dies kann die Zeit für das zurückziehen des Filaments " +"bei komplexeren Modellen verkürzen und Druckzeit sparen, verlangsamt aber " +"das Slicen und die G-Code Generierung." msgid "Enable" msgstr "Aktivieren" @@ -7930,9 +7920,9 @@ msgid "" "Detect the overhang percentage relative to line width and use different " "speed to print. For 100%% overhang, bridge speed is used." msgstr "" -"Erkennen Sie den Prozentsatz des Überhangs im Verhältnis zur Linienbreite " -"und verwenden Sie unterschiedliche Druckgeschwindigkeiten. Bei 100%% " -"Überhang wird die Brückengeschwindigkeit verwendet." +"Erkennt den Prozentsatz des Überhangs im Verhältnis zur Linienbreite und " +"verwenden hierfür eine unterschiedliche Druckgeschwindigkeiten. Bei einem " +"100%% Überhang wird die Brückengeschwindigkeit verwendet." msgid "Line width of inner wall" msgstr "Linienbreite der Innenwand" @@ -7954,30 +7944,31 @@ msgid "" msgstr "" msgid "Raft contact Z distance" -msgstr "Floß Kontakt Z Abstand" +msgstr "Floß Z-Abstand" msgid "Z gap between object and raft. Ignored for soluble interface" -msgstr "Z-Lücke zwischen Objekt und Floß. Ignoriert für lösliche Schnittstelle" +msgstr "" +"Z-Lücke zwischen Objekt und Floß. Wird ignoriert für lösliche Schnittstellen." msgid "Raft expansion" msgstr "Floß Erweiterung" msgid "Expand all raft layers in XY plane" -msgstr "Alle Floßschichten in der XY-Ebene ausdehnen" +msgstr "Dadurch werden alle Floßschichten in der XY-Ebene erweitert." msgid "Initial layer density" -msgstr "Dichte der Anfangsschicht" +msgstr "Dichte der ersten Schicht" msgid "Density of the first raft or support layer" -msgstr "Dichte der ersten Schicht von Floß oder Support" +msgstr "Dichte der ersten Schicht von Floß oder Stützstrukturen" msgid "Initial layer expansion" msgstr "Ausdehnung der ersten Schicht" msgid "Expand the first raft or support layer to improve bed plate adhesion" msgstr "" -"Ausdehnung der ersten Floß- oder Support-Schicht um die Druckplattenhaftung " -"zu verbessern" +"Erweitern der ersten Floß- oder Stütz-Schicht um die Druckplattenhaftung zu " +"verbessern" msgid "Raft layers" msgstr "Floßschichten" @@ -7986,8 +7977,8 @@ msgid "" "Object will be raised by this number of support layers. Use this function to " "avoid wrapping when print ABS" msgstr "" -"Das Objekt wird um diese Anzahl von Supportschichten erhöht. Verwenden Sie " -"diese Funktion, um ein abheben beim Drucken von ABS zu vermeiden" +"Das Objekt wird um diese Anzahl von Stützschichten erhöht. Verwenden Sie " +"diese Funktion, um ein verziehen bei ABS zu vermeiden." msgid "" "G-code path is genereated after simplifing the contour of model to avoid too " @@ -7995,9 +7986,9 @@ msgid "" "resolution and more time to slice" msgstr "" "Der G-Code-Pfad wird nach der Vereinfachung der Kontur des Modells " -"generiert, um zu viele Punkte und G-Code-Linien in der G-Code-Datei zu " +"generiert, um zu viele Punkte und G-Code Befehle in der G-Code-Datei zu " "vermeiden. Ein kleinerer Wert bedeutet eine höhere Auflösung und mehr Zeit " -"zum Slicen" +"zum Slicen." msgid "Travel distance threshold" msgstr "Schwellenwert für die Fahrstrecke" @@ -8008,45 +7999,46 @@ msgid "" msgstr "Rückzug nur auslösen, wenn der Fahrweg länger als diese Schwelle ist" msgid "Retract amount before wipe" -msgstr "Einzugslänge vor einer Reinigung" +msgstr "Rückzugsmenge vor der Reinigung" msgid "" "The length of fast retraction before wipe, relative to retraction length" msgstr "" -"Die Länge des schnellen Einzugs vor dem Abwischen, relativ zur Einzugslänge" +"Die Länge des schnellen Rückzugs vor dem Abwischen, relativ zur " +"Rückzugslänge." msgid "Retract when change layer" -msgstr "Einziehen beim Ebenenwechsel" +msgstr "Zurückziehen beim Schichtwechsel" msgid "Force a retraction when changes layer" -msgstr "Erzwingen eines Einzugs bei Schichtwechsel" +msgstr "Erzwingen eines Rückzugs beim Schichtwechsel" msgid "Length" msgstr "Länge" msgid "Retraction Length" -msgstr "Einzugslänge" +msgstr "Rückzugslänge" msgid "" "Some amount of material in extruder is pulled back to avoid ooze during long " "travel. Set zero to disable retraction" msgstr "" -"Eine gewisse Menge an Material im Extruder wird zurückgezogen, um ein " -"Auslaufen bei langen Verfahrwegen zu vermeiden. Null einstellen, um den " -"Einzug zu deaktivieren" +"Menge an Material im Extruder zurückgezogen wird, um ein herauslaufen des " +"Filaments bei langen Verfahrwegen zu vermeiden. Null deaktiviert dein " +"Rückzug." msgid "Z hop when retract" -msgstr "Z-Hüpfen beim Einziehen" +msgstr "Z-Hop beim Rückzug" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " "clearance between nozzle and the print. It prevents nozzle from hitting the " "print when travel move. Using spiral line to lift z can prevent stringing" msgstr "" -"Bei jedem Rückzug wird die Druckdüse ein wenig angehoben, um einen Abstand " +"Bei jedem Rückzug wird die Düse ein wenig angehoben, um einen Abstand " "zwischen Düse und Druck zu schaffen. Dadurch wird verhindert, dass die Düse " "bei der Verfahrbewegung gegen den Druck stößt. Die Verwendung einer " -"Spirallinie zum Anheben von z kann Fadenbildung verhindern" +"Spirallinie zum Anheben von z kann Fadenbildung verhindern." msgid "Z Hop Type" msgstr "Z-Hop-Typ" @@ -8058,20 +8050,20 @@ msgid "Spiral" msgstr "Spirale" msgid "Retraction Speed" -msgstr "Einzugsgeschwindigkeit" +msgstr "Rückzugsgeschwindigkeit" msgid "Speed of retractions" -msgstr "Geschwindigkeit der Einzüge" +msgstr "Geschwindigkeit für den Rückzug" msgid "Deretraction Speed" -msgstr "Wiedereinzugsgeschwindigkeit" +msgstr "Einzugsgeschwindigkeit" msgid "" "Speed for reloading filament into extruder. Zero means same speed with " "retraction" msgstr "" -"Geschwindigkeit für das Nachladen von Filament in den Extruder. Null " -"bedeutet die gleiche Geschwindigkeit mit Einzug" +"Geschwindigkeit für das Einziehen von Filament in den Extruder nach einem " +"Rückzug. Null bedeutet die gleiche Geschwindigkeit wie der Rückzug." msgid "Seam position" msgstr "Nahtposition" @@ -8095,7 +8087,7 @@ msgid "Skirt distance" msgstr "Abstand der Schürze" msgid "Distance from skirt to brim or object" -msgstr "Abstand von der Schürze zum Rand oder zum Objekt" +msgstr "Abstand von der Schürze zum Rand oder zum Objekt." msgid "Skirt height" msgstr "" @@ -8108,7 +8100,8 @@ msgstr "Schürzenschlaufen" msgid "Number of loops for the skirt. Zero means disabling skirt" msgstr "" -"Anzahl der Schleifen für die Schürze. Null bedeutet Deaktivierung der Schürze" +"Anzahl der Schleifen für die Schürze. Null bedeutet die Schürze ist " +"deaktiviert." msgid "" "The printing speed in exported gcode will be slowed down, when the estimated " @@ -8116,7 +8109,7 @@ msgid "" msgstr "" "Die Druckgeschwindigkeit im exportierten G-Code wird verlangsamt, wenn die " "geschätzte Schichtzeit kürzer als dieser Wert ist, um eine bessere Kühlung " -"für diese Schichten zu erreichen" +"für diese Schichten zu erreichen." msgid "Minimum sparse infill threshold" msgstr "Mindestschwelle für Füllung" @@ -8125,18 +8118,19 @@ msgid "" "Sparse infill area which is smaller than threshold value is replaced by " "internal solid infill" msgstr "" -"Füllbereiche, die kleiner als der Schwellenwert sind, werden durch interne " -"massive Füllungen ersetzt" +"Innere Füllbereiche, die kleiner als dieser Wert sind, werden durch massive " +"Füllungen ersetzt." msgid "mm²" msgstr "mm²" msgid "Line width of internal solid infill" -msgstr "Linienstärke der internen massiven Füllung" +msgstr "Linienbreite der inneren massiven Füllung" msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "" -"Geschwindigkeit der inneren festen Füllung, nicht der Ober- und Unterseite" +"Geschwindigkeit der inneren massiven Füllungen, ohne die obere oder untere " +"Oberfläche." msgid "Spiral vase" msgstr "Spiralvase" @@ -8146,9 +8140,10 @@ msgid "" "model into a single walled print with solid bottom layers. The final " "generated model has no seam" msgstr "" -"Spiralize glättet die Z-Bewegungen der Außenkontur. Und verwandelt ein " -"Volumenmodell in einen einwandigen Druck mit soliden unteren Schichten. Das " -"endgültig erzeugte Modell hat keine Naht" +"Aktiviert die Spiralisierung, welche die Z-Bewegungen der Außenkontur " +"glättet und verwandelt ein Volumenmodell in einen einwandigen Druck mit " +"soliden unteren Schichten. Das endgültig erzeugte Modell hat dadurch keine " +"Naht." msgid "" "If smooth or traditional mode is selected, a timelapse video will be " @@ -8160,15 +8155,15 @@ msgid "" "process of taking a snapshot, prime tower is required for smooth mode to " "wipe nozzle." msgstr "" -"Wenn der Modus \"Smooth\" oder \"Traditionell\" ausgewählt ist, wird für " -"jeden Druck ein Zeitraffervideo erstellt. Nachdem jede Schicht gedruckt " -"wurde, wird mit der Kammerkamera ein Schnappschuss gemacht. Alle diese " -"Schnappschüsse werden nach Abschluss des Drucks zu einem Zeitraffervideo " -"zusammengesetzt. Wenn der glatte Modus ausgewählt ist, bewegt sich der " -"Werkzeugkopf nach dem Druck jeder Schicht zur Überschussrutsche und macht " -"dann einen Schnappschuss. Da das geschmolzene Filament während der Aufnahme " -"eines Schnappschusses aus der Düse austreten kann, ist für den Smooth-Modus " -"ein Prime-Turm erforderlich, um die Düse abzuwischen." +"Wenn der Modus \"Gleichmäßig\" oder \"Traditionell\" ausgewählt ist, wird " +"für jeden Druck ein Zeitraffervideo erstellt. Nachdem jede Schicht gedruckt " +"wurde, wird mit der Kamera ein Bild gemacht. Alle diese Bilder werden nach " +"Abschluss des Drucks zu einem Zeitraffervideo zusammengesetzt. Wenn der " +"gleichmäßige Modus ausgewählt ist, bewegt sich der Werkzeugkopf nach dem " +"Druck jeder Schicht zum Auswurfschacht und macht dann ein Bild. Da das " +"geschmolzene Filament während der Aufnahme aus der Düse austreten kann, ist " +"für den Gleichmäßig-Modus ein Reinigungsturm erforderlich, um die Düse " +"abzuwischen." msgid "Traditional" msgstr "Traditionell" @@ -8180,23 +8175,23 @@ msgid "Start G-code" msgstr "Start G-Code" msgid "Start G-code when start the whole printing" -msgstr "G-Code starten, wenn der gesamte Druckvorgang beginnt" +msgstr "G-Code hinzufügen, wenn der Druckvorgang beginnt" msgid "Start G-code when start the printing of this filament" -msgstr "G-Code starten, wenn der Druck dieses Filaments beginnt" +msgstr "G-Code hinzufügen, wenn der Druck dieses Filaments beginnt" msgid "Slice gap closing radius" -msgstr "Lückenschließenden Radius slicen" +msgstr "Slice-Lückenschlussradius" msgid "" "Cracks smaller than 2x gap closing radius are being filled during the " "triangle mesh slicing. The gap closing operation may reduce the final print " "resolution, therefore it is advisable to keep the value reasonably low." msgstr "" -"Risse, die kleiner als der 2-fache Radius des Lückenschlusses sind, werden " -"beim Slicen des Dreiecknetzes gefüllt. Der Vorgang des Lückenschließens kann " -"die endgültige Druckauflösung verringern, daher ist es ratsam, den Wert " -"einigermaßen niedrig zu halten." +"Risse, die kleiner als das 2-fache des Lückenschlussradius sind, werden beim " +"Slicen des Modellnetzes gefüllt. Der Vorgang des Lückenschließens kann die " +"endgültige Druckauflösung verringern, daher ist es ratsam, den Wert relativ " +"niedrig zu halten." msgid "Slicing Mode" msgstr "Slicing-Modus" @@ -8218,44 +8213,44 @@ msgid "Close holes" msgstr "Löcher schließen" msgid "Enable support" -msgstr "Support aktivieren" +msgstr "Stützstrukturen aktivieren" msgid "Enable support generation." -msgstr "Support-Erzeugung aktivieren." +msgstr "Erzeugung von Stützstrukturen aktivieren." msgid "" "normal(auto) and tree(auto) is used to generate support automatically. If " "normal(manual) or tree(manual) is selected, only support enforcers are " "generated" msgstr "" -"normal(auto) und Baum(auto) werden verwendet, um automatisch Supports zu " -"generieren. Wenn normal(manual) oder Baum(manual) ausgewählt ist, werden nur " -"Support Enforcer erzeugt" +"Normal (auto) und Baum (auto) werden verwendet, um automatisch " +"Stützstrukturen zu generieren. Wenn Normal (manuell) oder Baum (manuell) " +"ausgewählt ist, werden nur Stützerzwinger erzeugt." msgid "normal(auto)" -msgstr "Normal(automatisch)" +msgstr "Normal (auto)" msgid "tree(auto)" -msgstr "Baum(automatisch)" +msgstr "Baum (auto)" msgid "normal(manual)" -msgstr "normal (manuell)" +msgstr "Normal (manuell)" msgid "tree(manual)" msgstr "Baum (manuell)" msgid "Support/object xy distance" -msgstr "XY-Abstand der Supports zum Objekt" +msgstr "Stützen/Objekt XY-Abstand" msgid "XY separation between an object and its support" -msgstr "XY-Abstand zwischen einem Objekt und seinen Supports" +msgstr "XY-Abstand zwischen einem Objekt und seinen Stützstrukturen." msgid "Pattern angle" -msgstr "Muster Winkel" +msgstr "Winkel des Musters" msgid "Use this setting to rotate the support pattern on the horizontal plane." msgstr "" -"Verwenden Sie diese Einstellung, um das Supportmuster in der horizontalen " +"Verwenden Sie diese Einstellung, um das Stützmuster in der horizontalen " "Ebene zu drehen." msgid "On build plate only" @@ -8267,26 +8262,26 @@ msgstr "" "erzeugen" msgid "Support critical regions only" -msgstr "Supports nur unter kritischen Regionen" +msgstr "Nur kritische Bereiche stützen" msgid "" "Only create support for critical regions including sharp tail, cantilever, " "etc." msgstr "" -"Erstellen Sie nur Supports für kritische Bereiche, z. B. für steile Kanten, " -"Ausragungen, usw." +"Erstelle nur Stützstrukturen für kritische Bereiche, z. B. für steile " +"Kanten, Ausragungen, usw." msgid "Top Z distance" msgstr "Oberer Z-Abstand" msgid "The z gap between the top support interface and object" -msgstr "Die Z-Lücke zwischen der oberen Supportschnittstelle und dem Objekt" +msgstr "Der Z-Abstand zwischen der oberen Stütz-Schnittstelle und dem Objekt" msgid "Bottom Z distance" msgstr "Unterer Z-Abstand" msgid "The z gap between the bottom support interface and object" -msgstr "Die Z-Lücke zwischen der unteren Supportschnittstelle und dem Objekt" +msgstr "Der Z-Abstand zwischen der unteren Stütz-Schnittstelle und dem Objekt" msgid "Support/raft base" msgstr "" @@ -8295,21 +8290,21 @@ msgid "" "Filament to print support base and raft. \"Default\" means no specific " "filament for support and current filament is used" msgstr "" -"Filament zum Drucken von Supportbasen und Rafts. \"Standard\" bedeutet, dass " -"kein spezielles Filament für die Supports verwendet wird, sondern das " +"Filament zum Drucken von Stützbasen und Flöße. \"Standard\" bedeutet, dass " +"kein spezielles Filament für die Stützen verwendet wird, sondern das " "aktuelle Filament." msgid "Line width of support" -msgstr "Linienbreite des Support" +msgstr "Linienbreite der Stützen" msgid "Interface use loop pattern" -msgstr "Schnittstelle verwendet Schleifenmuster" +msgstr "Schleifenmuster-Schnittstelle" msgid "" "Cover the top contact layer of the supports with loops. Disabled by default." msgstr "" -"Deckt die obere Kontaktschicht der Supports mit Schleifen ab. Standardmäßig " -"deaktiviert." +"Deckt die obere Kontaktschicht der Stützstrukturen mit Schleifen ab. " +"Standardmäßig deaktiviert." msgid "Support/raft interface" msgstr "" @@ -8318,21 +8313,21 @@ msgid "" "Filament to print support interface. \"Default\" means no specific filament " "for support interface and current filament is used" msgstr "" -"Filament zum Drucken von Support-Schnittstellen. \"Standard\" bedeutet, dass " -"kein spezielles Filament für die Supportschnittstelle vorhanden ist und das " +"Filament zum Drucken von Stütz-Schnittstellen. \"Standard\" bedeutet, dass " +"kein spezielles Filament für die Stütz-Schnittstellen vorhanden ist und das " "aktuelle Filament verwendet wird." msgid "Top interface layers" -msgstr "Obere Schnittstellenschichten" +msgstr "Obere Schnittstellschichten" msgid "Number of top interface layers" -msgstr "Anzahl der oberen Schnittstellenschichten" +msgstr "Anzahl der oberen Schnittstellschichten" msgid "Bottom interface layers" -msgstr "Untere Schnittstellenschichten" +msgstr "Untere Schnittstellschichten" msgid "Top interface spacing" -msgstr "Oberer Schnittstellenabstand" +msgstr "Oberer Schnittstellabstand" msgid "Spacing of interface lines. Zero means solid interface" msgstr "Abstand der Schnittstellenlinien. Null bedeutet feste Schnittstelle" @@ -8342,16 +8337,17 @@ msgstr "Abstand der unteren Schnittstelle" msgid "Spacing of bottom interface lines. Zero means solid interface" msgstr "" -"Abstand der unteren Trennschichtlinien. Null bedeutet feste Schnittstelle" +"Abstand der unteren Trennschichtlinien der Stützstrukturen. Null bedeutet " +"eine solide Schnittstelle." msgid "Speed of support interface" -msgstr "Geschwindigkeit der Support-Schnittstelle" +msgstr "Geschwindigkeit der Stützstruktur-Schnittstellen." msgid "Base pattern" msgstr "Basismuster" msgid "Line pattern of support" -msgstr "Linienmuster der Supports" +msgstr "Linienmuster der Stützstrukturen" msgid "Rectilinear grid" msgstr "Rechtwinkliges Gitter" @@ -8367,9 +8363,9 @@ msgid "" "interface is Rectilinear, while default pattern for soluble support " "interface is Concentric" msgstr "" -"Linienmuster der Support-Schnittstelle. Das Standardmuster für nicht " -"lösliche Auflageschnittstellen ist Geradlinig, während das Standardmuster " -"für lösliche Auflageschnittstellen konzentrisch ist" +"Linienmuster der Stützstruktur-Schnittstelle. Das Standardmuster für nicht " +"lösliche Schnittstellen ist Geradlinig, während das Standardmuster für " +"lösliche Schnittstellen konzentrisch ist." msgid "Rectilinear Interlaced" msgstr "" @@ -8378,18 +8374,18 @@ msgid "Base pattern spacing" msgstr "Abstand des Grundmusters" msgid "Spacing between support lines" -msgstr "Abstände zwischen den Supportlinien" +msgstr "Abstände zwischen den Stützlinien" msgid "Normal Support expansion" -msgstr "Normale Supporterweiterung" +msgstr "Normale Stützerweiterung" msgid "Expand (+) or shrink (-) the horizontal span of normal support" msgstr "" -"Vergrößern (+) oder Verkleinern (-) der horizontalen Spannweite des normalen " -"Support" +"Vergrößern (+) oder Verkleinern (-) der horizontalen Spannweite der normalen " +"Stützen" msgid "Speed of support" -msgstr "Druckgeschwindigkeit für Supports" +msgstr "Druckgeschwindigkeit für Stützstrukturen." msgid "" "Style and shape of the support. For normal support, projecting the supports " @@ -8399,14 +8395,14 @@ msgid "" "a lot of material (default), while hybrid style will create similar " "structure to normal support under large flat overhangs." msgstr "" -"Stil und Form des Support. Bei normalem Support führt die Projektion der " -"Supports in ein regelmäßiges Raster zu stabileren Supports " -"(Standardeinstellung), während eng anliegende Supporttürme Material sparen " -"und die Narbenbildung am Objekt verringern.\n" -"Bei Baumsupports führt der schlanke Stil zu einer aggressiveren " +"Stil und Form der Stützstruktur. Bei normalem Stützen führt die Projektion " +"in ein regelmäßiges Raster zu stabileren Stützen (Standardeinstellung), " +"während eng anliegende Stütztürme Material sparen und die Narbenbildung am " +"Objekt verringern.\n" +"Bei Baumstützen führt der schlanke Stil zu einer aggressiveren " "Zusammenführung der Äste und spart viel Material (Standard), während der " -"hybride Stil bei großen flachen Überhängen eine ähnliche Struktur wie bei " -"normalen Supports erzeugt." +"Hybridmodus bei großen überhängenden Flächen eine ähnliche Struktur wie bei " +"normalen Stützstrukturen erzeugt." msgid "Snug" msgstr "Nahtlos" @@ -8415,13 +8411,13 @@ msgid "Tree Slim" msgstr "Baum schlank" msgid "Tree Strong" -msgstr "Baum Stark" +msgstr "Baum stark" msgid "Tree Hybrid" -msgstr "Baum Hybrid" +msgstr "Baum-Hybrid" msgid "Independent support layer height" -msgstr "Unabhängige Support-Schichthöhe" +msgstr "Unabhängige Stützstruktur-Schichthöhe" msgid "" "Support layer uses layer height independent with object layer. This is to " @@ -8436,8 +8432,8 @@ msgid "" "Support will be generated for overhangs whose slope angle is below the " "threshold." msgstr "" -"Für Überhänge, deren Neigungswinkel unter dem Schwellenwert liegt, wird " -"Support generiert." +"Für Überhänge, deren Neigungswinkel unter diesem Wert liegt, werden Stützen " +"generiert." msgid "Tree support branch angle" msgstr "Baumstütze Astwinkel" @@ -8457,23 +8453,23 @@ msgstr "Abstand der Baumstützenäste" msgid "" "This setting determines the distance between neighboring tree support nodes." msgstr "" -"Mit dieser Einstellung wird der Abstand zwischen benachbarten Stützknoten " -"des Baumes festgelegt." +"Mit dieser Einstellung wird der Abstand zwischen benachbarten Baum-" +"Stützknoten festgelegt." msgid "Tree support branch diameter" msgstr "Durchmesser des Stützastes eines Baumes" msgid "This setting determines the initial diameter of support nodes." -msgstr "Diese Einstellung bestimmt den Anfangsdurchmesser der Supportknoten." +msgstr "Diese Einstellung bestimmt den Anfangsdurchmesser der Stützknoten." msgid "Tree support wall loops" -msgstr "Wandschlaufen für Baumsupport" +msgstr "Wandschleifen für Baumstützen" msgid "This setting specify the count of walls around tree support" -msgstr "Diese Einstellung gibt die Anzahl der Wände um den Baumsupport an" +msgstr "Diese Einstellung gibt die Anzahl der Wände um die Baumstütze an." msgid "Nozzle temperature for layers after the initial one" -msgstr "Druckdüsentemperatur für Schichten nach der ersten Schicht" +msgstr "Düsentemperatur nach der ersten Schicht" msgid "Bed temperature difference" msgstr "Druckbetttemperaturdifferenz" @@ -8489,28 +8485,28 @@ msgstr "" "sich das Modell von der Bauplatte löst." msgid "Detect thin wall" -msgstr "Dünne Wand erkennen" +msgstr "Dünne Wänd erkennen" msgid "" "Detect thin wall which can't contain two line width. And use single line to " "print. Maybe printed not very well, because it's not closed loop" msgstr "" "Erkennt dünne Wände, die keine zwei Linienbreiten enthalten können. Und " -"verwendet eine einzelne Linie zum Drucken. Vielleicht nicht sehr gut " -"gedruckt, weil es keine geschlossene Schleife ist" +"verwendet eine einzelne Linie zum Drucken. Diese wird vielleicht nicht sehr " +"gut gedruckt, weil es keine geschlossene Schleife ist." msgid "" "This gcode is inserted when change filament, including T command to trigger " "tool change" msgstr "" "Dieser G-Code wird beim Filamentwechsel eingefügt, einschließlich des T-" -"Befehls zum Auslösen des Werkzeugwechsels" +"Befehls zum auslösen eines Werkzeugwechsels." msgid "Line width for top surfaces" -msgstr "Linienbreite für Oberseiten" +msgstr "Linienbreite für Oberflächen" msgid "Speed of top surface infill which is solid" -msgstr "Geschwindigkeit der festen Füllung der Oberseite" +msgstr "Geschwindigkeit der massiven Füllung der Oberseite." msgid "Top shell layers" msgstr "Obere Schalenschichten" @@ -8520,10 +8516,10 @@ msgid "" "layer. When the thickness calculated by this value is thinner than top shell " "thickness, the top shell layers will be increased" msgstr "" -"Dies ist die Anzahl der festen Schichten der oberen Schale, einschließlich " -"der oberen Oberflächenschicht. Wenn die mit diesem Wert berechnete Dicke " -"dünner ist als die Dicke der oberen Schale, werden die Schichten der oberen " -"Schale erhöht" +"Dies ist die Anzahl der massiven Schichten der oberen Schale, einschließlich " +"der Oberflächenschicht. Wenn die mit diesem Wert berechnete Dicke dünner ist " +"als die Dicke der oberen Schale, werden die Schichten der oberen Schale " +"erhöht." msgid "Top solid layers" msgstr "Obere massive Schichten" @@ -8538,18 +8534,17 @@ msgid "" "is disabled and thickness of top shell is absolutely determained by top " "shell layers" msgstr "" -"Die Anzahl der oberen Festkörperschichten wird beim Slicen erhöht, wenn die " -"durch die oberen Schalenschichten berechnete Dicke dünner als dieser Wert " -"ist. Dies kann verhindern, dass die Schale zu dünn wird, wenn die " -"Schichthöhe gering ist. 0 bedeutet, dass diese Einstellung deaktiviert ist " -"und die Dicke der oberen Schale absolut durch die oberen Schalenschichten " -"bestimmt wird" +"Die Anzahl der oberen festen Schichten wird beim Slicen erhöht, wenn die " +"obere Schalenstärke dünner als dieser Wert ist. Dies kann verhindern, dass " +"die Schale zu dünn wird, wenn eine geringe Schichthöhe verwendet wird. 0 " +"bedeutet, dass diese Einstellung deaktiviert ist und die Dicke der oberen " +"Schale absolut durch die oberen Schalenschichten bestimmt wird." msgid "Speed of travel which is faster and without extrusion" -msgstr "Verfahrgeschwindigkeit, welche schneller und ohne Extrusion ist" +msgstr "Eilgeschwindigkeit, wenn nicht extrudiert wird." msgid "Wipe while retracting" -msgstr "Während Einzug wischen" +msgstr "Während des Rückzugs wischen" msgid "" "Move nozzle along the last extrusion path when retracting to clean leaked " @@ -8557,7 +8552,7 @@ msgid "" msgstr "" "Bewegen Sie die Düse beim Zurückziehen entlang des letzten Extrusionsweges, " "um ausgetretenes Material an der Düse zu reinigen. Dies kann die Bildung von " -"Klecksen beim Drucken eines neuen Teils nach der Fahrt minimieren" +"Tropfen an einem neuen Teil nach der Fahrt minimieren." msgid "Wipe Distance" msgstr "Wischabstand" @@ -8565,30 +8560,31 @@ msgstr "Wischabstand" msgid "" "Discribe how long the nozzle will move along the last path when retracting" msgstr "" -"Beschreibt, wie lange sich die Düse beim Einziehen entlang der letzten Bahn " -"bewegt" +"Beschreibt, wie weit sich die Düse während dem Rückzug entlang der letzten " +"Bahn bewegt." msgid "" "Print a tower to prime material in nozzle after switching to a new material." msgstr "" -"Drucken Sie einen Turm, um das Material in der Druckdüse nach dem Wechsel zu " +"Drucken Sie einen Turm, um das Material in der Düse nach dem Wechsel zu " "einem neuen Material zu entfernen." msgid "Purging volumes" msgstr "Reinigungsvolumen" msgid "Flush multiplier" -msgstr "Multiplikator der Druckdüsensäuberung" +msgstr "Multiplikator der Düsenreinigung" msgid "" "The actual flushing volumes is equal to the flush multiplier multiplied by " "the flushing volumes in the table." msgstr "" -"Die tatsächliche Spülmenge entspricht dem Wert des Spülmultiplikators " -"multipliziert mit den in der Tabelle angegebenen Spülmengen." +"Das tatsächliche Reinigungsvolumen entspricht dem Wert des " +"Reinigungsmultiplikators multipliziert mit den in der Tabelle angegebenen " +"Reinigungsvolumen." msgid "Prime volume" -msgstr "Volumen an neuem Material" +msgstr "Reinigungsvolumen" msgid "The volume of material to prime extruder on tower." msgstr "Das Volumen des Materials, das der Extruder am Turm entladen soll." @@ -8597,7 +8593,7 @@ msgid "Width" msgstr "Breite" msgid "Width of prime tower" -msgstr "Breite des Prime-Turms" +msgstr "Breite des Reinigungsturms." msgid "" "Purging after filament change will be done inside objects' infills. This may " @@ -8605,20 +8601,21 @@ msgid "" "printed with transparent filament, the mixed color infill will be seen " "outside. It will not take effect, unless the prime tower is enabled." msgstr "" -"Die Spülung nach dem Filamentwechsel erfolgt innerhalb der Füllungen der " -"Objekte. Dies kann die Abfallmenge verringern und die Druckzeit verkürzen. " -"Wenn die Wände mit transparentem Filament gedruckt werden, ist die gemischte " -"Farbe der Füllung sichtbar. Sie wird nur dann wirksam, wenn der Prime-Tower " -"aktiviert ist." +"Die Reinigung nach dem Filamentwechsel erfolgt innerhalb der Objektfüllung. " +"Dies kann die Abfallmenge verringern und die Druckzeit verkürzen. Wenn die " +"Wände mit transparentem Filament gedruckt werden, sind die unterschiedlichen " +"Farben der Füllung sichtbar. Die Funktion ist nur dann wirksam, wenn der " +"Reinigungsturm aktiviert ist." msgid "" "Purging after filament change will be done inside objects' support. This may " "lower the amount of waste and decrease the print time. It will not take " "effect, unless the prime tower is enabled." msgstr "" -"Die Spülung nach dem Filamentwechsel erfolgt innerhalb des Supports. Dies " -"kann die Abfallmenge verringern und die Druckzeit verkürzen. Die Funktion " -"ist nur dann wirksam, wenn ein Prime-Tower aktiviert ist." +"Die Reinigung nach dem Filamentwechsel erfolgt innerhalb der " +"Stützstrukturen. Dies kann die Abfallmenge verringern und die Druckzeit " +"verkürzen. Die Funktion ist nur dann wirksam, wenn der Reinigungsturm " +"aktiviert ist." msgid "" "This object will be used to purge the nozzle after a filament change to save " @@ -8626,9 +8623,9 @@ msgid "" "as a result. It will not take effect, unless the prime tower is enabled." msgstr "" "Dieses Objekt wird verwendet, um die Düse nach einem Filamentwechsel zu " -"spülen, um Filament zu sparen und die Druckzeit zu verkürzen. Die Farben der " -"Objekte werden dadurch gemischt. Es wird nicht wirksam, wenn der Prime-Tower " -"nicht aktiviert ist." +"reinigen, Filament zu sparen und die Druckzeit zu verkürzen. Die Farben der " +"Objekte werden dadurch gemischt. Dies wird nur wirksam, wenn der " +"Reinigungsturm aktiviert ist." msgid "X-Y hole compensation" msgstr "X-Y-Loch-Kompensation" @@ -8638,11 +8635,10 @@ msgid "" "Positive value makes holes bigger. Negative value makes holes smaller. This " "function is used to adjust size slightly when the object has assembling issue" msgstr "" -"Die Löcher des Objekts werden in der XY-Ebene um den eingestellten Wert " +"Löcher des Objekts werden in der XY-Ebene um den eingestellten Wert " "vergrößert oder verkleinert. Ein positiver Wert macht die Löcher größer, ein " "negativer Wert macht die Löcher kleiner. Diese Funktion wird verwendet, um " -"die Größe geringfügig anzupassen, wenn das Objekt ein Problem beim " -"Zusammenbau hat" +"die Größe geringfügig anzupassen, wenn Objekte Montageprobleme haben." msgid "X-Y contour compensation" msgstr "X-Y-Konturkompensation" @@ -8653,20 +8649,19 @@ msgid "" "smaller. This function is used to adjust size slightly when the object has " "assembling issue" msgstr "" -"Die Kontur des Objekts wird in der XY-Ebene um den eingestellten Wert " -"vergrößert oder verkleinert. Ein positiver Wert macht die Kontur größer, ein " -"negativer Wert macht die Kontur kleiner. Diese Funktion wird verwendet, um " -"die Größe geringfügig anzupassen, wenn das Objekt ein Problem beim " -"Zusammensetzen hat" +"Die Kontur von Objekten wird in der XY-Ebene um den eingestellten Wert " +"vergrößert oder verkleinert. Positive Werte vergrößern Konturen, negative " +"Werte verkleinern Konturen. Diese Funktion wird verwendet, um die Größe " +"geringfügig anzupassen, wenn Objekte Probleme bei der Montage haben." msgid "" "Classic wall generator produces walls with constant extrusion width and for " "very thin areas is used gap-fill. Arachne engine produces walls with " "variable extrusion width" msgstr "" -"Der klassische Wandgenerator erzeugt Wände mit konstanter Extrusionsbreite " -"und für sehr dünne Bereiche wird das Lückenfüllverfahren verwendet. Die " -"Arachne-Engine erzeugt Wände mit variabler Extrusionsbreite." +"Der klassische Wandgenerator erzeugt Wände mit konstanter Extrusionsbreite, " +"wobei für sehr dünne Bereiche die Lückenfüllung verwendet wird. Die Arachne-" +"Engine erzeugt Wände mit variabler Extrusionsbreite." msgid "Classic" msgstr "Klassisch" @@ -8684,7 +8679,7 @@ msgid "" msgstr "" "Beim Übergang zwischen verschiedenen Wandstärken, wenn das Teil dünner wird, " "wird eine bestimmte Menge an Platz zum Trennen oder Verbinden der " -"Wandsegmente zugewiesen. Er wird als Prozentsatz des Düsendurchmessers " +"Wandsegmente zugewiesen. Wird als Prozentsatz des Düsendurchmessers " "ausgedrückt." msgid "Wall transitioning filter margin" @@ -8700,12 +8695,12 @@ msgid "" "percentage over nozzle diameter" msgstr "" "Verhindern Sie das Hin- und Herwechseln zwischen einer zusätzlichen Wand und " -"einer weniger. Diese Spanne erweitert den Bereich der folgenden " -"Extrusionsbreiten auf [Mindestwandbreite - Spanne, 2 * Mindestwandbreite + " -"Spanne]. Durch die Vergrößerung dieser Spanne wird die Anzahl der Übergänge " -"reduziert, was die Anzahl der Extrusionsstarts/-stopps und die Verfahrzeit " -"verringert. Eine große Variation der Extrusionsbreite kann jedoch zu Unter- " -"oder Überextrusionsproblemen führen. Er wird als Prozentsatz des " +"einer weniger. Diese Spanne erweitert den Bereich der Extrusionsbreiten auf " +"[Mindestwandbreite - Spanne, 2 * Mindestwandbreite + Spanne]. Durch die " +"Vergrößerung dieses Bereichs wird die Anzahl der Übergänge reduziert, was " +"die Anzahl der Extrusionsstarts/-stopps und die Verfahrzeit verringert. Eine " +"große Variation der Extrusionsbreite kann jedoch zu Unter- oder " +"Überextrusionsproblemen führen. Er wird als Prozentsatz des " "Düsendurchmessers ausgedrückt" msgid "Wall transitioning threshold angle" @@ -8718,12 +8713,12 @@ msgid "" "this setting reduces the number and length of these center walls, but may " "leave gaps or overextrude" msgstr "" -"Wann Übergänge zwischen einer geraden und einer ungeraden Anzahl von Wänden " +"Wenn Übergänge zwischen einer geraden und einer ungeraden Anzahl von Wänden " "erstellt werden sollen. Eine Keilform mit einem größeren Winkel als dieser " "Einstellung hat keine Übergänge und es werden keine Wände in der Mitte " "gedruckt, um den verbleibenden Raum zu füllen. Wenn Sie diese Einstellung " -"verringern, wird die Anzahl und Länge der mittleren Wände reduziert, aber es " -"können Lücken oder Überstände entstehen." +"verringern, wird die Anzahl und Länge der mittleren Wände reduziert, was " +"jedoch Lücken oder Überextrusion verursachen kann." msgid "Wall distribution count" msgstr "Anzahl der Wandverteilungen" @@ -8747,8 +8742,8 @@ msgid "" msgstr "" "Mindestdicke für dünne Features. Modellfeatures, die dünner als dieser Wert " "sind, werden nicht gedruckt, während Features, die dicker als die " -"Mindestfeaturegröße sind, auf die Mindestwandbreite verbreitert werden. Er " -"wird als Prozentsatz über dem Düsendurchmesser ausgedrückt." +"Mindestfeaturegröße sind, auf die Mindestwandbreite verbreitert werden. " +"Bezogen als Prozentsatz auf Düsendurchmesser." msgid "Minimum wall width" msgstr "Minimale Wandbreite" @@ -8761,20 +8756,20 @@ msgid "" msgstr "" "Breite der Wand, die dünne Features (entsprechend der Mindest-Featuregröße) " "des Modells ersetzen wird. Wenn die minimale Wandbreite dünner ist als die " -"Dicke des Features, wird die Wand so dick wie das Feature selbst. Sie wird " -"als Prozentsatz des Düsendurchmessers ausgedrückt." +"Dicke des Features, wird die Wand so dick wie das Feature selbst. Wird als " +"Prozentsatz des Düsendurchmessers angegeben." msgid "Detect narrow internal solid infill" -msgstr "Erkennen einer schmalen internen festen Füllung" +msgstr "Erkennen einer schmalen internen soliden Füllung" msgid "" "This option will auto detect narrow internal solid infill area. If enabled, " "concentric pattern will be used for the area to speed printing up. " "Otherwise, rectilinear pattern is used defaultly." msgstr "" -"Mit dieser Option wird ein schmaler interner Füllbereich automatisch " -"erkannt. Wenn diese Option aktiviert ist, wird ein konzentrisches Muster für " -"den Bereich verwendet, um den Druck zu beschleunigen. Andernfalls wird " +"Mit dieser Option wird ein schmaler innerer Füllbereich automatisch erkannt. " +"Wenn diese Option aktiviert ist, wird ein konzentrisches Muster für den " +"Bereich verwendet, um den Druck zu beschleunigen. Andernfalls wird " "standardmäßig ein geradliniges Muster verwendet." msgid "invalid value " @@ -8794,10 +8789,10 @@ msgid " not in range " msgstr "" msgid "Export 3MF" -msgstr "Exportiere 3MF" +msgstr "3mf exportieren" msgid "Export project as 3MF." -msgstr "Projekt als 3MF exportieren." +msgstr "Projekt als 3mf exportieren." msgid "Export slicing data" msgstr "Slicing-Daten exportieren" @@ -8816,7 +8811,7 @@ msgstr "Slice" msgid "Slice the plates: 0-all plates, i-plate i, others-invalid" msgstr "" -"Slicen sie die Druckplatten: 0-alle Druckplatten; i-Druckplatte i; andere-" +"Slicen sie die Druckplatten: 0-alle Druckplatten; i-Druckplatte i; andere " "ungültig" msgid "Show command help." @@ -8914,7 +8909,7 @@ msgid "Output directory for the exported files." msgstr "Ausgabeverzeichnis für die exportierten Dateien." msgid "Debug level" -msgstr "Fehlersuchstufe" +msgstr "Debug-Level" msgid "" "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" @@ -8927,22 +8922,22 @@ msgid "Error in zip archive" msgstr "Fehler im Zip-Archiv" msgid "Generating walls" -msgstr "Erzeugen von Wänden" +msgstr "Generieren von Wänden" msgid "Generating infill regions" -msgstr "Generierung von Füllbereichen" +msgstr "Generieren von Füllbereichen" msgid "Generating infill toolpath" -msgstr "Füllwerkzeugweg generieren" +msgstr "Füllbewegungen generieren" msgid "Detect overhangs for auto-lift" -msgstr "Erkennen Sie Überhänge für automatisches Anheben" +msgstr "Erkennen der Überhänge für das automatische Anheben" msgid "Generating support" -msgstr "Support generieren" +msgstr "Generieren von Stützstrukturen" msgid "Checking support necessity" -msgstr "Überprüfung der Notwendigkeit der Supports" +msgstr "Überprüfung der Notwendigkeit von Stützen" msgid "floating regions" msgstr "" @@ -8986,34 +8981,34 @@ msgstr "" #, c-format, boost-format msgid "Support: generate toolpath at layer %d" -msgstr "Support: Werkzeugpfad auf Ebene %d erzeugen" +msgstr "Stützen: Werkzeugpfad auf Ebene %d erzeugen" msgid "Support: detect overhangs" -msgstr "Support: Überhänge erkennen" +msgstr "Stützen: Überhänge erkennen" msgid "Support: generate contact points" -msgstr "Support: Kontaktstellen erstellen" +msgstr "Stützen: Kontaktstellen erstellen" msgid "Support: propagate branches" -msgstr "Support: Zweige vermehren" +msgstr "Stützen: Zweige vermehren" msgid "Support: draw polygons" -msgstr "Support: Polygone zeichnen" +msgstr "Stützen: Polygone zeichnen" msgid "Support: generate toolpath" -msgstr "Support: Werkzeugweg generieren" +msgstr "Stützen: Werkzeugweg generieren" #, c-format, boost-format msgid "Support: generate polygons at layer %d" -msgstr "Support: Polygone auf Ebene %d erzeugen" +msgstr "Stützen: Polygone auf Ebene %d erzeugen" #, c-format, boost-format msgid "Support: fix holes at layer %d" -msgstr "Support: Löcher in Schicht %d repairieren" +msgstr "Stützen: Löcher in Schicht %d reparieren" #, c-format, boost-format msgid "Support: propagate branches at layer %d" -msgstr "Support: Verbreiten von Zweigen auf Ebene %d" +msgstr "Stützen: Verbreiten von Zweigen auf Ebene %d" #: resources/data/hints.ini: [hint:3D Scene Operations] msgid "" @@ -9031,9 +9026,9 @@ msgid "" "Did you know that you can cut a model at any angle and position with the " "cutting tool?" msgstr "" -"Schneidewerkzeug\n" -"Wussten Sie, dass Sie mit dem Schneidewerkzeug ein Modell in jedem " -"beliebigen Winkel und jeder beliebigen Position schneiden können?" +"Schnittwerkzeug\n" +"Wussten Sie, dass Sie mit dem Schnittwerkzeug ein Modell in jedem beliebigen " +"Winkel und jeder beliebigen Position zerschneiden können?" #: resources/data/hints.ini: [hint:Fix Model] msgid "" @@ -9125,7 +9120,7 @@ msgid "" msgstr "" "In Objekte/Teile aufteilen\n" "Wussten Sie, dass Sie ein großes Objekt in kleine Teile aufteilen können, um " -"es leichter einzufärben oder zu drucken?" +"es leichter einzufärben oder drucken zu können?" #: resources/data/hints.ini: [hint:Subtract a Part] msgid "" @@ -9135,10 +9130,10 @@ msgid "" "directly in Bambu Studio. Read more in the documentation." msgstr "" "Ein Teil subtrahieren\n" -"Wussten Sie, dass Sie mit dem \"negatives Teil Modifikator\" ein Mesh von " +"Wussten Sie, dass Sie mit dem \"negatives Teil Modifikator\" ein Netz von " "einem anderen subtrahieren können? Auf diese Weise können Sie z.B. leicht " -"veränderbare Löcher direkt in Bambu Studio erstellen. Lesen Sie mehr in der " -"Dokumentation." +"veränderbare Löcher direkt in Bambu Studio erstellen. Lesen Sie mehr dazu in " +"der Dokumentation." #: resources/data/hints.ini: [hint:STEP] msgid "" @@ -9152,7 +9147,7 @@ msgstr "" "Wussten Sie, dass Sie Ihre Druckqualität verbessern können, indem Sie eine " "STEP-Datei anstelle einer STL-Datei slicen?\n" "Bambu Studio unterstützt das Slicen von STEP-Dateien und liefert glattere " -"Ergebnisse als ein STL mit geringerer Auflösung. Probieren Sie es aus!" +"Ergebnisse als eine STL mit geringerer Auflösung. Probiere es aus!" #: resources/data/hints.ini: [hint:Z seam location] msgid "" @@ -9164,8 +9159,8 @@ msgstr "" "Position der Z-Naht\n" "Wussten Sie, dass Sie die Position der Z-Naht anpassen und sie sogar auf " "Ihren Druck malen können, um sie an einer weniger sichtbaren Stelle " -"anzubringen? Dadurch wird das Gesamtbild Ihres Modells verbessert. Probieren " -"Sie es aus!" +"anzubringen? Dadurch wird das Gesamtbild Ihres Modells verbessert. Probiere " +"es aus!" #: resources/data/hints.ini: [hint:Fine-tuning for flow rate] msgid "" @@ -9174,11 +9169,11 @@ msgid "" "prints? Depending on the material, you can improve the overall finish of the " "printed model by doing some fine-tuning." msgstr "" -"Feinabstimmung der Flussrate\n" -"Wussten Sie, dass die Fließgeschwindigkeit des Filament fein abgestimmt " +"Feineinstellung der Flussrate\n" +"Wussten Sie, dass die Flussgeschwindigkeit des Filament fein eingestellt " "werden kann, um noch besser aussehende Drucke zu erhalten? Je nach Material " "können Sie das Gesamtergebnis des gedruckten Modells verbessern, indem Sie " -"eine Feinabstimmung vornehmen." +"eine Feineinstellung vornehmen." #: resources/data/hints.ini: [hint:Split your prints into plates] msgid "" @@ -9187,10 +9182,10 @@ msgid "" "individual plates ready to print? This will simplify the process of keeping " "track of all the parts." msgstr "" -"Drucke in Druckplatten aufteilen\n" +"Drucke in mehrere Druckplatten aufteilen\n" "Wussten Sie, dass Sie ein Modell, das aus vielen Teilen besteht, in einzelne " -"druckfertige Druckplatten aufteilen können? Dadurch wird es einfacher, den " -"Überblick über alle Teile zu behalten." +"Druckplatten aufteilen können? Dadurch wird es einfacher, den Überblick über " +"alle Teile zu behalten." #: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer #: Height] @@ -9199,9 +9194,9 @@ msgid "" "Did you know that you can print a model even faster, by using the Adaptive " "Layer Height option? Check it out!" msgstr "" -"Beschleunigen Sie Ihren Druck mit Adaptiver Schichthöhe\n" +"Beschleunigen Sie Ihren Druck mit adaptiven Schichthöhe\n" "Wussten Sie, dass Sie ein Modell noch schneller drucken können, wenn Sie die " -"Option \"Adaptive Schichthöhe\" verwenden? Probieren Sie es aus!" +"Option \"Adaptive Schichthöhe\" verwenden? Probiere es aus!" #: resources/data/hints.ini: [hint:Support painting] msgid "" @@ -9210,9 +9205,9 @@ msgid "" "makes it easy to place the support material only on the sections of the " "model that actually need it." msgstr "" -"Supports malen\n" -"Wussten Sie, dass Sie die Position der Supports aufmalen können? Diese " -"Funktion macht es einfach, das Stützmaterial nur auf den Abschnitten des " +"Stützen malen\n" +"Wussten Sie, dass Sie die Position der Stützen aufmalen können? Diese " +"Funktion macht es möglich, das Stützmaterial nur auf die Bereiche des " "Modells zu platzieren, die es tatsächlich benötigen." #: resources/data/hints.ini: [hint:Different types of supports] @@ -9222,10 +9217,10 @@ msgid "" "supports work great for organic models, while saving filament and improving " "print speed. Check them out!" msgstr "" -"Verschiedene Arten von Supports\n" -"Wussten Sie, dass Sie zwischen verschiedenen Arten von Supports wählen " -"können? Baumsupport eignet sich hervorragend für organische Modelle, spart " -"Filament und erhöht die Druckgeschwindigkeit. Probieren Sie sie aus!" +"Verschiedene Arten von Stützstrukturen\n" +"Wussten Sie, dass Sie zwischen verschiedenen Arten von Stützen wählen " +"können? Baumstützen eignet sich hervorragend für organische Modelle, sparen " +"Filament und erhöhen die Druckgeschwindigkeit. Probiere sie aus!" #: resources/data/hints.ini: [hint:Printing Silk Filament] msgid "" @@ -9234,9 +9229,9 @@ msgid "" "successfully? Higher temperature and lower speed are always recommended for " "the best results." msgstr "" -"Drucken von Silkfilament\n" -"Wussten Sie, dass Silkfilament besondere Aufmerksamkeit erfordert, um " -"erfolgreich zu drucken? Eine höhere Temperatur und eine niedrigere " +"Drucken von Silkfilamenten\n" +"Wussten Sie, dass Silkfilamente besondere Bedingungen erfordern, um " +"erfolgreich gedruckt zu werden? Eine höhere Temperatur und eine niedrigere " "Geschwindigkeit werden immer empfohlen, um die besten Ergebnisse zu erzielen." #: resources/data/hints.ini: [hint:Brim for better adhesion] @@ -9256,8 +9251,8 @@ msgid "" "one time?" msgstr "" "Parameter für mehrere Objekte festlegen\n" -"Wussten Sie schon, dass Sie die Parameter für das Slicing für alle " -"ausgewählten Objekte gleichzeitig festlegen können?" +"Wussten Sie schon, dass Sie die Slicingparameter für alle ausgewählten " +"Objekte gleichzeitig festlegen können?" #: resources/data/hints.ini: [hint:Stack objects] msgid "" @@ -9273,10 +9268,10 @@ msgid "" "Did you know that you can save the wasted filament by flushing them into " "support/objects/infill during filament change?" msgstr "" -"Spülen in Support/Objekte/Füllung\n" +"Reinigen in Stützstrukturen/Objekten/Füllungen\n" "Wussten Sie schon, dass Sie die Menge an verschwendetem Filament reduzieren " -"können, indem Sie es während des Filamentwechsels in Support/Objekte/Füllung " -"spülen?" +"können, indem Sie es während des Filamentwechsels in Stützstrukturen/" +"Objekten/Füllungen reinigen?" #: resources/data/hints.ini: [hint:Improve strength] msgid "" @@ -9288,122 +9283,21 @@ msgstr "" "Wussten Sie, dass Sie die Festigkeit des Modells durch mehr Wandschleifen " "und eine höhere Dichte der Füllung verbessern können?" -#~ msgid "" -#~ "Arachne engine only works when overhang slowing down is disabled.\n" -#~ "This may cause decline in the quality of overhang surface when print " -#~ "fastly" -#~ msgstr "" -#~ "Die Arachne-Engine funktioniert nur, wenn die Überhangverlangsamung " -#~ "deaktiviert ist.\n" -#~ "Dies kann zu einer Verschlechterung der Qualität der Überhangsfläche " -#~ "führen, wenn schnell gedruckt wird." - -#~ msgid "" -#~ "Disable overhang slowing down automatically? \n" -#~ "Yes - Enable arachne and disable overhang slowing down\n" -#~ "No - Give up using arachne this time" -#~ msgstr "" -#~ "Automatische Verlangsamung des Überhangs deaktivieren?\n" -#~ "Ja - Arachne aktivieren und die Überhangsverlangsamung deaktivieren\n" -#~ "Nein - Arachne für diesen Druck nicht verwenden" - -#~ msgid "Start" -#~ msgstr "Starten" - -#~ msgid "G-code" -#~ msgstr "G-Code" - -#~ msgid "Backup" -#~ msgstr "Sicherung" - -#~ msgid "Backup interval" -#~ msgstr "Sicherungsintervall" - -#, c-format, boost-format -#~ msgid "The %s filament is too soft to be used with the AMS" -#~ msgstr "Das %s Filament ist zu weich für die Verwendung mit dem AMS" - -#, c-format, boost-format -#~ msgid "" -#~ "It seems object %s has completely floating regions. Please re-orient the " -#~ "object or enable support generation." -#~ msgstr "" -#~ "Es scheint, dass das Objekt %s vollständig schwebende Bereiche hat. Bitte " -#~ "richten Sie das Objekt neu aus oder aktivieren Sie die Supportgenerierung." - -#, c-format, boost-format -#~ msgid "" -#~ "It seems object %s has large overhangs. Please enable support generation." -#~ msgstr "" -#~ "Es scheint, dass Objekt %s große Überhänge hat. Bitte aktivieren Sie die " -#~ "Support-Generierung." - -#~ msgid "\\u2103" -#~ msgstr "\\ u2103" - -#~ msgid "mm\\u00B3" -#~ msgstr "mm\\u00B3" - -#~ msgid "" -#~ "Spiral mode only works when wall loops is 1, support is disabled, top " -#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " -#~ "traditional" -#~ msgstr "" -#~ "Der Spiralmodus funktioniert nur, wenn die Wandschleifen 1 sind, Support " -#~ "deaktiviert ist, die oberen Schalenschichten 0 sind, die Füllungsdichte 0 " -#~ "ist und der Zeitraffertyp traditionell ist." - -#~ msgid "Keep upper part" -#~ msgstr "Oberen Teil behalten" - -#~ msgid "Keep lower part" -#~ msgstr "Unteren Teil behalten" - -#~ msgid "AMS auto switch filament" -#~ msgstr "Filament in AMS automatisch wechseln" - -#~ msgid "" -#~ "When using support material for the support interface, We recommend the " -#~ "following settings:\n" -#~ "0 top z distance, 0 interface spacing, concentric pattern." -#~ msgstr "" -#~ "Bei der Verwendung von Supportmaterial für die Support-Schnittstelle " -#~ "empfehlen wir die folgenden Einstellungen:\n" -#~ "0 oberer Z-Abstand, 0 Schnittstellenabstand, konzentrisches Muster." - -#~ msgid "" -#~ "The P1P printer does not support smooth timelapse, use traditional " -#~ "timelapse instead." -#~ msgstr "" -#~ "Der P1P-Drucker unterstützt keine smoothen Zeitraffer, bitte verwenden " -#~ "Sie stattdessen traditionelle Zeitraffer." - -#~ msgid "Support base" -#~ msgstr "Supportbasis" - -#~ msgid "" -#~ "Support layer uses layer height independent with object layer. This is to " -#~ "support customizing z-gap and save print time." -#~ msgstr "" -#~ "Die Supportebene verwendet eine von der Objektebene unabhängige " -#~ "Ebenenhöhe. Dies unterstützt die Anpassung der Z-Lücke und spart " -#~ "Druckzeit." - #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " #~ "printing." #~ msgstr "" #~ "\n" -#~ "%1% liegt zu nahe am Ausschlussbereich, beim Drucken kommt es zu " -#~ "Kollisionen." +#~ "%1% liegt zu nahe an einem ausgeschlossenen Bereich. Beim Drucken kommt " +#~ "es zu Kollisionen." #~ msgid "" #~ "%1% is too close to exclusion area, there will be collisions when " #~ "printing." #~ msgstr "" -#~ "%1% liegt zu nahe am Ausschlussbereich, beim Drucken kommt es zu " -#~ "Kollisionen." +#~ "%1% liegt zu nahe an einem ausgeschlossenen Bereich. Beim Drucken kommt " +#~ "es zu Kollisionen." #~ msgid "&Edit" #~ msgstr "&Bearbeiten" @@ -9414,6 +9308,9 @@ msgstr "" #~ msgid "AMSMaterialsSetting" #~ msgstr "AMS Materialien Einstellung" +#~ msgid "AMS auto switch filament" +#~ msgstr "Filament im AMS automatisch wechseln" + #~ msgid "AWS PRE host" #~ msgstr "AWS PRE-Host" @@ -9421,7 +9318,7 @@ msgstr "" #~ msgstr "AWS-Host" #~ msgid "Actual Volume = Flushing Volume * Multiplier" -#~ msgstr "Tatsächliches Volumen = Spülvolumen * Multiplikator" +#~ msgstr "Tatsächliches Volumen = Reinigungsvolumen * Multiplikator" #~ msgid "Adaptive layer height" #~ msgstr "Adaptive Schichthöhe" @@ -9435,7 +9332,17 @@ msgstr "" #~ msgstr "" #~ "Ein Objekt ragt über die Begrenzung der Druckplatte.\n" #~ "Lösen Sie das Problem, indem Sie es vollständig innerhalb oder außerhalb " -#~ "der Druckplatte verschieben." +#~ "der Druckplatte platzieren." + +#~ msgid "" +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly" +#~ msgstr "" +#~ "Die Arachne-Engine funktioniert nur, wenn die Überhangverlangsamung " +#~ "deaktiviert ist.\n" +#~ "Dies kann zu einer Verschlechterung der Qualität der Überhänge führen, " +#~ "wenn schnell gedruckt wird." #~ msgid "" #~ "Arachne engine only works when overhang slowing down is disabled.\n" @@ -9444,8 +9351,8 @@ msgstr "" #~ msgstr "" #~ "Die Arachne-Engine funktioniert nur, wenn die Überhangverlangsamung " #~ "deaktiviert ist.\n" -#~ "Dies kann dazu führen, dass die Qualität der Überhangsflächen beim " -#~ "schnellen Drucken abnimmt.\n" +#~ "Dies kann zu einer Verschlechterung der Qualität der Überhänge führen, " +#~ "wenn schnell gedruckt wird.\n" #~ msgid "Auto arrange" #~ msgstr "Automatische Anordnung" @@ -9462,7 +9369,13 @@ msgstr "" #~ msgstr "Hilfskühlung" #~ msgid "Avoid crossing wall when travel" -#~ msgstr "Vermeiden Sie das Überqueren von Mauern während der Fahrt" +#~ msgstr "Vermeiden Sie das Überqueren von Wänden während der Fahrt" + +#~ msgid "Backup" +#~ msgstr "Sicherung" + +#~ msgid "Backup interval" +#~ msgstr "Sicherungsintervall" #~ msgid "" #~ "Bed exclude area that can't used as printable area in X-Y plane. For " @@ -9473,17 +9386,17 @@ msgstr "" #~ "Das Druckbett schließt den Bereich aus, der in der X-Y-Ebene nicht als " #~ "druckbarer Bereich verwendet werden kann. Zum Beispiel der untere linke " #~ "Bereich, der beim Mehrfarbendruck mit einem AMS zum Schneiden des " -#~ "Filaments in X1 verwendet wird. Der Bereich wird als Polygon durch Punkte " -#~ "im folgenden Format ausgedrückt: \"XxY, XxY, ...\"" +#~ "Filaments beim X1 verwendet wird. Der Bereich wird als Polygon durch " +#~ "Punkte im folgenden Format ausgedrückt: \"XxY, XxY, ...\"" #~ msgid "" #~ "Bed temperature is higher than vitrification temperature of this " #~ "filament.\n" #~ "This may cause nozzle blocked and printing failure" #~ msgstr "" -#~ "Die Temperatur des Druckbett ist höher als die Verglasungstemperatur " -#~ "dieses Filaments.\n" -#~ "Dies kann zu einer Verstopfung der Düse und zu Druckfehlern führen" +#~ "Die Temperatur des Druckbett ist höher als die Verglasungstemperatur des " +#~ "Filaments.\n" +#~ "Dies kann zu einer Verstopfung der Düse und zu Druckfehlern führen." #~ msgid "" #~ "Calibration completed. Please select the factors according to the left " @@ -9503,10 +9416,10 @@ msgstr "" #~ "Bambu Studio im selben LAN?" #~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" -#~ msgstr "Wählen sie eine oder mer Dateien (3mf/step/stl/obj/amf):" +#~ msgstr "Wählen Sie eine oder mehrere Dateien aus (3mf/step/stl/obj/amf):" #~ msgid "Choose save directory" -#~ msgstr "Speicherordner wählen" +#~ msgstr "Speicherordner auswählen" #~ msgid "Clean" #~ msgstr "Reinigen" @@ -9518,15 +9431,15 @@ msgstr "" #~ "Clearance radius around extruder. Used as input of auto-arrange to avoid " #~ "collision when print object by object" #~ msgstr "" -#~ "Abstandsradius um den Extruder. Wird als Eingabe für die automatische " +#~ "Sicherheitsradius um den Extruder. Wird als Eingabe für die automatische " #~ "Anordnung verwendet, um Kollisionen zu vermeiden, wenn Objekt für Objekt " #~ "gedruckt wird" #~ msgid "Click the pencil icon to edit the filament." -#~ msgstr "Das Stift-Symbol drücken um das Filament zu bearbeiten." +#~ msgstr "Klicken Sie auf das Stiftsymbol, um das Filament zu bearbeiten." #~ msgid "Clipping of view" -#~ msgstr "Ausschnitt der Ansicht" +#~ msgstr "Schnittansicht" #~ msgid "Color Print" #~ msgstr "Farbdruck" @@ -9538,7 +9451,7 @@ msgstr "" #~ msgstr "Wird erstellt..." #~ msgid "Ctrl + Any arrow" -#~ msgstr "Strg + beliebiger Pfeil" +#~ msgstr "Strg + beliebige Pfeiltaste" #~ msgid "Ctrl + Left mouse button" #~ msgstr "Strg + Linke Maustaste" @@ -9551,7 +9464,7 @@ msgstr "" #~ "inactive. Please change the desiccant.(Higher the better)" #~ msgstr "" #~ "Ein Trockenmittelstatus von weniger als zwei Balken bedeutet, dass das " -#~ "Trockenmittel inaktiv sein kann. Bitte tauschen Sie das Trockenmittel " +#~ "Trockenmittel inaktiv sein könnte. Bitte tauschen Sie das Trockenmittel " #~ "aus. (je höher, desto besser)" #~ msgid "Designer" @@ -9560,6 +9473,15 @@ msgstr "" #~ msgid "Device:" #~ msgstr "Gerät:" +#~ msgid "" +#~ "Disable overhang slowing down automatically? \n" +#~ "Yes - Enable arachne and disable overhang slowing down\n" +#~ "No - Give up using arachne this time" +#~ msgstr "" +#~ "Automatische Verlangsamung bei Überhängen deaktivieren?\n" +#~ "Ja - Arachne aktivieren und die Überhangsverlangsamung deaktivieren\n" +#~ "Nein - Arachne für diesen Druck nicht verwenden" + #~ msgid "Display printable box" #~ msgstr "Bedruckbare Box anzeigen" @@ -9574,10 +9496,10 @@ msgstr "" #~ "layer for more than this threshold. Too low bed temperature of other " #~ "layer may cause the model broken free from build plate" #~ msgstr "" -#~ "Es wird nicht empfohlen, die Druckbetttemperatur der anderen Schicht über " -#~ "diesen Grenzwert hinaus unter die der ersten Schicht zu setzen. Eine zu " -#~ "niedrige Druckbetttemperatur der anderen Schicht kann dazu führen, dass " -#~ "sich das Modell von der Druckplatte löst" +#~ "Es wird nicht empfohlen, die Druckbetttemperatur der anderen Schichten " +#~ "über diesen Grenzwert hinaus unter die der ersten Schicht zu setzen. Eine " +#~ "zu niedrige Druckbetttemperatur der anderen Schichten kann dazu führen, " +#~ "dass sich das Modell von der Druckplatte löst." #~ msgid "" #~ "Do you want to synchronize your personal data from Bambu Cloud? \n" @@ -9586,12 +9508,11 @@ msgstr "" #~ "2. The Filament presets\n" #~ "3. The Printer presets\n" #~ msgstr "" -#~ "Möchten Sie Ihre persönlichen Daten aus der Bambu Cloud " -#~ "synchronisieren? \n" -#~ "Enthält die folgenden Informationen:\n" -#~ "1. Prozess-Voreinstellungen\n" -#~ "2. Filament-Voreinstellungen\n" -#~ "3. Drucker-Voreinstellungen\n" +#~ "Möchten Sie Ihre persönlichen Daten von Bambu Cloud synchronisieren? \n" +#~ "Dazu gehören die folgenden Informationen:\n" +#~ "1. Druckprofile\n" +#~ "2. Filamenteinstellungen\n" +#~ "3. Druckerprofile\n" #~ msgid "" #~ "Do you want to synchronize your personal data from Bambu Cloud? \n" @@ -9601,20 +9522,20 @@ msgstr "" #~ "3. The Printer presets\n" #~ msgstr "" #~ "Möchten Sie Ihre persönlichen Daten aus der Bambu Cloud synchronisieren?\n" -#~ "Sie enthält die folgenden Informationen:\n" -#~ "1. Die Prozessvoreinstellungen\n" -#~ "2. Die Voreinstellungen des Filaments\n" -#~ "3. Die Druckervoreinstellungen\n" +#~ "Diese enthalten die folgenden Informationen:\n" +#~ "1. Druckprofile\n" +#~ "2. Filamenteinstellungen\n" +#~ "3. Druckerprofile\n" #~ msgid "" #~ "Don't retract when the travel is in infill area absolutely. That means " #~ "the oozing can't been seen" #~ msgstr "" -#~ "Ziehen Sie nicht zurück, wenn sich der Weg im Füllbereich befindet. Das " -#~ "bedeutet, dass man die Quellung nicht sehen kann" +#~ "Kein Rückzug, wenn sich der Weg im Füllbereich befindet. Das bedeutet, " +#~ "dass man sich bildende Tropfen der Düse nicht sehen kann." #~ msgid "Downloading Bambu Network plug-in" -#~ msgstr "Herunterladen des Bambu-Netzwerk-Plug-In" +#~ msgstr "Herunterladen des Bambu-Netzwerk-Plugins" #~ msgid "" #~ "Enabling this option means the height of every layer except the first " @@ -9623,11 +9544,11 @@ msgstr "" #~ "Note that this option only takes effect if no prime tower is generated in " #~ "current plate." #~ msgstr "" -#~ "Die Aktivierung dieser Option bedeutet, dass die Höhe jeder Schicht außer " -#~ "der ersten während des Slicing automatisch entsprechend der Neigung der " -#~ "Oberfläche des Modells berechnet wird.\n" -#~ "Beachten Sie, dass diese Option nur wirksam wird, wenn in der aktuellen " -#~ "Druckplatte kein Prime Turm erzeugt wird." +#~ "Die Aktivierung dieser Option bedeutet, dass die Höhe jeder Schicht nach " +#~ "der ersten automatisch entsprechend der Neigung der Oberfläche des " +#~ "Modells berechnet wird.\n" +#~ "Bitte beachten Sie, dass diese Option nur wirksam wird, wenn auf der " +#~ "aktuellen Platte kein Reinigungsturm erzeugt wurde." #~ msgid "Enter a search term" #~ msgstr "Suchbegriff eingeben" @@ -9639,10 +9560,10 @@ msgstr "" #~ msgstr "Gemaltes löschen" #~ msgid "Error at line %1%:\n" -#~ msgstr "Fehler auf Zeile %1%:\n" +#~ msgstr "Fehler in Zeile %1%:\n" #~ msgid "Export." -#~ msgstr "Exportieren." +#~ msgstr "Exportieren" #~ msgid "Export G-Code." #~ msgstr "G-Code exportieren." @@ -9654,7 +9575,7 @@ msgstr "" #~ msgstr "Aktuelle geslicete Datei exportieren" #~ msgid "Export ok." -#~ msgstr "Exportieren ok." +#~ msgstr "Export ok." #~ msgid "Export sliced file" #~ msgstr "Geslicete Datei exportieren" @@ -9683,63 +9604,65 @@ msgstr "" #~ "Filament index %s does not match the filament in AMS slot %s. Please " #~ "update the printer firmware to support AMS slot assignment." #~ msgstr "" -#~ "Der Filamentindex %s stimmt nicht mit dem Filament im AMS-Steckplatz %s " -#~ "überein. Bitte aktualisieren Sie die Druckerfirmware, um die AMS-" -#~ "Steckplatzzuweisung zu unterstützen." +#~ "Der Filamentindex %s stimmt nicht mit dem Filament im AMS-Slot %s " +#~ "überein. Bitte aktualisieren Sie die Druckerfirmware, um die AMS-Slot-" +#~ "Zuordnung zu unterstützen." #~ msgid "" #~ "Filament index %s exceeds the number of AMS slots. Please update the " #~ "printer firmware to support AMS slot assignment." #~ msgstr "" -#~ "Der Filamentindex %s übersteigt die Anzahl der AMS-Steckplätze. Bitte " -#~ "aktualisieren Sie die Druckerfirmware, um die AMS-Steckplatzzuweisung zu " +#~ "Der Filamentindex %s übersteigt die Anzahl der AMS-Slot. Bitte " +#~ "aktualisieren Sie die Druckerfirmware, um die AMS-Slot-Zuordnung zu " #~ "unterstützen." #~ msgid "" #~ "Filament index does not match the filament in AMS slot. Please update the " #~ "printer firmware to support AMS slot assignment." #~ msgstr "" -#~ "Der Filamentindex stimmt nicht mit dem Filament im AMS-Steckplatz " -#~ "überein. Bitte aktualisieren Sie die Druckerfirmware, um die AMS-" -#~ "Steckplatzzuweisung zu unterstützen." +#~ "Der Filamentindex stimmt nicht mit dem Filament im AMS-Slot überein. " +#~ "Bitte aktualisieren Sie die Druckerfirmware, um die AMS-Slot-Zuordnung zu " +#~ "unterstützen." #~ msgid "" #~ "Filament index exceeds the number of AMS slots. Please update the printer " #~ "firmware to support AMS slot assignment." #~ msgstr "" -#~ "Der Filamentindex übersteigt die Anzahl der AMS-Steckplätze. Bitte " -#~ "aktualisieren Sie die Druckerfirmware, um die AMS-Steckplatzzuweisung zu " -#~ "unterstützen." +#~ "Der Filamentindex übersteigt die Anzahl der AMS-Slot. Bitte aktualisieren " +#~ "Sie die Druckerfirmware, um die AMS-Slot-Zuordnung zu unterstützen." #~ msgid "" #~ "Filament to print support and raft. \"Default\" means no specific " #~ "filament for support and current filament is used" #~ msgstr "" -#~ "Filament zum Drucken von Supports und Rafts. \"Standard\" bedeutet, dass " -#~ "kein spezielles Filament für die Supports und somit das aktuelle Filament " +#~ "Filament zum Drucken von Stützen und Flöße. \"Standard\" bedeutet, dass " +#~ "kein spezielles Filament für die Stützen und somit das aktuelle Filament " #~ "verwendet wird." #~ msgid "" #~ "Filament to print support and skirt. 0 means no specific filament for " #~ "support and current filament is used" #~ msgstr "" -#~ "Filament für den Druck der Supports und der Umrandung. 0 bedeutet, dass " -#~ "kein spezielles Filament für den Support und das aktuelle Filament wird " -#~ "verwendet" +#~ "Filament für den Druck der Stützen und der Umrandung. 0 bedeutet, dass " +#~ "kein spezielles Filament genutzt wird und das aktuelle Filament wird " +#~ "verwendet." #~ msgid "" #~ "Filament to print support interface. 0 means no specific filament for " #~ "support interface and current filament is used" #~ msgstr "" -#~ "Filament zum Drucken der Support-Schnittstelle. 0 bedeutet, dass kein " -#~ "spezielles Filament für die Support-Schnittstelle vorhanden ist und das " -#~ "aktuelle Filament verwendet wird" +#~ "Filament zum Drucken der Stütz-Schnittstelle. 0 bedeutet, dass kein " +#~ "spezielles Filament für die Stütz-Schnittstelle vorhanden ist und das " +#~ "aktuelle Filament verwendet wird." #~ msgid "Filaments Selection" -#~ msgstr "Auswahl der Filamente" +#~ msgstr "Filamentauswahl" + +#~ msgid "Finish" +#~ msgstr "Fertig" #~ msgid "Finished" -#~ msgstr "Fertig" +#~ msgstr "Erledigt" #~ msgid "Fix model locally" #~ msgstr "Modell lokal reparieren" @@ -9755,10 +9678,10 @@ msgstr "" #~ "part exceeds this value. Expressed as percentage which indicides how much " #~ "width of the line without support from lower layer" #~ msgstr "" -#~ "Erzwingt eine bestimmte Lüftergeschwindigkeit, wenn der Grad des " +#~ "Erzwingt eine bestimmte Lüftergeschwindigkeit, wenn der Winkel des " #~ "Überhangs des gedruckten Teils diesen Wert überschreitet. Ausgedrückt als " -#~ "Prozentsatz, der angibt, wie groß die Breite der Linie ohne Unterstützung " -#~ "durch die untere Schicht ist" +#~ "Prozentsatz, der angibt, wie viel Überhang die Linie ohne Unterstützung " +#~ "durch die untere Schicht haben darf." #~ msgid "Fragment Filter" #~ msgstr "Fragment-Filter" @@ -9769,6 +9692,9 @@ msgstr "" #~ msgid "Fragment filter" #~ msgstr "Fragment-Filter" +#~ msgid "G-code" +#~ msgstr "G-Code" + #~ msgid "" #~ "Green represents that AMS humidity is normal, orange and red represent " #~ "that humidity is too high.(Lower the better)" @@ -9780,10 +9706,10 @@ msgstr "" #~ msgid "" #~ "Heat the nozzle to target \n" #~ "temperature" -#~ msgstr "Die Druckdüse auf die Zieltemperatur heitzen" +#~ msgstr "Düse auf Zieltemperatur heizen" #~ msgid "Heat the nozzle to target temperature" -#~ msgstr "Die Druckdüse auf die Zieltemperatur heitzen" +#~ msgstr "Düse auf Zieltemperatur heizen" #~ msgid "Height:" #~ msgstr "Höhe:" @@ -9792,9 +9718,9 @@ msgstr "" #~ "Height of the clearance cylinder around extruder. Used as input of auto-" #~ "arrange to avoid collision when print object by object" #~ msgstr "" -#~ "Höhe des Abstandszylinders um den Extruder. Wird als Eingabe für die " -#~ "automatische Anordnung verwendet, um Kollisionen zu vermeiden, wenn " -#~ "Objekt für Objekt gedruckt wird" +#~ "Höhe des Freiraums in Form eines Zylinders um den Extruder. Wird als " +#~ "Eingabe für die automatische Anordnung verwendet, um Kollisionen zu " +#~ "vermeiden, wenn Objekt für Objekt gedruckt wird" #~ msgid "" #~ "If enabled, a timelapse video will be generated for each print. After " @@ -9806,17 +9732,17 @@ msgstr "" #~ msgstr "" #~ "Wenn diese Option aktiviert ist, wird für jeden Druck ein Zeitraffervideo " #~ "erstellt. Nachdem jede Schicht gedruckt wurde, bewegt sich der " -#~ "Werkzeugkopf zur Überschussrutsche und dann wird mit der Kammerkamera ein " -#~ "Bild gemacht. Alle diese Bilder werden nach Abschluss des Druckvorgangs " -#~ "zu einem Zeitraffervideo zusammengesetzt. Da das geschmolzene Filament " -#~ "während der Aufnahme eines Druck aus der Düse austreten kann, ist ein " -#~ "Prime Turm für die Düsenbefüllung erforderlich." +#~ "Werkzeugkopf zur Auswurfschacht um mit der Kamera ein Bild zu machen. All " +#~ "diese Bilder werden nach Abschluss des Druckvorgangs zu einem " +#~ "Zeitraffervideo zusammengesetzt. Da das geschmolzene Filament während der " +#~ "Aufnahme aus der Düse austreten kann, ist ein Reinigungsturm für die " +#~ "Düsenreinigung erforderlich." #~ msgid "Import 3MF/STL/STEP/OBJ/AMF" #~ msgstr "Importiere 3MF/STL/STEP/OBJ/AMF" #~ msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files." -#~ msgstr "Importieren Sie Geometriedaten aus STL/STEP/3MF/OBJ/AMF-Dateien." +#~ msgstr "Importieren von Geometriedaten aus STL/STEP/3MF/OBJ/AMF-Dateien." #~ msgid "In the calibration of extrusion flow" #~ msgstr "Kalibrierung des Materialflusses" @@ -9832,14 +9758,33 @@ msgstr "" #~ "Initialisierung fehlgeschlagen (ohne Remote-Video nicht unterstützt)!" #~ msgid "Inner wall speed" -#~ msgstr "Geschwindigkeit der inneren Wände" +#~ msgstr "Geschwindigkeit der Innenwand" + +#~ msgid "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." +#~ msgstr "" +#~ "Es scheint, dass das Objekt %s vollständig schwebende Bereiche hat. Bitte " +#~ "richten Sie das Objekt neu aus oder aktivieren Sie die Stützengenerierung." + +#~ msgid "" +#~ "It seems object %s has large overhangs. Please enable support generation." +#~ msgstr "" +#~ "Es scheint, dass Objekt %s große Überhänge hat. Bitte aktivieren Sie die " +#~ "Stützengenerierung." #~ msgid "" #~ "It seems object %s needs support to print. Please enable support " #~ "generation." #~ msgstr "" -#~ "Es scheint, dass Objekt %s Support zum Drucken benötigt. Bitte aktivieren " -#~ "Sie die Support-Generierung." +#~ "Es scheint, dass das Objekt %s Stützen zum Drucken benötigt. Bitte " +#~ "aktivieren Sie die Stützengenerierung." + +#~ msgid "Keep lower part" +#~ msgstr "Unteren Teil behalten" + +#~ msgid "Keep upper part" +#~ msgstr "Oberen Teil behalten" #~ msgid "Layer Time(log): " #~ msgstr "Schichtdauer (Protokoll): " @@ -9857,20 +9802,20 @@ msgstr "" #~ msgstr "Linientyp" #~ msgid "Loading user presets..." -#~ msgstr "Nutzervoreinstellungen laden..." +#~ msgstr "Nutzereinstellungen laden..." #~ msgid "Management" #~ msgstr "Verwaltung" #~ msgid "Max travel detour distance" -#~ msgstr "Maximale Umwegentfernung" +#~ msgstr "Maximale Umleitstrecke" #~ msgid "" #~ "Maximum detour distance for avoiding crossing wall. Don't detour if the " #~ "detour distance is large than this value" #~ msgstr "" -#~ "Maximale Umleitungsstrecke zur Vermeidung einer querenden Wand. Keine " -#~ "Umleitung, wenn die Umleitungsstrecke größer als dieser Wert ist" +#~ "Maximale Umleitungsstrecke um das kreuzen einer Wand zu vermeiden. Keine " +#~ "Umleitung, wenn die Umleitstrecke größer als dieser Wert ist." #~ msgid "Modify" #~ msgstr "Ändern" @@ -9910,16 +9855,16 @@ msgstr "" #~ "Hauptbildschirms" #~ msgid "Paint-on seam editing" -#~ msgstr "Bearbeiten von Naht-Aufmalen" +#~ msgstr "Bearbeiten der aufgemalten Naht" #~ msgid "Part Cooling" -#~ msgstr "BAuteilkühlung" +#~ msgstr "Bauteilekühlung" #~ msgid "Pause(heated bed temperature error)" #~ msgstr "Pause (Temperaturfehler beim Heizbett)" #~ msgid "Pause(hotend temperature error)" -#~ msgstr "Pause (Temperaturfehler im Hotend)" +#~ msgstr "Pause (Temperaturfehler beim Hotend)" #~ msgid "Pause(toolhead shell off)" #~ msgstr "Pause (Werkzeugkopfabdeckung abgefallen)" @@ -9928,7 +9873,7 @@ msgstr "" #~ msgstr "Je Objekt bearbeiten" #~ msgid "Plate %d: %s does not support filament %s\n" -#~ msgstr "Druckplatte %d: %s unterstützt kein Filament %s.\n" +#~ msgstr "Druckplatte %d: %s unterstützt kein Filament %s\n" #~ msgid "Plate %d: %s does not support filament %s.\n" #~ msgstr "Druckplatte %d: %s unterstützt kein Filament %s.\n" @@ -9962,23 +9907,24 @@ msgstr "" #~ "Preview only mode:\n" #~ "The loaded file contains gcode only." #~ msgstr "" -#~ "Nur Vorschaumodus:\n" -#~ "Die geladene Datei enthält nur G-Code." +#~ "Vorschaumodus:\n" +#~ "Die geladene Datei enthält nur G-Code Befehle." #~ msgid "Preview only mode for gcode file." -#~ msgstr "Nur Vorschaumodus für Gcode-Datei." +#~ msgstr "Vorschaumodus für Gcode-Datei." #~ msgid "" #~ "Prime tower is required by timelapse. Do you want to enable both of them?" #~ msgstr "" -#~ "Prime Tower wird für die Timelapse benötigt. Möchten Sie beide aktivieren?" +#~ "Reinigungsturm wird für die Timelapse benötigt. Möchten Sie beide " +#~ "aktivieren?" #~ msgid "" #~ "Prime tower is required by timeplase. Are you sure you want to disable " #~ "both of them?" #~ msgstr "" -#~ "Prime Tower ist für die Timeplase erforderlich. Bist du sicher, dass du " -#~ "beide deaktivieren möchtest?" +#~ "Reinigungsturm ist für die Timeplase erforderlich. Bist du sicher, dass " +#~ "du beide deaktivieren möchtest?" #~ msgid "Printer Selection" #~ msgstr "Auswahl der Drucker" @@ -9986,7 +9932,7 @@ msgstr "" #~ msgid "Printer firmware does not support material = >ams slot mapping." #~ msgstr "" #~ "Die Drucker-Firmware unterstützt dieses Material nicht = > AMS-Slot-" -#~ "Mapping." +#~ "Zuordnung." #~ msgid "" #~ "Purging after filament change will be done inside objects' infills. This " @@ -9994,23 +9940,25 @@ msgstr "" #~ "are printed with transparent filament, the mixed color infill will be " #~ "seen outside" #~ msgstr "" -#~ "Die Spülung der Druckdüse nach dem Filamentwechsel erfolgt innerhalb der " -#~ "Füllungen der Objekte. Dies kann die Abfallmenge verringern und die " -#~ "Druckzeit verkürzen. Wenn die Wände mit transparentem Filament gedruckt " -#~ "werden, ist die gemischte Farbe der Füllung sichtbar." +#~ "Die Reinigung der Düse nach dem Filamentwechsel erfolgt innerhalb der " +#~ "Objektfüllung. Dies kann die Abfallmenge verringern und die Druckzeit " +#~ "verkürzen. Wenn die Wände mit transparentem Filament gedruckt werden, " +#~ "sind die unterschiedlichen Farben der Füllung sichtbar." #~ msgid "" #~ "Purging after filament change will be done inside objects' support. This " #~ "may lower the amount of waste and decrease the print time" #~ msgstr "" -#~ "Die Reinigung der Druckdüse nach dem Filamentwechsel erfolgt innerhalb " -#~ "des Objektsupport. Dies kann die Abfallmenge verringern und die Druckzeit " -#~ "verkürzen." +#~ "Die Reinigung der Düse nach dem Filamentwechsel erfolgt innerhalb der " +#~ "Stützstrukturen des Objekts. Dies kann die Abfallmenge verringern und die " +#~ "Druckzeit verkürzen." #~ msgid "" #~ "Push new filament \n" #~ "into extruder" -#~ msgstr "Neues Filament in den Extruder drücken" +#~ msgstr "" +#~ "Neues Filament in den\n" +#~ "Extruder schieben" #~ msgid "" #~ "Record timelapse video of printing without showing toolhead. In this mode " @@ -10018,11 +9966,11 @@ msgstr "" #~ "snapshot is taken with the chamber camera. When printing finishes a " #~ "timelapse video is composed of all the snapshots." #~ msgstr "" -#~ "Zeitraffervideo des Druckvorgangs aufnehmen, ohne den Werkzeugkopf zu " -#~ "zeigen. In diesem Modus dockt der Werkzeugkopf bei jedem Schichtwechsel " -#~ "in der Nähe der Überschussrutsche an. Dann wird mit der Kammerkamera ein " -#~ "Bild aufgenommen. Nach Beendigung des Drucks wird ein Zeitraffervideo aus " -#~ "allen Bildern erstellt." +#~ "Zeitraffer des Druckvorgangs aufnehmen, ohne den Werkzeugkopf zu zeigen. " +#~ "In diesem Modus parkt der Werkzeugkopf bei jedem Schichtwechsel in der " +#~ "Nähe des Auswurfschachts. Dann wird mit der Kamera ein Bild aufgenommen. " +#~ "Nach Beendigung des Drucks wird ein Zeitraffervideo aus allen Bildern " +#~ "erstellt." #~ msgid "Reduce Triangles" #~ msgstr "Dreiecke reduzieren" @@ -10038,8 +9986,8 @@ msgstr "" #~ msgid "Repair the model's meshes if it is non-manifold mesh" #~ msgstr "" -#~ "Reparieren Sie die Maschen des Modells, wenn es sich um nicht-verzweigte " -#~ "Maschen handelt" +#~ "Reparieren Sie das Netz des Modells, wenn es sich nicht um ein Manifold-" +#~ "Netz handelt." #~ msgid "Report" #~ msgstr "Bericht" @@ -10069,7 +10017,7 @@ msgstr "" #~ msgstr "Protokoll anzeigen" #~ msgid "Show Model Mesh(TODO)" -#~ msgstr "Modell Mesh anzeigen(TODO)" +#~ msgstr "Modellnetz anzeigen(TODO)" #~ msgid "Show Model Shadow(TODO)" #~ msgstr "Modellschatten anzeigen(TODO)" @@ -10085,73 +10033,94 @@ msgstr "" #~ "Erkennung von Spaghetti und übergelaufenem Filament im Auswurfschacht" #~ msgid "Spiral mode" -#~ msgstr "Spiralförmiger Modus" +#~ msgstr "Spiral-/Vasenmodus" #~ msgid "" #~ "Spiral mode only works when wall loops is 1, \n" #~ "support is disabled, top shell layers is 0 and sparse infill density is " #~ "0\n" #~ msgstr "" -#~ "Der Spiralmodus funktioniert nur, wenn die Wand 1 Linienweite breit " -#~ "sind, \n" -#~ "Support ist deaktiviert, die oberen Schalenschichten sind 0 und die " -#~ "Dichte der Füllung ist 0\n" +#~ "Der Vasenmodus funktioniert nur, wenn die Wand eine Linie breit ist, \n" +#~ "Stützen deaktiviert sind, die oberen Schalenschichten 0 sind und die " +#~ "Fülldichte 0% beträgt.\n" + +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" +#~ msgstr "" +#~ "Der Spiralmodus funktioniert nur, wenn die Wand eine Linie breit ist, \n" +#~ "Stützen deaktiviert sind, die oberen Schalenschichten 0 sind, die " +#~ "Fülldichte 0% beträgt und der Zeitraffertyp auf traditionell gesetzt ist." + +#~ msgid "Start" +#~ msgstr "Starten" #~ msgid "Stop printing when Spaghetti or Excess Chute Pileup is detected" #~ msgstr "" -#~ "Beenden Sie den Druckvorgang, wenn Spaghetti oder übermäßiger " -#~ "Schutthaufen festgestellt werden" +#~ "Stoppe den Druckvorgang, wenn Spaghetti oder ein überlaufender " +#~ "Auswurfschacht erkannt wird." #~ msgid "Stop printing when spaghetti detected" -#~ msgstr "" -#~ "Beenden Sie den Druck, wenn ein Spaghetti-Extrusionafehler erkannt wird" +#~ msgstr "Stoppe den Druck, wenn Spaghetti erkannt werden" #~ msgid "Successfully sent.Will automatically jump to the device page in %s s" -#~ msgstr "Erfolgreich gesendet, springt automatisch zur Geräteseite in %s" +#~ msgstr "Erfolgreich gesendet. Springt automatisch zur Geräteseite in %ss" #~ msgid "" #~ "Successfully sent. Will automatically jump to the device page in %s s" -#~ msgstr "Erfolgreich gesendet, springt automatisch zur Geräteseite in %ss" +#~ msgstr "Erfolgreich gesendet. Springt automatisch zur Geräteseite in %ss" #~ msgid "Suggestion: Actual Volume in range [%d, %d]" -#~ msgstr "Vorschlag: Tatsächliches Volumen im Bereich [%d, %d]" +#~ msgstr "Anmerkung: Tatsächliches Volumen im Bereich [%d, %d]" + +#~ msgid "Support base" +#~ msgstr "Stützstruktur-Basis" #~ msgid "" #~ "Support layer uses layer height independent with object layer. This is to " #~ "support custom support gap,but may cause extra filament switches if " #~ "support is specified as different extruder with object" #~ msgstr "" -#~ "Die Support-Schicht verwendet eine von der Objektschicht unabhängige " -#~ "Schichthöhe. Dies dient der Unterstützung benutzerdefinierter " -#~ "Supportlücken, kann aber zusätzliche Filamentwechsel verursachen, wenn " -#~ "die Supportschicht von einem anderen Filament gedruckt wird" +#~ "Die Stützen verwendet eine von dem Objekt unabhängige Schichthöhe. Dies " +#~ "dient der Unterstützung bestimmter Stützlücken, kann aber zusätzliche " +#~ "Filamentwechsel verursachen, wenn die Stützschicht mit einem anderen " +#~ "Filament gedruckt wird." + +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." +#~ msgstr "" +#~ "Die Stützen verwenden eine von dem Objekte unabhängige Schichthöhe. Dies " +#~ "unterstützt die Anpassung des Z-Abstands und spart Druckzeit." #~ msgid "" #~ "Switch to rectilinear pattern?\n" #~ "Yes - switch to rectilinear pattern automaticlly\n" #~ "No - reset density to default non 100% value automaticlly\n" #~ msgstr "" -#~ "Umschalten auf geradliniges Muster?\n" -#~ "Ja - schaltet automatisch auf ein geradliniges Muster um\n" -#~ "Nein - setzt die Dichte automatisch auf den Standardwert von nicht 100% " -#~ "zurück\n" +#~ "Zu geradlinigen Mustern wechseln?\n" +#~ "Ja - Automatisches auf das geradlinige Muster wechseln\n" +#~ "Nein - Dichte automatisch auf den Standardwert unter 100% zurücksetzen\n" #~ msgid "" #~ "Switch to zig-zag pattern?\n" #~ "Yes - switch to zig-zag pattern automaticlly\n" #~ "No - reset density to default non 100% value automaticlly\n" #~ msgstr "" -#~ "Umschalten auf Zick-Zack-Muster?\n" -#~ "Ja - automatisch zum Zick-Zack-Muster wechseln\n" -#~ "Nein - setzt die Dichte automatisch auf den Standardwert von nicht 100% " -#~ "zurück\n" +#~ "Zu Zick-Zack Muster wechseln?\n" +#~ "Ja - automatisch zum Zick-Zack Muster wechseln\n" +#~ "Nein - Dichte automatisch auf den Standardwert unter 100% zurücksetzen\n" #~ msgid "Swith cloud environment, Please login again!" -#~ msgstr "Cloud-Umgebung wechseln, bitte erneut anmelden!" +#~ msgstr "Cloud-Umgebung gewechselt; Bitte erneut anmelden!" #~ msgid "Sync material list from AMS" #~ msgstr "Materialliste aus AMS synchronisieren" +#~ msgid "The %s filament is too soft to be used with the AMS" +#~ msgstr "Das %s Filament ist zu weich für die Verwendung mit dem AMS" + #~ msgid "" #~ "The 3mf's version %s is newer than %s's version %s, Found following keys " #~ "unrecognized:\n" @@ -10163,8 +10132,8 @@ msgstr "" #~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade " #~ "your software.\n" #~ msgstr "" -#~ "Die Version %s von 3mf ist neuer als die Version %s von %s; es wird " -#~ "empfohlen, Ihre Software zu aktualisieren.\n" +#~ "Die Version %s von 3mf ist neuer als die Version %s von %s; Es wird " +#~ "empfohlen Ihre Software zu aktualisieren.\n" #~ msgid "The 3mf is not from Bambu lab, load geometry data only." #~ msgstr "Die 3mf stammt nicht vom BambuLab, sondern lädt nur Geometriedaten." @@ -10173,30 +10142,36 @@ msgstr "" #~ msgstr "" #~ "Die Konfiguration ist nicht kompatibel und kann nicht geladen werden." +#~ msgid "" +#~ "The P1P printer does not support smooth timelapse, use traditional " +#~ "timelapse instead." +#~ msgstr "" +#~ "Der P1P-Drucker unterstützt keine Smooth-Zeitraffer, bitte verwenden Sie " +#~ "stattdessen traditionelle Zeitraffer." + #~ msgid "" #~ "The firmware versions of printer and AMS are too low.Please update to the " #~ "latest version before sending the print job" #~ msgstr "" #~ "Die Firmware-Versionen von Drucker und AMS sind veraltet. Bitte " -#~ "aktualisieren Sie auf die aktuelle Version, bevor Sie den Druckauftrag " -#~ "senden" +#~ "aktualisieren Sie auf die aktuellste Version, bevor Sie ein Druckauftrag " +#~ "senden." #~ msgid "" #~ "The flush volume is less than the minimum value and will be automatically " #~ "set to the minimum value." #~ msgstr "" -#~ "Die Spülmenge ist geringer als der Mindestwert und wird automatisch auf " -#~ "den Mindestwert eingestellt." +#~ "Die Reinigungsmenge ist geringer als der Mindestwert und wird automatisch " +#~ "auf den Mindestwert eingestellt." #~ msgid "" #~ "The model has overlapping or self-intersecting facets. I tried to repair " #~ "it, however you might want to check the results or repair the input file " #~ "and retry." #~ msgstr "" -#~ "Das Modell hat überlappende oder sich selbst überschneidende Facetten. " -#~ "Ich habe versucht, es zu reparieren, aber vielleicht möchten Sie die " -#~ "Ergebnisse überprüfen oder die Eingabedatei reparieren und es erneut " -#~ "versuchen." +#~ "Das Modell hat überlappende oder sich selbst schneidende Facetten. Es " +#~ "wurde eine Reparatur versucht, wir empfehlen jedoch, die Ergebnisse zu " +#~ "überprüfen oder die Eingabedatei zu reparieren und es erneut zu versuchen." #~ msgid "" #~ "The printer type used to generate G-code is not the same type as the " @@ -10213,9 +10188,9 @@ msgstr "" #~ "analysed and calculated automatically" #~ msgstr "" #~ "Dies steuert die Position der Umrandung, einschließlich der Außenseite " -#~ "der Modelle, der Innenseite der Löcher oder beides. Auto bedeutet, dass " -#~ "sowohl die Randposition als auch die Breite des Randes automatisch " -#~ "analysiert und berechnet werden" +#~ "von Modellen und der Innenseite von Löchern. Auto bedeutet, dass sowohl " +#~ "die Randposition als auch die Breite des Randes automatisch analysiert " +#~ "und berechnet wird." #~ msgid "" #~ "This object will be used to purge the nozzle after a filament change to " @@ -10223,15 +10198,15 @@ msgstr "" #~ "mixed as a result" #~ msgstr "" #~ "Dieses Objekt wird verwendet, um die Düse nach einem Filamentwechsel zu " -#~ "säubern, um Filament zu sparen und die Druckzeit zu verkürzen. Die Farben " -#~ "der Objekte werden als Ergebnis gemischt" +#~ "reinigen, Filament zu sparen und die Druckzeit zu verkürzen. Die Farben " +#~ "der Objekte werden als Ergebnis gemischt." #~ msgid "" #~ "This setting specifies whether to add infill inside large hollows of tree " #~ "support" #~ msgstr "" -#~ "Diese Einstellung legt fest, ob in großen Hohlräumen von Baumsupports " -#~ "Füllmaterial hinzugefügt werden soll" +#~ "Diese Einstellung legt fest, ob in großen Hohlräumen von Baumstützen " +#~ "Füllmaterial hinzugefügt werden soll." #~ msgid "" #~ "This setting stands for how much volume of filament can be melted and " @@ -10253,7 +10228,7 @@ msgstr "" #~ msgstr "Übersetzung" #~ msgid "Tree support with infill" -#~ msgstr "Baumsupport mit Füllung" +#~ msgstr "Baumstützen mit Füllung" #~ msgid "Unable to connect printer" #~ msgstr "Drucker kann nicht verbunden werden" @@ -10262,7 +10237,7 @@ msgstr "" #~ msgstr "ZIP-Datei kann nicht erstellt werden" #~ msgid "Uploading" -#~ msgstr "Lade hoch" +#~ msgstr "Hochladen" #~ msgid "User pause" #~ msgstr "Benutzerpause" @@ -10277,10 +10252,9 @@ msgstr "" #~ "Primitive\"->\"Timelapse Wipe Tower\".\n" #~ msgstr "" #~ "Wenn Sie einen Zeitraffer ohne Werkzeugkopf aufnehmen, wird empfohlen, " -#~ "einen \"Timelapse Wipe Tower\" (Zeitraffer-Wischturm) hinzuzufügen\n" -#~ "hinzuzufügen, indem Sie mit der rechten Maustaste auf die leere Position " -#~ "der Bauplatte klicken und \"Primitiv hinzufügen\"->\"Timelapse Wipe Tower" -#~ "\" wählen.\n" +#~ "einen \"Timelapse Wischturm\" hinzuzufügen, indem Sie mit der rechten " +#~ "Maustaste auf die leere Position der Bauplatte klicken und \"Primitiv " +#~ "hinzufügen\"->\"Timelapse Wischturm\" wählen.\n" #~ msgid "" #~ "When sparse infill density is low, the internal solid infill or internal " @@ -10291,13 +10265,22 @@ msgstr "" #~ "bridge. 0 means disable this feature" #~ msgstr "" #~ "Wenn die Dichte der spärlichen Füllung gering ist, kann es vorkommen, " -#~ "dass die interne Füllung oder die interne Brücke keinen Anker am Ende der " -#~ "Linie hat. Dies führt zu einem Abfall und schlechter Qualität beim " -#~ "Drucken der internen Füllung. Wenn Sie diese Funktion aktivieren, werden " -#~ "der dünnen Füllung der unteren Lagen für eine bestimmte Dicke " -#~ "Schleifenpfade hinzugefügt, so dass bessere Verankerungen für interne " -#~ "Brücken bereitgestellt werden können. 0 bedeutet, diese Funktion ist " -#~ "deaktiviert." +#~ "dass die innere Füllung oder die innere Brücke keinen Anker am Ende der " +#~ "Linie hat. Dies führt zu einem Absacken und schlechter Qualität beim " +#~ "Drucken der inneren massiven Füllung. Wenn Sie diese Funktion aktivieren, " +#~ "werden der spärlichen Füllung der unteren Lagen für eine bestimmte Dicke " +#~ "Schleifenpfade hinzugefügt, sodass eine bessere Verankerungen für innere " +#~ "Brücken bereitgestellt wird. 0 bedeutet, dass diese Funktion deaktiviert " +#~ "ist." + +#~ msgid "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." +#~ msgstr "" +#~ "Bei der Verwendung von Stützmaterial für die Stützt-Schnittstellen " +#~ "empfehlen wir die folgenden Einstellungen:\n" +#~ "0 oberer Z-Abstand, 0 Schnittstellabstand, konzentrisches Muster." #~ msgid "" #~ "X1 General Settings - Network Settings in the side bar of X1 main screen" @@ -10309,9 +10292,9 @@ msgstr "" #~ "You have changed some preset settings. \n" #~ "Would you like to keep these changed settings after switching preset?" #~ msgstr "" -#~ "Sie haben einige voreingestellte Einstellungen geändert. \n" -#~ "Möchten Sie diese geänderten Einstellungen nach dem Wechsel der " -#~ "Voreinstellung beibehalten?" +#~ "Sie haben einige Profileinstellungen geändert. \n" +#~ "Möchten Sie diese geänderten Einstellungen nach dem Wechsel der Profile " +#~ "beibehalten?" #~ msgid "Zig zag" #~ msgstr "Zick-Zack" @@ -10331,11 +10314,10 @@ msgstr "" #~ msgid "" #~ " is too close to exclusion area, there will be collisions when printing.\n" #~ msgstr "" -#~ " ist zu nahe am Sperrbereich, es kommt beim Drucken zu Kollisionen.\n" +#~ " ist zu nahe am Sperrbereich. Es kommt beim Drucken zu Kollisionen.\n" #~ msgid " is too close to others, there may be collisions when printing.\n" -#~ msgstr "" -#~ " zu nahe an anderen liegt; beim Drucken kann es zu Kollisionen kommen.\n" +#~ msgstr " zu nahe an anderen; Beim Drucken kann es zu Kollisionen kommen.\n" #~ msgid " is too close to others, there will be collisions when printing.\n" #~ msgstr " zu nahe an anderen, es kommt beim Drucken zu Kollisionen.\n" @@ -10350,7 +10332,7 @@ msgstr "" #~ msgstr "Standartwert" #~ msgid "hybrid(auto)" -#~ msgstr "Hybrid(automatisch)" +#~ msgstr "Hybrid (auto)" #~ msgid "normal" #~ msgstr "Normal" @@ -10359,15 +10341,15 @@ msgstr "" #~ "normal(auto) and tree(auto) is used to generate support automatically. If " #~ "normal or tree is selected, only support enforcers are generated" #~ msgstr "" -#~ "Normal(automatisch) und Baum(automatisch) wird verwendet, um " -#~ "automatischen Support zu erzeugen. Wenn Normal oder Baum ausgewählt ist, " -#~ "werden nur Support Enforcer erzeugt" +#~ "Normal (auto) und Baum (auto) wird verwendet, um automatischen " +#~ "Stützstrukturen zu erzeugen. Wenn Normal oder Baum ausgewählt ist, werden " +#~ "nur Sützerzwinger erzeugt." #~ msgid "preparing, export 3mf failed!" #~ msgstr "Vorbereitung; Export von 3mf fehlgeschlagen!" #~ msgid "the 3mf is not compatible, load geometry data only!" -#~ msgstr "die 3mf ist nicht kompatibel, laden Sie nur Geometriedaten!" +#~ msgstr "Die 3mf ist nicht kompatibel. Lade nur Geometriedaten!" #~ msgid "tree" #~ msgstr "Baum" diff --git a/bbl/i18n/en/BambuStudio_en.po b/bbl/i18n/en/BambuStudio_en.po index 17179fcb55..3a4d422cfa 100644 --- a/bbl/i18n/en/BambuStudio_en.po +++ b/bbl/i18n/en/BambuStudio_en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-04 14:45+0800\n" +"POT-Creation-Date: 2023-04-06 08:26+0800\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1898,14 +1898,14 @@ msgstr "Bed Temperature" msgid "Max volumetric speed" msgstr "Max volumetric speed" -msgid "℃" -msgstr "" +msgid "\\u2103" +msgstr "\\u2103" msgid "Bed temperature" msgstr "Bed temperature" -msgid "mm³" -msgstr "mm³" +msgid "mm\\u00B3" +msgstr "mm\\u00B3" msgid "Start calibration" msgstr "Start" @@ -3959,7 +3959,7 @@ msgid "First Layer Inspection" msgstr "First Layer Inspection" msgid "Auto-recovery from step loss" -msgstr "Auto-recovery from step loss" +msgstr "Auto-recover from step loss" msgid "Global" msgstr "Global" @@ -7119,6 +7119,9 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimal purge on wipe tower" +msgid "mm³" +msgstr "mm³" + msgid "Filament load time" msgstr "Filament load time" @@ -9047,104 +9050,6 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" -#~ msgid "" -#~ "Arachne engine only works when overhang slowing down is disabled.\n" -#~ "This may cause decline in the quality of overhang surface when print " -#~ "fastly" -#~ msgstr "" -#~ "The Arachne engine only works when overhang slowdown is disabled.\n" -#~ "This may cause decline in the quality of overhang surface when printing " -#~ "quickly." - -#~ msgid "" -#~ "Disable overhang slowing down automatically? \n" -#~ "Yes - Enable arachne and disable overhang slowing down\n" -#~ "No - Give up using arachne this time" -#~ msgstr "" -#~ "Disable overhang slowdown automatically? \n" -#~ "Yes - Enable Arachne and disable overhang slowing down\n" -#~ "No - Don't use Arachne for this print" - -#~ msgid "Start" -#~ msgstr "Start" - -#~ msgid "G-code" -#~ msgstr "G-code" - -#~ msgid "Backup" -#~ msgstr "Backup" - -#~ msgid "Backup interval" -#~ msgstr "Backup interval" - -#, c-format, boost-format -#~ msgid "The %s filament is too soft to be used with the AMS" -#~ msgstr "The %s filament is too soft to be used with the AMS" - -#, c-format, boost-format -#~ msgid "" -#~ "It seems object %s has completely floating regions. Please re-orient the " -#~ "object or enable support generation." -#~ msgstr "" -#~ "It seems object %s has completely floating regions. Please re-orient the " -#~ "object or enable support generation." - -#, c-format, boost-format -#~ msgid "" -#~ "It seems object %s has large overhangs. Please enable support generation." -#~ msgstr "" -#~ "It seems object %s has large overhangs. Please enable support generation." - -#~ msgid "\\u2103" -#~ msgstr "\\u2103" - -#~ msgid "mm\\u00B3" -#~ msgstr "mm\\u00B3" - -#~ msgid "" -#~ "Spiral mode only works when wall loops is 1, support is disabled, top " -#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " -#~ "traditional" -#~ msgstr "" -#~ "Spiral mode only works when wall loops is 1, support is disabled, top " -#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " -#~ "traditional" - -#~ msgid "Keep upper part" -#~ msgstr "Keep upper part" - -#~ msgid "Keep lower part" -#~ msgstr "Keep lower part" - -#~ msgid "AMS auto switch filament" -#~ msgstr "AMS auto switch filament" - -#~ msgid "" -#~ "When using support material for the support interface, We recommend the " -#~ "following settings:\n" -#~ "0 top z distance, 0 interface spacing, concentric pattern." -#~ msgstr "" -#~ "When using support material for the support interface, We recommend the " -#~ "following settings:\n" -#~ "0 top z distance, 0 interface spacing, concentric pattern." - -#~ msgid "" -#~ "The P1P printer does not support smooth timelapse, use traditional " -#~ "timelapse instead." -#~ msgstr "" -#~ "The P1P printer does not support smooth timelapse, please use traditional " -#~ "timelapse instead." - -#~ msgid "Support base" -#~ msgstr "Support base" - -#~ msgid "" -#~ "Support layer uses layer height independent with object layer. This is to " -#~ "support customizing z-gap and save print time." -#~ msgstr "" -#~ "Support layer uses layer height independent with object layer. This is to " -#~ "support customizing z-gap and save print time." - #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -9170,6 +9075,9 @@ msgstr "" #~ msgid "AMSMaterialsSetting" #~ msgstr "AMS Materials Setting" +#~ msgid "AMS auto switch filament" +#~ msgstr "AMS auto switch filament" + #~ msgid "AWS PRE host" #~ msgstr "AWS PRE host" @@ -9194,6 +9102,15 @@ msgstr "" #~ "Please solve the problem by moving it totally on or off the plate, and " #~ "confirming that the height is within the build volume." +#~ msgid "" +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly" +#~ msgstr "" +#~ "The Arachne engine only works when overhang slowdown is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when printing " +#~ "quickly." + #~ msgid "" #~ "Arachne engine only works when overhang slowing down is disabled.\n" #~ "This may cause decline in the quality of overhang surface when print " @@ -9221,6 +9138,12 @@ msgstr "" #~ msgid "Avoid crossing wall when travel" #~ msgstr "Avoid walls when traveling" +#~ msgid "Backup" +#~ msgstr "Backup" + +#~ msgid "Backup interval" +#~ msgstr "Backup interval" + #~ msgid "" #~ "Bed exclude area that can't used as printable area in X-Y plane. For " #~ "example, the bottom left area which is used to cut filament in X1 when " @@ -9314,6 +9237,15 @@ msgstr "" #~ msgid "Device:" #~ msgstr "Device:" +#~ msgid "" +#~ "Disable overhang slowing down automatically? \n" +#~ "Yes - Enable arachne and disable overhang slowing down\n" +#~ "No - Give up using arachne this time" +#~ msgstr "" +#~ "Disable overhang slowdown automatically? \n" +#~ "Yes - Enable Arachne and disable overhang slowing down\n" +#~ "No - Don't use Arachne for this print" + #~ msgid "Display printable box" #~ msgstr "Display printable box" @@ -9515,6 +9447,9 @@ msgstr "" #~ msgid "Fragment filter" #~ msgstr "Fragment filter" +#~ msgid "G-code" +#~ msgstr "G-code" + #~ msgid "" #~ "Green represents that AMS humidity is normal, orange and red represent " #~ "that humidity is too high.(Lower the better)" @@ -9578,6 +9513,18 @@ msgstr "" #~ msgid "Inner wall speed" #~ msgstr "Inner wall speed" +#~ msgid "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." +#~ msgstr "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." + +#~ msgid "" +#~ "It seems object %s has large overhangs. Please enable support generation." +#~ msgstr "" +#~ "It seems object %s has large overhangs. Please enable support generation." + #~ msgid "" #~ "It seems object %s needs support to print. Please enable support " #~ "generation." @@ -9585,6 +9532,12 @@ msgstr "" #~ "It seems object %s needs support to print. Please enable support " #~ "generation." +#~ msgid "Keep lower part" +#~ msgstr "Keep lower part" + +#~ msgid "Keep upper part" +#~ msgstr "Keep upper part" + #~ msgid "Layer Time(log): " #~ msgstr "Layer Time(log): " @@ -9833,6 +9786,18 @@ msgstr "" #~ "support is disabled, top shell layers is 0, and sparse infill density is " #~ "0\n" +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" +#~ msgstr "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" + +#~ msgid "Start" +#~ msgstr "Start" + #~ msgid "Stop printing when Spaghetti or Excess Chute Pileup is detected" #~ msgstr "Stop printing when Spaghetti or Excess Chute Pileup is detected" @@ -9851,6 +9816,9 @@ msgstr "" #~ msgid "Suggestion: Actual Volume in range [%d, %d]" #~ msgstr "Suggestion: Actual Volume in range [%d, %d]" +#~ msgid "Support base" +#~ msgstr "Support base" + #~ msgid "" #~ "Support layer uses layer height independent with object layer. This is to " #~ "support custom support gap,but may cause extra filament switches if " @@ -9860,6 +9828,13 @@ msgstr "" #~ "to support custom support gaps, but may cause extra filament switches if " #~ "support is specified as a different filament from the object." +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." +#~ msgstr "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." + #~ msgid "" #~ "Switch to rectilinear pattern?\n" #~ "Yes - switch to rectilinear pattern automaticlly\n" @@ -9884,6 +9859,9 @@ msgstr "" #~ msgid "Sync material list from AMS" #~ msgstr "Sync material list from AMS" +#~ msgid "The %s filament is too soft to be used with the AMS" +#~ msgstr "The %s filament is too soft to be used with the AMS" + #~ msgid "" #~ "The 3mf's version %s is newer than %s's version %s, Found following keys " #~ "unrecognized:\n" @@ -9904,6 +9882,13 @@ msgstr "" #~ msgid "The Config is not compatible and can not be loaded." #~ msgstr "The configuration is not compatible and cannot be loaded!" +#~ msgid "" +#~ "The P1P printer does not support smooth timelapse, use traditional " +#~ "timelapse instead." +#~ msgstr "" +#~ "The P1P printer does not support smooth timelapse, please use traditional " +#~ "timelapse instead." + #~ msgid "" #~ "The firmware versions of printer and AMS are too low.Please update to the " #~ "latest version before sending the print job" @@ -10023,6 +10008,15 @@ msgstr "" #~ "for specific thickness, so that better anchors can be provided for " #~ "internal bridges. 0 means disable this feature" +#~ msgid "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." +#~ msgstr "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." + #~ msgid "" #~ "X1 General Settings - Network Settings in the side bar of X1 main screen" #~ msgstr "" diff --git a/bbl/i18n/es/BambuStudio_es.po b/bbl/i18n/es/BambuStudio_es.po index 39fb35774b..002fbec5a8 100644 --- a/bbl/i18n/es/BambuStudio_es.po +++ b/bbl/i18n/es/BambuStudio_es.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-04 14:45+0800\n" +"POT-Creation-Date: 2023-04-06 08:26+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -682,7 +682,7 @@ msgstr "" "corte!" msgid "Open Project" -msgstr "Abrir proyecto" +msgstr "Proyesto Abierto" msgid "" "The version of Bambu studio is too low and needs to be updated to the latest " @@ -716,13 +716,13 @@ msgid "*" msgstr "*" msgid "The uploads are still ongoing" -msgstr "El envío aún están en curso" +msgstr "Las subidas aún están en curso" msgid "Stop them and continue anyway?" -msgstr "¿Detenerlas y continuar de todos modos?" +msgstr "¿Detenerlos y continuar de todos modos?" msgid "Ongoing uploads" -msgstr "Envío en curso" +msgstr "Cargas en curso" msgid "Select a G-code file:" msgstr "Seleccione un archivo de código G:" @@ -879,13 +879,13 @@ msgid "Reload from disk" msgstr "Recargar desde el disco" msgid "Reload the selected parts from disk" -msgstr "Recargar las partes seleccionadas desde disco" +msgstr "Recargar las piezas seleccionadas desde el disco" msgid "Replace with STL" -msgstr "Reemplazar con STL" +msgstr "Sustituir por STL" msgid "Replace the selected part with new STL" -msgstr "Reemplazar las partes seleccionadas con nuevo STL" +msgstr "Sustituir la pieza seleccionada por un STL nuevo" msgid "Change filament" msgstr "Cambiar el filamento" @@ -922,7 +922,7 @@ msgid "Flush into objects' support" msgstr "Depositar en el soporte de los objetos" msgid "Edit in Parameter Table" -msgstr "Editar en tabla de parámetros" +msgstr "Editar en la tabla de parámetros" msgid "Convert from inch" msgstr "Convertir desde pulgadas" @@ -1049,7 +1049,7 @@ msgid "Center" msgstr "Centrar" msgid "Edit Process Settings" -msgstr "Editar configuración del proceso" +msgstr "Editar la configuración del proceso" msgid "Edit print parameters for a single object" msgstr "Editar los parámetros de impresión de un solo objeto" @@ -1369,10 +1369,10 @@ msgid "Open Preferences." msgstr "Abrir preferencias" msgid "Open next tip." -msgstr "Abrir siguiente sugerencia." +msgstr "Abrir el siguiente consejo" msgid "Open Documentation in web browser." -msgstr "Abrir documentación en el navegador" +msgstr "Abrir documentación en el navegador web" msgid "Pause:" msgstr "" @@ -1399,7 +1399,7 @@ msgid "Jump to layer" msgstr "Saltar a la capa" msgid "Please enter the layer number" -msgstr "Por favor, introduzca el número de capa" +msgstr "Introduzca el número de capa." msgid "Add Pause" msgstr "Añadir pausa" @@ -1411,7 +1411,7 @@ msgid "Add Custom Template" msgstr "Añadir plantilla personalizada" msgid "Filament " -msgstr "Filamento" +msgstr "FIlament" msgid "Delete Pause" msgstr "" @@ -1432,7 +1432,7 @@ msgid "No printer" msgstr "Sin impresión" msgid "..." -msgstr "..." +msgstr "" msgid "?" msgstr "?" @@ -1620,7 +1620,7 @@ msgid "Unknown Failure" msgstr "Error desconocido" msgid "Please check the printer network connection." -msgstr "Por favor, comprueba la conexión de red de la impresora." +msgstr "Compruebe la conexión de red de la impresora." msgid "Abnormal print file data. Please slice again" msgstr "Datos anormales del archivo de impresión. Por favor, procese de nuevo" @@ -1673,39 +1673,39 @@ msgstr "Enviando la configuración de impresión" #, c-format, boost-format msgid "Successfully sent. Will automatically jump to the device page in %ss" msgstr "" -"Enviado correctamente. Se mostrará automáticamente en el dispositivo en %ss" +"Enviado con éxito. Se saltará automáticamente a la página del dispositivo en " +"%s s" msgid "An SD card needs to be inserted before printing via LAN." -msgstr "" -"Es necesario insertar una tarjeta SD antes de imprimir a través de red local." +msgstr "Se debe insertar una tarjeta microSD antes de imprimir mediante LAN." msgid "Failed to send the print job. Please try again." -msgstr "No se pudo enviar el trabajo de impresión. Inténtalo de nuevo." +msgstr "No se pudo enviar la impresión. Vuelve a intentarlo." msgid "Send to Printer failed. Please try again." -msgstr "El envio a la impresora falló. Inténtelo de nuevo." +msgstr "No se pudo enviar a la impresora. Vuelve a intentarlo." msgid "No space left on Printer SD card" msgstr "" msgid "Sending gcode file over LAN" -msgstr "Enviando archivo g-code a través de red local" +msgstr "Envío de un archivo G-code a través de LAN" msgid "Sending gcode file through cloud service" -msgstr "Enviando archivo a traves de servicio en la nube" +msgstr "Envío de archivos G-code a través del servicio en la nube" msgid "Sending gcode file to sdcard" -msgstr "Enviado archivo g-code a la tarjeta SD" +msgstr "Envío de un archivo G-code a la tarjeta microSD" #, c-format, boost-format msgid "Successfully sent. Close current page in %s s" msgstr "Se ha enviado correctamente. Cerrar la página actual en %s s" msgid "An SD card needs to be inserted before sending to printer." -msgstr "Debe insertar una tarjeta microSD antes de enviar a la impresora." +msgstr "Se debe insertar una tarjeta microSD antes de enviar a la impresora." msgid "Please log out and login to the printer again." -msgstr "Cierre la sesión y vuelva a iniciar sesión en la impresora." +msgstr "Cierre sesión y vuelva a iniciarla en la impresora." msgid "Failed uploading print file. Please enter ip address again." msgstr "" @@ -1764,7 +1764,7 @@ msgid "Attention!" msgstr "¡Atención!" msgid "Downloading" -msgstr "Descargando" +msgstr "" msgid "Download failed" msgstr "Descarga fallida" @@ -1773,19 +1773,19 @@ msgid "Cancelled" msgstr "Cancelado" msgid "Install successfully." -msgstr "Instalación correcta" +msgstr "Instalado correctamente" msgid "Installing" -msgstr "Instalando" +msgstr "Instalando…" msgid "Install failed" -msgstr "Instalación fallida" +msgstr "Error de instalación" msgid "Portions copyright" msgstr "Porciones del copyright" msgid "Copyright" -msgstr "Derecho de autor" +msgstr "Copyright" msgid "License" msgstr "Licencia" @@ -1939,14 +1939,14 @@ msgstr "Temperatura de la base" msgid "Max volumetric speed" msgstr "Velocidad volumétrica máxima" -msgid "℃" -msgstr "" +msgid "\\u2103" +msgstr "\\ u2103" msgid "Bed temperature" msgstr "Temperatura de la base" -msgid "mm³" -msgstr "mm³" +msgid "mm\\u00B3" +msgstr "mm\\ u00b3" msgid "Start calibration" msgstr "Iniciar" @@ -2002,13 +2002,13 @@ msgid "Enable AMS" msgstr "Habilitar AMS" msgid "Print with filaments in the AMS" -msgstr "Imprimir con filamentos en el AMS" +msgstr "Imprima con filamento en el AMS" msgid "Disable AMS" -msgstr "Desactivar AMS" +msgstr "Deshabilitar AMS" msgid "Print with the filament mounted on the back of chassis" -msgstr "Imprimir con el filamento montado en la parte posterior del chasis" +msgstr "Impresión con filamento en una bobina externa" msgid "Cabin humidity" msgstr "Humedad de cabina" @@ -2047,7 +2047,7 @@ msgid "" msgstr "Configure qué ranura AMS debe utilizarse para la impresión." msgid "Filament used in this print job" -msgstr "Filamento utilizado en este trabajo de impresión" +msgstr "Filamento utilizado en esta impresión" msgid "AMS slot used for this filament" msgstr "Ranura AMS utilizada para este filamento" @@ -2665,25 +2665,25 @@ msgid "Layer Time" msgstr "Tiempo de capa" msgid "Height: " -msgstr "Altura: " +msgstr "Altura:" msgid "Width: " -msgstr "Anchura: " +msgstr "Ancho:" msgid "Speed: " -msgstr "Velocidad: " +msgstr "Velocidad:" msgid "Flow: " -msgstr "Flujo: " +msgstr "Flujo:" msgid "Layer Time: " -msgstr "Tiempo de capa: " +msgstr "Tiempo de capa:" msgid "Fan Speed: " -msgstr "Velocidad del ventilador: " +msgstr "Velocidad del ventilador:" msgid "Temperature: " -msgstr "Temperatura: " +msgstr "Temperatura:" msgid "Loading G-codes" msgstr "Carga de códigos G" @@ -2833,13 +2833,13 @@ msgid "Quality / Speed" msgstr "Calidad / Velocidad" msgid "Smooth" -msgstr "Alisado" +msgstr "Suavizar" msgid "Radius" msgstr "Radio" msgid "Keep min" -msgstr "minutos restantes" +msgstr "Mantener mínimo" msgid "Left mouse button:" msgstr "Botón izquierdo del ratón:" @@ -3108,7 +3108,7 @@ msgid "Slice plate" msgstr "Laminar placa" msgid "Print plate" -msgstr "Imprimir placa" +msgstr "Placa de impresión" msgid "Slice all" msgstr "Laminar todo" @@ -3150,7 +3150,7 @@ msgid "Check for Update" msgstr "Comprobar Actualicaciones" msgid "Open Network Test" -msgstr "Realizar prueba de red" +msgstr "Abrir prueba de red" #, c-format, boost-format msgid "&About %s" @@ -3414,7 +3414,7 @@ msgid "No to All" msgstr "No a todo" msgid "Choose a directory" -msgstr "Seleccionar directorio" +msgstr "Elegir un directorio" #, c-format, boost-format msgid "There is %d config exported. (Only non-system configs)" @@ -3551,13 +3551,13 @@ msgid "All Files" msgstr "Todos los archivos" msgid "Group files by year, recent first." -msgstr "Agrupar ficheros por año, primero los más recientes" +msgstr "Agrupe los archivos por año, primero los recientes." msgid "Group files by month, recent first." -msgstr "Agrupar ficheros por mes, primero los más recientes" +msgstr "Agrupe los archivos por mes, primero los recientes." msgid "Show all files, recent first." -msgstr "Mostrar todos los fciheros, primero los más recientes" +msgstr "Mostrar todos los archivos, primero los recientes." msgid "Timelapse" msgstr "Timelapse" @@ -3572,13 +3572,13 @@ msgid "Switch to video files." msgstr "Cambia a archivos de vídeo." msgid "Delete selected files from printer." -msgstr "Borrar archivos seleccionados de la impresora." +msgstr "Elimine los archivos seleccionados de la impresora." msgid "Download" msgstr "Descargar" msgid "Download selected files from printer." -msgstr "Descargar archivos seleccionados de la impresora." +msgstr "Descargue los archivos seleccionados de la impresora." msgid "Select" msgstr "Seleccionar" @@ -3590,7 +3590,7 @@ msgid "No printers." msgstr "No hay impresoras." msgid "Not supported by this model of printer!" -msgstr "¡Modelo de impresora no soportado!" +msgstr "¡No es compatible con este modelo de impresora!" msgid "Connecting..." msgstr "Conectando…" @@ -3663,7 +3663,7 @@ msgid "Camera" msgstr "Cámara" msgid "SD Card" -msgstr "Tarjeta SD" +msgstr "Tarjeta MicroSD" msgid "Camera Setting" msgstr "Configuración de cámara" @@ -3714,10 +3714,10 @@ msgid "Debug Info" msgstr "Información de Depuración" msgid "No SD Card" -msgstr "Tarjeta SD no encontrada" +msgstr "No hay tarjeta SD" msgid "SD Card Abnormal" -msgstr "Tarjeta SD errónea" +msgstr "Tarjeta microSD anormal" msgid "Printing List" msgstr "Imprimiendo Lista" @@ -3726,7 +3726,7 @@ msgid "Cancel print" msgstr "Cancelar impresión" msgid "Are you sure you want to cancel this print?" -msgstr "¿Está seguro de cancelar la impresión?" +msgstr "¿Estás seguro de que quieres cancelar esta impresión?" #, c-format, boost-format msgid "" @@ -3918,13 +3918,13 @@ msgid "ERROR" msgstr "¡Error!" msgid "CANCELED" -msgstr "CANCELADO" +msgstr "Cancelado" msgid "COMPLETED" -msgstr "COMPLETADO" +msgstr "Completado" msgid "Cancel upload" -msgstr "Cancelar envío" +msgstr "Cancelar la subida" msgid "Slice ok." msgstr "Rebanado correcto." @@ -3939,13 +3939,13 @@ msgid "Warning:" msgstr "Advertencia:" msgid "Export successfully." -msgstr "Exportado correctamente." +msgstr "Exportación correcta" msgid " (Repair)" msgstr " (Reparación)" msgid " Click here to install it." -msgstr "Click aquí para instalar." +msgstr " Haga clic aquí para instalarlo." msgid "WARNING:" msgstr "AVISO:" @@ -4095,7 +4095,7 @@ msgid "Remove last filament" msgstr "Retirar el último filamento" msgid "Synchronize filament list from AMS" -msgstr "Sincronizar filamentos desde AMS" +msgstr "Sincronizar la lista de filamentos de AMS" msgid "Set filaments to use" msgstr "Establecer filamentos a utilizar" @@ -4191,15 +4191,15 @@ msgid "The 3mf is not from Bambu Lab, load geometry data only." msgstr "El 3mf no es Bambu lab, solo se carga datos de geometría." msgid "Load 3mf" -msgstr "Cargar 3mf" +msgstr "cargar 3mf" msgid "The Config can not be loaded." -msgstr "La configuración no puede ser cargada." +msgstr "No se puede cargar la configuración" msgid "The 3mf is generated by old Bambu Studio, load geometry data only." msgstr "" -"3mf generado con versión antigua de Bambu Studio, se cargan datos de " -"geometría unicamente" +"El 3mf fue generado por una versión antigua de Bambu Studio, solo se " +"cargaran datos de geometría." #, c-format, boost-format msgid "" @@ -4394,7 +4394,7 @@ msgid "Importing Model" msgstr "Importando modelo" msgid "prepare 3mf file..." -msgstr "preparar archivo 3mf..." +msgstr "preparando el archivo 3mf..." msgid "downloading project ..." msgstr "descargando proyecto..." @@ -4818,10 +4818,10 @@ msgid "Project-inside presets" msgstr "Preajustes internos del proyecto" msgid "Add/Remove filaments" -msgstr "" +msgstr "Añadir/quitar filamento" msgid "Add/Remove materials" -msgstr "Añadir/quitar materiales" +msgstr "Añadir/eliminar materiales" msgid "Add/Remove printers" msgstr "Añadir/quitar impresoras" @@ -7272,6 +7272,9 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Purga mínima en la torre de limpieza" +msgid "mm³" +msgstr "mm³" + msgid "Filament load time" msgstr "Tiempo de carga de filamento" @@ -9243,107 +9246,6 @@ msgstr "" "¿Sabía que puede utilizar más bucles de pared y una densidad de relleno " "dispersa más alta para mejorar la resistencia del modelo?" -#~ msgid "" -#~ "Arachne engine only works when overhang slowing down is disabled.\n" -#~ "This may cause decline in the quality of overhang surface when print " -#~ "fastly" -#~ msgstr "" -#~ "El motor Arachne solo funciona cuando la ralentización por voladizo está " -#~ "desactivada.\n" -#~ "Esto puede provocar una disminución en la calidad de los voladizos al " -#~ "imprimir rápidamente." - -#~ msgid "" -#~ "Disable overhang slowing down automatically? \n" -#~ "Yes - Enable arachne and disable overhang slowing down\n" -#~ "No - Give up using arachne this time" -#~ msgstr "" -#~ "¿Desactivar automáticamente la ralentización del voladizo?\n" -#~ "Sí - Activar Arachne y desactivar la ralentización del voladizo\n" -#~ "No - No utilizar Arachne para esta impresión" - -#~ msgid "Start" -#~ msgstr "Iniciar" - -#~ msgid "G-code" -#~ msgstr "G-code" - -#~ msgid "Backup" -#~ msgstr "Copia de seguridad" - -#~ msgid "Backup interval" -#~ msgstr "Intervalo de copia de seguridad" - -#, c-format, boost-format -#~ msgid "The %s filament is too soft to be used with the AMS" -#~ msgstr "El filamento %s es demasiado blando para usarlo con el AMS" - -#, c-format, boost-format -#~ msgid "" -#~ "It seems object %s has completely floating regions. Please re-orient the " -#~ "object or enable support generation." -#~ msgstr "" -#~ "Parece que el objeto %s tiene regiones completamente flotantes. Reoriente " -#~ "el objeto o habilite la generación de soporte." - -#, c-format, boost-format -#~ msgid "" -#~ "It seems object %s has large overhangs. Please enable support generation." -#~ msgstr "" -#~ "Parece que el objeto %s tiene grandes voladizos. Habilite la generación " -#~ "de soporte." - -#~ msgid "\\u2103" -#~ msgstr "\\ u2103" - -#~ msgid "mm\\u00B3" -#~ msgstr "mm\\ u00b3" - -#~ msgid "" -#~ "Spiral mode only works when wall loops is 1, support is disabled, top " -#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " -#~ "traditional" -#~ msgstr "" -#~ "El modo espiral solo funciona cuando los bucles de pared son 1, el " -#~ "soporte está desactivado, las capas superiores son 0, la densidad de " -#~ "relleno disperso es 0 y el tipo de lapso de tiempo es tradicional" - -#~ msgid "Keep upper part" -#~ msgstr "Mantener la parte superior" - -#~ msgid "Keep lower part" -#~ msgstr "Mantener la parte inferior" - -#~ msgid "AMS auto switch filament" -#~ msgstr "Cambio automático de filamento AMS" - -#~ msgid "" -#~ "When using support material for the support interface, We recommend the " -#~ "following settings:\n" -#~ "0 top z distance, 0 interface spacing, concentric pattern." -#~ msgstr "" -#~ "Al utilizar material de soporte para la interfaz de soporte, recomendamos " -#~ "los siguientes ajustes:\n" -#~ "Distancia z superior a 0, espaciado de interfaz 0, patrón concéntrico." - -#~ msgid "" -#~ "The P1P printer does not support smooth timelapse, use traditional " -#~ "timelapse instead." -#~ msgstr "" -#~ "La impresora P1P no admite timelapse fluido; en su lugar, utilice el " -#~ "timelapse tradicional." - -#~ msgid "Support base" -#~ msgstr "Base de soporte" - -#~ msgid "" -#~ "Support layer uses layer height independent with object layer. This is to " -#~ "support customizing z-gap and save print time." -#~ msgstr "" -#~ "La capa de soporte utiliza la altura de la capa independientemente de la " -#~ "capa de objetos. Esto es para permitir la personalización de z-gap y " -#~ "ahorrar tiempo de impresión." - #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -9369,6 +9271,9 @@ msgstr "" #~ msgid "AMSMaterialsSetting" #~ msgstr "Configuración de materiales AMS" +#~ msgid "AMS auto switch filament" +#~ msgstr "Cambio automático de filamento AMS" + #~ msgid "AWS PRE host" #~ msgstr "Host de AWS PRE" @@ -9392,6 +9297,16 @@ msgstr "" #~ "Por favor, resuelva el problema moviéndolo totalmente dentro o fuera de " #~ "la placa." +#~ msgid "" +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly" +#~ msgstr "" +#~ "El motor Arachne solo funciona cuando la ralentización por voladizo está " +#~ "desactivada.\n" +#~ "Esto puede provocar una disminución en la calidad de los voladizos al " +#~ "imprimir rápidamente." + #~ msgid "" #~ "Arachne engine only works when overhang slowing down is disabled.\n" #~ "This may cause decline in the quality of overhang surface when print " @@ -9420,6 +9335,12 @@ msgstr "" #~ msgid "Avoid crossing wall when travel" #~ msgstr "Evitar cruzar el muro en los desplazamientos" +#~ msgid "Backup" +#~ msgstr "Copia de seguridad" + +#~ msgid "Backup interval" +#~ msgstr "Intervalo de copia de seguridad" + #~ msgid "" #~ "Bed exclude area that can't used as printable area in X-Y plane. For " #~ "example, the bottom left area which is used to cut filament in X1 when " @@ -9516,6 +9437,15 @@ msgstr "" #~ msgid "Device:" #~ msgstr "Dispositivo:" +#~ msgid "" +#~ "Disable overhang slowing down automatically? \n" +#~ "Yes - Enable arachne and disable overhang slowing down\n" +#~ "No - Give up using arachne this time" +#~ msgstr "" +#~ "¿Desactivar automáticamente la ralentización del voladizo?\n" +#~ "Sí - Activar Arachne y desactivar la ralentización del voladizo\n" +#~ "No - No utilizar Arachne para esta impresión" + #~ msgid "Display printable box" #~ msgstr "Caja de visualización imprimible " @@ -9722,6 +9652,9 @@ msgstr "" #~ msgid "Fragment filter" #~ msgstr "Filtro de Fragmentos" +#~ msgid "G-code" +#~ msgstr "G-code" + #~ msgid "" #~ "Green represents that AMS humidity is normal, orange and red represent " #~ "that humidity is too high.(Lower the better)" @@ -9790,6 +9723,19 @@ msgstr "" #~ msgid "Inner wall speed" #~ msgstr "Velocidad de la pared interior" +#~ msgid "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." +#~ msgstr "" +#~ "Parece que el objeto %s tiene regiones completamente flotantes. Reoriente " +#~ "el objeto o habilite la generación de soporte." + +#~ msgid "" +#~ "It seems object %s has large overhangs. Please enable support generation." +#~ msgstr "" +#~ "Parece que el objeto %s tiene grandes voladizos. Habilite la generación " +#~ "de soporte." + #~ msgid "" #~ "It seems object %s needs support to print. Please enable support " #~ "generation." @@ -9797,6 +9743,12 @@ msgstr "" #~ "Parece que el objeto %s necesita soporte para imprimir. Por favor, active " #~ "la generación de soporte." +#~ msgid "Keep lower part" +#~ msgstr "Mantener la parte inferior" + +#~ msgid "Keep upper part" +#~ msgstr "Mantener la parte superior" + #~ msgid "Layer Time(log): " #~ msgstr "Tiempo de capa (registro): " @@ -10053,6 +10005,18 @@ msgstr "" #~ "el soporte está desactivado, las capas superiores de la cáscara es 0 y la " #~ "densidad de relleno dispersa es 0\n" +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" +#~ msgstr "" +#~ "El modo espiral solo funciona cuando los bucles de pared son 1, el " +#~ "soporte está desactivado, las capas superiores son 0, la densidad de " +#~ "relleno disperso es 0 y el tipo de lapso de tiempo es tradicional" + +#~ msgid "Start" +#~ msgstr "Iniciar" + #~ msgid "Stop printing when Spaghetti or Excess Chute Pileup is detected" #~ msgstr "" #~ "Detener la impresión cuando se detecten hilos o un exceso de material de " @@ -10075,6 +10039,9 @@ msgstr "" #~ msgid "Suggestion: Actual Volume in range [%d, %d]" #~ msgstr "Sugerencia: Volumen real dentro del rango [%d, %d]" +#~ msgid "Support base" +#~ msgstr "Base de soporte" + #~ msgid "" #~ "Support layer uses layer height independent with object layer. This is to " #~ "support custom support gap,but may cause extra filament switches if " @@ -10085,6 +10052,14 @@ msgstr "" #~ "personalizada, pero puede causar cambios de filamento adicionales si el " #~ "soporte se especifica como un extrusor diferente con el objeto" +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." +#~ msgstr "" +#~ "La capa de soporte utiliza la altura de la capa independientemente de la " +#~ "capa de objetos. Esto es para permitir la personalización de z-gap y " +#~ "ahorrar tiempo de impresión." + #~ msgid "" #~ "Switch to rectilinear pattern?\n" #~ "Yes - switch to rectilinear pattern automaticlly\n" @@ -10111,6 +10086,9 @@ msgstr "" #~ msgid "Sync material list from AMS" #~ msgstr "Sincronizar la lista de materiales de AMS" +#~ msgid "The %s filament is too soft to be used with the AMS" +#~ msgstr "El filamento %s es demasiado blando para usarlo con el AMS" + #~ msgid "" #~ "The 3mf's version %s is newer than %s's version %s, Found following keys " #~ "unrecognized:\n" @@ -10131,6 +10109,13 @@ msgstr "" #~ msgid "The Config is not compatible and can not be loaded." #~ msgstr "La configuración no es compatible y no se puede cargar." +#~ msgid "" +#~ "The P1P printer does not support smooth timelapse, use traditional " +#~ "timelapse instead." +#~ msgstr "" +#~ "La impresora P1P no admite timelapse fluido; en su lugar, utilice el " +#~ "timelapse tradicional." + #~ msgid "" #~ "The firmware versions of printer and AMS are too low.Please update to the " #~ "latest version before sending the print job" @@ -10232,12 +10217,7 @@ msgstr "" #~ "\"Timelapse Wipe Tower\" \n" #~ "by right-click the empty position of build plate and choose \"Add " #~ "Primitive\"->\"Timelapse Wipe Tower\".\n" -#~ msgstr "" -#~ "When recording timelapse without toolhead, it is recommended to add a " -#~ "\"Timelapse Wipe Tower\" \n" -#~ "by right-click the empty position of build plate and choose \"Add " -#~ "Primitive\"->\"Timelapse Wipe Tower\".\n" -#~ "\n" +#~ msgstr "\n" #~ msgid "" #~ "When sparse infill density is low, the internal solid infill or internal " @@ -10255,6 +10235,15 @@ msgstr "" #~ "específicos, de forma que se puedan proporcionar mejores anclajes para " #~ "los puentes internos. 0 significa desactivar esta función" +#~ msgid "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." +#~ msgstr "" +#~ "Al utilizar material de soporte para la interfaz de soporte, recomendamos " +#~ "los siguientes ajustes:\n" +#~ "Distancia z superior a 0, espaciado de interfaz 0, patrón concéntrico." + #~ msgid "" #~ "X1 General Settings - Network Settings in the side bar of X1 main screen" #~ msgstr "" diff --git a/bbl/i18n/fr/BambuStudio_fr.po b/bbl/i18n/fr/BambuStudio_fr.po index 61052570da..e4742c850a 100644 --- a/bbl/i18n/fr/BambuStudio_fr.po +++ b/bbl/i18n/fr/BambuStudio_fr.po @@ -2,13 +2,16 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-04 14:45+0800\n" +"POT-Creation-Date: 2023-04-06 08:26+0800\n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Localazy (https://localazy.com)\n" "Plural-Forms: nplurals=2; plural=(n==0 || n==1) ? 0 : 1;\n" +"X-Generator: Poedit 3.2.2\n" msgid "Supports Painting" msgstr "Prend en charge la peinture" @@ -20,7 +23,7 @@ msgid "Section view" msgstr "Vue en coupe" msgid "Reset direction" -msgstr "Reset direction" +msgstr "Réinitialiser la direction" msgid "Ctrl + Mouse wheel" msgstr "Ctrl + molette de la souris" @@ -32,13 +35,13 @@ msgid "Left mouse button" msgstr "Bouton gauche de la souris" msgid "Enforce supports" -msgstr "Appliquer les supports" +msgstr "Forcer les supports" msgid "Right mouse button" msgstr "Bouton droit de la souris" msgid "Block supports" -msgstr "Bloc prend en charge" +msgstr "Bloquer les supports" msgid "Shift + Left mouse button" msgstr "Maj + bouton gauche de la souris" @@ -53,13 +56,13 @@ msgid "Highlight overhang areas" msgstr "Mettez en surbrillance les zones en surplomb" msgid "Gap fill" -msgstr "Gap fill" +msgstr "Remplir les trous" msgid "Perform" msgstr "Exécuter" msgid "Gap area" -msgstr "Gap area" +msgstr "Aire des trous" msgid "Tool type" msgstr "Type d'outil" @@ -68,7 +71,7 @@ msgid "Smart fill angle" msgstr "Angle de remplissage intelligent" msgid "On overhangs only" -msgstr "On overhangs only" +msgstr "Sur les surplombs uniquement" msgid "Auto support threshold angle: " msgstr "Angle de seuil de support automatique :" @@ -83,11 +86,12 @@ msgid "Fill" msgstr "Remplir" msgid "Gap Fill" -msgstr "Gap Fill" +msgstr "Remplissage des trous" #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" -msgstr "Allows painting only on facets selected by: \"%1%\"" +msgstr "" +"Permet de peindre uniquement sur les facettes sélectionnées par : \"%1%\"" msgid "Highlight faces according to overhang angle." msgstr "Mettez en surbrillance les faces en fonction de l'angle de surplomb." @@ -99,7 +103,7 @@ msgid "Support Generated" msgstr "Supports générés" msgid "Lay on face" -msgstr "Allongé sur le visage" +msgstr "Positionner sur une face" #, boost-format msgid "" @@ -135,22 +139,22 @@ msgid "Filaments" msgstr "Filaments" msgid "Brush" -msgstr "Brosser" +msgstr "Pinceau" msgid "Smart fill" msgstr "Remplissage intelligent" msgid "Bucket fill" -msgstr "Remplissage du seau" +msgstr "Pot de peinture" msgid "Height range" msgstr "Plage de hauteur" msgid "Ctrl + Shift + Enter" -msgstr "Ctrl + Shift + Enter" +msgstr "Ctrl + Maj + Entrée" msgid "Toggle Wireframe" -msgstr "Toggle Wireframe" +msgstr "Activer Filaire" msgid "Shortcut Key " msgstr "Touche de raccourci" @@ -172,7 +176,7 @@ msgid "Move" msgstr "Déplacer" msgid "Rotate" -msgstr "Tourner" +msgstr "Pivoter" msgid "Optimize orientation" msgstr "Optimiser l'orientation" @@ -181,13 +185,13 @@ msgid "Apply" msgstr "Appliquer" msgid "Scale" -msgstr "Échelle" +msgstr "Redimensionner" msgid "Error: Please close all toolbar menus first" msgstr "Erreur : Veuillez d'abord fermer tous les menus de la barre d'outils" msgid "Tool-Lay on Face" -msgstr "Pose d'outils sur le visage" +msgstr "Outil-Positionner sur une face" msgid "in" msgstr "dans" @@ -217,22 +221,22 @@ msgid "Group Operations" msgstr "Opérations de groupe" msgid "Set Position" -msgstr "Définir la position" +msgstr "Définir la Position" msgid "Set Orientation" -msgstr "Définir l'orientation" +msgstr "Définir l'Orientation" msgid "Set Scale" -msgstr "Définir l'échelle" +msgstr "Définir l'Échelle" msgid "Reset Position" msgstr "Position de réinitialisation" msgid "Reset Rotation" -msgstr "Réinitialiser la rotation" +msgstr "Réinitialiser la Rotation" msgid "World coordinates" -msgstr "Coordonnées mondiales" +msgstr "Les coordonnées mondiales" msgid "°" msgstr "°" @@ -283,10 +287,10 @@ msgid "Movement:" msgstr "Mouvement:" msgid "Movement" -msgstr "Movement" +msgstr "Mouvement" msgid "Height" -msgstr "Height" +msgstr "Hauteur" msgid "Edit connectors" msgstr "" @@ -361,7 +365,7 @@ msgid "Cancel" msgstr "Annuler" msgid "Warning" -msgstr "Avertissement" +msgstr "Alerte" msgid "Invalid connectors detected" msgstr "" @@ -402,7 +406,7 @@ msgid "Detail level" msgstr "Niveau de détail" msgid "Decimate ratio" -msgstr "Ratio de décimation" +msgstr "Rapport de décimation" #, boost-format msgid "" @@ -430,30 +434,30 @@ msgid "Extra high" msgstr "Très haut" msgid "High" -msgstr "Haut" +msgstr "Élevé" msgid "Medium" msgstr "Moyen" msgid "Low" -msgstr "Bas" +msgstr "Faible" msgid "Extra low" -msgstr "Très basse" +msgstr "Très bas" #, c-format, boost-format msgid "%d triangles" msgstr "%d triangles" msgid "Show wireframe" -msgstr "Afficher le fil de fer" +msgstr "Afficher la vue filaire" #, boost-format msgid "%1%" msgstr "%1%" msgid "Can't apply when proccess preview." -msgstr "Ne peut pas s'appliquer lors de l'aperçu du processus." +msgstr "Ne peut pas s'appliquer lors du processus de prévisualisation." msgid "Operation already cancelling. Please wait few seconds." msgstr "Opération déjà annulée. Veuillez patienter quelques secondes." @@ -465,22 +469,22 @@ msgid "Perform Recognition" msgstr "Effectuer la reconnaissance" msgid "Brush size" -msgstr "Brush size" +msgstr "Taille du pinceau" msgid "Brush shape" -msgstr "Brush shape" +msgstr "Forme du pinceau" msgid "Enforce seam" -msgstr "Enforce seam" +msgstr "Forcer la couture" msgid "Block seam" -msgstr "Block seam" +msgstr "Bloquer la couture" msgid "Seam painting" -msgstr "Seam painting" +msgstr "Peinture des coutures" msgid "Remove selection" -msgstr "Remove selection" +msgstr "Supprimer la sélection" msgid "Shift + Mouse move up or dowm" msgstr "" @@ -489,16 +493,16 @@ msgid "Rotate text" msgstr "" msgid "Text shape" -msgstr "Text shape" +msgstr "Forme du texte" msgid "Font" -msgstr "Font" +msgstr "Police" msgid "Thickness" -msgstr "Thickness" +msgstr "Épaisseur" msgid "Input text" -msgstr "Input text" +msgstr "Texte entré" msgid "Embeded" msgstr "" @@ -524,10 +528,10 @@ msgid "Ctrl+" msgstr "" msgid "Notice" -msgstr "Remarquer" +msgstr "Remarque" msgid "Undefined" -msgstr "erreur indéfinie" +msgstr "Non défini" #, boost-format msgid "%1% was replaced with %2%" @@ -566,7 +570,7 @@ msgid "V" msgstr "V" msgid "Internal Version" -msgstr "Internal Version" +msgstr "Version Interne" msgid "Version" msgstr "Version" @@ -598,14 +602,14 @@ msgid "BambuStudio got an unhandled exception: %1%" msgstr "BambuStudio a reçu une exception non gérée : %1%" msgid "Downloading Bambu Network Plug-in" -msgstr "Downloading Bambu Network Plug-in" +msgstr "Téléchargement du plug-in Bambu Network" msgid "Incorrect password" -msgstr "Incorrect password" +msgstr "Mot de passe incorrect" #, c-format, boost-format msgid "Connect %s failed! [SN:%s, code=%s]" -msgstr "Connect %s failed! [SN:%s, code=%s]" +msgstr "La connexion à %s a échoué ! [SN : %s, code = %s]" msgid "" "BambuStudio configuration file may be corrupted and is not abled to be " @@ -618,10 +622,12 @@ msgstr "" msgid "" "%s\n" "Do you want to continue?" -msgstr "%s Voulez-vous continuer ?" +msgstr "" +"%s\n" +"Voulez-vous continuer ?" msgid "Remember my choice" -msgstr "Souviens-toi de mon choix" +msgstr "Se souvenir de mon choix" msgid "Loading configuration" msgstr "Chargement de la configuration" @@ -654,7 +660,7 @@ msgid "Choose one file (3mf):" msgstr "Choisissez un fichier (3mf):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" -msgstr "Choose one or more files (3mf/step/stl/svg/obj/amf):" +msgstr "Choisissez un ou plusieurs fichiers (3mf/step/stl/svg/obj/amf) :" msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" msgstr "Choisissez un fichier (gcode/.gco/.g/.ngc/ngc) :" @@ -670,10 +676,12 @@ msgstr "" "annuler ou enregistrer les modifications en tant que nouveaux préréglages." msgid "User logged out" -msgstr "User logged out" +msgstr "Utilisateur déconnecté" msgid "new or open project file is not allowed during the slicing process!" -msgstr "new or open project file is not allowed during the slicing process!" +msgstr "" +"L'ouverture ou la création d'un fichier de projet n'est pas autorisée " +"pendant le processus de tranchage !" msgid "Open Project" msgstr "Projet ouvert" @@ -701,7 +709,7 @@ msgid "Switching application language" msgstr "Changer la langue de l'application" msgid "Select the language" -msgstr "Sélectionnez la langue" +msgstr "Sélectionner la langue" msgid "Language" msgstr "Langue" @@ -710,13 +718,13 @@ msgid "*" msgstr "*" msgid "The uploads are still ongoing" -msgstr "The uploads are still ongoing" +msgstr "Les téléversements sont toujours en cours" msgid "Stop them and continue anyway?" -msgstr "Stop them and continue anyway?" +msgstr "Les arrêter et continuer quand même ?" msgid "Ongoing uploads" -msgstr "Ongoing uploads" +msgstr "Téléversements en cours" msgid "Select a G-code file:" msgstr "Sélectionnez un fichier G-code :" @@ -725,7 +733,7 @@ msgid "Import File" msgstr "" msgid "Delete" -msgstr "Effacer" +msgstr "Supprimer" msgid "Choose files" msgstr "Choisir des fichiers" @@ -734,7 +742,7 @@ msgid "New Folder" msgstr "" msgid "Open" -msgstr "Open" +msgstr "Ouvrir" msgid "Rename" msgstr "Renommer" @@ -762,7 +770,7 @@ msgid "Flush options" msgstr "Options de purge" msgid "Speed" -msgstr "La rapidité" +msgstr "Vitesse" msgid "Strength" msgstr "Résistance" @@ -780,19 +788,19 @@ msgid "Bottom Minimum Shell Thickness" msgstr "Épaisseur minimale de la coque inférieure" msgid "Ironing" -msgstr "Repassage" +msgstr "Lissage" msgid "Fuzzy Skin" -msgstr "Peau floue" +msgstr "Surface Irrégulière" msgid "Extruders" -msgstr "Extrudeuses" +msgstr "Extrudeurs" msgid "Extrusion Width" -msgstr "Largeur d'extrusion" +msgstr "Largeur d'Extrusion" msgid "Wipe options" -msgstr "Options d'effacement" +msgstr "Options de nettoyage" msgid "Bed adhension" msgstr "Adhérence au lit" @@ -813,16 +821,16 @@ msgid "Add support blocker" msgstr "Ajouter un bloqueur de support" msgid "Add support enforcer" -msgstr "Ajouter un bloqueur de support" +msgstr "Ajouter un générateur de supports" msgid "Select settings" msgstr "Sélectionnez les paramètres" msgid "Hide" -msgstr "Hide" +msgstr "Masquer" msgid "Show" -msgstr "Show" +msgstr "Afficher" msgid "Del" msgstr "" @@ -849,7 +857,7 @@ msgid "Height range Modifier" msgstr "" msgid "Add settings" -msgstr "Ajouter des paramètres" +msgstr "Ajouter des réglages" msgid "Change type" msgstr "Changer le type" @@ -867,19 +875,19 @@ msgid "Fix model" msgstr "Réparer le modèle" msgid "Export as STL" -msgstr "Exporter en STL" +msgstr "Exporter en tant que STL" msgid "Reload from disk" -msgstr "Reload from disk" +msgstr "Recharger à partir du disque" msgid "Reload the selected parts from disk" -msgstr "Reload the selected parts from disk" +msgstr "Recharger les pièces sélectionnées à partir du disque" msgid "Replace with STL" -msgstr "Replace with STL" +msgstr "Remplacer par le STL" msgid "Replace the selected part with new STL" -msgstr "Replace the selected part with new STL" +msgstr "Remplacer la pièce sélectionnée par un nouveau STL" msgid "Change filament" msgstr "Changer de filament" @@ -904,7 +912,7 @@ msgid "Scale an object to fit the build volume" msgstr "Mettre à l'échelle un objet pour l'adapter au volume de construction" msgid "Flush Options" -msgstr "Flush Options" +msgstr "Options de Rinçage" msgid "Flush into objects' infill" msgstr "Purger dans le remplissage d'objet" @@ -916,7 +924,7 @@ msgid "Flush into objects' support" msgstr "Purger dans les supports de l'objet" msgid "Edit in Parameter Table" -msgstr "Edit in Parameter Table" +msgstr "Modifier dans la Table des Paramètres" msgid "Convert from inch" msgstr "Convertir en pouce" @@ -961,7 +969,7 @@ msgid "Mirror along the Z axis" msgstr "Miroir le long de l'axe Z" msgid "Mirror" -msgstr "Miroir" +msgstr "Symétrie" msgid "Mirror object" msgstr "Symétriser l'Objet" @@ -973,25 +981,25 @@ msgid "Add Primitive" msgstr "Ajouter une primitive" msgid "Show Labels" -msgstr "Show Labels" +msgstr "Afficher les étiquettes" msgid "To objects" -msgstr "Aux objets" +msgstr "Vers les objets" msgid "Split the selected object into multiple objects" msgstr "Diviser l'objet sélectionné en plusieurs objets" msgid "To parts" -msgstr "Aux pièces" +msgstr "Vers les parties" msgid "Split the selected object into multiple parts" msgstr "Diviser l'objet sélectionné en plusieurs parties" msgid "Split" -msgstr "Diviser" +msgstr "Scinder" msgid "Split the selected object" -msgstr "Diviser l'objet sélectionné" +msgstr "Scinder l'objet sélectionné" msgid "Auto orientation" msgstr "Orientation automatique" @@ -1019,7 +1027,7 @@ msgid "delete all objects on current plate" msgstr "supprimer tous les objets sur la plaque actuelle" msgid "Arrange" -msgstr "Organiser" +msgstr "Agencer" msgid "arrange current plate" msgstr "organiser la plaque actuelle" @@ -1037,13 +1045,13 @@ msgid "Clone" msgstr "Cloner" msgid "Simplify Model" -msgstr "Simplify Model" +msgstr "Simplifier le Modèle" msgid "Center" -msgstr "Center" +msgstr "Centre" msgid "Edit Process Settings" -msgstr "Edit Process Settings" +msgstr "Modifier les paramètres du processus" msgid "Edit print parameters for a single object" msgstr "Modifier les paramètres d'impression d'un seul objet" @@ -1058,10 +1066,10 @@ msgid "current" msgstr "courant" msgid "Set Unprintable" -msgstr "Définir non imprimable" +msgstr "Définir non-Imprimable" msgid "Set Printable" -msgstr "Ensemble imprimable" +msgstr "Définir Imprimable" msgid "Unlock" msgstr "Ouvrir" @@ -1079,11 +1087,13 @@ msgstr "Fila." msgid "%1$d error repaired" msgid_plural "%1$d errors repaired" msgstr[0] "%1$d erreur réparée" +msgstr[1] "%1$d erreur réparée" #, c-format, boost-format msgid "Error: %1$d non-manifold edge." msgid_plural "Error: %1$d non-manifold edges." msgstr[0] "Erreur : %1$d arête non multiple." +msgstr[1] "Erreur : %1$d arête non multiple." msgid "Remaining errors" msgstr "Erreurs restantes" @@ -1092,6 +1102,7 @@ msgstr "Erreurs restantes" msgid "%1$d non-manifold edge" msgid_plural "%1$d non-manifold edges" msgstr[0] "%1$d arête non multiple" +msgstr[1] "%1$d arête non multiple" msgid "Right click the icon to fix model object" msgstr "Cliquez avec le bouton droit sur l'icône pour fixer l'objet modèle" @@ -1142,8 +1153,8 @@ msgid "" "Switch to per-object setting mode to edit process settings of selected " "objects." msgstr "" -"Switch to per-object setting mode to edit process settings of selected " -"objects." +"Passez en mode de réglage \"par objet\" pour modifier les paramètres de " +"processus des objets sélectionnés." msgid "Delete connector from object which is a part of cut" msgstr "" @@ -1214,7 +1225,7 @@ msgid "Object" msgstr "Objet" msgid "Part" -msgstr "Partie" +msgstr "Pièce" msgid "Layer" msgstr "Couche" @@ -1246,22 +1257,22 @@ msgid "Modifier" msgstr "Modificateur" msgid "Support Blocker" -msgstr "Bloqueur de soutien" +msgstr "Bloqueur de Support" msgid "Support Enforcer" msgstr "Générateur de Support" msgid "Type:" -msgstr "Taper:" +msgstr "Type :" msgid "Choose part type" msgstr "Choisissez le type de pièce" msgid "Enter new name" -msgstr "Entrez le nouveau nom" +msgstr "Entrer de nouveaux noms" msgid "Renaming" -msgstr "Renommer" +msgstr "Renommage" msgid "Repairing model object" msgstr "Réparer l'objet modèle" @@ -1269,10 +1280,12 @@ msgstr "Réparer l'objet modèle" msgid "Following model object has been repaired" msgid_plural "Following model objects have been repaired" msgstr[0] "L'objet modèle suivant a été réparé" +msgstr[1] "L'objet modèle suivant a été réparé" msgid "Failed to repair folowing model object" msgid_plural "Failed to repair folowing model objects" msgstr[0] "Échec de la réparation de l'objet modèle suivant" +msgstr[1] "Échec de la réparation des objets de modèle suivants" msgid "Repairing was canceled" msgstr "La réparation a été annulée" @@ -1331,13 +1344,13 @@ msgid "Auto Brim" msgstr "Bord automatique" msgid "Outer wall speed" -msgstr "Outer wall speed" +msgstr "Vitesse du mur extérieur" msgid "Plate" msgstr "Plaque" msgid "Brim" -msgstr "Bord" +msgstr "Bordure" msgid "Object/Part Setting" msgstr "Réglage objet/pièce" @@ -1352,16 +1365,16 @@ msgid "Line Type" msgstr "Type de ligne" msgid "More" -msgstr "Suite" +msgstr "Plus" msgid "Open Preferences." -msgstr "Open Preferences" +msgstr "Ouvrir les Préférences" msgid "Open next tip." -msgstr "Open next tip" +msgstr "Ouvrir le conseil suivant" msgid "Open Documentation in web browser." -msgstr "Open documentation in web browser" +msgstr "Ouvrir la documentation dans un navigateur Web" msgid "Pause:" msgstr "" @@ -1373,34 +1386,34 @@ msgid "Custom G-code:" msgstr "" msgid "Custom G-code" -msgstr "Code G personnalisé" +msgstr "G-code personnalisé" msgid "Enter Custom G-code used on current layer:" -msgstr "Enter Custom G-code used on current layer:" +msgstr "Entrez le G-code personnalisé a utiliser sur la couche actuelle :" msgid "OK" msgstr "OK" msgid "Jump to Layer" -msgstr "Jump to layer" +msgstr "Aller à la couche" msgid "Jump to layer" -msgstr "Jump to layer" +msgstr "Aller à la couche" msgid "Please enter the layer number" -msgstr "Please enter the layer number." +msgstr "Veuillez entrer le numéro de la couche." msgid "Add Pause" -msgstr "Add Pause" +msgstr "Ajouter une Pause" msgid "Add Custom G-code" -msgstr "Add Custom G-code" +msgstr "Ajouter un G-code personnalisé" msgid "Add Custom Template" -msgstr "Add Custom Template" +msgstr "Ajouter un Modèle Personnalisé" msgid "Filament " -msgstr "Filament " +msgstr "Filament" msgid "Delete Pause" msgstr "" @@ -1436,13 +1449,13 @@ msgid "Ams filament backup" msgstr "" msgid "AMS not connected" -msgstr "AMS not connected" +msgstr "AMS non connecté" msgid "Cali" -msgstr "Cali" +msgstr "Calib." msgid "Calibration of extrusion" -msgstr "Calibration of extrusion" +msgstr "Calibration de l'extrusion" msgid "Load Filament" msgstr "Charger" @@ -1451,7 +1464,7 @@ msgid "Unload Filament" msgstr "Déchargement" msgid "Ext Spool" -msgstr "Ext Spool" +msgstr "Bobine Ext." msgid "Tips" msgstr "astuces" @@ -1460,23 +1473,24 @@ msgid "Guide" msgstr "Guide" msgid "Retry" -msgstr "Retry" +msgstr "Réessayer" msgid "Calibrating AMS..." msgstr "Étalonnage de l'AMS..." msgid "A problem occured during calibration. Click to view the solution." msgstr "" -"Un problème est survenu lors de l'étalonnage. Cliquez pour voir la solution." +"Un problème est survenu lors de la calibration. Cliquez pour voir la " +"solution." msgid "Calibrate again" msgstr "Etalonner de nouveau" msgid "Cancel calibration" -msgstr "Annuler l'étalonnage" +msgstr "Annuler la calibration" msgid "Heat the nozzle" -msgstr "Heat the nozzle" +msgstr "Chauffer la buse" msgid "Cut filament" msgstr "filament coupé" @@ -1485,7 +1499,7 @@ msgid "Pull back current filament" msgstr "Retirer le filament actuel" msgid "Push new filament into extruder" -msgstr "Push new filament into extruder" +msgstr "Poussez le nouveau filament dans l'extrudeur" msgid "Purge old filament" msgstr "Purger l'ancien filament" @@ -1533,10 +1547,10 @@ msgstr "" "géométries d'objets." msgid "Arranging" -msgstr "Arranging" +msgstr "Agencement" msgid "Arranging canceled." -msgstr "Arrangement annulé." +msgstr "Agencement annulé." msgid "" "Arranging is done but there are unpacked items. Reduce spacing and try again." @@ -1545,7 +1559,7 @@ msgstr "" "l'espacement et réessayez." msgid "Arranging done." -msgstr "Rangement fait." +msgstr "Agencement terminé." #, c-format, boost-format msgid "" @@ -1553,8 +1567,9 @@ msgid "" "bed:\n" "%s" msgstr "" -"L'arrangement a ignoré les objets suivants qui ne peuvent pas tenir dans un " -"lit simple : %s" +"L'agencement a ignoré les objets suivants qui ne peuvent pas tenir dans un " +"seul plateau :\n" +"%s" msgid "" "All the selected objects are on the locked plate,\n" @@ -1574,7 +1589,7 @@ msgid "Orienting..." msgstr "Orienter..." msgid "Orienting" -msgstr "Orienting" +msgstr "Orienter" msgid "Error! Unable to create thread!" msgstr "Erreur! Impossible de créer le fil !" @@ -1607,7 +1622,7 @@ msgid "Unknown Failure" msgstr "Erreur inconnue" msgid "Please check the printer network connection." -msgstr "Please check the printer network connection." +msgstr "Vérifiez la connexion réseau de l'imprimante." msgid "Abnormal print file data. Please slice again" msgstr "" @@ -1618,7 +1633,7 @@ msgstr "Tâche annulée" msgid "Upload task timed out. Please check the network problem and try again" msgstr "" -"La tâche de téléchargement a expiré. Veuillez vérifier le réseau et réessayer" +"La tâche de téléversement a expirée. Veuillez vérifier le réseau et réessayer" msgid "Cloud service connection failed. Please try again." msgstr "La connexion au service cloud a échoué. Veuillez réessayer." @@ -1634,7 +1649,7 @@ msgstr "" "Veuillez simplifier le modèle et le trancher à nouveau" msgid "Failed uploading print file" -msgstr "Échec du téléchargement du fichier d'impression" +msgstr "Échec de téléversement du fichier d'impression" msgid "Wrong Access code" msgstr "Code d'accès erroné" @@ -1646,51 +1661,55 @@ msgid "Sending print job through cloud service" msgstr "Envoi de la tâche d'impression via le service cloud" msgid "Service Unavailable" -msgstr "Service Unavailable" +msgstr "Service Indisponible" msgid "Unkown Error." -msgstr "Unknown Error." +msgstr "Erreur inconnue." msgid "Sending print configuration" msgstr "Envoi de la configuration d'impression" #, c-format, boost-format msgid "Successfully sent. Will automatically jump to the device page in %ss" -msgstr "Successfully sent. Will automatically jump to the device page in %ss" +msgstr "" +"Envoyé avec succès. Basculement automatique vers la page Appareil dans %ss" msgid "An SD card needs to be inserted before printing via LAN." -msgstr "A MicroSD card needs to be inserted before printing via LAN." +msgstr "" +"Une carte microSD doit être insérée avant d'imprimer via le réseau local." msgid "Failed to send the print job. Please try again." -msgstr "Failed to send the print job. Please try again." +msgstr "L'envoi de la tâche d'impression a échoué. Veuillez réessayer." msgid "Send to Printer failed. Please try again." -msgstr "Send to Printer failed. Please try again." +msgstr "L'envoi vers l'imprimante a échoué. Veuillez réessayer." msgid "No space left on Printer SD card" msgstr "" msgid "Sending gcode file over LAN" -msgstr "Sending G-code file over LAN" +msgstr "Envoi d'un fichier G-code via le réseau local" msgid "Sending gcode file through cloud service" -msgstr "Sending G-code file through cloud service" +msgstr "Envoi du fichier G-code via le service cloud" msgid "Sending gcode file to sdcard" -msgstr "Sending G-code file to MicroSD card" +msgstr "Envoi du fichier G-code sur la carte MicroSD" #, c-format, boost-format msgid "Successfully sent. Close current page in %s s" -msgstr "Successfully sent. Close current page in %s s" +msgstr "Envoyé avec succès. Fermeture de la page actuelle dans %ss" msgid "An SD card needs to be inserted before sending to printer." -msgstr "A MicroSD card needs to be inserted before sending to printer." +msgstr "Une carte microSD doit être insérée avant l'envoi à l'imprimante." msgid "Please log out and login to the printer again." -msgstr "Please log out and login to the printer again." +msgstr "Veuillez vous déconnecter et vous reconnecter à l'imprimante." msgid "Failed uploading print file. Please enter ip address again." -msgstr "Failed uploading print file. Please enter IP address again." +msgstr "" +"Impossible de téléverser le fichier d'impression. Entrez à nouveau l'adresse " +"IP." msgid "Choose SLA archive:" msgstr "" @@ -1745,22 +1764,22 @@ msgid "Attention!" msgstr "Attention !" msgid "Downloading" -msgstr "Downloading" +msgstr "Téléchargement" msgid "Download failed" -msgstr "Download failed" +msgstr "Échec du téléchargement" msgid "Cancelled" -msgstr "Canceled" +msgstr "Annulé" msgid "Install successfully." -msgstr "Installed successfully" +msgstr "Installé avec succès" msgid "Installing" -msgstr "Installing" +msgstr "Installation…" msgid "Install failed" -msgstr "Install failed" +msgstr "Échec de l'installation" msgid "Portions copyright" msgstr "Copyright des sections" @@ -1803,33 +1822,35 @@ msgid "" "Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " "Merill(supermerill)." msgstr "" -"Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " -"Merill(supermerill)." +"Bambu Studio est basé sur PrusaSlicer de PrusaResearch et SuperSlicer de " +"Merill (supermerill)." msgid "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." -msgstr "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." +msgstr "PrusaSlicer est initialement basé sur Slic3r d'Alessandro Ranellucci." msgid "" "Slic3r was created by Alessandro Ranellucci with the help of many other " "contributors." msgstr "" -"Slic3r was created by Alessandro Ranellucci with the help of many other " -"contributors." +"Slic3r a été créé par Alessandro Ranellucci avec l'aide de nombreux autres " +"contributeurs." msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." -msgstr "Bambu Studio also referenced some ideas from Cura by Ultimaker." +msgstr "" +"Bambu Studio a également fait référence à certaines idées de Cura par " +"Ultimaker." msgid "" "There many parts of the software that come from community contributions, so " "we're unable to list them one-by-one, and instead, they'll be attributed in " "the corresponding code comments." msgstr "" -"There are many parts of the software that come from community contributions, " -"so we're unable to list them one-by-one, and instead, they'll be attributed " -"in the corresponding code comments." +"De nombreuses parties du logiciel proviennent de contributions de la " +"communauté. Nous ne sommes donc pas en mesure de les répertorier une par " +"une. Elles seront attribuées dans les commentaires de code correspondants." msgid "AMS Materials Setting" -msgstr "AMS Materials Setting" +msgstr "Réglage des matériaux AMS" msgid "Confirm" msgstr "Confirmer" @@ -1859,16 +1880,18 @@ msgid "SN" msgstr "Numéro de série" msgid "Setting AMS slot information while printing is not supported" -msgstr "Setting AMS slot information while printing is not supported" +msgstr "" +"La définition des informations relatives aux emplacements AMS pendant " +"l'impression n'est pas prise en charge." msgid "Factors of dynamic flow cali" -msgstr "Factors of dynamic flow cali" +msgstr "Calibration des facteurs de flux dynamique" msgid "Factor K" -msgstr "Factor K" +msgstr "Facteur K" msgid "Factor N" -msgstr "Factor N" +msgstr "Facteur N" msgid "Setting Virtual slot information while printing is not supported" msgstr "" @@ -1877,10 +1900,11 @@ msgid "Are you sure you want to clear the filament information?" msgstr "" msgid "Please input a valid value (K in 0~0.5)" -msgstr "Please input a valid value (K in 0~0.5)" +msgstr "Veuillez saisir une valeur valide (K entre 0 et 0,5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" -msgstr "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" +msgstr "" +"Veuillez saisir une valeur valide (K entre 0 et 0,5, N entre 0,6 et 2,0)" msgid "You need to select the material type and color firet." msgstr "" @@ -1889,121 +1913,125 @@ msgid "Other color" msgstr "" msgid "Dynamic flow calibration" -msgstr "Dynamic flow calibration" +msgstr "Calibrage dynamique du débit" msgid "" "The nozzle temp and max volumetric speed will affect the calibration " "results. Please fill in the same values as the actual printing. They can be " "auto-filled by selecting a filament preset." msgstr "" -"The nozzle temp and max volumetric speed will affect the calibration " -"results. Please fill in the same values as the actual printing. They can be " -"auto-filled by selecting a filament preset." +"La température de la buse et la vitesse volumétrique maximale affecteront " +"les résultats de la calibration. Veuillez saisir les mêmes valeurs que lors " +"de l'impression réelle. Ils peuvent être remplis automatiquement en " +"sélectionnant un préréglage de filament." msgid "Nozzle Diameter" -msgstr "Nozzle Diameter" +msgstr "Diamètre de la Buse" msgid "Bed Type" -msgstr "Bed Type" +msgstr "Type de lit" msgid "Nozzle temperature" -msgstr "Température de buse" +msgstr "Température de la buse" msgid "Bed Temperature" -msgstr "Bed Temperature" - -msgid "Max volumetric speed" -msgstr "Vitesse volumétrique max" - -msgid "℃" -msgstr "" - -msgid "Bed temperature" msgstr "Température du lit" -msgid "mm³" -msgstr "mm³" +msgid "Max volumetric speed" +msgstr "Vitesse volumétrique maximale" + +msgid "\\u2103" +msgstr "\\u2103" + +msgid "Bed temperature" +msgstr "Température du plateau" + +msgid "mm\\u00B3" +msgstr "mm\\u00B3" msgid "Start calibration" -msgstr "Start" +msgstr "Démarrer" msgid "Next" -msgstr "Next" +msgstr "Suivant" msgid "" "Calibration completed. Please find the most uniform extrusion line on your " "hot bed like the picture below, and fill the value on its left side into the " "factor K input box." msgstr "" -"Calibration completed. Please find the most uniform extrusion line on your " -"hot bed like the picture below, and fill the value on its left side into the " -"factor K input box." +"Calibrage terminé. Veuillez trouver la ligne d'extrusion la plus uniforme " +"sur votre lit chaud comme dans l'image ci-dessous, et entrez la valeur sur " +"son côté gauche dans le champ de saisie du facteur K." msgid "Save" -msgstr "sauvegarder" +msgstr "Enregistrer" msgid "Last Step" -msgstr "Back" +msgstr "Retour" msgid "Example" -msgstr "Example" +msgstr "Exemple" #, c-format, boost-format msgid "Calibrating... %d%%" -msgstr "Calibrating... %d%%" +msgstr "Calibration...%d%%" msgid "Calibration completed" -msgstr "Calibration completed" +msgstr "Calibration terminé" #, c-format, boost-format msgid "%s does not support %s" -msgstr "%s does not support %s" +msgstr "%s ne prend pas en charge %s" msgid "Dynamic flow Calibration" -msgstr "Dynamic flow calibration" +msgstr "Calibrage dynamique du débit" msgid "Step" -msgstr "Step" +msgstr "Étape" msgid "AMS Slots" -msgstr "AMS Slots" +msgstr "Emplacements AMS" msgid "" "Note: Only the AMS slots loaded with the same material type can be selected." msgstr "" -"Note: Only the AMS slots loaded with the same material type can be selected." +"Remarque : seuls les emplacements AMS chargés avec le même type de matériau " +"peuvent être sélectionnés." msgid "Enable AMS" -msgstr "Enable AMS" +msgstr "Activer l'AMS" msgid "Print with filaments in the AMS" -msgstr "Print with filament in the AMS" +msgstr "Imprimer avec du filament de l'AMS" msgid "Disable AMS" -msgstr "Disable AMS" +msgstr "Désactiver l'AMS" msgid "Print with the filament mounted on the back of chassis" -msgstr "Print with filament on an external spool" +msgstr "Impression avec du filament de la bobine externe" msgid "Cabin humidity" -msgstr "Cabin humidity" +msgstr "Humidité dans l'AMS" msgid "" "Green means that AMS humidity is normal, orange represent humidity is high, " "red represent humidity is too high.(Hygrometer: lower the better.)" msgstr "" -"Green means that AMS humidity is normal, orange means that humidity is high, " -"and red means that humidity is too high. (Hygrometer: the lower, the better.)" +"Le vert signifie que l'humidité de l'AMS est normale, l'orange signifie que " +"l'humidité est élevée et le rouge signifie que l'humidité est trop élevée. " +"(Hygromètre : plus c'est bas, mieux c'est.)" msgid "Desiccant status" -msgstr "Desiccant status" +msgstr "État du déshydratant" msgid "" "A desiccant status lower than two bars indicates that desiccant may be " "inactive. Please change the desiccant.(The bars: higher the better.)" msgstr "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant. (The higher, the better.)" +"Un état du dessicant inférieur à deux barres indique que le dessicant est " +"peut-être inactif. Veuillez changer le déshydratant. (Plus c'est élevé, " +"mieux c'est.)" msgid "" "Note: When the lid is open or the desiccant pack is changed, it can take " @@ -2011,36 +2039,38 @@ msgid "" "process. During this time, the indicator may not represent the chamber " "accurately." msgstr "" -"Note: When the lid is open or the desiccant pack is changed, it can take " -"hours or a night to absorb the moisture. Low temperatures also slow down the " -"process. During this time, the indicator may not represent the chamber " -"accurately." +"Remarque: Lorsque le couvercle est ouvert ou que le sachet de déshydratant " +"est changé, cela peut prendre plusieurs heures ou une nuit pour absorber " +"l'humidité. Les basses températures ralentissent également le processus. " +"Pendant ce temps, l'indicateur pourrait ne pas representer l'humidité dans " +"l'AMS avec précision. " msgid "" "Config which AMS slot should be used for a filament used in the print job" msgstr "" -"Configure which AMS slot should be used for a filament used in the print job." +"Configurez l'emplacement AMS qui doit être utilisé pour un filament utilisé " +"dans la tâche d'impression." msgid "Filament used in this print job" -msgstr "Filament used in this print job" +msgstr "Filament utilisé dans ce travail d'impression" msgid "AMS slot used for this filament" -msgstr "AMS slot used for this filament" +msgstr "Emplacement AMS utilisé pour ce filament" msgid "Click to select AMS slot manually" -msgstr "Click to select AMS slot manually" +msgstr "Cliquez pour sélectionner manuellement l'emplacement AMS" msgid "Do not Enable AMS" -msgstr "Do not Enable AMS" +msgstr "Ne pas activer l'AMS" msgid "Print using materials mounted on the back of the case" -msgstr "Print using filament on an external spool." +msgstr "Imprimez en utilisant le filament de la bobine externe." msgid "Print with filaments in ams" -msgstr "Print with filament in AMS" +msgstr "Imprimer avec du filament de l'AMS" msgid "Print with filaments mounted on the back of the chassis" -msgstr "Print with filament on an external spool" +msgstr "Impression avec du filament de la bobine externe" msgid "Filaments replace" msgstr "" @@ -2099,16 +2129,16 @@ msgstr "" "avant le dernier arrêt." msgid "Update remaining capacity" -msgstr "Update remaining capacity" +msgstr "Mettre à jour la capacité restante" msgid "" "The AMS will estimate Bambu filament's remaining capacity after the filament " "info is updated. During printing, remaining capacity will be updated " "automatically." msgstr "" -"The AMS will estimate Bambu filament's remaining capacity after the filament " -"info is updated. During printing, remaining capacity will be updated " -"automatically." +"L'AMS estimera la capacité restante du filament Bambu après la mise à jour " +"des infos du filament. Pendant l'impression, la capacité restante sera " +"automatiquement mise à jour." msgid "AMS filament backup" msgstr "" @@ -2117,8 +2147,8 @@ msgid "" "AMS will continue to another spool with the same properties of filament " "automatically when current filament runs out" msgstr "" -"AMS will continue to another spool with the same filament properties " -"automatically when current filament runs out." +"L'AMS passera automatiquement à une autre bobine avec les mêmes propriétés " +"de filament lorsque la bobine actuelle est épuisé." msgid "File" msgstr "Dossier" @@ -2127,31 +2157,31 @@ msgid "" "Failed to download the plug-in. Please check your firewall settings and vpn " "software, check and retry." msgstr "" -"Failed to download the plug-in. Please check your firewall settings and vpn " -"software and retry." +"Échec du téléchargement du plug-in. Veuillez vérifier les paramètres de " +"votre pare-feu et votre logiciel VPN puis réessayer." msgid "" "Failed to install the plug-in. Please check whether it is blocked or deleted " "by anti-virus software." msgstr "" -"Failed to install the plug-in. Please check whether it is blocked or has " -"been deleted by anti-virus software." +"Échec de l'installation du plug-in. Veuillez vérifier s'il est bloqué ou " +"s'il a été supprimé par un logiciel anti-virus." msgid "click here to see more info" -msgstr "click here to see more info" +msgstr "cliquez ici pour voir plus d'informations" msgid "Please home all axes (click " -msgstr "Please home all axes (click " +msgstr "Veuillez mettre à 0 les axes (cliquer " msgid "" ") to locate the toolhead's position. This prevents device moving beyond the " "printable boundary and causing equipment wear." msgstr "" -") to locate the toolhead's position. This prevents device moving beyond the " -"printable boundary and causing equipment wear." +") pour localiser la position de la tête. Cela éviter de dépasser la limite " +"imprimable et de provoquer une usure de l'équipement." msgid "Go Home" -msgstr "Go Home" +msgstr "Retour 0" msgid "" "A error occurred. Maybe memory of system is not enough or it's a bug of the " @@ -2167,7 +2197,7 @@ msgid "Processing G-Code from Previous file..." msgstr "Traitement du G-Code du fichier précédent..." msgid "Slicing complete" -msgstr "Tranchage terminé" +msgstr "Découpe terminée" msgid "Access violation" msgstr "Violation d'accès" @@ -2182,10 +2212,10 @@ msgid "Overflow" msgstr "Débordement" msgid "Underflow" -msgstr "Sous-dépassement" +msgstr "Soupassement" msgid "Floating reserved operand" -msgstr "Opérande réservé flottant" +msgstr "Opérande réservée flottante" msgid "Stack overflow" msgstr "Débordement de pile" @@ -2207,14 +2237,16 @@ msgid "Succeed to export G-code to %1%" msgstr "Succès! G-code exporté vers %1%" msgid "Running post-processing scripts" -msgstr "Running post-processing scripts" +msgstr "Exécution de scripts de post-traitement" msgid "Copying of the temporary G-code to the output G-code failed" -msgstr "Copying of the temporary G-code to the output G-code failed." +msgstr "La copie du G-code temporaire vers le G-code de sortie a échoué." #, boost-format msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" -msgstr "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" +msgstr "" +"Planification du téléversement vers `%1% `. Voir Fenêtre -> File d'attente " +"de téléversement de l'hôte d'impression" msgid "Origin" msgstr "Origine" @@ -2223,33 +2255,33 @@ msgid "Diameter" msgstr "Diamètre" msgid "Size in X and Y of the rectangular plate." -msgstr "Taille en X et Y de la plaque rectangulaire." +msgstr "Taille en X et Y du plateau rectangulaire." msgid "" "Distance of the 0,0 G-code coordinate from the front left corner of the " "rectangle." msgstr "" -"Distance de la coordonnée 0,0 du code G à partir du coin avant gauche du " +"Distance des coordonnées 0,0 du G-code depuis le coin avant gauche du " "rectangle." msgid "" "Diameter of the print bed. It is assumed that origin (0,0) is located in the " "center." msgstr "" -"Diamètre du lit d'impression. On suppose que l'origine (0,0) est située au " -"centre." +"Diamètre du plateau d'impression. Il est supposé que l'origine (0,0) est " +"située au centre." msgid "Rectangular" -msgstr "Rectangulaire" +msgstr "Rectangle" msgid "Circular" -msgstr "Rectangulaire" +msgstr "Circulaire" msgid "Custom" msgstr "Personnalisé" msgid "Load shape from STL..." -msgstr "Charger la forme depuis STL..." +msgstr "Charger une forme depuis un STL..." msgid "Settings" msgstr "Réglages" @@ -2261,19 +2293,20 @@ msgid "Remove" msgstr "Retirer" msgid "Not found:" -msgstr "Pas trouvé:" +msgstr "Introuvable:" msgid "Model" msgstr "Modèle" msgid "Choose an STL file to import bed shape from:" -msgstr "Choisissez un fichier STL à partir duquel importer la forme du lit :" +msgstr "" +"Choisissez un fichier STL à partir duquel importer la forme du plateau :" msgid "Invalid file format." -msgstr "Format de fichier invalide." +msgstr "Format de fichier non valide." msgid "Error! Invalid model" -msgstr "Erreur! Modèle invalide" +msgstr "Erreur ! Modèle invalide" msgid "The selected file contains no geometry." msgstr "Le fichier sélectionné ne contient aucune géométrie." @@ -2281,18 +2314,18 @@ msgstr "Le fichier sélectionné ne contient aucune géométrie." msgid "" "The selected file contains several disjoint areas. This is not supported." msgstr "" -"Le fichier sélectionné contient plusieurs zones disjointes. Ceci n'est pas " -"pris en charge." +"Le fichier sélectionné contient plusieurs zones disjointes. Cela n'est pas " +"utilisable." msgid "Choose a file to import bed texture from (PNG/SVG):" msgstr "" -"Choisissez un fichier à partir duquel importer la texture du lit (PNG/SVG) :" +"Choisir un fichier à partir duquel importer la texture du plateau (PNG/SVG) :" msgid "Choose an STL file to import bed model from:" msgstr "Choisissez un fichier STL à partir duquel importer le modèle de lit :" msgid "Bed Shape" -msgstr "Forme du lit" +msgstr "Forme du plateau" msgid "" "Nozzle may be blocked when the temperature is out of recommended range.\n" @@ -2327,17 +2360,19 @@ msgid "" "Please keep the printer open during the printing process to ensure air " "circulation or reduce the temperature of the hot bed" msgstr "" -"Bed temperature is higher than vitrification temperature of this filament.\n" -"This may cause nozzle blockage and print failure.\n" -"Please keep the printer open during the printing process to ensure air " -"circulation or reduce the temperature of the hot bed." +"La température du lit est supérieure à la température de vitrification de ce " +"filament.\n" +"Cela peut provoquer un blocage de la buse et une défaillance de " +"l'impression.\n" +"Veuillez laisser l'imprimante ouverte pendant le processus d'impression afin " +"de garantir la circulation de l'air ou de réduire la température du plateau." msgid "" "Too small max volumetric speed.\n" "Reset to 0.5" msgstr "" -"Too small max volumetric speed.\n" -"Value was reset to 0.5" +"Vitesse volumétrique maximale trop faible.\n" +"La valeur a été réinitialisée à 0,5" msgid "" "Too small layer height.\n" @@ -2409,11 +2444,12 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Adaptive Layer Height and Independent Support Layer Height" msgstr "" -"La tour principale ne fonctionne pas lorsque la hauteur de couche adaptative " -"ou la hauteur de couche de support indépendante est activée. Lequel " -"souhaitez-vous conserver ? OUI - Conserver la tour principale NON - " -"Conserver la hauteur de la couche adaptative et la hauteur de la couche de " -"support indépendante" +"La tour de nettoyage ne fonctionne pas lorsque la hauteur de couche " +"adaptative ou la hauteur de couche de support indépendante est activée. \n" +"Que souhaitez-vous conserver ? \n" +"OUI - Conserver la tour de nettoyage \n" +"NON - Conserver la hauteur de la couche adaptative et la hauteur de la " +"couche de support indépendante" msgid "" "Prime tower does not work when Adaptive Layer Height is on.\n" @@ -2421,9 +2457,11 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Adaptive Layer Height" msgstr "" -"La tour principale ne fonctionne pas lorsque la hauteur de couche adaptative " -"est activée. Lequel souhaitez-vous conserver ? OUI - Conserver la tour " -"principale NON - Conserver la hauteur de la couche adaptative" +"La tour de nettoyage ne fonctionne pas lorsque la hauteur de couche " +"adaptative est activée. \n" +"Que souhaitez-vous conserver ? \n" +"OUI - Conserver la tour de nettoyage \n" +"NON - Conserver la hauteur de la couche adaptative" msgid "" "Prime tower does not work when Independent Support Layer Height is on.\n" @@ -2431,10 +2469,11 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Independent Support Layer Height" msgstr "" -"La tour principale ne fonctionne pas lorsque la hauteur de la couche de " -"support indépendante est activée. Lequel souhaitez-vous conserver ? OUI - " -"Conserver la tour principale NON - Conserver la hauteur de la couche de " -"support indépendante" +"La tour de nettoyage ne fonctionne pas lorsque la hauteur de la couche de " +"support indépendante est activée.\n" +"Que souhaitez-vous conserver ?\n" +"OUI - Garder la tour de nettoyage\n" +"NON - Gardez la hauteur de la couche de support indépendante" #, boost-format msgid "%1% infill pattern doesn't support 100%% density." @@ -2446,9 +2485,9 @@ msgid "" "Yes - switch to rectilinear pattern automaticlly\n" "No - reset density to default non 100% value automaticlly" msgstr "" -"Switch to rectilinear pattern?\n" -"Yes - Switch to rectilinear pattern automatically\n" -"No - Reset density to default non 100% value automatically" +"Passer à un motif rectiligne ?\n" +"Oui - Passez automatiquement au modèle rectiligne\n" +"Non - Réinitialise automatiquement la densité à la valeur par défaut" msgid "" "While printing by Object, the extruder may collide skirt.\n" @@ -2532,7 +2571,7 @@ msgid "XCam" msgstr "XCam" msgid "Unknown" -msgstr "Inconnue" +msgstr "Inconnu" msgid "Fatal" msgstr "Mortel" @@ -2556,13 +2595,13 @@ msgid "Update failed." msgstr "Mise à jour a échoué." msgid "Failed to start printing job" -msgstr "Failed to start print job" +msgstr "Échec du lancement de la tâche d'impression" msgid "default" msgstr "défaut" msgid "parameter name" -msgstr "parameter name" +msgstr "nom du paramètre" msgid "N/A" msgstr "N / A" @@ -2576,7 +2615,7 @@ msgid "Value %s is out of range, continue?" msgstr "La valeur %s est hors plage, continuer ?" msgid "Parameter validation" -msgstr "Validation des paramètres" +msgstr "Validation du paramètre" msgid "Value is out of range." msgstr "La valeur est hors plage." @@ -2605,34 +2644,34 @@ msgid "Temperature" msgstr "Température" msgid "Flow" -msgstr "débit" +msgstr "Flux" msgid "Tool" msgstr "Outil" msgid "Layer Time" -msgstr "Layer Time" +msgstr "Temps de couche" msgid "Height: " -msgstr "Height: " +msgstr "Hauteur: " msgid "Width: " -msgstr "Width: " +msgstr "Largeur: " msgid "Speed: " -msgstr "Speed: " +msgstr "Vitesse: " msgid "Flow: " -msgstr "Flow: " +msgstr "Débit: " msgid "Layer Time: " -msgstr "Layer Time: " +msgstr "Temps de couche:" msgid "Fan Speed: " -msgstr "Fan Speed: " +msgstr "Vitesse du ventilateur:" msgid "Temperature: " -msgstr "Temperature: " +msgstr "Température:" msgid "Loading G-codes" msgstr "Chargement des codes G" @@ -2647,10 +2686,10 @@ msgid "Statistics of All Plates" msgstr "" msgid "Display" -msgstr "Affichage" +msgstr "Afficher" msgid "Flushed" -msgstr "Flushed" +msgstr "Purgé" msgid "Total" msgstr "Total" @@ -2659,13 +2698,13 @@ msgid "Total Time Estimation" msgstr "" msgid "Total time" -msgstr "Total time" +msgstr "Durée totale" msgid "up to" msgstr "jusqu'à" msgid "above" -msgstr "au dessus" +msgstr "au-dessus" msgid "from" msgstr "de" @@ -2674,7 +2713,7 @@ msgid "Color Scheme" msgstr "Schéma de couleur" msgid "Time" -msgstr "Temps" +msgstr "Durée" msgid "Percent" msgstr "Pour cent" @@ -2701,10 +2740,10 @@ msgid "Layer Time (s)" msgstr "" msgid "Used filament" -msgstr "Filament usagé" +msgstr "Filament utilisé" msgid "Travel" -msgstr "Voyager" +msgstr "Déplacement" msgid "Seams" msgstr "Coutures" @@ -2719,7 +2758,7 @@ msgid "Filament Changes" msgstr "Changements de filaments" msgid "Wipe" -msgstr "Essuyer" +msgstr "Nettoyer" msgid "Options" msgstr "Choix" @@ -2728,7 +2767,7 @@ msgid "travel" msgstr "Déplacement" msgid "Extruder" -msgstr "Extrudeuse" +msgstr "Extrudeur" msgid "Filament change times" msgstr "Temps de changement de filament" @@ -2749,13 +2788,13 @@ msgid "Printer" msgstr "Imprimante" msgid "Print settings" -msgstr "Paramètres d'impression" +msgstr "Réglages d'impression" msgid "Total Estimation" msgstr "Estimation totale" msgid "Time Estimation" -msgstr "Time Estimation" +msgstr "Estimation de temps" msgid "Normal mode" msgstr "Mode normal" @@ -2773,58 +2812,58 @@ msgid "Switch to normal mode" msgstr "Passer en mode normal" msgid "Variable layer height" -msgstr "Variable layer height" +msgstr "Hauteur de couche variable" msgid "Adaptive" -msgstr "Adaptive" +msgstr "Adaptatif" msgid "Quality / Speed" -msgstr "Quality / Speed" +msgstr "Qualité / Vitesse" msgid "Smooth" -msgstr "Smooth" +msgstr "Lisse" msgid "Radius" msgstr "Rayon" msgid "Keep min" -msgstr "Keep min" +msgstr "Garder min" msgid "Left mouse button:" -msgstr "Left mouse button:" +msgstr "Bouton gauche de la souris :" msgid "Add detail" -msgstr "Add Detail" +msgstr "Ajouter Détail" msgid "Right mouse button:" -msgstr "Right mouse button:" +msgstr "Bouton droit de la souris :" msgid "Remove detail" -msgstr "Remove detail" +msgstr "Supprimer détail" msgid "Shift + Left mouse button:" -msgstr "Shift + Left mouse button:" +msgstr "Maj + bouton gauche de la souris :" msgid "Reset to base" -msgstr "Reset to base" +msgstr "Revenir de base" msgid "Shift + Right mouse button:" -msgstr "Shift + Right mouse button:" +msgstr "Maj + bouton droit de la souris:" msgid "Smoothing" -msgstr "Smoothing" +msgstr "Lissage" msgid "Mouse wheel:" -msgstr "Mouse wheel:" +msgstr "Molette de la souris :" msgid "Increase/decrease edit area" -msgstr "Increase/decrease edit area" +msgstr "Augmenter/diminuer la zone d'édition" msgid "Sequence" msgstr "Séquence" msgid "Mirror Object" -msgstr "Objet miroir" +msgstr "Symétriser l'Objet" msgid "Tool Move" msgstr "Déplacement d'outil" @@ -2833,7 +2872,7 @@ msgid "Tool Rotate" msgstr "" msgid "Move Object" -msgstr "Déplacer l'objet" +msgstr "Déplacer l'Objet" msgid "Auto Orientation options" msgstr "Options d'orientation automatique" @@ -2848,7 +2887,7 @@ msgid "Orient" msgstr "Orienter" msgid "Arrange options" -msgstr "Disposer les objets sur les plaques sélectionnées" +msgstr "Options d'agencement" msgid "Spacing" msgstr "Espacement" @@ -2860,7 +2899,7 @@ msgid "Allow multiple materials on same plate" msgstr "Autoriser plusieurs matériaux sur la même plaque" msgid "Avoid extrusion calibration region" -msgstr "Éviter la région d'étalonnage de l'extrusion" +msgstr "Éviter la région de calibration de l'extrusion" msgid "Add" msgstr "Ajouter" @@ -2878,10 +2917,10 @@ msgid "Arrange objects on selected plates" msgstr "Disposer les objets sur les plaques sélectionnées" msgid "Split to objects" -msgstr "Fractionner en objets" +msgstr "Diviser en objets individuels" msgid "Split to parts" -msgstr "Diviser en parties" +msgstr "Scinder en pièces" msgid "Assembly View" msgstr "Vue de l'assemblage" @@ -2902,10 +2941,10 @@ msgid "Explosion Ratio" msgstr "Taux d'explosion" msgid "Section View" -msgstr "Section View" +msgstr "Vue en coupe" msgid "Assemble Control" -msgstr "Assembly Control" +msgstr "Contrôle de l'Assemblage" msgid "Total Volume:" msgstr "Volume total:" @@ -2939,61 +2978,61 @@ msgid "" "Please solve the problem by moving it totally on or off the plate, and " "confirming that the height is within the build volume." msgstr "" -"An object is laid over the boundary of the plate or exceeds the height " -"limit.\n" -"Please solve the problem by moving it totally on or off the plate, and " -"confirming that the height is within the build volume." +"Un objet est posé sur la limite de la plaque ou dépasse la limite de " +"hauteur.\n" +"Veuillez résoudre le problème en le déplaçant totalement sur ou hors du " +"plateau, et en confirmant que la hauteur entre dans le volume d'impression." msgid "Calibration" -msgstr "Étalonnage" +msgstr "Calibration" msgid "Calibration step selection" -msgstr "Calibration step selection" +msgstr "Sélection de l'étape de calibration" msgid "Micro lidar calibration" -msgstr "Micro lidar calibration" +msgstr "Calibration du Micro-Lidar" msgid "Bed leveling" -msgstr "Bed leveling" +msgstr "Mise à niveau du lit" msgid "Resonance frequency identification" -msgstr "Resonance frequency identification" +msgstr "Identification de la fréquence de résonance" msgid "Calibration program" -msgstr "Programme d'étalonnage" +msgstr "Programme de calibration" msgid "" "The calibration program detects the status of your device automatically to " "minimize deviation.\n" "It keeps the device performing optimally." msgstr "" -"Le processus de calibrage détecte automatiquement l'état de votre appareil " +"Le processus de calibration détecte automatiquement l'état de votre appareil " "pour minimiser les écarts. Il permet à l'appareil de fonctionner de manière " "optimale." msgid "Calibration Flow" -msgstr "Flux d'étalonnage" +msgstr "Calibration débit" msgid "Start Calibration" -msgstr "Démarrer l'étalonnage" +msgstr "Démarrer la calibration" msgid "Completed" -msgstr "Completed" +msgstr "Terminé" msgid "Calibrating" msgstr "Étalonnage" msgid "Auto-record Monitoring" -msgstr "Auto-record Monitoring" +msgstr "Surveillance de l'enregistrement automatique" msgid "Go Live" -msgstr "Go Live" +msgstr "Passer en LIVE" msgid "Resolution" msgstr "Résolution" msgid "Show \"Live Video\" guide page." -msgstr "Show \"Live Video\" guide page." +msgstr "Afficher la page de guide « Vidéo en direct »." msgid "720p" msgstr "720p" @@ -3015,13 +3054,13 @@ msgstr "" "l'imprimante, comme illustré sur le schéma:" msgid "Invalid input." -msgstr "Invalid input" +msgstr "Saisie non valide" msgid "New Window" -msgstr "New Window" +msgstr "Nouvelle Fenêtre" msgid "Open a new window" -msgstr "Open a new window" +msgstr "Ouvrir une nouvelle fenêtre" msgid "Application is closing" msgstr "L'application se ferme" @@ -3058,31 +3097,31 @@ msgid "Slice plate" msgstr "Assiette à trancher" msgid "Print plate" -msgstr "Print plate" +msgstr "Imprimer plateau" msgid "Slice all" msgstr "Tout trancher" msgid "Export G-code file" -msgstr "Export G-code file" +msgstr "Exporter le fichier G-code" msgid "Send" msgstr "Envoyer" msgid "Export plate sliced file" -msgstr "Export plate sliced file" +msgstr "Exporter fichier tranché du plateau" msgid "Export all sliced file" -msgstr "Export all sliced file" +msgstr "Exporter tous les fichiers tranchés" msgid "Print all" msgstr "Tout imprimer" msgid "Send all" -msgstr "Send all" +msgstr "Tout envoyer" msgid "Keyboard Shortcuts" -msgstr "Raccourcis clavier" +msgstr "Raccourcis Clavier" msgid "Show the list of the keyboard shortcuts" msgstr "Afficher la liste des raccourcis clavier" @@ -3094,23 +3133,23 @@ msgid "Show Configuration Folder" msgstr "Afficher le dossier de configuration" msgid "Show Tip of the Day" -msgstr "Show Tip of the Day" +msgstr "Afficher l'Astuce du Jour" msgid "Check for Update" msgstr "Vérifier la mise à jour" msgid "Open Network Test" -msgstr "Open Network Test" +msgstr "Ouvrir le Test de Réseau" #, c-format, boost-format msgid "&About %s" -msgstr "&À propos de %s" +msgstr "&Au sujet de %s" msgid "Upload Models" -msgstr "Upload Models" +msgstr "Téléverser les Modèles" msgid "Download Models" -msgstr "Download Models" +msgstr "Télécharger des Modèles" msgid "Default View" msgstr "Vue par défaut" @@ -3120,44 +3159,44 @@ msgid "Top" msgstr "Haut" msgid "Top View" -msgstr "Vue de dessus" +msgstr "Vue du Dessus" #. TRN To be shown in the main menu View->Bottom msgid "Bottom" -msgstr "Fond" +msgstr "Dessous" msgid "Bottom View" -msgstr "Vue de dessous" +msgstr "Vue du Dessous" msgid "Front" -msgstr "De face" +msgstr "Avant" msgid "Front View" -msgstr "Vue de face" +msgstr "Vue Avant" msgid "Rear" msgstr "Arrière" msgid "Rear View" -msgstr "Vue arrière" +msgstr "Vue Arrière" msgid "Left" -msgstr "La gauche" +msgstr "Gauche" msgid "Left View" -msgstr "Vue de gauche" +msgstr "Vue Gauche" msgid "Right" -msgstr "Droit" +msgstr "Droite" msgid "Right View" -msgstr "Vue de droite" +msgstr "Vue Droite" msgid "Start a new window" -msgstr "Start a new window" +msgstr "Démarrer une nouvelle fenêtre" msgid "New Project" -msgstr "Partie négative" +msgstr "Nouveau Projet" msgid "Start a new project" msgstr "Démarrer un nouveau projet" @@ -3166,7 +3205,7 @@ msgid "Open a project file" msgstr "Ouvrir un fichier de projet" msgid "Recent projects" -msgstr "Les projets récents" +msgstr "Proj&ets récents" msgid "Save Project" msgstr "Sauvegarder le projet" @@ -3184,46 +3223,46 @@ msgid "Save current project as" msgstr "Enregistrer le projet actuel sous" msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" -msgstr "Import 3MF/STL/STEP/SVG/OBJ/AMF" +msgstr "Importer des fichiers 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Charger un modèle" msgid "Import Configs" -msgstr "Import Configs" +msgstr "Importer des Configs" msgid "Load configs" -msgstr "Load configs" +msgstr "Charger les Configs" msgid "Import" -msgstr "Import" +msgstr "Importer" msgid "Export all objects as STL" msgstr "Exporter tous les objets au format STL" msgid "Export Generic 3MF" -msgstr "Export Generic 3MF" +msgstr "Exporter en fichier 3MF Générique" msgid "Export 3mf file without using some 3mf-extensions" -msgstr "Export 3mf file without using some 3mf-extensions" +msgstr "Exportation de fichiers 3MF sans utiliser d'extensions" msgid "Export current sliced file" -msgstr "Export current sliced file" +msgstr "Exporter le fichier tranché actuel" msgid "Export all plate sliced file" -msgstr "Export all plate sliced file" +msgstr "Exportation de tous les fichiers slicés de la plaque" msgid "Export G-code" -msgstr "Exporter le code G" +msgstr "Exporter le G-code" msgid "Export current plate as G-code" -msgstr "Export current plate as G-code" +msgstr "Exporter le plateau actuel en G-code" msgid "Export &Configs" -msgstr "Export &Configs" +msgstr "Exportation & Configs" msgid "Export current configuration to files" -msgstr "Export current configuration to files" +msgstr "Exporter la configuration actuelle vers des fichiers" msgid "Export" msgstr "Exporter" @@ -3232,37 +3271,37 @@ msgid "Quit" msgstr "Quitter" msgid "Undo" -msgstr "annuler" +msgstr "Annuler" msgid "Redo" -msgstr "Refaire" +msgstr "Recommencer" msgid "Cut selection to clipboard" msgstr "Couper la sélection dans le presse-papiers" msgid "Copy" -msgstr "Copie" +msgstr "Copier" msgid "Copy selection to clipboard" -msgstr "Copier la sélection dans le presse-papiers" +msgstr "Copier la sélection dans le presse-papier" msgid "Paste" -msgstr "Pâte" +msgstr "Coller" msgid "Paste clipboard" -msgstr "Coller le presse-papiers" +msgstr "Coller le presse-papier" msgid "Delete selected" -msgstr "Supprimer sélectionnée" +msgstr "Supprimer la sélection" msgid "Deletes the current selection" -msgstr "Supprime la sélection actuelle" +msgstr "Supprime la sélection en cours" msgid "Delete all" -msgstr "Supprimer tout" +msgstr "Tout Supprimer" msgid "Deletes all objects" -msgstr "Supprime tous les objets" +msgstr "Supprimer tous les objets" msgid "Clone selected" msgstr "Cloner sélectionné" @@ -3274,13 +3313,13 @@ msgid "Select all" msgstr "Tout sélectionner" msgid "Selects all objects" -msgstr "Sélectionne tous les objets" +msgstr "Sélectionner tous les objets" msgid "Deselect all" -msgstr "Tout déselectionner" +msgstr "Désélectionner tout" msgid "Deselects all objects" -msgstr "Désélectionne tous les objets" +msgstr "Désélectionner tous les objets" msgid "Use Perspective View" msgstr "Utiliser la vue en perspective" @@ -3289,22 +3328,22 @@ msgid "Use Orthogonal View" msgstr "Utiliser la vue orthogonale" msgid "Show &Labels" -msgstr "Show &Labels" +msgstr "Afficher &Les Étiquettes" msgid "Show object labels in 3D scene" -msgstr "Show object labels in 3D scene" +msgstr "Afficher les étiquettes des objets dans la scène 3D" msgid "Preferences" msgstr "Préférences" msgid "View" -msgstr "Voir" +msgstr "Vue" msgid "Help" -msgstr "Aider" +msgstr "Aide" msgid "3D Models" -msgstr "3D Models" +msgstr "Modèles 3D" msgid "&Open G-code" msgstr "&Ouvrir G-code" @@ -3325,10 +3364,10 @@ msgid "Export toolpaths as OBJ" msgstr "Exporter les parcours d'outils en OBJ" msgid "Open &Studio" -msgstr "Open &Studio" +msgstr "Ouvrir &Studio" msgid "Open Studio" -msgstr "Open Studio" +msgstr "Ouvrir Studio" msgid "&Quit" msgstr "&Quitter" @@ -3355,16 +3394,16 @@ msgid "A config exists with the same name: %s, do you want to override it." msgstr "" msgid "Overwrite file" -msgstr "Overwrite file" +msgstr "Remplacer le fichier" msgid "Yes to All" -msgstr "Yes to All" +msgstr "Oui à Tout" msgid "No to All" -msgstr "No to All" +msgstr "Non à Tout" msgid "Choose a directory" -msgstr "Choose a directory" +msgstr "Choisir un dossier" #, c-format, boost-format msgid "There is %d config exported. (Only non-system configs)" @@ -3373,10 +3412,10 @@ msgstr[0] "" msgstr[1] "" msgid "Export result" -msgstr "Export Result" +msgstr "Exporter le Résultat" msgid "Select profile to load:" -msgstr "Select profile to load:" +msgstr "Sélectionnez le profil à charger :" #, c-format, boost-format msgid "There is %d config imported. (Only non-system and compatible configs)" @@ -3386,7 +3425,7 @@ msgstr[0] "" msgstr[1] "" msgid "Import result" -msgstr "Import result" +msgstr "Importer le résultat" msgid "File is missing" msgstr "Le fichier est manquant" @@ -3395,7 +3434,7 @@ msgid "The project is no longer available." msgstr "Le projet n'est plus disponible." msgid "Filament Settings" -msgstr "Paramètres des filaments" +msgstr "Réglages du filament" msgid "" "Do you want to synchronize your personal data from Bambu Cloud? \n" @@ -3404,11 +3443,11 @@ msgid "" "2. The Filament presets\n" "3. The Printer presets" msgstr "" -"Do you want to synchronize your personal data from Bambu Cloud? \n" -"It contains the following information:\n" -"1. Process presets\n" -"2. Filament presets\n" -"3. Printer presets" +"Voulez-vous synchroniser vos données personnelles à partir de Bambu Cloud ?\n" +"Il contient les informations suivantes :\n" +"1. Les préréglages du Processus\n" +"2. Les préréglages du Filament\n" +"3. Les préréglages de l'Imprimante" msgid "Synchronization" msgstr "Synchronisation" @@ -3417,7 +3456,7 @@ msgid "Initialize failed (No Device)!" msgstr "Échec de l'initialisation (pas de périphérique) !" msgid "Initialize failed (No Camera Device)!" -msgstr "Initialization failed (No Camera Device)!" +msgstr "L'initialisation a échoué (Pas de caméra)!" msgid "Initializing..." msgstr "Initialisation..." @@ -3426,59 +3465,64 @@ msgid "Loading..." msgstr "Chargement..." msgid "Initialize failed (Not supported with LAN-only mode)!" -msgstr "Initialization failed (Not supported in LAN-only mode)!" +msgstr "Echec de l'initialisation (Non supporté en mode LAN uniquement) !" msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Initialization failed (Not accessible in LAN-only mode)!" +msgstr "L'initialisation a échoué (Non accessible en mode LAN uniquement) !" msgid "Printer is busy downloading, Please wait for the downloading to finish." -msgstr "Printer is busy downloading; please wait for the download to finish." +msgstr "" +"L'imprimante est occupée à télécharger, veuillez attendre la fin du " +"téléchargement." msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Initialization failed (Missing LAN IP of printer)!" +msgstr "" +"Échec de l'initialisation (adresse IP réseau manquante de l'imprimante) !" msgid "Initialize failed (Not supported by printer)!" -msgstr "Initialization failed (Not supported by printer)!" +msgstr "L'initialisation a échoué (non supporté par l'imprimante) !" #, c-format, boost-format msgid "Initialize failed (%s)!" -msgstr "Initialization failed (%s)!" +msgstr "L'initialisation a échoué (%s)!" msgid "Network unreachable" -msgstr "Network unreachable" +msgstr "Réseau inaccessible" #, c-format, boost-format msgid "Stopped [%d]!" -msgstr "Stopped [%d]!" +msgstr "Arrêté [%d] !" msgid "Stopped." msgstr "Arrêté." msgid "LAN Connection Failed (Failed to start liveview)" -msgstr "LAN Connection Failed (Failed to start liveview)" +msgstr "" +"Échec de la connexion au réseau local (échec du démarrage de la vue en " +"direct)" msgid "" "Virtual Camera Tools is required for this task!\n" "Do you want to install them?" msgstr "" -"Virtual Camera Tools is required for this task!\n" -"Do you want to install them?" +"Les outils de caméra virtuelle sont nécessaires pour cette tâche !\n" +"Vous souhaitez les installer ?" msgid "Downloading Virtual Camera Tools" -msgstr "Downloading Virtual Camera Tools" +msgstr "Téléchargement des Outils de Caméra Virtuelle" msgid "" "Another virtual camera is running.\n" "Bambu Studio supports only a single virtual camera.\n" "Do you want to stop this virtual camera?" msgstr "" -"Another virtual camera is running.\n" -"Bambu Studio supports only a single virtual camera.\n" -"Do you want to stop this virtual camera?" +"Une autre caméra virtuelle est en cours d'exécution.\n" +"Bambu Studio ne prend en charge qu'une seule caméra virtuelle.\n" +"Voulez-vous arrêter cette caméra virtuelle ?" #, c-format, boost-format msgid "Virtual camera initialize failed (%s)!" -msgstr "Virtual camera initialize failed (%s)!" +msgstr "L'initialisation de la caméra virtuelle a échoué (%s) !" msgid "Information" msgstr "Information" @@ -3491,74 +3535,74 @@ msgid "Load failed [%d]!" msgstr "Le chargement a échoué [%d] !" msgid "Year" -msgstr "Year" +msgstr "Année" msgid "Month" -msgstr "Month" +msgstr "Mois" msgid "All Files" -msgstr "All Files" +msgstr "Tous les Fichiers" msgid "Group files by year, recent first." -msgstr "Group files by year, recent first." +msgstr "Regroupez les fichiers par année, les plus récents en premier." msgid "Group files by month, recent first." -msgstr "Group files by month, recent first." +msgstr "Regroupez les fichiers par mois, les plus récents en premier." msgid "Show all files, recent first." -msgstr "Show all files, recent first." +msgstr "Afficher tous les fichiers, les plus récents en premier." msgid "Timelapse" msgstr "Laps de temps" msgid "Switch to timelapse files." -msgstr "Switch to timelapse files." +msgstr "Passez aux fichiers timelapse." msgid "Video" -msgstr "Video" +msgstr "Vidéo" msgid "Switch to video files." -msgstr "Switch to video files." +msgstr "Passez aux fichiers vidéo." msgid "Delete selected files from printer." -msgstr "Delete selected files from printer." +msgstr "Supprimez les fichiers sélectionnés de l'imprimante." msgid "Download" msgstr "Télécharger" msgid "Download selected files from printer." -msgstr "Download selected files from printer." +msgstr "Téléchargez les fichiers sélectionnés depuis l'imprimante." msgid "Select" -msgstr "Select" +msgstr "Sélectionner" msgid "Batch manage files." -msgstr "Batch manage files." +msgstr "Gérer les fichiers par lots." msgid "No printers." -msgstr "No printers." +msgstr "Aucune imprimante" msgid "Not supported by this model of printer!" -msgstr "Not supported by this model of printer!" +msgstr "Non pris en charge par ce modèle d'imprimante !" msgid "Connecting..." -msgstr "Connecting..." +msgstr "Connexion…" #, c-format, boost-format msgid "Connect failed [%d]!" -msgstr "Connection failed [%d]!" +msgstr "La connexion a échoué [%d] !" msgid "Loading file list..." -msgstr "Loading file list..." +msgstr "Chargement de la liste des fichiers..." msgid "No files" -msgstr "No files" +msgstr "Aucun fichier" msgid "Not accessible in LAN-only mode!" -msgstr "Not accessible in LAN-only mode!" +msgstr "Non accessible en mode réseau local uniquement !" msgid "Missing LAN ip of printer!" -msgstr "Missing LAN IP of printer!" +msgstr "Adresse IP locale manquante de l'imprimante !" #, c-format, boost-format msgid "You are going to delete %u files. Are you sure to continue?" @@ -3569,32 +3613,32 @@ msgstr "" #, c-format, boost-format msgid "File '%s' was lost! Please download it again." -msgstr "File '%s' was lost! Please download it again." +msgstr "Le fichier « %s » a été perdu ! Veuillez le télécharger à nouveau." msgid "Download waiting..." -msgstr "Download waiting..." +msgstr "Téléchargement en attente..." msgid "Play" -msgstr "Play" +msgstr "Lecture" msgid "Open Folder" -msgstr "Open Folder" +msgstr "Ouvrir le Dossier" msgid "Download finished" -msgstr "Download finished" +msgstr "Téléchargement terminé" #, c-format, boost-format msgid "Downloading %d%%..." -msgstr "Downloading %d%%..." +msgstr "Téléchargement %d%%..." msgid "Speed:" -msgstr "La rapidité:" +msgstr "Vitesse:" msgid "Deadzone:" -msgstr "Zone morte:" +msgstr "Zone morte :" msgid "Options:" -msgstr "Option :" +msgstr "Options :" msgid "Zoom" msgstr "Zoom" @@ -3603,19 +3647,19 @@ msgid "Translation/Zoom" msgstr "Translation/Zoom" msgid "3Dconnexion settings" -msgstr "Paramètres de connexion 3D" +msgstr "Paramètres 3Dconnexion" msgid "Swap Y/Z axes" msgstr "Permuter les axes Y/Z" msgid "Camera" -msgstr "Camera" +msgstr "Caméra" msgid "SD Card" -msgstr "MicroSD Card" +msgstr "Carte MicroSD" msgid "Camera Setting" -msgstr "Camera Setting" +msgstr "Réglage de la Caméra" msgid "Printing Progress" msgstr "Progression de l'impression" @@ -3630,16 +3674,16 @@ msgid "0" msgstr "0" msgid "Layers: N/A" -msgstr "Layers: N/A" +msgstr "Couches: N/A" msgid "Clear" -msgstr "Clear" +msgstr "Nettoyer" msgid "Control" msgstr "Contrôle" msgid "Print Options" -msgstr "Print Options" +msgstr "Options d'impression" msgid "100%" msgstr "100%" @@ -3651,10 +3695,10 @@ msgid "Aux" msgstr "Aux" msgid "Cham" -msgstr "Cham" +msgstr "Chamb" msgid "Bed" -msgstr "Lit" +msgstr "Plateau" msgid "Unload" msgstr "retirer" @@ -3663,42 +3707,43 @@ msgid "Debug Info" msgstr "Les informations de débogage" msgid "No SD Card" -msgstr "No MicroSD Card" +msgstr "Pas de carte MicroSD" msgid "SD Card Abnormal" -msgstr "MicroSD Card Abnormal" +msgstr "Carte MicroSD anormale" msgid "Printing List" msgstr "Liste d'impression" msgid "Cancel print" -msgstr "Cancel print" +msgstr "Annuler l'impression" msgid "Are you sure you want to cancel this print?" -msgstr "Are you sure you want to cancel this print?" +msgstr "Êtes-vous sûr de vouloir annuler cette impression ?" #, c-format, boost-format msgid "" "Disconnected from printer [%s] due to LAN mode disabled.Please reconnect the " "printer by logging in with your user account." msgstr "" -"Disconnected from printer [%s] due to LAN mode being disabled. Please " -"reconnect the printer by logging in with your user account." +"Déconnecté de l'imprimante [%s] en raison de la désactivation du mode " +"réseau. Reconnectez l'imprimante en vous connectant à l'aide de votre compte " +"utilisateur." #, c-format, boost-format msgid "" "Disconnected from printer [%s] due to LAN mode enabled.Please reconnect the " "printer by inputting Access Code which can be gotten from printer screen." msgstr "" -"Disconnected from printer [%s] due to LAN mode being enabled. Please " -"reconnect the printer by inputting the Access Code which can be gotten from " -"the printer screen." +"Déconnecté de l'imprimante [%s] car le mode réseau est activé. Reconnectez " +"l'imprimante en saisissant le code d'accès qui peut être obtenu à partir de " +"l'écran de l'imprimante." msgid "Downloading..." -msgstr "Downloading..." +msgstr "Téléchargement…" msgid "Cloud Slicing..." -msgstr "Cloud Slicing..." +msgstr "Tranchage Cloud..." #, c-format, boost-format msgid "In Cloud Slicing Queue, there are %s tasks ahead." @@ -3706,36 +3751,39 @@ msgstr "" #, c-format, boost-format msgid "Layers: %s" -msgstr "Layers: %s" +msgstr "Couches: %s" #, c-format, boost-format msgid "Layers: %d/%d" -msgstr "Layers: %d/%d" +msgstr "Couches: %d/%d" msgid "Please heat the nozzle to above 170 degree before loading filament." -msgstr "Please heat the nozzle to above 170 degrees before loading filament." +msgstr "" +"Veuillez chauffer la buse à plus de 170 degrés avant de charger le filament." msgid "Still unload" -msgstr "Still unload" +msgstr "Décharger encore" msgid "Still load" -msgstr "Still load" +msgstr "Charger encore" msgid "AMS settings are not supported for external spool" -msgstr "Current AMS settings do not support using an external spool." +msgstr "" +"Les paramètres actuels de l'AMS ne prennent pas en charge l'utilisation de " +"bobine externe." msgid "Please select an AMS slot before calibration" -msgstr "Please select an AMS slot before calibration." +msgstr "Veuillez sélectionner un emplacement AMS avant la calibration." msgid "" "Cannot read filament info: the filament is loaded to the tool head,please " "unload the filament and try again." msgstr "" -"Cannot read filament info: the filament is loaded to the tool head. Please " -"unload the filament and try again." +"Impossible de lire les informations sur le filament: le filament est chargé " +"dans l'extrudeur. Veuillez décharger le filament et réessayer." msgid "This only takes effect during printing" -msgstr "This only takes effect during printing" +msgstr "Cela ne prend effet que pendant l'impression" msgid "Silent" msgstr "Silencieux" @@ -3750,13 +3798,13 @@ msgid "Ludicrous" msgstr "Ridicule" msgid "Can't start this without SD card." -msgstr "Can't start without MicroSD card." +msgstr "Impossible de démarrer sans carte microSD." msgid "Failed to connect to the server" msgstr "Impossible de se connecter au serveur" msgid "Status" -msgstr "Statut" +msgstr "État" msgid "Media" msgstr "Médias" @@ -3775,7 +3823,7 @@ msgstr "Ne plus afficher" #, c-format, boost-format msgid "%s error" -msgstr "%s erreur" +msgstr "Erreur %s" #, c-format, boost-format msgid "%s has encountered an error" @@ -3795,7 +3843,7 @@ msgstr "%s infos" #, c-format, boost-format msgid "%s information" -msgstr "%s informations" +msgstr "Information de %s" msgid "Skip" msgstr "Sauter" @@ -3819,10 +3867,10 @@ msgid "Undo integration was successful." msgstr "Annuler l'intégration a réussi." msgid "New network plug-in available." -msgstr "New network plug-in available" +msgstr "Nouveau plug-in réseau disponible" msgid "Details" -msgstr "Details" +msgstr "Détails" msgid "Undo integration failed." msgstr "L'annulation de l'intégration a échoué." @@ -3837,7 +3885,7 @@ msgid "Goto download page." msgstr "Allez sur la page de téléchargement." msgid "Open Folder." -msgstr "Dossier ouvert." +msgstr "Ouvrir un répertoire." msgid "Safely remove hardware." msgstr "" @@ -3861,16 +3909,16 @@ msgstr[0] "" msgstr[1] "" msgid "ERROR" -msgstr "ERROR" +msgstr "ERREUR" msgid "CANCELED" -msgstr "CANCELED" +msgstr "Annulé" msgid "COMPLETED" -msgstr "COMPLETED" +msgstr "Terminé" msgid "Cancel upload" -msgstr "Cancel upload" +msgstr "Annuler le téléversement" msgid "Slice ok." msgstr "Tranchage terminé" @@ -3885,16 +3933,16 @@ msgid "Warning:" msgstr "Avertissement:" msgid "Export successfully." -msgstr "Exported successfully" +msgstr "Exportation réussie" msgid " (Repair)" msgstr "(Réparation)" msgid " Click here to install it." -msgstr " Click here to install it." +msgstr " Cliquez ici pour l'installer." msgid "WARNING:" -msgstr "ATTENTION:" +msgstr "ATTENTION :" msgid "Your model needs support ! Please make support material enable." msgstr "" @@ -3916,7 +3964,7 @@ msgid "Layers" msgstr "Couches" msgid "Range" -msgstr "Intervalle" +msgstr "Zone" msgid "" "The application cannot run normally because OpenGL version is lower than " @@ -3929,7 +3977,7 @@ msgid "Please upgrade your graphics card driver." msgstr "Veuillez mettre à jour le pilote de votre carte graphique." msgid "Unsupported OpenGL version" -msgstr "Version OpenGL non prise en charge" +msgstr "Version d'OpenGL non supportée" #, c-format, boost-format msgid "" @@ -3942,33 +3990,33 @@ msgstr "Erreur lors du chargement des shaders" msgctxt "Layers" msgid "Top" -msgstr "Haut" +msgstr "Du haut" msgctxt "Layers" msgid "Bottom" -msgstr "Fond" +msgstr "Du bas" msgid "Enable AI monitoring of printing" -msgstr "Enable AI monitoring of printing" +msgstr "Activer la surveillance de l'impression par l'IA" msgid "Sensitivity of pausing is" -msgstr "Sensitivity of pausing is" +msgstr "La sensibilité de pause est " msgid "Enable detection of build plate position" -msgstr "Enable detection of build plate position" +msgstr "Activation de la détection de la position de la plaque" msgid "" "The localization tag of build plate is detected, and printing is paused if " "the tag is not in predefined range." msgstr "" -"The localization tag of the build plate will be detected, and printing will " -"be paused if the tag is not in predefined range." +"La balise de localisation de la plaque est détectée, l'impression est " +"interrompue si la balise n'est pas dans la plage prédéfinie." msgid "First Layer Inspection" -msgstr "First Layer Inspection" +msgstr "Inspection de la Première Couche" msgid "Auto-recovery from step loss" -msgstr "Auto-recovery from step loss" +msgstr "Restauration automatique en cas de perte de pas" msgid "Global" msgstr "Mondial" @@ -3980,7 +4028,7 @@ msgid "Advance" msgstr "Avancé" msgid "Compare presets" -msgstr "Comparer les préréglages" +msgstr "Comparer les Préréglages" msgid "View all object's settings" msgstr "Afficher tous les paramètres de l'objet" @@ -3999,16 +4047,16 @@ msgid "Invalid name, the following characters are not allowed:" msgstr "Nom invalide, les caractères suivants ne sont pas autorisés :" msgid "Sliced Info" -msgstr "Informations en tranches" +msgstr "Informations de découpage" msgid "Used Filament (m)" -msgstr "Filament utilisé (m)" +msgstr "Filament Utilisé (m)" msgid "Used Filament (mm³)" -msgstr "Filament utilisé (mm³)" +msgstr "Filament Utilisé (mm³)" msgid "Used Filament (g)" -msgstr "Filament utilisé (g)" +msgstr "Filament Utilisé (g)" msgid "Used Materials" msgstr "Matériaux utilisés" @@ -4020,10 +4068,10 @@ msgid "Filament changes" msgstr "Changements de filaments" msgid "Click to edit preset" -msgstr "Cliquez pour modifier le préréglage" +msgstr "Cliquez pour éditer le préréglage" msgid "Connection" -msgstr "Connection" +msgstr "Connexion" msgid "Bed type" msgstr "Type de lit" @@ -4032,31 +4080,32 @@ msgid "Flushing volumes" msgstr "Volumes de rinçage" msgid "Add one filament" -msgstr "Add one filament" +msgstr "Ajouter un filament" msgid "Remove last filament" -msgstr "Remove last filament" +msgstr "Retirer le dernier filament" msgid "Synchronize filament list from AMS" -msgstr "Synchronize filament list from AMS" +msgstr "Synchroniser la liste des filaments depuis l'AMS" msgid "Set filaments to use" -msgstr "Set filaments to use" +msgstr "Définir les filaments à utiliser" msgid "" "No AMS filaments. Please select a printer in 'Device' page to load AMS info." msgstr "" -"No AMS filaments. Please select a printer in 'Device' page to load AMS info." +"Pas de filaments AMS. Veuillez sélectionner une imprimante dans la page " +"\"Appareil\" pour charger les informations AMS." msgid "Sync filaments with AMS" -msgstr "Sync filaments with AMS" +msgstr "Synchroniser les filaments avec AMS" msgid "" "Sync filaments with AMS will drop all current selected filament presets and " "colors. Do you want to continue?" msgstr "" -"Sync filaments with AMS will drop all current selected filament presets and " -"colors. Do you want to continue?" +"La synchronisation des filaments avec AMS supprimera tous les préréglages et " +"couleurs de filament actuellement sélectionnés. Voulez-vous continuer ?" msgid "" "Already did a synchronization, do you want to sync only changes or resync " @@ -4070,16 +4119,18 @@ msgid "Resync" msgstr "" msgid "There are no compatible filaments, and sync is not performed." -msgstr "There are no compatible filaments, and sync is not performed." +msgstr "" +"Il n'y a pas de filaments compatibles et la synchronisation n'est pas " +"effectuée." msgid "" "There are some unknown filaments mapped to generic preset. Please update " "Bambu Studio or restart Bambu Studio to check if there is an update to " "system presets." msgstr "" -"There are some unknown filaments mapped to generic presets. Please update " -"Bambu Studio or restart Bambu Studio to check if there is an update to " -"system presets." +"Certains filaments inconnus sont associés à des préréglages génériques. " +"Veuillez mettre à jour ou redémarrer Bambu Studio pour vérifier s'il existe " +"une mise à jour des préréglages du système." msgid "Untitled" msgstr "Sans titre" @@ -4093,12 +4144,12 @@ msgid "" "Successfully unmounted. The device %s(%s) can now be safely removed from the " "computer." msgstr "" -"Successfully unmounted. The device %s(%s) can now be safely removed from the " -"computer." +"Démonté avec succès. Le périphérique %s(%s) peut maintenant être retiré en " +"toute sécurité de l'ordinateur." #, c-format, boost-format msgid "Ejecting of device %s(%s) has failed." -msgstr "Ejecting of device %s(%s) has failed." +msgstr "L'éjection du périphérique %s(%s) a échoué." msgid "Previous unsaved project detected, do you want to restore it?" msgstr "Projet précédent non enregistré détecté, voulez-vous le restaurer ?" @@ -4110,43 +4161,46 @@ msgid "" "The bed temperature exceeds filament's vitrification temperature. Please " "open the front door of printer before printing to avoid nozzle clog." msgstr "" -"The bed temperature exceeds filament's vitrification temperature. Please " -"open the front door of printer before printing to avoid nozzle clogs." +"La température du plateau dépasse la température de vitrification du " +"filament. Veuillez ouvrir la porte avant de l'imprimante avant l'impression " +"pour éviter le bouchage de la buse." msgid "" "The nozzle hardness required by the filament is higher than the default " "nozzle hardness of the printer. Please replace the hardened nozzle or " "filament, otherwise, the nozzle will be attrited or damaged." msgstr "" -"The nozzle hardness required by the filament is higher than the default " -"nozzle hardness of the printer. Please replace the hardened nozzle or " -"filament, otherwise, the nozzle will be worn down or damaged." +"La dureté de la buse requise par le filament est supérieure à la dureté par " +"défaut de la buse de l'imprimante. Veuillez remplacer la buse ou le " +"filament, sinon la buse s'usera ou s'endommagera." #, c-format, boost-format msgid "Loading file: %s" msgstr "Chargement du fichier : %s" msgid "The 3mf is not from Bambu Lab, load geometry data only." -msgstr "The 3mf is not from Bambu Lab, loading geometry data only." +msgstr "" +"Le 3mf ne provient pas de Bambu Lab, chargement des données géométriques " +"uniquement." msgid "Load 3mf" -msgstr "Load 3mf" +msgstr "Charger 3mf" msgid "The Config can not be loaded." -msgstr "The Config cannot be loaded." +msgstr "La configuration ne peut pas être chargée." msgid "The 3mf is generated by old Bambu Studio, load geometry data only." msgstr "" -"The 3mf was generated by an old version of Bambu Studio, loading geometry " -"data only." +"Le 3mf a été généré par une ancienne version de Bambu Studio, chargement des " +"données géométriques uniquement." #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Found following keys " "unrecognized:" msgstr "" -"The 3mf's version %s is newer than %s's version %s, Found following keys " -"unrecognized:" +"La version %s du 3mf est plus récente que la version %s de %s. Les clés " +"suivantes ne sont pas reconnues:" msgid "You'd better upgrade your software.\n" msgstr "Vous feriez mieux de mettre à jour votre logiciel.\n" @@ -4159,8 +4213,8 @@ msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " "software." msgstr "" -"The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " -"software." +"La version %s du 3mf est plus récente que la version %s de %s. Nous vous " +"suggérons de mettre à jour votre logiciel." msgid "Invalid values found in the 3mf:" msgstr "" @@ -4169,7 +4223,8 @@ msgid "Please correct them in the param tabs" msgstr "" msgid "The 3mf is not compatible, load geometry data only!" -msgstr "The 3mf is not compatible, loading geometry data only!" +msgstr "" +"Le 3mf n'est pas compatible, chargement des données géométriques uniquement!" msgid "Incompatible 3mf" msgstr "Fichier 3mf incompatible" @@ -4210,12 +4265,12 @@ msgid "" "Instead of considering them as multiple objects, should \n" "the file be loaded as a single object having multiple parts?" msgstr "" -"This file contains several objects positioned at multiple heights.\n" -"Instead of considering them as multiple objects, should \n" -"the file be loaded as a single object with multiple parts?" +"Ce fichier contient plusieurs objets positionnés à différentes hauteurs.\n" +"Au lieu de les considérer comme des objets multiples, le fichier \n" +"doit-il être chargé en tant qu'objet unique avec plusieurs parties ?" msgid "Multi-part object detected" -msgstr "Multi-part object detected" +msgstr "Objet en plusieurs pièces détecté" msgid "Load these files as a single object with multiple parts?\n" msgstr "" @@ -4231,11 +4286,11 @@ msgid "" "Your object appears to be too large, Do you want to scale it down to fit the " "heat bed automatically?" msgstr "" -"Your object appears to be too large, Do you want to scale it down to fit the " -"print bed automatically?" +"Votre objet semble trop grand. Voulez-vous le réduire pour l'adapter " +"automatiquement au plateau d'impression ?" msgid "Object too large" -msgstr "Object too large" +msgstr "Objet trop grand" msgid "Export STL file:" msgstr "Exporter le fichier STL :" @@ -4259,19 +4314,19 @@ msgid "Another export job is running." msgstr "Une autre tâche d'exportation est en cours d'exécution." msgid "Select a new file" -msgstr "Select a new file" +msgstr "Sélectionnez un nouveau fichier" msgid "File for the replace wasn't selected" -msgstr "File for the replacement wasn't selected" +msgstr "Le fichier de remplacement n'a pas été sélectionné" msgid "Error during replace" -msgstr "Error during replacement" +msgstr "Erreur lors du remplacement" msgid "Please select a file" msgstr "Veuillez sélectionner un fichier" msgid "Slicing" -msgstr "Tranchage" +msgstr "Découpe" msgid "There are warnings after slicing models:" msgstr "Il y a des avertissements après le découpage des modèles :" @@ -4280,10 +4335,10 @@ msgid "warnings" msgstr "avertissements" msgid "Invalid data" -msgstr "Données invalides" +msgstr "Donnée non valide" msgid "Slicing Canceled" -msgstr "Slicing Canceled" +msgstr "Tranchage Annulé" #, c-format, boost-format msgid "Slicing Plate %d" @@ -4295,14 +4350,16 @@ msgstr "Veuillez résoudre les erreurs de découpage et republier." msgid "" "Network Plug-in is not detected. Network related features are unavailable." msgstr "" -"Network Plug-in is not detected. Network related features are unavailable." +"Le plug-in réseau n'est pas détecté. Les fonctionnalités liées au réseau ne " +"sont pas disponibles." msgid "" "Preview only mode:\n" "The loaded file contains gcode only, Can not enter the Prepare page" msgstr "" -"Preview only mode:\n" -"The loaded file contains G-code only, cannot enter the Prepare page" +"Mode de prévisualisation:\n" +"Le fichier chargé contient uniquement du G-code, impossible d'accéder à la " +"page de Préparation" msgid "You can keep the modified presets to the new project or discard them" msgstr "" @@ -4310,7 +4367,7 @@ msgstr "" "supprimer" msgid "Creating a new project" -msgstr "Créer un nouveau projet" +msgstr "Création d'un nouveau projet" msgid "Load project" msgstr "Charger le projet" @@ -4320,25 +4377,25 @@ msgid "" "Please check whether the folder exists online or if other programs open the " "project file." msgstr "" -"Failed to save the project.\n" -"Please check whether the folder exists online or if other programs have the " -"project file open." +"Impossible d'enregistrer le projet.\n" +"Vérifiez si le dossier existe en ligne ou si le fichier de projet est ouvert " +"dans d'autres programmes." msgid "Save project" -msgstr "Save project" +msgstr "Sauvegarder le projet" msgid "Importing Model" -msgstr "Importing Model" +msgstr "Importation du modèle" msgid "prepare 3mf file..." -msgstr "preparing 3mf file..." +msgstr "préparation du fichier 3mf..." msgid "downloading project ..." -msgstr "downloading project ..." +msgstr "téléchargement du projet..." #, c-format, boost-format msgid "Project downloaded %d%%" -msgstr "Project downloaded %d%%" +msgstr "Projet téléchargé à %d%%" msgid "The selected file" msgstr "Le fichier sélectionné" @@ -4359,7 +4416,7 @@ msgid "Open as project" msgstr "Ouvrir en tant que projet" msgid "Import geometry only" -msgstr "Importer uniquement la géométrie" +msgstr "Importer la géométrie uniquement" msgid "Only one G-code file can be opened at the same time." msgstr "Un seul fichier G-code peut être ouvert à la fois." @@ -4395,7 +4452,7 @@ msgid "Copies of the selected object" msgstr "Copies de l'objet sélectionné" msgid "Save G-code file as:" -msgstr "Enregistrer le fichier G-code sous :" +msgstr "Sauvegarder le fichier G-code en tant que :" msgid "Save Sliced file as:" msgstr "Enregistrer le fichier découpé sous :" @@ -4405,8 +4462,8 @@ msgid "" "The file %s has been sent to the printer's storage space and can be viewed " "on the printer." msgstr "" -"The file %s has been sent to the printer's storage space and can be viewed " -"on the printer." +"Le fichier %s a été envoyé vers l'espace de stockage de l'imprimante et peut " +"être visualisé sur l'imprimante." msgid "" "Print By Object: \n" @@ -4416,7 +4473,7 @@ msgstr "" "automatique pour éviter les collisions lors de l'impressio" msgid "Send G-code" -msgstr "Envoyer le code G" +msgstr "Envoyer le G-code" msgid "Send to printer" msgstr "Envoyer à l'imprimante" @@ -4461,14 +4518,15 @@ msgid "Triangles: %1%\n" msgstr "Triangles : %1%\n" msgid "Tips:" -msgstr "Tips:" +msgstr "Astuces:" msgid "" "\"Fix Model\" feature is currently only on Windows. Please repair the model " "on Bambu Studio(windows) or CAD softwares." msgstr "" -"The \"Fix Model\" feature is currently only on Windows. Please repair the " -"model in Bambu Studio (Windows) or CAD software." +"La fonctionnalité « Fix Model » n'est actuellement disponible que sous " +"Windows. Réparez le modèle dans Bambu Studio (Windows) ou dans un logiciel " +"de CAO." #, c-format, boost-format msgid "" @@ -4504,10 +4562,10 @@ msgid "Second" msgstr "Seconde" msgid "Browse" -msgstr "Browse" +msgstr "Parcourir" msgid "Choose Download Directory" -msgstr "Choose Download Directory" +msgstr "Choisissez le répertoire de téléchargement" msgid "General Settings" msgstr "Paramètres généraux" @@ -4548,10 +4606,11 @@ msgid "" msgstr "" msgid "Show \"Tip of the day\" notification after start" -msgstr "Show \"Tip of the day\" notification after start" +msgstr "Afficher la notification \"Astuce du jour\" après le démarrage" msgid "If enabled, useful hints are displayed at startup." -msgstr "If enabled, useful hints are displayed at startup." +msgstr "" +"Si cette option est activée, des conseils utiles s'affichent au démarrage." msgid "Presets" msgstr "" @@ -4629,13 +4688,13 @@ msgid "The peroid of backup in seconds." msgstr "" msgid "Downloads" -msgstr "Downloads" +msgstr "Téléchargements" msgid "Dark Mode" -msgstr "Dark Mode" +msgstr "Mode Sombre" msgid "Enable Dark mode" -msgstr "Enable Dark Mode" +msgstr "Activer le mode Sombre" msgid "Home page and daily tips" msgstr "Page d'accueil et conseils quotidiens" @@ -4725,7 +4784,7 @@ msgid "DEBUG settings have saved successfully!" msgstr "Les paramètres DEBUG ont été enregistrés avec succès !" msgid "Switch cloud environment, Please login again!" -msgstr "Cloud environment switched; please login again!" +msgstr "L'environnement Cloud a changé, veuillez vous reconnecter !" msgid "System presets" msgstr "Préréglages système" @@ -4746,7 +4805,7 @@ msgid "Please choose the filament colour" msgstr "" msgid "Add/Remove presets" -msgstr "Ajouter/supprimer des préréglages" +msgstr "Ajouter/Supprimer des préréglages" msgid "Edit preset" msgstr "Modifier le préréglage" @@ -4755,13 +4814,13 @@ msgid "Project-inside presets" msgstr "Préréglages intégrés au projet" msgid "Add/Remove filaments" -msgstr "Add/Remove filament" +msgstr "Ajouter/Supprimer filament" msgid "Add/Remove materials" -msgstr "Add/Remove materials" +msgstr "Ajouter/Supprimer des matériaux" msgid "Add/Remove printers" -msgstr "Add/Remove printers" +msgstr "Ajouter/Supprimer des imprimantes" msgid "Same as Global Print Sequence" msgstr "" @@ -4770,7 +4829,7 @@ msgid "Print sequence" msgstr "Séquence d'impression" msgid "Same as Global Bed Type" -msgstr "Same as Global Bed Type" +msgstr "Identique au type de plateau général" msgid "Cool Plate" msgstr "Assiette froide" @@ -4782,7 +4841,7 @@ msgid "High Temp Plate" msgstr "Plaque haute température" msgid "Textured PEI Plate" -msgstr "Textured PEI Plate" +msgstr "Plaque PEI texturée" msgid "By Layer" msgstr "" @@ -4805,7 +4864,7 @@ msgid "Packing project data into 3mf file" msgstr "Compression des données du projet dans un fichier 3mf" msgid "Uploading 3mf" -msgstr "Téléchargement 3mf" +msgstr "Téléversement 3mf" msgid "Jump to model publish web page" msgstr "Accéder à la page internet de publication des modèles" @@ -4877,7 +4936,7 @@ msgid "The name is not allowed to end with space character." msgstr "Le nom ne doit pas se terminer par un espace." msgid "The name cannot be the same as a preset alias name." -msgstr "Le nom ne peut pas être identique à un nom d'alias prédéfini." +msgstr "Le nom ne peut pas être le même qu'un nom d'alias prédéfini." msgid "Save preset" msgstr "Enregistrer le préréglage" @@ -4930,7 +4989,7 @@ msgid "Input access code" msgstr "Saisir le code d'accès" msgid "Can't find my devices?" -msgstr "Can't find devices?" +msgstr "Vous ne trouvez pas d'appareils ?" msgid "Log out successful." msgstr "Déconnexion réussie." @@ -4957,7 +5016,7 @@ msgid "Bed Leveling" msgstr "Mise à niveau du lit" msgid "Flow Calibration" -msgstr "Étalonnage du débit" +msgstr "Calibration du débit" msgid "send completed" msgstr "envoi terminé" @@ -4976,7 +5035,9 @@ msgid "Synchronizing device information time out" msgstr "Expiration du délai de synchronisation des informations sur l'appareil" msgid "Cannot send the print job when the printer is updating firmware" -msgstr "Cannot send a print job while the printer is updating firmware" +msgstr "" +"Impossible d'envoyer une tâche d'impression pendant la mise à jour du " +"firmware de l'imprimante" msgid "" "The printer is executing instructions. Please restart printing after it ends" @@ -4992,15 +5053,17 @@ msgid "" "Filament %s exceeds the number of AMS slots. Please update the printer " "firmware to support AMS slot assignment." msgstr "" -"Filament %s exceeds the number of AMS slots. Please update the printer " -"firmware to support AMS slot assignment." +"Le filament %s dépasse le nombre d'emplacements AMS. Mettez à jour le " +"firmware de l'imprimante pour qu'il prenne en charge l'attribution des " +"emplacements AMS." msgid "" "Filament exceeds the number of AMS slots. Please update the printer firmware " "to support AMS slot assignment." msgstr "" -"Filament exceeds the number of AMS slots. Please update the printer firmware " -"to support AMS slot assignment." +"Le nombre de filaments dépasse le nombre d'emplacements AMS. Mettez à jour " +"le firmware de l'imprimante pour qu'il prenne en charge l'attribution des " +"emplacements AMS." msgid "" "Filaments to AMS slots mappings have been established. You can click a " @@ -5022,58 +5085,63 @@ msgid "" "Filament %s does not match the filament in AMS slot %s. Please update the " "printer firmware to support AMS slot assignment." msgstr "" -"Filament %s does not match the filament in AMS slot %s. Please update the " -"printer firmware to support AMS slot assignment." +"Le filament %s ne correspond pas au filament de l'emplacement AMS %s. " +"Veuillez mettre à jour le firmware de l'imprimante pour qu'il prenne en " +"charge l'attribution des emplacements AMS." msgid "" "Filament does not match the filament in AMS slot. Please update the printer " "firmware to support AMS slot assignment." msgstr "" -"Filament does not match the filament in AMS slot. Please update the printer " -"firmware to support AMS slot assignment." +"Le filament ne correspond pas au filament du slot AMS. Mettez à jour le " +"firmware de l'imprimante pour qu'il prenne en charge l'attribution des " +"emplacements AMS." msgid "" "The printer firmware only supports sequential mapping of filament => AMS " "slot." msgstr "" -"The printer firmware only supports sequential mapping of filament => AMS " -"slot." +"Le firmware de l’imprimante ne prend en charge que le mappage séquentiel du " +"filament => emplacement AMS." msgid "An SD card needs to be inserted before printing." -msgstr "A MicroSD card needs to be inserted before printing." +msgstr "Une carte MicroSD doit être insérée avant l'impression." msgid "An SD card needs to be inserted to record timelapse." -msgstr "A MicroSD card needs to be inserted to record a timelapse." +msgstr "Une carte MicroSD doit être insérée pour enregistrer un timelapse." msgid "" "Cannot send the print job to a printer whose firmware is required to get " "updated." -msgstr "Cannot send the print job to a printer whose firmware must be updated." +msgstr "" +"Impossible d'envoyer la tâche d'impression à une imprimante dont le firmware " +"doit être mis à jour." msgid "Cannot send the print job for empty plate" -msgstr "Cannot send a print job for an empty plate." +msgstr "Impossible d'envoyer une tâche d'impression d'un plateau vide." msgid "This printer does not support printing all plates" -msgstr "This printer does not support printing all plates" +msgstr "" +"Cette imprimante ne prend pas en charge l'impression de toutes les plaques" msgid "Errors" -msgstr "Errors" +msgstr "Erreurs" msgid "" "Please check the following infomation and click Confirm to continue sending " "print:" msgstr "" -"Please check the following information and click Confirm to continue sending " -"the print:" +"Vérifiez les informations suivantes et cliquez sur Confirmer pour continuer " +"à envoyer l'impression :" msgid "" "The printer type used to generate G-code is not the same type as the " "currently selected physical printer. It is recommend to re-slice by " "selecting the same printer type." msgstr "" -"The printer type used to generate G-code is not the same type as the " -"currently selected physical printer. It is recommend to re-slice after " -"selecting the correct printer type." +"Le type d'imprimante utilisé pour générer le G-code n'est pas le même que " +"l'imprimante physique actuellement sélectionnée. Il est recommandé de re-" +"trancher en sélectionnant le même type d'imprimante." #, c-format, boost-format msgid "%s is not supported by AMS." @@ -5084,9 +5152,9 @@ msgid "" "they are the required filaments. If they are okay, press \"Confirm\" to " "start printing." msgstr "" -"There are some unknown filaments in the AMS mappings. Please check whether " -"they are the required filaments. If they are okay, click \"Confirm\" to " -"start printing." +"Il y a quelques filaments inconnus dans les association avec l'AMS. Veuillez " +"vérifier s'il s'agit des filaments nécessaires. S'ils sont corrects, cliquez " +"sur \"Confirmer\" pour lancer l'impression." msgid "Preparing print job" msgstr "Préparation du travail d'impression" @@ -5095,7 +5163,7 @@ msgid "Modifying the device name" msgstr "Modification du nom de l'appareil" msgid "Send to Printer SD card" -msgstr "Send to Printer MicroSD card" +msgstr "Envoyer à la carte microSD de l'imprimante" msgid "Cannot send the print task when the upgrade is in progress" msgstr "" @@ -5106,10 +5174,11 @@ msgid "An SD card needs to be inserted before send to printer SD card." msgstr "" msgid "The printer is required to be in the same LAN as Bambu Studio." -msgstr "The printer is required to be on the same LAN as Bambu Studio." +msgstr "" +"L'imprimante doit se trouver sur le même réseau local que Bambu Studio." msgid "The printer does not support sending to printer SD card." -msgstr "The printer does not support sending to printer MicroSD card." +msgstr "L'imprimante ne prend pas en charge l'envoi vers la carte microSD." msgid "Log in printer" msgstr "Connectez-vous à l'imprimante" @@ -5141,58 +5210,62 @@ msgstr "Échec de la déconnexion." #. TRN "Save current Settings" #, c-format, boost-format msgid "Save current %s" -msgstr "Enregistrer le %s actuel" +msgstr "Enregistrer l'état actuel %s" msgid "Delete this preset" msgstr "Supprimer ce préréglage" msgid "Search in preset" -msgstr "Search in preset" +msgstr "Rechercher dans le préréglage" msgid "Click to reset all settings to the last saved preset." -msgstr "Click to reset all settings to the last saved preset." +msgstr "" +"Cliquez pour rétablir tous les paramètres au dernier préréglage enregistré." msgid "" "Prime tower is required for smooth timeplase. There may be flaws on the " "model without prime tower. Are you sure you want to disable prime tower?" msgstr "" -"A Prime tower is required for smooth timeplase mode. There may be flaws on " -"the model without a prime tower. Are you sure you want to disable the prime " -"tower?" +"Une tour de nettoyage est requise pour le mode Timeplase fluide. Il peut y " +"avoir des défauts sur le modèle sans tour de nettoyage. Êtes-vous sûr de " +"vouloir la désactiver ?" msgid "" "Prime tower is required for smooth timelapse. There may be flaws on the " "model without prime tower. Do you want to enable prime tower?" msgstr "" -"A prime tower is required for smooth timelapse mode. There may be flaws on " -"the model without prime tower. Do you want to enable the prime tower?" +"Une tour de nettoyage est requise pour un mode timelapse fluide. Il peut y " +"avoir des défauts sur le modèle sans tour de nettoyage. Voulez-vous activer " +"la désactiver?" msgid "" "We have added an experimental style \"Tree Slim\" that features smaller " "support volume but weaker strength.\n" "We recommend using it with: 0 interface layers, 0 top distance, 2 walls." msgstr "" -"We have added an experimental style \"Tree Slim\" that features smaller " -"support volume but weaker strength.\n" -"We recommend using it with: 0 interface layers, 0 top distance, 2 walls." +"Nous avons ajouté un style expérimental « Arborescent Fin » qui offre un " +"volume de support plus petit mais également une résistance plus faible.\n" +"Nous recommandons de l'utiliser avec : 0 couches d'interface, 0 distance " +"supérieure, 2 murs." msgid "" "Change these settings automatically? \n" "Yes - Change these settings automatically\n" "No - Do not change these settings for me" msgstr "" -"Change these settings automatically? \n" -"Yes - Change these settings automatically.\n" -"No - Do not change these settings for me." +"Vous souhaitez modifier ces paramètres automatiquement ? \n" +"Oui - Modifiez ces paramètres automatiquement.\n" +"Non - Ne modifiez pas ces paramètres pour moi." msgid "" "For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommend the following " "settings: at least 2 interface layers, at least 0.1mm top z distance or " "using support materials on interface." msgstr "" -"For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommend the following " -"settings: at least 2 interface layers, at least 0.1mm top z distance or " -"using support materials on interface." +"Pour les styles \"Arborescent fort\" et \"Arborescent Hybride\", nous " +"recommandons les réglages suivants : au moins 2 couches d'interface, au " +"moins 0,1 mm de distance entre le haut et le z ou l'utilisation de matériaux " +"de support sur l'interface." msgid "" "When using support material for the support interface, We recommend the " @@ -5207,10 +5280,10 @@ msgid "" "by right-click the empty position of build plate and choose \"Add Primitive" "\"->\"Timelapse Wipe Tower\"." msgstr "" -"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\"." +"Lorsque vous enregistrez un timelapse sans tête d’outil, il est recommandé " +"d’ajouter une \"Tour de nettoyage timelapse\".\n" +"en faisant un clic droit sur un emplacement vide sur le plateau et en " +"choisissant \"Ajouter Primitive\"-> \"Tour de nettoyage Timelapse\"." msgid "Line width" msgstr "Largeur de ligne" @@ -5222,7 +5295,7 @@ msgid "Precision" msgstr "Précision" msgid "Wall generator" -msgstr "Wall generator" +msgstr "Générateur de mur" msgid "Walls" msgstr "Des murs" @@ -5256,19 +5329,19 @@ msgid "Acceleration" msgstr "Accélération" msgid "Raft" -msgstr "Raft" +msgstr "Radeau" msgid "Support filament" msgstr "Filament de support" msgid "Prime tower" -msgstr "Tour principale" +msgstr "Tour de nettoyage" msgid "Special mode" msgstr "Mode spécial" msgid "G-code output" -msgstr "G-code output" +msgstr "Sortie G-code" msgid "Post-processing scripts" msgstr "" @@ -5289,6 +5362,10 @@ msgstr[0] "" "La ligne suivante %s contient des mots clés réservés. Veuillez le supprimer, " "ou il battra la visualisation du code G et l'estimation du temps " "d'impression." +msgstr[1] "" +"La ligne suivante %s contient des mots clés réservés. Veuillez le supprimer, " +"ou il battra la visualisation du code G et l'estimation du temps " +"d'impression." msgid "Reserved keywords found" msgstr "Mots clés réservés trouvés" @@ -5356,8 +5433,8 @@ msgid "" "Bed temperature when Textured PEI Plate is installed. Value 0 means the " "filament does not support to print on the Textured PEI Plate" msgstr "" -"Bed temperature when Textured PEI Plate is installed. 0 means the filament " -"is not supported on the Textured PEI Plate" +"Température du lit lorsque la plaque PEI texturée est installée. La valeur 0 " +"signifie que le filament n'est pas supporté par la plaque PEI texturée" msgid "Volumetric speed limitation" msgstr "Limitation de vitesse volumétrique" @@ -5410,7 +5487,7 @@ msgid "Printable space" msgstr "Espace imprimable" msgid "Extruder Clearance" -msgstr "Extruder Clearance" +msgstr "Dégagement de l'extrudeur" msgid "Accessory" msgstr "Accessoire" @@ -5425,7 +5502,7 @@ msgid "Machine end G-code" msgstr "Code G de fin de machine" msgid "Before layer change G-code" -msgstr "Avant le changement de couche G-code" +msgstr "G-Code avant changement de couche" msgid "Layer change G-code" msgstr "Code G de changement de couche" @@ -5437,7 +5514,7 @@ msgid "Pause G-code" msgstr "Mettre le code G en pause" msgid "Template Custom G-code" -msgstr "Template Custom G-code" +msgstr "Modèle G-code personnalisé" msgid "Motion ability" msgstr "Capacité de mouvement" @@ -5466,6 +5543,7 @@ msgstr "Détaché" msgid "Following preset will be deleted too." msgid_plural "Following presets will be deleted too." msgstr[0] "Le préréglage suivant sera également supprimé." +msgstr[1] "" #, boost-format msgid "Are you sure to %1% the selected preset?" @@ -5474,13 +5552,13 @@ msgstr "Êtes-vous sûr de %1% le préréglage sélectionné ?" #. TRN Remove/Delete #, boost-format msgid "%1% Preset" -msgstr "%1% prédéfini" +msgstr "%1% Préréglage" msgid "All" -msgstr "Tout" +msgstr "Tous" msgid "Set" -msgstr "Régler" +msgstr "Appliquer" msgid "Click to reset current value and attach to the global value." msgstr "" @@ -5508,7 +5586,7 @@ msgid "Old Value" msgstr "Ancienne valeur" msgid "New Value" -msgstr "Nouvelle valeur" +msgstr "Nouvelle Valeur" msgid "Transfer" msgstr "Transférer" @@ -5517,7 +5595,7 @@ msgid "Don't save" msgstr "Ne pas enregistrer" msgid "Discard" -msgstr "Jeter" +msgstr "Ignorer" msgid "Click the right mouse button to display the full text." msgstr "" @@ -5530,7 +5608,7 @@ msgid "All changes will be discarded." msgstr "Toutes les modifications seront rejetées." msgid "Save the selected options." -msgstr "Enregistrez les options sélectionnées." +msgstr "Enregistrer les options sélectionnées." msgid "Keep the selected options." msgstr "Conserver les options sélectionnées." @@ -5581,36 +5659,36 @@ msgid "" "Would you like to keep these changed settings (new value) after switching " "preset?" msgstr "" -"You have changed some settings of preset \"%1%\". \n" -"Would you like to keep these changed settings (new value) after switching " -"presets?" +"Vous avez modifié certains paramètres du préréglage \"%1%\". \n" +"Souhaitez-vous conserver ces paramètres modifiés (nouvelle valeur) après " +"avoir changé de préréglage ?" msgid "" "You have changed some preset settings. \n" "Would you like to keep these changed settings (new value) after switching " "preset?" msgstr "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"presets?" +"Vous avez modifié certains paramètres prédéfinis. \n" +"Souhaitez-vous conserver ces paramètres modifiés (nouvelle valeur) après " +"avoir changé de préréglage ?" msgid "Extruders count" -msgstr "Les extrudeuses comptent" +msgstr "Nombre d'extrudeurs" msgid "General" msgstr "Général" msgid "Capabilities" -msgstr "Capacités" +msgstr "Fonctionnalités" msgid "Select presets to compare" msgstr "" msgid "Show all presets (including incompatible)" -msgstr "Show all presets (including incompatible)" +msgstr "Afficher tous les préréglages (y compris incompatibles)" msgid "Add File" -msgstr "Add File" +msgstr "Ajouter un Fichier" msgid "Set as cover" msgstr "Définir comme couverture" @@ -5635,7 +5713,7 @@ msgid "Assembly Guide" msgstr "Guide d'assemblage" msgid "Author" -msgstr "Author" +msgstr "Auteur" msgid "Model Name" msgstr "Nom du modèle" @@ -5674,14 +5752,14 @@ msgstr "" #, c-format, boost-format msgid "Exit %s" -msgstr "Quitter %s" +msgstr "Sortir de %s" msgid "the Configuration package is incompatible with current APP." msgstr "" "le package de configuration est incompatible avec l'application actuelle." msgid "Configuration updates" -msgstr "Mises à jour de configuration" +msgstr "Mises à jour de la configuration" msgid "No updates available." msgstr "Aucune mise à jour disponible." @@ -5696,18 +5774,18 @@ msgid "Flushing volumes for filament change" msgstr "Volumes de rinçage pour le changement de filament" msgid "Multiplier" -msgstr "Multiplier" +msgstr "Multiplicateur" msgid "Flushing volume (mm³) for each filament pair." msgstr "Volume de rinçage (mm³) pour chaque paire de filaments." #, c-format, boost-format msgid "Suggestion: Flushing Volume in range [%d, %d]" -msgstr "Suggestion: Flushing Volume in range [%d, %d]" +msgstr "Suggestion : Volume de rinçage dans la plage [%d, %d]." #, c-format, boost-format msgid "The multiplier should be in range [%.2f, %.2f]." -msgstr "The multiplier should be in range [%.2f, %.2f]." +msgstr "Le multiplicateur doit être compris dans la plage [%.2f, %.2f]." msgid "unloaded" msgstr "déchargé" @@ -5751,10 +5829,12 @@ msgid "Copy to clipboard" msgstr "Copier dans le presse-papier" msgid "Paste from clipboard" -msgstr "Coller depuis le presse-papiers" +msgstr "Coller depuis le presse-papier" msgid "Show/Hide 3Dconnexion devices settings dialog" -msgstr "Show/Hide 3Dconnexion devices settings dialog" +msgstr "" +"Afficher/Masquer la boîte de dialogue des paramètres des périphériques " +"3Dconnexion" msgid "Show keyboard shortcuts list" msgstr "Afficher la liste des raccourcis clavier" @@ -5763,16 +5843,16 @@ msgid "Global shortcuts" msgstr "Raccourcis globaux" msgid "Rotate View" -msgstr "Rotate View" +msgstr "Rotation de la vue" msgid "Pan View" -msgstr "Pan View" +msgstr "Déplacement de vue" msgid "Mouse wheel" -msgstr "Mouse wheel" +msgstr "Molette de souris" msgid "Zoom View" -msgstr "Zoom View" +msgstr "Vue agrandie" msgid "Shift+A" msgstr "" @@ -5793,7 +5873,7 @@ msgid "Shift+Tab" msgstr "" msgid "Collapse/Expand the sidebar" -msgstr "Réduire/Agrandir la barre latérale" +msgstr "Réduire/développer la barre latérale" msgid "⌘+Any arrow" msgstr "⌘+n'importe quelle flèche" @@ -5802,13 +5882,13 @@ msgid "Movement in camera space" msgstr "Mouvement dans l'espace de la caméra" msgid "⌥+Left mouse button" -msgstr "⌥+Left mouse button" +msgstr "⌥+Bouton gauche de la souris" msgid "Select a part" -msgstr "Select a part" +msgstr "Sélectionner une pièce" msgid "⌘+Left mouse button" -msgstr "⌘+Left mouse button" +msgstr "⌘+Bouton gauche de la souris" msgid "Select multiple objects" msgstr "sélectionnez tous les objets sur la plaque actuelle" @@ -5817,46 +5897,46 @@ msgid "Ctrl+Any arrow" msgstr "Ctrl+n'importe quelle flèche" msgid "Alt+Left mouse button" -msgstr "Alt+Left mouse button" +msgstr "Alt+Bouton gauche de la souris" msgid "Ctrl+Left mouse button" -msgstr "Ctrl+Left mouse button" +msgstr "Ctrl+Bouton gauche de la souris" msgid "Shift+Left mouse button" -msgstr "Shift+Left mouse button" +msgstr "Maj+Bouton gauche de la souris" msgid "Select objects by rectangle" msgstr "Sélectionner les objets par rectangle" msgid "Arrow Up" -msgstr "Flèche vers le haut" +msgstr "Flèche Haut" msgid "Move selection 10 mm in positive Y direction" -msgstr "Déplacer la sélection de 10 mm dans le sens Y positif" +msgstr "Déplacer la sélection de 10 mm dans la direction positive Y" msgid "Arrow Down" -msgstr "Flèche vers le bas" +msgstr "Flèche Bas" msgid "Move selection 10 mm in negative Y direction" -msgstr "Déplacer la sélection de 10 mm dans le sens Y négatif" +msgstr "Déplacer la sélection de 10 mm dans la direction négative Y" msgid "Arrow Left" -msgstr "Flèche gauche" +msgstr "Flèche Gauche" msgid "Move selection 10 mm in negative X direction" -msgstr "Déplacer la sélection de 10 mm dans la direction X négative" +msgstr "Déplacer la sélection de 10 mm dans la direction négative X" msgid "Arrow Right" -msgstr "Flèche vers la droite" +msgstr "Flèche Droite" msgid "Move selection 10 mm in positive X direction" -msgstr "Déplacer la sélection de 10 mm dans la direction X positive" +msgstr "Déplacer la sélection de 10 mm dans la direction positive X" msgid "Shift+Any arrow" msgstr "Maj+n'importe quelle flèche" msgid "Movement step set to 1 mm" -msgstr "Pas de mouvement réglé sur 1 mm" +msgstr "Pas du mouvement réglé sur 1 mm" msgid "Esc" msgstr "" @@ -5889,28 +5969,28 @@ msgid "Select all objects" msgstr "Sélectionner tous les objets" msgid "Gizmo move" -msgstr "Gizmo move" +msgstr "Mouvement Gizmo" msgid "Gizmo scale" -msgstr "Gizmo scale" +msgstr "Échelle Gizmo" msgid "Gizmo rotate" -msgstr "Gizmo rotate" +msgstr "Rotation Gizmo" msgid "Gizmo cut" -msgstr "Gizmo cut" +msgstr "Découpe Gizmo" msgid "Gizmo Place face on bed" -msgstr "Gizmo Place face on bed" +msgstr "Placer Gizmo sur le plateau" msgid "Gizmo SLA support points" -msgstr "Gizmo SLA support points" +msgstr "Points de supports Gizmo SLA" msgid "Gizmo FDM paint-on seam" -msgstr "Gizmo FDM paint-on seam" +msgstr "Couture peinte Gizmo FDM" msgid "Plater" -msgstr "Plaqueur" +msgstr "Plateau" msgid "Move: press to snap by 1mm" msgstr "Déplacer : appuyez pour aligner de 1 mm" @@ -5922,7 +6002,7 @@ msgid "Support/Color Painting: adjust pen radius" msgstr "Support/Peinture couleur : ajustez le rayon du stylet" msgid "⌥+Mouse wheel" -msgstr "⌥+Mouse wheel" +msgstr "⌥+Molette de la souris" msgid "Support/Color Painting: adjust section position" msgstr "Support/Peinture couleur : ajuster la position de la section" @@ -5957,142 +6037,148 @@ msgstr "" "Sélectionnez l'objet/la pièce et cliquez avec la souris pour changer le nom" msgid "Objects List" -msgstr "Liste des objets" +msgstr "Liste d'objets" msgid "Vertical slider - Move active thumb Up" -msgstr "Curseur vertical - Déplacer le pouce actif vers le haut" +msgstr "Barre de défilement verticale - Déplacer le curseur actif vers le Haut" msgid "Vertical slider - Move active thumb Down" -msgstr "Curseur vertical - Déplacer le pouce actif vers le bas" +msgstr "Barre de défilement verticale - Déplacer le curseur actif vers le Bas" msgid "Horizontal slider - Move active thumb Left" -msgstr "Curseur horizontal - Déplacer le pouce actif vers la gauche" +msgstr "" +"Barre de défilement horizontale - Déplacer le curseur actif vers la Gauche" msgid "Horizontal slider - Move active thumb Right" -msgstr "Curseur horizontal - Déplacer le pouce actif vers la droite" +msgstr "" +"Barre de défilement horizontale - Déplacer le curseur actif vers la Droite" msgid "On/Off one layer mode of the vertical slider" -msgstr "Activer/désactiver le mode une couche du curseur vertical" +msgstr "On/Off mode couche unique de la barre de défilement verticale" msgid "Move slider 5x faster" msgstr "Déplacez le curseur 5 fois plus vite" msgid "Shift+Mouse wheel" -msgstr "Shift+Mouse wheel" +msgstr "Maj+Molette de la souris" msgid "Release Note" -msgstr "Release Note" +msgstr "Note de version" #, c-format, boost-format msgid "version %s update information :" -msgstr "version %s update information:" +msgstr "informations de mise à jour de la version %s :" msgid "Network plug-in update" -msgstr "Network plug-in update" +msgstr "Mise à jour du plug-in réseau" msgid "" "Click OK to update the Network plug-in when Bambu Studio launches next time." msgstr "" -"Click OK to update the Network plug-in the next time Bambu Studio launches." +"Cliquez sur OK pour mettre à jour le plug-in réseau lors du prochain " +"lancement de Bambu Studio." #, c-format, boost-format msgid "A new Network plug-in(%s) available, Do you want to install it?" -msgstr "A new network plug-in (%s) is available. Do you want to install it?" +msgstr "" +"Un nouveau plug-in réseau (%s) est disponible. Voulez-vous l'installer ?" msgid "New version of Bambu Studio" msgstr "Nouvelle version de Bambu Studio" msgid "Don't remind me of this version again" -msgstr "Don't remind me about this version again." +msgstr "Ne me rappelez plus cette version." msgid "Done" msgstr "" msgid "LAN Connection Failed (Sending print file)" -msgstr "LAN Connection Failed (Sending print file)" +msgstr "Échec de la connexion au réseau local (envoi du fichier d'impression)" msgid "" "Step 1, please confirm Bambu Studio and your printer are in the same LAN." msgstr "" -"Step 1, please confirm that Bambu Studio and your printer are on the same " -"LAN." +"Étape 1, confirmez que Bambu Studio et votre imprimante se trouvent sur le " +"même réseau local." msgid "" "Step 2, if the IP and Access Code below are different from the actual values " "on your printer, please correct them." msgstr "" -"Step 2, if the IP and Access Code below are different from the actual values " -"on your printer, please correct them." +"Étape 2, si l'adresse IP et le code d'accès ci-dessous sont différents des " +"valeurs actuelles de votre imprimante, corrigez-les." msgid "IP" msgstr "IP" msgid "Access Code" -msgstr "Access Code" +msgstr "Code d'Accès" msgid "Where to find your printer's IP and Access Code?" -msgstr "Where to find your printer's IP and Access Code?" +msgstr "Où trouver l'adresse IP et le code d'accès de votre imprimante ?" msgid "Error: IP or Access Code are not correct" -msgstr "Error: IP or Access Code are not correct" +msgstr "Erreur : l'adresse IP ou le code d'accès ne sont pas corrects" msgid "Model:" -msgstr "Model:" +msgstr "Modèle :" msgid "Serial:" -msgstr "Serial:" +msgstr "N° de série:" msgid "Version:" -msgstr "Version:" +msgstr "Version :" msgid "Update firmware" -msgstr "Update firmware" +msgstr "Mise à jour du firmware" msgid "Printing" -msgstr "Printing" +msgstr "Impression" msgid "Idle" -msgstr "Idle" +msgstr "Inactif" msgid "Latest version" -msgstr "Latest version" +msgstr "Dernière version" msgid "Updating" -msgstr "Updating" +msgstr "Mise à jour" msgid "Updating failed" -msgstr "Updating failed" +msgstr "La mise à jour a échoué" msgid "Updating successful" -msgstr "Update successful" +msgstr "Mise à jour réussie" msgid "" "Are you sure you want to update? This will take about 10 minutes. Do not " "turn off the power while the printer is updating." msgstr "" -"Are you sure you want to update? This will take about 10 minutes. Do not " -"turn off the power while the printer is updating." +"Êtes-vous sûr de vouloir effectuer la mise à jour ? Cela prendra environ 10 " +"minutes. Ne mettez pas l'imprimante hors tension durant la mise à jour." msgid "" "An important update was detected and needs to be run before printing can " "continue. Do you want to update now? You can also update later from 'Upgrade " "firmware'." msgstr "" -"An important update was detected and needs to be run before printing can " -"continue. Do you want to update now? You can also update later from 'Update " -"firmware'." +"Une mise à jour importante a été détectée et doit être exécutée avant de " +"pouvoir poursuivre l'impression. Voulez-vous effectuer la mise à jour " +"maintenant ? Vous pouvez également effectuer une mise à jour ultérieurement " +"à partir de \"Mettre à jour le firmware\"." msgid "" "The firmware version is abnormal. Repairing and updating are required before " "printing. Do you want to update now? You can also update later on printer or " "update next time starting the studio." msgstr "" -"The firmware version is abnormal. Repairing and updating are required before " -"printing. Do you want to update now? You can also update later on the " -"printer or update next time you start Bambu Studio." +"La version du firmware est erronée. La réparation et la mise à jour sont " +"nécessaires avant l'impression. Voulez-vous effectuer la mise à jour " +"maintenant ? Vous pouvez également effectuer une mise à jour ultérieurement " +"depuis l'imprimante ou lors du prochain démarrage de Bambu Studio." msgid "Extension Board" -msgstr "Extension Board" +msgstr "Carte d'Extension" msgid "Saving objects into the 3mf failed." msgstr "L'enregistrement d'objets dans le 3mf a échoué." @@ -6144,7 +6230,7 @@ msgstr "Réparation annulée" #, boost-format msgid "Copying of file %1% to %2% failed: %3%" -msgstr "Échec de la copie du fichier %1% vers %2% : %3%" +msgstr "Échec de la copie du fichier %1% vers %2% : %3%" #, boost-format msgid "Copying directory %1% to %2% failed: %3%" @@ -6159,7 +6245,7 @@ msgid "Configuration package updated to " msgstr "Package de configuration mis à jour pour" msgid "Open G-code file:" -msgstr "Dossier ouvert." +msgstr "Ouvrir un fichier G-code :" msgid "" "One object has empty initial layer and can't be printed. Please Cut the " @@ -6244,28 +6330,28 @@ msgstr "" "valeur de \"%2%\"" msgid "undefined error" -msgstr "erreur indéfinie" +msgstr "erreur non définie" msgid "too many files" msgstr "trop de fichiers" msgid "file too large" -msgstr "fichier trop large" +msgstr "fichier trop volumineux" msgid "unsupported method" -msgstr "méthode non prise en charge" +msgstr "méthode non supportée" msgid "unsupported encryption" -msgstr "cryptage non pris en charge" +msgstr "cryptage non supporté" msgid "unsupported feature" -msgstr "fonctionnalité non prise en charge" +msgstr "fonction non supportée" msgid "failed finding central directory" -msgstr "échec de la recherche du répertoire central" +msgstr "impossible de trouver le répertoire central" msgid "not a ZIP archive" -msgstr "pas une archive ZIP" +msgstr "n'est pas une archive ZIP" msgid "invalid header or corrupted" msgstr "en-tête invalide ou corrompu" @@ -6277,61 +6363,61 @@ msgid "decompression failed" msgstr "la décompression a échoué" msgid "compression failed" -msgstr "la compression a échoué" +msgstr "échec de la compression" msgid "unexpected decompressed size" -msgstr "taille décompressée inattendue" +msgstr "volume de décompression inattendu" msgid "CRC check failed" msgstr "La vérification CRC a échoué" msgid "unsupported central directory size" -msgstr "taille du répertoire central non prise en charge" +msgstr "volume du répertoire central non supporté" msgid "allocation failed" -msgstr "l'attribution a échoué" +msgstr "échec de l'allocation" msgid "file open failed" -msgstr "l'ouverture du fichier a échoué" +msgstr "échec de l'ouverture du fichier" msgid "file create failed" -msgstr "la création du fichier a échoué" +msgstr "échec de création du fichier" msgid "file write failed" -msgstr "l'écriture du fichier a échoué" +msgstr "échec d'écriture du fichier" msgid "file read failed" -msgstr "la lecture du fichier a échoué" +msgstr "échec de lecture du fichier" msgid "file close failed" -msgstr "la fermeture du fichier a échoué" +msgstr "échec de la fermeture du fichier" msgid "file seek failed" -msgstr "la recherche de fichier a échoué" +msgstr "impossible de trouver le fichier" msgid "file stat failed" -msgstr "la statistique du fichier a échoué" +msgstr "impossible d'établir des statistiques pour ce fichier" msgid "invalid parameter" -msgstr "Paramètre invalide" +msgstr "paramètre non valide" msgid "invalid filename" msgstr "nom de fichier non valide" msgid "buffer too small" -msgstr "tampon trop petit" +msgstr "buffer trop petit" msgid "internal error" msgstr "erreur interne" msgid "file not found" -msgstr "fichier introuvable" +msgstr "fichier non trouvé" msgid "archive too large" msgstr "archive trop volumineuse" msgid "validation failed" -msgstr "validation échouée" +msgstr "échec de la validation" msgid "write callback failed" msgstr "Échec du rappel d'écriture" @@ -6340,7 +6426,8 @@ msgstr "Échec du rappel d'écriture" msgid "" "%1% is too close to exclusion area, there may be collisions when printing." msgstr "" -"%1% is too close to exclusion area. There may be collisions when printing." +"%1% est trop proche de la zone d'exclusion. Il peut y avoir des collisions " +"lors de l'impression." #, boost-format msgid "%1% is too close to others, and collisions may be caused." @@ -6352,14 +6439,17 @@ msgid "%1% is too tall, and collisions will be caused." msgstr "%1% est trop grand, cela pourrait provoquer des collisions." msgid " is too close to others, there may be collisions when printing." -msgstr " is too close to others; there may be collisions when printing." +msgstr "" +" est trop proche des autres; il peut y avoir des collisions lors de " +"l'impression." msgid " is too close to exclusion area, there may be collisions when printing." msgstr "" -" is too close to exclusion area, there may be collisions when printing." +" est trop proche d'une zone d'exclusion, il peut y avoir des collisions lors " +"de l'impression." msgid "Prime Tower" -msgstr "Tour principale" +msgstr "Tour de nettoyage" msgid " is too close to others, and collisions may be caused.\n" msgstr "" @@ -6385,8 +6475,8 @@ msgid "" "Smooth mode of timelapse is not supported when \"by object\" sequence is " "enabled." msgstr "" -"Smooth mode of timelapse is not supported when \"by object\" sequence is " -"enabled." +"Le mode fluide du timelapse n'est pas pris en charge lorsque le mode " +"d'impression « par objet » est activé." msgid "" "Please select \"By object\" print sequence to print multiple objects in " @@ -6404,46 +6494,47 @@ msgstr "" msgid "The prime tower is not supported in \"By object\" print." msgstr "" -"La tour principale n'est pas prise en charge dans l'impression \"Par objet\"." +"La tour de nettoyage n'est pas prise en charge dans l'impression \"Par objet" +"\"." msgid "" "The prime tower is not supported when adaptive layer height is on. It " "requires that all objects have the same layer height." msgstr "" -"La tour principale n'est pas prise en charge lorsque la hauteur de couche " +"La tour de nettoyage n'est pas prise en charge lorsque la hauteur de couche " "adaptative est activée. Cela nécessite que tous les objets aient la même " "hauteur de couche." msgid "The prime tower requires \"support gap\" to be multiple of layer height" msgstr "" -"La tour principale nécessite que \"l'écart de support\" soit un multiple de " -"la hauteur de la couche" +"La tour de nettoyage nécessite que \"l'écart de support\" soit un multiple " +"de la hauteur de la couche" msgid "The prime tower requires that all objects have the same layer heights" msgstr "" -"La tour principale nécessite que tous les objets aient les mêmes hauteurs de " -"couche" +"La tour de nettoyage nécessite que tous les objets aient la même hauteur de " +"couche." msgid "" "The prime tower requires that all objects are printed over the same number " "of raft layers" msgstr "" -"La tour principale nécessite que tous les objets soient imprimés sur le même " -"nombre de couches de radeau" +"La tour de nettoyage nécessite que tous les objets soient imprimés sur le " +"même nombre de couche de radeau." msgid "" "The prime tower requires that all objects are sliced with the same layer " "heights." msgstr "" -"La tour principale nécessite que tous les objets soient découpés avec les " -"mêmes hauteurs de couche." +"La tour de nettoyage nécessite que tous les objets soient découpés avec la " +"même hauteur de couche." msgid "" "The prime tower is only supported if all objects have the same variable " "layer height" msgstr "" -"The prime tower is only supported if all objects have the same variable " -"layer height" +"La tour de nettoyage n'est prise en charge que si tous les objets ont la " +"même hauteur de couche variable" msgid "Too small line width" msgstr "Largeur de ligne trop petite" @@ -6454,7 +6545,7 @@ msgstr "Largeur de ligne trop grande" msgid "" "The prime tower requires that support has the same layer height with object." msgstr "" -"La tour principale nécessite que le support ait la même hauteur de couche " +"La tour de nettoyage nécessite que le support ait la même hauteur de couche " "avec l'objet." msgid "" @@ -6468,16 +6559,16 @@ msgstr "La hauteur de la couche ne peut pas dépasser le diamètre de la buse" #, c-format, boost-format msgid "Plate %d: %s does not support filament %s" -msgstr "Plate %d: %s does not support filament %s" +msgstr "Plaque %d : %s ne prend pas en charge le filament %s" msgid "Generating skirt & brim" msgstr "Génération jupe et bord" msgid "Exporting G-code" -msgstr "Exportation du code G" +msgstr "Exportation du G-code" msgid "Generating G-code" -msgstr "Génération de code G" +msgstr "Génération du G-code" msgid "Failed processing of the filename_format template." msgstr "Échec du traitement du modèle filename_format." @@ -6493,18 +6584,19 @@ msgid "" "left corner to cut filament during filament change. The area is expressed as " "polygon by points in following format: \"XxY, XxY, ...\"" msgstr "" -"Unprintable area in XY plane. For example, X1 Series printers use the front " -"left corner to cut filament during filament change. The area is expressed as " -"polygon by points in following format: \"XxY, XxY, ...\"" +"Zone non imprimable dans le plan XY. Par exemple, les imprimantes de la " +"série X1 utilisent le coin avant gauche pour couper le filament lors du " +"changement de filament. La zone est exprimée sous forme de polygone par des " +"points au format suivant : \"XxY, XxY,... \"" msgid "Bed custom texture" -msgstr "Bed custom texture" +msgstr "Texture personnalisée du lit" msgid "Bed custom model" -msgstr "Bed custom model" +msgstr "Modèle de lit personnalisé" msgid "Elephant foot compensation" -msgstr "Compensation de pied d'éléphant" +msgstr "Compensation de l'effet patte d'éléphant" msgid "" "Shrink the initial layer on build plate to compensate for elephant foot " @@ -6527,10 +6619,10 @@ msgid "Maximum printable height which is limited by mechanism of printer" msgstr "Hauteur imprimable maximale limitée par le mécanisme de l'imprimante" msgid "Printer preset names" -msgstr "Noms prédéfinis de l'imprimante" +msgstr "Noms des préréglages de l'imprimante" msgid "Hostname, IP or URL" -msgstr "Hostname, IP or URL" +msgstr "Nom d'hôte, adresse IP ou URL" msgid "" "Slic3r can upload G-code files to a printer host. This field should contain " @@ -6539,69 +6631,70 @@ msgid "" "name and password into the URL in the following format: https://username:" "password@your-octopi-address/" msgstr "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the hostname, IP address or URL of the printer host instance. Print host " -"behind HAProxy with basic auth enabled can be accessed by putting the user " -"name and password into the URL in the following format: https://username:" -"password@your-octopi-address/" +"Slic3r peut téléverser des fichiers G-code sur une imprimante hôte. Ce champ " +"doit contenir le nom d'hôte, l'adresse IP ou l'URL de l'instance hôte de " +"l'imprimante. L'hôte d'impression derrière HAProxy avec l'authentification " +"de base activée est accessible en saisissant le nom d'utilisateur et le mot " +"de passe dans l'URL au format suivant : https://username:password@your-" +"octopi-address/" msgid "API Key / Password" -msgstr "API Key / Password" +msgstr "Clé API / Mot de passe" msgid "" "Slic3r can upload G-code files to a printer host. This field should contain " "the API Key or the password required for authentication." msgstr "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the API Key or the password required for authentication." +"Slic3r peut téléverser des fichiers G-code sur une imprimante hôte. Ce champ " +"doit contenir la clé API ou le mot de passe requis pour l'authentification." msgid "Name of the printer" -msgstr "Name of the printer" +msgstr "Nom de l'imprimante" msgid "HTTPS CA File" -msgstr "HTTPS CA File" +msgstr "Fichier HTTPS CA" msgid "" "Custom CA certificate file can be specified for HTTPS OctoPrint connections, " "in crt/pem format. If left blank, the default OS CA certificate repository " "is used." msgstr "" -"Custom CA certificate file can be specified for HTTPS OctoPrint connections, " -"in crt/pem format. If left blank, the default OS CA certificate repository " -"is used." +"Un fichier de certificat CA personnalisé peut être spécifié pour les " +"connexions HTTPS OctoPrint, au format crt/pem. Si ce champ est laissé vide, " +"le référentiel de certificats OS CA par défaut est utilisé." msgid "User" -msgstr "User" +msgstr "Utilisateur" msgid "Password" -msgstr "Password" +msgstr "Mot de passe" msgid "Ignore HTTPS certificate revocation checks" -msgstr "Ignore HTTPS certificate revocation checks" +msgstr "Ignorer les contrôles de révocation des certificats HTTPS" msgid "" "Ignore HTTPS certificate revocation checks in case of missing or offline " "distribution points. One may want to enable this option for self signed " "certificates if connection fails." msgstr "" -"Ignore HTTPS certificate revocation checks in the case of missing or offline " -"distribution points. One may want to enable this option for self signed " -"certificates if connection fails." +"Ignorez les contrôles de révocation des certificats HTTPS en cas de points " +"de distribution manquants ou hors ligne. Il peut être utile d'activer cette " +"option pour les certificats auto-signés en cas d'échec de la connexion." msgid "Names of presets related to the physical printer" -msgstr "Names of presets related to the physical printer" +msgstr "Noms des préréglages associés à l'imprimante physique" msgid "Authorization Type" -msgstr "Authorization Type" +msgstr "Type d'Autorisation" msgid "API key" -msgstr "API key" +msgstr "Clé API" msgid "HTTP digest" -msgstr "HTTP digest" +msgstr "Résumé HTTP" msgid "Avoid crossing wall" -msgstr "Avoid crossing walls" +msgstr "Évitez de traverser les murs" msgid "Detour and avoid to travel across wall which may cause blob on surface" msgstr "" @@ -6609,7 +6702,7 @@ msgstr "" "taches sur la surface" msgid "Avoid crossing wall - Max detour length" -msgstr "Avoid crossing walls - Max detour length" +msgstr "Évitez de traverser les murs - Longueur maximale du détour" msgid "" "Maximum detour distance for avoiding crossing wall. Don't detour if the " @@ -6617,13 +6710,14 @@ msgid "" "either as an absolute value or as percentage (for example 50%) of a direct " "travel path. Zero to disable" msgstr "" -"Maximum detour distance for avoiding crossing wall: The printer won't detour " -"if the detour distance is larger than this value. Detour length could be " -"specified either as an absolute value or as percentage (for example 50%) of " -"a direct travel path. A value of 0 will disable this." +"Distance de détour maximale pour éviter de traverser un mur: l'imprimante ne " +"fera pas de détour si la distance de détour est supérieure à cette valeur. " +"La longueur du détour peut être spécifiée sous forme de valeur absolue ou de " +"pourcentage (par exemple 50 %) d'un trajet direct. Une valeur de 0 " +"désactivera cette option." msgid "mm or %" -msgstr "mm or %" +msgstr "mm ou %" msgid "Other layers" msgstr "Autres couches" @@ -6659,8 +6753,8 @@ msgid "" "Bed temperature for layers except the initial one. Value 0 means the " "filament does not support to print on the Textured PEI Plate" msgstr "" -"Bed temperature after the first layer. 0 means the filament is not supported " -"on the Textured PEI Plate." +"Température du lit après la première couche. 0 signifie que le filament " +"n'est pas supporté par la plaque PEI texturée." msgid "Initial layer" msgstr "Couche initiale" @@ -6696,8 +6790,8 @@ msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Textured PEI Plate" msgstr "" -"Bed temperature of the first layer 0 means the filament is not supported on " -"the Textured PEI Plate." +"La température du lit à la première couche. La valeur 0 signifie que le " +"filament n'est pas supporté sur la plaque PEI texturée." msgid "Bed types supported by the printer" msgstr "Types de lit pris en charge par l'imprimante" @@ -6769,22 +6863,23 @@ msgid "" "of the line without support from lower layer. 0% means forcing cooling for " "all outer wall no matter how much overhang degree" msgstr "" -"Force cooling fan to be a specific speed when overhang degree of printed " -"part exceeds this value. This is expressed as a percentage which indicates " -"how much width of the line without support from lower layer. 0% means " -"forcing cooling for all outer wall no matter the overhang degree." +"Forcer le ventilateur de refroidissement à atteindre une vitesse spécifique " +"lorsque le degré de surplomb de la pièce imprimée dépasse cette valeur. Ceci " +"est exprimé en pourcentage qui indique la largeur de la ligne sans support " +"provenant de la couche inférieure. 0 %% signifie un refroidissement forcé de " +"toutes les parois extérieures, quel que soit le degré de surplomb." msgid "Bridge direction" -msgstr "Bridge direction" +msgstr "Direction du pont" msgid "" "Bridging angle override. If left to zero, the bridging angle will be " "calculated automatically. Otherwise the provided angle will be used for " "external bridges. Use 180°for zero angle." msgstr "" -"Bridging angle override. 0 means the bridging angle will be calculated " -"automatically. Otherwise the provided angle will be used for external " -"bridges. Use 180° for zero angle." +"Forçage de l’angle des ponts. S’il est laissé à zéro, l’angle des ponts sera " +"calculé automatiquement. Sinon, l’angle fourni sera utilisé pour les ponts " +"externes. Utilisez 180° pour un angle nul." msgid "Bridge flow" msgstr "Débit des ponts" @@ -6821,13 +6916,13 @@ msgid "Speed of bridge and completely overhang wall" msgstr "Vitesse du pont et mur complètement en porte-à-faux" msgid "Brim width" -msgstr "Largeur du bord" +msgstr "Largeur de la bordure" msgid "Distance from model to the outermost brim line" msgstr "Distance du modèle à la ligne de bord la plus externe" msgid "Brim type" -msgstr "Type de bord" +msgstr "Type de bordure" msgid "" "This controls the generation of the brim at outer side of models. Auto means " @@ -6857,7 +6952,7 @@ msgid "Compatible machine" msgstr "Appareils compatibles" msgid "upward compatible machine" -msgstr "upward compatible machine" +msgstr "machine à compatibilité ascendante" msgid "Compatible machine condition" msgstr "État de la machine compatible" @@ -6932,7 +7027,7 @@ msgid "layers" msgstr "couches" msgid "Don't support bridges" -msgstr "Ne supporte pas les ponts" +msgstr "Ne pas supporter les ponts" msgid "" "Don't support the whole bridge area which make support very large. Bridge " @@ -6943,16 +7038,17 @@ msgstr "" "support s'ils ne sont pas très longs." msgid "Thick bridges" -msgstr "Thick bridges" +msgstr "Ponts épais" msgid "" "If enabled, bridges are more reliable, can bridge longer distances, but may " "look worse. If disabled, bridges look better but are reliable just for " "shorter bridged distances." msgstr "" -"If enabled, bridges are more reliable and can bridge longer distances but " -"may look worse. If disabled, bridges look better but are reliable only for " -"shorter distances." +"S'ils sont activés, les ponts sont plus fiables et peuvent couvrir de plus " +"longues distances, mais ils peuvent sembler moins jolis. S'ils sont " +"désactivés, les ponts ont une meilleure apparence mais ne sont fiables que " +"sur de courtes distances." msgid "Max bridge length" msgstr "Longueur max des porte-à-faux" @@ -6968,7 +7064,7 @@ msgstr "" "en charge." msgid "End G-code" -msgstr "Terminer le code G" +msgstr "G-code de fin" msgid "End G-code when finish the whole printing" msgstr "Terminer le code G lorsque vous avez terminé toute l'impression" @@ -6977,17 +7073,18 @@ msgid "End G-code when finish the printing of this filament" msgstr "Fin du code G lorsque l'impression de ce filament est terminée" msgid "Ensure vertical shell thickness" -msgstr "Ensure vertical shell thickness" +msgstr "Assurer l'épaisseur verticale de la coque" msgid "" "Add solid infill near sloping surfaces to guarantee the vertical shell " "thickness (top+bottom solid layers)" msgstr "" -"Add solid infill near sloping surfaces to guarantee the vertical shell " -"thickness (top+bottom solid layers)." +"Ajoutez du remplissage solide à proximité des surfaces inclinées pour " +"garantir l'épaisseur verticale de la coque (couches solides supérieure" +"+inférieure)." msgid "Internal bridge support thickness" -msgstr "Internal bridge support thickness" +msgstr "Épaisseur du support interne du pont" msgid "" "If enabled, Studio will generate support loops under the contours of " @@ -7016,16 +7113,16 @@ msgid "Monotonic line" msgstr "Ligne monotone" msgid "Aligned Rectilinear" -msgstr "Aligned Rectilinear" +msgstr "Rectiligne Aligné" msgid "Hilbert Curve" -msgstr "Hilbert Curve" +msgstr "Courbe de Hilbert" msgid "Archimedean Chords" -msgstr "Archimedean Chords" +msgstr "Spirale d'Archimède" msgid "Octagram Spiral" -msgstr "Octagram Spiral" +msgstr "Spirale Octagramme" msgid "Bottom surface pattern" msgstr "Modèle de surface inférieure" @@ -7066,7 +7163,7 @@ msgid "infill/outer/inner" msgstr "remplissage/extérieur/intérieur" msgid "inner-outer-inner/infill" -msgstr "inner-outer-inner/infill" +msgstr "intérieur-extérieur-intérieur/remplissage" msgid "Height to rod" msgstr "Hauteur à la tige" @@ -7075,8 +7172,8 @@ msgid "" "Distance of the nozzle tip to the lower rod. Used for collision avoidance in " "by-object printing." msgstr "" -"Distance from the nozzle tip to the lower rod. Used for collision avoidance " -"in by-object printing." +"Distance entre la pointe de la buse et la tige de carbone inférieure. " +"Utilisé pour éviter les collisions lors de l'impression \"par objets\"." msgid "Height to lid" msgstr "Hauteur au couvercle" @@ -7085,34 +7182,34 @@ msgid "" "Distance of the nozzle tip to the lid. Used for collision avoidance in by-" "object printing." msgstr "" -"Distance from the nozzle tip to the lid. Used for collision avoidance in by-" -"object printing." +"Distance entre la pointe de la buse et le capot. Utilisé pour éviter les " +"collisions lors de l'impression \"par objets\"." msgid "" "Clearance radius around extruder. Used for collision avoidance in by-object " "printing." msgstr "" -"Clearance radius around extruder: used for collision avoidance in by-object " -"printing." +"Rayon de dégagement autour de l'extrudeuse : utilisé pour éviter les " +"collisions lors de l'impression par objets." msgid "Max Radius" -msgstr "Max Radius" +msgstr "Rayon maximum" msgid "" "Max clearance radius around extruder. Used for collision avoidance in by-" "object printing." msgstr "" -"Max clearance radius around extruder. Used for collision avoidance in by-" -"object printing." +"Rayon de dégagement maximal autour de l'extrudeuse. Utilisé pour éviter les " +"collisions lors de l'impression \"par objets\"." msgid "Extruder Color" -msgstr "Couleur de l'extrudeuse" +msgstr "Couleur de l'extrudeur" msgid "Only used as a visual help on UI" msgstr "Utilisé uniquement comme aide visuelle sur l'interface utilisateur" msgid "Extruder offset" -msgstr "Décalage de l'extrudeuse" +msgstr "Décalage de l'extrudeur" msgid "Flow ratio" msgstr "Rapport de débit" @@ -7136,7 +7233,7 @@ msgstr "" "Largeur de ligne par défaut si une largeur de ligne est définie sur zéro" msgid "Keep fan always on" -msgstr "Gardez le ventilateur toujours allumé" +msgstr "Garder le ventilateur toujours actif" msgid "" "If enable this setting, part cooling fan will never be stoped and will run " @@ -7163,32 +7260,33 @@ msgid "s" msgstr "s" msgid "Default color" -msgstr "Default color" +msgstr "Couleur par défaut" msgid "Default filament color" -msgstr "Default filament color" +msgstr "Couleur du filament par défaut" msgid "Color" msgstr "Couleur" msgid "Required nozzle HRC" -msgstr "Required nozzle HRC" +msgstr "Buse HRC requise" msgid "" "Minimum HRC of nozzle required to print the filament. Zero means no checking " "of nozzle's HRC." msgstr "" -"Minimum HRC of nozzle required to print the filament. A value of 0 means no " -"checking of the nozzle's HRC." +"Dureté HRC minimum de la buse requis pour imprimer le filament. Une valeur " +"de 0 signifie qu'il n'y a pas de vérification de la dureté HRC de la buse." msgid "" "This setting stands for how much volume of filament can be melted and " "extruded per second. Printing speed is limited by max volumetric speed, in " "case of too high and unreasonable speed setting. Can't be zero" msgstr "" -"This setting is the volume of filament that can be melted and extruded per " -"second. Printing speed is limited by max volumetric speed, in case of too " -"high and unreasonable speed setting. This value cannot be zero." +"Ce paramètre correspond au volume de filament qui peut être fondu et extrudé " +"par seconde. La vitesse d'impression sera limitée par la vitesse " +"volumétrique maximale en cas de réglage de vitesse déraisonnablement trop " +"élevé. Cette valeur ne peut pas être nulle." msgid "mm³/s" msgstr "mm³/s" @@ -7196,6 +7294,9 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Purge minimale sur la tour de nettoyage" +msgid "mm³" +msgstr "mm³" + msgid "Filament load time" msgstr "Temps de chargement du filament" @@ -7232,7 +7333,7 @@ msgid "The material type of filament" msgstr "Le type de matériau du filament" msgid "Soluble material" -msgstr "Matière soluble" +msgstr "Matériau soluble" msgid "" "Soluble material is commonly used to print support and support interface" @@ -7311,16 +7412,16 @@ msgid "Gyroid" msgstr "Gyroïde" msgid "Honeycomb" -msgstr "Rayon de miel" +msgstr "Nid d'abeille" msgid "Adaptive Cubic" msgstr "Cubique adaptatif" msgid "3D Honeycomb" -msgstr "3D Honeycomb" +msgstr "Nid d'abeille 3D" msgid "Support Cubic" -msgstr "Support Cubic" +msgstr "Support Cubique" msgid "Lightning" msgstr "Lightning" @@ -7334,7 +7435,9 @@ msgstr "" "supérieure." msgid "Acceleration of outer wall. Using a lower value can improve quality" -msgstr "Acceleration of outer wall: using a lower value can improve quality." +msgstr "" +"Accélération du mur extérieur : l'utilisation d'une valeur inférieure peut " +"améliorer la qualité." msgid "" "Acceleration of initial layer. Using a lower value can improve build plate " @@ -7377,7 +7480,7 @@ msgstr "" "l'utilisation de ce filament" msgid "Full fan speed at layer" -msgstr "Vitesse maximale du ventilateur à la couche" +msgstr "Ventilateur à pleine vitesse pour la couche" msgid "" "Randomly jitter while printing the wall, so that the surface has a rough " @@ -7399,7 +7502,7 @@ msgid "All walls" msgstr "Toutes les parois" msgid "Fuzzy skin thickness" -msgstr "Épaisseur de peau floue" +msgstr "Épaisseur de la surface Irrégulière" msgid "" "The width within which to jitter. It's adversed to be below outer wall line " @@ -7409,7 +7512,7 @@ msgstr "" "dessous de la largeur de la ligne du mur extérieur" msgid "Fuzzy skin point distance" -msgstr "Distance floue du point de peau" +msgstr "Distance de point de la surface irrégulière" msgid "" "The average diatance between the random points introducded on each line " @@ -7464,7 +7567,7 @@ msgstr "" "de la buse et le type de filament pouvant être imprimé" msgid "Undefine" -msgstr "Undefined" +msgstr "Non défini" msgid "Hardened steel" msgstr "Acier trempé" @@ -7476,14 +7579,14 @@ msgid "Brass" msgstr "Laiton" msgid "Nozzle HRC" -msgstr "Nozzle HRC" +msgstr "Dureté HRC buse" msgid "" "The nozzle's hardness. Zero means no checking for nozzle's hardness during " "slicing." msgstr "" -"The nozzle's hardness. Zero means no checking for nozzle hardness during " -"slicing." +"La dureté de la buse. Zéro signifie qu'il n'est pas nécessaire de vérifier " +"la dureté de la buse pendant le tranchage." msgid "HRC" msgstr "HRC" @@ -7494,7 +7597,7 @@ msgstr "" "refroidissement de pièce auxiliaire" msgid "G-code flavor" -msgstr "Saveur de code G" +msgstr "Version du G-code" msgid "What kind of gcode the printer is compatible with" msgstr "Avec quel type de gcode l'imprimante est-elle compatible" @@ -7531,7 +7634,7 @@ msgid "Speed of internal sparse infill" msgstr "Vitesse de remplissage clairsemé interne" msgid "Ironing Type" -msgstr "Type de repassage" +msgstr "Type de lissage" msgid "" "Ironing is using small flow to print on same height of surface again to make " @@ -7594,11 +7697,12 @@ msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" msgstr "" -"This G-code will be used as a code for the pause print. Users can insert " -"pause G-code in the G-code viewer." +"Ce G-code sera utilisé comme code pour la pause d'impression. Les " +"utilisateurs peuvent insérer un G-code de pause dans la visionneuse de G-" +"code." msgid "This G-code will be used as a custom code" -msgstr "This G-code will be used as a custom code" +msgstr "Ce G-code sera utilisé comme code personnalisé" msgid "Maximum speed X" msgstr "Vitesse maximale X" @@ -7613,7 +7717,7 @@ msgid "Maximum speed E" msgstr "Vitesse maximale E" msgid "Machine limits" -msgstr "Limites machines" +msgstr "Limites de la machine" msgid "Maximum X speed" msgstr "Vitesse maximale X" @@ -7628,52 +7732,52 @@ msgid "Maximum E speed" msgstr "Vitesse E maximale" msgid "Maximum acceleration X" -msgstr "Accélération maximale X" +msgstr "Accélérations maximum X" msgid "Maximum acceleration Y" -msgstr "Accélération maximale Y" +msgstr "Accélérations maximum Y" msgid "Maximum acceleration Z" -msgstr "Accélération maximale Z" +msgstr "Accélérations maximum Z" msgid "Maximum acceleration E" -msgstr "Accélération maximale E" +msgstr "Accélérations maximum E" msgid "Maximum acceleration of the X axis" -msgstr "Accélération maximale de l'axe X" +msgstr "Accélération maximum de l'axe X" msgid "Maximum acceleration of the Y axis" -msgstr "Accélération maximale de l'axe Y" +msgstr "Accélération maximum de l'axe Y" msgid "Maximum acceleration of the Z axis" -msgstr "Accélération maximale de l'axe Z" +msgstr "Accélération maximum de l'axe Z" msgid "Maximum acceleration of the E axis" -msgstr "Accélération maximale de l'axe E" +msgstr "Accélération maximum de l'axe E" msgid "Maximum jerk X" -msgstr "À-coup maximal X" +msgstr "Mouvement brusque maximum X" msgid "Maximum jerk Y" -msgstr "À-coup maximal Y" +msgstr "Mouvement brusque maximum Y" msgid "Maximum jerk Z" -msgstr "À-coup maximal Z" +msgstr "Mouvement brusque maximum Z" msgid "Maximum jerk E" -msgstr "À-coup maximal E" +msgstr "Mouvement brusque maximum E" msgid "Maximum jerk of the X axis" -msgstr "Jerk maximum de l'axe X" +msgstr "Mouvement brusque maximum de l'axe X" msgid "Maximum jerk of the Y axis" -msgstr "Jerk maximum de l'axe Y" +msgstr "Mouvement brusque maximum de l'axe Y" msgid "Maximum jerk of the Z axis" -msgstr "Jerk maximum de l'axe Z" +msgstr "Mouvement brusque maximum de l'axe Z" msgid "Maximum jerk of the E axis" -msgstr "Jerk maximum de l'axe E" +msgstr "Mouvement brusque maximum de l'axe E" msgid "Minimum speed for extruding" msgstr "Vitesse minimale d'extrusion" @@ -7760,20 +7864,20 @@ msgstr "" "refroidissement" msgid "Nozzle diameter" -msgstr "Diamètre de buse" +msgstr "Diamètre de la buse" msgid "Diameter of nozzle" msgstr "Diamètre de buse" msgid "Host Type" -msgstr "Host Type" +msgstr "Type d'hôte" msgid "" "Slic3r can upload G-code files to a printer host. This field must contain " "the kind of the host." msgstr "" -"Slic3r can upload G-code files to a printer host. This field must contain " -"the kind of the host." +"Slic3r peut téléverser des fichiers G-code sur une imprimante hôte. Ce champ " +"doit contenir le type d'hôte." msgid "Nozzle volume" msgstr "Volume de la buse" @@ -7783,11 +7887,12 @@ msgstr "" "Volume de la buse entre le coupeur de filament et l'extrémité de la buse" msgid "Start end points" -msgstr "Start end points" +msgstr "Points de départ et d'arrivée" msgid "The start and end points which is from cutter area to garbage can." msgstr "" -"The start and end points which are from the cutter area to the excess chute." +"Les points de départ et d'arrivée qui se situent entre la zone de coupe et " +"la goulotte d'évacuation." msgid "Reduce infill retraction" msgstr "Réduire la rétraction du remplissage" @@ -7797,9 +7902,10 @@ msgid "" "oozing can't been seen. This can reduce times of retraction for complex " "model and save printing time, but make slicing and G-code generating slower" msgstr "" -"Don't retract when the travel is entirely in an infill area. That means the " -"oozing can't been seen. This can reduce times of retraction for complex " -"model and save printing time, but make slicing and G-code generation slower." +"Ne pas effectuer de rétractation lors de déplacement en zone de remplissage " +"car même si l’extrudeur suinte, les coulures ne seraient pas visibles. Cela " +"peut réduire les rétractations pour les modèles complexes et économiser du " +"temps d’impression, mais ralentit le tranchage et la génération du G-code." msgid "Enable" msgstr "Activer" @@ -7844,13 +7950,13 @@ msgid "" msgstr "" msgid "Raft contact Z distance" -msgstr "Distance Z de contact du radeau" +msgstr "Distance Z de contact du raft" msgid "Z gap between object and raft. Ignored for soluble interface" msgstr "Écart en Z entre l'objet et le radeau. Ignoré pour l'interface soluble" msgid "Raft expansion" -msgstr "Extension du radeau" +msgstr "Agrandissement du raft" msgid "Expand all raft layers in XY plane" msgstr "Développer toutes les couches de radeau dans le plan XY" @@ -7870,7 +7976,7 @@ msgstr "" "de la plaque d'assise" msgid "Raft layers" -msgstr "Couches de radeau" +msgstr "Couches du radeau" msgid "" "Object will be raised by this number of support layers. Use this function to " @@ -7900,7 +8006,7 @@ msgstr "" "à ce seuil" msgid "Retract amount before wipe" -msgstr "Rétracter le montant avant l'effacement" +msgstr "Quantité de rétractation avant essuyage" msgid "" "The length of fast retraction before wipe, relative to retraction length" @@ -7918,7 +8024,7 @@ msgid "Length" msgstr "Longueur" msgid "Retraction Length" -msgstr "Longueur de rétraction" +msgstr "Longueur de Rétractation" msgid "" "Some amount of material in extruder is pulled back to avoid ooze during long " @@ -7942,22 +8048,22 @@ msgstr "" "spirale pour soulever z peut empêcher l'enfilage" msgid "Z Hop Type" -msgstr "Z Hop Type" +msgstr "Type de Z Hop" msgid "Slope" -msgstr "Slope" +msgstr "Pente" msgid "Spiral" -msgstr "Spiral" +msgstr "Spirale" msgid "Retraction Speed" -msgstr "Vitesse de rétraction" +msgstr "Vitesse de Rétractation" msgid "Speed of retractions" msgstr "Vitesse de rétractation" msgid "Deretraction Speed" -msgstr "Vitesse de dérétraction" +msgstr "Vitesse de réinsertion" msgid "" "Speed for reloading filament into extruder. Zero means same speed with " @@ -7982,7 +8088,7 @@ msgid "Back" msgstr "Retour" msgid "Random" -msgstr "Random" +msgstr "Aléatoire" msgid "Skirt distance" msgstr "Distance jupe" @@ -8032,7 +8138,7 @@ msgstr "" "inférieure" msgid "Spiral vase" -msgstr "Spiral vase" +msgstr "Vase spirale" msgid "" "Spiralize smooths out the z moves of the outer contour. And turns a solid " @@ -8041,7 +8147,7 @@ msgid "" msgstr "" "Spiralize lisse les mouvements z du contour extérieur. Et transforme un " "modèle solide en une impression à paroi unique avec des couches inférieures " -"solides. Le modèle généré final n'a pas de couture" +"solides. Le modèle généré final n'a pas de couture." msgid "" "If smooth or traditional mode is selected, a timelapse video will be " @@ -8053,23 +8159,23 @@ msgid "" "process of taking a snapshot, prime tower is required for smooth mode to " "wipe nozzle." msgstr "" -"If smooth or traditional mode is selected, a timelapse video will be " -"generated for each print. After each layer is printed, a snapshot is taken " -"with the chamber camera. All of these snapshots are composed into a " -"timelapse video when printing completes. If smooth mode is selected, the " -"toolhead will move to the excess chute after each layer is printed and then " -"take a snapshot. Since the melt filament may leak from the nozzle during the " -"process of taking a snapshot, a prime tower is required for smooth mode to " -"wipe the nozzle." +"Si le mode fluide ou traditionnel est sélectionné, une vidéo en timelapse " +"sera générée pour chaque impression. À chaque couche imprimée, un instantané " +"est pris avec la caméra intégrée. Tous ces instantanés seront assemblés dans " +"une vidéo timelapse une fois l'impression terminée. Si le mode lisse est " +"sélectionné, l'extrudeur se déplace vers la goulotte d'évacuation à chaque " +"couche imprimée, puis prend un cliché. Étant donné que le filament fondu " +"peut s'échapper de la buse pendant la prise de vue, une tour de nettoyage " +"est requise en mode lisse pour essuyer la buse." msgid "Traditional" -msgstr "Traditional" +msgstr "Traditionnel" msgid "Temperature variation" msgstr "Variation de température" msgid "Start G-code" -msgstr "Démarrer le code G" +msgstr "G-code de début" msgid "Start G-code when start the whole printing" msgstr "Démarrer le code G lors du démarrage de l'ensemble de l'impression" @@ -8078,35 +8184,36 @@ msgid "Start G-code when start the printing of this filament" msgstr "Démarrer le code G au démarrage de l'impression de ce filament" msgid "Slice gap closing radius" -msgstr "Slice gap closing radius" +msgstr "Rayon de fermeture du trou" msgid "" "Cracks smaller than 2x gap closing radius are being filled during the " "triangle mesh slicing. The gap closing operation may reduce the final print " "resolution, therefore it is advisable to keep the value reasonably low." msgstr "" -"Cracks smaller than 2x gap closing radius are being filled during the " -"triangle mesh slicing. The gap closing operation may reduce the final print " -"resolution, therefore it is advisable to keep the value reasonably low." +"Les fissures inférieures à 2 fois le rayon de fermeture de trou sont " +"comblées lors du découpage à mailles triangulaires. L'opération de fermeture " +"des espaces peut réduire la résolution finale d'impression. Il est donc " +"conseillé de maintenir la valeur à un niveau raisonnablement bas." msgid "Slicing Mode" -msgstr "Slicing Mode" +msgstr "Mode de tranchage" msgid "" "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to " "close all holes in the model." msgstr "" -"Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to " -"close all holes in the model." +"Utilisez « Pair-impair » pour les modèles d'avion 3DLabPrint. Utilisez " +"« Fermer les trous » pour fermer tous les trous du modèle." msgid "Regular" -msgstr "Regular" +msgstr "Standard" msgid "Even-odd" -msgstr "Even-odd" +msgstr "Pair-impair" msgid "Close holes" -msgstr "Close holes" +msgstr "Fermez les trous" msgid "Enable support" msgstr "Activer l'assistance" @@ -8119,30 +8226,30 @@ msgid "" "normal(manual) or tree(manual) is selected, only support enforcers are " "generated" msgstr "" -"normal(auto) and tree(auto) are used to generate support automatically. If " -"normal(manual) or tree(manual) is selected, only support enforcers are " -"generated" +"Normal (auto) et Arborescent (auto) sont utilisés pour générer " +"automatiquement un support. Si vous sélectionnez Normal (manuel) ou " +"Arborescent (manuel), seuls les générateurs de support manuels sont générés" msgid "normal(auto)" msgstr "normale (auto)" msgid "tree(auto)" -msgstr "arbre (auto)" +msgstr "arborescent (auto)" msgid "normal(manual)" -msgstr "normal(manual)" +msgstr "normal (manuel)" msgid "tree(manual)" -msgstr "tree(manual)" +msgstr "arborescent (manuel)" msgid "Support/object xy distance" msgstr "Distance support/objet xy" msgid "XY separation between an object and its support" -msgstr "Séparation XY entre un objet et son support" +msgstr "Séparation XY entre un objet et ses supports" msgid "Pattern angle" -msgstr "Angle de motif" +msgstr "Angle du motif" msgid "Use this setting to rotate the support pattern on the horizontal plane." msgstr "" @@ -8158,14 +8265,14 @@ msgstr "" "de construction" msgid "Support critical regions only" -msgstr "Support critical regions only" +msgstr "Ne supporter que les régions critiques" msgid "" "Only create support for critical regions including sharp tail, cantilever, " "etc." msgstr "" -"Only create support for critical regions including sharp tail, cantilever, " -"etc." +"Créez uniquement des support pour les régions critiques, y compris les " +"parties pointues, le porte-à-faux, etc." msgid "Top Z distance" msgstr "Distance Z supérieure" @@ -8174,10 +8281,10 @@ msgid "The z gap between the top support interface and object" msgstr "L'écart z entre l'interface de support supérieure et l'objet" msgid "Bottom Z distance" -msgstr "Bottom Z distance" +msgstr "Distance Z inférieure" msgid "The z gap between the bottom support interface and object" -msgstr "The z gap between the bottom support interface and object" +msgstr "L'écart Z entre l'interface du support inférieur et l'objet" msgid "Support/raft base" msgstr "" @@ -8186,8 +8293,9 @@ msgid "" "Filament to print support base and raft. \"Default\" means no specific " "filament for support and current filament is used" msgstr "" -"Filament to print support bases and rafts. \"Default\" means no specific " -"filament for support, and current filament is used" +"Filament pour imprimer les supports et radeaux. « Par défaut » signifie " +"qu'aucun filament spécifique n'est utilisé comme support et que le filament " +"actuel est utilisé" msgid "Line width of support" msgstr "Largeur de ligne du support" @@ -8198,7 +8306,7 @@ msgstr "Modèle de boucle d'utilisation d'interface" msgid "" "Cover the top contact layer of the supports with loops. Disabled by default." msgstr "" -"Couvrir la couche de contact supérieure des supports avec des boucles. " +"Recouvrir la couche de contact supérieure des supports avec des boucles. " "Désactivé par défaut." msgid "Support/raft interface" @@ -8208,8 +8316,9 @@ msgid "" "Filament to print support interface. \"Default\" means no specific filament " "for support interface and current filament is used" msgstr "" -"Filament to print support interfaces. \"Default\" means no specific filament " -"for support interface, and current filament is used" +"Filament pour l'impression des interfaces de support. \"Défaut\" signifie " +"qu'il n'y a pas de filament spécifique pour l'interface de support et que le " +"filament actuel est utilisé." msgid "Top interface layers" msgstr "Couches d'interface supérieures" @@ -8247,10 +8356,10 @@ msgid "Rectilinear grid" msgstr "Grille rectiligne" msgid "Hollow" -msgstr "Hollow" +msgstr "Creux" msgid "Interface pattern" -msgstr "Modèle d'interface" +msgstr "Motif d'interface" msgid "" "Line pattern of support interface. Default pattern for non-soluble support " @@ -8271,10 +8380,10 @@ msgid "Spacing between support lines" msgstr "Espacement entre les lignes de support" msgid "Normal Support expansion" -msgstr "Normal support expansion" +msgstr "Expansion normale du support" msgid "Expand (+) or shrink (-) the horizontal span of normal support" -msgstr "Expand (+) or shrink (-) the horizontal span of normal support" +msgstr "Augmenter (+) ou réduire (-) la portée horizontale du support normal." msgid "Speed of support" msgstr "Vitesse pour les supports" @@ -8287,24 +8396,26 @@ msgid "" "a lot of material (default), while hybrid style will create similar " "structure to normal support under large flat overhangs." msgstr "" -"Style and shape of the support. For normal support, projecting the supports " -"into a regular grid will create more stable supports (default), while snug " -"support towers will save material and reduce object scarring.\n" -"For tree support, slim style will merge branches more aggressively and save " -"a lot of material (default), while hybrid style will create similar " -"structure to normal support under large flat overhangs." +"Style et forme du support. Pour un support normal, la projection des " +"supports sur une grille régulière créera des supports plus stables (par " +"défaut), tandis que des tours de support bien ajustées permettront " +"d'économiser du matériau et de réduire les cicatrices sur les objets.\n" +"Pour les supports Arborescent, le style mince fusionnera les branches de " +"manière plus agressive et économisera beaucoup de matière (par défaut), " +"tandis que le style hybride créera une structure similaire à celle d'un " +"support normal placé sous de grands surplombs plats." msgid "Snug" -msgstr "Confortable" +msgstr "Ajusté" msgid "Tree Slim" -msgstr "Tree Slim" +msgstr "Arborescent Fin" msgid "Tree Strong" -msgstr "Tree Strong" +msgstr "Arborescent Fort" msgid "Tree Hybrid" -msgstr "Tree Hybrid" +msgstr "Arborescent Hybride" msgid "Independent support layer height" msgstr "Hauteur de la couche de support indépendante" @@ -8326,7 +8437,7 @@ msgstr "" "inférieur au seuil." msgid "Tree support branch angle" -msgstr "Angle de branche de support d'arbre" +msgstr "Angle de branche support arborescent" msgid "" "This setting determines the maximum overhang angle that t he branches of " @@ -8334,30 +8445,30 @@ msgid "" "printed more horizontally, allowing them to reach farther." msgstr "" "Ce paramètre détermine l'angle de porte-à-faux maximum que les branches du " -"support d'arbre peuvent faire. Si l'angle est augmenté, les branches peuvent " -"être imprimées plus horizontalement, ce qui leur permet d'atteindre plus " +"support arborescent peuvent faire. Si l'angle est augmenté, les branches " +"peuvent être imprimées plus horizontalement, ce qui leur permet d'aller plus " "loin." msgid "Tree support branch distance" -msgstr "Distance des branches de support d'arbre" +msgstr "Distance de branche de support arborescent" msgid "" "This setting determines the distance between neighboring tree support nodes." msgstr "" -"Ce paramètre détermine la distance entre les nœuds de support d'arbre " +"Ce paramètre détermine la distance entre les nœuds de support arborescents " "voisins." msgid "Tree support branch diameter" -msgstr "Diamètre de la branche de support d'arbre" +msgstr "Diamètre de branche de support arborescent" msgid "This setting determines the initial diameter of support nodes." msgstr "Ce paramètre détermine le diamètre initial des nœuds de support." msgid "Tree support wall loops" -msgstr "Boucles de mur de support d'arbre" +msgstr "Boucles murales support arborescent" msgid "This setting specify the count of walls around tree support" -msgstr "Ce paramètre spécifie le nombre de murs autour du support d'arbre" +msgstr "Ce paramètre spécifie le nombre de murs autour du support arborescent" msgid "Nozzle temperature for layers after the initial one" msgstr "Température de la buse pour les couches après la première" @@ -8370,9 +8481,10 @@ msgid "" "layer for more than this threshold. Too low bed temperature of other layer " "may cause the model broken free from build plate" msgstr "" -"It is not recommend for bed temperature of other layers to be lower than the " -"first layer by more than this threshold. Too low bed temperature of other " -"layer may cause the model to break free from the build plate." +"Il n'est pas recommandé que la différence de température du plateau entre sa " +"première couche et les suivantes soit plus importante que ce différentiel. " +"Une température de base trop basse de l'autre couche peut provoquer le " +"détachement du modèle de la plaque de construction." msgid "Detect thin wall" msgstr "Détecter les parois minces" @@ -8412,7 +8524,7 @@ msgstr "" "coque supérieure seront augmentées" msgid "Top solid layers" -msgstr "Couches solides supérieures" +msgstr "Couches supérieures solides" msgid "Top shell thickness" msgstr "Épaisseur de la coque supérieure" @@ -8435,7 +8547,7 @@ msgid "Speed of travel which is faster and without extrusion" msgstr "Vitesse de déplacement plus rapide et sans extrusion" msgid "Wipe while retracting" -msgstr "Essuyer en se rétractant" +msgstr "Nettoyer lors des rétractions" msgid "" "Move nozzle along the last extrusion path when retracting to clean leaked " @@ -8470,8 +8582,8 @@ msgid "" "The actual flushing volumes is equal to the flush multiplier multiplied by " "the flushing volumes in the table." msgstr "" -"The actual flushing volumes is equal to the flush multiplier value " -"multiplied by the flushing volumes in the table." +"Les volumes de rinçage actuels sont égaux à la valeur du multiplicateur de " +"rinçage multiplié par les volumes de rinçage dans le tableau." msgid "Prime volume" msgstr "Premier volume" @@ -8483,7 +8595,7 @@ msgid "Width" msgstr "Largeur" msgid "Width of prime tower" -msgstr "Largeur de la tour principale" +msgstr "Largeur de la tour de nettoyage." msgid "" "Purging after filament change will be done inside objects' infills. This may " @@ -8491,28 +8603,30 @@ msgid "" "printed with transparent filament, the mixed color infill will be seen " "outside. It will not take effect, unless the prime tower is enabled." msgstr "" -"Purging after filament change will be done inside objects' infills. This may " -"lower the amount of waste and decrease the print time. If the walls are " -"printed with transparent filament, the mixed color infill will be visible. " -"It will not take effect unless the prime tower is enabled." +"La purge après le changement de filament sera effectuée à l'intérieur des " +"matériaux de remplissage des objets. Cela peut réduire la quantité de " +"déchets et le temps d'impression. Si les murs sont imprimés avec un filament " +"transparent, le remplissage de couleurs mélangées sera visible. Cela ne " +"prendra effet que si la tour de nettoyage est activée." msgid "" "Purging after filament change will be done inside objects' support. This may " "lower the amount of waste and decrease the print time. It will not take " "effect, unless the prime tower is enabled." msgstr "" -"Purging after filament change will be done inside objects' support. This may " -"lower the amount of waste and decrease the print time. It will not take " -"effect unless a prime tower is enabled." +"La purge après le changement de filament se fera à l'intérieur du support " +"des objets. Cela peut réduire la quantité de déchets et le temps " +"d'impression. Cela ne prendra effet que si une tour de nettoyage est activée." msgid "" "This object will be used to purge the nozzle after a filament change to save " "filament and decrease the print time. Colours of the objects will be mixed " "as a result. It will not take effect, unless the prime tower is enabled." msgstr "" -"This object will be used to purge the nozzle after a filament change to save " -"filament and decrease the print time. Colors of the objects will be mixed as " -"a result. It will not take effect unless the prime tower is enabled." +"Cet objet sera utilisé pour purger la buse après un changement de filament " +"afin d'économiser du filament et de réduire le temps d'impression. Les " +"couleurs des objets seront mélangées en conséquence. Cela ne prendra effet " +"que si la tour de nettoyage est activée." msgid "X-Y hole compensation" msgstr "Compensation de trou X-Y" @@ -8546,30 +8660,31 @@ msgid "" "very thin areas is used gap-fill. Arachne engine produces walls with " "variable extrusion width" msgstr "" -"The classic wall generator produces walls with constant extrusion width and " -"for very thin areas, gap-fill is used. The Arachne engine produces walls " -"with variable extrusion width." +"Le générateur de murs classique produit des murs avec une largeur " +"d'extrusion constante, les zones très fines seront remplies. Le générateur " +"Arachne produit des murs avec une largeur d'extrusion variable." msgid "Classic" -msgstr "Classic" +msgstr "Classique" msgid "Arachne" -msgstr "Arachne" +msgstr "Arachné" msgid "Wall transition length" -msgstr "Wall transition length" +msgstr "Longueur de la transition murale" msgid "" "When transitioning between different numbers of walls as the part becomes " "thinner, a certain amount of space is allotted to split or join the wall " "segments. It's expressed as a percentage over nozzle diameter" msgstr "" -"When transitioning between different numbers of walls as the part becomes " -"thinner, a certain amount of space is allotted to split or join the wall " -"segments. It's expressed as a percentage over nozzle diameter." +"Lorsque vous passez d'un nombre différent de murs à un autre lorsque la " +"pièce s'amincit, un certain espace est alloué pour séparer ou joindre les " +"segments du mur. Il est exprimé en pourcentage par rapport au diamètre de la " +"buse." msgid "Wall transitioning filter margin" -msgstr "Wall transitioning filter margin" +msgstr "Marge du filtre de transition de mur" msgid "" "Prevent transitioning back and forth between one extra wall and one less. " @@ -8580,16 +8695,17 @@ msgid "" "variation can lead to under- or overextrusion problems. It's expressed as a " "percentage over nozzle diameter" msgstr "" -"Prevent transitioning back and forth between one extra wall and one less. " -"This margin extends the range of extrusion widths which follow to [Minimum " -"wall width - margin, 2 * Minimum wall width + margin]. Increasing this " -"margin reduces the number of transitions, which reduces the number of " -"extrusion starts/stops and travel time. However, large extrusion width " -"variation can lead to under- or overextrusion problems. It's expressed as a " -"percentage over nozzle diameter" +"Empêchez les allers-retours entre un mur supplémentaire et un mur de moins. " +"Cette marge étend la plage de largeurs d'extrusion qui suit jusqu'à [Largeur " +"de paroi minimale - marge, 2* Largeur de paroi minimale + marge]. " +"L'augmentation de cette marge réduit le nombre de transitions, ce qui réduit " +"le nombre de démarrages/arrêts d'extrusion et le temps de trajet. Cependant, " +"une variation importante de la largeur d'extrusion peut entraîner des " +"problèmes de sous-extrusion ou de surextrusion. Il est exprimé en " +"pourcentage par rapport au diamètre de la buse" msgid "Wall transitioning threshold angle" -msgstr "Wall transitioning threshold angle" +msgstr "Angle du seuil de transition du mur" msgid "" "When to create transitions between even and odd numbers of walls. A wedge " @@ -8598,24 +8714,26 @@ msgid "" "this setting reduces the number and length of these center walls, but may " "leave gaps or overextrude" msgstr "" -"When to create transitions between even and odd numbers of walls. A wedge " -"shape with an angle greater than this setting will not have transitions and " -"no walls will be printed in the center to fill the remaining space. Reducing " -"this setting reduces the number and length of these center walls, but may " -"leave gaps or overextrude" +"Quand créer des transitions entre les nombres pairs et impairs de murs. Une " +"forme cunéiforme dont l'angle est supérieur à ce paramètre n'aura pas de " +"transitions et aucun mur ne sera imprimé au centre pour remplir l'espace " +"restant. En réduisant ce paramètre, vous réduisez le nombre et la longueur " +"de ces murs centraux, mais vous risquez de laisser des vides ou de " +"surextruder les murs." msgid "Wall distribution count" -msgstr "Wall distribution count" +msgstr "Nombre de distributions murales" msgid "" "The number of walls, counted from the center, over which the variation needs " "to be spread. Lower values mean that the outer walls don't change in width" msgstr "" -"The number of walls, counted from the center, over which the variation needs " -"to be spread. Lower values mean that the outer walls don't change in width" +"Nombre de murs, comptés à partir du centre, sur lesquels la variation doit " +"être répartie. Des valeurs plus faibles signifient que la largeur des parois " +"extérieures ne change pas" msgid "Minimum feature size" -msgstr "Minimum feature size" +msgstr "Taille minimale de l'élément" msgid "" "Minimum thickness of thin features. Model features that are thinner than " @@ -8623,13 +8741,14 @@ msgid "" "feature size will be widened to the Minimum wall width. It's expressed as a " "percentage over nozzle diameter" msgstr "" -"Minimum thickness of thin features. Model features that are thinner than " -"this value will not be printed, while features thicker than the minimum " -"feature size will be widened to the minimum wall width. It's expressed as a " -"percentage over nozzle diameter" +"Épaisseur minimale des éléments fins. Les caractéristiques du modèle qui " +"sont plus fines que cette valeur ne seront pas imprimées, tandis que les " +"entités plus épaisses que la taille minimale seront élargies jusqu'à la " +"largeur de paroi minimale. Il est exprimé en pourcentage par rapport au " +"diamètre de la buse" msgid "Minimum wall width" -msgstr "Minimum wall width" +msgstr "Largeur minimale du mur" msgid "" "Width of the wall that will replace thin features (according to the Minimum " @@ -8637,10 +8756,10 @@ msgid "" "thickness of the feature, the wall will become as thick as the feature " "itself. It's expressed as a percentage over nozzle diameter" msgstr "" -"Width of the wall that will replace thin features (according to the Minimum " -"feature size) of the model. If the Minimum wall width is thinner than the " -"thickness of the feature, the wall will become as thick as the feature " -"itself. It's expressed as a percentage over nozzle diameter" +"Largeur du mur qui remplacera les éléments fins (selon la taille minimale " +"des éléments) du modèle. Si la largeur minimale du mur est inférieure à " +"l'épaisseur de l'élément, le mur deviendra aussi épais que l'élément lui-" +"même. Il est exprimé en pourcentage par rapport au diamètre de la buse" msgid "Detect narrow internal solid infill" msgstr "Détecter un remplissage solide interne étroit" @@ -8678,19 +8797,19 @@ msgid "Export project as 3MF." msgstr "Exporter le projet au format 3MF." msgid "Export slicing data" -msgstr "Export slicing data" +msgstr "Exporter les données de tranchage" msgid "Export slicing data to a folder." -msgstr "Export slicing data to a folder" +msgstr "Exporter les données de tranchage vers un dossier" msgid "Load slicing data" -msgstr "Load slicing data" +msgstr "Charger les données de tranchage" msgid "Load cached slicing data from directory" -msgstr "Load cached slicing data from directory" +msgstr "Charger les données de tranchage mises en cache à partir du répertoire" msgid "Slice" -msgstr "Tranche" +msgstr "Découper" msgid "Slice the plates: 0-all plates, i-plate i, others-invalid" msgstr "" @@ -8701,10 +8820,11 @@ msgid "Show command help." msgstr "Afficher l'aide de la commande." msgid "UpToDate" -msgstr "UpToDate" +msgstr "À jour" msgid "Update the configs values of 3mf to latest." -msgstr "Update the configs values of 3mf to latest." +msgstr "" +"Mettez à jour les valeurs de configuration 3mf à la version la plus récente." msgid "mtcpp" msgstr "" @@ -8731,7 +8851,7 @@ msgid "Check the normative items." msgstr "" msgid "Output Model Info" -msgstr "Informations sur le modèle de sortie" +msgstr "Information du Modèle de Sortie" msgid "Output the model's information." msgstr "Sortie des informations du modèle." @@ -8743,10 +8863,10 @@ msgid "Export settings to a file." msgstr "Exporter les paramètres vers un fichier." msgid "Send progress to pipe" -msgstr "Send progress to pipe" +msgstr "Envoyer la progression à la queue" msgid "Send progress to pipe." -msgstr "Send progress to pipe." +msgstr "Envoyer la progression à la queue." msgid "Arrange Options" msgstr "Options d'organisation" @@ -8815,7 +8935,7 @@ msgid "Generating infill toolpath" msgstr "Génération d'un parcours d'outil de remplissage" msgid "Detect overhangs for auto-lift" -msgstr "Detect overhangs for auto-lift" +msgstr "Détectez les surplombs pour un levage automatique" msgid "Generating support" msgstr "Génération des supports" @@ -8847,7 +8967,7 @@ msgstr "" "plus proches." msgid "The model has too many empty layers." -msgstr "The model has too many empty layers." +msgstr "Le modèle a trop de couches vides." msgid "Slicing mesh" msgstr "Maillage de tranchage" @@ -8900,9 +9020,9 @@ msgid "" "Did you know how to control view and object/part selection with mouse and " "touchpanel in the 3D scene?" msgstr "" -"3D Scene Operations\n" -"Do you know how to control view and object/part selection with mouse and " -"touch panel in the 3D scene?" +"Opérations dans une scène 3D\n" +"Savez-vous comment contrôler la vue et la sélection des objets/pièces avec " +"la souris et l'écran tactile dans la scène 3D ?" #: resources/data/hints.ini: [hint:Cut Tool] msgid "" @@ -8910,9 +9030,9 @@ msgid "" "Did you know that you can cut a model at any angle and position with the " "cutting tool?" msgstr "" -"Cut Tool\n" -"Did you know that you can cut a model at any angle and position with the " -"cutting tool?" +"Outil de découpe\n" +"Saviez-vous que vous pouvez découper un modèle à n'importe quel angle et " +"dans n'importe quelle position avec l'outil de découpe ?" #: resources/data/hints.ini: [hint:Fix Model] msgid "" @@ -8920,9 +9040,9 @@ msgid "" "Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " "problems?" msgstr "" -"Fix Model\n" -"Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " -"problems?" +"Réparer le Modèle\n" +"Saviez-vous que vous pouvez réparer un modèle 3D corrompu pour éviter de " +"nombreux problèmes de découpage ?" #: resources/data/hints.ini: [hint:Timelapse] msgid "" @@ -8930,15 +9050,17 @@ msgid "" "Did you know that you can generate a timelapse video during each print?" msgstr "" "Timelapse\n" -"Did you know that you can generate a timelapse video during each print?" +"Saviez-vous que vous pouvez générer une vidéo en timelapse à chaque " +"impression ?" #: resources/data/hints.ini: [hint:Auto-Arrange] msgid "" "Auto-Arrange\n" "Did you know that you can auto-arrange all objects in your project?" msgstr "" -"Auto-Arrange\n" -"Did you know that you can auto-arrange all the objects in your project?" +"Agencement Automatique\n" +"Saviez-vous que vous pouvez agencement automatiquement tous les objets de " +"votre projet ?" #: resources/data/hints.ini: [hint:Auto-Orient] msgid "" @@ -8946,9 +9068,9 @@ msgid "" "Did you know that you can rotate objects to an optimal orientation for " "printing by a simple click?" msgstr "" -"Auto-Orient\n" -"Did you know that you can rotate objects to an optimal orientation for " -"printing with a simple click?" +"Orientation Automatique\n" +"Saviez-vous que vous pouvez faire pivoter des objets dans une orientation " +"optimale pour l'impression d'un simple clic ?" #: resources/data/hints.ini: [hint:Lay on Face] msgid "" @@ -8957,10 +9079,10 @@ msgid "" "sits on the print bed? Select the \"Place on face\" function or press the " "F key." msgstr "" -"Lay on Face\n" -"Did you know that you can quickly orient a model so that one of its faces " -"sits on the print bed? Select the \"Place on face\" function or press the " -"F key." +"Positionner sur une face\n" +"Saviez-vous qu'il est possible d'orienter rapidement un modèle de manière à " +"ce que l'une de ses faces repose sur le plateau d'impression ? Sélectionnez " +"la fonction « Positionner sur une face » ou appuyez sur la touche F." #: resources/data/hints.ini: [hint:Object List] msgid "" @@ -8968,9 +9090,9 @@ msgid "" "Did you know that you can view all objects/parts in a list and change " "settings for each object/part?" msgstr "" -"Object List\n" -"Did you know that you can view all objects/parts in a list and change " -"settings for each object/part?" +"Liste d'objets\n" +"Saviez-vous que vous pouvez afficher tous les objets/pièces dans une liste " +"et modifier les paramètres de chaque objet/pièce ?" #: resources/data/hints.ini: [hint:Simplify Model] msgid "" @@ -8979,10 +9101,11 @@ msgid "" "Simplify mesh feature? Right-click the model and select Simplify model. Read " "more in the documentation." msgstr "" -"Simplify Model\n" -"Did you know that you can reduce the number of triangles in a mesh using the " -"Simplify mesh feature? Right-click the model and select Simplify model. Read " -"more in the documentation." +"Simplifier le modèle\n" +"Saviez-vous que vous pouvez réduire le nombre de triangles dans un maillage " +"à l'aide de la fonction Simplifier le maillage ? Cliquez avec le bouton " +"droit sur le modèle et sélectionnez Simplifier le modèle. Pour en savoir " +"plus, consultez la documentation." #: resources/data/hints.ini: [hint:Slicing Parameter Table] msgid "" @@ -8990,9 +9113,9 @@ msgid "" "Did you know that you can view all objects/parts on a table and change " "settings for each object/part?" msgstr "" -"Slicing Parameter Table\n" -"Did you know that you can view all objects/parts on a table and change " -"settings for each object/part?" +"Tableau des paramètres de tranchage\n" +"Saviez-vous que vous pouvez afficher tous les objets/pièces sur un tableau " +"et modifier les paramètres de chaque objet/pièce ?" #: resources/data/hints.ini: [hint:Split to Objects/Parts] msgid "" @@ -9000,9 +9123,9 @@ msgid "" "Did you know that you can split a big object into small ones for easy " "colorizing or printing?" msgstr "" -"Split to Objects/Parts\n" -"Did you know that you can split a big object into small ones for easy " -"colorizing or printing?" +"Séparer en objets/parties\n" +"Saviez-vous que vous pouvez séparer un gros objet en petits objets pour les " +"colorier ou les imprimer facilement ?" #: resources/data/hints.ini: [hint:Subtract a Part] msgid "" @@ -9011,10 +9134,11 @@ msgid "" "part modifier? That way you can, for example, create easily resizable holes " "directly in Bambu Studio. Read more in the documentation." msgstr "" -"Subtract a Part\n" -"Did you know that you can subtract one mesh from another using the Negative " -"part modifier? That way you can, for example, create easily resizable holes " -"directly in Bambu Studio. Read more in the documentation." +"Soustraire une pièce\n" +"Saviez-vous que vous pouvez soustraire un maillage d'un autre à l'aide du " +"modificateur de partie négative ? Ainsi, vous pouvez par exemple créer des " +"trous facilement redimensionnables directement dans Bambu Studio. Pour en " +"savoir plus, consultez la documentation." #: resources/data/hints.ini: [hint:STEP] msgid "" @@ -9024,11 +9148,12 @@ msgid "" "Bambu Studio supports slicing STEP files, providing smoother results than a " "lower resolution STL. Give it a try!" msgstr "" -"STEP\n" -"Did you know that you can improve your print quality by slicing a STEP file " -"instead of an STL?\n" -"Bambu Studio supports slicing STEP files, providing smoother results than a " -"lower resolution STL. Give it a try!" +"ÉTAPE\n" +"Saviez-vous que vous pouvez améliorer la qualité d'impression en tranchant " +"un fichier STEP au lieu d'un fichier STL ?\n" +"Bambu Studio prend en charge le tranchage des fichiers STEP, ce qui permet " +"d'obtenir des résultats plus fluides qu'un fichier STL à résolution " +"inférieure. Essayez-le !" #: resources/data/hints.ini: [hint:Z seam location] msgid "" @@ -9037,10 +9162,11 @@ msgid "" "paint it on your print, to have it in a less visible location? This improves " "the overall look of your model. Check it out!" msgstr "" -"Z seam location\n" -"Did you know that you can customize the location of the Z seam, and even " -"paint it on your print, to have it in a less visible location? This improves " -"the overall look of your model. Check it out!" +"Emplacement de la couture Z\n" +"Saviez-vous que vous pouvez personnaliser l'emplacement de la couture Z, et " +"même la peindre manuelle sur votre impression pour le placer dans un endroit " +"moins visible ? Cela améliore l'aspect général de votre modèle. Jetez-y un " +"coup d'œil !" #: resources/data/hints.ini: [hint:Fine-tuning for flow rate] msgid "" @@ -9049,10 +9175,11 @@ msgid "" "prints? Depending on the material, you can improve the overall finish of the " "printed model by doing some fine-tuning." msgstr "" -"Fine-tuning for flow rate\n" -"Did you know that flow rate can be fine-tuned for even better-looking " -"prints? Depending on the material, you can improve the overall finish of the " -"printed model by doing some fine-tuning." +"Réglage fin du débit\n" +"Saviez-vous que le débit peut être réglé avec précision pour obtenir des " +"impressions encore plus belles ? En fonction du matériau, vous pouvez " +"améliorer la finition générale du modèle imprimé en procédant à un réglage " +"fin." #: resources/data/hints.ini: [hint:Split your prints into plates] msgid "" @@ -9061,10 +9188,10 @@ msgid "" "individual plates ready to print? This will simplify the process of keeping " "track of all the parts." msgstr "" -"Split your prints into plates\n" -"Did you know that you can split a model that has a lot of parts into " -"individual plates ready to print? This will simplify the process of keeping " -"track of all the parts." +"Divisez vos impressions en plateaux\n" +"Saviez-vous que vous pouvez diviser un modèle comportant de nombreuses " +"pièces en plateaux individuels prêts à être imprimés ? Cela simplifie le " +"processus de suivi de toutes les pièces." #: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer #: Height] @@ -9073,9 +9200,9 @@ msgid "" "Did you know that you can print a model even faster, by using the Adaptive " "Layer Height option? Check it out!" msgstr "" -"Speed up your print with Adaptive Layer Height\n" -"Did you know that you can print a model even faster by using the Adaptive " -"Layer Height option? Check it out!" +"Accélérez votre impression grâce à la Hauteur de Couche Adaptative\n" +"Saviez-vous que vous pouvez imprimer un modèle encore plus rapidement en " +"utilisant l'option Adaptive Layer Height ? Jetez-y un coup d'œil !" #: resources/data/hints.ini: [hint:Support painting] msgid "" @@ -9084,10 +9211,10 @@ msgid "" "makes it easy to place the support material only on the sections of the " "model that actually need it." msgstr "" -"Support painting\n" -"Did you know that you can paint the location of your supports? This feature " -"makes it easy to place the support material only on the sections of the " -"model that actually need it." +"Peinture de support\n" +"Saviez-vous que vous pouvez peindre l'emplacement de vos supports ? Cette " +"caractéristique permet de placer facilement le matériau de support " +"uniquement sur les sections du modèle qui en ont réellement besoin." #: resources/data/hints.ini: [hint:Different types of supports] msgid "" @@ -9096,10 +9223,11 @@ msgid "" "supports work great for organic models, while saving filament and improving " "print speed. Check them out!" msgstr "" -"Different types of supports\n" -"Did you know that you can choose from multiple types of supports? Tree " -"supports work great for organic models while saving filament and improving " -"print speed. Check them out!" +"Différents types de supports\n" +"Saviez-vous que vous pouvez choisir parmi plusieurs types de supports ? Les " +"supports arborescents fonctionnent parfaitement pour les modèles organiques " +"tout en économisant du filament et en améliorant la vitesse d'impression. " +"Découvrez-les !" #: resources/data/hints.ini: [hint:Printing Silk Filament] msgid "" @@ -9108,10 +9236,10 @@ msgid "" "successfully? Higher temperature and lower speed are always recommended for " "the best results." msgstr "" -"Printing Silk Filament\n" -"Did you know that Silk filament needs special consideration to print " -"successfully? A higher temperature and lower speed are always recommended " -"for the best results." +"Impression de filament Soie\n" +"Saviez-vous que le filament soie nécessite une attention particulière pour " +"une impression réussie ? Une température plus élevée et une vitesse plus " +"faible sont toujours recommandées pour obtenir les meilleurs résultats." #: resources/data/hints.ini: [hint:Brim for better adhesion] msgid "" @@ -9119,9 +9247,10 @@ msgid "" "Did you know that when printing models have a small contact interface with " "the printing surface, it's recommended to use a brim?" msgstr "" -"Brim for better adhesion\n" -"Did you know that when printed models have a small contact interface with " -"the printing surface, it's recommended to use a brim?" +"Bordure pour une meilleure adhésion\n" +"Saviez-vous que lorsque les modèles imprimés ont une faible interface de " +"contact avec la surface d'impression, il est recommandé d'utiliser une " +"bordure ?" #: resources/data/hints.ini: [hint:Set parameters for multiple objects] msgid "" @@ -9129,17 +9258,17 @@ msgid "" "Did you know that you can set slicing parameters for all selected objects at " "one time?" msgstr "" -"Set parameters for multiple objects\n" -"Did you know that you can set slicing parameters for all selected objects at " -"once?" +"Définir les paramètres de plusieurs objets\n" +"Saviez-vous que vous pouvez définir des paramètres de tranchage pour tous " +"les objets sélectionnés en une seule fois ?" #: resources/data/hints.ini: [hint:Stack objects] msgid "" "Stack objects\n" "Did you know that you can stack objects as a whole one?" msgstr "" -"Stack objects\n" -"Did you know that you can stack objects as a whole one?" +"Empilez des objets\n" +"Saviez-vous que vous pouvez empiler des objets pour n'en former qu'un?" #: resources/data/hints.ini: [hint:Flush into support/objects/infill] msgid "" @@ -9147,9 +9276,9 @@ msgid "" "Did you know that you can save the wasted filament by flushing them into " "support/objects/infill during filament change?" msgstr "" -"Flush into support/objects/infill\n" -"Did you know that you can reduce wasted filament by flushing it into support/" -"objects/infill during filament changes?" +"Rincer dans support/objets/remplissage\n" +"Saviez-vous que vous pouvez réduire le filament gaspillé en le rinçant dans " +"le support/les objets/le remplissage lors des changements de filament ?" #: resources/data/hints.ini: [hint:Improve strength] msgid "" @@ -9157,107 +9286,9 @@ msgid "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" msgstr "" -"Improve strength\n" -"Did you know that you can use more wall loops and higher sparse infill " -"density to improve the strength of the model?" - -#~ msgid "" -#~ "Arachne engine only works when overhang slowing down is disabled.\n" -#~ "This may cause decline in the quality of overhang surface when print " -#~ "fastly" -#~ msgstr "" -#~ "The Arachne engine only works when overhang slowdown is disabled.\n" -#~ "This may cause decline in the quality of overhang surface when printing " -#~ "quickly." - -#~ msgid "" -#~ "Disable overhang slowing down automatically? \n" -#~ "Yes - Enable arachne and disable overhang slowing down\n" -#~ "No - Give up using arachne this time" -#~ msgstr "" -#~ "Disable overhang slowdown automatically? \n" -#~ "Yes - Enable Arachne and disable overhang slowing down\n" -#~ "No - Don't use Arachne for this print" - -#~ msgid "Start" -#~ msgstr "Start" - -#~ msgid "G-code" -#~ msgstr "G-code" - -#~ msgid "Backup" -#~ msgstr "Sauvegarde" - -#~ msgid "Backup interval" -#~ msgstr "Intervalle de sauvegarde" - -#, c-format, boost-format -#~ msgid "The %s filament is too soft to be used with the AMS" -#~ msgstr "The %s filament is too soft to be used with the AMS" - -#, c-format, boost-format -#~ msgid "" -#~ "It seems object %s has completely floating regions. Please re-orient the " -#~ "object or enable support generation." -#~ msgstr "" -#~ "It seems object %s has completely floating regions. Please re-orient the " -#~ "object or enable support generation." - -#, c-format, boost-format -#~ msgid "" -#~ "It seems object %s has large overhangs. Please enable support generation." -#~ msgstr "" -#~ "It seems object %s has large overhangs. Please enable support generation." - -#~ msgid "\\u2103" -#~ msgstr "\\u2103" - -#~ msgid "mm\\u00B3" -#~ msgstr "mm\\u00B3" - -#~ msgid "" -#~ "Spiral mode only works when wall loops is 1, support is disabled, top " -#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " -#~ "traditional" -#~ msgstr "" -#~ "Spiral mode only works when wall loops is 1, support is disabled, top " -#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " -#~ "traditional" - -#~ msgid "Keep upper part" -#~ msgstr "Conserver la partie supérieure" - -#~ msgid "Keep lower part" -#~ msgstr "Garder la partie inférieure" - -#~ msgid "AMS auto switch filament" -#~ msgstr "AMS auto switch filament" - -#~ msgid "" -#~ "When using support material for the support interface, We recommend the " -#~ "following settings:\n" -#~ "0 top z distance, 0 interface spacing, concentric pattern." -#~ msgstr "" -#~ "When using support material for the support interface, We recommend the " -#~ "following settings:\n" -#~ "0 top z distance, 0 interface spacing, concentric pattern." - -#~ msgid "" -#~ "The P1P printer does not support smooth timelapse, use traditional " -#~ "timelapse instead." -#~ msgstr "" -#~ "The P1P printer does not support smooth timelapse, please use traditional " -#~ "timelapse instead." - -#~ msgid "Support base" -#~ msgstr "Support base" - -#~ msgid "" -#~ "Support layer uses layer height independent with object layer. This is to " -#~ "support customizing z-gap and save print time." -#~ msgstr "" -#~ "Support layer uses layer height independent with object layer. This is to " -#~ "support customizing z-gap and save print time." +"Améliorer la résistance\n" +"Saviez-vous que vous pouvez définir un plus grand nombre de mur et une " +"densité de remplissage plus élevée pour améliorer la résistance du modèle ?" #~ msgid "" #~ "\n" @@ -9276,28 +9307,31 @@ msgstr "" #~ "de l'impression." #~ msgid "&Edit" -#~ msgstr "&Edit" +#~ msgstr "&Modifier" #~ msgid "0%" #~ msgstr "0%" #~ msgid "AMSMaterialsSetting" -#~ msgstr "AMS Materials Setting" +#~ msgstr "Réglage des matériaux AMS" + +#~ msgid "AMS auto switch filament" +#~ msgstr "Changement de filament automatique dans l'AMS" #~ msgid "AWS PRE host" -#~ msgstr "AWS PRE host" +#~ msgstr "Hôte AWS PRE" #~ msgid "AWS host" -#~ msgstr "AWS host" +#~ msgstr "Hôte AWS" #~ msgid "Actual Volume = Flushing Volume * Multiplier" -#~ msgstr "Actual Volume = Flushing Volume * Multiplier" +#~ msgstr "Volume Réel = Volume de Rinçage * Multiplicateur" #~ msgid "Adaptive layer height" #~ msgstr "Hauteur de couche adaptative" #~ msgid "Add Custom Printer" -#~ msgstr "Add Custom Printer" +#~ msgstr "Ajouter une Imprimante Personnalisée" #~ msgid "" #~ "An object is layed over the boundary of plate.\n" @@ -9307,14 +9341,25 @@ msgstr "" #~ "problème en le déplaçant totalement à l'intérieur ou à l'extérieur de la " #~ "plaque." +#~ msgid "" +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly" +#~ msgstr "" +#~ "Le mode Arachne ne fonctionne que lorsque le ralentissement du surplomb " +#~ "est désactivé.\n" +#~ "Cela peut entraîner une baisse de la qualité de la surface du surplomb " +#~ "lorsque l’impression est rapide." + #~ msgid "" #~ "Arachne engine only works when overhang slowing down is disabled.\n" #~ "This may cause decline in the quality of overhang surface when print " #~ "fastly\n" #~ msgstr "" -#~ "The Arachne engine only works when overhang slowdown is disabled.\n" -#~ "This may cause decline in the quality of overhang surfaces when printing " -#~ "quickly.\n" +#~ "Le mode Arachne ne fonctionne que lorsque le ralentissement du surplomb " +#~ "est désactivé.\n" +#~ "Cela peut entraîner une baisse de la qualité de la surface du surplomb " +#~ "lorsque l’impression est rapide.\n" #~ msgid "Auto arrange" #~ msgstr "Organisation automatique" @@ -9334,16 +9379,23 @@ msgstr "" #~ msgid "Avoid crossing wall when travel" #~ msgstr "Évitez de traverser le mur lorsque vous voyagez" +#~ msgid "Backup" +#~ msgstr "Sauvegarde" + +#~ msgid "Backup interval" +#~ msgstr "Intervalle de sauvegarde" + #~ msgid "" #~ "Bed exclude area that can't used as printable area in X-Y plane. For " #~ "example, the bottom left area which is used to cut filament in X1 when " #~ "printing multi colors with AMS. The area is expressed as polygon by " #~ "points in following format: \"XxY, XxY, ...\"" #~ msgstr "" -#~ "Bed excludes area that can't used as printable area in the X-Y plane. For " -#~ "example, the bottom left area which is used to cut filament in X1 when " -#~ "printing multi-color with an AMS. The area is expressed as polygon by " -#~ "points in following format: \"XxY, XxY, ...\"" +#~ "Les zones d'exclusion du lit ne peut pas être utilisée dans le plan XY. " +#~ "Par exemple, les imprimantes de la série X1 utilisent le coin avant " +#~ "gauche pour couper le filament pendant le changement de filament. La zone " +#~ "est exprimée sous forme de polygone par des points au format suivant : " +#~ "\"XxY, XxY, …\"" #~ msgid "" #~ "Bed temperature is higher than vitrification temperature of this " @@ -9358,27 +9410,27 @@ msgstr "" #~ "Calibration completed. Please select the factors according to the left " #~ "figure and fill them in the input boxes." #~ msgstr "" -#~ "Calibration completed. Please select the factors according to the left " -#~ "figure and fill them in the input boxes." +#~ "Calibration terminé. Sélectionnez les facteurs en fonction de la figure " +#~ "de gauche et remplissez-les dans les zones de saisie." #~ msgid "Can't connect to the printer" -#~ msgstr "Can't connect to the printer" +#~ msgstr "Impossible de se connecter à l'imprimante" #~ msgid "" #~ "Cannot detect the LAN IP address of %s. Are %s and Bambu Studio in the " #~ "same LAN?" #~ msgstr "" -#~ "Cannot detect the LAN IP address of %s. Are %s and Bambu Studio in the " -#~ "same LAN?" +#~ "Impossible de détecter l'adresse IP du réseau local de %s. %s et Bambu " +#~ "Studio se trouvent-ils sur le même réseau local ?" #~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" #~ msgstr "Choisissez un ou plusieurs fichiers (3mf/step/stl/obj/amf) :" #~ msgid "Choose save directory" -#~ msgstr "Choose save directory" +#~ msgstr "Choisissez le répertoire de sauvegarde" #~ msgid "Clean" -#~ msgstr "Clear" +#~ msgstr "Nettoyer" #~ msgid "Clear all" #~ msgstr "Tout effacer" @@ -9395,10 +9447,10 @@ msgstr "" #~ msgstr "Cliquez sur l'icône du crayon pour modifier le filament." #~ msgid "Clipping of view" -#~ msgstr "Clipping of view" +#~ msgstr "Vue en coupe" #~ msgid "Color Print" -#~ msgstr "Impression couleur" +#~ msgstr "Couleur d'Impression" #~ msgid "Comsumption" #~ msgstr "Consommation" @@ -9419,14 +9471,24 @@ msgstr "" #~ "Desiccant status lower than two bars indicates that desiccant can be " #~ "inactive. Please change the desiccant.(Higher the better)" #~ msgstr "" -#~ "Desiccant status lower than two bars indicates that desiccant can be " -#~ "inactive. Please change the desiccant. (the higher, the better)" +#~ "L'état du déshydratant inférieur à deux barres indique que le " +#~ "déshydratant est peut-être inactif. Veuillez changer le déshydratant. " +#~ "(plus il est élevé, mieux c'est)" #~ msgid "Designer" #~ msgstr "Concepteur" #~ msgid "Device:" -#~ msgstr "Dispositif:" +#~ msgstr "Appareil:" + +#~ msgid "" +#~ "Disable overhang slowing down automatically? \n" +#~ "Yes - Enable arachne and disable overhang slowing down\n" +#~ "No - Give up using arachne this time" +#~ msgstr "" +#~ "Désactiver automatiquement le ralentissement du surplomb ? \n" +#~ "Oui - Active Arachne et désactive le ralentissement du surplomb\n" +#~ "Non - Ne pas utiliser Arachne pour cette impression" #~ msgid "Display printable box" #~ msgstr "Afficher la boîte imprimable" @@ -9468,11 +9530,12 @@ msgstr "" #~ "2. The Filament presets\n" #~ "3. The Printer presets\n" #~ msgstr "" -#~ "Do you want to synchronize your personal data from Bambu Cloud? \n" -#~ "It contains the following information:\n" -#~ "1. The Process presets\n" -#~ "2. The Filament presets\n" -#~ "3. The Printer presets\n" +#~ "Voulez-vous synchroniser vos données personnelles à partir de Bambu " +#~ "Cloud ?\n" +#~ "Il contient les informations suivantes :\n" +#~ "1. Les préréglages du Processus\n" +#~ "2. Les préréglages du Filament\n" +#~ "3. Les préréglages de l'Imprimante\n" #~ msgid "" #~ "Don't retract when the travel is in infill area absolutely. That means " @@ -9482,7 +9545,7 @@ msgstr "" #~ "de remplissage. Cela signifie que le suintement ne peut pas être vu" #~ msgid "Downloading Bambu Network plug-in" -#~ msgstr "Downloading Bambu Network plug-in" +#~ msgstr "Téléchargement du plug-in Bambu Network" #~ msgid "" #~ "Enabling this option means the height of every layer except the first " @@ -9491,17 +9554,17 @@ msgstr "" #~ "Note that this option only takes effect if no prime tower is generated in " #~ "current plate." #~ msgstr "" -#~ "En activant cette option, la hauteur de chaque couche, à l'exception de " -#~ "la première, sera automatiquement calculée en fonction de la pente de la " -#~ "surface du modèle.\n" -#~ "Veuillez noter que cette option ne prend effet que si aucune tour " -#~ "primaire n'est générée sur le plateau en cours d'utilisation." +#~ "L'activation de cette option signifie que la hauteur de chaque couche " +#~ "après la première sera automatiquement calculée en fonction de la pente " +#~ "de la surface du modèle.\n" +#~ "Veuillez noter que cette option ne prend effet que s'il n'y a pas de tour " +#~ "de nettoyage générée sur le plateau actuel." #~ msgid "Enter a search term" #~ msgstr "Entrer un terme de recherche" #~ msgid "Entering Seam painting" -#~ msgstr "Entering seam painting" +#~ msgstr "Entrée dans Peinture de Couture" #~ msgid "Erase painting" #~ msgstr "Effacer la peinture" @@ -9513,7 +9576,7 @@ msgstr "" #~ msgstr "Exporter." #~ msgid "Export G-Code." -#~ msgstr "Exporter le code G." +#~ msgstr "Exporter le G-code." #~ msgid "Export Sliced File" #~ msgstr "Exporter le fichier découpé" @@ -9531,14 +9594,14 @@ msgstr "" #~ msgstr "Position de l'extrudeuse" #~ msgid "Failed" -#~ msgstr "Failed" +#~ msgstr "Échoué" #~ msgid "" #~ "Failed to connect to the printer through LAN. Please enter the correct " #~ "printer IP address and access code." #~ msgstr "" -#~ "Failed to connect to the printer through LAN. Please enter the correct " -#~ "printer IP address and access code." +#~ "Impossible de se connecter à l'imprimante via le réseau local. Entrez " +#~ "l'adresse IP et le code d'accès corrects de l'imprimante." #~ msgid "Filament 1" #~ msgstr "Filament 1" @@ -9550,36 +9613,41 @@ msgstr "" #~ "Filament index %s does not match the filament in AMS slot %s. Please " #~ "update the printer firmware to support AMS slot assignment." #~ msgstr "" -#~ "Filament index %s does not match the filament in AMS slot %s. Please " -#~ "update the printer firmware to support AMS slot assignment." +#~ "L'indice de filament %s ne correspond pas à celui du filament dans " +#~ "l'emplacement AMS %s. Veuillez mettre à jour le firmware de l'imprimante " +#~ "pour qu'il prenne en charge l'attribution des emplacements AMS." #~ msgid "" #~ "Filament index %s exceeds the number of AMS slots. Please update the " #~ "printer firmware to support AMS slot assignment." #~ msgstr "" -#~ "Filament index %s exceeds the number of AMS slots. Please update the " -#~ "printer firmware to support AMS slot assignment." +#~ "L'indice de filament %s dépasse le nombre d'emplacements AMS. Mettez à " +#~ "jour le firmware de l'imprimante pour qu'il prenne en charge " +#~ "l'attribution des emplacements AMS." #~ msgid "" #~ "Filament index does not match the filament in AMS slot. Please update the " #~ "printer firmware to support AMS slot assignment." #~ msgstr "" -#~ "Filament index does not match the filament in AMS slot. Please update the " -#~ "printer firmware to support AMS slot assignment." +#~ "L'indice du filament ne correspond pas à celui du filament dans le slot " +#~ "AMS. Mettez à jour le firmware de l'imprimante pour qu'il prenne en " +#~ "charge l'attribution des emplacements AMS." #~ msgid "" #~ "Filament index exceeds the number of AMS slots. Please update the printer " #~ "firmware to support AMS slot assignment." #~ msgstr "" -#~ "Filament index exceeds the number of AMS slots. Please update the printer " -#~ "firmware to support AMS slot assignment." +#~ "L'indice de filament dépasse le nombre d'emplacements AMS. Mettez à jour " +#~ "le firmware de l'imprimante pour qu'il prenne en charge l'attribution des " +#~ "emplacements AMS." #~ msgid "" #~ "Filament to print support and raft. \"Default\" means no specific " #~ "filament for support and current filament is used" #~ msgstr "" -#~ "Filament to print supports and rafts. \"Default\" means no specific " -#~ "filament for support and current filament is used" +#~ "Filament pour imprimer les supports et radeaux. « Par défaut » signifie " +#~ "qu'aucun filament spécifique n'est utilisé comme support et que le " +#~ "filament actuel est utilisé" #~ msgid "" #~ "Filament to print support and skirt. 0 means no specific filament for " @@ -9600,7 +9668,7 @@ msgstr "" #~ msgstr "Sélection de filaments" #~ msgid "Finish" -#~ msgstr "Finish" +#~ msgstr "Terminer" #~ msgid "Finished" #~ msgstr "Terminé" @@ -9633,12 +9701,16 @@ msgstr "" #~ msgid "Fragment filter" #~ msgstr "Filtre à particules" +#~ msgid "G-code" +#~ msgstr "G-code" + #~ msgid "" #~ "Green represents that AMS humidity is normal, orange and red represent " #~ "that humidity is too high.(Lower the better)" #~ msgstr "" -#~ "Green represents that AMS humidity is normal, and orange and red " -#~ "represent that humidity is too high. (the lower, the better)" +#~ "Le vert indique que l'humidité dans l'AMS est normale, tandis que " +#~ "l'orange et le rouge indiquent que l'humidité est trop élevée. (plus " +#~ "c'est bas, mieux c'est)" #~ msgid "" #~ "Heat the nozzle to target \n" @@ -9646,7 +9718,7 @@ msgstr "" #~ msgstr "Chauffer la buse à la température choisie" #~ msgid "Heat the nozzle to target temperature" -#~ msgstr "Heat the nozzle to target temperature" +#~ msgstr "Chauffez la buse à la température cible" #~ msgid "Height:" #~ msgstr "Hauteur:" @@ -9667,12 +9739,13 @@ msgstr "" #~ "melt filament may leak from the nozzle during the process of taking a " #~ "snapshot, prime tower is required for nozzle priming." #~ msgstr "" -#~ "If enabled, a timelapse video will be generated for each print. After " -#~ "each layer is printed, the toolhead will move to the excess chute, and " -#~ "then a snapshot is taken with the chamber camera. All of these snapshots " -#~ "are composed into a timelapse video when printing completes. Since the " -#~ "melted filament may leak from the nozzle during the process of taking a " -#~ "snapshot, a prime tower is required for nozzle priming." +#~ "Si cette option est activée, une vidéo en timelapse sera générée pour " +#~ "chaque impression. À chaque couche imprimée, l'extrudeur se déplace vers " +#~ "la goulotte d'évacuation, puis un cliché est pris à l'aide de la caméra. " +#~ "Tous ces instantanés sont assemblés dans une vidéo timelapse une fois " +#~ "l'impression terminée. Étant donné que le filament fondu peut s'échapper " +#~ "de la buse lors de la prise de vue, une tour de nettoyage est requise " +#~ "pour essuyer la buse." #~ msgid "Import 3MF/STL/STEP/OBJ/AMF" #~ msgstr "Importer 3MF/STL/STEP/OBJ/AMF" @@ -9692,11 +9765,25 @@ msgstr "" #~ msgstr "Échec de l'initialisation [%d] !" #~ msgid "Initialize failed (Not supported without remote video tunnel)!" -#~ msgstr "Initialization failed (Not supported without remote video tunnel)!" +#~ msgstr "" +#~ "L'initialisation a échoué (non supporté sans tunnel vidéo à distance) !" #~ msgid "Inner wall speed" #~ msgstr "Vitesse de la paroi intérieure" +#~ msgid "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." +#~ msgstr "" +#~ "Il semble que l'objet %s possède des surfaces en surplomb. Réorientez " +#~ "l'objet ou activez la génération de support." + +#~ msgid "" +#~ "It seems object %s has large overhangs. Please enable support generation." +#~ msgstr "" +#~ "Il semble que l'objet %s ait de grands surplombs. Veuillez activer la " +#~ "génération de support." + #~ msgid "" #~ "It seems object %s needs support to print. Please enable support " #~ "generation." @@ -9704,17 +9791,23 @@ msgstr "" #~ "Il semble que l'objet %s ait besoin d'aide pour imprimer. Veuillez " #~ "activer la génération de support." +#~ msgid "Keep lower part" +#~ msgstr "Garder la partie du bas" + +#~ msgid "Keep upper part" +#~ msgstr "Garder la partie du haut" + #~ msgid "Layer Time(log): " -#~ msgstr "Layer Time(log): " +#~ msgstr "Temps de couche (journal):" #~ msgid "Layer Time (log)" -#~ msgstr "Layer Time (log)" +#~ msgstr "Temps de couche (journal)" #~ msgid "Layers and Perimeters" -#~ msgstr "Layers and Perimeters" +#~ msgstr "Couches et Périmètres" #~ msgid "Leaving Seam painting" -#~ msgstr "Leaving Seam Painting" +#~ msgstr "Quitter Peinture de Couture" #~ msgid "Line type" #~ msgstr "Type de ligne" @@ -9723,7 +9816,7 @@ msgstr "" #~ msgstr "Chargement des préréglages utilisateur..." #~ msgid "Management" -#~ msgstr "Management" +#~ msgstr "Gestion" #~ msgid "Max travel detour distance" #~ msgstr "Distance de détour maximale" @@ -9736,7 +9829,7 @@ msgstr "" #~ "pas de détour si la distance de détour est supérieure à cette valeur" #~ msgid "Modify" -#~ msgstr "Modify" +#~ msgstr "Modifier" #~ msgid "Module" #~ msgstr "Module" @@ -9748,15 +9841,16 @@ msgstr "" #~ msgstr "Enregistrement de surveillance" #~ msgid "NO AMS" -#~ msgstr "NO AMS" +#~ msgstr "PAS D'AMS" #~ msgid "Not supported." -#~ msgstr "Not supported." +#~ msgstr "Non pris en charge" #~ msgid "" #~ "Note : The location of IP and access code on the machine is as follows :" #~ msgstr "" -#~ "Note: The location of IP and access code on the machine is as follows:" +#~ "Remarque : L'emplacement de l'IP et du code d'accès sur la machine est le " +#~ "suivant :" #~ msgid "Open &PrusaSlicer" #~ msgstr "Ouvrir &PrusaSlicer" @@ -9768,10 +9862,12 @@ msgstr "" #~ msgstr "Fichier de sortie" #~ msgid "P1P General Settings - WLAN in the sidebar of the main screen" -#~ msgstr "P1P General Settings - WLAN in the sidebar of the main screen" +#~ msgstr "" +#~ "Paramètres généraux de la P1P - Wifi dans la barre latérale de l'écran " +#~ "principal" #~ msgid "Paint-on seam editing" -#~ msgstr "Paint-on seam editing" +#~ msgstr "Modification des coutures peintes" #~ msgid "Part Cooling" #~ msgstr "Refroidissement des pièces" @@ -9789,26 +9885,26 @@ msgstr "" #~ msgstr "Modification par objet" #~ msgid "Plate %d: %s does not support filament %s\n" -#~ msgstr "Plate %d: %s does not support filament %s\n" +#~ msgstr "Plaque %d : %s ne prend pas en charge le filament %s.\n" #~ msgid "Plate %d: %s does not support filament %s.\n" #~ msgstr "Plaque %d : %s ne prend pas en charge le filament %s.\n" #~ msgid "Plate %d: %s does not support filament %s (%s)." -#~ msgstr "Plate %d: %s does not support filament %s (%s)." +#~ msgstr "Plaque %d: %s ne prend pas en charge le filament %s (%s)." #~ msgid "Plate %d: %s does not support filament %s (%s).\n" -#~ msgstr "Plate %d: %s does not support filament %s (%s).\n" +#~ msgstr "Plaque %d: %s ne prend pas en charge le filament %s (%s).\n" #~ msgid "Please Fill Task Report." -#~ msgstr "Please fill task report." +#~ msgstr "Veuillez remplir le rapport de tâche." #~ msgid "" #~ "Please check the following infomation and click Confirm to continue " #~ "sending print:\n" #~ msgstr "" -#~ "Please check the following infomation and click Confirm to continue " -#~ "sending print:\n" +#~ "Vérifiez les informations suivantes et cliquez sur Confirmer pour " +#~ "continuer à envoyer l'impression :\n" #~ msgid "Please fill report first." #~ msgstr "Veuillez d'abord remplir le rapport." @@ -9832,20 +9928,23 @@ msgstr "" #~ msgid "" #~ "Prime tower is required by timelapse. Do you want to enable both of them?" #~ msgstr "" -#~ "Prime tower is required by timelapse. Do you want to enable both of them?" +#~ "La tour de Nettoyage est requise pour le timelapse. Voulez-vous les " +#~ "activer tous les deux ?" #~ msgid "" #~ "Prime tower is required by timeplase. Are you sure you want to disable " #~ "both of them?" #~ msgstr "" -#~ "Prime tower is required by timeplase. Are you sure you want to disable " -#~ "both of them?" +#~ "La tour de nettoyage est requise pour le timeplase. Êtes-vous sûr de " +#~ "vouloir les désactiver tous les deux ?" #~ msgid "Printer Selection" #~ msgstr "Sélection de l'imprimante" #~ msgid "Printer firmware does not support material = >ams slot mapping." -#~ msgstr "Printer firmware does not support material = > AMS slot mapping." +#~ msgstr "" +#~ "Le firmware de l'imprimante ne prend pas en charge le matériel => " +#~ "Attribution des emplacements AMS" #~ msgid "" #~ "Purging after filament change will be done inside objects' infills. This " @@ -9877,10 +9976,11 @@ msgstr "" #~ "snapshot is taken with the chamber camera. When printing finishes a " #~ "timelapse video is composed of all the snapshots." #~ msgstr "" -#~ "Record timelapse video of printing without showing the toolhead. In this " -#~ "mode the toolhead docks near the excess chute at each layer change, and " -#~ "then a snapshot is taken with the chamber camera. When printing finishes, " -#~ "a timelapse video is created from all the snapshots." +#~ "Enregistrez un timelapse de l'impression sans afficher la tête d'outil. " +#~ "Dans ce mode, la tête d'outil se positionne près de la goulotte " +#~ "d'évacuation à chaque changement de couche, puis un cliché est pris à " +#~ "l'aide de la caméra. Lorsque l'impression est terminée, une vidéo " +#~ "timelapse est créée à partir de tous les instantanés." #~ msgid "Reduce Triangles" #~ msgstr "Réduire les triangles" @@ -9892,7 +9992,7 @@ msgstr "" #~ msgstr "Recharger les éléments" #~ msgid "Repair" -#~ msgstr "Réparation" +#~ msgstr "Réparer" #~ msgid "Repair the model's meshes if it is non-manifold mesh" #~ msgstr "" @@ -9908,7 +10008,7 @@ msgstr "" #~ msgstr "Enregistrer la configuration sous :" #~ msgid "Select Bed Type" -#~ msgstr "Select Bed Type" +#~ msgstr "Sélectionnez le type de plateau" #~ msgid "Sending" #~ msgstr "Envoi en cours" @@ -9923,7 +10023,7 @@ msgstr "" #~ msgstr "Maj + molette de la souris" #~ msgid "Show Log" -#~ msgstr "Show Log" +#~ msgstr "Afficher le journal" #~ msgid "Show Model Mesh(TODO)" #~ msgstr "Afficher le maillage du modèle (TODO)" @@ -9935,10 +10035,10 @@ msgstr "" #~ msgstr "Afficher la boîte imprimable (TODO)" #~ msgid "Spaghetti Detection" -#~ msgstr "Spaghetti Detection" +#~ msgstr "Détection des Spaghettis" #~ msgid "Spaghetti and Excess Chute Pileup Detection" -#~ msgstr "Spaghetti and Excess Chute Pileup Detection" +#~ msgstr "Détection des Amas de goulotte d'évacuation et Spaghetti" #~ msgid "Spiral mode" #~ msgstr "Mode spirale" @@ -9952,11 +10052,26 @@ msgstr "" #~ "le support est désactivé, les couches de coque supérieures sont à 0 et la " #~ "densité de remplissage clairsemée est à 0\n" +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" +#~ msgstr "" +#~ "Le mode spirale ne fonctionne que lorsque qu'il n'y a qu'un seul mur, les " +#~ "supports sont désactivés, que les couches supérieures de la coque sont à " +#~ "0, qu'il n'y a pas de remplissage et que le type timelapse est " +#~ "traditionnel" + +#~ msgid "Start" +#~ msgstr "Démarrer" + #~ msgid "Stop printing when Spaghetti or Excess Chute Pileup is detected" -#~ msgstr "Stop printing when Spaghetti or Excess Chute Pileup is detected" +#~ msgstr "" +#~ "Arrêter l'impression en cas de détection d'Amas dans la goulotte " +#~ "d'évacuation ou de présence de Spaghetti" #~ msgid "Stop printing when spaghetti detected" -#~ msgstr "Stop printing when spaghetti is detected" +#~ msgstr "Arrêter l'impression lorsque des spaghettis sont détectés" #~ msgid "Successfully sent.Will automatically jump to the device page in %s s" #~ msgstr "" @@ -9966,10 +10081,14 @@ msgstr "" #~ msgid "" #~ "Successfully sent. Will automatically jump to the device page in %s s" #~ msgstr "" -#~ "Successfully sent. Will automatically jump to the device page in %s s" +#~ "Envoyé avec succès. Sautera automatiquement à la page de l'appareil " +#~ "dans %s s" #~ msgid "Suggestion: Actual Volume in range [%d, %d]" -#~ msgstr "Suggestion: Actual Volume in range [%d, %d]" +#~ msgstr "Suggestion : Volume Réel dans la plage [%d, %d]" + +#~ msgid "Support base" +#~ msgstr "Base de support" #~ msgid "" #~ "Support layer uses layer height independent with object layer. This is to " @@ -9982,14 +10101,22 @@ msgstr "" #~ "supplémentaires si le support est spécifié comme extrudeuse différente " #~ "avec l'objet" +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." +#~ msgstr "" +#~ "La couche de support utilise une hauteur de la couche indépendante de la " +#~ "hauteur de couche d'impression. Cela permet de personnaliser la distance " +#~ "Z et de gagner du temps d'impression." + #~ msgid "" #~ "Switch to rectilinear pattern?\n" #~ "Yes - switch to rectilinear pattern automaticlly\n" #~ "No - reset density to default non 100% value automaticlly\n" #~ msgstr "" -#~ "Switch to rectilinear pattern?\n" -#~ "Yes - switch to rectilinear pattern automaticlly\n" -#~ "No - reset density to default non 100% value automaticlly\n" +#~ "Passer à un motif rectiligne ?\n" +#~ "Oui - Passe automatiquement au motif rectiligne\n" +#~ "Non - Réinitialise la densité à la valeur par défaut différente de 100%\n" #~ msgid "" #~ "Switch to zig-zag pattern?\n" @@ -10005,7 +10132,10 @@ msgstr "" #~ msgstr "Changez d'environnement cloud, veuillez vous reconnecter !" #~ msgid "Sync material list from AMS" -#~ msgstr "Sync material list from AMS" +#~ msgstr "Synchroniser la liste des matériaux depuis AMS" + +#~ msgid "The %s filament is too soft to be used with the AMS" +#~ msgstr "Le filament %s est trop souple pour être utilisé avec l'AMS" #~ msgid "" #~ "The 3mf's version %s is newer than %s's version %s, Found following keys " @@ -10018,15 +10148,24 @@ msgstr "" #~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade " #~ "your software.\n" #~ msgstr "" -#~ "The 3mf's version %s is newer than %s's version %s; it is suggested to " -#~ "update your software.\n" +#~ "La version %s du 3mf est plus récente que la version %s de %s ; il est " +#~ "suggéré de mettre à jour votre logiciel.\n" #~ msgid "The 3mf is not from Bambu lab, load geometry data only." -#~ msgstr "The 3mf is not from Bambu lab, loading geometry data only." +#~ msgstr "" +#~ "Le 3mf ne provient pas de Bambu Lab, chargement des données géométriques " +#~ "uniquement." #~ msgid "The Config is not compatible and can not be loaded." #~ msgstr "La Config n'est pas compatible et ne peut pas être chargée." +#~ msgid "" +#~ "The P1P printer does not support smooth timelapse, use traditional " +#~ "timelapse instead." +#~ msgstr "" +#~ "L'imprimante P1P ne prend pas en charge le timelapse fluide, veuillez " +#~ "plutôt utiliser le timelapse traditionnel." + #~ msgid "" #~ "The firmware versions of printer and AMS are too low.Please update to the " #~ "latest version before sending the print job" @@ -10039,8 +10178,8 @@ msgstr "" #~ "The flush volume is less than the minimum value and will be automatically " #~ "set to the minimum value." #~ msgstr "" -#~ "The flush volume is less than the minimum value and will be automatically " -#~ "set to the minimum value." +#~ "Le volume de rinçage est inférieur à la valeur minimale et sera " +#~ "automatiquement réglé à la valeur minimale par défaut." #~ msgid "" #~ "The model has overlapping or self-intersecting facets. I tried to repair " @@ -10055,9 +10194,9 @@ msgstr "" #~ "currently selected physical printer. It is recommend to re-slice by " #~ "selecting the same printer type.\n" #~ msgstr "" -#~ "The printer type used to generate G-code is not the same type as the " -#~ "currently selected physical printer. It is recommend to re-slice by " -#~ "selecting the same printer type.\n" +#~ "Le type d'imprimante utilisé pour générer le G-code n'est pas le même que " +#~ "l'imprimante physique actuellement sélectionnée. Il est recommandé de re-" +#~ "trancher en sélectionnant le même type d'imprimante.\n" #~ msgid "" #~ "This controls brim position including outer side of models, inner side of " @@ -10082,7 +10221,7 @@ msgstr "" #~ "support" #~ msgstr "" #~ "Ce paramètre spécifie s'il faut ajouter un remplissage à l'intérieur des " -#~ "grands creux du support d'arbre" +#~ "grands creux du support arborescent" #~ msgid "" #~ "This setting stands for how much volume of filament can be melted and " @@ -10098,22 +10237,22 @@ msgstr "" #~ msgstr "Timelapse tour de purge" #~ msgid "Timelapse without toolhead" -#~ msgstr "Timelapse without toolhead" +#~ msgstr "Timelapse sans tête d'outil" #~ msgid "Translation" #~ msgstr "Traduction" #~ msgid "Tree support with infill" -#~ msgstr "Support d'arbre avec remplissage" +#~ msgstr "Support arborescent avec remplissage" #~ msgid "Unable to connect printer" -#~ msgstr "Unable to connect printer" +#~ msgstr "Impossible de connecter l'imprimante" #~ msgid "Unable to create zip file" #~ msgstr "Création du fichier zip impossible" #~ msgid "Uploading" -#~ msgstr "Téléchargement" +#~ msgstr "Téléversement" #~ msgid "User pause" #~ msgstr "Pause utilisateur" @@ -10127,10 +10266,10 @@ msgstr "" #~ "by right-click the empty position of build plate and choose \"Add " #~ "Primitive\"->\"Timelapse Wipe Tower\".\n" #~ msgstr "" -#~ "When recording timelapse without toolhead, it is recommended to add a " -#~ "\"Timelapse Wipe Tower\" \n" -#~ "by right-click the empty position of build plate and choose \"Add " -#~ "Primitive\"->\"Timelapse Wipe Tower\".\n" +#~ "Lorsque vous enregistrez un timelapse sans tête d’outil, il est " +#~ "recommandé d’ajouter une \"Tour de nettoyage timelapse\".\n" +#~ "en faisant un clic droit sur un emplacement vide sur le plateau et en " +#~ "choisissant \"Ajouter Primitive\"-> \"Tour de nettoyage Timelapse\".\n" #~ msgid "" #~ "When sparse infill density is low, the internal solid infill or internal " @@ -10140,18 +10279,30 @@ msgstr "" #~ "specific thickness, so that better archor can be provided for internal " #~ "bridge. 0 means disable this feature" #~ msgstr "" -#~ "When sparse infill density is low, the internal solid infill or internal " -#~ "bridge may have no anchor at the end of the line. This causes falling and " -#~ "bad quality when printing internal solid infill. When enable this " -#~ "feature, loop paths will be added to the sparse fill of the lower layers " -#~ "for specific thickness, so that better anchors can be provided for " -#~ "internal bridges. 0 means disable this feature" +#~ "Lorsque la densité du remplissage clairsemé est faible, le remplissage " +#~ "solide interne ou le pont interne peut ne pas avoir d'ancrage à la fin de " +#~ "la ligne. Cela provoque des effondrements et une mauvaise qualité lors de " +#~ "l'impression du remplissage solide interne. Lorsque vous activez cette " +#~ "fonction, des chemins de boucle seront ajoutés au remplissage clairsemé " +#~ "des couches inférieures sur épaisseur spécifique, de sorte que de " +#~ "meilleurs ancrages puissent être fournis pour les ponts internes. 0 " +#~ "signifie désactiver cette fonction" + +#~ msgid "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." +#~ msgstr "" +#~ "Lorsque vous utilisez du matériel de support pour l'interface des " +#~ "supports nous recommandons les paramètres suivants :\n" +#~ "0 distance supérieure à Z, 0 espacement entre les interfaces, motif " +#~ "concentrique." #~ msgid "" #~ "X1 General Settings - Network Settings in the side bar of X1 main screen" #~ msgstr "" -#~ "X1 General Settings - Network Settings in the side bar of the X1 main " -#~ "screen." +#~ "Paramètres généraux de la X1 - Paramètres réseau dans la barre latérale " +#~ "de l'écran principal de la X1." #~ msgid "" #~ "You have changed some preset settings. \n" @@ -10164,7 +10315,7 @@ msgstr "" #~ msgstr "Zig zag" #~ msgid "(Sort)" -#~ msgstr "(Sort)" +#~ msgstr "(Trier)" #~ msgid " Object:" #~ msgstr "Objet:" @@ -10172,8 +10323,8 @@ msgstr "" #~ msgid "" #~ " is too close to exclusion area, there may be collisions when printing.\n" #~ msgstr "" -#~ " is too close to an exclusion area; there may be collisions when " -#~ "printing.\n" +#~ " est trop proche d'une zone d'exclusion; il peut y avoir des collisions " +#~ "lors de l'impression.\n" #~ msgid "" #~ " is too close to exclusion area, there will be collisions when printing.\n" @@ -10182,7 +10333,9 @@ msgstr "" #~ "l'impression.\n" #~ msgid " is too close to others, there may be collisions when printing.\n" -#~ msgstr " is too close to others; there may be collisions when printing.\n" +#~ msgstr "" +#~ " est trop proche des autres; il peut y avoir des collisions lors de " +#~ "l'impression.\n" #~ msgid " is too close to others, there will be collisions when printing.\n" #~ msgstr "" @@ -10191,11 +10344,10 @@ msgstr "" #~ msgid "" #~ " will be closed before creating a new model. Do you want to continue?" -#~ msgstr "" -#~ " will be closed before creating a new model. Do you want to continue?" +#~ msgstr " sera fermé avant de créer un nouveau modèle. Tu veux continuer ?" #~ msgid "default value" -#~ msgstr "default value" +#~ msgstr "Valeur par défaut" #~ msgid "hybrid(auto)" #~ msgstr "hybride (auto)" @@ -10207,16 +10359,17 @@ msgstr "" #~ "normal(auto) and tree(auto) is used to generate support automatically. If " #~ "normal or tree is selected, only support enforcers are generated" #~ msgstr "" -#~ "normal(auto) et tree(auto) sont utilisés pour générer automatiquement le " -#~ "support. Si normal ou arbre est sélectionné, seuls les exécuteurs de " -#~ "support sont générés" +#~ "Normal (auto), Hybride (auto) et Arborescent (auto) sont utilisés pour " +#~ "générer automatiquement un support. Si l'option Normal ou Arborescent est " +#~ "sélectionné, seuls les générateurs de supports sont créés." #~ msgid "preparing, export 3mf failed!" -#~ msgstr "preparing; exporting 3mf failed!" +#~ msgstr "préparation ; échec de l'exportation de 3mf!" #~ msgid "the 3mf is not compatible, load geometry data only!" #~ msgstr "" -#~ "le 3mf n'est pas compatible, chargez uniquement les données de géométrie !" +#~ "Le 3mf n'est pas compatible, chargement des données géométriques " +#~ "uniquement!" #~ msgid "tree" -#~ msgstr "arbre" +#~ msgstr "arborescent" diff --git a/bbl/i18n/hu/BambuStudio_hu.po b/bbl/i18n/hu/BambuStudio_hu.po index 36c82cdb33..31428de081 100644 --- a/bbl/i18n/hu/BambuStudio_hu.po +++ b/bbl/i18n/hu/BambuStudio_hu.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-04 14:45+0800\n" +"POT-Creation-Date: 2023-04-06 08:26+0800\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1925,14 +1925,14 @@ msgstr "Bed Temperature" msgid "Max volumetric speed" msgstr "Max. volumetrikus sebesség" -msgid "℃" -msgstr "" +msgid "\\u2103" +msgstr "\\u2103" msgid "Bed temperature" msgstr "Asztalhőmérséklet" -msgid "mm³" -msgstr "mm³" +msgid "mm\\u00B3" +msgstr "mm\\u00B3" msgid "Start calibration" msgstr "Start" @@ -3986,7 +3986,7 @@ msgid "First Layer Inspection" msgstr "First Layer Inspection" msgid "Auto-recovery from step loss" -msgstr "Auto-recovery from step loss" +msgstr "Auto-recover from step loss" msgid "Global" msgstr "Globális" @@ -7177,6 +7177,9 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimális tisztítás a törlőtoronyban" +msgid "mm³" +msgstr "mm³" + msgid "Filament load time" msgstr "Filament betöltési idő" @@ -9126,104 +9129,6 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" -#~ msgid "" -#~ "Arachne engine only works when overhang slowing down is disabled.\n" -#~ "This may cause decline in the quality of overhang surface when print " -#~ "fastly" -#~ msgstr "" -#~ "The Arachne engine only works when overhang slowdown is disabled.\n" -#~ "This may cause decline in the quality of overhang surface when printing " -#~ "quickly." - -#~ msgid "" -#~ "Disable overhang slowing down automatically? \n" -#~ "Yes - Enable arachne and disable overhang slowing down\n" -#~ "No - Give up using arachne this time" -#~ msgstr "" -#~ "Disable overhang slowdown automatically? \n" -#~ "Yes - Enable Arachne and disable overhang slowing down\n" -#~ "No - Don't use Arachne for this print" - -#~ msgid "Start" -#~ msgstr "Start" - -#~ msgid "G-code" -#~ msgstr "G-code" - -#~ msgid "Backup" -#~ msgstr "Biztonsági mentés" - -#~ msgid "Backup interval" -#~ msgstr "Intervallum" - -#, c-format, boost-format -#~ msgid "The %s filament is too soft to be used with the AMS" -#~ msgstr "The %s filament is too soft to be used with the AMS" - -#, c-format, boost-format -#~ msgid "" -#~ "It seems object %s has completely floating regions. Please re-orient the " -#~ "object or enable support generation." -#~ msgstr "" -#~ "It seems object %s has completely floating regions. Please re-orient the " -#~ "object or enable support generation." - -#, c-format, boost-format -#~ msgid "" -#~ "It seems object %s has large overhangs. Please enable support generation." -#~ msgstr "" -#~ "It seems object %s has large overhangs. Please enable support generation." - -#~ msgid "\\u2103" -#~ msgstr "\\u2103" - -#~ msgid "mm\\u00B3" -#~ msgstr "mm\\u00B3" - -#~ msgid "" -#~ "Spiral mode only works when wall loops is 1, support is disabled, top " -#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " -#~ "traditional" -#~ msgstr "" -#~ "Spiral mode only works when wall loops is 1, support is disabled, top " -#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " -#~ "traditional" - -#~ msgid "Keep upper part" -#~ msgstr "Felső rész megtartása" - -#~ msgid "Keep lower part" -#~ msgstr "Alsó rész megtartása" - -#~ msgid "AMS auto switch filament" -#~ msgstr "AMS auto switch filament" - -#~ msgid "" -#~ "When using support material for the support interface, We recommend the " -#~ "following settings:\n" -#~ "0 top z distance, 0 interface spacing, concentric pattern." -#~ msgstr "" -#~ "When using support material for the support interface, We recommend the " -#~ "following settings:\n" -#~ "0 top z distance, 0 interface spacing, concentric pattern." - -#~ msgid "" -#~ "The P1P printer does not support smooth timelapse, use traditional " -#~ "timelapse instead." -#~ msgstr "" -#~ "The P1P printer does not support smooth timelapse, please use traditional " -#~ "timelapse instead." - -#~ msgid "Support base" -#~ msgstr "Support base" - -#~ msgid "" -#~ "Support layer uses layer height independent with object layer. This is to " -#~ "support customizing z-gap and save print time." -#~ msgstr "" -#~ "Support layer uses layer height independent with object layer. This is to " -#~ "support customizing z-gap and save print time." - #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -9249,6 +9154,9 @@ msgstr "" #~ msgid "AMSMaterialsSetting" #~ msgstr "AMS Materials Setting" +#~ msgid "AMS auto switch filament" +#~ msgstr "AMS auto switch filament" + #~ msgid "AWS PRE host" #~ msgstr "AWS PRE host" @@ -9272,6 +9180,15 @@ msgstr "" #~ "Kérjük, orvosold a problémát a tárgy tálcára helyezésével vagy a tálcáról " #~ "való eltávolításával és a tárgy magasságának ellenőrzésével." +#~ msgid "" +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly" +#~ msgstr "" +#~ "The Arachne engine only works when overhang slowdown is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when printing " +#~ "quickly." + #~ msgid "" #~ "Arachne engine only works when overhang slowing down is disabled.\n" #~ "This may cause decline in the quality of overhang surface when print " @@ -9300,6 +9217,12 @@ msgstr "" #~ msgid "Avoid crossing wall when travel" #~ msgstr "Falak elkerülése mozgáskor" +#~ msgid "Backup" +#~ msgstr "Biztonsági mentés" + +#~ msgid "Backup interval" +#~ msgstr "Intervallum" + #~ msgid "" #~ "Bed exclude area that can't used as printable area in X-Y plane. For " #~ "example, the bottom left area which is used to cut filament in X1 when " @@ -9394,6 +9317,15 @@ msgstr "" #~ msgid "Device:" #~ msgstr "Eszköz:" +#~ msgid "" +#~ "Disable overhang slowing down automatically? \n" +#~ "Yes - Enable arachne and disable overhang slowing down\n" +#~ "No - Give up using arachne this time" +#~ msgstr "" +#~ "Disable overhang slowdown automatically? \n" +#~ "Yes - Enable Arachne and disable overhang slowing down\n" +#~ "No - Don't use Arachne for this print" + #~ msgid "Display printable box" #~ msgstr "Nyomtatható doboz megjelenítése" @@ -9598,6 +9530,9 @@ msgstr "" #~ msgid "Fragment filter" #~ msgstr "Töredékszűrő" +#~ msgid "G-code" +#~ msgstr "G-code" + #~ msgid "" #~ "Green represents that AMS humidity is normal, orange and red represent " #~ "that humidity is too high.(Lower the better)" @@ -9662,6 +9597,18 @@ msgstr "" #~ msgid "Inner wall speed" #~ msgstr "Belső fal sebessége" +#~ msgid "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." +#~ msgstr "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." + +#~ msgid "" +#~ "It seems object %s has large overhangs. Please enable support generation." +#~ msgstr "" +#~ "It seems object %s has large overhangs. Please enable support generation." + #~ msgid "" #~ "It seems object %s needs support to print. Please enable support " #~ "generation." @@ -9669,6 +9616,12 @@ msgstr "" #~ "Úgy tűnik %s objektumnak támaszra lenne szüksége a nyomtatáshoz. Kérjük, " #~ "engedélyezd a támasz generálását." +#~ msgid "Keep lower part" +#~ msgstr "Alsó rész megtartása" + +#~ msgid "Keep upper part" +#~ msgstr "Felső rész megtartása" + #~ msgid "Layer Time(log): " #~ msgstr "Layer Time(log): " @@ -9918,6 +9871,18 @@ msgstr "" #~ "a támaszok ki vannak kapcsolva, a felső rétegek száma 0 és a hiányos " #~ "kitöltés sűrűsége 0\n" +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" +#~ msgstr "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" + +#~ msgid "Start" +#~ msgstr "Start" + #~ msgid "Stop printing when Spaghetti or Excess Chute Pileup is detected" #~ msgstr "Stop printing when Spaghetti or Excess Chute Pileup is detected" @@ -9937,6 +9902,9 @@ msgstr "" #~ msgid "Suggestion: Actual Volume in range [%d, %d]" #~ msgstr "Suggestion: Actual Volume in range [%d, %d]" +#~ msgid "Support base" +#~ msgstr "Support base" + #~ msgid "" #~ "Support layer uses layer height independent with object layer. This is to " #~ "support custom support gap,but may cause extra filament switches if " @@ -9947,6 +9915,13 @@ msgstr "" #~ "támasz között, de előfordulhat, hogy extra filament váltást okoz, ha más " #~ "anyagú filamentet használsz támaszként." +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." +#~ msgstr "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." + #~ msgid "" #~ "Switch to rectilinear pattern?\n" #~ "Yes - switch to rectilinear pattern automaticlly\n" @@ -9972,6 +9947,9 @@ msgstr "" #~ msgid "Sync material list from AMS" #~ msgstr "Sync material list from AMS" +#~ msgid "The %s filament is too soft to be used with the AMS" +#~ msgstr "The %s filament is too soft to be used with the AMS" + #~ msgid "" #~ "The 3mf's version %s is newer than %s's version %s, Found following keys " #~ "unrecognized:\n" @@ -9992,6 +9970,13 @@ msgstr "" #~ msgid "The Config is not compatible and can not be loaded." #~ msgstr "A konfiguráció nem kompatibilis és nem tölthető be!" +#~ msgid "" +#~ "The P1P printer does not support smooth timelapse, use traditional " +#~ "timelapse instead." +#~ msgstr "" +#~ "The P1P printer does not support smooth timelapse, please use traditional " +#~ "timelapse instead." + #~ msgid "" #~ "The firmware versions of printer and AMS are too low.Please update to the " #~ "latest version before sending the print job" @@ -10111,6 +10096,15 @@ msgstr "" #~ "for specific thickness, so that better anchors can be provided for " #~ "internal bridges. 0 means disable this feature" +#~ msgid "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." +#~ msgstr "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." + #~ msgid "" #~ "X1 General Settings - Network Settings in the side bar of X1 main screen" #~ msgstr "" diff --git a/bbl/i18n/it/BambuStudio_it.po b/bbl/i18n/it/BambuStudio_it.po index f7fd0d0298..68154c3e3e 100644 --- a/bbl/i18n/it/BambuStudio_it.po +++ b/bbl/i18n/it/BambuStudio_it.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-04 14:45+0800\n" +"POT-Creation-Date: 2023-04-06 08:26+0800\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -11,22 +11,22 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" msgid "Supports Painting" -msgstr "Support Painting" +msgstr "Pittura Supporti" msgid "Alt + Mouse wheel" msgstr "Alt + Rotella del mouse" msgid "Section view" -msgstr "Section view" +msgstr "Vista in sezione" msgid "Reset direction" -msgstr "Reset direction" +msgstr "Ripristina direzione" msgid "Ctrl + Mouse wheel" msgstr "Ctrl + Rotella del mouse" msgid "Pen size" -msgstr "Pen size" +msgstr "Dimensione penna" msgid "Left mouse button" msgstr "Tasto sinistro mouse" @@ -44,34 +44,34 @@ msgid "Shift + Left mouse button" msgstr "Shift + Tasto sinistro mouse" msgid "Erase" -msgstr "Erase" +msgstr "Elimina" msgid "Erase all painting" -msgstr "Erase all painting" +msgstr "Cancellare tutta la pittura" msgid "Highlight overhang areas" -msgstr "Highlight overhangs" +msgstr "Evidenziare le sporgenze" msgid "Gap fill" -msgstr "Gap fill" +msgstr "Riempimento gap" msgid "Perform" msgstr "Eseguire" msgid "Gap area" -msgstr "Gap area" +msgstr "Area Gap" msgid "Tool type" -msgstr "Tipo di strumento" +msgstr "Tipo strumento" msgid "Smart fill angle" msgstr "Angolo riempimento intelligente" msgid "On overhangs only" -msgstr "On overhangs only" +msgstr "Solo su sporgenze" msgid "Auto support threshold angle: " -msgstr "Auto support threshold angle: " +msgstr "Angolo di soglia per supporto automatico: " msgid "Circle" msgstr "Cerchio" @@ -80,52 +80,53 @@ msgid "Sphere" msgstr "Sfera" msgid "Fill" -msgstr "Fill" +msgstr "Riempi" msgid "Gap Fill" -msgstr "Gap Fill" +msgstr "Riempimento gap" #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" -msgstr "Allows painting only on facets selected by: \"%1%\"" +msgstr "Consente di pitturare solo sulle sfaccettature selezionate da: \"%1%\"" msgid "Highlight faces according to overhang angle." -msgstr "Highlight faces according to overhang angle." +msgstr "Evidenziare le facce in base all'angolo di sporgenza." msgid "No auto support" -msgstr "No auto support" +msgstr "Nessun supporto automatico" msgid "Support Generated" -msgstr "Support generated" +msgstr "Supporto generato" msgid "Lay on face" -msgstr "Lay on Face" +msgstr "Posiziona su faccia" #, boost-format msgid "" "Filament count exceeds the maximum number that painting tool supports. only " "the first %1% filaments will be available in painting tool." msgstr "" -"Filament count exceeds the maximum number that painting tool supports. Only " -"the first %1% filaments will be available in painting tool." +"Il numero di filamenti supera il numero massimo supportato dallo strumento " +"di pittura. Solo il primo %1% dei filamenti sarà disponibile nello strumento " +"di pittura." msgid "Color Painting" -msgstr "Color painting" +msgstr "Pittura a colori" msgid "Pen shape" -msgstr "Pen shape" +msgstr "Forma penna" msgid "Paint" -msgstr "Paint" +msgstr "Pittura" msgid "Key 1~9" -msgstr "Key 1~9" +msgstr "Tasto 1~9" msgid "Choose filament" -msgstr "Choose filament" +msgstr "Scegli filamento" msgid "Edge detection" -msgstr "Edge detection" +msgstr "Rilevamento dei bordi" msgid "Triangles" msgstr "Triangoli" @@ -143,29 +144,29 @@ msgid "Bucket fill" msgstr "Riempimento Secchio" msgid "Height range" -msgstr "Height range" +msgstr "Intervallo altezza" msgid "Ctrl + Shift + Enter" -msgstr "Ctrl + Shift + Enter" +msgstr "Ctrl + Shift + Invio" msgid "Toggle Wireframe" -msgstr "Toggle Wireframe" +msgstr "Attiva Wireframe" msgid "Shortcut Key " -msgstr "Shortcut Key " +msgstr "Tasto scelta rapida " msgid "Triangle" -msgstr "Triangle" +msgstr "Triangolo." msgid "Height Range" -msgstr "Height Range" +msgstr "Intervallo altezza" msgid "Remove painted color" msgstr "Rimuovi colore dipinto" #, boost-format msgid "Painted using: Filament %1%" -msgstr "Painted using: Filament %1%" +msgstr "Pitturato utilizzando: Filamento %1%" msgid "Move" msgstr "Sposta" @@ -183,10 +184,10 @@ msgid "Scale" msgstr "Ridimensiona" msgid "Error: Please close all toolbar menus first" -msgstr "Error: Please close all toolbar menus first" +msgstr "Errore: chiudi prima tutti i menu della barra degli strumenti" msgid "Tool-Lay on Face" -msgstr "Tool-Lay on Face" +msgstr "Strumento-Faccia sul piatto" msgid "in" msgstr "in" @@ -201,19 +202,19 @@ msgid "Rotation" msgstr "Rotazione" msgid "Scale ratios" -msgstr "Scale ratios" +msgstr "Rapporti di scala" msgid "Object Operations" -msgstr "Object operations" +msgstr "Operazioni sugli oggetti" msgid "Volume Operations" -msgstr "Volume operations" +msgstr "Operazioni volume" msgid "Translate" msgstr "Traduci" msgid "Group Operations" -msgstr "Group operations" +msgstr "Operazioni Gruppo" msgid "Set Position" msgstr "Imposta posizione" @@ -225,25 +226,25 @@ msgid "Set Scale" msgstr "Imposta scala" msgid "Reset Position" -msgstr "Reset position" +msgstr "Ripristina posizione" msgid "Reset Rotation" msgstr "Reimposta rotazione" msgid "World coordinates" -msgstr "Coordinate reali" +msgstr "Coordinate globali" msgid "°" msgstr "°" msgid "Size" -msgstr "Dimensioni" +msgstr "Dimensione" msgid "%" msgstr "%" msgid "uniform scale" -msgstr "Uniform scale" +msgstr "Scala uniforme" msgid "Left click" msgstr "" @@ -279,13 +280,13 @@ msgid "Connector" msgstr "" msgid "Movement:" -msgstr "Movement:" +msgstr "Movimento:" msgid "Movement" -msgstr "Movement" +msgstr "Movimento" msgid "Height" -msgstr "Height" +msgstr "Altezza" msgid "Edit connectors" msgstr "" @@ -312,10 +313,10 @@ msgid "After cut" msgstr "" msgid "Cut to parts" -msgstr "Cut to parts" +msgstr "Taglia le parti" msgid "Auto Segment" -msgstr "Auto Segment" +msgstr "Segmento automatico" msgid "Perform cut" msgstr "Effettua taglio" @@ -327,7 +328,7 @@ msgid "Connectors" msgstr "" msgid "Type" -msgstr "Type" +msgstr "Tipo" msgid "Style" msgstr "Stile" @@ -401,15 +402,15 @@ msgid "Detail level" msgstr "Livello di dettaglio" msgid "Decimate ratio" -msgstr "Rapporto di decimazione" +msgstr "Rapporto di riduzione" #, boost-format msgid "" "Processing model '%1%' with more than 1M triangles could be slow. It is " "highly recommended to simplify the model." msgstr "" -"Processing model '%1%' with more than 1M triangles could be slow. It is " -"highly recommended to simplify the model." +"Lo slicing del modello \"%1%\" con più di 1 milione di triangoli potrebbe " +"essere lento. Si consiglia di semplificare il modello." msgid "Simplify model" msgstr "Semplifica modello" @@ -419,8 +420,8 @@ msgstr "Semplifica" msgid "Simplification is currently only allowed when a single part is selected" msgstr "" -"La semplificazione è attualmente consentita solo quando è selezionata una " -"singola parte" +"La semplificazione è consentita solo quando viene selezionata una singola " +"parte" msgid "Error" msgstr "Errore" @@ -452,34 +453,34 @@ msgid "%1%" msgstr "%1%" msgid "Can't apply when proccess preview." -msgstr "Non si può applicare durante la creazione dell'anteprima." +msgstr "Non applicabile durante l'elaborazione dell'anteprima." msgid "Operation already cancelling. Please wait few seconds." msgstr "Operazione già annullata. Si prega di attendere qualche secondo." msgid "Face recognition" -msgstr "Face recognition" +msgstr "Riconoscimento facciale" msgid "Perform Recognition" -msgstr "Perform Recognition" +msgstr "Esegui riconoscimento" msgid "Brush size" -msgstr "Brush size" +msgstr "Misura del pennello" msgid "Brush shape" -msgstr "Brush shape" +msgstr "Forma del pennello" msgid "Enforce seam" -msgstr "Enforce seam" +msgstr "Forza la giunzione" msgid "Block seam" -msgstr "Block seam" +msgstr "Blocca giunzione" msgid "Seam painting" -msgstr "Seam painting" +msgstr "Pittura giunzione" msgid "Remove selection" -msgstr "Remove selection" +msgstr "Rimuovi selezione" msgid "Shift + Mouse move up or dowm" msgstr "" @@ -488,16 +489,16 @@ msgid "Rotate text" msgstr "" msgid "Text shape" -msgstr "Text shape" +msgstr "Formato testo" msgid "Font" msgstr "Font" msgid "Thickness" -msgstr "Thickness" +msgstr "Spessore" msgid "Input text" -msgstr "Input text" +msgstr "Inserisci testo" msgid "Embeded" msgstr "" @@ -530,39 +531,42 @@ msgstr "Indefinito" #, boost-format msgid "%1% was replaced with %2%" -msgstr "%1% was replaced with %2%" +msgstr "%1% è stato sostituito con %2%" msgid "The configuration may be generated by a newer version of BambuStudio." msgstr "" -"The configuration may have been generated by a newer version of Bambu Studio." +"La configurazione potrebbe essere generata da una versione più recente di " +"Bambu Studio." msgid "Some values have been replaced. Please check them:" -msgstr "Some values have been replaced. Please check them:" +msgstr "Alcuni valori sono stati sostituiti. Per favore controllali:" msgid "Process" -msgstr "Process" +msgstr "Processo" msgid "Filament" msgstr "Filamento" msgid "Machine" -msgstr "Machine" +msgstr "Macchina" msgid "Configuration package was loaded, but some values were not recognized." msgstr "" -"The configuration package was loaded, but some values were not recognized." +"Il pacchetto di configurazione è stato caricato, ma alcuni valori non sono " +"stati riconosciuti." #, boost-format msgid "" "Configuration file \"%1%\" was loaded, but some values were not recognized." msgstr "" -"The configuration file “%1%” was loaded, but some values were not recognized." +"Il file di configurazione \"%1%\" è stato caricato, ma alcuni valori non " +"sono stati riconosciuti." msgid "V" msgstr "V" msgid "Internal Version" -msgstr "Internal Version" +msgstr "Versione interna" msgid "Version" msgstr "Versione" @@ -571,8 +575,8 @@ msgid "" "BambuStudio will terminate because of running out of memory.It may be a bug. " "It will be appreciated if you report the issue to our team." msgstr "" -"Bambu Studio has run out of memory and will close. This may be a bug. Please " -"report this error to Technical Support." +"Bambu Studio ha esaurito la memoria e verrà chiuso. Questo potrebbe essere " +"un bug. Segnala questo errore al supporto tecnico." msgid "Fatal error" msgstr "Errore irreversibile" @@ -580,31 +584,32 @@ msgstr "Errore irreversibile" msgid "" "BambuStudio will terminate because of a localization error. It will be " "appreciated if you report the specific scenario this issue happened." -msgstr "A localization error has occurred, and Bambu Studio will close. " +msgstr "" +"Si è verificato un errore nella localizzazione e Bambu Studio verrà chiuso. " msgid "Critical error" msgstr "Errore critico" #, boost-format msgid "BambuStudio got an unhandled exception: %1%" -msgstr "BambuStudio got an unhandled exception: %1%" +msgstr "BambuStudio ha ricevuto un'eccezione non gestita: %1%" msgid "Downloading Bambu Network Plug-in" -msgstr "Downloading Bambu Network Plug-in" +msgstr "Scaricando il plug-in Bambu Network" msgid "Incorrect password" -msgstr "Incorrect password" +msgstr "Password errata" #, c-format, boost-format msgid "Connect %s failed! [SN:%s, code=%s]" -msgstr "Connect %s failed! [SN:%s, code=%s]" +msgstr "Connessione %s non riuscita! [SN: %s, codice=%s]" msgid "" "BambuStudio configuration file may be corrupted and is not abled to be " "parsed.Please delete the file and try again." msgstr "" -"Bambu Studio configuration file is not able to be parsed and may be " -"corrupted. Please delete the file and try again." +"Il file di configurazione di Bambu Studio non può essere analizzato e " +"potrebbe essere danneggiato. Elimina il file e riprova." #, c-format, boost-format msgid "" @@ -622,63 +627,63 @@ msgstr "Caricamento configurazione" #, c-format, boost-format msgid "Click to download new version in default browser: %s" -msgstr "Click to download new version in default browser: %s" +msgstr "Fai clic per scaricare la nuova versione nel browser predefinito: %s" msgid "The Bambu Studio needs an upgrade" -msgstr "Bambu Studio needs an update" +msgstr "Bambu Studio necessita di aggiornamento" msgid "This is the newest version." -msgstr "This is the newest version." +msgstr "Hai la versione più recente." msgid "Info" msgstr "Info" msgid "Rebuild" -msgstr "Rebuild" +msgstr "Ricostruire" msgid "Loading current presets" -msgstr "Loading current presets" +msgstr "Caricamento dei preset correnti" msgid "Loading a mode view" -msgstr "Loading a mode view" +msgstr "Caricamento di una modalità di visualizzazione" msgid "Choose one file (3mf):" -msgstr "Choose one file (3mf):" +msgstr "Scegli file (3mf):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" -msgstr "Choose one or more files (3mf/step/stl/svg/obj/amf):" +msgstr "Scegli uno o più file (3mf/step/stl/svg/obj/amf):" msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" -msgstr "Choose one file (.gcode/.gco/.g/.ngc/ngc):" +msgstr "Scegli file (.gcode/.gco/.g/.ngc/ngc):" msgid "Some presets are modified." -msgstr "Some presets are modified." +msgstr "Alcuni preset vengono modificati." msgid "" "You can keep the modifield presets to the new project, discard or save " "changes as new presets." msgstr "" -"You can keep the modified presets for the new project, discard, or save " -"changes as new presets." +"È possibile conservare i preset modificati per il nuovo progetto, eliminarli " +"o salvare le modifiche come nuovi preset." msgid "User logged out" -msgstr "User logged out" +msgstr "Utente disconnesso" msgid "new or open project file is not allowed during the slicing process!" -msgstr "new or open project file is not allowed during the slicing process!" +msgstr "non è consentito aprire un nuovo file progetto durante lo slicing!" msgid "Open Project" -msgstr "Open Project" +msgstr "Apri Progetto" msgid "" "The version of Bambu studio is too low and needs to be updated to the latest " "version before it can be used normally" msgstr "" -"The version of Bambu Studio is too low and needs to be updated to the latest " -"version before it can be used normally" +"La versione Bambu Studio è obsoleta, devi aggiornarla all'ultima versione " +"prima di poterla utilizzare normalmente" msgid "Login information expired. Please login again." -msgstr "Login information expired. Please login again." +msgstr "Le informazioni di login sono scadute. Effettua nuovamente il login." msgid "Privacy Policy Update" msgstr "" @@ -687,10 +692,10 @@ msgid "Loading" msgstr "Caricamento" msgid "Loading user preset" -msgstr "Loading user preset" +msgstr "Caricamento del preset utente" msgid "Switching application language" -msgstr "Switching application language" +msgstr "Cambio lingua applicazione" msgid "Select the language" msgstr "Seleziona la lingua" @@ -702,16 +707,16 @@ msgid "*" msgstr "*" msgid "The uploads are still ongoing" -msgstr "The uploads are still ongoing" +msgstr "I caricamenti sono ancora in corso" msgid "Stop them and continue anyway?" -msgstr "Stop them and continue anyway?" +msgstr "Ferma e continua comunque?" msgid "Ongoing uploads" -msgstr "Ongoing uploads" +msgstr "Caricamenti in corso" msgid "Select a G-code file:" -msgstr "Select a G-code file:" +msgstr "Seleziona file G-code:" msgid "Import File" msgstr "" @@ -720,56 +725,56 @@ msgid "Delete" msgstr "Elimina" msgid "Choose files" -msgstr "Choose files" +msgstr "Scegli file" msgid "New Folder" msgstr "" msgid "Open" -msgstr "Open" +msgstr "Apri" msgid "Rename" msgstr "Rinomina" msgid "Bambu Studio GUI initialization failed" -msgstr "Bambu Studio GUI initialization failed" +msgstr "Inizializzazione della GUI di Bambu Studio non riuscita" #, boost-format msgid "Fatal error, exception catched: %1%" -msgstr "Fatal error, eccezione registrata: %1%" +msgstr "Errore irreversibile, eccezione: %1%" msgid "Quality" msgstr "Qualità" msgid "Shell" -msgstr "Shell" +msgstr "Guscio" msgid "Infill" msgstr "Riempimento" msgid "Support" -msgstr "Support" +msgstr "Supporto" msgid "Flush options" -msgstr "Flush options" +msgstr "Opzioni spurgo" msgid "Speed" msgstr "Velocità" msgid "Strength" -msgstr "Strength" +msgstr "Resistenza" msgid "Top Solid Layers" -msgstr "Top solid layers" +msgstr "Layer solidi superiori" msgid "Top Minimum Shell Thickness" -msgstr "Top minimum shell thickness" +msgstr "Spessore minimo del guscio superiore" msgid "Bottom Solid Layers" -msgstr "Bottom solid layers" +msgstr "Layers solidi inferiori" msgid "Bottom Minimum Shell Thickness" -msgstr "Bottom minimum shell thickness" +msgstr "Spessore minimo del guscio inferiore" msgid "Ironing" msgstr "Stiratura" @@ -787,7 +792,7 @@ msgid "Wipe options" msgstr "Opzioni pulitura" msgid "Bed adhension" -msgstr "Bed adhesion" +msgstr "Adesione al piano" msgid "Advanced" msgstr "Avanzate" @@ -796,7 +801,7 @@ msgid "Add part" msgstr "Aggiungi parte" msgid "Add negative part" -msgstr "Add Negative Part" +msgstr "Aggiungi parte negativa" msgid "Add modifier" msgstr "Aggiungi modificatore" @@ -808,19 +813,19 @@ msgid "Add support enforcer" msgstr "Aggiungi rinforzo supporto" msgid "Select settings" -msgstr "Select settings" +msgstr "Seleziona impostazioni" msgid "Hide" -msgstr "Hide" +msgstr "Nascondi" msgid "Show" -msgstr "Show" +msgstr "Mostra" msgid "Del" msgstr "" msgid "Delete the selected object" -msgstr "Delete the selected object" +msgstr "Elimina l'oggetto selezionato" msgid "Edit Text" msgstr "" @@ -829,13 +834,13 @@ msgid "Load..." msgstr "Caricamento..." msgid "Cube" -msgstr "Cube" +msgstr "Cubo" msgid "Cylinder" msgstr "Cilindro" msgid "Cone" -msgstr "Cone" +msgstr "Cono" msgid "Height range Modifier" msgstr "" @@ -847,137 +852,137 @@ msgid "Change type" msgstr "Cambia tipo" msgid "Set as an individual object" -msgstr "Set as An Individual Object" +msgstr "Imposta come singolo oggetto" msgid "Set as individual objects" -msgstr "Set as Individual Objects" +msgstr "Imposta come singoli oggetti" msgid "Printable" msgstr "Stampabile" msgid "Fix model" -msgstr "Fix Model" +msgstr "Correggi il modello" msgid "Export as STL" msgstr "Esporta come STL" msgid "Reload from disk" -msgstr "Reload from disk" +msgstr "Ricarica da disco" msgid "Reload the selected parts from disk" -msgstr "Reload the selected parts from disk" +msgstr "Ricarica le parti selezionate da disco" msgid "Replace with STL" -msgstr "Replace with STL" +msgstr "Sostituisci con STL" msgid "Replace the selected part with new STL" -msgstr "Replace the selected part with new STL" +msgstr "Sostituisci la parte selezionata con un nuovo STL" msgid "Change filament" -msgstr "Change filament" +msgstr "Cambia filamento" msgid "Set filament for selected items" -msgstr "Set filament for selected items" +msgstr "Imposta filamento per gli elementi selezionati" msgid "Default" msgstr "Predefinito" #, c-format, boost-format msgid "Filament %d" -msgstr "Filament %d" +msgstr "Filamento %d" msgid "active" msgstr "attivo" msgid "Scale to build volume" -msgstr "Scale to build volume" +msgstr "Scala per creare volume" msgid "Scale an object to fit the build volume" -msgstr "Scale an object to fit the build volume" +msgstr "Ridimensiona un oggetto per adattarlo al volume di costruzione" msgid "Flush Options" -msgstr "Flush Options" +msgstr "Opzioni spurgo" msgid "Flush into objects' infill" -msgstr "Flush into objects' infill" +msgstr "Spurga nel riempimento oggetto" msgid "Flush into this object" -msgstr "Flush into this object" +msgstr "Spurga in questo oggetto" msgid "Flush into objects' support" -msgstr "Flush into objects' support" +msgstr "Spurga nei supporti dell'oggetto" msgid "Edit in Parameter Table" -msgstr "Edit in Parameter Table" +msgstr "Modifica nella tabella dei parametri" msgid "Convert from inch" -msgstr "Convert from Inches" +msgstr "Converti da pollici" msgid "Restore to inch" -msgstr "Restore to Inch" +msgstr "Ripristina in pollici" msgid "Convert from meter" -msgstr "Convert from Meters" +msgstr "Converti da metri" msgid "Restore to meter" -msgstr "Restore to Meter" +msgstr "Ripristina in metri" msgid "Assemble" -msgstr "Assemble" +msgstr "Assembla" msgid "Assemble the selected objects to an object with multiple parts" -msgstr "Assemble the selected objects into an object with multiple parts" +msgstr "Assembla gli oggetti selezionati in un oggetto con più parti" msgid "Assemble the selected objects to an object with single part" -msgstr "Assemble the selected objects into an object with single part" +msgstr "Assembla gli oggetti selezionati in un oggetto con una singola parte" msgid "Assemble the selected parts to a single part" -msgstr "Assemble the selected parts into a single part" +msgstr "Assembla le parti selezionate in un'unica parte" msgid "Along X axis" -msgstr "Lungo asse X" +msgstr "Lungo l'asse X" msgid "Mirror along the X axis" -msgstr "Mirror along the X Axis" +msgstr "Specchia lungo l'asse X" msgid "Along Y axis" -msgstr "Lungo asse Y" +msgstr "Lungo l'asse Y" msgid "Mirror along the Y axis" -msgstr "Mirror along the Y Axis" +msgstr "Specchia lungo l'asse Y" msgid "Along Z axis" msgstr "Lungo l'asse Z" msgid "Mirror along the Z axis" -msgstr "Mirror along the Z Axis" +msgstr "Specchia lungo l'asse Z" msgid "Mirror" msgstr "Specchia" msgid "Mirror object" -msgstr "Mirror object" +msgstr "Specchia Oggetto" msgid "Invalidate cut info" msgstr "" msgid "Add Primitive" -msgstr "Add Primitive" +msgstr "Aggiungi primitiva" msgid "Show Labels" -msgstr "Show Labels" +msgstr "Mostra Etichette" msgid "To objects" msgstr "In oggetti" msgid "Split the selected object into multiple objects" -msgstr "Split the selected object into multiple objects" +msgstr "Dividi l'oggetto selezionato in più oggetti" msgid "To parts" msgstr "In parti" msgid "Split the selected object into multiple parts" -msgstr "Split the selected object into multiple parts" +msgstr "Dividi l'oggetto selezionato in più parti" msgid "Split" msgstr "Dividi" @@ -986,67 +991,67 @@ msgid "Split the selected object" msgstr "Dividi l'oggetto selezionato" msgid "Auto orientation" -msgstr "Auto orientation" +msgstr "Orientamento automatico" msgid "Auto orient the object to improve print quality." -msgstr "Auto orient the object to improve print quality." +msgstr "Orienta automaticamente l'oggetto per migliorare la qualità di stampa." msgid "Split the selected object into mutiple objects" -msgstr "Split the selected object into mutiple objects" +msgstr "Dividi l'oggetto selezionato in più oggetti" msgid "Split the selected object into mutiple parts" -msgstr "Split the selected object into mutiple parts" +msgstr "Dividi l'oggetto selezionato in più parti" msgid "Select All" -msgstr "Select All" +msgstr "Seleziona tutto" msgid "select all objects on current plate" -msgstr "Select all objects on the current plate" +msgstr "Seleziona tutti gli oggetti sul piatto corrente" msgid "Delete All" -msgstr "Delete All" +msgstr "Elimina tutto" msgid "delete all objects on current plate" -msgstr "Delete all objects on the current plate" +msgstr "Elimina tutti gli oggetti sul piatto corrente" msgid "Arrange" msgstr "Disponi" msgid "arrange current plate" -msgstr "Arrange current plate" +msgstr "Disponi sul piatto corrente" msgid "Auto Rotate" -msgstr "Auto Rotate" +msgstr "Rotazione automatica" msgid "auto rotate current plate" -msgstr "Auto rotate current plate" +msgstr "Rotazione automatica piatto corrente" msgid "Remove the selected plate" -msgstr "Remove the selected plate" +msgstr "Rimuovi il piatto selezionato" msgid "Clone" -msgstr "Clone" +msgstr "Clona" msgid "Simplify Model" -msgstr "Simplify Model" +msgstr "Semplifica Modello" msgid "Center" -msgstr "Center" +msgstr "Centro" msgid "Edit Process Settings" -msgstr "Edit Process Settings" +msgstr "Modifica le impostazioni del processo" msgid "Edit print parameters for a single object" -msgstr "Edit print parameters for a single object" +msgstr "Modifica i parametri di stampa per singolo oggetto" msgid "Change Filament" -msgstr "Change Filament" +msgstr "Cambia filamento" msgid "Set Filament for selected items" -msgstr "Set Filament for selected items" +msgstr "Imposta filamento per gli elementi selezionati" msgid "current" -msgstr "current" +msgstr "Attuale" msgid "Set Unprintable" msgstr "Imposta non stampabile" @@ -1055,10 +1060,10 @@ msgid "Set Printable" msgstr "Imposta stampabile" msgid "Unlock" -msgstr "Unlock" +msgstr "Sblocca" msgid "Lock" -msgstr "Lock" +msgstr "Blocca" msgid "Name" msgstr "Nome" @@ -1069,14 +1074,14 @@ msgstr "Fila." #, c-format, boost-format msgid "%1$d error repaired" msgid_plural "%1$d errors repaired" -msgstr[0] "%1$d error repaired" -msgstr[1] "%1$d errors repaired" +msgstr[0] "%1$d Errore riparato" +msgstr[1] "%1$d Errori riparati" #, c-format, boost-format msgid "Error: %1$d non-manifold edge." msgid_plural "Error: %1$d non-manifold edges." -msgstr[0] "Error: %1$d non-manifold edge." -msgstr[1] "Error: %1$d non-manifold edges." +msgstr[0] "Errore: %1$d bordo diverso dal collettore." +msgstr[1] "Errore: %1$d bordi diversi dal collettore." msgid "Remaining errors" msgstr "Errori rimanenti" @@ -1084,29 +1089,37 @@ msgstr "Errori rimanenti" #, c-format, boost-format msgid "%1$d non-manifold edge" msgid_plural "%1$d non-manifold edges" -msgstr[0] "%1$d non-manifold edge" -msgstr[1] "%1$d non-manifold edges" +msgstr[0] "%1$d bordo diverso dal collettore" +msgstr[1] "%1$d bordi diversi dal collettore" msgid "Right click the icon to fix model object" -msgstr "Right click the icon to fix model object" +msgstr "" +"Fai clic con il pulsante destro del mouse sull'icona per correggere " +"l'oggetto del modello" msgid "Right button click the icon to drop the object settings" -msgstr "Right click the icon to drop the object settings" +msgstr "" +"Fai clic con pulsante destro del mouse sull'icona per eliminare le " +"impostazioni dell'oggetto" msgid "Click the icon to reset all settings of the object" -msgstr "Click the icon to reset all settings of the object" +msgstr "Clicca sull'icona per ripristinare tutte le impostazioni dell'oggetto" msgid "Right button click the icon to drop the object printable property" -msgstr "Right click the icon to drop the object printable property" +msgstr "" +"Fai clic con pulsante destro del mouse sull'icona per eliminare le proprietà " +"stampa dell'oggetto" msgid "Click the icon to toggle printable property of the object" -msgstr "Click the icon to toggle printable properties of the object" +msgstr "" +"Clicca sull'icona per attivare o disattivare le proprietà stampabili " +"dell'oggetto" msgid "Click the icon to edit support painting of the object" -msgstr "Click the icon to edit support painting of the object" +msgstr "Clicca sull'icona per modificare la pittura del supporto dell'oggetto" msgid "Click the icon to edit color painting of the object" -msgstr "Click the icon to edit color painting for the object" +msgstr "Clicca sull'icona per modificare i colori dell'oggetto" msgid "Click the icon to shift this object to the bed" msgstr "" @@ -1121,17 +1134,19 @@ msgid "Generic" msgstr "Generico" msgid "Add Modifier" -msgstr "Add Modifier" +msgstr "Aggiungi modificatore" msgid "Switch to per-object setting mode to edit modifier settings." -msgstr "Switch to per-object setting mode to edit modifier settings." +msgstr "" +"Passa alla modalità di impostazione oggetto per modificare le impostazioni " +"del modificatore." msgid "" "Switch to per-object setting mode to edit process settings of selected " "objects." msgstr "" -"Switch to per-object setting mode to edit process settings of selected " -"objects." +"Passa alla modalità di impostazione oggetto per modificare le impostazioni " +"di processo degli oggetti selezionati." msgid "Delete connector from object which is a part of cut" msgstr "" @@ -1159,13 +1174,14 @@ msgid "Delete all connectors" msgstr "" msgid "Deleting the last solid part is not allowed." -msgstr "Deleting the last solid part is not allowed." +msgstr "Non è consentita l'eliminazione dell'ultima parte solida." msgid "The target object contains only one part and can not be splited." -msgstr "The target object contains only one part and cannot be split." +msgstr "" +"L'oggetto di destinazione contiene solo una parte e non può essere diviso." msgid "Assembly" -msgstr "Assembly" +msgstr "Assemblaggio" msgid "Cut Connectors information" msgstr "" @@ -1198,7 +1214,7 @@ msgid "Settings for height range" msgstr "" msgid "Object" -msgstr "Object" +msgstr "Oggetto" msgid "Part" msgstr "Parte" @@ -1207,26 +1223,27 @@ msgid "Layer" msgstr "Layer" msgid "Selection conflicts" -msgstr "Selection conflicts" +msgstr "Conflitti di selezione" msgid "" "If first selected item is an object, the second one should also be object." msgstr "" -"If the first selected item is an object, the second one should also be an " -"object." +"Se il primo elemento selezionato è un oggetto, anche il secondo deve essere " +"un oggetto." msgid "" "If first selected item is a part, the second one should be part in the same " "object." msgstr "" -"If the first selected item is a part, the second one should be a part in the " -"same object." +"Se il primo elemento selezionato è una parte, il secondo deve far parte " +"dello stesso oggetto." msgid "The type of the last solid object part is not to be changed." -msgstr "The type of the last solid object part cannot be changed." +msgstr "" +"Il tipo dell'ultima parte dell'oggetto solido non può essere modificato." msgid "Negative Part" -msgstr "Negative Part" +msgstr "Parte negativa" msgid "Modifier" msgstr "Modificatore" @@ -1241,7 +1258,7 @@ msgid "Type:" msgstr "Tipo:" msgid "Choose part type" -msgstr "Choose part type" +msgstr "Scegli tipo di parte" msgid "Enter new name" msgstr "Inserisci un nuovo nome" @@ -1250,23 +1267,23 @@ msgid "Renaming" msgstr "Rinomina" msgid "Repairing model object" -msgstr "Repairing model object" +msgstr "Riparazione oggetto" msgid "Following model object has been repaired" msgid_plural "Following model objects have been repaired" -msgstr[0] "The following model object has been repaired" -msgstr[1] "The following model objects have been repaired" +msgstr[0] "Il seguente oggetto del modello è stato riparato" +msgstr[1] "I seguenti oggetti del modello sono stati riparati" msgid "Failed to repair folowing model object" msgid_plural "Failed to repair folowing model objects" -msgstr[0] "Failed to repair the following model object" -msgstr[1] "Failed to repair the following model objects" +msgstr[0] "Impossibile riparare il seguente oggetto modello" +msgstr[1] "Impossibile riparare i seguenti oggetti modello" msgid "Repairing was canceled" msgstr "La riparazione è stata annullata" msgid "Additional process preset" -msgstr "Additional process preset" +msgstr "Preset processo aggiuntivo" msgid "Remove parameter" msgstr "Rimuovi parametro" @@ -1281,22 +1298,23 @@ msgid "Add height range" msgstr "" msgid "Invalid numeric." -msgstr "Invalid numeric." +msgstr "Numero non valido." msgid "one cell can only be copied to one or multiple cells in the same column" -msgstr "One cell can only be copied to one or more cells in the same column." +msgstr "" +"Una cella può essere copiata solo in una o più celle della stessa colonna." msgid "multiple cells copy is not supported" -msgstr "Copying multiple cells is not supported." +msgstr "Copia di celle multiple non supportata." msgid "Outside" -msgstr "Outside" +msgstr "Esterno" msgid "Auto" -msgstr "Auto" +msgstr "Automatico" msgid "Manual" -msgstr "Manual" +msgstr "Manuale" msgid "No-brim" msgstr "No-brim" @@ -1308,46 +1326,46 @@ msgid "Layer height" msgstr "Altezza layer" msgid "Wall loops" -msgstr "Wall loops" +msgstr "Loop pareti" msgid "Infill density(%)" -msgstr "Infill density(%)" +msgstr "Densità riempimento (%)" msgid "Auto Brim" -msgstr "Auto Brim" +msgstr "Brim automatico" msgid "Outer wall speed" -msgstr "Outer wall speed" +msgstr "Velocità parete esterna" msgid "Plate" -msgstr "Plate" +msgstr "Piatto" msgid "Brim" msgstr "Brim" msgid "Object/Part Setting" -msgstr "Object/part setting" +msgstr "Impostazione oggetto/parte" msgid "Reset parameter" -msgstr "Reset parameter" +msgstr "Ripristina parametro" msgid "Multicolor Print" -msgstr "Multicolor Print" +msgstr "Stampa multicolore" msgid "Line Type" -msgstr "Line Type" +msgstr "Tipo linea" msgid "More" msgstr "Altro" msgid "Open Preferences." -msgstr "Open Preferences" +msgstr "Apri Preferenze" msgid "Open next tip." -msgstr "Open next tip" +msgstr "Apri suggerimento successivo" msgid "Open Documentation in web browser." -msgstr "Open documentation in web browser" +msgstr "Aprire la documentazione nel browser web" msgid "Pause:" msgstr "" @@ -1362,31 +1380,31 @@ msgid "Custom G-code" msgstr "G-code personalizzato" msgid "Enter Custom G-code used on current layer:" -msgstr "Enter Custom G-code used on current layer:" +msgstr "Inserisci G-code personalizzato utilizzato nel layer corrente:" msgid "OK" -msgstr "OK" +msgstr "Ok" msgid "Jump to Layer" -msgstr "Jump to layer" +msgstr "Vai al layer" msgid "Jump to layer" -msgstr "Jump to layer" +msgstr "Vai al layer" msgid "Please enter the layer number" -msgstr "Please enter the layer number." +msgstr "Inserisci numero del layer" msgid "Add Pause" -msgstr "Add Pause" +msgstr "Aggiungi pausa" msgid "Add Custom G-code" -msgstr "Add Custom G-code" +msgstr "Aggiungi G-code personalizzato" msgid "Add Custom Template" -msgstr "Add Custom Template" +msgstr "Aggiungi template personalizzato" msgid "Filament " -msgstr "Filament " +msgstr "Filamento" msgid "Delete Pause" msgstr "" @@ -1404,16 +1422,16 @@ msgid "Delete Filament Change" msgstr "" msgid "No printer" -msgstr "No printer" +msgstr "Nessuna stampante" msgid "..." msgstr "" msgid "?" -msgstr "?" +msgstr " ?" msgid "Empty" -msgstr "Empty" +msgstr "Vuoto" msgid "AMS" msgstr "AMS" @@ -1422,58 +1440,60 @@ msgid "Ams filament backup" msgstr "" msgid "AMS not connected" -msgstr "AMS not connected" +msgstr "AMS non collegato" msgid "Cali" -msgstr "Cali" +msgstr "Calib." msgid "Calibration of extrusion" -msgstr "Calibration of extrusion" +msgstr "Calibrazione estrusione" msgid "Load Filament" -msgstr "Load" +msgstr "Carica" msgid "Unload Filament" -msgstr "Unload" +msgstr "Scarica" msgid "Ext Spool" -msgstr "Ext Spool" +msgstr "Bobina esterna" msgid "Tips" -msgstr "Tips" +msgstr "Suggerimenti" msgid "Guide" -msgstr "Guide" +msgstr "Guida" msgid "Retry" -msgstr "Retry" +msgstr "Riprova" msgid "Calibrating AMS..." -msgstr "Calibrating AMS..." +msgstr "Calibrazione AMS..." msgid "A problem occured during calibration. Click to view the solution." -msgstr "A problem occured during calibration. Click to view the solution." +msgstr "" +"Si è verificato un problema durante la calibrazione. Clicca per visualizzare " +"la soluzione." msgid "Calibrate again" -msgstr "Calibrate again" +msgstr "Calibra di nuovo" msgid "Cancel calibration" -msgstr "Cancel calibration" +msgstr "Annulla calibrazione" msgid "Heat the nozzle" -msgstr "Heat the nozzle" +msgstr "Riscalda nozzle" msgid "Cut filament" -msgstr "Cut filament" +msgstr "Taglia il filamento" msgid "Pull back current filament" -msgstr "Pull back the current filament" +msgstr "Ritrai il filamento corrente" msgid "Push new filament into extruder" -msgstr "Push new filament into extruder" +msgstr "Inserisci il nuovo filamento nell'estrusore" msgid "Purge old filament" -msgstr "Purge old filament" +msgstr "Spurga vecchio filamento" msgid "Feed new filament from external spool" msgstr "" @@ -1485,8 +1505,8 @@ msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " "load or unload filiament." msgstr "" -"Choose an AMS slot then press \"Load\" or \"Unload\" to automatically load " -"or unload filament." +"Scegli una slot AMS, premi \"Carica\" o \"Scarica\" per caricare o scaricare " +"automaticamente il filamento." msgid "Edit" msgstr "Modifica" @@ -1495,29 +1515,30 @@ msgid "" "All the selected objects are on the locked plate,\n" "We can not do auto-arrange on these objects." msgstr "" -"All the selected objects are on a locked plate.\n" -"Cannot auto-arrange these objects." +"Tutti gli oggetti selezionati si trovano su una piatto bloccato.\n" +"Non è possibile disporre automaticamente questi oggetti." msgid "No arrangable objects are selected." -msgstr "No arrangable objects are selected." +msgstr "Non sono stati selezionati oggetti ordinabili." msgid "" "This plate is locked,\n" "We can not do auto-arrange on this plate." msgstr "" -"This plate is locked.\n" -"We cannot auto-arrange this plate." +"Il piatto è bloccato.\n" +"Non puoi organizzare automaticamente questo piatto." msgid "Arranging..." -msgstr "Arranging..." +msgstr "Disponendo..." msgid "" "Arrange failed. Found some exceptions when processing object geometries." msgstr "" -"Arrange failed. Found some exceptions when processing object geometries." +"Disposizione fallita. Riscontrate eccezioni durante l'elaborazione delle " +"geometrie degli oggetti" msgid "Arranging" -msgstr "Arranging" +msgstr "Disposizione" msgid "Arranging canceled." msgstr "Disposizione annullata." @@ -1525,8 +1546,8 @@ msgstr "Disposizione annullata." msgid "" "Arranging is done but there are unpacked items. Reduce spacing and try again." msgstr "" -"Arranging complete, but some items were not able to be arranged. Reduce " -"spacing and try again." +"Disposizione completata, ma non è stato possibile disporre alcuni oggetti. " +"Ridurre lo spazio e riprovare." msgid "Arranging done." msgstr "Disposizione completata." @@ -1538,142 +1559,147 @@ msgid "" "%s" msgstr "" "La disposizione ha ignorato i seguenti oggetti che non possono entrare in un " -"singolo piano:\n" +"singolo piatto:\n" "%s" msgid "" "All the selected objects are on the locked plate,\n" "We can not do auto-orient on these objects." msgstr "" -"All the selected objects are on a locked plate,\n" -"We cannot auto-orient these objects." +"Tutti gli oggetti selezionati si trovano su un piatto bloccato,\n" +"Non è possibile orientare automaticamente questi oggetti." msgid "" "This plate is locked,\n" "We can not do auto-orient on this plate." msgstr "" -"This plate is locked.\n" -"We cannot auto-orient this plate." +"Il piatto è bloccato.\n" +"Non puoi orientare automaticamente questo piatto." msgid "Orienting..." -msgstr "Orienting..." +msgstr "Orientamento..." msgid "Orienting" -msgstr "Orienting" +msgstr "Orientamento" msgid "Error! Unable to create thread!" -msgstr "Error. Unable to create thread." +msgstr "Errore. Impossibile creare il processo." msgid "Exception" -msgstr "Exception" +msgstr "Eccezione" msgid "Logging in" -msgstr "Logging in" +msgstr "Accesso in corso..." msgid "Login failed" -msgstr "Login failed" +msgstr "Login non riuscito" msgid "The region parameter is incorrrect" -msgstr "The region parameter is incorrrect." +msgstr "Il parametro del Paese non è corretto." msgid "Failure of printer login" -msgstr "Printer login failure" +msgstr "Errore di accesso alla stampante" msgid "Failed to get ticket" -msgstr "Failed to get ticket" +msgstr "Impossibile recuperare il ticket" msgid "User authorization timeout" -msgstr "User authorization timeout" +msgstr "Timeout autorizzazione utente" msgid "Failure of bind" -msgstr "Binding failure" +msgstr "Errore associazione" msgid "Unknown Failure" -msgstr "Unknown Failure" +msgstr "Fallimento sconosciuto" msgid "Please check the printer network connection." -msgstr "Please check the printer network connection." +msgstr "Controlla la connessione rete della stampante." msgid "Abnormal print file data. Please slice again" -msgstr "Abnormal print file data. Please slice again" +msgstr "Dati file di stampa anormali. Eseguire nuovamente l'elaborazione" msgid "Task canceled" -msgstr "Task canceled" +msgstr "Attività annullata" msgid "Upload task timed out. Please check the network problem and try again" -msgstr "Upload task timed out. Please check the network and try again" +msgstr "L'attività di caricamento è scaduta. Controlla la rete e riprova" msgid "Cloud service connection failed. Please try again." -msgstr "Cloud service connection failed. Please try again." +msgstr "Connessione al servizio cloud non riuscita. Riprovare." msgid "Print file not found, please slice again" -msgstr "Print file not found, please slice again" +msgstr "File di stampa non trovato, elaborarlo nuovamente" msgid "" "The print file exceeds the maximum allowable size (1GB). Please simplify the " "model and slice again" msgstr "" -"The print file exceeds the maximum allowable size (1GB). Please simplify the " -"model and slice again" +"Il file di stampa supera la dimensione massima consentita (1 GB). Semplifica " +"il modello ed elaboralo di nuovo" msgid "Failed uploading print file" -msgstr "Failed uploading print file" +msgstr "Caricamento del file di stampa non riuscito" msgid "Wrong Access code" -msgstr "Wrong Access code" +msgstr "Codice di accesso errato" msgid "Sending print job over LAN" -msgstr "Sending print job over LAN" +msgstr "Invia stampa tramite LAN" msgid "Sending print job through cloud service" -msgstr "Sending print job through cloud service" +msgstr "Invia stampa tramite servizio cloud" msgid "Service Unavailable" -msgstr "Service Unavailable" +msgstr "Servizio non disponibile" msgid "Unkown Error." -msgstr "Unknown Error." +msgstr "Errore sconosciuto" msgid "Sending print configuration" -msgstr "Sending print configuration" +msgstr "Invia configurazione di stampa" #, c-format, boost-format msgid "Successfully sent. Will automatically jump to the device page in %ss" -msgstr "Successfully sent. Will automatically jump to the device page in %ss" +msgstr "" +"Inviato con successo. Salta automaticamente alla pagina del dispositivo in %s" msgid "An SD card needs to be inserted before printing via LAN." -msgstr "A MicroSD card needs to be inserted before printing via LAN." +msgstr "" +"È necessario inserire una scheda microSD prima di stampare tramite LAN." msgid "Failed to send the print job. Please try again." -msgstr "Failed to send the print job. Please try again." +msgstr "Impossibile inviare il lavoro di stampa. Riprova." msgid "Send to Printer failed. Please try again." -msgstr "Send to Printer failed. Please try again." +msgstr "Invio a stampante fallito. Riprova." msgid "No space left on Printer SD card" msgstr "" msgid "Sending gcode file over LAN" -msgstr "Sending G-code file over LAN" +msgstr "Invio file G-code tramite LAN" msgid "Sending gcode file through cloud service" -msgstr "Sending G-code file through cloud service" +msgstr "Invia file G-code tramite servizio cloud" msgid "Sending gcode file to sdcard" -msgstr "Sending G-code file to MicroSD card" +msgstr "Invia file G-code a scheda microSD" #, c-format, boost-format msgid "Successfully sent. Close current page in %s s" -msgstr "Successfully sent. Close current page in %s s" +msgstr "Inviato con successo. Chiudi la pagina corrente in %s s" msgid "An SD card needs to be inserted before sending to printer." -msgstr "A MicroSD card needs to be inserted before sending to printer." +msgstr "" +"È necessario inserire una scheda microSD prima di inviarla alla stampante." msgid "Please log out and login to the printer again." -msgstr "Please log out and login to the printer again." +msgstr "Fai un logout e rieffettua il login alla stampante." msgid "Failed uploading print file. Please enter ip address again." -msgstr "Failed uploading print file. Please enter IP address again." +msgstr "" +"Caricamento del file di stampa non riuscito. Inserisci nuovamente " +"l'indirizzo IP." msgid "Choose SLA archive:" msgstr "" @@ -1728,22 +1754,22 @@ msgid "Attention!" msgstr "Attenzione!" msgid "Downloading" -msgstr "Downloading" +msgstr "Scaricando" msgid "Download failed" -msgstr "Download failed" +msgstr "Download non riuscito" msgid "Cancelled" -msgstr "Canceled" +msgstr "Annullato" msgid "Install successfully." -msgstr "Installed successfully" +msgstr "Installato con successo" msgid "Installing" -msgstr "Installing" +msgstr "Installazione…" msgid "Install failed" -msgstr "Install failed" +msgstr "Installazione non riuscita" msgid "Portions copyright" msgstr "Porzioni di copyright" @@ -1752,10 +1778,10 @@ msgid "Copyright" msgstr "Copyright" msgid "License" -msgstr "License" +msgstr "Licenza" msgid "Bambu Studio is licensed under " -msgstr "Bambu Studio is licensed under " +msgstr "Bambu Studio è concesso in licenza sotto" msgid "GNU Affero General Public License, version 3" msgstr "GNU Affero General Public License, versione 3" @@ -1764,18 +1790,18 @@ msgid "" "Bambu Studio is based on PrusaSlicer by Prusa Research, which is from Slic3r " "by Alessandro Ranellucci and the RepRap community" msgstr "" -"Bambu Studio is based on PrusaSlicer by Prusa Research, which is based on " -"Slic3r by Alessandro Ranellucci and the RepRap community" +"Bambu Studio è basato su PrusaSlicer di Prusa Research, che si basa su " +"Slic3r di Alessandro Ranellucci e sulla community RepRap" msgid "Libraries" -msgstr "Libraries" +msgstr "Librerie" msgid "" "This software uses open source components whose copyright and other " "proprietary rights belong to their respective owners" msgstr "" -"This software uses open source components whose copyright and other " -"proprietary rights belong to their respective owners" +"Questo software utilizza componenti open source il cui copyright e altri " +"diritti di proprietà appartengono ai rispettivi proprietari" #, c-format, boost-format msgid "About %s" @@ -1785,49 +1811,50 @@ msgid "" "Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " "Merill(supermerill)." msgstr "" -"Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by " -"Merill(supermerill)." +"Bambu Studio è basato su PrusaSlicer di PrusaResearch e SuperSlicer di " +"Merill (supermerill)." msgid "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." -msgstr "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." +msgstr "PrusaSlicer originariamente basato su Slic3r di Alessandro Ranellucci." msgid "" "Slic3r was created by Alessandro Ranellucci with the help of many other " "contributors." msgstr "" -"Slic3r was created by Alessandro Ranellucci with the help of many other " -"contributors." +"Slic3r è stato creato da Alessandro Ranellucci con l'aiuto di molti altri " +"collaboratori." msgid "Bambu Studio also referenced some ideas from Cura by Ultimaker." -msgstr "Bambu Studio also referenced some ideas from Cura by Ultimaker." +msgstr "" +"Bambu Studio ha anche fatto riferimento ad alcune idee di Cura by Ultimaker." msgid "" "There many parts of the software that come from community contributions, so " "we're unable to list them one-by-one, and instead, they'll be attributed in " "the corresponding code comments." msgstr "" -"There are many parts of the software that come from community contributions, " -"so we're unable to list them one-by-one, and instead, they'll be attributed " -"in the corresponding code comments." +"Esistono molte parti del software che provengono dai contributi della " +"community, quindi non siamo in grado di elencarle una per una e verranno " +"invece attribuite nei commenti ai codici corrispondenti." msgid "AMS Materials Setting" -msgstr "AMS Materials Setting" +msgstr "Impostazione materiali AMS" msgid "Confirm" -msgstr "Confirm" +msgstr "Conferma" msgid "Close" msgstr "Chiudi" msgid "Colour" -msgstr "Color" +msgstr "Colore" msgid "" "Nozzle\n" "Temperature" msgstr "" -"Nozzle\n" -"Temperature" +"Temperatura\n" +"Nozzle" msgid "max" msgstr "max" @@ -1837,22 +1864,24 @@ msgstr "min" #, boost-format msgid "The input value should be greater than %1% and less than %2%" -msgstr "The input value should be greater than %1% and less than %2%" +msgstr "Il valore di input deve essere maggiore di %1% e minore di %2%" msgid "SN" msgstr "SN" msgid "Setting AMS slot information while printing is not supported" -msgstr "Setting AMS slot information while printing is not supported" +msgstr "" +"L'impostazione informazioni sullo slot AMS in fase di stampa non è " +"supportata." msgid "Factors of dynamic flow cali" -msgstr "Factors of dynamic flow cali" +msgstr "Calibra fattori flusso dinamico" msgid "Factor K" -msgstr "Factor K" +msgstr "Fattore K" msgid "Factor N" -msgstr "Factor N" +msgstr "Fattore N" msgid "Setting Virtual slot information while printing is not supported" msgstr "" @@ -1861,10 +1890,10 @@ msgid "Are you sure you want to clear the filament information?" msgstr "" msgid "Please input a valid value (K in 0~0.5)" -msgstr "Please input a valid value (K in 0~0.5)" +msgstr "Inserisci un valore valido (K in 0~0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" -msgstr "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" +msgstr "Inserisci un valore valido (K in 0~0.5, N in 0.6~2.0)" msgid "You need to select the material type and color firet." msgstr "" @@ -1873,121 +1902,125 @@ msgid "Other color" msgstr "" msgid "Dynamic flow calibration" -msgstr "Dynamic flow calibration" +msgstr "Calibrazione dinamica del flusso" msgid "" "The nozzle temp and max volumetric speed will affect the calibration " "results. Please fill in the same values as the actual printing. They can be " "auto-filled by selecting a filament preset." msgstr "" -"The nozzle temp and max volumetric speed will affect the calibration " -"results. Please fill in the same values as the actual printing. They can be " -"auto-filled by selecting a filament preset." +"La temperatura del nozzle e la velocità volumetrica massima influiranno sui " +"risultati della calibrazione. Inserisci gli stessi valori della stampa " +"effettiva. Possono essere riempiti automaticamente selezionando un filamento " +"dal preset." msgid "Nozzle Diameter" -msgstr "Nozzle Diameter" +msgstr "Diametro Nozzle" msgid "Bed Type" -msgstr "Bed Type" +msgstr "Tipo di piano" msgid "Nozzle temperature" msgstr "Temperatura ugello" msgid "Bed Temperature" -msgstr "Bed Temperature" +msgstr "Temperatura piano" msgid "Max volumetric speed" msgstr "Massima velocità volumetrica" -msgid "℃" -msgstr "" +msgid "\\u2103" +msgstr "\\u2103" msgid "Bed temperature" msgstr "Temperatura piano" -msgid "mm³" -msgstr "mm³" +msgid "mm\\u00B3" +msgstr "mm\\u00B3" msgid "Start calibration" -msgstr "Start" +msgstr "Calibra" msgid "Next" -msgstr "Next" +msgstr "Avanti" msgid "" "Calibration completed. Please find the most uniform extrusion line on your " "hot bed like the picture below, and fill the value on its left side into the " "factor K input box." msgstr "" -"Calibration completed. Please find the most uniform extrusion line on your " -"hot bed like the picture below, and fill the value on its left side into the " -"factor K input box." +"Calibrazione completata. Trova la linea di estrusione più uniforme sul tuo " +"piatto come nell'immagine sotto e inserisci il valore sul lato sinistro " +"nella casella di immissione del fattore K." msgid "Save" msgstr "Salva" msgid "Last Step" -msgstr "Back" +msgstr "Indietro" msgid "Example" -msgstr "Example" +msgstr "Esempio" #, c-format, boost-format msgid "Calibrating... %d%%" -msgstr "Calibrating... %d%%" +msgstr "Calibrazione in corso... %d%%" msgid "Calibration completed" -msgstr "Calibration completed" +msgstr "Calibrazione completata" #, c-format, boost-format msgid "%s does not support %s" -msgstr "%s does not support %s" +msgstr "%s non supporta %s" msgid "Dynamic flow Calibration" -msgstr "Dynamic flow calibration" +msgstr "Calibrazione dinamica del flusso" msgid "Step" msgstr "Step" msgid "AMS Slots" -msgstr "AMS Slots" +msgstr "Slot AMS" msgid "" "Note: Only the AMS slots loaded with the same material type can be selected." msgstr "" -"Note: Only the AMS slots loaded with the same material type can be selected." +"Nota: è possibile selezionare solo gli slot AMS caricati con lo stesso tipo " +"di materiale." msgid "Enable AMS" -msgstr "Enable AMS" +msgstr "Abilita AMS" msgid "Print with filaments in the AMS" -msgstr "Print with filament in the AMS" +msgstr "Stampa con filamento in AMS" msgid "Disable AMS" -msgstr "Disable AMS" +msgstr "Disabilita AMS" msgid "Print with the filament mounted on the back of chassis" -msgstr "Print with filament on an external spool" +msgstr "Stampa filamento con bobina esterna" msgid "Cabin humidity" -msgstr "Cabin humidity" +msgstr "Umidità della cabina" msgid "" "Green means that AMS humidity is normal, orange represent humidity is high, " "red represent humidity is too high.(Hygrometer: lower the better.)" msgstr "" -"Green means that AMS humidity is normal, orange means that humidity is high, " -"and red means that humidity is too high. (Hygrometer: the lower, the better.)" +"Il verde indica che l'umidità dell'AMS è normale, l'arancione che l'umidità " +"è elevata, il rosso rappresenta un'umidità troppo elevata (igrometro: più " +"basso è, meglio è)." msgid "Desiccant status" -msgstr "Desiccant status" +msgstr "Stato dell'essiccante" msgid "" "A desiccant status lower than two bars indicates that desiccant may be " "inactive. Please change the desiccant.(The bars: higher the better.)" msgstr "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant. (The higher, the better.)" +"Uno stato dell'essiccante inferiore a due barre indica che l'essiccante " +"potrebbe essere inattivo. Si prega di sostituire l'essiccante. (Le barre: " +"più sono alte, meglio è)." msgid "" "Note: When the lid is open or the desiccant pack is changed, it can take " @@ -1995,36 +2028,37 @@ msgid "" "process. During this time, the indicator may not represent the chamber " "accurately." msgstr "" -"Note: When the lid is open or the desiccant pack is changed, it can take " -"hours or a night to absorb the moisture. Low temperatures also slow down the " -"process. During this time, the indicator may not represent the chamber " -"accurately." +"Nota: quando il coperchio è aperto o la confezione di essiccante viene " +"cambiata, possono essere necessarie ore o una notte per assorbire l'umidità. " +"Anche le basse temperature rallentano il processo. Durante questo periodo, " +"l'indicatore potrebbe non rappresentare con precisione la camera." msgid "" "Config which AMS slot should be used for a filament used in the print job" msgstr "" -"Configure which AMS slot should be used for a filament used in the print job." +"Configura lo slot AMS da usare per un filamento utilizzato nel lavoro di " +"stampa." msgid "Filament used in this print job" -msgstr "Filament used in this print job" +msgstr "Filamento utilizzato in questa stampa" msgid "AMS slot used for this filament" -msgstr "AMS slot used for this filament" +msgstr "Slot AMS utilizzato per questo filamento" msgid "Click to select AMS slot manually" -msgstr "Click to select AMS slot manually" +msgstr "Fai clic per selezionare manualmente lo slot AMS" msgid "Do not Enable AMS" -msgstr "Do not Enable AMS" +msgstr "Non abilitare AMS" msgid "Print using materials mounted on the back of the case" -msgstr "Print using filament on an external spool." +msgstr "Stampa filamento con bobina esterna." msgid "Print with filaments in ams" -msgstr "Print with filament in AMS" +msgstr "Stampa con filamento AMS" msgid "Print with filaments mounted on the back of the chassis" -msgstr "Print with filament on an external spool" +msgstr "Stampa filamento con bobina esterna" msgid "Filaments replace" msgstr "" @@ -2033,64 +2067,65 @@ msgid "Group" msgstr "" msgid "AMS Settings" -msgstr "AMS Settings" +msgstr "Impostazioni AMS" msgid "Insertion update" -msgstr "Insertion update" +msgstr "Aggiornamento dell'inserimento" msgid "" "The AMS will automatically read the filament information when inserting a " "new Bambu Lab filament. This takes about 20 seconds." msgstr "" -"The AMS will automatically read the filament information when inserting a " -"new Bambu Lab filament spool. This takes about 20 seconds." +"L'AMS leggerà automaticamente le informazioni sul filamento quando inserisce " +"una nuova bobina di filamento Bambu Lab. Questa operazione richiede circa 20 " +"secondi." msgid "" "Note: if new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." msgstr "" -"Note: if new filament is inserted during printing, the AMS will not " -"automatically read any information until printing has finished." +"Nota: se durante la stampa viene inserito un nuovo filamento, l'AMS non " +"leggerà automaticamente alcuna informazione fino al termine della stampa." msgid "" "When inserting a new filament, the AMS will not automatically read its " "information, leaving it blank for you to enter manually." msgstr "" -"When inserting a new filament, the AMS will not automatically read its " -"information, leaving it blank for you to enter manually." +"Quando si inserisce un nuovo filamento, l'AMS non legge automaticamente le " +"sue informazioni, lasciandole vuote per l'inserimento manuale." msgid "Power on update" -msgstr "Update on startup" +msgstr "Aggiorna all'avvio" msgid "" "The AMS will automatically read the information of inserted filament on " "start-up. It will take about 1 minute.The reading process will roll filament " "spools." msgstr "" -"The AMS will automatically read the information of inserted filament on " -"start-up. It will take about 1 minute.The reading process will rotate the " -"filament spools." +"L'AMS leggerà automaticamente le informazioni sul filamento inserito " +"all'avvio. Ci vorrà circa 1 minuto. Il processo di lettura farà ruotare le " +"bobine del filamento." msgid "" "The AMS will not automatically read information from inserted filament " "during startup and will continue to use the information recorded before the " "last shutdown." msgstr "" -"The AMS will not automatically read information from inserted filament " -"during startup and will continue to use the information recorded before the " -"last shutdown." +"L'AMS non leggerà automaticamente le informazioni dal filamento inserito " +"durante l'avvio e continuerà a utilizzare le informazioni registrate prima " +"dell'ultimo spegnimento." msgid "Update remaining capacity" -msgstr "Update remaining capacity" +msgstr "Aggiorna capacità residua" msgid "" "The AMS will estimate Bambu filament's remaining capacity after the filament " "info is updated. During printing, remaining capacity will be updated " "automatically." msgstr "" -"The AMS will estimate Bambu filament's remaining capacity after the filament " -"info is updated. During printing, remaining capacity will be updated " -"automatically." +"L'AMS stimerà la capacità residua del filamento di bambù dopo " +"l'aggiornamento delle informazioni sul filamento. Durante la stampa, la " +"capacità residua verrà aggiornata automaticamente." msgid "AMS filament backup" msgstr "" @@ -2099,8 +2134,8 @@ msgid "" "AMS will continue to another spool with the same properties of filament " "automatically when current filament runs out" msgstr "" -"AMS will continue to another spool with the same filament properties " -"automatically when current filament runs out." +"L'AMS passerà automaticamente a un altro filamento con stesse proprietà " +"quando il filamento corrente si esaurisce" msgid "File" msgstr "File" @@ -2109,50 +2144,51 @@ msgid "" "Failed to download the plug-in. Please check your firewall settings and vpn " "software, check and retry." msgstr "" -"Failed to download the plug-in. Please check your firewall settings and vpn " -"software and retry." +"Impossibile scaricare il plug-in. Controlla le impostazioni del firewall e " +"VPN poi riprova." msgid "" "Failed to install the plug-in. Please check whether it is blocked or deleted " "by anti-virus software." msgstr "" -"Failed to install the plug-in. Please check whether it is blocked or has " -"been deleted by anti-virus software." +"Impossibile installare il plug-in. Verificare se è bloccato o se è stato " +"eliminato dall'antivirus." msgid "click here to see more info" -msgstr "click here to see more info" +msgstr "clicca per ulteriori informazioni" msgid "Please home all axes (click " -msgstr "Please home all axes (click " +msgstr "Prego fai l'home degli assi (clicca" msgid "" ") to locate the toolhead's position. This prevents device moving beyond the " "printable boundary and causing equipment wear." msgstr "" -") to locate the toolhead's position. This prevents device moving beyond the " -"printable boundary and causing equipment wear." +") per individuare la posizione della testa dell'utensile. In questo modo si " +"evita che il dispositivo si sposti oltre il limite stampabile, causando " +"l'usura dell'apparecchiatura." msgid "Go Home" -msgstr "Go Home" +msgstr "Vai all'origine" msgid "" "A error occurred. Maybe memory of system is not enough or it's a bug of the " "program" msgstr "" -"An error occurred. The system may have run out of memory, or a bug may have " -"occurred." +"Si è verificato un errore. È possibile che la memoria del sistema sia " +"esaurita o che si sia verificato un bug." msgid "Please save project and restart the program. " -msgstr "Please save your project and restart the application." +msgstr "Salva il progetto e riavvia l'applicazione." msgid "Processing G-Code from Previous file..." -msgstr "Processing G-Code from previous file…" +msgstr "Elaborazione G-Code dal file precedente..." msgid "Slicing complete" msgstr "Slicing completato" msgid "Access violation" -msgstr "Violazione di accesso" +msgstr "Violazione accesso" msgid "Illegal instruction" msgstr "Istruzione illegale" @@ -2161,10 +2197,10 @@ msgid "Divide by zero" msgstr "Dividi per zero" msgid "Overflow" -msgstr "Overflow" +msgstr "sovra-estrusione" msgid "Underflow" -msgstr "Underflow" +msgstr "Sotto-estruso" msgid "Floating reserved operand" msgstr "Floating reserved operand" @@ -2173,7 +2209,7 @@ msgid "Stack overflow" msgstr "Stack overflow" msgid "Unknown error when export G-code." -msgstr "Unknown error with G-code export" +msgstr "Errore sconosciuto nell'esportazione G-code" #, boost-format msgid "" @@ -2181,23 +2217,25 @@ msgid "" "Error message: %1%.\n" "Source file %2%." msgstr "" -"Failed to save G-code file.\n" -"Error message: %1%.\n" -"Source file %2%." +"Impossibile salvare il file del G-code.\n" +"Messaggio di errore: %1%.\n" +"File sorgente %2%." #, boost-format msgid "Succeed to export G-code to %1%" -msgstr "Success! G-code exported to %1%" +msgstr "Successo! G-code esportato in %1%" msgid "Running post-processing scripts" -msgstr "Running post-processing scripts" +msgstr "Esecuzione script di post-elaborazione" msgid "Copying of the temporary G-code to the output G-code failed" -msgstr "Copying of the temporary G-code to the output G-code failed." +msgstr "Copia del G-code temporaneo nel G-code di output non riuscita." #, boost-format msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" -msgstr "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" +msgstr "" +"Pianificazione caricamento su `%1% `. Vedi Finestra -> Coda di caricamento " +"dell'host di stampa" msgid "Origin" msgstr "Origine" @@ -2212,7 +2250,7 @@ msgid "" "Distance of the 0,0 G-code coordinate from the front left corner of the " "rectangle." msgstr "" -"Distanza della coordinata 0,0 del G-code dall'angolo frontale sinistro del " +"Distanza della coordinata 0,0 del G-code dall'angolo anteriore sinistro del " "rettangolo." msgid "" @@ -2256,7 +2294,7 @@ msgid "Invalid file format." msgstr "Formato file non valido." msgid "Error! Invalid model" -msgstr "Errore! Modello non valido" +msgstr "Errore: Modello non valido" msgid "The selected file contains no geometry." msgstr "Il file selezionato non contiene geometrie." @@ -2281,9 +2319,9 @@ msgid "" "Please make sure whether to use the temperature to print.\n" "\n" msgstr "" -"The nozzle may become clogged when the temperature is out of the recommended " -"range.\n" -"Please make sure whether to use this temperature to print.\n" +"Il Nozzle potrebbe intasarsi quando la temperatura non rientra " +"nell'intervallo consigliato.\n" +"Assicurarsi di utilizzare questa temperatura per la stampa.\n" "\n" #, c-format, boost-format @@ -2291,8 +2329,8 @@ msgid "" "Recommended nozzle temperature of this filament type is [%d, %d] degree " "centigrade" msgstr "" -"The recommended nozzle temperature for this filament type is [%d, %d] " -"degrees centigrade" +"La temperatura del nozzle consigliata per questo filamento è [%d, %d] gradi " +"centigradi" #, c-format, boost-format msgid "" @@ -2300,9 +2338,9 @@ msgid "" "layer for more than %d degree centigrade.\n" "This may cause model broken free from build plate during printing" msgstr "" -"The bed temperature of other layers is lower than the bed temperature of the " -"first layer by more than %d degrees centigrade.\n" -"This may cause models to break free from the build plate during printing." +"La temperatura del piano degli altri layer è inferiore alla temperatura del " +"piano del primo layer di oltre %d gradi centigradi.\n" +"Ciò può far sì che i modelli si stacchino dal piatto durante la stampa." msgid "" "Bed temperature is higher than vitrification temperature of this filament.\n" @@ -2310,47 +2348,48 @@ msgid "" "Please keep the printer open during the printing process to ensure air " "circulation or reduce the temperature of the hot bed" msgstr "" -"Bed temperature is higher than vitrification temperature of this filament.\n" -"This may cause nozzle blockage and print failure.\n" -"Please keep the printer open during the printing process to ensure air " -"circulation or reduce the temperature of the hot bed." +"La temperatura del piano è superiore alla temperatura di vetrificazione di " +"questo filamento.\n" +"Ciò può causare il blocco del nozzle e il fallimento della stampa.\n" +"Si prega di tenere la stampante aperta durante il processo di stampa per " +"garantire la circolazione dell'aria o ridurre la temperatura del piano." msgid "" "Too small max volumetric speed.\n" "Reset to 0.5" msgstr "" -"Too small max volumetric speed.\n" -"Value was reset to 0.5" +"Velocità volumetrica massima troppo bassa.\n" +"Il valore è stato ripristinato a 0,5" msgid "" "Too small layer height.\n" "Reset to 0.2" msgstr "" -"Layer height too small\n" -"It has been reset to 0.2" +"Altezza del layer troppo piccola\n" +"È stata ripristinata a 0,2" msgid "" "Too large layer height.\n" "Reset to 0.2" msgstr "" -"Layer height too large\n" -"It has been reset to 0.2" +"Altezza layer troppo grande\n" +"È stato ripristinato a 0.2" msgid "" "Too small ironing spacing.\n" "Reset to 0.1" msgstr "" -"Ironing spacing too small\n" -"It has been reset to 0.1" +"Spaziatura stiratura troppo piccola\n" +"È stata ripristinata a 0,1" msgid "" "Zero initial layer height is invalid.\n" "\n" "The first layer height will be reset to 0.2." msgstr "" -"Zero first layer height is invalid.\n" +"L'altezza zero primo layer non è valida.\n" "\n" -"The first layer height will be reset to 0.2." +"L'altezza primo layer verrà ripristinata a 0,2." msgid "" "This setting is only used for model size tunning with small value in some " @@ -2360,11 +2399,13 @@ msgid "" "\n" "The value will be reset to 0." msgstr "" -"This setting is only used for tuning model size by small amounts.\n" -"For example, when the model size has small errors or when tolerances are " -"incorrect. For large adjustments, please use the model scale function.\n" +"Questa viene utilizzata solo per regolare le dimensioni del modello in " +"piccole quantità.\n" +"Ad esempio, quando le dimensioni del modello presentano piccoli errori o " +"quando le tolleranze non sono corrette. Per regolazioni di grandi " +"dimensioni, si prega di utilizzare la funzione di scala del modello.\n" "\n" -"The value will be reset to 0." +"Il valore verrà reimpostato su 0." msgid "" "Too large elefant foot compensation is unreasonable.\n" @@ -2373,11 +2414,12 @@ msgid "" "\n" "The value will be reset to 0." msgstr "" -"The elephant foot compensation value is too large.\n" -"If there are significant elephant foot issues, please check other settings.\n" -"The bed temperature may be too high, for example.\n" +"Il valore di compensazione del piede di elefante è troppo grande.\n" +"Se i problemi zampa d'elefante sono significativi, controllare altre " +"impostazioni.\n" +"Ad esempio, la temperatura del letto potrebbe essere troppo alta.\n" "\n" -"The value will be reset to 0." +"Il valore viene riportato a 0." msgid "" "Spiral mode only works when wall loops is 1, support is disabled, top shell " @@ -2389,9 +2431,9 @@ msgid "" "Yes - Change these settings and enable spiral mode automatically\n" "No - Give up using spiral mode this time" msgstr "" -"Change these settings automatically? \n" -"Yes - Change these settings and enable spiral/vase mode automatically\n" -"No - Cancel enabling spiral mode" +"Modificare queste impostazioni automaticamente? \n" +"Si - Modifica queste impostazioni ed abilita la modalità spirale/vaso\n" +"No - Annulla l'attivazione della modalità a spirale" msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " @@ -2400,11 +2442,11 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Adaptive Layer Height and Independent Support Layer Height" msgstr "" -"Prime tower does not work when Adaptive Layer Height or Independent Support " -"Layer Height is on.\n" -"Which do you want to keep?\n" -"YES - Keep Prime Tower\n" -"NO - Keep Adaptive Layer Height and Independent Support Layer Height" +"Prime tower non funziona quando layer Adattativo o Altezza supporto Layer " +"indipendente sono attivati.\n" +"Quale vuoi tenere?\n" +"SÌ - Mantieni Prime Tower\n" +"NO - Mantieni layer Adattativo e Altezza supporto Layer indipendente" msgid "" "Prime tower does not work when Adaptive Layer Height is on.\n" @@ -2412,10 +2454,10 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Adaptive Layer Height" msgstr "" -"Prime tower does not work when Adaptive Layer Height is on.\n" -"Which do you want to keep?\n" -"YES - Keep Prime Tower\n" -"NO - Keep Adaptive Layer Height" +"Prime tower non funziona quando layer adattativo è attivo.\n" +"Quale vuoi tenere?\n" +"SÌ - Mantieni Prime Tower\n" +"NO - Mantieni l'ayer adattativo" msgid "" "Prime tower does not work when Independent Support Layer Height is on.\n" @@ -2423,23 +2465,24 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Independent Support Layer Height" msgstr "" -"Prime tower does not work when Independent Support Layer Height is on.\n" -"Which do you want to keep?\n" -"YES - Keep Prime Tower\n" -"NO - Keep Independent Support Layer Height" +"Prime tower non funziona quando Altezza Supporto Layer indipendente è " +"attiva.\n" +"Quale vuoi tenere?\n" +"SÌ - Mantieni Prime Tower\n" +"NO - Mantieni Altezza Supporto Layer indipendente" #, boost-format msgid "%1% infill pattern doesn't support 100%% density." -msgstr "%1% infill pattern doesn't support 100%% density." +msgstr "La trama riempimento %1% non supporta il 100%% di densità." msgid "" "Switch to rectilinear pattern?\n" "Yes - switch to rectilinear pattern automaticlly\n" "No - reset density to default non 100% value automaticlly" msgstr "" -"Switch to rectilinear pattern?\n" -"Yes - Switch to rectilinear pattern automatically\n" -"No - Reset density to default non 100% value automatically" +"Passare alla trama rettilinea?\n" +"Sì - passa automaticamente alla trama rettilinea\n" +"No - ripristina automaticamente la densità al valore predefinito non 100%" msgid "" "While printing by Object, the extruder may collide skirt.\n" @@ -2447,67 +2490,67 @@ msgid "" msgstr "" msgid "Auto bed leveling" -msgstr "Auto bed leveling" +msgstr "Livellamento automatico piano" msgid "Heatbed preheating" -msgstr "Heatbed preheating" +msgstr "Preriscaldamento del piano" msgid "Sweeping XY mech mode" -msgstr "Sweeping XY mech mode" +msgstr "Modalità Sweeping XY mech" msgid "Changing filament" -msgstr "Changing filament" +msgstr "Cambio filamento" msgid "M400 pause" -msgstr "M400 pause" +msgstr "M400 pausa" msgid "Paused due to filament runout" -msgstr "Paused due to filament runout" +msgstr "Pausa per filamento esaurito" msgid "Heating hotend" -msgstr "Heating hotend" +msgstr "Riscaldamento hotend" msgid "Calibrating extrusion" -msgstr "Calibrating extrusion" +msgstr "Calibrazione estrusione" msgid "Scanning bed surface" -msgstr "Scanning bed surface" +msgstr "Scansione superfice piatto" msgid "Inspecting first layer" -msgstr "Inspecting first layer" +msgstr "Ispezione del primo layer" msgid "Identifying build plate type" -msgstr "Identifying build plate type" +msgstr "Identificazione tipo piatto di costruzione" msgid "Calibrating Micro Lidar" -msgstr "Calibrating Micro Lidar" +msgstr "Calibrazione Micro Lidar" msgid "Homing toolhead" -msgstr "Homing toolhead" +msgstr "Homing testa di stampa" msgid "Cleaning nozzle tip" -msgstr "Cleaning nozzle tip" +msgstr "Pulizia punta nozzle" msgid "Checking extruder temperature" -msgstr "Checking extruder temperature" +msgstr "Controllo temperatura dell'estrusore" msgid "Printing was paused by the user" -msgstr "Printing was paused by the user" +msgstr "Stampa messa in pausa dall'utente" msgid "Pause of front cover falling" -msgstr "Pause of front cover falling" +msgstr "Pausa caduta cover anteriore" msgid "Calibrating the micro lida" -msgstr "Calibrating the micro lidar" +msgstr "Calibrazione micro lidar" msgid "Calibrating extrusion flow" -msgstr "Calibrating extrusion flow" +msgstr "Calibrazione flusso estrusore" msgid "Paused due to nozzle temperature malfunction" -msgstr "Paused due to nozzle temperature malfunction" +msgstr "Pausa per malfunzionamento temperatura nozzle" msgid "Paused due to heat bed temperature malfunction" -msgstr "Paused due to heat bed temperature malfunction" +msgstr "Pausa per malfunzionamento della temperatura piano termico" msgid "MC" msgstr "MC" @@ -2525,51 +2568,51 @@ msgid "Unknown" msgstr "Sconosciuto" msgid "Fatal" -msgstr "Fatal" +msgstr "Irreversibile" msgid "Serious" -msgstr "Serious" +msgstr "Serio" msgid "Common" -msgstr "Common" +msgstr "Comune" msgid "Update successful." -msgstr "Update successful." +msgstr "Aggiornamento riuscito." msgid "Downloading failed." -msgstr "Downloading failed." +msgstr "Download non riuscito." msgid "Verification failed." -msgstr "Verification failed." +msgstr "Verifica fallita." msgid "Update failed." -msgstr "Update failed." +msgstr "Aggiornamento fallito" msgid "Failed to start printing job" -msgstr "Failed to start print job" +msgstr "Impossibile avviare il processo di stampa" msgid "default" msgstr "predefinito" msgid "parameter name" -msgstr "parameter name" +msgstr "nome parametro" msgid "N/A" msgstr "N/A" #, c-format, boost-format msgid "%s can't be percentage" -msgstr "%s can’t be a percentage" +msgstr "%s non può essere una percentuale" #, c-format, boost-format msgid "Value %s is out of range, continue?" -msgstr "Value %s is out of range, continue?" +msgstr "Il valore %s non rientra nell'intervallo, continuare?" msgid "Parameter validation" msgstr "Validazione parametri" msgid "Value is out of range." -msgstr "Value is out of range." +msgstr "Valore fuori intervallo." #, c-format, boost-format msgid "" @@ -2577,22 +2620,22 @@ msgid "" "YES for %s%%, \n" "NO for %s %s." msgstr "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"È %s%% o %s %s?\n" +"SÌ per %s%%, \n" +"NO per %s %s." #, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" -msgstr "Invalid format. Expected vector format: \"%1%\"" +msgstr "Formato non valido. Formato vettoriale previsto: \"%1%\"" msgid "Layer Height" -msgstr "Layer Height" +msgstr "Altezza layer" msgid "Line Width" -msgstr "Line Width" +msgstr "Larghezza linea" msgid "Fan Speed" -msgstr "Fan Speed" +msgstr "Velocità ventola" msgid "Temperature" msgstr "Temperatura" @@ -2604,37 +2647,37 @@ msgid "Tool" msgstr "Strumento" msgid "Layer Time" -msgstr "Layer Time" +msgstr "Tempo layer" msgid "Height: " -msgstr "Height: " +msgstr "Altezza:" msgid "Width: " -msgstr "Width: " +msgstr "Larghezza:" msgid "Speed: " -msgstr "Speed: " +msgstr "Velocità:" msgid "Flow: " -msgstr "Flow: " +msgstr "Flusso: " msgid "Layer Time: " -msgstr "Layer Time: " +msgstr "Tempo layer:" msgid "Fan Speed: " -msgstr "Fan Speed: " +msgstr "Velocità ventola:" msgid "Temperature: " -msgstr "Temperature: " +msgstr "Temperatura:" msgid "Loading G-codes" -msgstr "Loading G-code" +msgstr "Caricamento del G-code" msgid "Generating geometry vertex data" -msgstr "Generating geometry vertex data" +msgstr "Generazione dati vertici geometria" msgid "Generating geometry index data" -msgstr "Generating geometry index data" +msgstr "Generazione dati di indice geometrico" msgid "Statistics of All Plates" msgstr "" @@ -2643,7 +2686,7 @@ msgid "Display" msgstr "Display" msgid "Flushed" -msgstr "Flushed" +msgstr "Spurgo" msgid "Total" msgstr "Totale" @@ -2652,7 +2695,7 @@ msgid "Total Time Estimation" msgstr "" msgid "Total time" -msgstr "Total time" +msgstr "Tempo totale" msgid "up to" msgstr "fino a" @@ -2664,19 +2707,19 @@ msgid "from" msgstr "da" msgid "Color Scheme" -msgstr "Color scheme" +msgstr "Schema Colore" msgid "Time" msgstr "Tempo" msgid "Percent" -msgstr "Percent" +msgstr "Percentuale" msgid "Layer Height (mm)" -msgstr "Layer height (mm)" +msgstr "Altezza layer (mm)" msgid "Line Width (mm)" -msgstr "Line width (mm)" +msgstr "Larghezza linea (mm)" msgid "Speed (mm/s)" msgstr "Velocità (mm/s)" @@ -2703,28 +2746,28 @@ msgid "Seams" msgstr "Giunzioni" msgid "Retract" -msgstr "Retract" +msgstr "Retrazione" msgid "Unretract" -msgstr "Unretract" +msgstr "De-retrazione" msgid "Filament Changes" -msgstr "Filament changes" +msgstr "Cambi filamento" msgid "Wipe" -msgstr "Pulitura" +msgstr "Pulizia" msgid "Options" msgstr "Opzioni" msgid "travel" -msgstr "Travel" +msgstr "Spostamento" msgid "Extruder" msgstr "Estrusore" msgid "Filament change times" -msgstr "Filament change times" +msgstr "Tempi cambio filamento" msgid "Cost" msgstr "Costo" @@ -2745,82 +2788,82 @@ msgid "Print settings" msgstr "Impostazioni di stampa" msgid "Total Estimation" -msgstr "Total estimation" +msgstr "Stima totale" msgid "Time Estimation" -msgstr "Time Estimation" +msgstr "Tempo stimato" msgid "Normal mode" msgstr "Modalità normale" msgid "Prepare time" -msgstr "Prepare time" +msgstr "Tempo preparazione" msgid "Model printing time" -msgstr "Model printing time" +msgstr "Tempo stampa del modello" msgid "Switch to silent mode" -msgstr "Switch to silent mode" +msgstr "Passa a modalità silenziosa" msgid "Switch to normal mode" -msgstr "Switch to normal mode" +msgstr "Passa a modalità normale" msgid "Variable layer height" -msgstr "Variable layer height" +msgstr "Altezza layer adattativo" msgid "Adaptive" -msgstr "Adaptive" +msgstr "Adattiva" msgid "Quality / Speed" -msgstr "Quality / Speed" +msgstr "Qualità / Velocità" msgid "Smooth" -msgstr "Smooth" +msgstr "Liscio" msgid "Radius" msgstr "Raggio" msgid "Keep min" -msgstr "Keep min" +msgstr "Mantieni min" msgid "Left mouse button:" -msgstr "Left mouse button:" +msgstr "Tasto sinistro del mouse:" msgid "Add detail" -msgstr "Add Detail" +msgstr "Aggiungi dettaglio" msgid "Right mouse button:" -msgstr "Right mouse button:" +msgstr "Tasto destro mouse:" msgid "Remove detail" -msgstr "Remove detail" +msgstr "Rimuovi dettagli" msgid "Shift + Left mouse button:" -msgstr "Shift + Left mouse button:" +msgstr "Shift + Tasto sinistro mouse:" msgid "Reset to base" -msgstr "Reset to base" +msgstr "Ripristina alla base" msgid "Shift + Right mouse button:" -msgstr "Shift + Right mouse button:" +msgstr "Shift + Tasto destro mouse:" msgid "Smoothing" -msgstr "Smoothing" +msgstr "Lisciatura" msgid "Mouse wheel:" -msgstr "Mouse wheel:" +msgstr "Rotella del mouse:" msgid "Increase/decrease edit area" -msgstr "Increase/decrease edit area" +msgstr "Aumenta/diminuisci l'area di modifica" msgid "Sequence" -msgstr "Sequence" +msgstr "Sequenza" msgid "Mirror Object" msgstr "Specchia Oggetto" msgid "Tool Move" -msgstr "Tool move" +msgstr "Sposta strumento" msgid "Tool Rotate" msgstr "" @@ -2829,16 +2872,16 @@ msgid "Move Object" msgstr "Sposta oggetto" msgid "Auto Orientation options" -msgstr "Auto orientation options" +msgstr "Opzioni orientamento automatico" msgid "Enable rotation" -msgstr "Enable rotation" +msgstr "Abilita rotazione" msgid "Optimize support interface area" -msgstr "Optimize support interface area" +msgstr "Ottimizza l'area dell'interfaccia di supporto" msgid "Orient" -msgstr "Orient" +msgstr "Orienta" msgid "Arrange options" msgstr "Opzioni di disposizione" @@ -2847,28 +2890,28 @@ msgid "Spacing" msgstr "Spaziatura " msgid "Auto rotate for arrangement" -msgstr "Auto rotate for arrangement" +msgstr "Ruota automaticamente per disporre" msgid "Allow multiple materials on same plate" -msgstr "Allow multiple materials on same plate" +msgstr "Consenti più materiali sullo stesso piatto" msgid "Avoid extrusion calibration region" -msgstr "Avoid extrusion calibration region" +msgstr "Evitare la regione di calibrazione dell'estrusione" msgid "Add" msgstr "Aggiungi" msgid "Add plate" -msgstr "Add Plate" +msgstr "Aggiungi piatto" msgid "Auto orient" -msgstr "Auto Orient" +msgstr "Orientamento automatico" msgid "Arrange all objects" -msgstr "Arrange all objects" +msgstr "Disponi tutti gli oggetti" msgid "Arrange objects on selected plates" -msgstr "Arrange objects on selected plates" +msgstr "Disponi gli oggetti sui piatti selezionati" msgid "Split to objects" msgstr "Dividi in oggetti" @@ -2877,40 +2920,40 @@ msgid "Split to parts" msgstr "Dividi in parti" msgid "Assembly View" -msgstr "Assembly View" +msgstr "Vista montaggio" msgid "Select Plate" -msgstr "Select Plate" +msgstr "Seleziona piatto" msgid "Assembly Return" -msgstr "Assembly Return" +msgstr "Ritorna al montaggio" msgid "return" -msgstr "return" +msgstr "Indietro" msgid "Paint Toolbar" -msgstr "Paint Toolbar" +msgstr "Barra strumenti di pittura" msgid "Explosion Ratio" -msgstr "Explosion Ratio" +msgstr "Rapporto di esplosione" msgid "Section View" -msgstr "Section View" +msgstr "Vista in sezione" msgid "Assemble Control" -msgstr "Assembly Control" +msgstr "Controllo assemblaggio" msgid "Total Volume:" -msgstr "Total Volume:" +msgstr "Volume totale:" msgid "Assembly Info" -msgstr "Assembly Info" +msgstr "Informazioni sul montaggio" msgid "Volume:" msgstr "Volume:" msgid "Size:" -msgstr "Size:" +msgstr "Dimensioni:" #, c-format, boost-format msgid "" @@ -2919,74 +2962,74 @@ msgid "" msgstr "" msgid "An object is layed over the boundary of plate." -msgstr "An object is laid over the boundary of the plate." +msgstr "Un oggetto è posizionato oltre il bordo del piatto." msgid "A G-code path goes beyond the boundary of plate." -msgstr "A G-code path goes beyond plate boundaries." +msgstr "Un percorso G-code va oltre il confine del piatto." msgid "Only the object being edit is visible." -msgstr "Only the object being edited is visible." +msgstr "È visibile solo l'oggetto da modificare." msgid "" "An object is laid over the boundary of plate or exceeds the height limit.\n" "Please solve the problem by moving it totally on or off the plate, and " "confirming that the height is within the build volume." msgstr "" -"An object is laid over the boundary of the plate or exceeds the height " -"limit.\n" -"Please solve the problem by moving it totally on or off the plate, and " -"confirming that the height is within the build volume." +"Un oggetto è posato oltre il limite del piatto o supera il limite di " +"altezza.\n" +"Risolvi il problema spostando l'oggetto completamente dentro o fuori il " +"piatto verificando che l'altezza rientri nel volume di costruzione." msgid "Calibration" -msgstr "Calibration" +msgstr "Calibrazione" msgid "Calibration step selection" -msgstr "Calibration step selection" +msgstr "Selezione step calibrazione" msgid "Micro lidar calibration" -msgstr "Micro lidar calibration" +msgstr "Calibrazione micro lidar" msgid "Bed leveling" -msgstr "Bed leveling" +msgstr "Livellamento del piano" msgid "Resonance frequency identification" -msgstr "Resonance frequency identification" +msgstr "Identificazione frequenza di risonanza" msgid "Calibration program" -msgstr "Calibration program" +msgstr "Programma calibrazione" msgid "" "The calibration program detects the status of your device automatically to " "minimize deviation.\n" "It keeps the device performing optimally." msgstr "" -"The calibration program detects the status of your device automatically to " -"minimize deviation.\n" -"It keeps the device performing optimally." +"Il programma di calibrazione rileva automaticamente lo stato del dispositivo " +"per ridurre al minimo le deviazioni.\n" +"In questo modo il dispositivo funziona in modo ottimale." msgid "Calibration Flow" -msgstr "Calibration Flow" +msgstr "Calibrazione flusso" msgid "Start Calibration" -msgstr "Start Calibration" +msgstr "Inizia calibrazione" msgid "Completed" -msgstr "Completed" +msgstr "Completato" msgid "Calibrating" -msgstr "Calibrating" +msgstr "Calibrazione" msgid "Auto-record Monitoring" -msgstr "Auto-record Monitoring" +msgstr "Monitoraggio registrazione automatica" msgid "Go Live" -msgstr "Go Live" +msgstr "Vai in diretta" msgid "Resolution" -msgstr "Resolution" +msgstr "Risoluzione" msgid "Show \"Live Video\" guide page." -msgstr "Show \"Live Video\" guide page." +msgstr "Mostra pagina della guida \"Diretta Video\"." msgid "720p" msgstr "720p" @@ -2995,50 +3038,50 @@ msgid "1080p" msgstr "1080p" msgid "ConnectPrinter(LAN)" -msgstr "Connect Printer (LAN)" +msgstr "Connetti la stampante (LAN)" msgid "Please input the printer access code:" -msgstr "Please input the printer access code:" +msgstr "Inserisci il codice di accesso alla stampante:" msgid "" "You can find it in \"Settings > Network > Connection code\"\n" "on the printer, as shown in the figure:" msgstr "" -"You can find it in \"Settings > Network > Access code\"\n" -"on the printer, as shown in the figure:" +"Si trova in \"Impostazioni > Rete > Codice di accesso\".\n" +"sulla stampante, come mostrato nella figura:" msgid "Invalid input." -msgstr "Invalid input" +msgstr "Ingresso non valido" msgid "New Window" -msgstr "New Window" +msgstr "Nuova finestra" msgid "Open a new window" -msgstr "Open a new window" +msgstr "Apri una nuova finestra" msgid "Application is closing" -msgstr "Closing application" +msgstr "Chiusura applicazione" msgid "Closing Application while some presets are modified." -msgstr "Closing Application while some presets are modified." +msgstr "Chiusura dell'applicazione durante la modifica di alcuni preset." msgid "Logging" -msgstr "Logging" +msgstr "Accesso" msgid "Prepare" -msgstr "Prepare" +msgstr "Preparara" msgid "Preview" msgstr "Anteprima" msgid "Device" -msgstr "Device" +msgstr "Dispositivo" msgid "Project" -msgstr "Project" +msgstr "Progetto" msgid "Yes" -msgstr "Yes" +msgstr "Sì" msgid "No" msgstr "No" @@ -3047,65 +3090,65 @@ msgid "will be closed before creating a new model. Do you want to continue?" msgstr "" msgid "Slice plate" -msgstr "Slice plate" +msgstr "Slice piatto" msgid "Print plate" -msgstr "Print plate" +msgstr "Piatto di stampa" msgid "Slice all" -msgstr "Slice all" +msgstr "Slicing di tutto" msgid "Export G-code file" -msgstr "Export G-code file" +msgstr "Esporta file G-code" msgid "Send" -msgstr "Send" +msgstr "Invia" msgid "Export plate sliced file" -msgstr "Export plate sliced file" +msgstr "Esporta il file del piatto elaborato" msgid "Export all sliced file" -msgstr "Export all sliced file" +msgstr "Esporta tutti i file elaborati" msgid "Print all" -msgstr "Print all" +msgstr "Stampa tutto" msgid "Send all" -msgstr "Send all" +msgstr "Invia tutto" msgid "Keyboard Shortcuts" msgstr "Scorciatoie Tastiera" msgid "Show the list of the keyboard shortcuts" -msgstr "Mostra l'elenco delle scorciatoie di tastiera" +msgstr "Mostra l'elenco delle scorciatoie da tastiera" msgid "Setup Wizard" -msgstr "Setup Wizard" +msgstr "Configurazione guidata" msgid "Show Configuration Folder" -msgstr "Show Configuration Folder" +msgstr "Mostra cartella di configurazione" msgid "Show Tip of the Day" -msgstr "Show Tip of the Day" +msgstr "Suggerimento del giorno" msgid "Check for Update" -msgstr "Check for Updates" +msgstr "Verifica aggiornamenti" msgid "Open Network Test" -msgstr "Open Network Test" +msgstr "Apri test di rete" #, c-format, boost-format msgid "&About %s" -msgstr "Inform&azioni su %s" +msgstr "&informazioni su %s" msgid "Upload Models" -msgstr "Upload Models" +msgstr "Carica modelli" msgid "Download Models" -msgstr "Download Models" +msgstr "Scarica Modelli" msgid "Default View" -msgstr "Default View" +msgstr "Vista predefinita" #. TRN To be shown in the main menu View->Top msgid "Top" @@ -3122,7 +3165,7 @@ msgid "Bottom View" msgstr "Vista inferiore" msgid "Front" -msgstr "Frontale" +msgstr "Anteriore" msgid "Front View" msgstr "Vista anteriore" @@ -3146,7 +3189,7 @@ msgid "Right View" msgstr "Vista destra" msgid "Start a new window" -msgstr "Start a new window" +msgstr "Inizia in una nuova finestra" msgid "New Project" msgstr "Nuovo progetto" @@ -3161,67 +3204,67 @@ msgid "Recent projects" msgstr "Prog&etti recenti" msgid "Save Project" -msgstr "Save Project" +msgstr "Salva Progetto" msgid "Save current project to file" -msgstr "Save current project to file" +msgstr "Salva progetto corrente su file" msgid "Save Project as" -msgstr "Save Project as" +msgstr "Salva Progetto come" msgid "Shift+" msgstr "" msgid "Save current project as" -msgstr "Save current project as" +msgstr "Salva Progetto corrente come" msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" -msgstr "Import 3MF/STL/STEP/SVG/OBJ/AMF" +msgstr "Importa 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Carica modello" msgid "Import Configs" -msgstr "Import Configs" +msgstr "Importa configurazioni" msgid "Load configs" -msgstr "Load configs" +msgstr "Carica configurazioni" msgid "Import" -msgstr "Import" +msgstr "Importa" msgid "Export all objects as STL" -msgstr "Export All Objects as STL" +msgstr "Esporta tutti gli oggetti come STL" msgid "Export Generic 3MF" -msgstr "Export Generic 3MF" +msgstr "Esporta 3mf generico" msgid "Export 3mf file without using some 3mf-extensions" -msgstr "Export 3mf file without using some 3mf-extensions" +msgstr "Esporta file 3mf senza usare alcune estensioni 3mf" msgid "Export current sliced file" -msgstr "Export current sliced file" +msgstr "Esporta il file elaborato corrente" msgid "Export all plate sliced file" -msgstr "Export all plate sliced file" +msgstr "Esporta tutti i piatti elaborati" msgid "Export G-code" msgstr "Esporta G-code" msgid "Export current plate as G-code" -msgstr "Export current plate as G-code" +msgstr "Esporta piatto corrente come G-code" msgid "Export &Configs" -msgstr "Export &Configs" +msgstr "Esporta &Configurazioni" msgid "Export current configuration to files" -msgstr "Export current configuration to files" +msgstr "Esporta la configurazione corrente in file" msgid "Export" msgstr "Esporta" msgid "Quit" -msgstr "Quit" +msgstr "Esci" msgid "Undo" msgstr "Annulla" @@ -3230,7 +3273,7 @@ msgid "Redo" msgstr "Ripeti" msgid "Cut selection to clipboard" -msgstr "Cut selection to clipboard" +msgstr "Taglia la selezione negli appunti" msgid "Copy" msgstr "Copia" @@ -3257,13 +3300,13 @@ msgid "Deletes all objects" msgstr "Elimina tutti gli oggetti" msgid "Clone selected" -msgstr "Clone Selected" +msgstr "Clone selezionato" msgid "Clone copies of selections" -msgstr "Clone copies of selections" +msgstr "Clonare copie delle selezioni" msgid "Select all" -msgstr "Select All" +msgstr "Seleziona tutto" msgid "Selects all objects" msgstr "Seleziona tutti gli oggetti" @@ -3275,16 +3318,16 @@ msgid "Deselects all objects" msgstr "Deseleziona tutti gli oggetti" msgid "Use Perspective View" -msgstr "Use Perspective View" +msgstr "Usa vista prospettica" msgid "Use Orthogonal View" -msgstr "Use Orthogonal View" +msgstr "Usa vista ortogonale" msgid "Show &Labels" -msgstr "Show &Labels" +msgstr "Mostra &Etichette" msgid "Show object labels in 3D scene" -msgstr "Show object labels in 3D scene" +msgstr "Mostra etichette oggetti nella scena 3D" msgid "Preferences" msgstr "Preferenze" @@ -3296,10 +3339,10 @@ msgid "Help" msgstr "Aiuto" msgid "3D Models" -msgstr "3D Models" +msgstr "Modelli 3D" msgid "&Open G-code" -msgstr "Apri G-code" +msgstr "&Apri G-code" msgid "Open a G-code file" msgstr "Apri un file G-code" @@ -3311,19 +3354,19 @@ msgid "Reload the plater from disk" msgstr "Ricarica piano da disco" msgid "Export &Toolpaths as OBJ" -msgstr "Esporta percorso strumen&to come OBJ" +msgstr "Esporta &percorso strumento come OBJ" msgid "Export toolpaths as OBJ" msgstr "Esporta percorso strumento come OBJ" msgid "Open &Studio" -msgstr "Open &Studio" +msgstr "Aprire &Studio" msgid "Open Studio" -msgstr "Open Studio" +msgstr "Apri Studio" msgid "&Quit" -msgstr "Es&ci" +msgstr "&Esci" #, c-format, boost-format msgid "Quit %s" @@ -3333,7 +3376,7 @@ msgid "&File" msgstr "&File" msgid "&View" -msgstr "&Vista" +msgstr "&Visualizza" msgid "&Help" msgstr "&Aiuto" @@ -3347,16 +3390,16 @@ msgid "A config exists with the same name: %s, do you want to override it." msgstr "" msgid "Overwrite file" -msgstr "Overwrite file" +msgstr "Sovrascrivi file" msgid "Yes to All" -msgstr "Yes to All" +msgstr "Sì a tutto" msgid "No to All" -msgstr "No to All" +msgstr "No a tutto" msgid "Choose a directory" -msgstr "Choose a directory" +msgstr "Scegliere una directory" #, c-format, boost-format msgid "There is %d config exported. (Only non-system configs)" @@ -3365,10 +3408,10 @@ msgstr[0] "" msgstr[1] "" msgid "Export result" -msgstr "Export Result" +msgstr "Risultato Esportazione" msgid "Select profile to load:" -msgstr "Select profile to load:" +msgstr "Seleziona profilo da caricare:" #, c-format, boost-format msgid "There is %d config imported. (Only non-system and compatible configs)" @@ -3378,13 +3421,13 @@ msgstr[0] "" msgstr[1] "" msgid "Import result" -msgstr "Import result" +msgstr "Risultato dell'importazione" msgid "File is missing" -msgstr "File is missing" +msgstr "File mancante" msgid "The project is no longer available." -msgstr "The project is no longer available." +msgstr "Il progetto non è più disponibile." msgid "Filament Settings" msgstr "Impostazioni Filamento" @@ -3396,161 +3439,162 @@ msgid "" "2. The Filament presets\n" "3. The Printer presets" msgstr "" -"Do you want to synchronize your personal data from Bambu Cloud? \n" -"It contains the following information:\n" -"1. Process presets\n" -"2. Filament presets\n" -"3. Printer presets" +"Vuoi sincronizzare i tuoi dati personali da Bambu Cloud?\n" +"Contiene le seguenti informazioni:\n" +"1. I presets del processo\n" +"2. I presets del filamento\n" +"3. I presets della stampante" msgid "Synchronization" -msgstr "Synchronization" +msgstr "Sincronizzazione" msgid "Initialize failed (No Device)!" -msgstr "Initialization failed (No Device)!" +msgstr "Inizializzazione fallita (nessun dispositivo)!" msgid "Initialize failed (No Camera Device)!" -msgstr "Initialization failed (No Camera Device)!" +msgstr "Inizializzazione fallita (Nessun dispositivo fotocamera)!" msgid "Initializing..." -msgstr "Initializing..." +msgstr "Inizializzazione ..." msgid "Loading..." -msgstr "Loading..." +msgstr "Caricamento…" msgid "Initialize failed (Not supported with LAN-only mode)!" -msgstr "Initialization failed (Not supported in LAN-only mode)!" +msgstr "Inizializzazione fallita (non supportata in modalità solo LAN)!" msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Initialization failed (Not accessible in LAN-only mode)!" +msgstr "Inizializzazione fallita (non accessibile in modalità solo LAN)!" msgid "Printer is busy downloading, Please wait for the downloading to finish." -msgstr "Printer is busy downloading; please wait for the download to finish." +msgstr "" +"Stampante in fase di caricamento; attendi il completamento del caricamento." msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Initialization failed (Missing LAN IP of printer)!" +msgstr "Inizializzazione fallita (indirizzo IP LAN della stampante mancante)!" msgid "Initialize failed (Not supported by printer)!" -msgstr "Initialization failed (Not supported by printer)!" +msgstr "Inizializzazione fallita (non supportata dalla stampante)!" #, c-format, boost-format msgid "Initialize failed (%s)!" -msgstr "Initialization failed (%s)!" +msgstr "Inizializzazione fallita (%s)!" msgid "Network unreachable" -msgstr "Network unreachable" +msgstr "Rete non raggiungibile" #, c-format, boost-format msgid "Stopped [%d]!" -msgstr "Stopped [%d]!" +msgstr "Interrotto [%d]!" msgid "Stopped." -msgstr "Stopped." +msgstr "Interrotto." msgid "LAN Connection Failed (Failed to start liveview)" -msgstr "LAN Connection Failed (Failed to start liveview)" +msgstr "Connessione LAN non riuscita (impossibile avviare liveview)" msgid "" "Virtual Camera Tools is required for this task!\n" "Do you want to install them?" msgstr "" -"Virtual Camera Tools is required for this task!\n" -"Do you want to install them?" +"Per questa operazione è necessario Virtual Camera Tools!\n" +"Vuoi installarli?" msgid "Downloading Virtual Camera Tools" -msgstr "Downloading Virtual Camera Tools" +msgstr "Scaricare strumenti telecamera virtuale" msgid "" "Another virtual camera is running.\n" "Bambu Studio supports only a single virtual camera.\n" "Do you want to stop this virtual camera?" msgstr "" -"Another virtual camera is running.\n" -"Bambu Studio supports only a single virtual camera.\n" -"Do you want to stop this virtual camera?" +"È in funzione un'altra telecamera virtuale.\n" +"Bambu Studio supporta solo una singola telecamera virtuale.\n" +"Si desidera interrompere questa telecamera virtuale?" #, c-format, boost-format msgid "Virtual camera initialize failed (%s)!" -msgstr "Virtual camera initialize failed (%s)!" +msgstr "Inizializzazione Virtual Camera fallita (%s)!" msgid "Information" -msgstr "Information" +msgstr "Informazione" msgid "Playing..." -msgstr "Playing..." +msgstr "Riproduzione" #, c-format, boost-format msgid "Load failed [%d]!" -msgstr "Loading failed [%d]!" +msgstr "Caricamento non riuscito [%d]!" msgid "Year" -msgstr "Year" +msgstr "Anno" msgid "Month" -msgstr "Month" +msgstr "Mese" msgid "All Files" -msgstr "All Files" +msgstr "Tutti i file" msgid "Group files by year, recent first." -msgstr "Group files by year, recent first." +msgstr "Raggruppa i file per anno, prima i recenti." msgid "Group files by month, recent first." -msgstr "Group files by month, recent first." +msgstr "Raggruppa i file per mese, prima i recenti." msgid "Show all files, recent first." -msgstr "Show all files, recent first." +msgstr "Mostra tutti i file, prima i recenti." msgid "Timelapse" -msgstr "Timelapse" +msgstr "TimeLapse" msgid "Switch to timelapse files." -msgstr "Switch to timelapse files." +msgstr "Passa ai file timelapse." msgid "Video" msgstr "Video" msgid "Switch to video files." -msgstr "Switch to video files." +msgstr "Passare ai file video." msgid "Delete selected files from printer." -msgstr "Delete selected files from printer." +msgstr "Elimina i file selezionati dalla stampante." msgid "Download" -msgstr "Download" +msgstr "Scarica" msgid "Download selected files from printer." -msgstr "Download selected files from printer." +msgstr "Scarica i file selezionati dalla stampante." msgid "Select" -msgstr "Select" +msgstr "Seleziona" msgid "Batch manage files." -msgstr "Batch manage files." +msgstr "Gestione batch dei file." msgid "No printers." -msgstr "No printers." +msgstr "Nessuna stampante." msgid "Not supported by this model of printer!" -msgstr "Not supported by this model of printer!" +msgstr "Non supportato da questo modello di stampante!" msgid "Connecting..." -msgstr "Connecting..." +msgstr "Connessione in corso…" #, c-format, boost-format msgid "Connect failed [%d]!" -msgstr "Connection failed [%d]!" +msgstr "Connessione non riuscita [%d]!" msgid "Loading file list..." -msgstr "Loading file list..." +msgstr "Caricamento elenco file..." msgid "No files" -msgstr "No files" +msgstr "Nessun file" msgid "Not accessible in LAN-only mode!" -msgstr "Not accessible in LAN-only mode!" +msgstr "Non accessibile in modalità solo LAN!" msgid "Missing LAN ip of printer!" -msgstr "Missing LAN IP of printer!" +msgstr "Manca l'IP LAN della stampante!" #, c-format, boost-format msgid "You are going to delete %u files. Are you sure to continue?" @@ -3561,23 +3605,23 @@ msgstr "" #, c-format, boost-format msgid "File '%s' was lost! Please download it again." -msgstr "File '%s' was lost! Please download it again." +msgstr "Il file \"%s\" è stato perso! Si prega di scaricarlo di nuovo." msgid "Download waiting..." -msgstr "Download waiting..." +msgstr "Download in attesa..." msgid "Play" msgstr "Play" msgid "Open Folder" -msgstr "Open Folder" +msgstr "Apri cartella" msgid "Download finished" -msgstr "Download finished" +msgstr "Download completato" #, c-format, boost-format msgid "Downloading %d%%..." -msgstr "Downloading %d%%..." +msgstr "Scaricamento %d%%..." msgid "Speed:" msgstr "Velocità:" @@ -3592,10 +3636,10 @@ msgid "Zoom" msgstr "Zoom" msgid "Translation/Zoom" -msgstr "Translation/Zoom" +msgstr "Traduzione/Zoom" msgid "3Dconnexion settings" -msgstr "Impostazioni 3Dconnexion" +msgstr "Impostazioni 3D connexion" msgid "Swap Y/Z axes" msgstr "Inverti assi Y/Z" @@ -3604,19 +3648,19 @@ msgid "Camera" msgstr "Camera" msgid "SD Card" -msgstr "MicroSD Card" +msgstr "MicroSD" msgid "Camera Setting" -msgstr "Camera Setting" +msgstr "Impostazioni camera" msgid "Printing Progress" -msgstr "Printing progress" +msgstr "Progresso di stampa" msgid "Resume" -msgstr "Resume" +msgstr "Continua" msgid "Stop" -msgstr "Stop" +msgstr "Ferma" msgid "0" msgstr "0" @@ -3625,72 +3669,72 @@ msgid "Layers: N/A" msgstr "Layers: N/A" msgid "Clear" -msgstr "Clear" +msgstr "Cancella" msgid "Control" -msgstr "Control" +msgstr "Controllo" msgid "Print Options" -msgstr "Print Options" +msgstr "Opzioni stampa" msgid "100%" msgstr "100%" msgid "Lamp" -msgstr "Lamp" +msgstr "luce" msgid "Aux" -msgstr "Aux" +msgstr "Ausiliario" msgid "Cham" -msgstr "Cham" +msgstr "Camera" msgid "Bed" msgstr "Piano" msgid "Unload" -msgstr "Unload" +msgstr "Scarica" msgid "Debug Info" -msgstr "Debug Info" +msgstr "Informazioni di debug" msgid "No SD Card" -msgstr "No MicroSD Card" +msgstr "Nessuna scheda microSD" msgid "SD Card Abnormal" -msgstr "MicroSD Card Abnormal" +msgstr "microSD anomala" msgid "Printing List" -msgstr "Printing list" +msgstr "Elenco di stampa" msgid "Cancel print" -msgstr "Cancel print" +msgstr "Annulla la stampa" msgid "Are you sure you want to cancel this print?" -msgstr "Are you sure you want to cancel this print?" +msgstr "Sei sicuro di voler annullare la stampa?" #, c-format, boost-format msgid "" "Disconnected from printer [%s] due to LAN mode disabled.Please reconnect the " "printer by logging in with your user account." msgstr "" -"Disconnected from printer [%s] due to LAN mode being disabled. Please " -"reconnect the printer by logging in with your user account." +"Disconnessione dalla stampante [%s] a causa della modalità LAN disattivata. " +"Ricollegare la stampante accedendo con il proprio account utente." #, c-format, boost-format msgid "" "Disconnected from printer [%s] due to LAN mode enabled.Please reconnect the " "printer by inputting Access Code which can be gotten from printer screen." msgstr "" -"Disconnected from printer [%s] due to LAN mode being enabled. Please " -"reconnect the printer by inputting the Access Code which can be gotten from " -"the printer screen." +"Disconnessione dalla stampante [%s] a causa della modalità LAN attivata. " +"Ricollegare la stampante inserendo il codice di accesso che può essere " +"ottenuto dal display della stampante." msgid "Downloading..." -msgstr "Downloading..." +msgstr "Download in corso…" msgid "Cloud Slicing..." -msgstr "Cloud Slicing..." +msgstr "Slicing in cloud..." #, c-format, boost-format msgid "In Cloud Slicing Queue, there are %s tasks ahead." @@ -3705,32 +3749,35 @@ msgid "Layers: %d/%d" msgstr "Layers: %d/%d" msgid "Please heat the nozzle to above 170 degree before loading filament." -msgstr "Please heat the nozzle to above 170 degrees before loading filament." +msgstr "" +"Riscaldare il nozzle a una temperatura superiore a 170 gradi prima di " +"caricare il filamento." msgid "Still unload" -msgstr "Still unload" +msgstr "Scarica ancora" msgid "Still load" -msgstr "Still load" +msgstr "Carica ancora" msgid "AMS settings are not supported for external spool" -msgstr "Current AMS settings do not support using an external spool." +msgstr "" +"Le impostazioni attuali dell'AMS non supportano l'uso di una bobina esterna." msgid "Please select an AMS slot before calibration" -msgstr "Please select an AMS slot before calibration." +msgstr "Seleziona uno slot AMS prima di calibrare." msgid "" "Cannot read filament info: the filament is loaded to the tool head,please " "unload the filament and try again." msgstr "" -"Cannot read filament info: the filament is loaded to the tool head. Please " -"unload the filament and try again." +"Impossibile leggere le informazioni sul filamento: il filamento è caricato " +"nella testa di stampa. Scaricare il filamento e riprovare." msgid "This only takes effect during printing" -msgstr "This only takes effect during printing" +msgstr "Questo ha effetto solo in fase di stampa" msgid "Silent" -msgstr "Silent" +msgstr "Silenzioso" msgid "Standard" msgstr "Standard" @@ -3742,10 +3789,10 @@ msgid "Ludicrous" msgstr "Ludicrous" msgid "Can't start this without SD card." -msgstr "Can't start without MicroSD card." +msgstr "Impossibile iniziare senza scheda MicroSD." msgid "Failed to connect to the server" -msgstr "Failed to connect to the server" +msgstr "Connessione al server non riuscita" msgid "Status" msgstr "Stato" @@ -3754,13 +3801,13 @@ msgid "Media" msgstr "Media" msgid "Update" -msgstr "Update" +msgstr "Aggiorna" msgid "HMS" msgstr "HMS" msgid "Failed to connect to the printer" -msgstr "Failed to connect to the printer" +msgstr "Impossibile connettersi alla stampante" msgid "Don't show again" msgstr "Non mostrare più" @@ -3775,7 +3822,7 @@ msgstr "%s ha riscontrato un errore" #, c-format, boost-format msgid "%s warning" -msgstr "Avviso %s" +msgstr "attenzione %s" #, c-format, boost-format msgid "%s has a warning" @@ -3783,50 +3830,50 @@ msgstr "%s ha un avviso" #, c-format, boost-format msgid "%s info" -msgstr "Informazioni %s " +msgstr "info %s" #, c-format, boost-format msgid "%s information" msgstr "%s informazioni" msgid "Skip" -msgstr "Skip" +msgstr "Salta" msgid "3D Mouse disconnected." msgstr "Mouse 3D disconnesso." msgid "Configuration can update now." -msgstr "A new configuration is available. Update now?" +msgstr "È disponibile una nuova configurazione. Aggiorna adesso?" msgid "Detail." -msgstr "More" +msgstr "Altro" msgid "Integration was successful." -msgstr "Integration was successful." +msgstr "L'integrazione è avvenuta con successo." msgid "Integration failed." -msgstr "Integration failed." +msgstr "Integrazione fallita." msgid "Undo integration was successful." -msgstr "Undo integration was successful." +msgstr "Annullamento integrazione riuscita." msgid "New network plug-in available." -msgstr "New network plug-in available" +msgstr "Nuovo plug-in di network disponibile" msgid "Details" -msgstr "Details" +msgstr "Dettagli" msgid "Undo integration failed." -msgstr "Undo integration failed." +msgstr "Annullamento integrazione non riuscito." msgid "Exporting." -msgstr "Esportazione." +msgstr "Esportazione" msgid "Software has New version." -msgstr "An update is available!" +msgstr "Aggiornamento disponibile!" msgid "Goto download page." -msgstr "Go to download page" +msgstr "Vai alla pagina di download" msgid "Open Folder." msgstr "Apri Cartella." @@ -3837,14 +3884,14 @@ msgstr "" #, c-format, boost-format msgid "%1$d Object has custom supports." msgid_plural "%1$d Objects have custom supports." -msgstr[0] "%1$d Object has custom supports." -msgstr[1] "%1$d Objects have custom supports." +msgstr[0] "%1$d L'oggetto ha supporti personalizzati." +msgstr[1] "%1$d Gli oggetti hanno supporti personalizzati." #, c-format, boost-format msgid "%1$d Object has color painting." msgid_plural "%1$d Objects have color painting." -msgstr[0] "%1$d Object has color painting." -msgstr[1] "%1$d Objects have color painting." +msgstr[0] "%1$d L'oggetto ha una pittura a colori." +msgstr[1] "%1$d Gli oggetti hanno una pittura a colori." #, c-format, boost-format msgid "%1$d object was loaded as a part of cut object." @@ -3853,52 +3900,52 @@ msgstr[0] "" msgstr[1] "" msgid "ERROR" -msgstr "ERROR" +msgstr "ERRORE" msgid "CANCELED" -msgstr "CANCELED" +msgstr "ANNULLATO" msgid "COMPLETED" -msgstr "COMPLETED" +msgstr "COMPLETATO" msgid "Cancel upload" -msgstr "Cancel upload" +msgstr "Annulla caricamento" msgid "Slice ok." -msgstr "Slice complete" +msgstr "Slice completo" msgid "Jump to" -msgstr "Jump to" +msgstr "Vai a" msgid "Error:" -msgstr "Error:" +msgstr "Errore:" msgid "Warning:" -msgstr "Warning:" +msgstr "Attenzione:" msgid "Export successfully." -msgstr "Exported successfully" +msgstr "Esportato correttamente" msgid " (Repair)" -msgstr " (Repair)" +msgstr "(Ripara)" msgid " Click here to install it." -msgstr " Click here to install it." +msgstr "Clicca per installarlo." msgid "WARNING:" msgstr "ATTENZIONE:" msgid "Your model needs support ! Please make support material enable." -msgstr "Your model needs support! Please enable support material." +msgstr "Il modello necessita di supporti! Abilita i materiali di supporto." msgid "Gcode path overlap" -msgstr "G-code path overlap" +msgstr "Sovrapposizione del percorso G-code" msgid "Support painting" -msgstr "Support Painting" +msgstr "Pittura Supporti" msgid "Color painting" -msgstr "Color Painting" +msgstr "Pittura a colori" msgid "Cut connectors" msgstr "" @@ -3913,11 +3960,11 @@ msgid "" "The application cannot run normally because OpenGL version is lower than " "2.0.\n" msgstr "" -"The application cannot run normally because your OpenGL version is lower " -"than 2.0.\n" +"L'applicazione non può essere eseguita normalmente perché la versione OpenGL " +"è precedente alla 2.0.\n" msgid "Please upgrade your graphics card driver." -msgstr "Please upgrade your graphics card driver." +msgstr "Aggiorna i driver della scheda grafica." msgid "Unsupported OpenGL version" msgstr "Versione OpenGL non supportata" @@ -3927,7 +3974,7 @@ msgid "" "Unable to load shaders:\n" "%s" msgstr "" -"Unable to load shaders:\n" +"Impossibile caricare gli shader:\n" "%s" msgid "Error loading shaders" @@ -3942,54 +3989,54 @@ msgid "Bottom" msgstr "Inferiore" msgid "Enable AI monitoring of printing" -msgstr "Enable AI monitoring of printing" +msgstr "Abilita monitoraggio AI della stampa" msgid "Sensitivity of pausing is" -msgstr "Sensitivity of pausing is" +msgstr "La sensibilità pausa è" msgid "Enable detection of build plate position" -msgstr "Enable detection of build plate position" +msgstr "Abilita rilevamento posizione del piatto" msgid "" "The localization tag of build plate is detected, and printing is paused if " "the tag is not in predefined range." msgstr "" -"The localization tag of the build plate will be detected, and printing will " -"be paused if the tag is not in predefined range." +"Il tag di localizzazione del piatto verrà rilevato e la stampa verrà messa " +"in pausa se il tag non rientra nell'intervallo predefinito." msgid "First Layer Inspection" -msgstr "First Layer Inspection" +msgstr "Ispezione del primo layer" msgid "Auto-recovery from step loss" -msgstr "Auto-recovery from step loss" +msgstr "Recupero automatico perdita passi" msgid "Global" -msgstr "Global" +msgstr "Globale" msgid "Objects" -msgstr "Objects" +msgstr "Oggetti" msgid "Advance" -msgstr "Advanced" +msgstr "Avanzata" msgid "Compare presets" -msgstr "Confronta i preset" +msgstr "Confronta presets" msgid "View all object's settings" -msgstr "View all object's settings" +msgstr "Visualizza tutte le impostazioni oggetto" msgid "Filament settings" -msgstr "Filament settings" +msgstr "Impostazioni Filamento" msgid "Printer settings" -msgstr "Printer settings" +msgstr "Impostazioni stampante" #, boost-format msgid " plate %1%:" -msgstr " plate %1%:" +msgstr " piatto %1%:" msgid "Invalid name, the following characters are not allowed:" -msgstr "Invalid name, the following characters are not allowed:" +msgstr "Nome non valido, i seguenti caratteri non sono consentiti:" msgid "Sliced Info" msgstr "Informazioni processo" @@ -4004,52 +4051,53 @@ msgid "Used Filament (g)" msgstr "Filamento usato (g)" msgid "Used Materials" -msgstr "Used Materials" +msgstr "Materiali usati" msgid "Estimated time" -msgstr "Estimated time" +msgstr "Tempo stimato" msgid "Filament changes" -msgstr "Filament changes" +msgstr "Cambi filamento" msgid "Click to edit preset" msgstr "Clicca per modificare il preset" msgid "Connection" -msgstr "Connection" +msgstr "Connessione" msgid "Bed type" -msgstr "Bed type" +msgstr "Tipo di piatto" msgid "Flushing volumes" -msgstr "Flushing volumes" +msgstr "Volumi di spurgo" msgid "Add one filament" -msgstr "Add one filament" +msgstr "Aggiungere un filamento" msgid "Remove last filament" -msgstr "Remove last filament" +msgstr "Rimuovi ultimo filamento" msgid "Synchronize filament list from AMS" -msgstr "Synchronize filament list from AMS" +msgstr "Sincronizza l'elenco filamenti da AMS" msgid "Set filaments to use" -msgstr "Set filaments to use" +msgstr "Imposta filamenti da usare" msgid "" "No AMS filaments. Please select a printer in 'Device' page to load AMS info." msgstr "" -"No AMS filaments. Please select a printer in 'Device' page to load AMS info." +"Nessun filamento AMS. Selezionare una stampante nella pagina 'Dispositivo' " +"per caricare le informazioni AMS." msgid "Sync filaments with AMS" -msgstr "Sync filaments with AMS" +msgstr "Sincronizza filamenti con AMS" msgid "" "Sync filaments with AMS will drop all current selected filament presets and " "colors. Do you want to continue?" msgstr "" -"Sync filaments with AMS will drop all current selected filament presets and " -"colors. Do you want to continue?" +"La sincronizzazione filamenti con AMS eliminerà tutti i preset e i colori " +"dei filamenti attualmente selezionati. Vuoi continuare?" msgid "" "Already did a synchronization, do you want to sync only changes or resync " @@ -4063,98 +4111,100 @@ msgid "Resync" msgstr "" msgid "There are no compatible filaments, and sync is not performed." -msgstr "There are no compatible filaments, and sync is not performed." +msgstr "" +"Non ci sono filamenti compatibili, la sincronizzazione non viene eseguita." msgid "" "There are some unknown filaments mapped to generic preset. Please update " "Bambu Studio or restart Bambu Studio to check if there is an update to " "system presets." msgstr "" -"There are some unknown filaments mapped to generic presets. Please update " -"Bambu Studio or restart Bambu Studio to check if there is an update to " -"system presets." +"Esistono alcuni filamenti sconosciuti mappati su preset generici. Aggiorna " +"Bambu Studio o riavvia Bambu Studio per verificare se è disponibile un " +"aggiornamento ai preset di sistema." msgid "Untitled" msgstr "Senza titolo" #, boost-format msgid "Do you want to save changes to \"%1%\"?" -msgstr "Do you want to save changes to \"%1%\"?" +msgstr "Vuoi salvare le modifiche a \"%1%\"?" #, c-format, boost-format msgid "" "Successfully unmounted. The device %s(%s) can now be safely removed from the " "computer." msgstr "" -"Successfully unmounted. The device %s(%s) can now be safely removed from the " -"computer." +"Smontato con successo. Il dispositivo %s (%s) può ora essere rimosso dal " +"computer in sicurezza" #, c-format, boost-format msgid "Ejecting of device %s(%s) has failed." -msgstr "Ejecting of device %s(%s) has failed." +msgstr "Espulsione del dispositivo %s (%s) non riuscita." msgid "Previous unsaved project detected, do you want to restore it?" msgstr "" -"Previously unsaved items have been detected. Do you want to restore them?" +"Sono stati rilevati elementi precedentemente non salvati. Vuoi ripristinarli?" msgid "Restore" -msgstr "Restore" +msgstr "Ripristina" msgid "" "The bed temperature exceeds filament's vitrification temperature. Please " "open the front door of printer before printing to avoid nozzle clog." msgstr "" -"The bed temperature exceeds filament's vitrification temperature. Please " -"open the front door of printer before printing to avoid nozzle clogs." +"La temperatura del piano supera la temperatura di vetrificazione del " +"filamento. Aprire lo sportello anteriore della stampante prima di stampare " +"per evitare l'intasamento del nozzle." msgid "" "The nozzle hardness required by the filament is higher than the default " "nozzle hardness of the printer. Please replace the hardened nozzle or " "filament, otherwise, the nozzle will be attrited or damaged." msgstr "" -"The nozzle hardness required by the filament is higher than the default " -"nozzle hardness of the printer. Please replace the hardened nozzle or " -"filament, otherwise, the nozzle will be worn down or damaged." +"La durezza del nozzle richiesta dal filamento è superiore alla durezza del " +"nozzle predefinito della stampante. Si prega di sostituire il nozzle o il " +"filamento indurito, altrimenti il nozzle sarà usurato o danneggiato." #, c-format, boost-format msgid "Loading file: %s" -msgstr "Loading file: %s" +msgstr "Caricamento file: %s" msgid "The 3mf is not from Bambu Lab, load geometry data only." -msgstr "The 3mf is not from Bambu Lab, loading geometry data only." +msgstr "Il 3mf non proviene da Bambu Lab, carica solo dati geometrici." msgid "Load 3mf" -msgstr "Load 3mf" +msgstr "Carica 3mf" msgid "The Config can not be loaded." -msgstr "The Config cannot be loaded." +msgstr "La configurazione non può essere caricata." msgid "The 3mf is generated by old Bambu Studio, load geometry data only." msgstr "" -"The 3mf was generated by an old version of Bambu Studio, loading geometry " -"data only." +"Il 3mf è stato generato da una vecchia versione di Bambu Studio, caricando " +"solo i dati geometrici." #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Found following keys " "unrecognized:" msgstr "" -"The 3mf's version %s is newer than %s's version %s, Found following keys " -"unrecognized:" +"Versione del 3mf %s è più recente %s della versione %s, trovate le seguenti " +"chiavi non riconosciute:" msgid "You'd better upgrade your software.\n" -msgstr "You should update your software.\n" +msgstr "Devi aggiornare il software.\n" msgid "Newer 3mf version" -msgstr "Newer 3mf version" +msgstr "Versione 3mf più recente" #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " "software." msgstr "" -"The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " -"software." +"Versione del 3mf %s è più recente della versione %s di %s, si consiglia di " +"aggiornare il software." msgid "Invalid values found in the 3mf:" msgstr "" @@ -4163,68 +4213,72 @@ msgid "Please correct them in the param tabs" msgstr "" msgid "The 3mf is not compatible, load geometry data only!" -msgstr "The 3mf is not compatible, loading geometry data only!" +msgstr "Il 3mf non è compatibile, carica solo i dati della geometria!" msgid "Incompatible 3mf" -msgstr "Incompatible 3mf" +msgstr "3mf incompatibile" msgid "Name of components inside step file is not UTF8 format!" -msgstr "Component name(s) inside step file not in UTF8 format!" +msgstr "" +"Il nome/i del componente all'interno del file step non è in formato UTF8!" msgid "The name may show garbage characters!" -msgstr "Because of unsupported text encoding, garbage characters may appear!" +msgstr "" +"A causa di una codifica del testo non supportata, potrebbero apparire " +"caratteri inutili!" #, boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." -msgstr "Failed loading file \"%1%\". An invalid configuration was found." +msgstr "" +"Caricamento del file \"%1%\" non riuscito. Trovata configurazione non valida." msgid "Objects with zero volume removed" -msgstr "Objects with zero volume removed" +msgstr "Oggetti con volume zero rimossi" msgid "The volume of the object is zero" -msgstr "The volume of the object is zero" +msgstr "Il volume dell'oggetto è zero" #, c-format, boost-format msgid "" "The object from file %s is too small, and maybe in meters or inches.\n" " Do you want to scale to millimeters?" msgstr "" -"The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"L'oggetto del file %s è troppo piccolo e può essere in metri o pollici.\n" +" Si desidera scalare in millimetri?" msgid "Object too small" -msgstr "Object too small" +msgstr "Oggetto troppo piccolo" msgid "" "This file contains several objects positioned at multiple heights.\n" "Instead of considering them as multiple objects, should \n" "the file be loaded as a single object having multiple parts?" msgstr "" -"This file contains several objects positioned at multiple heights.\n" -"Instead of considering them as multiple objects, should \n" -"the file be loaded as a single object with multiple parts?" +"Il file contiene oggetti posizionati ad altezze diverse.\n" +"Invece di considerarli come oggetti multipli, è necessario\n" +"considerarlo come singolo oggetto con più parti?" msgid "Multi-part object detected" -msgstr "Multi-part object detected" +msgstr "Rilevato oggetto in più parti" msgid "Load these files as a single object with multiple parts?\n" -msgstr "Load these files as a single object with multiple parts?\n" +msgstr "Caricare questi file come un singolo oggetto con più parti?\n" msgid "Object with multiple parts was detected" -msgstr "An object with multiple parts was detected" +msgstr "È stato rilevato un oggetto con più parti" msgid "The file does not contain any geometry data." -msgstr "The file does not contain any geometry data." +msgstr "Il file non contiene dati geometrici." msgid "" "Your object appears to be too large, Do you want to scale it down to fit the " "heat bed automatically?" msgstr "" -"Your object appears to be too large, Do you want to scale it down to fit the " -"print bed automatically?" +"L'oggetto sembra troppo grande. Vuoi ridimensionarlo per adattarlo " +"automaticamente al piatto di stampa?" msgid "Object too large" -msgstr "Object too large" +msgstr "Oggetto troppo grande" msgid "Export STL file:" msgstr "Esporta file STL:" @@ -4242,105 +4296,107 @@ msgid "" msgstr "" msgid "The selected object couldn't be split." -msgstr "The selected object couldn't be split." +msgstr "L'oggetto selezionato non può essere diviso." msgid "Another export job is running." -msgstr "Another export job is running." +msgstr "È in esecuzione un altro processo di esportazione." msgid "Select a new file" -msgstr "Select a new file" +msgstr "Seleziona nuovo file" msgid "File for the replace wasn't selected" -msgstr "File for the replacement wasn't selected" +msgstr "Il file per la sostituzione non è stato selezionato" msgid "Error during replace" -msgstr "Error during replacement" +msgstr "Errore durante la sostituzione" msgid "Please select a file" -msgstr "Please select a file" +msgstr "Seleziona file" msgid "Slicing" msgstr "Slicing" msgid "There are warnings after slicing models:" -msgstr "There are warnings after slicing models:" +msgstr "Ci sono avvisi dopo aver elaborato i modelli:" msgid "warnings" -msgstr "warnings" +msgstr "Avvisi" msgid "Invalid data" msgstr "Dati non validi" msgid "Slicing Canceled" -msgstr "Slicing Canceled" +msgstr "Slicing Annullato" #, c-format, boost-format msgid "Slicing Plate %d" -msgstr "Slicing Plate %d" +msgstr "Slicing Piatto %d" msgid "Please resolve the slicing errors and publish again." -msgstr "Please resolve the slicing errors and publish again." +msgstr "Risolvi gli errori di slicing e pubblica nuovamente." msgid "" "Network Plug-in is not detected. Network related features are unavailable." msgstr "" -"Network Plug-in is not detected. Network related features are unavailable." +"Il plug-in di rete non è stato rilevato. Le funzioni di rete non sono " +"disponibili." msgid "" "Preview only mode:\n" "The loaded file contains gcode only, Can not enter the Prepare page" msgstr "" -"Preview only mode:\n" -"The loaded file contains G-code only, cannot enter the Prepare page" +"Modalità solo anteprima:\n" +"Il file caricato contiene solo G-code, non può accedere alla pagina Prepara" msgid "You can keep the modified presets to the new project or discard them" -msgstr "You can keep the modified presets for the new project or discard them" +msgstr "" +"È possibile conservare i preset modificati per il nuovo progetto o eliminarli" msgid "Creating a new project" -msgstr "Creazione nuovo progetto" +msgstr "Crea un nuovo progetto" msgid "Load project" -msgstr "Load project" +msgstr "Carica progetto" msgid "" "Failed to save the project.\n" "Please check whether the folder exists online or if other programs open the " "project file." msgstr "" -"Failed to save the project.\n" -"Please check whether the folder exists online or if other programs have the " -"project file open." +"Non è stato possibile salvare il progetto.\n" +"Verificare se online la cartella esiste o se altri programmi hanno aperto il " +"file del progetto." msgid "Save project" -msgstr "Save project" +msgstr "Salva progetto" msgid "Importing Model" -msgstr "Importing Model" +msgstr "Importazione del modello" msgid "prepare 3mf file..." -msgstr "preparing 3mf file..." +msgstr "preparazione file 3mf..." msgid "downloading project ..." -msgstr "downloading project ..." +msgstr "scaricamento progetto..." #, c-format, boost-format msgid "Project downloaded %d%%" -msgstr "Project downloaded %d%%" +msgstr "Progetto scaricato %d%%" msgid "The selected file" msgstr "Il file selezionato" msgid "does not contain valid gcode." -msgstr "non contiene un g-code valido." +msgstr "non contiene G-code valido." msgid "Error occurs while loading G-code file" -msgstr "An Error has occurred while loading the G-code file." +msgstr "Si è verificato un errore durante il caricamento del file G-code." msgid "Drop project file" -msgstr "Drop project file" +msgstr "Elimina il file di progetto" msgid "Please select an action" -msgstr "Please select an action" +msgstr "Seleziona un'azione" msgid "Open as project" msgstr "Apri come progetto" @@ -4349,33 +4405,33 @@ msgid "Import geometry only" msgstr "Importa solo la geometria" msgid "Only one G-code file can be opened at the same time." -msgstr "Only one G-code file can be opened at a time." +msgstr "È possibile aprire un solo file G-code alla volta." msgid "G-code loading" -msgstr "G-code loading" +msgstr "Caricamento G-code" msgid "G-code files can not be loaded with models together!" -msgstr "G-code files and models cannot be loaded together!" +msgstr "I file e i modelli G-code non possono essere caricati insieme!" msgid "Can not add models when in preview mode!" -msgstr "Unable to add models in preview mode" +msgstr "Impossibile aggiungere modelli in modalità anteprima" msgid "Add Models" -msgstr "Add Models" +msgstr "Aggiungi modelli" msgid "All objects will be removed, continue?" msgstr "Saranno rimossi tutti gli oggetti, continuare?" msgid "The current project has unsaved changes, save it before continue?" msgstr "" -"The current project has unsaved changes. Would you like to save before " -"continuing?" +"Il progetto corrente ha modifiche non salvate. Desideri salvarle prima di " +"continuare?" msgid "Remember my choice." msgstr "" msgid "Number of copies:" -msgstr "Number of copies:" +msgstr "Numero di copie:" msgid "Copies of the selected object" msgstr "Copie dell'oggetto selezionato" @@ -4384,22 +4440,23 @@ msgid "Save G-code file as:" msgstr "Salva il file G-code come:" msgid "Save Sliced file as:" -msgstr "Save Sliced file as:" +msgstr "Salva file elaborato come:" #, c-format, boost-format msgid "" "The file %s has been sent to the printer's storage space and can be viewed " "on the printer." msgstr "" -"The file %s has been sent to the printer's storage space and can be viewed " -"on the printer." +"Il file %s è stato inviato allo spazio di memoria della stampante e può " +"essere visualizzato sulla stampante." msgid "" "Print By Object: \n" "Suggest to use auto-arrange to avoid collisions when printing." msgstr "" -"Print By Object: \n" -"We suggest using auto-arrange to avoid collisions when printing." +"Stampa per oggetto: \n" +"Ti consigliamo di utilizzare la disposizione automatica per evitare " +"collisioni durante la stampa." msgid "Send G-code" msgstr "Invia G-code" @@ -4408,29 +4465,31 @@ msgid "Send to printer" msgstr "Manda alla stampante" msgid "Custom supports and color painting were removed before repairing." -msgstr "Custom supports and color painting were removed before repairing." +msgstr "" +"I supporti personalizzati e la pittura a colori sono stati rimossi prima " +"della riparazione." msgid "Invalid number" -msgstr "Invalid number" +msgstr "Numero non valido" msgid "Plate Settings" msgstr "" #, boost-format msgid "Part name: %1%\n" -msgstr "Part name: %1%\n" +msgstr "Nome parte: %1%\n" #, boost-format msgid "Object name: %1%\n" -msgstr "Object name: %1%\n" +msgstr "Nome oggetto: %1%\n" #, boost-format msgid "Size: %1% x %2% x %3% in\n" -msgstr "Size: %1% x %2% x %3% in\n" +msgstr "Dimensioni: %1% x %2% x %3% in\n" #, boost-format msgid "Size: %1% x %2% x %3% mm\n" -msgstr "Size: %1% x %2% x %3% mm\n" +msgstr "Dimensioni: %1% x %2% x %3% mm\n" #, boost-format msgid "Volume: %1% in³\n" @@ -4442,17 +4501,17 @@ msgstr "Volume: %1% mm³\n" #, boost-format msgid "Triangles: %1%\n" -msgstr "Triangles: %1%\n" +msgstr "Triangoli: %1%\n" msgid "Tips:" -msgstr "Tips:" +msgstr "Suggerimenti:" msgid "" "\"Fix Model\" feature is currently only on Windows. Please repair the model " "on Bambu Studio(windows) or CAD softwares." msgstr "" -"The \"Fix Model\" feature is currently only on Windows. Please repair the " -"model in Bambu Studio (Windows) or CAD software." +"La funzione \"Correggi modello\" è attualmente disponibile solo su Windows. " +"Si prega di riparare il modello su Bambu Studio (Windows) o su software CAD." #, c-format, boost-format msgid "" @@ -4462,64 +4521,64 @@ msgid "" msgstr "" msgid "Switching the language requires application restart.\n" -msgstr "Switching languages requires the application to restart.\n" +msgstr "Il cambio lingua richiede il riavvio dell'applicazione.\n" msgid "Do you want to continue?" -msgstr "Do you want to continue?" +msgstr "Vuoi continuare?" msgid "Language selection" msgstr "Selezione lingua" msgid "Switching application language while some presets are modified." -msgstr "Switching application language while some presets are modified." +msgstr "Cambio lingua applicazione durante la modifica di alcuni preset." msgid "Changing application language" -msgstr "Changing application language" +msgstr "Modifica lingua applicazione" msgid "Changing the region will log out your account.\n" -msgstr "Changing the region will log you out of your account.\n" +msgstr "La modifica della regione ti disconnetterà dal tuo account.\n" msgid "Region selection" -msgstr "Region selection" +msgstr "Selezione Paese" msgid "Second" -msgstr "Second" +msgstr "Secondo" msgid "Browse" -msgstr "Browse" +msgstr "Sfoglia" msgid "Choose Download Directory" -msgstr "Choose Download Directory" +msgstr "Scegliere la directory di download" msgid "General Settings" -msgstr "General Settings" +msgstr "Impostazioni generali" msgid "Asia-Pacific" -msgstr "Asia-Pacific" +msgstr "Asia-Pacifico" msgid "China" -msgstr "China" +msgstr "Cina" msgid "Europe" -msgstr "Europe" +msgstr "Europa" msgid "North America" -msgstr "North America" +msgstr "Nord America" msgid "Others" -msgstr "Others" +msgstr "Altri" msgid "Login Region" -msgstr "Login Region" +msgstr "Regione di accesso" msgid "Metric" -msgstr "Metric" +msgstr "Metrico" msgid "Imperial" -msgstr "Imperial" +msgstr "Imperiale" msgid "Units" -msgstr "Units" +msgstr "Unità" msgid "Zoom to mouse position" msgstr "" @@ -4530,19 +4589,20 @@ msgid "" msgstr "" msgid "Show \"Tip of the day\" notification after start" -msgstr "Show \"Tip of the day\" notification after start" +msgstr "Mostra \"Suggerimento del giorno\" dopo l'avvio" msgid "If enabled, useful hints are displayed at startup." -msgstr "If enabled, useful hints are displayed at startup." +msgstr "Se abilitato, all'avvio vengono visualizzati suggerimenti utili." msgid "Presets" msgstr "" msgid "Auto sync user presets(Printer/Filament/Process)" -msgstr "Auto sync user presets (Printer/Filament/Process)" +msgstr "" +"Sincronizzazione automatica preset utente (stampante/filamento/processo)" msgid "User Sync" -msgstr "User Sync" +msgstr "Sincronizza utente" msgid "Update built-in Presets automatically." msgstr "" @@ -4554,31 +4614,31 @@ msgid "Clear my choice on the unsaved presets." msgstr "" msgid "Associate files to BambuStudio" -msgstr "Associate files to Bambu Studio" +msgstr "Associa i file a Bambu Studio" msgid "Associate .3mf files to BambuStudio" -msgstr "Associate .3mf files to Bambu Studio" +msgstr "Associa i file .3mf a Bambu Studio" msgid "If enabled, sets BambuStudio as default application to open .3mf files" msgstr "" -"If enabled, this sets Bambu Studio as the default application to open .3mf " -"files." +"Se abilitata, imposta Bambu Studio come applicazione predefinita per aprire " +"i file .3mf." msgid "Associate .stl files to BambuStudio" -msgstr "Associate .stl files to Bambu Studio" +msgstr "Associa i file .stl a Bambu Studio" msgid "If enabled, sets BambuStudio as default application to open .stl files" msgstr "" -"If enabled, this sets Bambu Studio as the default application to open .stl " -"files." +"Se abilitata, imposta Bambu Studio come applicazione predefinita per aprire " +"i file .stl." msgid "Associate .step/.stp files to BambuStudio" -msgstr "Associate .step/.stp files to Bambu Studio" +msgstr "Associa i file .step/.stp a Bambu Studio" msgid "If enabled, sets BambuStudio as default application to open .step files" msgstr "" -"If enabled, this sets Bambu Studio as the default application to open .step " -"files." +"Se abilitata, imposta Bambu Studio come applicazione predefinita per aprire " +"i file .step." msgid "Online Models" msgstr "" @@ -4596,7 +4656,7 @@ msgid "Clear my choice on the unsaved projects." msgstr "" msgid "Auto-Backup" -msgstr "Auto-Backup" +msgstr "Backup automatico" msgid "" "Backup your project periodically for restoring from the occasional crash." @@ -4609,67 +4669,67 @@ msgid "The peroid of backup in seconds." msgstr "" msgid "Downloads" -msgstr "Downloads" +msgstr "Scaricati" msgid "Dark Mode" -msgstr "Dark Mode" +msgstr "Modalità Scura" msgid "Enable Dark mode" -msgstr "Enable Dark Mode" +msgstr "Attiva modalità Scura" msgid "Home page and daily tips" -msgstr "Home page and daily tips" +msgstr "Home page e suggerimenti quotidiani" msgid "Show home page on startup" -msgstr "Show home page on startup" +msgstr "Mostra pagina iniziale all'avvio" msgid "Sync settings" -msgstr "Sync settings" +msgstr "Impostazioni sincronizzazione" msgid "User sync" -msgstr "User sync" +msgstr "Sincronizza utente" msgid "Preset sync" -msgstr "Preset sync" +msgstr "Sincronizzazione preset" msgid "Preferences sync" -msgstr "Preferences sync" +msgstr "Sincronizzazione preferenze" msgid "View control settings" -msgstr "View control settings" +msgstr "Visualizza impostazioni di controllo" msgid "Rotate of view" -msgstr "Rotate View" +msgstr "Ruota vista" msgid "Move of view" -msgstr "Pan View" +msgstr "Vista panoramica" msgid "Zoom of view" -msgstr "Zoom View" +msgstr "Vista Zoom" msgid "Other" msgstr "Altro" msgid "Mouse wheel reverses when zooming" -msgstr "Reverse scroll direction while zooming" +msgstr "Invertire la direzione di scorrimento durante lo zoom" msgid "Develop mode" -msgstr "Developer mode" +msgstr "Modalità sviluppatore" msgid "Dump video" -msgstr "Dump video" +msgstr "Scarica video" msgid "Log Level" -msgstr "Log Level" +msgstr "Livello log" msgid "fatal" -msgstr "fatal" +msgstr "fatale" msgid "error" -msgstr "error" +msgstr "Errore" msgid "warning" -msgstr "warning" +msgstr "attenzione" msgid "info" msgstr "info" @@ -4678,10 +4738,10 @@ msgid "debug" msgstr "debug" msgid "trace" -msgstr "trace" +msgstr "Traccia" msgid "Host Setting" -msgstr "Host Setting" +msgstr "Impostazione host" msgid "DEV host: api-dev.bambu-lab.com/v1" msgstr "DEV host: api-dev.bambu-lab.com/v1" @@ -4693,22 +4753,22 @@ msgid "PRE host: api-pre.bambu-lab.com/v1" msgstr "PRE host: api-pre.bambu-lab.com/v1" msgid "Product host" -msgstr "Product host" +msgstr "Host del prodotto" msgid "debug save button" -msgstr "Debug save button" +msgstr "Pulsante salvataggio debug" msgid "save debug settings" -msgstr "save debug settings" +msgstr "salva impostazioni debug" msgid "DEBUG settings have saved successfully!" -msgstr "Debug settings have been saved successfully!" +msgstr "Le impostazioni di debug sono state salvate correttamente!" msgid "Switch cloud environment, Please login again!" -msgstr "Cloud environment switched; please login again!" +msgstr "Cambia ambiente cloud; Effettua nuovamente il login!" msgid "System presets" -msgstr "Preset di sistema" +msgstr "Preset sistema" msgid "User presets" msgstr "Preset utente" @@ -4717,10 +4777,10 @@ msgid "Incompatible presets" msgstr "Preset incompatibili" msgid "AMS filaments" -msgstr "AMS filament" +msgstr "Filamento AMS" msgid "Click to pick filament color" -msgstr "Click to select filament color" +msgstr "Fai click per selezionare il colore del filamento" msgid "Please choose the filament colour" msgstr "" @@ -4732,34 +4792,34 @@ msgid "Edit preset" msgstr "Modifica preset" msgid "Project-inside presets" -msgstr "Project-inside presets" +msgstr "Preset interno al progetto" msgid "Add/Remove filaments" -msgstr "Add/Remove filament" +msgstr "Aggiungi/rimuovi filamento" msgid "Add/Remove materials" -msgstr "Add/Remove materials" +msgstr "Aggiungi/rimuovi materiali" msgid "Add/Remove printers" -msgstr "Add/Remove printers" +msgstr "Aggiungi/Rimuovi stampanti" msgid "Same as Global Print Sequence" msgstr "" msgid "Print sequence" -msgstr "Print sequence" +msgstr "Sequenza di stampa" msgid "Same as Global Bed Type" -msgstr "Same as Global Bed Type" +msgstr "Uguale al tipo di letto globale" msgid "Cool Plate" msgstr "Cool Plate" msgid "Engineering Plate" -msgstr "Engineering Plate" +msgstr "Piatto Engineering" msgid "High Temp Plate" -msgstr "High Temp Plate" +msgstr "Piastra High Temp" msgid "Textured PEI Plate" msgstr "Textured PEI Plate" @@ -4777,80 +4837,82 @@ msgid "Log Out" msgstr "" msgid "Slice all plate to obtain time and filament estimation" -msgstr "Slice all plates to obtain time and filament estimation" +msgstr "Slicing di tutti i piatti per ottenere una stima di tempo e filamento" msgid "Packing project data into 3mf file" -msgstr "Packing project data into 3mf file" +msgstr "Packing dati progetto in 3mf file" msgid "Uploading 3mf" -msgstr "Uploading 3mf" +msgstr "Caricamento 3mf" msgid "Jump to model publish web page" -msgstr "Jump to model publish web page" +msgstr "Vai alla pagina web di pubblicazione del modello" msgid "Note: The preparation may takes several minutes. Please be patiant." -msgstr "Note: The preparation may take several minutes. Please be patient." +msgstr "" +"Nota: la preparazione può richiedere alcuni minuti. Si prega di avere " +"pazienza." msgid "Publish" -msgstr "Publish" +msgstr "Pubblica" msgid "Publish was cancelled" -msgstr "Publish was cancelled" +msgstr "La pubblicazione è stata annullata" msgid "Slicing Plate 1" -msgstr "Slicing Plate 1" +msgstr "Slicing Piatto 1" msgid "Packing data to 3mf" msgstr "Packing data to 3mf" msgid "Jump to webpage" -msgstr "Jump to webpage" +msgstr "Vai alla pagina web" #, c-format, boost-format msgid "Save %s as" -msgstr "Save %s as" +msgstr "Salva %s come" msgid "User Preset" -msgstr "User Preset" +msgstr "Preset utente" msgid "Project Inside Preset" -msgstr "Project Inside Preset" +msgstr "Preset interno al Progetto" msgid "Name is invalid;" -msgstr "Name is invalid;" +msgstr "Nome non valido" msgid "illegal characters:" -msgstr "Illegal characters:" +msgstr "Caratteri illegali:" msgid "illegal suffix:" -msgstr "Illegal suffix:" +msgstr "Suffisso illegale:" msgid "Name is unavailable." -msgstr "Name is unavailable." +msgstr "Nome non disponibile" msgid "Overwrite a system profile is not allowed" -msgstr "Overwriting a system profile is not allowed." +msgstr "Non è consentito sovrascrivere un profilo di sistema." #, boost-format msgid "Preset \"%1%\" already exists." -msgstr "Preset \"%1%\" already exists." +msgstr "Preset \"%1%\" esiste già." #, boost-format msgid "Preset \"%1%\" already exists and is incompatible with current printer." msgstr "" -"Preset \"%1%\" already exists and is incompatible with the current printer." +"Preset \"%1%\" esiste già ma è incompatibile con la stampante corrente." msgid "Please note that saving action will replace this preset" -msgstr "Please note that saving will overwrite the current preset." +msgstr "Tieni presente che il salvataggio sovrascriverà il preset corrente." msgid "The name is not allowed to be empty." -msgstr "The name field is not allowed to be empty." +msgstr "Il campo nome non può essere vuoto." msgid "The name is not allowed to start with space character." -msgstr "The name is not allowed to start with a space." +msgstr "Il nome non può iniziare con uno spazio." msgid "The name is not allowed to end with space character." -msgstr "The name is not allowed to end with a space." +msgstr "Il nome non può terminare con uno spazio." msgid "The name cannot be the same as a preset alias name." msgstr "Il nome non può essere uguale a quello di un preset." @@ -4864,29 +4926,29 @@ msgstr "Copia" #, boost-format msgid "Printer \"%1%\" is selected with preset \"%2%\"" -msgstr "Printer \"%1%\" is selected with preset \"%2%\"" +msgstr "La stampante \"%1%\" è selezionata con il preset \"%2%\"" #, boost-format msgid "Please choose an action with \"%1%\" preset after saving." -msgstr "Please choose an action with \"%1%\" preset after saving." +msgstr "Scegli un'azione con \"%1%\" preimpostata dopo il salvataggio." #, boost-format msgid "For \"%1%\", change \"%2%\" to \"%3%\" " -msgstr "For \"%1%\", change \"%2%\" to \"%3%\" " +msgstr "Per \"%1%\", cambia \"%2%\" con \"%3%\"." #, boost-format msgid "For \"%1%\", add \"%2%\" as a new preset" -msgstr "For \"%1%\", add \"%2%\" as a new preset" +msgstr "Per \"%1%\", aggiungere \"%2%\" come nuovo preset" #, boost-format msgid "Simply switch to \"%1%\"" -msgstr "Simply switch to \"%1%\"" +msgstr "Basta passare a \"%1%\"" msgid "Online" msgstr "Online" msgid "Offline" -msgstr "Offline" +msgstr "Off-line" msgid "(LAN)" msgstr "" @@ -4895,156 +4957,161 @@ msgid "Search" msgstr "" msgid "My Device" -msgstr "My Device" +msgstr "Mio dispositivo" msgid "Other Device" -msgstr "Other Device" +msgstr "Altro dispositivo" msgid "Input access code" -msgstr "Input access code" +msgstr "Inserisci codice di accesso" msgid "Can't find my devices?" -msgstr "Can't find devices?" +msgstr "Non riesci a trovare i dispositivi?" msgid "Log out successful." -msgstr "Log out successful." +msgstr "Log out riuscito." msgid "Busy" -msgstr "Busy" +msgstr "Occupato" msgid "Bambu Cool Plate" -msgstr "Bambu Cool Plate" +msgstr "Piatto Bambu Cool" msgid "Bamabu Engineering Plate" -msgstr "Bambu Engineering Plate" +msgstr "Piatto Bambu Engineering" msgid "Bamabu High Temperature Plate" -msgstr "Bambu High Temperature Plate" +msgstr "Piatto Bambu High Temperature" msgid "Send print job to" -msgstr "Send print job to" +msgstr "Invia stampa a" msgid "Refresh" -msgstr "Refresh" +msgstr "Aggiorna" msgid "Bed Leveling" -msgstr "Bed leveling" +msgstr "Livellamento piano" msgid "Flow Calibration" -msgstr "Flow calibration" +msgstr "Calibrazione del flusso" msgid "send completed" -msgstr "Send complete" +msgstr "Invio completo" msgid "No login account, only printers in LAN mode are displayed" -msgstr "No login account, only printers in LAN mode are displayed" +msgstr "" +"Nessun account di login, vengono visualizzate solo le stampanti in modalità " +"LAN" msgid "Connecting to server" -msgstr "Connecting to server" +msgstr "Connessione in corso al server" msgid "Synchronizing device information" -msgstr "Synchronizing device information" +msgstr "Sincronizzazione informazioni dispositivo" msgid "Synchronizing device information time out" -msgstr "Synchronizing device information timed out" +msgstr "La sincronizzazione informazioni dispositivo è scaduta" msgid "Cannot send the print job when the printer is updating firmware" -msgstr "Cannot send a print job while the printer is updating firmware" +msgstr "" +"Impossibile inviare un lavoro di stampa mentre la stampante sta aggiornando " +"il firmware" msgid "" "The printer is executing instructions. Please restart printing after it ends" -msgstr "" -"The printer is executing instructions. Please restart printing after it ends" +msgstr "La stampante sta eseguendo le istruzioni. Riavvia la stampa al termine" msgid "The printer is busy on other print job" -msgstr "The printer is busy with another print job." +msgstr "La stampante è occupata con altro lavoro di stampa." #, c-format, boost-format msgid "" "Filament %s exceeds the number of AMS slots. Please update the printer " "firmware to support AMS slot assignment." msgstr "" -"Filament %s exceeds the number of AMS slots. Please update the printer " -"firmware to support AMS slot assignment." +"Il filamento %s supera il numero di slot AMS. Aggiorna il firmware della " +"stampante per supportare l'assegnazione degli slot AMS." msgid "" "Filament exceeds the number of AMS slots. Please update the printer firmware " "to support AMS slot assignment." msgstr "" -"Filament exceeds the number of AMS slots. Please update the printer firmware " -"to support AMS slot assignment." +"Il filamento supera il numero di slot AMS. Aggiorna il firmware della " +"stampante per supportare l'assegnazione degli slot AMS." msgid "" "Filaments to AMS slots mappings have been established. You can click a " "filament above to change its mapping AMS slot" msgstr "" -"Filaments to AMS slots mappings have been established. You can click a " -"filament above to change its mapping AMS slot" +"La mappatura tra lo slot AMS e filamenti è stata effettuata. È possibile " +"fare clic su un filamento in alto per modificare la mappatura dello slot AMS" msgid "" "Please click each filament above to specify its mapping AMS slot before " "sending the print job" msgstr "" -"Please click each filament above to specify its mapping AMS slot before " -"sending the print job" +"Fai clic su ciascun filamento in alto per specificare lo slot AMS di " +"mappatura prima di inviare il lavoro di stampa" #, c-format, boost-format msgid "" "Filament %s does not match the filament in AMS slot %s. Please update the " "printer firmware to support AMS slot assignment." msgstr "" -"Filament %s does not match the filament in AMS slot %s. Please update the " -"printer firmware to support AMS slot assignment." +"Il filamento %s non corrisponde al filamento nello slot AMS %s. Aggiorna il " +"firmware della stampante per supportare l'assegnazione degli slot AMS." msgid "" "Filament does not match the filament in AMS slot. Please update the printer " "firmware to support AMS slot assignment." msgstr "" -"Filament does not match the filament in AMS slot. Please update the printer " -"firmware to support AMS slot assignment." +"Il filamento non corrisponde al filamento nello slot AMS. Aggiorna il " +"firmware della stampante per supportare l'assegnazione degli slot AMS." msgid "" "The printer firmware only supports sequential mapping of filament => AMS " "slot." msgstr "" -"The printer firmware only supports sequential mapping of filament => AMS " -"slot." +"Il firmware della stampante supporta solo la mappatura sequenziale del " +"filamento => slot AMS." msgid "An SD card needs to be inserted before printing." -msgstr "A MicroSD card needs to be inserted before printing." +msgstr "È necessario inserire una scheda microSD prima di stampare." msgid "An SD card needs to be inserted to record timelapse." -msgstr "A MicroSD card needs to be inserted to record a timelapse." +msgstr "È necessario inserire una scheda microSD per registrare un timelapse." msgid "" "Cannot send the print job to a printer whose firmware is required to get " "updated." -msgstr "Cannot send the print job to a printer whose firmware must be updated." +msgstr "" +"Impossibile inviare il lavoro di stampa a una stampante il cui firmware deve " +"essere aggiornato." msgid "Cannot send the print job for empty plate" -msgstr "Cannot send a print job for an empty plate." +msgstr "Impossibile inviare un lavoro di stampa per una piatto vuoto." msgid "This printer does not support printing all plates" -msgstr "This printer does not support printing all plates" +msgstr "Questa stampante non supporta la stampa di piatti multipla" msgid "Errors" -msgstr "Errors" +msgstr "Errori" msgid "" "Please check the following infomation and click Confirm to continue sending " "print:" msgstr "" -"Please check the following information and click Confirm to continue sending " -"the print:" +"Controlla le seguenti informazioni e fai clic su Conferma per continuare a " +"inviare la stampa:" msgid "" "The printer type used to generate G-code is not the same type as the " "currently selected physical printer. It is recommend to re-slice by " "selecting the same printer type." msgstr "" -"The printer type used to generate G-code is not the same type as the " -"currently selected physical printer. It is recommend to re-slice after " -"selecting the correct printer type." +"Il tipo di stampante utilizzato per generare il G-code non è dello stesso " +"tipo della stampante attualmente selezionata. Si consiglia di rielaborare " +"dopo aver selezionato il tipo di stampante corretto." #, c-format, boost-format msgid "%s is not supported by AMS." @@ -5055,54 +5122,55 @@ msgid "" "they are the required filaments. If they are okay, press \"Confirm\" to " "start printing." msgstr "" -"There are some unknown filaments in the AMS mappings. Please check whether " -"they are the required filaments. If they are okay, click \"Confirm\" to " -"start printing." +"Ci sono alcuni filamenti sconosciuti nelle mappature AMS. Si prega di " +"verificare se sono i filamenti necessari. Se sono a posto, fai clic su " +"«Conferma» per iniziare a stampare." msgid "Preparing print job" -msgstr "Preparing print job" +msgstr "Preparazione lavoro di stampa" msgid "Modifying the device name" -msgstr "Modifying the device name" +msgstr "Modifica nome del dispositivo" msgid "Send to Printer SD card" -msgstr "Send to Printer MicroSD card" +msgstr "Invia a microSD stampante" msgid "Cannot send the print task when the upgrade is in progress" -msgstr "Cannot send print tasks when an update is in progress" +msgstr "" +"Impossibile inviare attività di stampa quando è in corso un aggiornamento" msgid "An SD card needs to be inserted before send to printer SD card." msgstr "" msgid "The printer is required to be in the same LAN as Bambu Studio." -msgstr "The printer is required to be on the same LAN as Bambu Studio." +msgstr "La stampante deve essere sulla stessa LAN di Bambu Studio." msgid "The printer does not support sending to printer SD card." -msgstr "The printer does not support sending to printer MicroSD card." +msgstr "La stampante non supporta l'invio alla scheda microSD della stampante." msgid "Log in printer" -msgstr "Log in printer" +msgstr "Log in stampante" msgid "Would you like to log in this printer with current account?" -msgstr "Would you like to log in this printer with the current account?" +msgstr "Vuoi accedere alla stampante con l'account corrente?" msgid "Log in successful." -msgstr "Log in successful." +msgstr "Log in effettuato con successo." msgid "Log out printer" -msgstr "Log out printer" +msgstr "Log out dalla stampante" msgid "Would you like to log out the printer?" -msgstr "Would you like to log out the printer?" +msgstr "Vuoi disconnettere la stampante?" msgid "Please log in first." -msgstr "Please log in first." +msgstr "Prima effettua il login." msgid "There was a problem connecting to the printer. Please try again." -msgstr "There was a problem connecting to the printer. Please try again." +msgstr "Si è verificato un problema di connessione alla stampante. Riprovare." msgid "Failed to log out." -msgstr "Failed to log out." +msgstr "Disconnessione non riuscita." #. TRN "Save current Settings" #, c-format, boost-format @@ -5113,52 +5181,55 @@ msgid "Delete this preset" msgstr "Elimina questo preset" msgid "Search in preset" -msgstr "Search in preset" +msgstr "Cerca nel preset" msgid "Click to reset all settings to the last saved preset." -msgstr "Click to reset all settings to the last saved preset." +msgstr "" +"Clicca per ripristinare tutte le impostazioni dell'ultimo preset salvato." msgid "" "Prime tower is required for smooth timeplase. There may be flaws on the " "model without prime tower. Are you sure you want to disable prime tower?" msgstr "" -"A Prime tower is required for smooth timeplase mode. There may be flaws on " -"the model without a prime tower. Are you sure you want to disable the prime " -"tower?" +"È necessaria una Prime Tower per la modalità timeplase fluida. Potrebbero " +"esserci difetti sul modello senza una Prime Tower. Sei sicuro di voler " +"disabilitare la Prime Tower?" msgid "" "Prime tower is required for smooth timelapse. There may be flaws on the " "model without prime tower. Do you want to enable prime tower?" msgstr "" -"A prime tower is required for smooth timelapse mode. There may be flaws on " -"the model without prime tower. Do you want to enable the prime tower?" +"È necessaria una Prime Tower per una modalità timelapse fluida. Potrebbero " +"esserci dei difetti sul modello senza Prime Tower. Vuoi abilitare la Prime " +"Tower?" msgid "" "We have added an experimental style \"Tree Slim\" that features smaller " "support volume but weaker strength.\n" "We recommend using it with: 0 interface layers, 0 top distance, 2 walls." msgstr "" -"We have added an experimental style \"Tree Slim\" that features smaller " -"support volume but weaker strength.\n" -"We recommend using it with: 0 interface layers, 0 top distance, 2 walls." +"Abbiamo aggiunto uno stile sperimentale \"Albero Slim\" che presenta un " +"volume di supporto più piccolo ma una resistenza più debole.\n" +"Si consiglia di utilizzarlo con: 0 layer interfaccia, 0 distanza dall'alto, " +"2 pareti." msgid "" "Change these settings automatically? \n" "Yes - Change these settings automatically\n" "No - Do not change these settings for me" msgstr "" -"Change these settings automatically? \n" -"Yes - Change these settings automatically.\n" -"No - Do not change these settings for me." +"Modificare queste impostazioni automaticamente? \n" +"Si - Modifica queste impostazioni automaticamente.\n" +"No - Non modificare queste impostatzioni per me" msgid "" "For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommend the following " "settings: at least 2 interface layers, at least 0.1mm top z distance or " "using support materials on interface." msgstr "" -"For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommend the following " -"settings: at least 2 interface layers, at least 0.1mm top z distance or " -"using support materials on interface." +"Per gli stili \"Albero Strong\" e \"Albero ibrido\", si consigliano le " +"seguenti impostazioni: almeno 2 layer interfaccia, distanza z superiore di " +"almeno 0,1 mm o utilizzo di materiali di supporto sull'interfaccia." msgid "" "When using support material for the support interface, We recommend the " @@ -5173,73 +5244,74 @@ msgid "" "by right-click the empty position of build plate and choose \"Add Primitive" "\"->\"Timelapse Wipe Tower\"." msgstr "" -"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\"." +"Quando si registra un timelapse senza testa di satmpa, si consiglia di " +"aggiungere un \"Timelapse Torre di pulizia\"\n" +"facendo clic con il pulsante destro del mouse sulla posizione vuota del " +"piatto e scegli \"Aggiungi primitiva\" ->\"Timelapse Torre di pulizia\"»." msgid "Line width" -msgstr "Line width" +msgstr "Larghezza linea" msgid "Seam" -msgstr "Seam" +msgstr "Giuntura" msgid "Precision" -msgstr "Precision" +msgstr "Precisione" msgid "Wall generator" -msgstr "Wall generator" +msgstr "Generatore parete" msgid "Walls" -msgstr "Walls" +msgstr "Pareti" msgid "Top/bottom shells" -msgstr "Top/bottom shells" +msgstr "Gusci superiori/inferiori" msgid "Initial layer speed" -msgstr "First layer speed" +msgstr "Velocità primo layer" msgid "Other layers speed" -msgstr "Other layers speed" +msgstr "Velocità altri layer" msgid "Overhang speed" -msgstr "Overhang speed" +msgstr "Velocità di sbalzo" msgid "" "This is the speed for various overhang degrees. Overhang degrees are " "expressed as a percentage of line width. 0 speed means no slowing down for " "the overhang degree range and wall speed is used" msgstr "" -"This is the speed for various overhang degrees. Overhang degrees are " -"expressed as a percentage of line width. 0 speed means no slowing down for " -"the overhang degree range and wall speed is used" +"È la velocità per vari gradi di sporgenza. I gradi di sporgenza sono " +"espressi come percentuale della larghezza della linea. Velocità 0 significa " +"che non c'è rallentamento per l'intervallo di gradi di sporgenza e viene " +"utilizzata la velocità della parete." msgid "Travel speed" -msgstr "Travel speed" +msgstr "Velocità spostamento" msgid "Acceleration" -msgstr "Acceleration" +msgstr "Accelerazione" msgid "Raft" msgstr "Raft" msgid "Support filament" -msgstr "Filament for Supports" +msgstr "Filamento per supporti" msgid "Prime tower" msgstr "Prime tower" msgid "Special mode" -msgstr "Special mode" +msgstr "Modalità speciale" msgid "G-code output" -msgstr "G-code output" +msgstr "Uscita G-code" msgid "Post-processing scripts" msgstr "" msgid "Frequent" -msgstr "Frequent" +msgstr "Frequente" #, c-format, boost-format msgid "" @@ -5251,93 +5323,95 @@ msgid_plural "" "Please remove them, or will beat G-code visualization and printing time " "estimation." msgstr[0] "" -"Following line %s contains reserved keywords.\n" -"Please remove it, or G-code visualization and print time estimation will be " -"broken." +"La riga seguente %s contiene parole chiave riservata.\n" +"Rimuovilo, altrimenti la visualizzazione G-code e la stima del tempo di " +"stampa verranno interrotte." msgstr[1] "" -"Following lines %s contain reserved keywords.\n" -"Please remove them, or G-code visualization and print time estimation will " -"be broken." +"Le righe seguenti %s contengono parole chiavi riservate.\n" +"Rimuovile o la visualizzazione G-code e la stima del tempo di stampa " +"verranno interrotte." msgid "Reserved keywords found" -msgstr "Reserved keywords found" +msgstr "Parole chiave riservate trovate" msgid "Setting Overrides" -msgstr "Setting Overrides" +msgstr "Sovrascrivi impostazioni" msgid "Retraction" msgstr "Retrazione" msgid "Basic information" -msgstr "Basic information" +msgstr "Info di base" msgid "Recommended nozzle temperature" -msgstr "Recommended nozzle temperature" +msgstr "Temperatura nozzle consigliata" msgid "Recommended nozzle temperature range of this filament. 0 means no set" -msgstr "Recommended nozzle temperature range of this filament. 0 means not set" +msgstr "" +"Intervallo di temperatura del nozzle consigliato per questo filamento. 0 " +"significa non impostato" msgid "Recommended temperature range" -msgstr "Recommended temperature range" +msgstr "Intervallo di temperatura consigliato" msgid "Print temperature" -msgstr "Print temperature" +msgstr "Temperatura stampa" msgid "Nozzle" -msgstr "Ugello" +msgstr "Nozzle" msgid "Nozzle temperature when printing" -msgstr "Nozzle temperature when printing" +msgstr "Temperatura del nozzle durante la stampa" msgid "Cool plate" -msgstr "Cool plate" +msgstr "Cool Plate" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " "does not support to print on the Cool Plate" msgstr "" -"This is the bed temperature when the cool plate is installed. A value of 0 " -"means the filament does not support printing on the Cool Plate." +"Temperatura del piano quando è installato il piatto Cool Plate. Il valore 0 " +"significa che il filamento non supporta la stampa su piatto Cool Plate." msgid "Engineering plate" -msgstr "Engineering plate" +msgstr "Piatto Engineering" msgid "" "Bed temperature when engineering plate is installed. Value 0 means the " "filament does not support to print on the Engineering Plate" msgstr "" -"This is the bed temperature when the engineering plate is installed. A value " -"of 0 means the filament does not support printing on the Engineering Plate." +"Temperatura del piano quando è installato il piatto Engineering. Il valore 0 " +"significa che il filamento non supporta la stampa su piatto Engineering." msgid "" "Bed temperature when high temperature plate is installed. Value 0 means the " "filament does not support to print on the High Temp Plate" msgstr "" -"This is the bed temperature when the high temperature plate is installed. A " -"value of 0 means the filament does not support printing on the High Temp " -"Plate." +"Temperatura del piano quando è installato il piatto High Temperature. Il " +"valore 0 significa che il filamento non supporta la stampa su piatto High " +"Temperature." msgid "" "Bed temperature when Textured PEI Plate is installed. Value 0 means the " "filament does not support to print on the Textured PEI Plate" msgstr "" -"Bed temperature when Textured PEI Plate is installed. 0 means the filament " -"is not supported on the Textured PEI Plate" +"Temperatura del piano quando è installato il piatto Textured PEI. Il valore " +"0 significa che il filamento non è supportato sul piatto Textured PEI" msgid "Volumetric speed limitation" -msgstr "Volumetric speed limitation" +msgstr "Limitazione velocità volumetrica" msgid "Cooling" msgstr "Raffreddamento" msgid "Cooling for specific layer" -msgstr "Cooling for specific layer" +msgstr "Raffreddamento per specifico layer" msgid "Part cooling fan" -msgstr "Part cooling fan" +msgstr "Ventola di raffreddamento oggetto" msgid "Min fan speed threshold" -msgstr "Min fan speed threshold" +msgstr "Soglia minima velocità della ventola" msgid "" "Part cooling fan speed will start to run at min speed when the estimated " @@ -5345,95 +5419,96 @@ msgid "" "shorter than threshold, fan speed is interpolated between the minimum and " "maximum fan speed according to layer printing time" msgstr "" -"The part cooling fan will run at the minimum fan speed when the estimated " -"layer time is longer than the threshold value. When the layer time is " -"shorter than the threshold, the fan speed will be interpolated between the " -"minimum and maximum fan speed according to layer printing time." +"La ventola di raffreddamento della parte funzionerà alla velocità minima " +"della ventola quando la durata stimata del layer è superiore al valore di " +"soglia. Quando il tempo del layer è inferiore alla soglia, la velocità della " +"ventola verrà interpolata tra la velocità minima e massima della ventola in " +"base al tempo di stampa a layer." msgid "Max fan speed threshold" -msgstr "Max fan speed threshold" +msgstr "Soglia velocità massima della ventola" msgid "" "Part cooling fan speed will be max when the estimated layer time is shorter " "than the setting value" msgstr "" -"The part cooling fan will run at maximum speed when the estimated layer time " -"is shorter than the threshold value." +"La ventola di raffreddamento funzionerà alla massima velocità quando il " +"tempo layer stimato è inferiore al valore di soglia." msgid "Auxiliary part cooling fan" -msgstr "Auxiliary part cooling fan" +msgstr "Ventola di raffreddamento ausiliaria della parte" msgid "Filament start G-code" -msgstr "Filament start G-code" +msgstr "G-code avvio filamento" msgid "Filament end G-code" -msgstr "Filament end G-code" +msgstr "G-code finale filamento" msgid "Printable space" -msgstr "Printable space" +msgstr "Spazio di stampa" msgid "Extruder Clearance" -msgstr "Extruder Clearance" +msgstr "Spazio estrusore" msgid "Accessory" -msgstr "Accessory" +msgstr "Accessori" msgid "Machine gcode" -msgstr "Machine G-code" +msgstr "G-code" msgid "Machine start G-code" -msgstr "Machine start G-code" +msgstr "start G-code" msgid "Machine end G-code" -msgstr "Machine end G-code" +msgstr "Fine G-code" msgid "Before layer change G-code" msgstr "G-code prima del cambio layer" msgid "Layer change G-code" -msgstr "Layer change G-code" +msgstr "G-code cambio layer" msgid "Change filament G-code" -msgstr "Change filament G-code" +msgstr "G-code cambio filamento" msgid "Pause G-code" -msgstr "Pause G-code" +msgstr "Pausa G-code" msgid "Template Custom G-code" -msgstr "Template Custom G-code" +msgstr "Modello G-code personalizzato" msgid "Motion ability" -msgstr "Motion ability" +msgstr "Capacità di movimento" msgid "Normal" msgstr "Normale" msgid "Speed limitation" -msgstr "Speed limitation" +msgstr "Limitazione velocità" msgid "Acceleration limitation" -msgstr "Acceleration limitation" +msgstr "Limita Accelerazione" msgid "Jerk limitation" -msgstr "Jerk limitation" +msgstr "Limitazione jerk" msgid "Layer height limits" msgstr "Limiti altezza layer" msgid "Retraction when switching material" -msgstr "Retraction when switching material" +msgstr "Retrazione quando si cambia materiale" msgid "Detached" msgstr "Distaccato" msgid "Following preset will be deleted too." msgid_plural "Following presets will be deleted too." -msgstr[0] "The following preset will be deleted too:" -msgstr[1] "The following presets will be deleted too:" +msgstr[0] "Verrà eliminato anche il seguente preset:" +msgstr[1] "Verranno eliminati anche i seguenti presets:" #, boost-format msgid "Are you sure to %1% the selected preset?" -msgstr "Are you sure you want to %1% the selected preset?" +msgstr "Sei sicuro di voler %1% il preset selezionato?" #. TRN Remove/Delete #, boost-format @@ -5447,22 +5522,25 @@ msgid "Set" msgstr "Imposta" msgid "Click to reset current value and attach to the global value." -msgstr "Click to reset current value and attach to the global value." +msgstr "" +"Fare clic per ripristinare il valore corrente e associarlo al valore globale." msgid "Click to drop current modify and reset to saved value." -msgstr "Click to drop current modifications and reset to saved value." +msgstr "" +"Fai clic per eliminare le modifiche correnti e ripristinare il valore " +"salvato." msgid "Process Settings" -msgstr "Process Settings" +msgstr "Impostazioni processo" msgid "Undef" -msgstr "Undef" +msgstr "Indefinito" msgid "Unsaved Changes" msgstr "Modifiche non salvate" msgid "Discard or Keep changes" -msgstr "Discard or keep changes" +msgstr "Scarta o mantieni le modifiche" msgid "Old Value" msgstr "Valore precedente" @@ -5480,29 +5558,30 @@ msgid "Discard" msgstr "Cancella" msgid "Click the right mouse button to display the full text." -msgstr "Click the right mouse button to display the full text." +msgstr "" +"Clicca il pulsante destro del mouse per visualizzare il testo completo." msgid "All changes will not be saved" -msgstr "No changes will be saved." +msgstr "Nessuna modifica verrà salvata." msgid "All changes will be discarded." -msgstr "All changes will be discarded." +msgstr "Tutte le modifiche verranno eliminate." msgid "Save the selected options." msgstr "Salvare le opzioni selezionate." msgid "Keep the selected options." -msgstr "Keep the selected options." +msgstr "Mantieni le opzioni selezionate." msgid "Transfer the selected options to the newly selected preset." -msgstr "Transfer the selected options to the newly selected preset." +msgstr "Trasferisci le opzioni selezionate nel preset appena selezionato." #, boost-format msgid "" "Save the selected options to preset \n" "\"%1%\"." msgstr "" -"Save the selected options to preset \n" +"Salva le opzioni selezionate in un preset \n" "\"%1%\"." #, boost-format @@ -5510,28 +5589,28 @@ msgid "" "Transfer the selected options to the newly selected preset \n" "\"%1%\"." msgstr "" -"Transfer the selected options to the newly selected preset \n" +"Trasferisci le opzioni selezionate nel preset appena selezionato \n" "\"%1%\"." #, boost-format msgid "Preset \"%1%\" contains the following unsaved changes:" -msgstr "Preset \"%1%\" contains the following unsaved changes:" +msgstr "Preset \"%1%\" contiene modifiche non salvate:" #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new printer profile and it " "contains the following unsaved changes:" msgstr "" -"Preset \"%1%\" is not compatible with the new printer profile and it " -"contains the following unsaved changes:" +"Preset \"%1%\" non compatibile con il nuovo profilo della stampante e " +"contiene modifiche non salvate:" #, boost-format msgid "" "Preset \"%1%\" is not compatible with the new process profile and it " "contains the following unsaved changes:" msgstr "" -"Preset \"%1%\" is not compatible with the new process profile and it " -"contains the following unsaved changes:" +"Preset \"%1%\" non compatibile con il nuovo profilo di processo e contiene " +"modifiche non salvate:" #, boost-format msgid "" @@ -5539,18 +5618,18 @@ msgid "" "Would you like to keep these changed settings (new value) after switching " "preset?" msgstr "" -"You have changed some settings of preset \"%1%\". \n" -"Would you like to keep these changed settings (new value) after switching " -"presets?" +"Sono state modificate alcune impostazioni del preset \"%1%\". \n" +"Vuoi mantenere le impostazioni modificate (nuovo valore) dopo aver cambiato " +"i preset?" msgid "" "You have changed some preset settings. \n" "Would you like to keep these changed settings (new value) after switching " "preset?" msgstr "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"presets?" +"Sono stati modificati alcuni preset preimpostati. \n" +"Vuoi mantenere le impostazioni modificate (nuovo valore) dopo aver cambiato " +"i preset?" msgid "Extruders count" msgstr "Conteggio estrusori" @@ -5559,113 +5638,114 @@ msgid "General" msgstr "Generale" msgid "Capabilities" -msgstr "Caratteristiche" +msgstr "Capacità" msgid "Select presets to compare" msgstr "" msgid "Show all presets (including incompatible)" -msgstr "Show all presets (including incompatible)" +msgstr "Mostra tutti i preset (compresi non compatibili)" msgid "Add File" -msgstr "Add File" +msgstr "Aggiungi file" msgid "Set as cover" -msgstr "Set as cover" +msgstr "Impostare come copertina" msgid "Cover" -msgstr "Cover" +msgstr "Copertina" #, boost-format msgid "The name \"%1%\" already exists." -msgstr "The name \"%1%\" already exists." +msgstr "Il nome \"%1%\" già esiste." msgid "Basic Info" -msgstr "Basic Info" +msgstr "Info di base" msgid "Pictures" -msgstr "Pictures" +msgstr "Immagini" msgid "Bill of Materials" -msgstr "Bill of Materials" +msgstr "Lista materiali" msgid "Assembly Guide" -msgstr "Assembly Guide" +msgstr "Guida al montaggio" msgid "Author" -msgstr "Author" +msgstr "Autore" msgid "Model Name" -msgstr "Model Name" +msgstr "Nome modello" #, c-format, boost-format msgid "%s Update" -msgstr "%s Update" +msgstr "Aggiorna %s" msgid "A new version is available" -msgstr "A new version is available" +msgstr "Una nuova versione è disponibile." msgid "Configuration update" -msgstr "Aggiornamento di configurazione" +msgstr "Aggiornamento della configurazione" msgid "A new configuration package available, Do you want to install it?" -msgstr "A new configuration package is available. Do you want to install it?" +msgstr "È disponibile un nuovo pacchetto di configurazione. Vuoi installarlo?" msgid "Description:" -msgstr "Description:" +msgstr "Descrizione:" msgid "Configuration incompatible" -msgstr "Configuration incompatible" +msgstr "Configurazione non compatibile" msgid "the configuration package is incompatible with current application." msgstr "" -"the configuration package is incompatible with the current application." +"il pacchetto di configurazione non è compatibile con l'applicazione corrente." #, c-format, boost-format msgid "" "The configuration package is incompatible with current application.\n" "%s will update the configuration package, Otherwise it won't be able to start" msgstr "" -"The configuration package is incompatible with the current application.\n" -"%s will update the configuration package to allow the application to start." +"Pacchetto configurazione non compatibile con l'applicazione corrente.\n" +"%s aggiornerà il pacchetto configurazione per consentire l'avvio " +"dell'applicazione." #, c-format, boost-format msgid "Exit %s" -msgstr "Chiudi %s" +msgstr "Esci %s" msgid "the Configuration package is incompatible with current APP." msgstr "" -"The configuration package is incompatible with the current version of Bambu " -"Studio." +"Il pacchetto di configurazione non è compatibile con la versione corrente di " +"Bambu Studio." msgid "Configuration updates" msgstr "Aggiornamenti di configurazione" msgid "No updates available." -msgstr "No updates available." +msgstr "Nessun aggiornamento disponibile." msgid "The configuration is up to date." -msgstr "The configuration is up to date." +msgstr "Configurazione aggiornata." msgid "Auto-Calc" -msgstr "Auto-Calc" +msgstr "Calcolo automatico" msgid "Flushing volumes for filament change" -msgstr "Flushing volumes for filament change" +msgstr "Volumi di spurgo per il cambio filamento" msgid "Multiplier" -msgstr "Multiplier" +msgstr "Moltiplicatore" msgid "Flushing volume (mm³) for each filament pair." -msgstr "Flushing volume (mm³) for each filament pair." +msgstr "Volume di spurgo (mm³) per ogni coppia di filamento." #, c-format, boost-format msgid "Suggestion: Flushing Volume in range [%d, %d]" -msgstr "Suggestion: Flushing Volume in range [%d, %d]" +msgstr "Suggerimento: Volume di spurgo nell'intervallo [%d, %d]" #, c-format, boost-format msgid "The multiplier should be in range [%.2f, %.2f]." -msgstr "The multiplier should be in range [%.2f, %.2f]." +msgstr "Il moltiplicatore deve essere compreso nell'intervallo [%.2f, %.2f]." msgid "unloaded" msgstr "scaricato" @@ -5674,28 +5754,30 @@ msgid "loaded" msgstr "caricato" msgid "Filament #" -msgstr "Filament #" +msgstr "Filamento #" msgid "From" msgstr "Da" msgid "To" -msgstr "To" +msgstr "A" msgid "Login" msgstr "Login" msgid "The configuration package is changed in previous Config Guide" -msgstr "The configuration package is changed in previous Config Guide" +msgstr "" +"Il pacchetto di configurazione è stato modificato nella precedente Guida " +"alla configurazione" msgid "Configuration package changed" -msgstr "Configuration package changed" +msgstr "Pacchetto di configurazione modificato" msgid "Toolbar" -msgstr "Toolbar" +msgstr "Barra strumenti" msgid "Objects list" -msgstr "Objects list" +msgstr "Elenco oggetti" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "" @@ -5710,25 +5792,27 @@ msgid "Paste from clipboard" msgstr "Incolla dagli appunti" msgid "Show/Hide 3Dconnexion devices settings dialog" -msgstr "Show/Hide 3Dconnexion devices settings dialog" +msgstr "" +"Mostra/nascondi la finestra di dialogo impostazioni dei dispositivi " +"3Dconnexion" msgid "Show keyboard shortcuts list" msgstr "Mostra elenco scorciatoie di tastiera" msgid "Global shortcuts" -msgstr "Global shortcuts" +msgstr "Scorciatoie globali" msgid "Rotate View" -msgstr "Rotate View" +msgstr "Ruota vista" msgid "Pan View" -msgstr "Pan View" +msgstr "Vista panoramica" msgid "Mouse wheel" -msgstr "Mouse wheel" +msgstr "Rotella del mouse:" msgid "Zoom View" -msgstr "Zoom View" +msgstr "Vista Zoom" msgid "Shift+A" msgstr "" @@ -5741,9 +5825,9 @@ msgid "" "objects, it just orientates the selected ones.Otherwise, it will orientates " "all objects in the current disk." msgstr "" -"This auto orients selected objects or all objects. If there are selected " -"objects, it just orients the selected ones. Otherwise, it will orient all " -"objects in the current plate." +"Questo orienta automaticamente gli oggetti selezionati o tutti gli oggetti. " +"Se ci sono oggetti selezionati, orienta solo quelli selezionati. Altrimenti, " +"orienterà tutti gli oggetti nel piatto corrente." msgid "Shift+Tab" msgstr "" @@ -5752,37 +5836,37 @@ msgid "Collapse/Expand the sidebar" msgstr "Riduci/Espandi barra laterale" msgid "⌘+Any arrow" -msgstr "⌘+Any arrow" +msgstr "⌘+Freccia qualsiasi" msgid "Movement in camera space" msgstr "Movimento nello spazio della camera" msgid "⌥+Left mouse button" -msgstr "⌥+Left mouse button" +msgstr "⌥+Tasto sinistro mouse" msgid "Select a part" -msgstr "Select a part" +msgstr "Seleziona parte" msgid "⌘+Left mouse button" -msgstr "⌘+Left mouse button" +msgstr "⌘+Tasto sinistro del mouse" msgid "Select multiple objects" -msgstr "Select multiple objects" +msgstr "Seleziona più oggetti" msgid "Ctrl+Any arrow" -msgstr "Ctrl+Any arrow" +msgstr "Ctrl+qualsiasi freccia" msgid "Alt+Left mouse button" -msgstr "Alt+Left mouse button" +msgstr "Alt+tasto sinistro del mouse" msgid "Ctrl+Left mouse button" -msgstr "Ctrl+Left mouse button" +msgstr "Ctrl+Tasto sinistro del mouse" msgid "Shift+Left mouse button" -msgstr "Shift+Left mouse button" +msgstr "Shift+tasto sinistro mouse" msgid "Select objects by rectangle" -msgstr "Select objects by rectangle" +msgstr "Seleziona oggetti per rettangolo" msgid "Arrow Up" msgstr "Freccia Su" @@ -5809,7 +5893,7 @@ msgid "Move selection 10 mm in positive X direction" msgstr "Sposta selezione 10 mm in direzione X positiva" msgid "Shift+Any arrow" -msgstr "Shift+Any arrow" +msgstr "Shift+freccia qualsiasi" msgid "Movement step set to 1 mm" msgstr "Passo movimento impostato a 1 mm" @@ -5818,106 +5902,109 @@ msgid "Esc" msgstr "" msgid "keyboard 1-9: set filament for object/part" -msgstr "Keyboard 1-9: set filament for object/part" +msgstr "Tastiera 1-9: imposta il filamento per l'oggetto/la parte" msgid "Camera view - Default" -msgstr "Camera view - Default" +msgstr "Vista telecamera - Default" msgid "Camera view - Top" -msgstr "Camera view - Top" +msgstr "Vista telecamera - In Alto" msgid "Camera view - Bottom" -msgstr "Camera view - Bottom" +msgstr "Vista telecamera - Basso" msgid "Camera view - Front" -msgstr "Camera view - Front" +msgstr "Vista telecamera - Fronte" msgid "Camera view - Behind" -msgstr "Camera view - Behind" +msgstr "Vista telecamera - Dietro" msgid "Camera Angle - Left side" -msgstr "Camera Angle - Left side" +msgstr "Angolo della camera - Lato sinistro" msgid "Camera Angle - Right side" -msgstr "Camera Angle - Right side" +msgstr "Angolo della camera - Lato destro" msgid "Select all objects" msgstr "Seleziona tutti gli oggetti" msgid "Gizmo move" -msgstr "Gizmo move" +msgstr "Muovi Gizmo" msgid "Gizmo scale" -msgstr "Gizmo scale" +msgstr "Scala Gizmo" msgid "Gizmo rotate" -msgstr "Gizmo rotate" +msgstr "Ruota Gizmo" msgid "Gizmo cut" -msgstr "Gizmo cut" +msgstr "Taglia Gizmo" msgid "Gizmo Place face on bed" -msgstr "Gizmo Place face on bed" +msgstr "Gizmo Posiziona faccia sul piano" msgid "Gizmo SLA support points" -msgstr "Gizmo SLA support points" +msgstr "Punti di supporto SLA Gizmo" msgid "Gizmo FDM paint-on seam" -msgstr "Gizmo FDM paint-on seam" +msgstr "Gizmo FDM pittura giunzione" msgid "Plater" msgstr "Piano" msgid "Move: press to snap by 1mm" -msgstr "Move: press to snap by 1mm" +msgstr "Sposta: premi per muovere di 1 mm" msgid "⌘+Mouse wheel" -msgstr "⌘+Mouse wheel" +msgstr "⌘+Rotella mouse" msgid "Support/Color Painting: adjust pen radius" -msgstr "Support/Color Painting: adjust pen radius" +msgstr "Supporto/Pittura a colori: regolare il raggio della penna" msgid "⌥+Mouse wheel" -msgstr "⌥+Mouse wheel" +msgstr "⌥+Rotella mouse" msgid "Support/Color Painting: adjust section position" -msgstr "Support/Color Painting: adjust section position" +msgstr "Supporto/Pittura a colori: regolare la posizione della sezione" msgid "Ctrl+Mouse wheel" -msgstr "Ctrl+Mouse wheel" +msgstr "Ctrl+Rotellina del mouse" msgid "Alt+Mouse wheel" -msgstr "Alt+Mouse wheel" +msgstr "Alt+Rotella del mouse" msgid "Gizmo" msgstr "Gizmo" msgid "Set extruder number for the objects and parts" -msgstr "Set extruder number for the objects and parts" +msgstr "Imposta il numero estrusore per gli oggetti e le parti" msgid "Delete objects, parts, modifiers " -msgstr "Delete objects, parts, modifiers" +msgstr "Cancella oggetti, parti, modificatori" msgid "Space" -msgstr "Space" +msgstr "Spazio" msgid "Select the object/part and press space to change the name" -msgstr "Select the object/part and press space to change the name" +msgstr "" +"Seleziona l'oggetto/la parte e premi la barra spaziatrice per cambiare il " +"nome" msgid "Mouse click" -msgstr "Mouse click" +msgstr "Clic del mouse" msgid "Select the object/part and mouse click to change the name" -msgstr "Select the object/part and mouse click to change the name" +msgstr "" +"Seleziona l'oggetto/la parte e fai clic con il mouse per modificare il nome" msgid "Objects List" msgstr "Elenco oggetti" msgid "Vertical slider - Move active thumb Up" -msgstr "Cursore di scorrimento verticale - Solleva cursore attivo" +msgstr "Cursore scorrimento verticale - Solleva cursore attivo" msgid "Vertical slider - Move active thumb Down" -msgstr "Cursore di scorrimento verticale - Abbassa cursore attivo" +msgstr "Cursore scorrimento verticale - Abbassa cursore attivo" msgid "Horizontal slider - Move active thumb Left" msgstr "" @@ -5930,172 +6017,174 @@ msgid "On/Off one layer mode of the vertical slider" msgstr "On/Off modalità un layer del cursore di scorrimento verticale" msgid "Move slider 5x faster" -msgstr "Move slider 5x faster" +msgstr "Sposta il cursore 5 volte più velocemente" msgid "Shift+Mouse wheel" -msgstr "Shift+Mouse wheel" +msgstr "Shift+Rotella mouse" msgid "Release Note" -msgstr "Release Note" +msgstr "Nota di rilascio" #, c-format, boost-format msgid "version %s update information :" -msgstr "version %s update information:" +msgstr "Versione %s informazioni aggiornate:" msgid "Network plug-in update" -msgstr "Network plug-in update" +msgstr "Aggiornamento del plug-in di rete" msgid "" "Click OK to update the Network plug-in when Bambu Studio launches next time." msgstr "" -"Click OK to update the Network plug-in the next time Bambu Studio launches." +"Clicca su OK per aggiornare il plug-in di rete al prossimo avvio di Bambu " +"Studio." #, c-format, boost-format msgid "A new Network plug-in(%s) available, Do you want to install it?" -msgstr "A new network plug-in (%s) is available. Do you want to install it?" +msgstr "Disponibile nuovo plug-in di rete (%s). Vuoi installarlo?" msgid "New version of Bambu Studio" -msgstr "New version of Bambu Studio" +msgstr "Nuova versione di Bambu Studio" msgid "Don't remind me of this version again" -msgstr "Don't remind me about this version again." +msgstr "Non ricordarmi più questa versione." msgid "Done" msgstr "" msgid "LAN Connection Failed (Sending print file)" -msgstr "LAN Connection Failed (Sending print file)" +msgstr "Connessione LAN fallita (invio del file di stampa)" msgid "" "Step 1, please confirm Bambu Studio and your printer are in the same LAN." msgstr "" -"Step 1, please confirm that Bambu Studio and your printer are on the same " -"LAN." +"Step 1, conferma che Bambu Studio e la tua stampante siano sulla stessa LAN." msgid "" "Step 2, if the IP and Access Code below are different from the actual values " "on your printer, please correct them." msgstr "" -"Step 2, if the IP and Access Code below are different from the actual values " -"on your printer, please correct them." +"Step 2, se l'IP e il codice di accesso riportati di seguito sono diversi dai " +"valori effettivi sulla stampante, correggili." msgid "IP" msgstr "IP" msgid "Access Code" -msgstr "Access Code" +msgstr "Codice di accesso" msgid "Where to find your printer's IP and Access Code?" -msgstr "Where to find your printer's IP and Access Code?" +msgstr "Dove trovo l'IP e il codice accesso della stampante?" msgid "Error: IP or Access Code are not correct" -msgstr "Error: IP or Access Code are not correct" +msgstr "Errore: l'IP o il codice di accesso non sono corretti" msgid "Model:" -msgstr "Model:" +msgstr "Modello:" msgid "Serial:" -msgstr "Serial:" +msgstr "Seriale:" msgid "Version:" -msgstr "Version:" +msgstr "Versione:" msgid "Update firmware" -msgstr "Update firmware" +msgstr "Aggiorna firmware" msgid "Printing" -msgstr "Printing" +msgstr "Stampa" msgid "Idle" -msgstr "Idle" +msgstr "Inattivo" msgid "Latest version" -msgstr "Latest version" +msgstr "Ultima versione" msgid "Updating" -msgstr "Updating" +msgstr "Aggiornamento in corso…" msgid "Updating failed" -msgstr "Updating failed" +msgstr "Aggiornamento fallito" msgid "Updating successful" -msgstr "Update successful" +msgstr "Aggiornamento riuscito" msgid "" "Are you sure you want to update? This will take about 10 minutes. Do not " "turn off the power while the printer is updating." msgstr "" -"Are you sure you want to update? This will take about 10 minutes. Do not " -"turn off the power while the printer is updating." +"Sei sicuro di voler aggiornare? Ci vorranno circa 10 minuti. Non spegnere " +"l'alimentazione durante l'aggiornamento della stampante." msgid "" "An important update was detected and needs to be run before printing can " "continue. Do you want to update now? You can also update later from 'Upgrade " "firmware'." msgstr "" -"An important update was detected and needs to be run before printing can " -"continue. Do you want to update now? You can also update later from 'Update " -"firmware'." +"È stato rilevato un aggiornamento importante che deve essere eseguito prima " +"che la stampa possa continuare. Si desidera aggiornare ora? È possibile " +"effettuare l'aggiornamento anche in un secondo momento da \"Aggiorna firmware" +"\"." msgid "" "The firmware version is abnormal. Repairing and updating are required before " "printing. Do you want to update now? You can also update later on printer or " "update next time starting the studio." msgstr "" -"The firmware version is abnormal. Repairing and updating are required before " -"printing. Do you want to update now? You can also update later on the " -"printer or update next time you start Bambu Studio." +"La versione firmware è anomala. Prima di stampare, è necessario eseguire la " +"riparazione e l'aggiornamento. Si desidera aggiornare ora? È possibile " +"eseguire l'aggiornamento anche in un secondo momento sulla stampante o al " +"prossimo avvio di Bambu Studio." msgid "Extension Board" -msgstr "Extension Board" +msgstr "Scheda di estensione" msgid "Saving objects into the 3mf failed." -msgstr "Saving objects into the 3mf failed." +msgstr "Salvataggio oggetti 3mf fallito." msgid "Only Windows 10 is supported." -msgstr "Only Windows 10 is supported." +msgstr "È supportato solo Windows 10." msgid "Failed to initialize the WinRT library." -msgstr "Failed to initialize the WinRT library." +msgstr "Impossibile inizializzare la libreria WinRT." msgid "Exporting objects" -msgstr "Exporting objects" +msgstr "Esportazione oggetti" msgid "Failed loading objects." -msgstr "Failed loading objects." +msgstr "Caricamento oggetti fallito." msgid "Repairing object by Windows service" -msgstr "Repairing object by Windows service" +msgstr "Riparazione oggetto da parte del servizio Windows" msgid "Repair failed." -msgstr "Repair failed." +msgstr "Riparazione fallita." msgid "Loading repaired objects" -msgstr "Loading repaired objects" +msgstr "Caricamento oggetti riparati" msgid "Exporting 3mf file failed" -msgstr "Exporting 3mf file failed" +msgstr "Esportazione del file 3mf non riuscita" msgid "Import 3mf file failed" -msgstr "Import 3mf file failed" +msgstr "Importazione del file 3mf non riuscita" msgid "Repaired 3mf file does not contain any object" -msgstr "The repaired 3mf file does not contain any objects." +msgstr "Il file 3mf riparato non contiene alcun oggetto." msgid "Repaired 3mf file contains more than one object" -msgstr "The repaired 3mf file contains more than one object." +msgstr "Il file 3mf riparato contiene più di un oggetto." msgid "Repaired 3mf file does not contain any volume" -msgstr "The repaired 3mf file does not contain any volume." +msgstr "Il file 3mf riparato non contiene alcun volume." msgid "Repaired 3mf file contains more than one volume" -msgstr "The repaired 3mf file contains more than one volume." +msgstr "Il file 3mf riparato contiene più di un volume." msgid "Repair finished" -msgstr "Repair finished" +msgstr "Riparazione finita" msgid "Repair canceled" -msgstr "Repair canceled" +msgstr "Riparazione annullata" #, boost-format msgid "Copying of file %1% to %2% failed: %3%" @@ -6103,13 +6192,14 @@ msgstr "Copia del file %1% su %2% non riuscita: %3%" #, boost-format msgid "Copying directory %1% to %2% failed: %3%" -msgstr "Copying directory %1% to %2% failed: %3%" +msgstr "La copia della directory %1% in %2% non è riuscita: %3%." msgid "Need to check the unsaved changes before configuration updates." -msgstr "Please check any unsaved changes before updating the configuration." +msgstr "" +"Controllare le modifiche non salvate prima di aggiornare la configurazione." msgid "Configuration package updated to " -msgstr "Configuration package updated to " +msgstr "Pacchetto di configurazione aggiornato a " msgid "Open G-code file:" msgstr "Apri un file G-code:" @@ -6118,83 +6208,89 @@ msgid "" "One object has empty initial layer and can't be printed. Please Cut the " "bottom or enable supports." msgstr "" -"One object has empty initial layer and can't be printed. Please Cut the " -"bottom or enable supports." +"Un oggetto ha un layer iniziale vuoto e non può essere stampato. Tagliare il " +"fondo o attivare i supporti." #, boost-format msgid "Object can't be printed for empty layer between %1% and %2%." -msgstr "The object has empty layers between %1% and %2% and can’t be printed." +msgstr "" +"L'oggetto ha layer vuoti compresi tra %1% e %2% e non può essere stampato." #, boost-format msgid "Object: %1%" -msgstr "Object: %1%" +msgstr "Oggetto: %1%" msgid "" "Maybe parts of the object at these height are too thin, or the object has " "faulty mesh" msgstr "" -"Parts of the object at these heights may be too thin or the object may have " -"a faulty mesh." +"Le parti dell'oggetto a queste altezze potrebbero essere troppo sottili o " +"l'oggetto potrebbe avere una mesh difettosa." msgid "No object can be printed. Maybe too small" -msgstr "No object can be printed. It may be too small." +msgstr "" +"Non è possibile stampare alcun oggetto. Potrebbe essere troppo piccolo." msgid "" "Failed to generate gcode for invalid custom G-code.\n" "\n" msgstr "" -"Failed to generate G-code for invalid custom G-code.\n" +"Impossibile generare il G-code per G-code personalizzato non valido.\n" "\n" msgid "Please check the custom G-code or use the default custom G-code." -msgstr "Please check the custom G-code or use the default custom G-code." +msgstr "" +"Controlla il G-code personalizzato o utilizza il G-code personalizzato " +"predefinito." #, boost-format msgid "Generating G-code: layer %1%" -msgstr "Generating G-code: layer %1%" +msgstr "Genera G-code: layer %1%" msgid "Inner wall" -msgstr "Inner wall" +msgstr "Parete interna" msgid "Outer wall" -msgstr "Outer wall" +msgstr "Parete esterna" msgid "Overhang wall" -msgstr "Overhang wall" +msgstr "Parete a sbalzo" msgid "Sparse infill" -msgstr "Sparse infill" +msgstr "Riempimento" msgid "Internal solid infill" -msgstr "Internal solid infill" +msgstr "Riempimento solido interno" msgid "Top surface" -msgstr "Top surface" +msgstr "Superficie superiore" msgid "Bottom surface" -msgstr "Bottom surface" +msgstr "Superficie inferiore" msgid "Bridge" msgstr "Bridge" msgid "Gap infill" -msgstr "Gap infill" +msgstr "Riempimento gap" msgid "Support interface" -msgstr "Support interface" +msgstr "Interfaccia supporto" msgid "Support transition" -msgstr "Support transition" +msgstr "Supporto alla transizione" msgid "Multiple" -msgstr "Multiple" +msgstr "Multiplo" #, boost-format msgid "Failed to calculate line width of %1%. Can not get value of \"%2%\" " -msgstr "Failed to calculate line width of %1%. Cannot get value of “%2%” " +msgstr "" +"Impossibile calcolare la larghezza della linea di %1%. Impossibile ottenere " +"il valore \"%2%\" " msgid "undefined error" -msgstr "errore non definito" +msgstr "errore indefinito" msgid "too many files" msgstr "troppi file" @@ -6215,16 +6311,16 @@ msgid "failed finding central directory" msgstr "directory centrale non trovata" msgid "not a ZIP archive" -msgstr "non un archivio ZIP" +msgstr "non è un archivio ZIP" msgid "invalid header or corrupted" -msgstr "invalid header or corrupted" +msgstr "intestazione non valida o danneggiata" msgid "unsupported multidisk" -msgstr "Saving to RAID is not supported." +msgstr "Il salvataggio su RAID non supportato." msgid "decompression failed" -msgstr "decompression failed" +msgstr "decompressione fallita" msgid "compression failed" msgstr "compressione fallita" @@ -6233,10 +6329,10 @@ msgid "unexpected decompressed size" msgstr "dimensione decompressa imprevista" msgid "CRC check failed" -msgstr "CRC check failed" +msgstr "Controllo CRC non riuscito" msgid "unsupported central directory size" -msgstr "dimensione della directory centrale non supportata" +msgstr "dimensione directory centrale non supportata" msgid "allocation failed" msgstr "allocazione fallita" @@ -6269,7 +6365,7 @@ msgid "invalid filename" msgstr "nome file non valido" msgid "buffer too small" -msgstr "buffer troppo piccolo" +msgstr "Buffer troppo piccolo" msgid "internal error" msgstr "errore interno" @@ -6278,170 +6374,181 @@ msgid "file not found" msgstr "file non trovato" msgid "archive too large" -msgstr "Archive too large" +msgstr "Archivio troppo grande" msgid "validation failed" -msgstr "convalida non riuscita" +msgstr "convalida fallita" msgid "write callback failed" -msgstr "write callback failed" +msgstr "scrittura callback fallita" #, boost-format msgid "" "%1% is too close to exclusion area, there may be collisions when printing." msgstr "" -"%1% is too close to exclusion area. There may be collisions when printing." +"%1% è troppo vicino all'area di esclusione, potrebbero verificarsi " +"collisioni durante la stampa." #, boost-format msgid "%1% is too close to others, and collisions may be caused." -msgstr "%1% is too close to others, and collisions may be caused." +msgstr "%1% è troppo vicino ad altri oggetti e potrebbe causare collisioni." #, boost-format msgid "%1% is too tall, and collisions will be caused." -msgstr "%1% is too tall, and collisions will be caused." +msgstr "%1% è troppo alto e si verificheranno collisioni." msgid " is too close to others, there may be collisions when printing." -msgstr " is too close to others; there may be collisions when printing." +msgstr "" +" è troppo vicino agli altri; potrebbero verificarsi delle collisioni durante " +"la stampa." msgid " is too close to exclusion area, there may be collisions when printing." msgstr "" -" is too close to exclusion area, there may be collisions when printing." +" è troppo vicino all'area di esclusione, potrebbero verificarsi collisioni " +"durante la stampa." msgid "Prime Tower" msgstr "Prime Tower" msgid " is too close to others, and collisions may be caused.\n" -msgstr " is too close to others, and collisions may be caused.\n" +msgstr " è troppo vicino agli altri e possono verificarsi collisioni.\n" msgid " is too close to exclusion area, and collisions will be caused.\n" -msgstr " is too close to an exclusion area, and collisions will be caused.\n" +msgstr "" +" è troppo vicino a un'area di esclusione e si verificheranno collisioni.\n" msgid "" "Can not print multiple filaments which have large difference of temperature " "together. Otherwise, the extruder and nozzle may be blocked or damaged " "during printing" msgstr "" -"Unable to print multiple filaments which have large temperature differences " -"together. Otherwise, the extruder and nozzle may be blocked or damaged " -"during printing." +"Impossibile stampare filamenti che presentano grandi differenze di " +"temperatura insieme. In caso contrario, l'estrusore e il nozzle potrebbero " +"bloccarsi o danneggiarsi durante la stampa." msgid "No extrusions under current settings." -msgstr "No extrusions under current settings." +msgstr "Nessuna estrusione con le impostazioni attuali." msgid "" "Smooth mode of timelapse is not supported when \"by object\" sequence is " "enabled." msgstr "" -"Smooth mode of timelapse is not supported when \"by object\" sequence is " -"enabled." +"La modalità fluida del timelapse non è supportata quando è abilitata la " +"sequenza \"per oggetto\"." msgid "" "Please select \"By object\" print sequence to print multiple objects in " "spiral vase mode." msgstr "" -"Please select \"By object\" print sequence to print multiple objects in " -"spiral vase mode." +"Seleziona la sequenza di stampa \"Per oggetto\" per stampare più oggetti in " +"modalità vaso a spirale." msgid "" "The spiral vase mode does not work when an object contains more than one " "materials." msgstr "" -"Spiral (vase) mode does not work when an object contains more than one " -"material." +"La modalità Spirale (vaso) non funziona quando un oggetto contiene più di un " +"materiale." msgid "The prime tower is not supported in \"By object\" print." -msgstr "A prime tower is not supported in “By object” print." +msgstr "La Prime Tower non è supportata nella stampa \"Per oggetto\"." msgid "" "The prime tower is not supported when adaptive layer height is on. It " "requires that all objects have the same layer height." msgstr "" -"A prime tower is not supported when adaptive layer height is on. It requires " -"that all objects have the same layer height." +"La Prime Tower non è supportata quando è attivo Layer adattativi. Richiede " +"che tutti gli oggetti abbiano la stessa altezza layer." msgid "The prime tower requires \"support gap\" to be multiple of layer height" msgstr "" -"A prime tower requires any “support gap” to be a multiple of layer height." +"La Prime Tower richiede che il \"gap supporto\" sia un multiplo dell'altezza " +"del layer." msgid "The prime tower requires that all objects have the same layer heights" -msgstr "A prime tower requires that all objects have the same layer height." +msgstr "" +"La Prime Tower richiede che tutti gli oggetti abbiano la stessa altezza " +"layer." msgid "" "The prime tower requires that all objects are printed over the same number " "of raft layers" msgstr "" -"A prime tower requires that all objects are printed over the same number of " -"raft layers." +"La Prime Tower richiede che tutti gli oggetti siano stampati sullo stesso " +"numero di layers del raft." msgid "" "The prime tower requires that all objects are sliced with the same layer " "heights." msgstr "" -"A prime tower requires that all objects are sliced with the same layer " -"height." +"La Prime Tower richiede che tutti gli oggetti siano elaborati con la stessa " +"altezza layer." msgid "" "The prime tower is only supported if all objects have the same variable " "layer height" msgstr "" -"The prime tower is only supported if all objects have the same variable " -"layer height" +"La Prime Tower è supportata solo se tutti gli oggetti hanno la stessa " +"altezza layer adattativi." msgid "Too small line width" -msgstr "Line width too small" +msgstr "Larghezza linea troppo piccola" msgid "Too large line width" -msgstr "Line width too large" +msgstr "Larghezza linea troppo grande" msgid "" "The prime tower requires that support has the same layer height with object." msgstr "" -"A prime tower requires that support has the same layer height as the object." +"La Prime Tower richiede che il supporto abbia la stessa altezza layer " +"dell'oggetto." msgid "" "Support enforcers are used but support is not enabled. Please enable support." msgstr "" -"Support enforcers are used but support is not enabled. Please enable support." +"Utilizzati supporti forzati ma i supporti non sono abilitati. Abilitare i " +"supporti." msgid "Layer height cannot exceed nozzle diameter" -msgstr "Layer height cannot exceed nozzle diameter." +msgstr "L'altezza del layer non può superare il diametro dell'ugello." #, c-format, boost-format msgid "Plate %d: %s does not support filament %s" -msgstr "Plate %d: %s does not support filament %s" +msgstr "Piatto %d: %s non supporta il filamento %s" msgid "Generating skirt & brim" -msgstr "Generating skirt & brim" +msgstr "Generazione skirt & brim" msgid "Exporting G-code" -msgstr "Esportando il G-code" +msgstr "Esportazione G-code" msgid "Generating G-code" msgstr "Generazione G-code" msgid "Failed processing of the filename_format template." -msgstr "Processing of the filename_format template failed." +msgstr "Elaborazione del modello filename_format non riuscita." msgid "Printable area" -msgstr "Printable area" +msgstr "Area di stampa" msgid "Bed exclude area" -msgstr "Excluded bed area" +msgstr "Zona piano esclusa" msgid "" "Unprintable area in XY plane. For example, X1 Series printers use the front " "left corner to cut filament during filament change. The area is expressed as " "polygon by points in following format: \"XxY, XxY, ...\"" msgstr "" -"Unprintable area in XY plane. For example, X1 Series printers use the front " -"left corner to cut filament during filament change. The area is expressed as " -"polygon by points in following format: \"XxY, XxY, ...\"" +"Area non stampabile nel piano XY. Ad esempio, le stampanti della serie X1 " +"utilizzano l'angolo anteriore sinistro per tagliare il filamento durante il " +"cambio filamento. L'area è espressa come poligono di punti nel seguente " +"formato: \"XxY, XxY, ...\"" msgid "Bed custom texture" -msgstr "Bed custom texture" +msgstr "Texture piano personalizzata" msgid "Bed custom model" -msgstr "Bed custom model" +msgstr "Modello piano personalizzato" msgid "Elephant foot compensation" msgstr "Compensazione zampa d'elefante" @@ -6450,29 +6557,29 @@ msgid "" "Shrink the initial layer on build plate to compensate for elephant foot " "effect" msgstr "" -"This shrinks the first layer on the build plate to compensate for elephant " -"foot effect." +"Questo restringe il primo layer sulla piatto per compensare l'effetto zampa " +"d'elefante." msgid "" "Slicing height for each layer. Smaller layer height means more accurate and " "more printing time" msgstr "" -"This is the height for each layer. Smaller layer heights give greater " -"accuracy but longer printing time." +"Questa è l'altezza di ogni layer. Le altezze dei layers inferiori offrono " +"una maggiore precisione ma tempi di stampa più lunghi." msgid "Printable height" -msgstr "Printable height" +msgstr "Altezza di stampa" msgid "Maximum printable height which is limited by mechanism of printer" msgstr "" -"This is the maximum printable height which is limited by the height of the " -"build area." +"È l'altezza massima stampabile, limitata dall'altezza dell'area di " +"costruzione." msgid "Printer preset names" msgstr "Nomi dei preset della stampante" msgid "Hostname, IP or URL" -msgstr "Hostname, IP or URL" +msgstr "Nome host, IP o URL" msgid "" "Slic3r can upload G-code files to a printer host. This field should contain " @@ -6481,77 +6588,77 @@ msgid "" "name and password into the URL in the following format: https://username:" "password@your-octopi-address/" msgstr "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the hostname, IP address or URL of the printer host instance. Print host " -"behind HAProxy with basic auth enabled can be accessed by putting the user " -"name and password into the URL in the following format: https://username:" -"password@your-octopi-address/" +"Slic3r può caricare file di G-code su un host di stampa. Questo campo deve " +"contenere il nome dell'host, l'indirizzo IP o l'URL dell'istanza dell'host " +"di stampa. L'host di stampa dietro HAProxy con l'autenticazione di base " +"abilitata è accessibile inserendo il nome utente e la password nell'URL nel " +"seguente formato: https://username:password@your-octopi-address/" msgid "API Key / Password" -msgstr "API Key / Password" +msgstr "Chiave API / Password" msgid "" "Slic3r can upload G-code files to a printer host. This field should contain " "the API Key or the password required for authentication." msgstr "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the API Key or the password required for authentication." +"Slic3r può caricare file G-code su un host di stampa. Questo campo deve " +"contenere la chiave API o la password richiesta per l'autenticazione." msgid "Name of the printer" -msgstr "Name of the printer" +msgstr "Nome della stampante" msgid "HTTPS CA File" -msgstr "HTTPS CA File" +msgstr "File CA HTTPS" msgid "" "Custom CA certificate file can be specified for HTTPS OctoPrint connections, " "in crt/pem format. If left blank, the default OS CA certificate repository " "is used." msgstr "" -"Custom CA certificate file can be specified for HTTPS OctoPrint connections, " -"in crt/pem format. If left blank, the default OS CA certificate repository " -"is used." +"È possibile specificare un file di certificato CA personalizzato per le " +"connessioni HTTPS di OctoPrint, in formato crt/pem. Se lasciato vuoto, viene " +"utilizzato l'archivio di certificati CA predefinito del sistema operativo." msgid "User" -msgstr "User" +msgstr "Utente" msgid "Password" msgstr "Password" msgid "Ignore HTTPS certificate revocation checks" -msgstr "Ignore HTTPS certificate revocation checks" +msgstr "Ignora i controlli di revoca dei certificati HTTPS" msgid "" "Ignore HTTPS certificate revocation checks in case of missing or offline " "distribution points. One may want to enable this option for self signed " "certificates if connection fails." msgstr "" -"Ignore HTTPS certificate revocation checks in the case of missing or offline " -"distribution points. One may want to enable this option for self signed " -"certificates if connection fails." +"Ignora i controlli di revoca dei certificati HTTPS in caso di punti di " +"distribuzione mancanti o offline. Si potrebbe voler abilitare questa opzione " +"per i certificati autofirmati se la connessione fallisce." msgid "Names of presets related to the physical printer" -msgstr "Names of presets related to the physical printer" +msgstr "Nomi dei preset relativi alla stampante" msgid "Authorization Type" -msgstr "Authorization Type" +msgstr "Tipo di autorizzazione" msgid "API key" -msgstr "API key" +msgstr "Chiave API" msgid "HTTP digest" msgstr "HTTP digest" msgid "Avoid crossing wall" -msgstr "Avoid crossing walls" +msgstr "Evita di attraversare le pareti" msgid "Detour and avoid to travel across wall which may cause blob on surface" msgstr "" -"This detours to avoid traveling across walls, which may cause blobs on the " -"surface" +"Questa deviazione evita di attraversare le pareti, il che può causare la " +"formazione di bolle sulla superficie." msgid "Avoid crossing wall - Max detour length" -msgstr "Avoid crossing walls - Max detour length" +msgstr "Evitare di attraversare le pareti - Lunghezza massima della deviazione" msgid "" "Maximum detour distance for avoiding crossing wall. Don't detour if the " @@ -6559,13 +6666,14 @@ msgid "" "either as an absolute value or as percentage (for example 50%) of a direct " "travel path. Zero to disable" msgstr "" -"Maximum detour distance for avoiding crossing wall: The printer won't detour " -"if the detour distance is larger than this value. Detour length could be " -"specified either as an absolute value or as percentage (for example 50%) of " -"a direct travel path. A value of 0 will disable this." +"Distanza massima di deviazione per evitare di attraversare la parete: la " +"stampante non eseguirà alcuna deviazione se la distanza di deviazione è " +"maggiore di questo valore. La lunghezza della deviazione può essere " +"specificata come valore assoluto o come percentuale (ad esempio 50%) di uno " +"spostamento. Un valore pari a 0 lo disabiliterà." msgid "mm or %" -msgstr "mm or %" +msgstr "mm o %" msgid "Other layers" msgstr "Altri layer" @@ -6574,8 +6682,8 @@ msgid "" "Bed temperature for layers except the initial one. Value 0 means the " "filament does not support to print on the Cool Plate" msgstr "" -"This is the bed temperature for layers except for the first one. A value of " -"0 means the filament does not support printing on the Cool Plate." +"Questa è la temperatura del piano per i layer (tranne il primo). Un valore " +"pari a 0 indica che il filamento non supporta la stampa sul Cool Plate." msgid "°C" msgstr "°C" @@ -6584,77 +6692,80 @@ msgid "" "Bed temperature for layers except the initial one. Value 0 means the " "filament does not support to print on the Engineering Plate" msgstr "" -"This is the bed temperature for layers except for the first one. A value of " -"0 means the filament does not support printing on the Engineering Plate." +"Questa è la temperatura del piano per i layer (tranne il primo). Un valore " +"pari a 0 indica che il filamento non supporta la stampa su piatto " +"Engineering." msgid "" "Bed temperature for layers except the initial one. Value 0 means the " "filament does not support to print on the High Temp Plate" msgstr "" -"This is the bed temperature for layers except for the first one. A value of " -"0 means the filament does not support printing on the High Temp Plate." +"Questa è la temperatura del piano per i layer (tranne il primo). Un valore " +"pari a 0 indica che il filamento non supporta la stampa sul High Temp." msgid "" "Bed temperature for layers except the initial one. Value 0 means the " "filament does not support to print on the Textured PEI Plate" msgstr "" -"Bed temperature after the first layer. 0 means the filament is not supported " -"on the Textured PEI Plate." +"Temperatura del piano dopo il primo layer. Il valore 0 significa che il " +"filamento non supportata la stampa su piatto Textured PEI." msgid "Initial layer" -msgstr "First layer" +msgstr "Primo layer" msgid "Initial layer bed temperature" -msgstr "First layer bed temperature" +msgstr "Temperatura del piano per il primo layer" msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Cool Plate" msgstr "" -"This is the bed temperature of the first layer. A value of 0 means the " -"filament does not support printing on the Cool Plate." +"Questa è la temperatura del piatto del primo layer. Un valore pari a 0 " +"indica che il filamento non supporta la stampa sul piatto Cool Plate." msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Engineering Plate" msgstr "" -"This is the bed temperature of the first layer. A value of 0 means the " -"filament does not support printing on the Engineering Plate." +"Temperatura del piano quando è installato il piatto Cool Plate. Il valore 0 " +"significa che il filamento non supporta la stampa su piatto Engineering." msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the High Temp Plate" msgstr "" -"This is the bed temperature of the first layer. A value of 0 means the " -"filament does not support printing on the High Temp Plate." +"Questa è la temperatura del piano del primo layer. Un valore pari a 0 indica " +"che il filamento non supporta la stampa sul piatto High Temp." msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Textured PEI Plate" msgstr "" -"Bed temperature of the first layer 0 means the filament is not supported on " -"the Textured PEI Plate." +"La temperatura del piano del primo layer a 0 indica che il filamento non è " +"supportato sul piatto Textured PEI." msgid "Bed types supported by the printer" -msgstr "Bed types supported by the printer" +msgstr "Tipi di piatti supportati dalla stampante" msgid "This G-code is inserted at every layer change before lifting z" -msgstr "This G-code is inserted at every layer change before lifting z." +msgstr "" +"Questo G-code viene inserito ad ogni cambio layer prima del sollevamento z." msgid "Bottom shell layers" -msgstr "Bottom shell layers" +msgstr "Layer inferiori guscio" msgid "" "This is the number of solid layers of bottom shell, including the bottom " "surface layer. When the thickness calculated by this value is thinner than " "bottom shell thickness, the bottom shell layers will be increased" msgstr "" -"This is the number of solid layers of bottom shell, including the bottom " -"surface layer. When the thickness calculated by this value is thinner than " -"bottom shell thickness, the bottom shell layers will be increased" +"È il numero di layers solidi del guscio inferiore, compreso Il layer " +"superficiale inferiore. Se lo spessore calcolato da questo valore è più " +"sottile dello spessore del guscio inferiore, i layers del guscio inferiore " +"verranno aumentati." msgid "Bottom shell thickness" -msgstr "Bottom shell thickness" +msgstr "Spessore del guscio inferiore" msgid "" "The number of bottom solid layers is increased when slicing if the thickness " @@ -6663,36 +6774,39 @@ msgid "" "is disabled and thickness of bottom shell is absolutely determained by " "bottom shell layers" msgstr "" -"The number of bottom solid layers is increased when slicing if the thickness " -"calculated by bottom shell layers is thinner than this value. This can avoid " -"having too thin a shell when layer height is small. 0 means that this " -"setting is disabled and the thickness of the bottom shell is determined " -"simply by the number of bottom shell layers." +"Il numero di layers solidi inferiori aumenta durante l'elaborazione se lo " +"spessore calcolato dei layers del guscio inferiore è più sottile di questo " +"valore. Questo può evitare di avere un guscio troppo sottile quando " +"l'altezza layer è ridotta. 0 significa che questa impostazione è " +"disabilitata e lo spessore del guscio inferiore è determinato semplicemente " +"dal numero di layers del guscio inferiore." msgid "Force cooling for overhang and bridge" -msgstr "Force cooling for overhangs and bridges" +msgstr "Raffreddamento forzato per sbalzo e ponte" msgid "" "Enable this option to optimize part cooling fan speed for overhang and " "bridge to get better cooling" msgstr "" -"Enable this option to optimize the part cooling fan speed for overhangs and " -"bridges to get better cooling" +"Abilita questa opzione per ottimizzare la velocità della ventola di " +"raffreddamento degli oggetti per sporgenze e ponti per ottenere un " +"raffreddamento migliore." msgid "Fan speed for overhang" -msgstr "Fan speed for overhangs" +msgstr "Velocità della ventola per le sporgenze" msgid "" "Force part cooling fan to be this speed when printing bridge or overhang " "wall which has large overhang degree. Forcing cooling for overhang and " "bridge can get better quality for these part" msgstr "" -"Force part cooling fan to be this speed when printing bridges or overhang " -"walls which have a large overhang degree. Forcing cooling for overhangs and " -"bridges can achieve better quality for these parts." +"Forzare la ventola di raffreddamento a questa velocità quando si stampano " +"ponti o sporgenze con un elevato grado di sporgenza. Forzando il " +"raffreddamento per le sporgenze e i ponti si può ottenere una qualità " +"migliore per queste parti." msgid "Cooling overhang threshold" -msgstr "Cooling overhang threshold" +msgstr "Soglia di sbalzo per il raffreddamento" #, c-format msgid "" @@ -6701,62 +6815,63 @@ msgid "" "of the line without support from lower layer. 0% means forcing cooling for " "all outer wall no matter how much overhang degree" msgstr "" -"Force cooling fan to be a specific speed when overhang degree of printed " -"part exceeds this value. This is expressed as a percentage which indicates " -"how much width of the line without support from lower layer. 0% means " -"forcing cooling for all outer wall no matter the overhang degree." +"Forza la ventola di raffreddamento a una velocità specifica quando il grado " +"di sporgenza della parte stampata supera questo valore. Questo valore è " +"espresso in percentuale e indica la larghezza della linea senza il supporto " +"dei layer. 0%% significa forzare il raffreddamento per tutta la parete " +"esterna, indipendentemente dal grado di sporgenza." msgid "Bridge direction" -msgstr "Bridge direction" +msgstr "Direzione bridge" msgid "" "Bridging angle override. If left to zero, the bridging angle will be " "calculated automatically. Otherwise the provided angle will be used for " "external bridges. Use 180°for zero angle." msgstr "" -"Bridging angle override. 0 means the bridging angle will be calculated " -"automatically. Otherwise the provided angle will be used for external " -"bridges. Use 180° for zero angle." +"Sovrascrivere l'angolo del Bridge. Il valore 0 significa che l'angolo di " +"collegamento verrà calcolato automaticamente. Altrimenti l'angolo fornito " +"verrà utilizzato per i Bridge esterni. Usa 180° per un angolo zero." msgid "Bridge flow" -msgstr "Bridge flow" +msgstr "Flusso del Bridge" msgid "" "Decrease this value slightly(for example 0.9) to reduce the amount of " "material for bridge, to improve sag" msgstr "" -"Decrease this value slightly (for example 0.9) to reduce the amount of " -"material extruded for bridges to avoid sagging." +"Diminuire leggermente questo valore (ad esempio 0.9) per ridurre la quantità " +"di materiale per il ponte e migliorare l'abbassamento dello stesso" msgid "Only one wall on top surfaces" -msgstr "Only one wall on top surfaces" +msgstr "Solo una parete sulle superfici superiori" msgid "" "Use only one wall on flat top surface, to give more space to the top infill " "pattern" msgstr "" -"Use only one wall on flat top surfaces, to give more space to the top infill " -"pattern" +"Usa solo una parete su superfici piane, per dare più spazio alla trama " +"riempimento superiore" msgid "Slow down for overhang" -msgstr "Slow down for overhangs" +msgstr "Rallenta in caso di sporgenze" msgid "Enable this option to slow printing down for different overhang degree" msgstr "" -"Enable this option to slow down when printing overhangs. The speeds for " -"different overhang percentages are set below." +"Abilita questa opzione per rallentare quando la stampa presenta sporgenze. " +"Le velocità per le diverse percentuali di sporgenza sono indicate di seguito." msgid "mm/s" msgstr "mm/s" msgid "Speed of bridge and completely overhang wall" -msgstr "This is the speed for bridges and 100% overhang walls." +msgstr "E' la velocità per i ponti e le pareti pendenti al 100%." msgid "Brim width" msgstr "Larghezza brim" msgid "Distance from model to the outermost brim line" -msgstr "This is the distance from the model to the outermost brim line." +msgstr "Questa è la distanza tra il modello e la linea del brim più esterno." msgid "Brim type" msgstr "Tipo di brim" @@ -6776,43 +6891,43 @@ msgid "Outer and inner brim" msgstr "" msgid "Brim-object gap" -msgstr "Brim-object gap" +msgstr "Gap tra Brim e oggetto" msgid "" "A gap between innermost brim line and object can make brim be removed more " "easily" msgstr "" -"This creates a gap between the innermost brim line and the object and can " -"make the brim easier to remove." +"Questo crea un gap tra la linea interna del brim e l'oggetto per rendere il " +"brim più facile da rimuovere" msgid "Compatible machine" -msgstr "Compatible machine" +msgstr "Macchina compatibile" msgid "upward compatible machine" -msgstr "upward compatible machine" +msgstr "macchina compatibile con versioni successive" msgid "Compatible machine condition" -msgstr "Compatible machine condition" +msgstr "Condizione della macchina compatibile" msgid "Compatible process profiles" -msgstr "Compatible process profiles" +msgstr "Profili di processo compatibili" msgid "Compatible process profiles condition" -msgstr "Compatible process profiles condition" +msgstr "Condizione dei profili di processo compatibili" msgid "Print sequence, layer by layer or object by object" msgstr "" -"This determines the print sequence, allowing you to print layer-by-layer or " -"object-by-object." +"Questo determina la sequenza di stampa, che consente di stampare layer per " +"layer o oggetto per oggetto." msgid "By layer" -msgstr "By layer" +msgstr "Per layer" msgid "By object" -msgstr "By object" +msgstr "Per oggetto" msgid "Slow printing down for better layer cooling" -msgstr "Slow printing down for better layer cooling" +msgstr "Rallentamento stampa per un migliore raffreddamento layers" msgid "" "Enable this option to slow printing speed down to make the final layer time " @@ -6820,20 +6935,21 @@ msgid "" "that layer can be cooled for longer time. This can improve the cooling " "quality for needle and small details" msgstr "" -"Enable this option to slow printing speed down to ensure that the final " -"layer time is not shorter than the layer time threshold in \"Max fan speed " -"threshold\", so that the layer can be cooled for a longer time. This can " -"improve the quality for small details." +"Abilita questa opzione per rallentare la velocità di stampa in modo che il " +"tempo finale del layer non sia inferiore alla soglia di tempo nel valore " +"\"Soglia di velocità massima della ventola\", in modo che il layer possa " +"essere raffreddato più a lungo.\n" +"Ciò può migliorare la qualità per i piccoli dettagli" msgid "Normal printing" -msgstr "Normal printing" +msgstr "Stampa normale" msgid "" "The default acceleration of both normal printing and travel except initial " "layer" msgstr "" -"This is the default acceleration for both normal printing and travel after " -"the first layer." +"E' l'accelerazione predefinita sia per la stampa normale che per la corsa " +"dopo il primo layer." msgid "mm/s²" msgstr "mm/s²" @@ -6842,49 +6958,51 @@ msgid "Default filament profile" msgstr "Profilo filamento predefinito" msgid "Default filament profile when switch to this machine profile" -msgstr "Default filament profile when switching to this machine profile" +msgstr "" +"Profilo filamento predefinito quando si passa a questo profilo macchina" msgid "Default process profile" -msgstr "Default process profile" +msgstr "Profilo di processo predefinito" msgid "Default process profile when switch to this machine profile" -msgstr "Default process profile when switching to this machine profile" +msgstr "" +"Profilo di processo predefinito quando si passa a questo profilo macchina" msgid "No cooling for the first" -msgstr "No cooling for the first" +msgstr "Nessun raffreddamento per il primo" msgid "" "Close all cooling fan for the first certain layers. Cooling fan of the first " "layer used to be closed to get better build plate adhesion" msgstr "" -"Turn off all cooling fans for the first few layers. This can be used to " -"improve bed adhesion." +"Spegnere tutte le ventole di raffreddamento per i primi layer. Questo può " +"servire a migliorare l'adesione del piatto." msgid "layers" -msgstr "layer" +msgstr "layers" msgid "Don't support bridges" -msgstr "Non supportare i bridge" +msgstr "Non supporta i bridge" msgid "" "Don't support the whole bridge area which make support very large. Bridge " "usually can be printing directly without support if not very long" msgstr "" -"This disables supporting bridges, which decreases the amount of support " -"required. Bridges can usually be printed directly without support over a " -"reasonable distance." +"Questo disabilita i supporti per i bridge, riducendo la quantità di supporto " +"necessaria. In genere i bridge possono essere stampati direttamente senza " +"supporto per una distanza ragionevole." msgid "Thick bridges" -msgstr "Thick bridges" +msgstr "Ponti spessi" msgid "" "If enabled, bridges are more reliable, can bridge longer distances, but may " "look worse. If disabled, bridges look better but are reliable just for " "shorter bridged distances." msgstr "" -"If enabled, bridges are more reliable and can bridge longer distances but " -"may look worse. If disabled, bridges look better but are reliable only for " -"shorter distances." +"Se abilitato, i ponti sono più affidabili e possono colmare distanze " +"maggiori, ma potrebbero avere un aspetto peggiore. Se disattivato, i ponti " +"hanno un aspetto migliore ma sono affidabili solo per distanze più brevi." msgid "Max bridge length" msgstr "Lunghezza massima Bridge" @@ -6894,31 +7012,32 @@ msgid "" "bridges to be supported, and set it to a very large value if you don't want " "any bridges to be supported." msgstr "" -"This is the maximum length of bridges that don't need support. Set it to 0 " -"if you want all bridges to be supported, and set it to a very large value if " -"you don't want any bridges to be supported." +"Questa è la lunghezza massima dei ponti che non necessitano di supporto. " +"Impostalo su 0 se desideri che tutti i bridge siano supportati e impostalo " +"su un valore molto grande se non vuoi che nessun bridge sia supportato." msgid "End G-code" -msgstr "G-code finale" +msgstr "G-code Finale" msgid "End G-code when finish the whole printing" -msgstr "Add end G-Code when finishing the entire print." +msgstr "Aggiungi G-code quando si termina l'intera stampa." msgid "End G-code when finish the printing of this filament" -msgstr "Add end G-code when finishing the printing of this filament." +msgstr "Aggiungi G-code quando si termina la stampa di questo filamento." msgid "Ensure vertical shell thickness" -msgstr "Ensure vertical shell thickness" +msgstr "Garantisci lo spessore verticale del guscio" msgid "" "Add solid infill near sloping surfaces to guarantee the vertical shell " "thickness (top+bottom solid layers)" msgstr "" -"Add solid infill near sloping surfaces to guarantee the vertical shell " -"thickness (top+bottom solid layers)." +"Aggiunge un riempimento solido in prossimità delle superfici inclinate per " +"garantire lo spessore verticale del guscio (layers solidi superiori e " +"inferiori)." msgid "Internal bridge support thickness" -msgstr "Internal bridge support thickness" +msgstr "Spessore supporto interno del ponte" msgid "" "If enabled, Studio will generate support loops under the contours of " @@ -6929,10 +7048,11 @@ msgid "" msgstr "" msgid "Top surface pattern" -msgstr "Top surface pattern" +msgstr "Trama superfice superiore" msgid "Line pattern of top surface infill" -msgstr "This is the line pattern for top surface infill." +msgstr "" +"Questo è la Trama lineare per il riempimento della superficie superiore." msgid "Concentric" msgstr "Concentrico" @@ -6944,107 +7064,109 @@ msgid "Monotonic" msgstr "Monotonico" msgid "Monotonic line" -msgstr "Monotonic line" +msgstr "Linea monotonica" msgid "Aligned Rectilinear" -msgstr "Aligned Rectilinear" +msgstr "Rettilineo allineato" msgid "Hilbert Curve" -msgstr "Hilbert Curve" +msgstr "Curva di Hilbert" msgid "Archimedean Chords" -msgstr "Archimedean Chords" +msgstr "Corde di Archimede" msgid "Octagram Spiral" -msgstr "Octagram Spiral" +msgstr "Spirale a Ottogramma" msgid "Bottom surface pattern" -msgstr "Bottom surface pattern" +msgstr "Trama superficie inferiore" msgid "Line pattern of bottom surface infill, not bridge infill" msgstr "" -"This is the line pattern of bottom surface infill, not including bridge " -"infill." +"Questo è la trama lineare del riempimento della superficie inferiore, " +"escluso il riempimento del ponte." msgid "Line width of outer wall" -msgstr "Line width of outer wall" +msgstr "Larghezza linea della parete esterna" msgid "" "Speed of outer wall which is outermost and visible. It's used to be slower " "than inner wall speed to get better quality." msgstr "" -"This is the printing speed for the outer walls of parts. These are generally " -"printed slower than inner walls for higher quality." +"E' la velocità di stampa per le pareti esterne dei pezzi. Queste vengono " +"generalmente stampate più lentamente delle pareti interne per ottenere una " +"qualità superiore." msgid "Order of inner wall/outer wall/infil" -msgstr "Order of inner wall/outer wall/infill" +msgstr "Ordine di parete interna/esterna/riempimento" msgid "Print sequence of inner wall, outer wall and infill. " -msgstr "This is the print sequence of inner walls, outer walls, and infill." +msgstr "" +"È la sequenza di stampa di pareti interne, pareti esterne e dei riempimenti." msgid "inner/outer/infill" -msgstr "inner/outer/infill" +msgstr "interno/esterno/riempimento" msgid "outer/inner/infill" -msgstr "outer/inner/infill" +msgstr "esterno/interno/riempimento" msgid "infill/inner/outer" -msgstr "infill/inner/outer" +msgstr "riempimento/interno/esterno" msgid "infill/outer/inner" -msgstr "infill/outer/inner" +msgstr "riempimento/esterno/interno" msgid "inner-outer-inner/infill" -msgstr "inner-outer-inner/infill" +msgstr "interno-esterno-interno/riempimento" msgid "Height to rod" -msgstr "Height to rod" +msgstr "Altezza asta" msgid "" "Distance of the nozzle tip to the lower rod. Used for collision avoidance in " "by-object printing." msgstr "" -"Distance from the nozzle tip to the lower rod. Used for collision avoidance " -"in by-object printing." +"Distanza dalla punta del nozzle all'asta inferiore. Utilizzato per evitare " +"le collisioni nella stampa di oggetto per oggetto." msgid "Height to lid" -msgstr "Height to lid" +msgstr "Altezza dal coperchio" msgid "" "Distance of the nozzle tip to the lid. Used for collision avoidance in by-" "object printing." msgstr "" -"Distance from the nozzle tip to the lid. Used for collision avoidance in by-" -"object printing." +"Distanza dalla punta del nozzle al coperchio. Utilizzato per evitare le " +"collisioni nella stampa oggetto per oggetto." msgid "" "Clearance radius around extruder. Used for collision avoidance in by-object " "printing." msgstr "" -"Clearance radius around extruder: used for collision avoidance in by-object " -"printing." +"Raggio di sicurezza attorno all'estrusore: utilizzato per evitare collisioni " +"nella stampa per oggetto." msgid "Max Radius" -msgstr "Max Radius" +msgstr "Raggio massimo" msgid "" "Max clearance radius around extruder. Used for collision avoidance in by-" "object printing." msgstr "" -"Max clearance radius around extruder. Used for collision avoidance in by-" -"object printing." +"Raggio di distanza massimo intorno all'estrusore. Utilizzato per evitare le " +"collisioni nella stampa di oggetti singoli." msgid "Extruder Color" msgstr "Colore estrusore" msgid "Only used as a visual help on UI" -msgstr "Only used as a visual help on UI" +msgstr "Utilizzato solo come aiuto visivo per l'interfaccia utente" msgid "Extruder offset" msgstr "Offset estrusore" msgid "Flow ratio" -msgstr "Flow ratio" +msgstr "Rapporto di flusso" msgid "" "The material may have volumetric change after switching between molten state " @@ -7053,14 +7175,15 @@ msgid "" "and 1.05. Maybe you can tune this value to get nice flat surface when there " "has slight overflow or underflow" msgstr "" -"The material may have volumetric change after switching between molten and " -"crystalline states. This setting changes all extrusion flow of this filament " -"in G-code proportionally. The recommended value range is between 0.95 and " -"1.05. You may be able to tune this value to get a nice flat surface if there " -"is slight overflow or underflow." +"Il materiale può subire variazioni volumetriche dopo il passaggio dallo " +"stato fuso a quello cristallino. Questa impostazione modifica in modo " +"proporzionale tutti i flussi di estrusione di questo filamento in G-code. " +"L'intervallo di valori raccomandato è compreso tra 0,95 e 1,05. È possibile " +"regolare questo valore per ottenere una superficie piatta se si verifica una " +"leggera sovra-estrusione o sotto-estrusione." msgid "Default line width if some line width is set to be zero" -msgstr "Default line width for line widths set to 0" +msgstr "Larghezza di linea predefinita per linee impostate a zero" msgid "Keep fan always on" msgstr "Mantieni la ventola sempre accesa" @@ -7069,52 +7192,54 @@ msgid "" "If enable this setting, part cooling fan will never be stoped and will run " "at least at minimum speed to reduce the frequency of starting and stoping" msgstr "" -"Enabling this setting means that part cooling fan will never stop entirely " -"and will instead run at least at minimum speed to reduce the frequency of " -"starting and stopping." +"Se si attiva questa impostazione, la ventola di raffreddamento non si " +"arresterà mai del tutto, ma funzionerà almeno alla velocità minima per " +"ridurre la frequenza di avvio e arresto." msgid "Layer time" -msgstr "Layer time" +msgstr "Tempo layer" msgid "" "Part cooling fan will be enabled for layers of which estimated time is " "shorter than this value. Fan speed is interpolated between the minimum and " "maximum fan speeds according to layer printing time" msgstr "" -"The part cooling fan will be enabled for layers where the estimated time is " -"shorter than this value. Fan speed is interpolated between the minimum and " -"maximum fan speeds according to layer printing time." +"La ventola di raffreddamento parziale verrà attivata per i layers in cui il " +"tempo stimato è inferiore a questo valore. La velocità della ventola viene " +"interpolata tra la velocità minima e massima della ventola in base al tempo " +"di stampa a layer." msgid "s" msgstr "s" msgid "Default color" -msgstr "Default color" +msgstr "Colore predefinito" msgid "Default filament color" -msgstr "Default filament color" +msgstr "Colore predefinito del filamento" msgid "Color" msgstr "Colore" msgid "Required nozzle HRC" -msgstr "Required nozzle HRC" +msgstr "Necessita nozzle HRC" msgid "" "Minimum HRC of nozzle required to print the filament. Zero means no checking " "of nozzle's HRC." msgstr "" -"Minimum HRC of nozzle required to print the filament. A value of 0 means no " -"checking of the nozzle's HRC." +"HRC minimo del nozzle richiesto per stampare il filamento. Un valore pari a " +"0 significa che non viene controllato l'HRC del nozzle." msgid "" "This setting stands for how much volume of filament can be melted and " "extruded per second. Printing speed is limited by max volumetric speed, in " "case of too high and unreasonable speed setting. Can't be zero" msgstr "" -"This setting is the volume of filament that can be melted and extruded per " -"second. Printing speed is limited by max volumetric speed, in case of too " -"high and unreasonable speed setting. This value cannot be zero." +"Questa indica il volume del filamento che può essere fuso ed estruso al " +"secondo. La velocità di stampa è limitata dalla velocità volumetrica " +"massima, in caso di impostazione della velocità troppo alta e irragionevole. " +"Questo valore non può essere zero." msgid "mm³/s" msgstr "mm³/s" @@ -7122,40 +7247,43 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Spurgo minimo sulla torre di pulitura" +msgid "mm³" +msgstr "mm³" + msgid "Filament load time" msgstr "Durata caricamento filamento" msgid "Time to load new filament when switch filament. For statistics only" msgstr "" -"Time to load new filament when switching filament, for statistical purposes " -"only." +"Tempo di caricamento del nuovo filamento quando si cambia filamento, solo a " +"fini statistici." msgid "Filament unload time" msgstr "Durata scaricamento filamento" msgid "Time to unload old filament when switch filament. For statistics only" msgstr "" -"Time to unload old filament when switching filament, for statistical " -"purposes only." +"Tempo di scarico vecchio filamento quando si cambia filamento, solo a fini " +"statistici." msgid "" "Filament diameter is used to calculate extrusion in gcode, so it's important " "and should be accurate" msgstr "" -"Filament diameter is used to calculate extrusion variables in G-code, so it " -"is important that this is accurate and precise." +"Il diametro del filamento viene utilizzato per calcolare le variabili di " +"estrusione nel G-code, quindi è importante che sia accurato e preciso." msgid "Density" msgstr "Densità" msgid "Filament density. For statistics only" -msgstr "Filament density, for statistical purposes only." +msgstr "Densità filamento, solo a fini statistici." msgid "g/cm³" msgstr "g/cm³" msgid "The material type of filament" -msgstr "Filament material type" +msgstr "Tipo di filamento" msgid "Soluble material" msgstr "Materiale solubile" @@ -7163,7 +7291,8 @@ msgstr "Materiale solubile" msgid "" "Soluble material is commonly used to print support and support interface" msgstr "" -"Soluble material is commonly used to print support and support interfaces" +"Il materiale solubile viene comunemente utilizzato per stampare il supporto " +"e l'interfaccia di supporto" msgid "Support material" msgstr "Materiale di supporto" @@ -7171,54 +7300,55 @@ msgstr "Materiale di supporto" msgid "" "Support material is commonly used to print support and support interface" msgstr "" -"Support material is commonly used to print support and support interfaces." +"Il materiale di supporto viene comunemente utilizzato per stampare il " +"supporto e le interfacce di supporto." msgid "Temperature of vitrificaiton" -msgstr "Temperature of vitrification" +msgstr "Temperatura di vetrificazione" msgid "" "Material becomes soft at this temperature. Thus the heatbed cannot be hotter " "than this tempature" msgstr "" -"Material becomes soft at this temperature. Thus, the heat bed cannot be " -"hotter than this temperature." +"Il materiale diventa morbido a questa temperatura. Pertanto, il piano non " +"può essere più caldo di questa temperatura." msgid "Price" -msgstr "Price" +msgstr "Prezzo" msgid "Filament price. For statistics only" -msgstr "Filament price, for statistical purposes only." +msgstr "Prezzo del filamento, solo a fini statistici." msgid "money/kg" -msgstr "soldi/kg" +msgstr "prezzo/kg" msgid "(Undefined)" -msgstr "(Undefined)" +msgstr "(Indefinito)" msgid "Infill direction" -msgstr "Infill direction" +msgstr "Direzione riempimento" msgid "" "Angle for sparse infill pattern, which controls the start or main direction " "of line" msgstr "" -"This is the angle for sparse infill pattern, which controls the start or " -"main direction of lines." +"Questo è l'angolo della trama di riempimento che controlla l'inizio o la " +"direzione principale delle linee." msgid "Sparse infill density" -msgstr "Sparse infill density" +msgstr "Densità riempimento" #, c-format msgid "Density of internal sparse infill, 100% means solid throughout" msgstr "" -"This is the density of internal sparse infill. 100% means that the object " -"will be solid throughout." +"Questa è la densità del riempimento interno. 100%% significa che l'oggetto " +"sarà in ogni sua parte." msgid "Sparse infill pattern" -msgstr "Sparse infill pattern" +msgstr "Trama riempimento" msgid "Line pattern for internal sparse infill" -msgstr "This is the line pattern for internal sparse infill." +msgstr "Questo è la trama lineare per il riempimento interno." msgid "Grid" msgstr "Griglia" @@ -7230,7 +7360,7 @@ msgid "Cubic" msgstr "Cubico" msgid "Tri-hexagon" -msgstr "Tri-hexagon" +msgstr "Tri-esagono" msgid "Gyroid" msgstr "Giroide" @@ -7242,10 +7372,10 @@ msgid "Adaptive Cubic" msgstr "Adattivo Cubico" msgid "3D Honeycomb" -msgstr "3D Honeycomb" +msgstr "Nido d'ape 3D" msgid "Support Cubic" -msgstr "Support Cubic" +msgstr "Supporto cubico" msgid "Lightning" msgstr "Lightning" @@ -7254,21 +7384,24 @@ msgid "" "Acceleration of top surface infill. Using a lower value may improve top " "surface quality" msgstr "" -"This is the acceleration of top surface infill. Using a lower value may " -"improve top surface quality." +"Questa è l'accelerazione del riempimento della superficie superiore. " +"L'utilizzo di un valore inferiore può migliorare la qualità della superficie " +"superiore." msgid "Acceleration of outer wall. Using a lower value can improve quality" -msgstr "Acceleration of outer wall: using a lower value can improve quality." +msgstr "" +"Accelerazione della parete esterna: l'utilizzo di un valore inferiore può " +"migliorare la qualità." msgid "" "Acceleration of initial layer. Using a lower value can improve build plate " "adhensive" msgstr "" -"This is the printing acceleration for the first layer. Using limited " -"acceleration can improve build plate adhesion." +"Questa è l'accelerazione di stampa per il primo layer. L'uso di " +"un'accelerazione limitata può migliorare l'adesione sul piatto." msgid "Line width of initial layer" -msgstr "Line width of first layer" +msgstr "Larghezza linea del primo layer" msgid "Initial layer height" msgstr "Altezza layer iniziale" @@ -7277,24 +7410,26 @@ msgid "" "Height of initial layer. Making initial layer height to be thick slightly " "can improve build plate adhension" msgstr "" -"This is the height of the first layer. Making the first layer height thicker " -"can improve build plate adhesion." +"Questa è l'altezza layer iniziale. L'aumento dell'altezza del primo layer " +"può migliorare l'adesione al piatto" msgid "Speed of initial layer except the solid infill part" msgstr "" -"This is the speed for the first layer except for solid infill sections." +"E' la velocità per il primo layer, tranne che per le sezioni di riempimento " +"solido." msgid "Initial layer infill" -msgstr "First layer infill" +msgstr "Riempimento primo layer" msgid "Speed of solid infill part of initial layer" -msgstr "This is the speed for solid infill parts of the first layer." +msgstr "E' la velocità per le parti di riempimento solido del primo layer." msgid "Initial layer nozzle temperature" -msgstr "First layer nozzle temperature" +msgstr "Temperatura nozzle primo layer" msgid "Nozzle temperature to print initial layer when using this filament" -msgstr "Nozzle temperature for printing the first layer with this filament" +msgstr "" +"Temperatura del nozzle per la stampa del primo layer con questo filamento" msgid "Full fan speed at layer" msgstr "Massima velocità della ventola al layer" @@ -7303,9 +7438,9 @@ msgid "" "Randomly jitter while printing the wall, so that the surface has a rough " "look. This setting controls the fuzzy position" msgstr "" -"This setting makes the toolhead randomly jitter while printing walls so that " -"the surface has a rough textured look. This setting controls the fuzzy " -"position." +"Questa impostazione fa vibrare casualmente la testina dell'utensile durante " +"la stampa su pareti, in modo che la superficie abbia un aspetto ruvido. " +"Questa impostazione controlla la posizione fuzzy Skin." msgid "None" msgstr "Nessuno" @@ -7326,8 +7461,8 @@ msgid "" "The width within which to jitter. It's adversed to be below outer wall line " "width" msgstr "" -"The width of jittering: it’s recommended to keep this lower than the outer " -"wall line width." +"Ampiezza del tremolio: si consiglia di mantenerla inferiore alla larghezza " +"della linea della parete esterna." msgid "Fuzzy skin point distance" msgstr "Distanza punti superficie crespa" @@ -7336,64 +7471,65 @@ msgid "" "The average diatance between the random points introducded on each line " "segment" msgstr "" -"The average distance between the random points introduced on each line " -"segment" +"La distanza media tra i punti casuali introdotti su ogni segmento di linea" msgid "" "Speed of gap infill. Gap usually has irregular line width and should be " "printed more slowly" msgstr "" -"This is the speed for gap infill. Gaps usually have irregular line width and " -"should be printed more slowly." +"E' la velocità per il riempimento del gap. I gap hanno solitamente una " +"larghezza linea irregolare e devono essere stampate più lentamente." msgid "Arc fitting" -msgstr "Arc fitting" +msgstr "Raccordo ad arco" msgid "" "Enable this to get a G-code file which has G2 and G3 moves. And the fitting " "tolerance is same with resolution" msgstr "" -"Enable this to get a G-code file with G2 and G3 moves. The fitting tolerance " -"is the same as the resolution." +"Abilita questa funzione per ottenere un file G-code con gli spostamenti " +"circolari in G2 e G3. La tolleranza di adattamento è la stessa della " +"risoluzione" msgid "Add line number" -msgstr "Add line number" +msgstr "Aggiungi numero di riga" msgid "Enable this to add line number(Nx) at the beginning of each G-Code line" msgstr "" -"Enable this to add line number(Nx) at the beginning of each G-Code line." +"Abilita questa opzione per aggiungere il numero di riga (Nx) all'inizio di " +"ogni riga del G-code" msgid "Scan first layer" -msgstr "Scan first layer" +msgstr "Scansiona Primo layer" msgid "" "Enable this to enable the camera on printer to check the quality of first " "layer" msgstr "" -"Enable this to allow the camera on the printer to check the quality of the " -"first layer." +"Attivare questa opzione per consentire alla fotocamera della stampante di " +"verificare la qualità del primo layer." msgid "Nozzle type" -msgstr "Nozzle type" +msgstr "Tipo di nozzle" msgid "" "The metallic material of nozzle. This determines the abrasive resistance of " "nozzle, and what kind of filament can be printed" msgstr "" -"The metallic material of the nozzle: This determines the abrasive resistance " -"of the nozzle and what kind of filament can be printed." +"Il materiale metallico del nozzle: determina la resistenza all'abrasione del " +"nozzle e il tipo di filamento che può essere stampato." msgid "Undefine" -msgstr "Undefined" +msgstr "Indefinito" msgid "Hardened steel" -msgstr "Hardened steel" +msgstr "Acciaio temprato" msgid "Stainless steel" -msgstr "Stainless steel" +msgstr "Acciaio inox" msgid "Brass" -msgstr "Brass" +msgstr "Ottone" msgid "Nozzle HRC" msgstr "Nozzle HRC" @@ -7402,50 +7538,52 @@ msgid "" "The nozzle's hardness. Zero means no checking for nozzle's hardness during " "slicing." msgstr "" -"The nozzle's hardness. Zero means no checking for nozzle hardness during " +"Durezza nozzle. Zero significa che non è necessario controllarla durante lo " "slicing." msgid "HRC" msgstr "HRC" msgid "Enable this option if machine has auxiliary part cooling fan" -msgstr "Enable this option if the machine has an auxiliary part cooling fan" +msgstr "" +"Abilitare questa opzione se la stampante dispone di una ventola di " +"raffreddamento ausiliaria per gli oggetti" msgid "G-code flavor" msgstr "Formato G-code" msgid "What kind of gcode the printer is compatible with" -msgstr "What kind of G-code the printer is compatible with." +msgstr "Con che tipo di G-code è compatibile la stampante." msgid "Infill combination" -msgstr "Infill combination" +msgstr "Combinazione riempimento" msgid "" "Automatically Combine sparse infill of several layers to print together to " "reduce time. Wall is still printed with original layer height." msgstr "" -"Automatically combine sparse infill of several layers to print together in " -"order to reduce time. Walls are still printed with original layer height." +"Combina automaticamente il riempimento di più layer per ridurre i tempi. Le " +"pareti vengono comunque stampate con l'altezza originale del layer" msgid "Filament to print internal sparse infill." -msgstr "This is the filament for printing internal sparse infill." +msgstr "Questo è il filamento per la stampa del riempimento interno." msgid "Line width of internal sparse infill" -msgstr "Line width of internal sparse infill" +msgstr "Larghezza linea del riempimento interno" msgid "Infill/Wall overlap" -msgstr "Infill/wall overlap" +msgstr "Sovrapposizione riempimento/parete" msgid "" "Infill area is enlarged slightly to overlap with wall for better bonding. " "The percentage value is relative to line width of sparse infill" msgstr "" -"This allows the infill area to be enlarged slightly to overlap with walls " -"for better bonding. The percentage value is relative to line width of sparse " -"infill." +"Ciò consente di allargare leggermente l'area di riempimento per sovrapporla " +"alle pareti per una migliore adesione. Il valore percentuale è relativo alla " +"larghezza della linea del riempimento." msgid "Speed of internal sparse infill" -msgstr "This is the speed for internal sparse infill." +msgstr "E' la velocità del riempimento interno." msgid "Ironing Type" msgstr "Tipo di stiratura" @@ -7454,93 +7592,95 @@ msgid "" "Ironing is using small flow to print on same height of surface again to make " "flat surface more smooth. This setting controls which layer being ironed" msgstr "" -"Ironing uses a small flow to print at the same height of a surface to make " -"flat surfaces smoother. This setting controls which layers are being ironed." +"La stiratura utilizza un flusso ridotto per stampare alla stessa altezza di " +"una superficie per rendere le superfici piane più lisce. Questa impostazione " +"controlla quali layer vengono stirati." msgid "No ironing" -msgstr "No ironing" +msgstr "Non stirare" msgid "Top surfaces" -msgstr "All top surfaces" +msgstr "Tutte le superfici superiori" msgid "Topmost surface" -msgstr "Topmost surface only" +msgstr "Superficie superiore più alta" msgid "All solid layer" -msgstr "All solid layers" +msgstr "Tutti i layers solidi" msgid "Ironing flow" -msgstr "Ironing flow" +msgstr "Flusso stiratura" msgid "" "The amount of material to extrude during ironing. Relative to flow of normal " "layer height. Too high value results in overextrusion on the surface" msgstr "" -"This is the amount of material to be extruded during ironing. It is relative " -"to the flow of normal layer height. Too high a value will result in " -"overextrusion on the surface." +"È la quantità di materiale da estrudere durante la stiratura. È relativo al " +"flusso dell'altezza normale del layer. Un valore troppo alto provoca una " +"sovraestrusione sulla superficie." msgid "Ironing line spacing" -msgstr "Ironing line spacing" +msgstr "Spaziatura linee di stiratura" msgid "The distance between the lines of ironing" -msgstr "This is the distance between the lines used for ironing." +msgstr "È la distanza tra le linee utilizzate per la stiratura." msgid "Ironing speed" -msgstr "Ironing speed" +msgstr "Velocità stiratura" msgid "Print speed of ironing lines" -msgstr "This is the print speed for ironing lines." +msgstr "È la velocità di stampa per le linee di stiratura." msgid "This gcode part is inserted at every layer change after lift z" -msgstr "This G-code is inserted at every layer change after the z lift." +msgstr "" +"Questo G-code viene inserito a ogni cambio di layer dopo l'elevazione z." msgid "Supports silent mode" -msgstr "Silent Mode" +msgstr "Modalità silenziosa" msgid "" "Whether the machine supports silent mode in which machine use lower " "acceleration to print" msgstr "" -"Whether the machine supports silent mode in which machine uses lower " -"acceleration to print more quietly" +"Se la macchina supporta la modalità silenziosa, in cui la macchina utilizza " +"un'accelerazione inferiore per stampare in modo più silenzioso" msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" msgstr "" -"This G-code will be used as a code for the pause print. Users can insert " -"pause G-code in the G-code viewer." +"Questo G-code verrà utilizzato come codice pausa stampa. Gli utenti possono " +"inserire il G-code di pausa nel visualizzatore G-code." msgid "This G-code will be used as a custom code" -msgstr "This G-code will be used as a custom code" +msgstr "Questo G-code verrà utilizzato come codice personalizzato" msgid "Maximum speed X" -msgstr "Maximum speed X" +msgstr "Velocità massima X" msgid "Maximum speed Y" -msgstr "Maximum speed Y" +msgstr "Velocità massima Y" msgid "Maximum speed Z" -msgstr "Maximum speed Z" +msgstr "Velocità massima Z" msgid "Maximum speed E" -msgstr "Maximum speed E" +msgstr "Velocità massima E" msgid "Machine limits" msgstr "Limiti macchina" msgid "Maximum X speed" -msgstr "Maximum X speed" +msgstr "Velocità massima X" msgid "Maximum Y speed" -msgstr "Maximum Y speed" +msgstr "Velocità massima Y" msgid "Maximum Z speed" -msgstr "Maximum Z speed" +msgstr "Velocità massima Z" msgid "Maximum E speed" -msgstr "Maximum E speed" +msgstr "Velocità massima E" msgid "Maximum acceleration X" msgstr "Accelerazione massima X" @@ -7591,34 +7731,34 @@ msgid "Maximum jerk of the E axis" msgstr "Jerk massimo dell'asse E" msgid "Minimum speed for extruding" -msgstr "Minimum speed for extruding" +msgstr "Velocità minima di estrusione" msgid "Minimum speed for extruding (M205 S)" -msgstr "Minimum speed for extruding (M205 S)" +msgstr "Velocità minima di estrusione (M205 S)" msgid "Minimum travel speed" -msgstr "Minimum travel speed" +msgstr "Velocità di spostamento minima" msgid "Minimum travel speed (M205 T)" -msgstr "Minimum travel speed (M205 T)" +msgstr "Velocità di spostamento minima (M205 T)" msgid "Maximum acceleration for extruding" -msgstr "Maximum acceleration for extruding" +msgstr "Accelerazione massima per l'estrusione" msgid "Maximum acceleration for extruding (M204 P)" -msgstr "Maximum acceleration for extruding (M204 P)" +msgstr "Accelerazione massima per l'estrusione (M204 P)" msgid "Maximum acceleration for retracting" -msgstr "Maximum acceleration for retracting" +msgstr "Accelerazione massima per la retrazione" msgid "Maximum acceleration for retracting (M204 R)" -msgstr "Maximum acceleration for retracting (M204 R)" +msgstr "Accelerazione massima per retrazione (M204 R)" msgid "Maximum acceleration for travel" -msgstr "Maximum acceleration for travel" +msgstr "Accelerazione massima per spostamenti" msgid "Maximum acceleration for travel (M204 T)" -msgstr "Maximum acceleration for travel (M204 T)" +msgstr "Accelerazione massima per spostamenti (M204 T)" msgid "Fan speed" msgstr "Velocità ventola" @@ -7627,8 +7767,9 @@ msgid "" "Part cooling fan speed may be increased when auto cooling is enabled. This " "is the maximum speed limitation of part cooling fan" msgstr "" -"The part cooling fan speed may be increased when auto cooling is enabled. " -"This is the maximum speed for the part cooling fan." +"La velocità della ventola di raffreddamento può essere aumentata quando è " +"abilitato il raffreddamento automatico. Questa è la limitazione massima " +"della velocità della ventola di raffreddamento parziale" msgid "Max" msgstr "Massimo" @@ -7637,20 +7778,20 @@ msgid "" "The largest printable layer height for extruder. Used tp limits the maximum " "layer hight when enable adaptive layer height" msgstr "" -"The highest printable layer height for the extruder: this is used to limit " -"the maximum layer height when adaptive layer height is enabled." +"L'altezza massima del layer stampabile per l'estrusore: viene utilizzata per " +"limitare l'altezza massima del layer quando è abilitato il layer adattativo." msgid "Minimum speed for part cooling fan" -msgstr "Minimum speed for part cooling fan" +msgstr "Velocità minima ventola di raffreddamento" msgid "" "Speed of auxiliary part cooling fan. Auxiliary fan will run at this speed " "during printing except the first several layers which is defined by no " "cooling layers" msgstr "" -"This is the speed of auxiliary part cooling fan. The auxiliary fan will run " -"at this speed during printing except for during the first several layers " -"which may be set to have no part cooling." +"Velocità ventola ausiliaria raffreddamento oggetto. La ventola ausiliaria " +"funzionerà a questa velocità durante la stampa, ad eccezione dei primi " +"layers, che possono essere impostati per non avere raffreddamento dei pezzi." msgid "Min" msgstr "Minimo" @@ -7659,84 +7800,88 @@ msgid "" "The lowest printable layer height for extruder. Used tp limits the minimum " "layer hight when enable adaptive layer height" msgstr "" -"The lowest printable layer height for the extruder. This is used to limit " -"the minimum layer height when adaptive layer height is enabled." +"L'altezza minima del layer stampabile per l'estrusore. Viene utilizzata per " +"limitare l'altezza minima del layer quando è abilito il layer adattativo." msgid "Min print speed" msgstr "Velocità minima di stampa" msgid "The minimum printing speed when slow down for cooling" -msgstr "The minimum printing speed when slowing down for cooling." +msgstr "La velocità di stampa minima quando si rallenta per il raffreddamento." msgid "Nozzle diameter" msgstr "Diametro ugello" msgid "Diameter of nozzle" -msgstr "The diameter of the nozzle" +msgstr "Diametro del nozzle" msgid "Host Type" -msgstr "Host Type" +msgstr "Tipo host" msgid "" "Slic3r can upload G-code files to a printer host. This field must contain " "the kind of the host." msgstr "" -"Slic3r can upload G-code files to a printer host. This field must contain " -"the kind of the host." +"Slic3r può caricare file G-code su un host di stampa. Questo campo deve " +"contenere il tipo di host." msgid "Nozzle volume" -msgstr "Nozzle volume" +msgstr "Volume del nozzle" msgid "Volume of nozzle between the cutter and the end of nozzle" -msgstr "Volume of nozzle between the filament cutter and the end of the nozzle" +msgstr "Volume del nozzle tra taglierina ed estremità nozzle" msgid "Start end points" -msgstr "Start end points" +msgstr "Punti iniziali e finali" msgid "The start and end points which is from cutter area to garbage can." msgstr "" -"The start and end points which are from the cutter area to the excess chute." +"I punti di partenza e arrivo che si trovano dall'area del taglio allo " +"scarico." msgid "Reduce infill retraction" -msgstr "Reduce infill retraction" +msgstr "Riduce la retrazione del riempimento" msgid "" "Don't retract when the travel is in infill area absolutely. That means the " "oozing can't been seen. This can reduce times of retraction for complex " "model and save printing time, but make slicing and G-code generating slower" msgstr "" -"Don't retract when the travel is entirely in an infill area. That means the " -"oozing can't been seen. This can reduce times of retraction for complex " -"model and save printing time, but make slicing and G-code generation slower." +"Non ritrarre quando gli spostamenti si trovano interamente ad un'area di " +"riempimento. Ciò significa che il gocciolamento non verrà visto. Questo può " +"ridurre i tempi di ritrazione per i modelli complessi e far risparmiare " +"tempo di stampa, ma rende lo slicing e la generazione del G-code più lento." msgid "Enable" msgstr "Abilita" msgid "Filename format" -msgstr "Filename format" +msgstr "Formato nome file" msgid "User can self-define the project file name when export" -msgstr "Users can decide project file names when exporting." +msgstr "" +"Gli utenti possono decidere i nomi dei file progetto nell'esportazione." msgid "Detect overhang wall" -msgstr "Detect overhang walls" +msgstr "Rileva parete a sbalzo" #, c-format, boost-format msgid "" "Detect the overhang percentage relative to line width and use different " "speed to print. For 100%% overhang, bridge speed is used." msgstr "" -"This detects the overhang percentage relative to line width and uses a " -"different speed to print. For 100%% overhang, bridging speed is used." +"Questo rileva la percentuale di sporgenza rispetto alla larghezza della " +"linea e utilizza una velocità di stampa diversa. Per una sporgenza del " +"100%%, viene utilizzata la velocità dei ponti." msgid "Line width of inner wall" -msgstr "Line width of inner walls" +msgstr "Larghezza linea delle pareti interne" msgid "Speed of inner wall" -msgstr "This is the speed for inner walls." +msgstr "E' la velocità per le pareti interne." msgid "Number of walls of every layer" -msgstr "This is the number of walls per layer." +msgstr "Questo è il numero di pareti per layer." msgid "Post-processing Scripts" msgstr "" @@ -7753,26 +7898,27 @@ msgstr "Distanza di contatto Z Raft" msgid "Z gap between object and raft. Ignored for soluble interface" msgstr "" -"This is the Z gap between an object and a raft. It is ignored for soluble " -"interfaces." +"È lo spazio Z tra oggetto e raft. Viene ignorato per le interfacce solubili." msgid "Raft expansion" msgstr "Espansione del raft" msgid "Expand all raft layers in XY plane" -msgstr "This expands all raft layers in XY plane." +msgstr "Questo espande tutti i layers del raft nel piano XY." msgid "Initial layer density" -msgstr "First layer density" +msgstr "Densità primo layer" msgid "Density of the first raft or support layer" -msgstr "This is the density of the first raft or support layer." +msgstr "Questa è la densità del raft o del layer di supporto." msgid "Initial layer expansion" -msgstr "First layer expansion" +msgstr "Espansione primo layer" msgid "Expand the first raft or support layer to improve bed plate adhesion" -msgstr "This expands the first raft or support layer to improve bed adhesion." +msgstr "" +"Questo espande il primo raft o layer di supporto per migliorare l'adesione " +"al piatto." msgid "Raft layers" msgstr "Layer raft" @@ -7781,27 +7927,28 @@ msgid "" "Object will be raised by this number of support layers. Use this function to " "avoid wrapping when print ABS" msgstr "" -"Object will be raised by this number of support layers. Use this function to " -"avoid warping when printing ABS." +"L'oggetto verrà sollevato da questo numero di layer di supporto. Utilizzare " +"questa funzione per evitare deformazioni durante la stampa di ABS." msgid "" "G-code path is genereated after simplifing the contour of model to avoid too " "much points and gcode lines in gcode file. Smaller value means higher " "resolution and more time to slice" msgstr "" -"The G-code path is generated after simplifying the contour of models to " -"avoid too many points and G-code lines. Smaller values mean higher " -"resolution and more time required to slice." +"Il percorso del G-code viene generato dopo aver semplificato il contorno del " +"modello per evitare molti punti e linee nel file G-code.\n" +"Un valore più piccolo significa una risoluzione più elevata e un tempo " +"maggiore per l'elaborazione" msgid "Travel distance threshold" -msgstr "Travel distance threshold" +msgstr "Soglia distanza di spostamento" msgid "" "Only trigger retraction when the travel distance is longer than this " "threshold" msgstr "" -"Only trigger retraction when the travel distance is longer than this " -"threshold." +"L'attivazione della retrazione avviene solo quando la distanza percorsa è " +"superiore a questa soglia." msgid "Retract amount before wipe" msgstr "Retrai la quantità prima di pulire" @@ -7809,14 +7956,14 @@ msgstr "Retrai la quantità prima di pulire" msgid "" "The length of fast retraction before wipe, relative to retraction length" msgstr "" -"This is the length of fast retraction before a wipe, relative to retraction " -"length." +"È la lunghezza della retrazione rapida prima di una pulizia, rispetto alla " +"lunghezza di retrazione." msgid "Retract when change layer" -msgstr "Retract on layer change" +msgstr "Ritrai al cambio layer" msgid "Force a retraction when changes layer" -msgstr "This forces a retraction on layer changes." +msgstr "Questo forza una retrazione nei cambi layer." msgid "Length" msgstr "Lunghezza" @@ -7828,36 +7975,37 @@ msgid "" "Some amount of material in extruder is pulled back to avoid ooze during long " "travel. Set zero to disable retraction" msgstr "" -"This is the amount of filament in the extruder that is pulled back to avoid " -"oozing during long travel distances. Set to 0 to disable retraction." +"È la quantità filamento nell'estrusore che viene ritirata per evitare la " +"trasudazione durante le lunghe distanze. Imposta su 0 per disattivare la " +"retrazione." msgid "Z hop when retract" -msgstr "Z hop when retracting" +msgstr "Z hop in fase retrazione" msgid "" "Whenever the retraction is done, the nozzle is lifted a little to create " "clearance between nozzle and the print. It prevents nozzle from hitting the " "print when travel move. Using spiral line to lift z can prevent stringing" msgstr "" -"Whenever there is a retraction, the nozzle is lifted a little to create " -"clearance between the nozzle and the print. This prevents the nozzle from " -"hitting the print when traveling more. Using spiral lines to lift z can " -"prevent stringing." +"Ogni volta che si verifica una retrazione, il nozzle viene sollevato " +"leggermente per creare spazio tra nozzle e stampa. Ciò impedisce al nozzle " +"di colpire la stampa quando si viaggia di più. L'uso di linee a spirale per " +"sollevare z può evitare che si stringano." msgid "Z Hop Type" -msgstr "Z Hop Type" +msgstr "Tipo Z Hop" msgid "Slope" -msgstr "Slope" +msgstr "Pendenza" msgid "Spiral" -msgstr "Spiral" +msgstr "Spirale" msgid "Retraction Speed" msgstr "Velocità di retrazione" msgid "Speed of retractions" -msgstr "This is the speed for retraction." +msgstr "E' la velocità di retrazione." msgid "Deretraction Speed" msgstr "Velocità di deretrazione" @@ -7866,14 +8014,14 @@ msgid "" "Speed for reloading filament into extruder. Zero means same speed with " "retraction" msgstr "" -"The speed for reloading filament into the extruder after a retraction; " -"setting this to 0 means that it will be the same speed as the retraction." +"La velocità di ricarica filamento nell'estrusore dopo una retrazione; " +"impostando 0, la velocità sarà la stessa della retrazione." msgid "Seam position" msgstr "Posizione giunzione" msgid "The start position to print each part of outer wall" -msgstr "This is the starting position for each part of the outer wall." +msgstr "E' la posizione di partenza per ogni parte della parete esterna." msgid "Nearest" msgstr "Più vicino" @@ -7882,16 +8030,16 @@ msgid "Aligned" msgstr "Allineato" msgid "Back" -msgstr "Back" +msgstr "Indietro" msgid "Random" -msgstr "Random" +msgstr "Casuale" msgid "Skirt distance" -msgstr "Skirt distance" +msgstr "Distanza Skirt" msgid "Distance from skirt to brim or object" -msgstr "This is the distance from the skirt to the brim or the object." +msgstr "Questa è la distanza dallo skirt al brim o all'oggetto." msgid "Skirt height" msgstr "" @@ -7900,52 +8048,52 @@ msgid "How many layers of skirt. Usually only one layer" msgstr "" msgid "Skirt loops" -msgstr "Skirt loops" +msgstr "Anelli di skirt" msgid "Number of loops for the skirt. Zero means disabling skirt" msgstr "" -"This is the number of loops for the skirt. 0 means the skirt is disabled." +"Questo è il numero di loop per lo skirt. 0 indica che lo skirt è disattivata." msgid "" "The printing speed in exported gcode will be slowed down, when the estimated " "layer time is shorter than this value, to get better cooling for these layers" msgstr "" -"The printing speed in exported G-code will be slowed down when the estimated " -"layer time is shorter than this value in order to get better cooling for " -"these layers." +"La velocità di stampa nel G-code esportato verrà rallentata quando il tempo " +"stimato del layer è inferiore a questo valore per ottenere un migliore " +"raffreddamento per questi layers." msgid "Minimum sparse infill threshold" -msgstr "Minimum sparse infill threshold" +msgstr "Soglia minima riempimento" msgid "" "Sparse infill area which is smaller than threshold value is replaced by " "internal solid infill" msgstr "" -"Sparse infill areas which are smaller than this threshold value are replaced " -"by internal solid infill." +"L'area riempimento che è inferiore al valore di soglia viene sostituita da " +"un riempimento solido interno." msgid "mm²" msgstr "mm²" msgid "Line width of internal solid infill" -msgstr "Line width of internal solid infill" +msgstr "Larghezza linea del riempimento solido interno" msgid "Speed of internal solid infill, not the top and bottom surface" msgstr "" -"This is the speed for internal solid infill, not including the top or bottom " -"surface." +"E' la velocità del riempimento solido interno, esclusa la superficie " +"superiore o inferiore." msgid "Spiral vase" -msgstr "Spiral vase" +msgstr "Vaso a spirale" msgid "" "Spiralize smooths out the z moves of the outer contour. And turns a solid " "model into a single walled print with solid bottom layers. The final " "generated model has no seam" msgstr "" -"This enables spiraling, which smooths out the Z moves of the outer contour " -"and turns a solid model into a single walled print with solid bottom layers. " -"The final generated model has no seam." +"Consente la stampa a spirale, che attenua i movimenti Z del contorno esterno " +"e trasforma un modello solido in una stampa a parete singola con layers " +"inferiori solidi. Il modello finale generato non presenta alcuna giunzione." msgid "" "If smooth or traditional mode is selected, a timelapse video will be " @@ -7957,17 +8105,17 @@ msgid "" "process of taking a snapshot, prime tower is required for smooth mode to " "wipe nozzle." msgstr "" -"If smooth or traditional mode is selected, a timelapse video will be " -"generated for each print. After each layer is printed, a snapshot is taken " -"with the chamber camera. All of these snapshots are composed into a " -"timelapse video when printing completes. If smooth mode is selected, the " -"toolhead will move to the excess chute after each layer is printed and then " -"take a snapshot. Since the melt filament may leak from the nozzle during the " -"process of taking a snapshot, a prime tower is required for smooth mode to " -"wipe the nozzle." +"Se si seleziona la modalità \"Smooth\" o \"Tradizionale\", per ogni stampa " +"viene generato un video in timelapse. Dopo la stampa di ogni layer, viene " +"scattata una foto.Tutte queste foto verranno unite per creare un video " +"timelapse al termine della stampa. Se si seleziona \"Smooth\", la testa di " +"stampa si sposta sullo scivolo di spurgo posteriore dopo la stampa di ogni " +"layer e poi scatta una foto. Poiché il filamento può fuoriuscire dal nozzle " +"durante il processo di acquisizione della foto, la modalità \"Smooth\" ha " +"bisogno che venga utilizzata la prime tower per pulire il nozzle." msgid "Traditional" -msgstr "Traditional" +msgstr "Tradizionale" msgid "Temperature variation" msgstr "Variazione di temperatura" @@ -7976,71 +8124,73 @@ msgid "Start G-code" msgstr "G-code iniziale" msgid "Start G-code when start the whole printing" -msgstr "G-code added when starting a print" +msgstr "G-code aggiunto all'avvio di una stampa" msgid "Start G-code when start the printing of this filament" -msgstr "G-code added when the printer starts using this filament" +msgstr "G-code aggiunto quando la stampante utilizza questo filamento" msgid "Slice gap closing radius" -msgstr "Slice gap closing radius" +msgstr "Raggio chiusura del gap" msgid "" "Cracks smaller than 2x gap closing radius are being filled during the " "triangle mesh slicing. The gap closing operation may reduce the final print " "resolution, therefore it is advisable to keep the value reasonably low." msgstr "" -"Cracks smaller than 2x gap closing radius are being filled during the " -"triangle mesh slicing. The gap closing operation may reduce the final print " -"resolution, therefore it is advisable to keep the value reasonably low." +"Le fessure più piccole di 2X del gap vengono riempite durante lo slicing " +"della mesh del triangolo.\n" +"L'operazione di chiusura della fessura può ridurre la risoluzione di stampa " +"finale.\n" +"Si consiglia di mantenere un valore ragionevolmente basso." msgid "Slicing Mode" -msgstr "Slicing Mode" +msgstr "Modalità slicing" msgid "" "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to " "close all holes in the model." msgstr "" -"Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to " -"close all holes in the model." +"Usa \"Pari-dispari\" per modelli di aeroplano 3DLabPrint. Utilizza \"Chiudi " +"fori\" per chiudere tutti i fori del modello." msgid "Regular" -msgstr "Regular" +msgstr "Regolare" msgid "Even-odd" -msgstr "Even-odd" +msgstr "Pari-dispari" msgid "Close holes" -msgstr "Close holes" +msgstr "Chiudi fori" msgid "Enable support" -msgstr "Enable support" +msgstr "Abilita supporti" msgid "Enable support generation." -msgstr "This enables support generation." +msgstr "Abilita la generazione dei supporti." msgid "" "normal(auto) and tree(auto) is used to generate support automatically. If " "normal(manual) or tree(manual) is selected, only support enforcers are " "generated" msgstr "" -"normal(auto) and tree(auto) are used to generate support automatically. If " -"normal(manual) or tree(manual) is selected, only support enforcers are " -"generated" +"normale(auto) e albero(auto) sono usati per generare automaticamente i " +"supporti. Se si seleziona normale(manuale) o albero(manuale), vengono " +"generati solo gli esecutori del supporto." msgid "normal(auto)" -msgstr "normal(auto)" +msgstr "normale(auto)" msgid "tree(auto)" -msgstr "tree(auto)" +msgstr "albero(auto)" msgid "normal(manual)" -msgstr "normal(manual)" +msgstr "normale(manuale)" msgid "tree(manual)" -msgstr "tree(manual)" +msgstr "albero(manuale)" msgid "Support/object xy distance" -msgstr "Support/object xy distance" +msgstr "Distanza in xy supporto/oggetto" msgid "XY separation between an object and its support" msgstr "Separazione XY tra un oggetto e il suo supporto" @@ -8049,36 +8199,36 @@ msgid "Pattern angle" msgstr "Angolo trama" msgid "Use this setting to rotate the support pattern on the horizontal plane." -msgstr "" -"Use this setting to rotate the support pattern on the horizontal plane." +msgstr "Usa questo per ruotare sul piano orizzontale la trama del supporto." msgid "On build plate only" -msgstr "On build plate only" +msgstr "Solo dal piatto" msgid "Don't create support on model surface, only on build plate" -msgstr "This setting only generates supports that begin on the build plate." +msgstr "Questa impostazione genera solo i supporti che poggiano sul piatto." msgid "Support critical regions only" -msgstr "Support critical regions only" +msgstr "Supporta solo aree critiche" msgid "" "Only create support for critical regions including sharp tail, cantilever, " "etc." msgstr "" -"Only create support for critical regions including sharp tail, cantilever, " -"etc." +"Creare il supporto solo per le regioni critiche, tra cui una estremità " +"tagliente, sbalzo, ecc." msgid "Top Z distance" -msgstr "Top Z distance" +msgstr "Distanza Z superiore" msgid "The z gap between the top support interface and object" -msgstr "This determines the Z gap between top support interfaces and objects." +msgstr "" +"Determina lo spazio Z gap tra le interfacce supporto superiori e gli oggetti." msgid "Bottom Z distance" -msgstr "Bottom Z distance" +msgstr "Distanza Z inferiore" msgid "The z gap between the bottom support interface and object" -msgstr "The z gap between the bottom support interface and object" +msgstr "Lo spazio z gap tra l'interfaccia supporto inferiore e l'oggetto" msgid "Support/raft base" msgstr "" @@ -8087,20 +8237,21 @@ msgid "" "Filament to print support base and raft. \"Default\" means no specific " "filament for support and current filament is used" msgstr "" -"Filament to print support bases and rafts. \"Default\" means no specific " -"filament for support, and current filament is used" +"Filamento per stampare basi di supporto e raft. \"Predefinito\" indica che " +"non viene utilizzato alcun filamento specifico per il supporto e viene " +"utilizzato il filamento corrente" msgid "Line width of support" -msgstr "Line width of support" +msgstr "Larghezza linea di supporto" msgid "Interface use loop pattern" -msgstr "Loop pattern interface" +msgstr "Trama loop interfaccia" msgid "" "Cover the top contact layer of the supports with loops. Disabled by default." msgstr "" -"Copre con anelli il layer superiore del supporto a contatto. Disattivato per " -"impostazione predefinita." +"Questo copre i layer superiori di contatto dei supporti con degli anelli. " +"Disabilitato per impostazione predefinita." msgid "Support/raft interface" msgstr "" @@ -8109,45 +8260,45 @@ msgid "" "Filament to print support interface. \"Default\" means no specific filament " "for support interface and current filament is used" msgstr "" -"Filament to print support interfaces. \"Default\" means no specific filament " -"for support interface, and current filament is used" +"Filamento per la stampa delle interfacce di supporto. \"Predefinito\" " +"significa che non esiste un filamento specifico per l'interfaccia di " +"supporto e che verrà utilizzato il filamento corrente." msgid "Top interface layers" msgstr "Layer superiori di interfaccia " msgid "Number of top interface layers" -msgstr "This is the number of top interface layers." +msgstr "È il numero di layer di interfaccia superiore." msgid "Bottom interface layers" msgstr "Layer inferiori di interfaccia " msgid "Top interface spacing" -msgstr "Top interface spacing" +msgstr "Spaziatura interfaccia superiore" msgid "Spacing of interface lines. Zero means solid interface" -msgstr "This is the spacing of interface lines. 0 means solid interface." +msgstr "Spaziatura linee interfaccia. 0 significa interfaccia solida" msgid "Bottom interface spacing" -msgstr "Bottom interface spacing" +msgstr "Spaziatura inferiore interfaccia" msgid "Spacing of bottom interface lines. Zero means solid interface" -msgstr "" -"This is the spacing of bottom interface lines. 0 means solid interface." +msgstr "Spaziatura linee interfaccia di fondo. 0 significa interfaccia solida" msgid "Speed of support interface" -msgstr "This is the speed for support interfaces." +msgstr "E' la velocità per le interfacce di supporto." msgid "Base pattern" -msgstr "Base pattern" +msgstr "Trama base" msgid "Line pattern of support" -msgstr "This is the line pattern for support." +msgstr "Questo è la trama lineare del supporto." msgid "Rectilinear grid" msgstr "Griglia rettilinea" msgid "Hollow" -msgstr "Hollow" +msgstr "Svuota" msgid "Interface pattern" msgstr "Trama interfaccia" @@ -8157,27 +8308,28 @@ msgid "" "interface is Rectilinear, while default pattern for soluble support " "interface is Concentric" msgstr "" -"This is the line pattern for support interfaces. The default pattern for non-" -"soluble support interfaces is Rectilinear while the default pattern for " -"soluble support interfaces is Concentric." +"Questo è la Trama lineare per le interfacce di supporto. Il modello " +"predefinito per le interfacce di supporto non solubili è rettilineo mentre " +"il modello predefinito per le interfacce di supporto solubili è concentrico." msgid "Rectilinear Interlaced" msgstr "" msgid "Base pattern spacing" -msgstr "Base pattern spacing" +msgstr "Spazio trama base" msgid "Spacing between support lines" -msgstr "This determines the spacing between support lines." +msgstr "Questo determina la spaziatura tra le linee di supporto." msgid "Normal Support expansion" -msgstr "Normal support expansion" +msgstr "Espansione normale dei supporti" msgid "Expand (+) or shrink (-) the horizontal span of normal support" -msgstr "Expand (+) or shrink (-) the horizontal span of normal support" +msgstr "" +"Espandere (+) o restringere (-) la portata orizzontale del supporto normale" msgid "Speed of support" -msgstr "This is the speed for support." +msgstr "E' la velocità del supporto." msgid "" "Style and shape of the support. For normal support, projecting the supports " @@ -8187,27 +8339,29 @@ msgid "" "a lot of material (default), while hybrid style will create similar " "structure to normal support under large flat overhangs." msgstr "" -"Style and shape of the support. For normal support, projecting the supports " -"into a regular grid will create more stable supports (default), while snug " -"support towers will save material and reduce object scarring.\n" -"For tree support, slim style will merge branches more aggressively and save " -"a lot of material (default), while hybrid style will create similar " -"structure to normal support under large flat overhangs." +"Stile e forma del supporto. Per supporti normali, la proiezione dei supporti " +"in una griglia regolare creerà supporti più stabili (impostazione " +"predefinita), mentre le torri di supporto aderenti faranno risparmiare " +"materiale e ridurranno le giunzioni oggetto.\n" +"Per i supporti ad albero, lo stile slim unirà i rami in modo più aggressivo " +"e risparmierà molto materiale (impostazione predefinita), mentre lo stile " +"ibrido creerà una struttura simile a quella dei sostegni normali sotto " +"grandi sporgenze piatte." msgid "Snug" msgstr "Aderenti" msgid "Tree Slim" -msgstr "Tree Slim" +msgstr "Albero Slim" msgid "Tree Strong" -msgstr "Tree Strong" +msgstr "Albero Strong" msgid "Tree Hybrid" -msgstr "Tree Hybrid" +msgstr "Albero ibrido" msgid "Independent support layer height" -msgstr "Independent support layer height" +msgstr "Altezza layer di supporto indipendente" msgid "" "Support layer uses layer height independent with object layer. This is to " @@ -8216,102 +8370,106 @@ msgid "" msgstr "" msgid "Threshold angle" -msgstr "Threshold angle" +msgstr "Angolo di soglia" msgid "" "Support will be generated for overhangs whose slope angle is below the " "threshold." msgstr "" -"Support will be generated for overhangs whose slope angle is below this " -"threshold." +"Il supporto sarà generato per le sporgenze il cui angolo di inclinazione è " +"inferiore alla soglia." msgid "Tree support branch angle" -msgstr "Tree support branch angle" +msgstr "Angolo ramo supporti ad albero" msgid "" "This setting determines the maximum overhang angle that t he branches of " "tree support allowed to make.If the angle is increased, the branches can be " "printed more horizontally, allowing them to reach farther." msgstr "" -"This setting determines the maximum overhang angle that the branches of tree " -"support are allowed to make. If the angle is increased, the branches can be " -"printed more horizontally, allowing them to reach farther." +"Questa determina l'angolo massimo di sporgenza che i rami del supporto ad " +"albero possono raggiungere. Se l'angolo viene aumentato, i rami possono " +"essere stampati più orizzontalmente, permettendo loro di arrivare più " +"lontano." msgid "Tree support branch distance" -msgstr "Tree support branch distance" +msgstr "Distanza ramo supporti ad albero" msgid "" "This setting determines the distance between neighboring tree support nodes." msgstr "" -"This setting determines the distance between neighboring tree support nodes." +"Questa determina la distanza tra i nodi di supporto dell'albero vicini." msgid "Tree support branch diameter" -msgstr "Tree support branch diameter" +msgstr "Diametro ramo supporti ad albero" msgid "This setting determines the initial diameter of support nodes." -msgstr "This setting determines the initial diameter of support nodes." +msgstr "Questa determina il diametro iniziale dei nodi di supporto." msgid "Tree support wall loops" -msgstr "Tree support wall loops" +msgstr "Anello parete supporti ad albero" msgid "This setting specify the count of walls around tree support" -msgstr "This setting specifies the wall count around tree support." +msgstr "Questa specifica il numero di pareti attorno al supporto ad albero." msgid "Nozzle temperature for layers after the initial one" -msgstr "Nozzle temperature after the first layer" +msgstr "Temperatura del nozzle dopo il primo layer" msgid "Bed temperature difference" -msgstr "Bed temperature difference" +msgstr "Differenza di temperatura del piano" msgid "" "Do not recommend bed temperature of other layer to be lower than initial " "layer for more than this threshold. Too low bed temperature of other layer " "may cause the model broken free from build plate" msgstr "" -"It is not recommend for bed temperature of other layers to be lower than the " -"first layer by more than this threshold. Too low bed temperature of other " -"layer may cause the model to break free from the build plate." +"Non è consigliabile che la temperatura del piano degli altri layer sia " +"inferiore a quella del primo layer di oltre questa soglia. Una temperatura " +"del piano troppo bassa degli altri layer può causare il distacco " +"dell'oggetto dal piatto." msgid "Detect thin wall" -msgstr "Detect thin walls" +msgstr "Rileva pareti sottili" msgid "" "Detect thin wall which can't contain two line width. And use single line to " "print. Maybe printed not very well, because it's not closed loop" msgstr "" -"This detects thin walls which can’t contain two lines and uses a single line " -"to print. It may not print as well because it’s not a closed loop." +"Questo rileva pareti sottili che non possono contenere due righe e utilizza " +"una sola riga per la stampa. Potrebbe non essere stampato altrettanto bene " +"perché non è un circuito chiuso." msgid "" "This gcode is inserted when change filament, including T command to trigger " "tool change" msgstr "" -"This G-code is inserted when filament is changed, including T commands to " -"trigger tool change." +"Questo G-code viene inserito al cambio filamento, compresi i comandi T per " +"attivare il cambio utensile." msgid "Line width for top surfaces" -msgstr "Line width for top surfaces" +msgstr "Larghezza linea per le superfici superiori" msgid "Speed of top surface infill which is solid" -msgstr "This is the speed for solid top surface infill." +msgstr "E' la velocità per il riempimento superficie superiore solida." msgid "Top shell layers" -msgstr "Top shell layers" +msgstr "Layer guscio superiore" msgid "" "This is the number of solid layers of top shell, including the top surface " "layer. When the thickness calculated by this value is thinner than top shell " "thickness, the top shell layers will be increased" msgstr "" -"This is the number of solid layers of top shell, including the top surface " -"layer. When the thickness calculated by this value is thinner than the top " -"shell thickness, the top shell layers will be increased" +"È il numero di layers solidi del guscio superiore, compreso il layer " +"superficiale superiore. Se lo spessore calcolato con questo valore è più " +"sottile dello spessore del guscio superiore, i layers del guscio superiore " +"vengono aumentati." msgid "Top solid layers" msgstr "Layer solidi superiori" msgid "Top shell thickness" -msgstr "Top shell thickness" +msgstr "Spessore guscio superiore" msgid "" "The number of top solid layers is increased when slicing if the thickness " @@ -8320,66 +8478,67 @@ msgid "" "is disabled and thickness of top shell is absolutely determained by top " "shell layers" msgstr "" -"The number of top solid layers is increased when slicing if the thickness " -"calculated by top shell layers is thinner than this value. This can avoid " -"having too thin a shell when layer height is small. 0 means that this " -"setting is disabled and thickness of top shell is determined simply by the " -"number of top shell layers." +"Il numero di layers solidi superiori aumenta durante l'elaborazione se lo " +"spessore calcolato dai layers superiori del guscio è più sottile di questo " +"valore. Questo può evitare di avere un guscio troppo sottile quando " +"l'altezza del layer è ridotta. 0 significa che questa impostazione è " +"disabilitata e lo spessore del guscio superiore è determinato semplicemente " +"dal numero di layers superiori del guscio." msgid "Speed of travel which is faster and without extrusion" -msgstr "This is the speed at which traveling is done." +msgstr "È la velocità con cui si viaggia." msgid "Wipe while retracting" -msgstr "Pulisci durante la retrazione" +msgstr "Pulisci in fase di retrazione" msgid "" "Move nozzle along the last extrusion path when retracting to clean leaked " "material on nozzle. This can minimize blob when print new part after travel" msgstr "" -"This moves the nozzle along the last extrusion path when retracting to clean " -"any leaked material on the nozzle. This can minimize blobs when printing a " -"new part after traveling." +"Questo sposta il nozzle lungo l'ultimo percorso di estrusione quando si " +"ritrae per pulire il materiale fuoriuscito dal nozzle. In questo modo è " +"possibile ridurre al minimo i blob quando si stampa una nuova parte dopo lo " +"spostamento." msgid "Wipe Distance" -msgstr "Wipe distance" +msgstr "Distanza pulizia" msgid "" "Discribe how long the nozzle will move along the last path when retracting" msgstr "" -"This describes how long the nozzle will move along the last path while " -"retracting." +"Descrive per quanto tempo il nozzle si muoverà lungo l'ultimo percorso " +"mentre si ritrae." msgid "" "Print a tower to prime material in nozzle after switching to a new material." msgstr "" -"This option enables printing a tower to prime material in the nozzle after " -"switching to a new material." +"Consente di stampare una Prime Tower per pulire il materiale nel nozzle dopo " +"il passaggio a un nuovo materiale." msgid "Purging volumes" msgstr "Volumi di spurgo" msgid "Flush multiplier" -msgstr "Flush multiplier" +msgstr "Moltiplicatore spurgo" msgid "" "The actual flushing volumes is equal to the flush multiplier multiplied by " "the flushing volumes in the table." msgstr "" -"The actual flushing volumes is equal to the flush multiplier value " -"multiplied by the flushing volumes in the table." +"I volumi di spurgo effettivi sono pari al moltiplicatore di spurgo " +"moltiplicato per i volumi di spurgo indicati nella tabella." msgid "Prime volume" -msgstr "Prime volume" +msgstr "Volume primario" msgid "The volume of material to prime extruder on tower." -msgstr "" -"This is the volume of material to prime the extruder with on the tower." +msgstr "E' il volume materiale da usare per la Prime Tower" msgid "Width" msgstr "Larghezza" msgid "Width of prime tower" -msgstr "This is the width of prime towers." +msgstr "È la larghezza della Prime Tower." msgid "" "Purging after filament change will be done inside objects' infills. This may " @@ -8387,44 +8546,48 @@ msgid "" "printed with transparent filament, the mixed color infill will be seen " "outside. It will not take effect, unless the prime tower is enabled." msgstr "" -"Purging after filament change will be done inside objects' infills. This may " -"lower the amount of waste and decrease the print time. If the walls are " -"printed with transparent filament, the mixed color infill will be visible. " -"It will not take effect unless the prime tower is enabled." +"Lo spurgo dopo il cambio del filamento verrà eseguito all'interno dei " +"riempimenti degli oggetti. Ciò può ridurre la quantità di rifiuti e ridurre " +"il tempo di stampa. Se le pareti sono stampate con filamenti trasparenti, il " +"riempimento a colori misti sarà visibile. Non avrà effetto a meno che la " +"Prime Tower non sia abilitata." msgid "" "Purging after filament change will be done inside objects' support. This may " "lower the amount of waste and decrease the print time. It will not take " "effect, unless the prime tower is enabled." msgstr "" -"Purging after filament change will be done inside objects' support. This may " -"lower the amount of waste and decrease the print time. It will not take " -"effect unless a prime tower is enabled." +"Lo spurgo dopo il cambio del filamento verrà eseguito all'interno del " +"supporto degli oggetti. Ciò può ridurre la quantità di rifiuti e ridurre il " +"tempo di stampa. Non avrà effetto a meno che non sia abilitata la Prime " +"Tower." msgid "" "This object will be used to purge the nozzle after a filament change to save " "filament and decrease the print time. Colours of the objects will be mixed " "as a result. It will not take effect, unless the prime tower is enabled." msgstr "" -"This object will be used to purge the nozzle after a filament change to save " -"filament and decrease the print time. Colors of the objects will be mixed as " -"a result. It will not take effect unless the prime tower is enabled." +"Questo oggetto viene utilizzato per spurgare il nozzle dopo un cambio " +"filamento per risparmiare filamento e ridurre il tempo di stampa. I colori " +"degli oggetti saranno mescolati. Non avrà effetto se non è abilitata la " +"Prime Tower." msgid "X-Y hole compensation" -msgstr "X-Y hole compensation" +msgstr "Compensazione foro X-Y" msgid "" "Holes of object will be grown or shrunk in XY plane by the configured value. " "Positive value makes holes bigger. Negative value makes holes smaller. This " "function is used to adjust size slightly when the object has assembling issue" msgstr "" -"Holes in objects will be grown or shrunk in the XY plane by the set value. " -"Positive values make holes bigger and negative values make holes smaller. " -"This function is used to adjust size slightly when objects have assembly " -"issues." +"I fori negli oggetti vengono ingranditi o rimpiccioliti nel piano XY in base " +"al valore impostato. Un valore positivo ingrandisce i fori mentre un valore " +"negativo rimpicciolisce i fori. Questa funzione viene utilizzata per " +"regolare leggermente le dimensioni quando gli oggetti presentano problemi di " +"assemblaggio." msgid "X-Y contour compensation" -msgstr "X-Y contour compensation" +msgstr "Compensazione contorni X-Y" msgid "" "Contour of object will be grown or shrunk in XY plane by the configured " @@ -8432,40 +8595,43 @@ msgid "" "smaller. This function is used to adjust size slightly when the object has " "assembling issue" msgstr "" -"The contour of objects will be grown or shrunk in the XY plane by the set " -"value. Positive values make contours bigger, and negative values make " -"contours smaller. This function is used to adjust sizes slightly when " -"objects have assembly issues." +"Il contorno degli oggetti viene ingrandito o rimpicciolito nel piano XY in " +"base al valore impostato. I valori positivi ingrandiscono i contorni e " +"quelli negativi li rimpiccioliscono. Questa funzione viene utilizzata per " +"regolare leggermente le dimensioni quando gli oggetti presentano problemi di " +"assemblaggio." msgid "" "Classic wall generator produces walls with constant extrusion width and for " "very thin areas is used gap-fill. Arachne engine produces walls with " "variable extrusion width" msgstr "" -"The classic wall generator produces walls with constant extrusion width and " -"for very thin areas, gap-fill is used. The Arachne engine produces walls " -"with variable extrusion width." +"La classica generazione di pareti produce pareti con larghezza di estrusione " +"costante e per aree molto sottili viene utilizzato il riempimento degli " +"spazi vuoti. Il motore Aracne produce pareti con larghezza di estrusione " +"variabile." msgid "Classic" -msgstr "Classic" +msgstr "Classico" msgid "Arachne" -msgstr "Arachne" +msgstr "Aracne" msgid "Wall transition length" -msgstr "Wall transition length" +msgstr "Lunghezza transizione parete" msgid "" "When transitioning between different numbers of walls as the part becomes " "thinner, a certain amount of space is allotted to split or join the wall " "segments. It's expressed as a percentage over nozzle diameter" msgstr "" -"When transitioning between different numbers of walls as the part becomes " -"thinner, a certain amount of space is allotted to split or join the wall " -"segments. It's expressed as a percentage over nozzle diameter." +"Quando si passa da un numero pareti diverso all'altro, man mano che il pezzo " +"diventa più sottile, viene assegnata una certa quantità di spazio per " +"dividere o unire i segmenti di parete. Viene espressa in percentuale sul " +"diametro del nozzle." msgid "Wall transitioning filter margin" -msgstr "Wall transitioning filter margin" +msgstr "Margine filtro transizione parete" msgid "" "Prevent transitioning back and forth between one extra wall and one less. " @@ -8476,16 +8642,17 @@ msgid "" "variation can lead to under- or overextrusion problems. It's expressed as a " "percentage over nozzle diameter" msgstr "" -"Prevent transitioning back and forth between one extra wall and one less. " -"This margin extends the range of extrusion widths which follow to [Minimum " -"wall width - margin, 2 * Minimum wall width + margin]. Increasing this " -"margin reduces the number of transitions, which reduces the number of " -"extrusion starts/stops and travel time. However, large extrusion width " -"variation can lead to under- or overextrusion problems. It's expressed as a " -"percentage over nozzle diameter" +"Evita la transizione avanti e indietro tra una parete extra e una in meno. " +"Questo margine estende l'intervallo di estrusione che segue a [Larghezza " +"minima parete - margine, 2 * Larghezza minima parete + margine]. L'aumento " +"di questo margine riduce il numero di transizioni, il che riduce il numero " +"di avvii/arresti dell'estrusione e il tempo di viaggio. Tuttavia, una grande " +"variazione della larghezza di estrusione può portare a problemi di sotto-" +"estrusione o sovra-estrusione. È espresso in percentuale rispetto al " +"diametro delnozzle" msgid "Wall transitioning threshold angle" -msgstr "Wall transitioning threshold angle" +msgstr "Angolo soglia transizione parete" msgid "" "When to create transitions between even and odd numbers of walls. A wedge " @@ -8494,24 +8661,25 @@ msgid "" "this setting reduces the number and length of these center walls, but may " "leave gaps or overextrude" msgstr "" -"When to create transitions between even and odd numbers of walls. A wedge " -"shape with an angle greater than this setting will not have transitions and " -"no walls will be printed in the center to fill the remaining space. Reducing " -"this setting reduces the number and length of these center walls, but may " -"leave gaps or overextrude" +"Quando si creano transizioni tra pareti in numero pari e dispari. Una forma " +"a cuneo con un angolo superiore a questa impostazione non avrà transizioni e " +"non verranno stampate pareti al centro per riempire lo spazio rimanente. " +"Riducendo questa impostazione, si riduce il numero e la lunghezza delle " +"pareti centrali, ma si possono lasciare spazi vuoti o sovraestrusi" msgid "Wall distribution count" -msgstr "Wall distribution count" +msgstr "Conteggio distribuzione parete" msgid "" "The number of walls, counted from the center, over which the variation needs " "to be spread. Lower values mean that the outer walls don't change in width" msgstr "" -"The number of walls, counted from the center, over which the variation needs " -"to be spread. Lower values mean that the outer walls don't change in width" +"Il numero di pareti, contati a partire dal centro, sui quali deve essere " +"distribuita la variazione. Valori più bassi indicano che le pareti esterne " +"non cambiano in larghezza" msgid "Minimum feature size" -msgstr "Minimum feature size" +msgstr "Dimensione minima caratteristica" msgid "" "Minimum thickness of thin features. Model features that are thinner than " @@ -8519,13 +8687,13 @@ msgid "" "feature size will be widened to the Minimum wall width. It's expressed as a " "percentage over nozzle diameter" msgstr "" -"Minimum thickness of thin features. Model features that are thinner than " -"this value will not be printed, while features thicker than the minimum " -"feature size will be widened to the minimum wall width. It's expressed as a " -"percentage over nozzle diameter" +"Spessore minimo elementi sottili. Gli elementi del modello più sottili di " +"questo valore non verranno stampati, mentre le più spesse della dimensione " +"minima verranno ampliate fino alla larghezza minima della parete. È " +"espresso in percentuale rispetto al diametro del nozzle" msgid "Minimum wall width" -msgstr "Minimum wall width" +msgstr "Larghezza minima parete" msgid "" "Width of the wall that will replace thin features (according to the Minimum " @@ -8533,22 +8701,24 @@ msgid "" "thickness of the feature, the wall will become as thick as the feature " "itself. It's expressed as a percentage over nozzle diameter" msgstr "" -"Width of the wall that will replace thin features (according to the Minimum " -"feature size) of the model. If the Minimum wall width is thinner than the " -"thickness of the feature, the wall will become as thick as the feature " -"itself. It's expressed as a percentage over nozzle diameter" +"Larghezza della parete che sostituirà gli elementi sottili (in base alla " +"dimensione minima dell'elemento) del modello. Se la larghezza minima della " +"parete è più sottile dello spessore dell'elemento, la parete diventerà " +"spessa quanto l'elemento stesso. È espresso in percentuale rispetto al " +"diametro del nozzle" msgid "Detect narrow internal solid infill" -msgstr "Detect narrow internal solid infill" +msgstr "Rileva riempimento solido interno stretto" msgid "" "This option will auto detect narrow internal solid infill area. If enabled, " "concentric pattern will be used for the area to speed printing up. " "Otherwise, rectilinear pattern is used defaultly." msgstr "" -"This option will auto-detect narrow internal solid infill areas. If enabled, " -"the concentric pattern will be used for the area to speed up printing. " -"Otherwise, the rectilinear pattern will be used by default." +"Questa rileva automaticamente le aree interne strette di riempimento solido. " +"Se abilitato, la trama concentrica verrà utilizzato per l'area per " +"velocizzare la stampa. Altrimenti, la trama rettilinea verrà utilizzata per " +"impostazione predefinita." msgid "invalid value " msgstr "" @@ -8567,37 +8737,37 @@ msgid " not in range " msgstr "" msgid "Export 3MF" -msgstr "Esporta 3MF" +msgstr "Esporta 3mf" msgid "Export project as 3MF." -msgstr "This exports the project as a 3mf file." +msgstr "Questo esporta il progetto come file 3mf." msgid "Export slicing data" -msgstr "Export slicing data" +msgstr "Esporta dati elaborati" msgid "Export slicing data to a folder." -msgstr "Export slicing data to a folder" +msgstr "Esporta dati elaborati in una cartella" msgid "Load slicing data" -msgstr "Load slicing data" +msgstr "Carica dati di slicing" msgid "Load cached slicing data from directory" -msgstr "Load cached slicing data from directory" +msgstr "Carica i dati di slicing nella cache dalla directory" msgid "Slice" -msgstr "Processa" +msgstr "Slice" msgid "Slice the plates: 0-all plates, i-plate i, others-invalid" -msgstr "Slice the plates: 0-all plates, i-plate i, others-invalid" +msgstr "Slicing dei piatti: 0-tutti i piatti, i-piatto i, altri-invalidi" msgid "Show command help." -msgstr "This shows command help." +msgstr "Mostra la guida ai comandi." msgid "UpToDate" -msgstr "UpToDate" +msgstr "Aggiornato" msgid "Update the configs values of 3mf to latest." -msgstr "Update the configs values of 3mf to latest." +msgstr "Aggiorna valori di configurazione dei 3mf ai più recenti." msgid "mtcpp" msgstr "" @@ -8627,49 +8797,49 @@ msgid "Output Model Info" msgstr "Info Modello di output" msgid "Output the model's information." -msgstr "This outputs the model’s information." +msgstr "Questo produce le informazioni del modello." msgid "Export Settings" -msgstr "Export Settings" +msgstr "Esporta impostazioni" msgid "Export settings to a file." -msgstr "This exports settings to a file." +msgstr "Questo esporta le impostazioni in un file." msgid "Send progress to pipe" -msgstr "Send progress to pipe" +msgstr "Inviare l'avanzamento al pipe" msgid "Send progress to pipe." -msgstr "Send progress to pipe." +msgstr "Inviare l'avanzamento al pipe" msgid "Arrange Options" -msgstr "Arrange Options" +msgstr "Opzioni disposizione" msgid "Arrange options: 0-disable, 1-enable, others-auto" -msgstr "Arrange options: 0-disable, 1-enable, others-auto" +msgstr "Opzioni di disposizione: 0-disabilita, 1-abilita, altro-auto" msgid "Convert Unit" -msgstr "Convert Unit" +msgstr "Converti unità" msgid "Convert the units of model" -msgstr "Convert the units of model" +msgstr "Converti le unità del modello" msgid "Orient the model" -msgstr "Orient the model" +msgstr "Orienta il modello" msgid "Scale the model by a float factor" -msgstr "Scale the model by a float factor" +msgstr "Ridimensiona il modello in base a un fattore float" msgid "Load General Settings" -msgstr "Load General Settings" +msgstr "Carica impostazioni generali" msgid "Load process/machine settings from the specified file" -msgstr "Load process/machine settings from the specified file" +msgstr "Carica le impostazioni di processo/macchina dal file specificato" msgid "Load Filament Settings" -msgstr "Load Filament Settings" +msgstr "Carica impostazioni filamento" msgid "Load filament settings from the specified file list" -msgstr "Load filament settings from the specified file list" +msgstr "Carica le impostazioni del filamento dall'elenco di file specificato" msgid "Skip Objects" msgstr "" @@ -8678,41 +8848,41 @@ msgid "Skip some objects in this print" msgstr "" msgid "Output directory" -msgstr "Output directory" +msgstr "Cartella destinazione" msgid "Output directory for the exported files." -msgstr "This is the output directory for exported files." +msgstr "Questa è la cartella di destinazione per i file esportati." msgid "Debug level" -msgstr "Debug level" +msgstr "Livello di debug" msgid "" "Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" "trace\n" msgstr "" -"Sets debug logging level. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" +"Imposta livello di debug. 0:fatal, 1:error, 2:warning, 3:info, 4:debug, 5:" "trace\n" msgid "Error in zip archive" -msgstr "Error in zip archive" +msgstr "Errore nell'archivio zip" msgid "Generating walls" -msgstr "Generating walls" +msgstr "Generazione pareti" msgid "Generating infill regions" -msgstr "Generating infill regions" +msgstr "Generazione regioni di riempimento" msgid "Generating infill toolpath" -msgstr "Generating infill toolpath" +msgstr "Generazione percorso utensile di riempimento" msgid "Detect overhangs for auto-lift" -msgstr "Detect overhangs for auto-lift" +msgstr "Rilevare le sporgenze per il sollevamento automatico" msgid "Generating support" -msgstr "Generating support" +msgstr "Generazione supporto" msgid "Checking support necessity" -msgstr "Checking support necessity" +msgstr "Verifica necessità di assistenza" msgid "floating regions" msgstr "" @@ -8730,13 +8900,14 @@ msgid "" msgstr "" msgid "Optimizing toolpath" -msgstr "Optimizing toolpath" +msgstr "Ottimizzazione del percorso utensile" msgid "Empty layers around bottom are replaced by nearest normal layers." -msgstr "Empty layers around bottom are replaced by nearest normal layers." +msgstr "" +"I layers vuoti intorno al fondo sono sostituiti da layers normali più vicini." msgid "The model has too many empty layers." -msgstr "The model has too many empty layers." +msgstr "Il modello ha troppi layers vuoti." msgid "Slicing mesh" msgstr "Slicing mesh" @@ -8754,34 +8925,34 @@ msgstr "" #, c-format, boost-format msgid "Support: generate toolpath at layer %d" -msgstr "Support: generate toolpath at layer %d" +msgstr "Supporto: generazione percorso utensile al layer %d" msgid "Support: detect overhangs" -msgstr "Support: detect overhangs" +msgstr "Supporto: rilevamento sporgenze" msgid "Support: generate contact points" -msgstr "Support: generate contact points" +msgstr "Supporto: generazione punti di contatto" msgid "Support: propagate branches" -msgstr "Support: propagate branches" +msgstr "Supporto: propagazione rami" msgid "Support: draw polygons" -msgstr "Support: draw polygons" +msgstr "Supporto: disegno poligoni" msgid "Support: generate toolpath" -msgstr "Support: generate toolpath" +msgstr "Supporto: generazione percorso utensile" #, c-format, boost-format msgid "Support: generate polygons at layer %d" -msgstr "Support: generate polygons at layer %d" +msgstr "Supporto: generazione poligoni al layer %d" #, c-format, boost-format msgid "Support: fix holes at layer %d" -msgstr "Support: fix holes at layer %d" +msgstr "Supporto: correzione dei buchi nel layer %d" #, c-format, boost-format msgid "Support: propagate branches at layer %d" -msgstr "Support: propagate branches at layer %d" +msgstr "Supporto: propagazione rami al layer %d" #: resources/data/hints.ini: [hint:3D Scene Operations] msgid "" @@ -8789,9 +8960,9 @@ msgid "" "Did you know how to control view and object/part selection with mouse and " "touchpanel in the 3D scene?" msgstr "" -"3D Scene Operations\n" -"Do you know how to control view and object/part selection with mouse and " -"touch panel in the 3D scene?" +"Operazioni sulla scena 3D\n" +"Sapete come controllare la vista e la selezione di oggetti/parti con il " +"mouse e il touch panel nella scena 3D?" #: resources/data/hints.ini: [hint:Cut Tool] msgid "" @@ -8799,9 +8970,9 @@ msgid "" "Did you know that you can cut a model at any angle and position with the " "cutting tool?" msgstr "" -"Cut Tool\n" -"Did you know that you can cut a model at any angle and position with the " -"cutting tool?" +"Strumento di taglio\n" +"Sapevate che è possibile tagliare un modello in qualsiasi angolazione e " +"posizione con l'utensile di taglio?" #: resources/data/hints.ini: [hint:Fix Model] msgid "" @@ -8809,9 +8980,9 @@ msgid "" "Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " "problems?" msgstr "" -"Fix Model\n" -"Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " -"problems?" +"Correggi Modello\n" +"Sapevi che puoi correggere un modello 3D danneggiato per evitare molti " +"problemi di slicing?" #: resources/data/hints.ini: [hint:Timelapse] msgid "" @@ -8819,15 +8990,15 @@ msgid "" "Did you know that you can generate a timelapse video during each print?" msgstr "" "Timelapse\n" -"Did you know that you can generate a timelapse video during each print?" +"Sapevi che puoi generare un video timelapse durante ogni stampa?" #: resources/data/hints.ini: [hint:Auto-Arrange] msgid "" "Auto-Arrange\n" "Did you know that you can auto-arrange all objects in your project?" msgstr "" -"Auto-Arrange\n" -"Did you know that you can auto-arrange all the objects in your project?" +"Disposizione automatica\n" +"Sapevi che puoi disporre automaticamente tutti gli oggetti del tuo progetto?" #: resources/data/hints.ini: [hint:Auto-Orient] msgid "" @@ -8835,9 +9006,9 @@ msgid "" "Did you know that you can rotate objects to an optimal orientation for " "printing by a simple click?" msgstr "" -"Auto-Orient\n" -"Did you know that you can rotate objects to an optimal orientation for " -"printing with a simple click?" +"Orientamento automatico\n" +"Sapevi che puoi orientare gli oggetti in modo ottimale per la stampa con un " +"semplice clic?" #: resources/data/hints.ini: [hint:Lay on Face] msgid "" @@ -8846,10 +9017,10 @@ msgid "" "sits on the print bed? Select the \"Place on face\" function or press the " "F key." msgstr "" -"Lay on Face\n" -"Did you know that you can quickly orient a model so that one of its faces " -"sits on the print bed? Select the \"Place on face\" function or press the " -"F key." +"Posiziona su faccia\n" +"Sapevate che è possibile orientare rapidamente un modello in modo che una " +"delle sue facce si trovi sul piatto di stampa? Selezionare la funzione " +"\"Posiziona su faccia\" o premere il tasto F ." #: resources/data/hints.ini: [hint:Object List] msgid "" @@ -8857,9 +9028,9 @@ msgid "" "Did you know that you can view all objects/parts in a list and change " "settings for each object/part?" msgstr "" -"Object List\n" -"Did you know that you can view all objects/parts in a list and change " -"settings for each object/part?" +"Elenco oggetti\n" +"Sapevate che è possibile visualizzare tutti gli oggetti/parti in un elenco e " +"modificare le impostazioni per ciascun oggetto/parte?" #: resources/data/hints.ini: [hint:Simplify Model] msgid "" @@ -8868,10 +9039,11 @@ msgid "" "Simplify mesh feature? Right-click the model and select Simplify model. Read " "more in the documentation." msgstr "" -"Simplify Model\n" -"Did you know that you can reduce the number of triangles in a mesh using the " -"Simplify mesh feature? Right-click the model and select Simplify model. Read " -"more in the documentation." +"Semplifica Modello\n" +"Sapevate che è possibile ridurre il numero di triangoli in una mesh " +"utilizzando la funzione Semplifica mesh? Fare clic con il tasto destro del " +"mouse sul modello e selezionare Semplifica modello. Per saperne di più, " +"consultare la documentazione." #: resources/data/hints.ini: [hint:Slicing Parameter Table] msgid "" @@ -8879,9 +9051,9 @@ msgid "" "Did you know that you can view all objects/parts on a table and change " "settings for each object/part?" msgstr "" -"Slicing Parameter Table\n" -"Did you know that you can view all objects/parts on a table and change " -"settings for each object/part?" +"Tabella Parametri Slicing\n" +"Sapevate che è possibile visualizzare tutti gli oggetti/parti di una tabella " +"e modificare le impostazioni di ciascun oggetto/parte?" #: resources/data/hints.ini: [hint:Split to Objects/Parts] msgid "" @@ -8889,9 +9061,9 @@ msgid "" "Did you know that you can split a big object into small ones for easy " "colorizing or printing?" msgstr "" -"Split to Objects/Parts\n" -"Did you know that you can split a big object into small ones for easy " -"colorizing or printing?" +"Dividi in oggetti/parti\n" +"Sapevi che è possibile dividere un oggetto grande in piccoli oggetti per " +"facilitare la colorazione o la stampa?" #: resources/data/hints.ini: [hint:Subtract a Part] msgid "" @@ -8900,10 +9072,11 @@ msgid "" "part modifier? That way you can, for example, create easily resizable holes " "directly in Bambu Studio. Read more in the documentation." msgstr "" -"Subtract a Part\n" -"Did you know that you can subtract one mesh from another using the Negative " -"part modifier? That way you can, for example, create easily resizable holes " -"directly in Bambu Studio. Read more in the documentation." +"Sottrarre una parte\n" +"Sapevi che è possibile sottrarre una mesh da un'altra utilizzando il " +"modificatore Parte negativa? In questo modo è possibile, ad esempio, creare " +"fori facilmente ridimensionabili direttamente in Bambu Studio. Per saperne " +"di più, consulta la documentazione." #: resources/data/hints.ini: [hint:STEP] msgid "" @@ -8914,10 +9087,10 @@ msgid "" "lower resolution STL. Give it a try!" msgstr "" "STEP\n" -"Did you know that you can improve your print quality by slicing a STEP file " -"instead of an STL?\n" -"Bambu Studio supports slicing STEP files, providing smoother results than a " -"lower resolution STL. Give it a try!" +"Sapevi che puoi migliorare la qualità di stampa elaborando un file STEP " +"anziché un file STL?\n" +"Bambu Studio supporta la suddivisione in sezioni di file STEP, fornendo " +"risultati più fluidi rispetto a un STL a risoluzione inferiore. Provalo!" #: resources/data/hints.ini: [hint:Z seam location] msgid "" @@ -8926,10 +9099,10 @@ msgid "" "paint it on your print, to have it in a less visible location? This improves " "the overall look of your model. Check it out!" msgstr "" -"Z seam location\n" -"Did you know that you can customize the location of the Z seam, and even " -"paint it on your print, to have it in a less visible location? This improves " -"the overall look of your model. Check it out!" +"Posizione giunzione Z\n" +"Sapevi che puoi personalizzare la posizione della giunzione Z e persino " +"dipingerla sulla stampa, per averla in una posizione meno visibile? Ciò " +"migliora l'aspetto generale del modello. Dai un'occhiata!" #: resources/data/hints.ini: [hint:Fine-tuning for flow rate] msgid "" @@ -8938,10 +9111,10 @@ msgid "" "prints? Depending on the material, you can improve the overall finish of the " "printed model by doing some fine-tuning." msgstr "" -"Fine-tuning for flow rate\n" -"Did you know that flow rate can be fine-tuned for even better-looking " -"prints? Depending on the material, you can improve the overall finish of the " -"printed model by doing some fine-tuning." +"Regolazione precisa del flusso\n" +"Sapevi che la velocità del flusso può essere regolata con precisione per " +"stampe ancora più belle? A seconda del materiale, è possibile migliorare la " +"finitura complessiva del modello stampato effettuando regolazioni precise." #: resources/data/hints.ini: [hint:Split your prints into plates] msgid "" @@ -8950,10 +9123,10 @@ msgid "" "individual plates ready to print? This will simplify the process of keeping " "track of all the parts." msgstr "" -"Split your prints into plates\n" -"Did you know that you can split a model that has a lot of parts into " -"individual plates ready to print? This will simplify the process of keeping " -"track of all the parts." +"Dividi le stampe in piatti\n" +"Sapevi che puoi dividere un modello con molte parti in singoli piatti pronti " +"per la stampa? Ciò semplificherà il processo di elaborazione di tutte le " +"parti." #: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer #: Height] @@ -8962,9 +9135,9 @@ msgid "" "Did you know that you can print a model even faster, by using the Adaptive " "Layer Height option? Check it out!" msgstr "" -"Speed up your print with Adaptive Layer Height\n" -"Did you know that you can print a model even faster by using the Adaptive " -"Layer Height option? Check it out!" +"Accelera la stampa con l'opzione Layers Adattativo\n" +"Sapevi che puoi stampare un modello ancora più velocemente utilizzando " +"l'opzione Layer Adattativo? Scoprilo!" #: resources/data/hints.ini: [hint:Support painting] msgid "" @@ -8973,10 +9146,10 @@ msgid "" "makes it easy to place the support material only on the sections of the " "model that actually need it." msgstr "" -"Support painting\n" -"Did you know that you can paint the location of your supports? This feature " -"makes it easy to place the support material only on the sections of the " -"model that actually need it." +"Pitturare supporti\n" +"Sapevi che è possibile pitturare la posizione dei supporti? Questa funzione " +"consente di posizionare facilmente il materiale di supporto solo sulle " +"sezioni del modello che ne hanno effettivamente bisogno." #: resources/data/hints.ini: [hint:Different types of supports] msgid "" @@ -8985,10 +9158,10 @@ msgid "" "supports work great for organic models, while saving filament and improving " "print speed. Check them out!" msgstr "" -"Different types of supports\n" -"Did you know that you can choose from multiple types of supports? Tree " -"supports work great for organic models while saving filament and improving " -"print speed. Check them out!" +"Diversi tipi di supporto\n" +"Sapevate che potete scegliere tra diversi tipi di supporto? I supporti ad " +"albero funzionano benissimo per i modelli organici, risparmiando filamento e " +"migliorando la velocità di stampa. Scopriteli!" #: resources/data/hints.ini: [hint:Printing Silk Filament] msgid "" @@ -8997,10 +9170,10 @@ msgid "" "successfully? Higher temperature and lower speed are always recommended for " "the best results." msgstr "" -"Printing Silk Filament\n" -"Did you know that Silk filament needs special consideration to print " -"successfully? A higher temperature and lower speed are always recommended " -"for the best results." +"Stampa di filamento Silk (seta)\n" +"Sapevi che il filamento seta richiede un'attenzione speciale per stampare " +"con successo? Una temperatura più alta e una velocità inferiore sono sempre " +"consigliate per ottenere i migliori risultati." #: resources/data/hints.ini: [hint:Brim for better adhesion] msgid "" @@ -9008,9 +9181,9 @@ msgid "" "Did you know that when printing models have a small contact interface with " "the printing surface, it's recommended to use a brim?" msgstr "" -"Brim for better adhesion\n" -"Did you know that when printed models have a small contact interface with " -"the printing surface, it's recommended to use a brim?" +"Brim per una migliore adesione\n" +"Sapevate che quando i modelli stampati hanno una piccola interfaccia di " +"contatto con la superficie di stampa, si consiglia di utilizzare un brim?" #: resources/data/hints.ini: [hint:Set parameters for multiple objects] msgid "" @@ -9018,17 +9191,17 @@ msgid "" "Did you know that you can set slicing parameters for all selected objects at " "one time?" msgstr "" -"Set parameters for multiple objects\n" -"Did you know that you can set slicing parameters for all selected objects at " -"once?" +"Impostare i parametri per più oggetti\n" +"Sapevi che puoi impostare i parametri di elaborazione per tutti gli oggetti " +"selezionati contemporaneamente?" #: resources/data/hints.ini: [hint:Stack objects] msgid "" "Stack objects\n" "Did you know that you can stack objects as a whole one?" msgstr "" -"Stack objects\n" -"Did you know that you can stack objects as a whole one?" +"Impila oggetti\n" +"Sapevi che puoi impilare oggetti interi?" #: resources/data/hints.ini: [hint:Flush into support/objects/infill] msgid "" @@ -9036,9 +9209,9 @@ msgid "" "Did you know that you can save the wasted filament by flushing them into " "support/objects/infill during filament change?" msgstr "" -"Flush into support/objects/infill\n" -"Did you know that you can reduce wasted filament by flushing it into support/" -"objects/infill during filament changes?" +"Spurga nei supporti/oggetti/riempimenti\n" +"Sapevi che puoi ridurre lo spreco di filamento spurgandolo nei supporti/" +"oggetti/riempimenti durante la sostituzione del filamento?" #: resources/data/hints.ini: [hint:Improve strength] msgid "" @@ -9046,183 +9219,106 @@ msgid "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" msgstr "" -"Improve strength\n" -"Did you know that you can use more wall loops and higher sparse infill " -"density to improve the strength of the model?" +"Migliorare la resistenza\n" +"Sapevate che è possibile utilizzare un maggior numero di anelli a parete e " +"una maggiore densità riempimento per migliorare la resistenza del modello?" + +#~ msgid "" +#~ "\n" +#~ "%1% is too close to exclusion area, there will be collisions when " +#~ "printing." +#~ msgstr "" +#~ "\n" +#~ "%1% è troppo vicino all'area di esclusione, potrebbero verificarsi " +#~ "collisioni durante la stampa." + +#~ msgid "" +#~ "%1% is too close to exclusion area, there will be collisions when " +#~ "printing." +#~ msgstr "" +#~ "%1% è troppo vicino all'area di esclusione; si verificheranno collisioni " +#~ "durante la stampa." + +#~ msgid "&Edit" +#~ msgstr "&Modifica" + +#~ msgid "0%" +#~ msgstr "0%" + +#~ msgid "AMSMaterialsSetting" +#~ msgstr "Impostazione materiali AMS" + +#~ msgid "AMS auto switch filament" +#~ msgstr "Cambio filamento automatico AMS" + +#~ msgid "AWS PRE host" +#~ msgstr "PRE host AWS" + +#~ msgid "AWS host" +#~ msgstr "Host AWS" + +#~ msgid "Actual Volume = Flushing Volume * Multiplier" +#~ msgstr "Volume attuale = Volume di spurgo * Moltiplicatore" + +#~ msgid "Adaptive layer height" +#~ msgstr "Altezza layer adattivo" + +#~ msgid "Add Custom Printer" +#~ msgstr "Aggiungi stampante personalizzata" + +#~ msgid "" +#~ "An object is layed over the boundary of plate.\n" +#~ "Please solve the problem by moving it totally inside or outside plate." +#~ msgstr "" +#~ "Un oggetto è posato oltre il limite del piatto o supera il limite di " +#~ "altezza.\n" +#~ "Risolvi il problema spostando l'oggetto completamente dentro o fuori il " +#~ "piatto verificando che l'altezza rientri nel volume di costruzione." #~ msgid "" #~ "Arachne engine only works when overhang slowing down is disabled.\n" #~ "This may cause decline in the quality of overhang surface when print " #~ "fastly" #~ msgstr "" -#~ "The Arachne engine only works when overhang slowdown is disabled.\n" -#~ "This may cause decline in the quality of overhang surface when printing " -#~ "quickly." - -#~ msgid "" -#~ "Disable overhang slowing down automatically? \n" -#~ "Yes - Enable arachne and disable overhang slowing down\n" -#~ "No - Give up using arachne this time" -#~ msgstr "" -#~ "Disable overhang slowdown automatically? \n" -#~ "Yes - Enable Arachne and disable overhang slowing down\n" -#~ "No - Don't use Arachne for this print" - -#~ msgid "Start" -#~ msgstr "Start" - -#~ msgid "G-code" -#~ msgstr "G-code" - -#~ msgid "Backup" -#~ msgstr "Backup" - -#~ msgid "Backup interval" -#~ msgstr "Backup interval" - -#, c-format, boost-format -#~ msgid "The %s filament is too soft to be used with the AMS" -#~ msgstr "The %s filament is too soft to be used with the AMS" - -#, c-format, boost-format -#~ msgid "" -#~ "It seems object %s has completely floating regions. Please re-orient the " -#~ "object or enable support generation." -#~ msgstr "" -#~ "It seems object %s has completely floating regions. Please re-orient the " -#~ "object or enable support generation." - -#, c-format, boost-format -#~ msgid "" -#~ "It seems object %s has large overhangs. Please enable support generation." -#~ msgstr "" -#~ "It seems object %s has large overhangs. Please enable support generation." - -#~ msgid "\\u2103" -#~ msgstr "\\u2103" - -#~ msgid "mm\\u00B3" -#~ msgstr "mm\\u00B3" - -#~ msgid "" -#~ "Spiral mode only works when wall loops is 1, support is disabled, top " -#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " -#~ "traditional" -#~ msgstr "" -#~ "Spiral mode only works when wall loops is 1, support is disabled, top " -#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " -#~ "traditional" - -#~ msgid "Keep upper part" -#~ msgstr "Mantieni parte superiore" - -#~ msgid "Keep lower part" -#~ msgstr "Mantieni parte inferiore" - -#~ msgid "AMS auto switch filament" -#~ msgstr "AMS auto switch filament" - -#~ msgid "" -#~ "When using support material for the support interface, We recommend the " -#~ "following settings:\n" -#~ "0 top z distance, 0 interface spacing, concentric pattern." -#~ msgstr "" -#~ "When using support material for the support interface, We recommend the " -#~ "following settings:\n" -#~ "0 top z distance, 0 interface spacing, concentric pattern." - -#~ msgid "" -#~ "The P1P printer does not support smooth timelapse, use traditional " -#~ "timelapse instead." -#~ msgstr "" -#~ "The P1P printer does not support smooth timelapse, please use traditional " -#~ "timelapse instead." - -#~ msgid "Support base" -#~ msgstr "Support base" - -#~ msgid "" -#~ "Support layer uses layer height independent with object layer. This is to " -#~ "support customizing z-gap and save print time." -#~ msgstr "" -#~ "Support layer uses layer height independent with object layer. This is to " -#~ "support customizing z-gap and save print time." - -#~ msgid "" -#~ "\n" -#~ "%1% is too close to exclusion area, there will be collisions when " -#~ "printing." -#~ msgstr "" -#~ "\n" -#~ "%1% is too close to an exclusion area; there will be collisions when " -#~ "printing." - -#~ msgid "" -#~ "%1% is too close to exclusion area, there will be collisions when " -#~ "printing." -#~ msgstr "" -#~ "%1% is too close to an exclusion area; there will be collisions when " -#~ "printing." - -#~ msgid "&Edit" -#~ msgstr "&Edit" - -#~ msgid "0%" -#~ msgstr "0%" - -#~ msgid "AMSMaterialsSetting" -#~ msgstr "AMS Materials Setting" - -#~ msgid "AWS PRE host" -#~ msgstr "AWS PRE host" - -#~ msgid "AWS host" -#~ msgstr "AWS host" - -#~ msgid "Actual Volume = Flushing Volume * Multiplier" -#~ msgstr "Actual Volume = Flushing Volume * Multiplier" - -#~ msgid "Adaptive layer height" -#~ msgstr "Adaptive layer height" - -#~ msgid "Add Custom Printer" -#~ msgstr "Add Custom Printer" - -#~ msgid "" -#~ "An object is layed over the boundary of plate.\n" -#~ "Please solve the problem by moving it totally inside or outside plate." -#~ msgstr "" -#~ "An object is laid over the edge of the plate or exceeds the height " -#~ "limit.\n" -#~ "Please solve the problem by moving it totally on or off the plate, and " -#~ "confirming that the height is within the build volume." +#~ "Il motore Aracne funziona solo quando il rallentamento delle sporgenze è " +#~ "disabilitato.\n" +#~ "Ciò può causare una riduzione della qualità della superficie della " +#~ "sporgenza quando si stampa rapidamente." #~ msgid "" #~ "Arachne engine only works when overhang slowing down is disabled.\n" #~ "This may cause decline in the quality of overhang surface when print " #~ "fastly\n" #~ msgstr "" -#~ "The Arachne engine only works when overhang slowdown is disabled.\n" -#~ "This may cause decline in the quality of overhang surfaces when printing " -#~ "quickly.\n" +#~ "Il motore Arachne funziona solo quando il rallentamento delle sporgenze è " +#~ "disabilitato.\n" +#~ "Ciò può causare un calo della qualità delle superfici a sbalzo quando si " +#~ "stampa rapidamente.\n" #~ msgid "Auto arrange" -#~ msgstr "Auto Arrange" +#~ msgstr "Disposizione automaticaarrange" #~ msgid "" #~ "Auto orientates selected objects or all objects.If there are selected " #~ "objects, it just orientates the selected ones.Otherwise, it will " #~ "orientates all objects in the project." #~ msgstr "" -#~ "This anuto orients selected objects or all objects.\n" -#~ "If there are selected objects, it just orients the selected ones. " -#~ "Otherwise, it will orient all objects in the project." +#~ "Questa opzione consente di orientare automaticamente gli oggetti " +#~ "selezionati o tutti gli oggetti.\n" +#~ "Se ci sono oggetti selezionati, orienta solo quelli selezionati. " +#~ "Altrimenti, orienterà tutti gli oggetti del progetto." #~ msgid "Aux Cooling" -#~ msgstr "Aux Cooling" +#~ msgstr "Raffreddamento ausiliario" #~ msgid "Avoid crossing wall when travel" -#~ msgstr "Avoid walls when traveling" +#~ msgstr "Evita le pareti durante il movimento" + +#~ msgid "Backup" +#~ msgstr "Backup" + +#~ msgid "Backup interval" +#~ msgstr "Intervallo di backup" #~ msgid "" #~ "Bed exclude area that can't used as printable area in X-Y plane. For " @@ -9230,76 +9326,78 @@ msgstr "" #~ "printing multi colors with AMS. The area is expressed as polygon by " #~ "points in following format: \"XxY, XxY, ...\"" #~ msgstr "" -#~ "Bed excludes area that can't used as printable area in the X-Y plane. For " -#~ "example, the bottom left area which is used to cut filament in X1 when " -#~ "printing multi-color with an AMS. The area is expressed as polygon by " -#~ "points in following format: \"XxY, XxY, ...\"" +#~ "Il piano esclude l'area che non può essere utilizzata come area " +#~ "stampabile X-Y. Ad esempio, l'area in basso a sinistra utilizzata per " +#~ "tagliare il filamento nella X1 quando si stampa multicolore con un AMS. " +#~ "L'area è espressa come poligono da punti nel seguente formato: «xxY, " +#~ "xxY,...»" #~ msgid "" #~ "Bed temperature is higher than vitrification temperature of this " #~ "filament.\n" #~ "This may cause nozzle blocked and printing failure" #~ msgstr "" -#~ "The bed temperature is higher than the vitrification temperature of this " -#~ "filament.\n" -#~ "This may cause a nozzle blockage or print failure" +#~ "La temperatura del letto è superiore alla temperatura di vetrificazione " +#~ "di questo filamento.\n" +#~ "Ciò può causare un blocco del nozzle o un errore di stampa" #~ msgid "" #~ "Calibration completed. Please select the factors according to the left " #~ "figure and fill them in the input boxes." #~ msgstr "" -#~ "Calibration completed. Please select the factors according to the left " -#~ "figure and fill them in the input boxes." +#~ "Calibrazione completata. Seleziona i fattori in base alla figura a " +#~ "sinistra e inseriscili nelle caselle." #~ msgid "Can't connect to the printer" -#~ msgstr "Can't connect to the printer" +#~ msgstr "Impossibile connettersi alla stampante" #~ msgid "" #~ "Cannot detect the LAN IP address of %s. Are %s and Bambu Studio in the " #~ "same LAN?" #~ msgstr "" -#~ "Cannot detect the LAN IP address of %s. Are %s and Bambu Studio in the " -#~ "same LAN?" +#~ "Impossibile rilevare l'indirizzo IP LAN di %s. %s e Bambu Studio sono " +#~ "nella stessa LAN?" #~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" -#~ msgstr "Choose one or more files (3mf/step/stl/obj/amf):" +#~ msgstr "Scegli uno o più file (3mf/step/stl/obj/amf):" #~ msgid "Choose save directory" -#~ msgstr "Choose save directory" +#~ msgstr "Scegliere la directory di salvataggio" #~ msgid "Clean" -#~ msgstr "Clear" +#~ msgstr "Cancella" #~ msgid "Clear all" -#~ msgstr "Pulisci tutto" +#~ msgstr "Cancella tutto" #~ msgid "" #~ "Clearance radius around extruder. Used as input of auto-arrange to avoid " #~ "collision when print object by object" #~ msgstr "" -#~ "Clearance radius around extruder: used as input for auto-arranging to " -#~ "avoid collisions when printing object by object" +#~ "Raggio di ingombro attorno all'estrusore: utilizzato come input per la " +#~ "disposizione automatica per evitare collisioni durante la stampa oggetto " +#~ "per oggetto" #~ msgid "Click the pencil icon to edit the filament." -#~ msgstr "Click the pencil icon to edit the filament." +#~ msgstr "Clicca sull'icona della matita per modificare il filamento." #~ msgid "Clipping of view" -#~ msgstr "Clipping of view" +#~ msgstr "Taglio visuale" #~ msgid "Color Print" -#~ msgstr "Color Print (Stampa a Colori)" +#~ msgstr "Stampa a colori" #~ msgid "Comsumption" -#~ msgstr "Consumption" +#~ msgstr "Consumo" #~ msgid "Creating" -#~ msgstr "Creating" +#~ msgstr "Creazione" #~ msgid "Ctrl + Any arrow" -#~ msgstr "Ctrl + Any arrow" +#~ msgstr "Ctrl + Qualsiasi freccia" #~ msgid "Ctrl + Left mouse button" -#~ msgstr "Ctrl + Left mouse button" +#~ msgstr "Ctrl + Tasto sinistro del mouse" #~ msgid "Debug" #~ msgstr "Debug" @@ -9308,32 +9406,43 @@ msgstr "" #~ "Desiccant status lower than two bars indicates that desiccant can be " #~ "inactive. Please change the desiccant.(Higher the better)" #~ msgstr "" -#~ "Desiccant status lower than two bars indicates that desiccant can be " -#~ "inactive. Please change the desiccant. (the higher, the better)" +#~ "Uno stato dell'essiccante inferiore a due barre indica che l'essiccante " +#~ "potrebbe essere inattivo. Si prega di sostituire l'essiccante. (Le barre: " +#~ "più sono alte, meglio è)." #~ msgid "Designer" -#~ msgstr "Designer" +#~ msgstr "Progettista" #~ msgid "Device:" #~ msgstr "Dispositivo:" +#~ msgid "" +#~ "Disable overhang slowing down automatically? \n" +#~ "Yes - Enable arachne and disable overhang slowing down\n" +#~ "No - Give up using arachne this time" +#~ msgstr "" +#~ "Disattivare automaticamente il rallentamento degli sbalzi?\n" +#~ "Si - Abilita Aracne e disabilita il rallentamento degli sbalzi\n" +#~ "No - Rinuncia all'uso di Aracne questa volta" + #~ msgid "Display printable box" -#~ msgstr "Display printable box" +#~ msgstr "Mostra box stampabile" #~ msgid "Display shadow of objects" -#~ msgstr "Display shadow of objects" +#~ msgstr "Mostra l'ombra degli oggetti" #~ msgid "Display triangles of models" -#~ msgstr "Display triangles of models" +#~ msgstr "Visualizzare i triangoli dei modelli" #~ msgid "" #~ "Do not recommand bed temperature of other layer to be lower than initial " #~ "layer for more than this threshold. Too low bed temperature of other " #~ "layer may cause the model broken free from build plate" #~ msgstr "" -#~ "It is not recommended to have the bed temperature of other layers to be " -#~ "lower than the first layer by more than this threshold. Bed temperatures " -#~ "that are too low may cause models to break free from the build plate." +#~ "Non è consigliabile che la temperatura del piano degli altri layer sia " +#~ "inferiore a quella del primo layer di oltre questa soglia. Una " +#~ "temperatura del piano troppo bassa può far sì che i modelli si stacchino " +#~ "dalla piatto." #~ msgid "" #~ "Do you want to synchronize your personal data from Bambu Cloud? \n" @@ -9342,11 +9451,11 @@ msgstr "" #~ "2. The Filament presets\n" #~ "3. The Printer presets\n" #~ msgstr "" -#~ "Do you want to synchronize your personal data from Bambu Cloud? \n" -#~ "This includes the following information:\n" -#~ "1. Process presets\n" -#~ "2. Filament presets\n" -#~ "3. Printer presets\n" +#~ "Vuoi sincronizzare i tuoi dati personali da Bambu Cloud?\n" +#~ "Contiene le seguenti informazioni:\n" +#~ "1. I presets del processo\n" +#~ "2. I presets del filamento\n" +#~ "3. I presets della stampante\n" #~ msgid "" #~ "Do you want to synchronize your personal data from Bambu Cloud? \n" @@ -9355,21 +9464,21 @@ msgstr "" #~ "2. The Filament presets\n" #~ "3. The Printer presets\n" #~ msgstr "" -#~ "Do you want to synchronize your personal data from Bambu Cloud? \n" -#~ "It contains the following information:\n" -#~ "1. The Process presets\n" -#~ "2. The Filament presets\n" -#~ "3. The Printer presets\n" +#~ "Vuoi sincronizzare i tuoi dati personali da Bambu Cloud?\n" +#~ "Contiene le seguenti informazioni:\n" +#~ "1. I presets del processo\n" +#~ "2. I presets del filamento\n" +#~ "3. I presets della stampante\n" #~ msgid "" #~ "Don't retract when the travel is in infill area absolutely. That means " #~ "the oozing can't been seen" #~ msgstr "" -#~ "This disables retraction when travel is entirely within an infill area " -#~ "and oozing can’t be seen." +#~ "Questo disabilita la retrazione quando gli spostamenti sono all'interno " +#~ "di un'area di riempimento e non è visibile il gocciolamento." #~ msgid "Downloading Bambu Network plug-in" -#~ msgstr "Downloading Bambu Network plug-in" +#~ msgstr "Scaricando il plug-in Bambu Network" #~ msgid "" #~ "Enabling this option means the height of every layer except the first " @@ -9378,172 +9487,179 @@ msgstr "" #~ "Note that this option only takes effect if no prime tower is generated in " #~ "current plate." #~ msgstr "" -#~ "Enabling this option means that the height of each layer after the first " -#~ "will be automatically calculated according to the slope of the model’s " -#~ "surface.\n" -#~ "Please note that this option only takes effect if there is no prime tower " -#~ "generated on the current plate." +#~ "Abilitando questa opzione, l'altezza di ogni layer successivo al primo " +#~ "sarà calcolata automaticamente in base all'inclinazione della superficie " +#~ "del modello.\n" +#~ "Si noti che questa opzione ha effetto solo se non è stata generata una " +#~ "prime tower sul piatto corrente." #~ msgid "Enter a search term" #~ msgstr "Inserire un termine di ricerca" #~ msgid "Entering Seam painting" -#~ msgstr "Entering seam painting" +#~ msgstr "Entra nella pittura della giunzione" #~ msgid "Erase painting" -#~ msgstr "Erase painting" +#~ msgstr "Cancella la pittura" #~ msgid "Error at line %1%:\n" -#~ msgstr "Error at line %1%:\n" +#~ msgstr "Errore alla riga %1%:\n" #~ msgid "Export." -#~ msgstr "Esporta." +#~ msgstr "Esporta" #~ msgid "Export G-Code." #~ msgstr "Esporta G-code." #~ msgid "Export Sliced File" -#~ msgstr "Export Sliced File" +#~ msgstr "Esporta file elaborato" #~ msgid "Export current Sliced file" -#~ msgstr "Export Sliced File" +#~ msgstr "Esporta file elaborato" #~ msgid "Export ok." -#~ msgstr "Export ok." +#~ msgstr "Esportazione ok." #~ msgid "Export sliced file" -#~ msgstr "Export Sliced File" +#~ msgstr "Esporta file elaborato" #~ msgid "Extruder position" -#~ msgstr "Extruder position" +#~ msgstr "Posizione dell'estrusore" #~ msgid "Failed" -#~ msgstr "Failed" +#~ msgstr "Fallito" #~ msgid "" #~ "Failed to connect to the printer through LAN. Please enter the correct " #~ "printer IP address and access code." #~ msgstr "" -#~ "Failed to connect to the printer through LAN. Please enter the correct " -#~ "printer IP address and access code." +#~ "Impossibile connettersi alla stampante attraverso la LAN. Immettere " +#~ "l'indirizzo IP e il codice di accesso corretti della stampante." #~ msgid "Filament 1" -#~ msgstr "Filament 1" +#~ msgstr "Filamento 1" #~ msgid "Filament N XX" -#~ msgstr "Filament N XX" +#~ msgstr "Filamento N XX" #~ msgid "" #~ "Filament index %s does not match the filament in AMS slot %s. Please " #~ "update the printer firmware to support AMS slot assignment." #~ msgstr "" -#~ "Filament index %s does not match the filament in AMS slot %s. Please " -#~ "update the printer firmware to support AMS slot assignment." +#~ "L'indice del filamento %s non corrisponde al filamento nello slot AMS %s. " +#~ "Aggiorna il firmware della stampante per supportare l'assegnazione degli " +#~ "slot AMS." #~ msgid "" #~ "Filament index %s exceeds the number of AMS slots. Please update the " #~ "printer firmware to support AMS slot assignment." #~ msgstr "" -#~ "Filament index %s exceeds the number of AMS slots. Please update the " -#~ "printer firmware to support AMS slot assignment." +#~ "L'indice del filamento %s supera il numero di slot AMS. Aggiorna il " +#~ "firmware della stampante per supportare l'assegnazione degli slot AMS." #~ msgid "" #~ "Filament index does not match the filament in AMS slot. Please update the " #~ "printer firmware to support AMS slot assignment." #~ msgstr "" -#~ "Filament index does not match the filament in AMS slot. Please update the " -#~ "printer firmware to support AMS slot assignment." +#~ "L'indice del filamento non corrisponde a quello del filamento nello slot " +#~ "AMS. Aggiorna il firmware della stampante per supportare l'assegnazione " +#~ "degli slot AMS." #~ msgid "" #~ "Filament index exceeds the number of AMS slots. Please update the printer " #~ "firmware to support AMS slot assignment." #~ msgstr "" -#~ "Filament index exceeds the number of AMS slots. Please update the printer " -#~ "firmware to support AMS slot assignment." +#~ "L'indice del filamento supera il numero di slot AMS. Aggiorna il firmware " +#~ "della stampante per supportare l'assegnazione degli slot AMS." #~ msgid "" #~ "Filament to print support and raft. \"Default\" means no specific " #~ "filament for support and current filament is used" #~ msgstr "" -#~ "Filament to print supports and rafts. \"Default\" means no specific " -#~ "filament for support and current filament is used" +#~ "Filamento per stampare supporti e raft. \"Predefinito\" indica che non " +#~ "viene utilizzato alcun filamento specifico ma quello attuale in uso" #~ msgid "" #~ "Filament to print support and skirt. 0 means no specific filament for " #~ "support and current filament is used" #~ msgstr "" -#~ "This is the filament used to print supports and skirts. 0 means no " -#~ "specific filament for support and the current filament is used." +#~ "Questo è il filamento utilizzato per stampare supporti e skirts. 0 " +#~ "significa che non viene utilizzato alcun filamento specifico per il " +#~ "supporto e viene utilizzato il filamento attuale." #~ msgid "" #~ "Filament to print support interface. 0 means no specific filament for " #~ "support interface and current filament is used" #~ msgstr "" -#~ "This is the filament to print support interfaces. 0 means no specific " -#~ "filament for support interfaces and the current filament is used" +#~ "Questo è il filamento per stampare le interfacce di supporto. 0 significa " +#~ "che non viene utilizzato alcun filamento specifico per le interfacce di " +#~ "supporto e viene utilizzato il filamento corrente" #~ msgid "Filaments Selection" -#~ msgstr "Filaments selection" +#~ msgstr "Selezione dei filamenti" #~ msgid "Finish" -#~ msgstr "Finish" +#~ msgstr "Fine" #~ msgid "Finished" #~ msgstr "Finito" #~ msgid "Fix model locally" -#~ msgstr "Fix model locally" +#~ msgstr "Correggi il modello localmente" #~ msgid "Fix model through cloud" -#~ msgstr "Fix model through cloud" +#~ msgstr "Correggi il modello tramite cloud" #~ msgid "Flushed filament" -#~ msgstr "Flushed filament" +#~ msgstr "Spurgo filamento" #~ msgid "" #~ "Force cooling fan to be specific speed when overhang degree of printed " #~ "part exceeds this value. Expressed as percentage which indicides how much " #~ "width of the line without support from lower layer" #~ msgstr "" -#~ "This forces the cooling fan to use a specific speed when overhang degrees " -#~ "of parts exceed the set value. It is expressed as percentage which " -#~ "indicates how much line is acceptable without support from lower layers." +#~ "Forza la ventola di raffreddamento a utilizzare una velocità specifica " +#~ "quando i gradi di sporgenza delle parti superano il valore impostato. È " +#~ "espresso in percentuale e indica quanta linea è accettabile senza il " +#~ "supporto dei layers." #~ msgid "Fragment Filter" -#~ msgstr "Fragment Filter" +#~ msgstr "Filtro frammentato" #~ msgid "Fragment area" -#~ msgstr "Fragment area" +#~ msgstr "Area frammentata" #~ msgid "Fragment filter" -#~ msgstr "Fragment filter" +#~ msgstr "Filtro frammentato" + +#~ msgid "G-code" +#~ msgstr "G-code" #~ msgid "" #~ "Green represents that AMS humidity is normal, orange and red represent " #~ "that humidity is too high.(Lower the better)" #~ msgstr "" -#~ "Green represents that AMS humidity is normal, and orange and red " -#~ "represent that humidity is too high. (the lower, the better)" +#~ "Il verde indica che l'umidità dell'AMS è normale, l'arancione e il rosso " +#~ "rappresenta un'umidità elevata. (più basso è, meglio è)." #~ msgid "" #~ "Heat the nozzle to target \n" #~ "temperature" -#~ msgstr "" -#~ "Heat the nozzle to the target \n" -#~ "temperature" +#~ msgstr "Riscalda il nozzle alla temperatura" #~ msgid "Heat the nozzle to target temperature" -#~ msgstr "Heat the nozzle to target temperature" +#~ msgstr "Riscalda il nozzle alla temperatura" #~ msgid "Height:" -#~ msgstr "Height:" +#~ msgstr "Altezza:" #~ msgid "" #~ "Height of the clearance cylinder around extruder. Used as input of auto-" #~ "arrange to avoid collision when print object by object" #~ msgstr "" -#~ "Height of the clearance cylinder around extruder: used as input for auto-" -#~ "arranging to avoid collisions when printing object by object" +#~ "Altezza area cilindrica di sicurezza attorno all'estrusore: utilizzata " +#~ "come input per la disposizione automatica per evitare collisioni durante " +#~ "la stampa oggetto per oggetto" #~ msgid "" #~ "If enabled, a timelapse video will be generated for each print. After " @@ -9553,94 +9669,116 @@ msgstr "" #~ "melt filament may leak from the nozzle during the process of taking a " #~ "snapshot, prime tower is required for nozzle priming." #~ msgstr "" -#~ "If enabled, a timelapse video will be generated for each print. After " -#~ "each layer is printed, the toolhead will move to the excess chute, and " -#~ "then a snapshot is taken with the chamber camera. All of these snapshots " -#~ "are composed into a timelapse video when printing completes. Since the " -#~ "melted filament may leak from the nozzle during the process of taking a " -#~ "snapshot, a prime tower is required for nozzle priming." +#~ "Se abilitato, verrà generato un video in timelapse per ogni stampa. Dopo " +#~ "la stampa di ogni layer, la testa di stampa si sposta sullo scivolo, " +#~ "quindi viene scattata un'istantanea con la fotocamera della camera. Tutte " +#~ "queste istantanee vengono composte in un video timelapse al termine della " +#~ "stampa. Poiché il filamento fuso può fuoriuscire dal nozzle durante il " +#~ "processo di acquisizione di un'istantanea, è necessaria una prime tower " +#~ "per la pulizia del nozzle." #~ msgid "Import 3MF/STL/STEP/OBJ/AMF" -#~ msgstr "Import 3MF/STL/STEP/OBJ/AMF" +#~ msgstr "Importa 3MF/STL/STEP/OBJ/AMF" #~ msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files." -#~ msgstr "Import geometry data from STL/STEP/3MF/OBJ/AMF files." +#~ msgstr "Importa dati geometrici da file STL/STEP/3MF/OBJ/AMF." #~ msgid "In the calibration of extrusion flow" -#~ msgstr "In the calibration of extrusion flow" +#~ msgstr "Nella calibrazione del flusso di estrusione" #~ msgid "In the calibration of laser scanner" -#~ msgstr "In the calibration of laser scanner" +#~ msgstr "Nella calibrazione dello scanner laser" #~ msgid "Initialize failed [%d]!" -#~ msgstr "Initalization failed [%d]!" +#~ msgstr "Inizializzazione fallita [%d]!" #~ msgid "Initialize failed (Not supported without remote video tunnel)!" -#~ msgstr "Initialization failed (Not supported without remote video tunnel)!" +#~ msgstr "" +#~ "Inizializzazione fallita (non supportata senza tunnel video remoto)!" #~ msgid "Inner wall speed" -#~ msgstr "Inner wall speed" +#~ msgstr "Velocità parete interna" + +#~ msgid "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." +#~ msgstr "" +#~ "Sembra che l'oggetto %s abbia regioni completamente fluttuanti. " +#~ "Riorientare l'oggetto o attivare la generazione di supporto." + +#~ msgid "" +#~ "It seems object %s has large overhangs. Please enable support generation." +#~ msgstr "" +#~ "Sembra che l'oggetto %s abbia grandi sporgenze. Abilita la generazione " +#~ "del supporto." #~ msgid "" #~ "It seems object %s needs support to print. Please enable support " #~ "generation." #~ msgstr "" -#~ "It seems object %s needs support to print. Please enable support " -#~ "generation." +#~ "Sembra che l'oggetto %s abbia bisogno di supporto per la stampa. Abilita " +#~ "la generazione del supporto." + +#~ msgid "Keep lower part" +#~ msgstr "Mantieni parte inferiore" + +#~ msgid "Keep upper part" +#~ msgstr "Mantieni parte superiore" #~ msgid "Layer Time(log): " -#~ msgstr "Layer Time(log): " +#~ msgstr "Tempo layer(log): " #~ msgid "Layer Time (log)" -#~ msgstr "Layer Time (log)" +#~ msgstr "Tempo layer (log)" #~ msgid "Layers and Perimeters" -#~ msgstr "Layers and Perimeters" +#~ msgstr "Layers e Perimetri" #~ msgid "Leaving Seam painting" -#~ msgstr "Leaving Seam Painting" +#~ msgstr "Lascia pittura giunzione" #~ msgid "Line type" -#~ msgstr "Line type" +#~ msgstr "Tipo linea" #~ msgid "Loading user presets..." -#~ msgstr "Loading user presets..." +#~ msgstr "Caricamento dei preset utente..." #~ msgid "Management" -#~ msgstr "Management" +#~ msgstr "Gestione" #~ msgid "Max travel detour distance" -#~ msgstr "Max travel detour distance" +#~ msgstr "Distanza massima di spostamento" #~ msgid "" #~ "Maximum detour distance for avoiding crossing wall. Don't detour if the " #~ "detour distance is large than this value" #~ msgstr "" -#~ "Maximum detour distance for avoiding travel across walls. If the distance " -#~ "is larger than this value, there will be no detour." +#~ "Distanza massima di deviazione per evitare di attraversare le pareti. Se " +#~ "la distanza è maggiore di questo valore, non ci sarà alcuna deviazione." #~ msgid "Modify" -#~ msgstr "Modify" +#~ msgstr "Modifica" #~ msgid "Module" -#~ msgstr "Module" +#~ msgstr "Modulo" #~ msgid "Monitoring" -#~ msgstr "Monitoring" +#~ msgstr "Monitora" #~ msgid "Monitoring Recording" -#~ msgstr "Monitoring Recording" +#~ msgstr "Monitoraggio registrazione" #~ msgid "NO AMS" #~ msgstr "NO AMS" #~ msgid "Not supported." -#~ msgstr "Not supported." +#~ msgstr "Non supportato." #~ msgid "" #~ "Note : The location of IP and access code on the machine is as follows :" #~ msgstr "" -#~ "Note: The location of IP and access code on the machine is as follows:" +#~ "Nota: la posizione dell'IP e del codice di accesso sulla macchina è la " +#~ "seguente:" #~ msgid "Open &PrusaSlicer" #~ msgstr "Apri &PrusaSlicer" @@ -9652,84 +9790,87 @@ msgstr "" #~ msgstr "File di output" #~ msgid "P1P General Settings - WLAN in the sidebar of the main screen" -#~ msgstr "P1P General Settings - WLAN in the sidebar of the main screen" +#~ msgstr "" +#~ "P1P Impostazioni generali - WLAN nella barra laterale della schermata " +#~ "principale" #~ msgid "Paint-on seam editing" -#~ msgstr "Paint-on seam editing" +#~ msgstr "Modifica delle giunzioni" #~ msgid "Part Cooling" -#~ msgstr "Part Cooling" +#~ msgstr "Raffreddamento Oggetto" #~ msgid "Pause(heated bed temperature error)" -#~ msgstr "Pause(heated bed temperature error)" +#~ msgstr "Pausa (errore temperatura piano riscaldato)" #~ msgid "Pause(hotend temperature error)" -#~ msgstr "Pause(hotend temperature error)" +#~ msgstr "Pausa (errore temperatura hotend)" #~ msgid "Pause(toolhead shell off)" -#~ msgstr "Pause(toolhead shell off)" +#~ msgstr "Pausa (cover testina dello strumento disattivato)" #~ msgid "Per object edit" -#~ msgstr "Per Object Edit" +#~ msgstr "Modifica per oggetto" #~ msgid "Plate %d: %s does not support filament %s\n" -#~ msgstr "Plate %d: %s does not support filament %s\n" +#~ msgstr "Piatto %d: %s non supporta il filamento %s\n" #~ msgid "Plate %d: %s does not support filament %s.\n" -#~ msgstr "Plate %d: %s does not support filament %s.\n" +#~ msgstr "Piatto %d: %s non supporta il filamento %s.\n" #~ msgid "Plate %d: %s does not support filament %s (%s)." -#~ msgstr "Plate %d: %s does not support filament %s (%s)." +#~ msgstr "Piatto %d: %s non supporta il filamento %s (%s)." #~ msgid "Plate %d: %s does not support filament %s (%s).\n" -#~ msgstr "Plate %d: %s does not support filament %s (%s).\n" +#~ msgstr "Piatto %d: %s non supporta il filamento %s (%s).\n" #~ msgid "Please Fill Task Report." -#~ msgstr "Please fill task report." +#~ msgstr "Compila il rapporto sull'attività." #~ msgid "" #~ "Please check the following infomation and click Confirm to continue " #~ "sending print:\n" #~ msgstr "" -#~ "Please check the following infomation and click Confirm to continue " -#~ "sending print:\n" +#~ "Controlla le seguenti informazioni e fai clic su Conferma per continuare " +#~ "a inviare la stampa:\n" #~ msgid "Please fill report first." -#~ msgstr "Please fill report first." +#~ msgstr "Compila prima il rapporto." #~ msgid "Please upgrade your printer first" -#~ msgstr "Please update your printer first" +#~ msgstr "Prima aggiorna la stampante" #~ msgid "Position:" -#~ msgstr "Position:" +#~ msgstr "Posizione:" #~ msgid "" #~ "Preview only mode:\n" #~ "The loaded file contains gcode only." #~ msgstr "" -#~ "Preview only mode:\n" -#~ "The loaded file contains G-code only." +#~ "Modalità solo anteprima:\n" +#~ "Il file caricato contiene solo G-code." #~ msgid "Preview only mode for gcode file." -#~ msgstr "Preview only mode for G-code file." +#~ msgstr "Modalità solo anteprima per il file G-code." #~ msgid "" #~ "Prime tower is required by timelapse. Do you want to enable both of them?" -#~ msgstr "" -#~ "Prime tower is required by timelapse. Do you want to enable both of them?" +#~ msgstr "Prime Tower è richiesta per il timelapse. Vuoi abilitarli entrambi?" #~ msgid "" #~ "Prime tower is required by timeplase. Are you sure you want to disable " #~ "both of them?" #~ msgstr "" -#~ "Prime tower is required by timeplase. Are you sure you want to disable " -#~ "both of them?" +#~ "Prime Tower è richiesto da timeplase. Sei sicuro di volerli disabilitare " +#~ "entrambi?" #~ msgid "Printer Selection" -#~ msgstr "Printer Selection" +#~ msgstr "Seleziona stampante" #~ msgid "Printer firmware does not support material = >ams slot mapping." -#~ msgstr "Printer firmware does not support material = > AMS slot mapping." +#~ msgstr "" +#~ "Il firmware stampante non supporta la mappatura degli slot materiali = > " +#~ "AMS." #~ msgid "" #~ "Purging after filament change will be done inside objects' infills. This " @@ -9737,24 +9878,23 @@ msgstr "" #~ "are printed with transparent filament, the mixed color infill will be " #~ "seen outside" #~ msgstr "" -#~ "Purging after filament change will be done inside objects' infill. This " -#~ "may lower the amount of waste and decrease the print time. If the walls " -#~ "are printed with transparent filament, the mixed color infill will be " -#~ "visible." +#~ "Lo spurgo dopo il cambio filamento verrà eseguito all'interno del " +#~ "riempimento oggetti. Ciò può ridurre la quantità di rifiuti e ridurre il " +#~ "tempo di stampa. Se le pareti sono stampate con filamenti trasparenti, il " +#~ "riempimento a colori misti sarà visibile." #~ msgid "" #~ "Purging after filament change will be done inside objects' support. This " #~ "may lower the amount of waste and decrease the print time" #~ msgstr "" -#~ "Purging after filament change will be done inside objects' support. This " -#~ "may lower the amount of waste and decrease the print time." +#~ "Lo spurgo dopo il cambio del filamento verrà eseguito all'interno del " +#~ "supporto degli oggetti. Ciò può ridurre la quantità di rifiuti e ridurre " +#~ "il tempo di stampa." #~ msgid "" #~ "Push new filament \n" #~ "into extruder" -#~ msgstr "" -#~ "Push new filament \n" -#~ "into extruder" +#~ msgstr "Inserisci nuovo filamento nell'estrusore" #~ msgid "" #~ "Record timelapse video of printing without showing toolhead. In this mode " @@ -9762,243 +9902,285 @@ msgstr "" #~ "snapshot is taken with the chamber camera. When printing finishes a " #~ "timelapse video is composed of all the snapshots." #~ msgstr "" -#~ "Record timelapse video of printing without showing the toolhead. In this " -#~ "mode the toolhead docks near the excess chute at each layer change, and " -#~ "then a snapshot is taken with the chamber camera. When printing finishes, " -#~ "a timelapse video is created from all the snapshots." +#~ "Registra un video timelapse della stampa senza mostrare la testa di " +#~ "stampa. In questa modalità, la testa di stampa si aggancia vicino allo " +#~ "scivolo di scarico ad ogni cambio di layer, quindi viene scattata " +#~ "un'istantanea con la fotocamera della camera. Al termine della stampa, " +#~ "viene creato un video timelapse da tutte le istantanee." #~ msgid "Reduce Triangles" -#~ msgstr "Reduce Triangles" +#~ msgstr "Riduci triangoli" #~ msgid "Reload item" -#~ msgstr "Reload item" +#~ msgstr "Ricarica oggetto" #~ msgid "Reload items" -#~ msgstr "Reload items" +#~ msgstr "Ricarica oggetti" #~ msgid "Repair" #~ msgstr "Ripara" #~ msgid "Repair the model's meshes if it is non-manifold mesh" -#~ msgstr "Repair the model’s meshes if they are non-manifold." +#~ msgstr "Ripara le maglie del modello se sono prive di collettore." #~ msgid "Report" -#~ msgstr "Report" +#~ msgstr "Rapporto" #~ msgid "Rotation:" -#~ msgstr "Rotation:" +#~ msgstr "Rotazione:" #~ msgid "Save configuration as:" #~ msgstr "Salva configurazione come:" #~ msgid "Select Bed Type" -#~ msgstr "Select Bed Type" +#~ msgstr "Seleziona tipo di Piatto" #~ msgid "Sending" -#~ msgstr "Sending" +#~ msgstr "Invio…" #~ msgid "Set pen size" -#~ msgstr "Set pen size" +#~ msgstr "Imposta dimensioni penna" #~ msgid "Shift + Any arrow" -#~ msgstr "Shift + Any arrow" +#~ msgstr "Shift + Freccia qualsiasi" #~ msgid "Shift + Mouse wheel" -#~ msgstr "Shift + Mouse wheel" +#~ msgstr "Shift + Rotella mouse" #~ msgid "Show Log" -#~ msgstr "Show Log" +#~ msgstr "Mostra Registro" #~ msgid "Show Model Mesh(TODO)" -#~ msgstr "Show Model Mesh(TODO)" +#~ msgstr "Mostra Mesh Modello(TODO)" #~ msgid "Show Model Shadow(TODO)" -#~ msgstr "Show Model Shadow(TODO)" +#~ msgstr "Mostra Ombra Modello(TODO)" #~ msgid "Show Printable Box(TODO)" -#~ msgstr "Show Printable Box(TODO)" +#~ msgstr "Mostra casella stampabile (TODO)" #~ msgid "Spaghetti Detection" -#~ msgstr "Spaghetti Detection" +#~ msgstr "Rilevamento spaghetti" #~ msgid "Spaghetti and Excess Chute Pileup Detection" -#~ msgstr "Spaghetti and Excess Chute Pileup Detection" +#~ msgstr "Rilevato Spaghetti o Accumulo Scarico" #~ msgid "Spiral mode" -#~ msgstr "Spiral/Vase mode" +#~ msgstr "Modalità Spirale/Vaso" #~ msgid "" #~ "Spiral mode only works when wall loops is 1, \n" #~ "support is disabled, top shell layers is 0 and sparse infill density is " #~ "0\n" #~ msgstr "" -#~ "Spiral (vase) mode only works when wall loops is set to 1, \n" -#~ "support is disabled, top shell layers is 0, and sparse infill density is " -#~ "0\n" +#~ "La modalità spirale (vaso) funziona solo quando i cicli di parete sono " +#~ "impostati su 1, Il supporto è disabilitato, il layer del guscio è 0, e la " +#~ "densità riempimento è 0\n" + +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" +#~ msgstr "" +#~ "La modalità spirale funziona solo quando il loop parete è 1, il supporto " +#~ "è disabilitato, i layers superiori del guscio sono 0, la densità " +#~ "riempimento è 0 e il tipo timelapse è tradizionale" + +#~ msgid "Start" +#~ msgstr "Inizia" #~ msgid "Stop printing when Spaghetti or Excess Chute Pileup is detected" -#~ msgstr "Stop printing when Spaghetti or Excess Chute Pileup is detected" +#~ msgstr "" +#~ "Ferma la stampa quando viene rilevato un accumulo di spaghetti o un " +#~ "accumulo nello scarico." #~ msgid "Stop printing when spaghetti detected" -#~ msgstr "Stop printing when spaghetti is detected" +#~ msgstr "Ferma la stampa quando vengono rilevati degli spaghetti" #~ msgid "Successfully sent.Will automatically jump to the device page in %s s" #~ msgstr "" -#~ "Successfully sent. Will automatically jump to the device page in %s s" +#~ "Inviato con successo. Salta automaticamente alla pagina del dispositivo " +#~ "in %s" #~ msgid "" #~ "Successfully sent. Will automatically jump to the device page in %s s" #~ msgstr "" -#~ "Successfully sent. Will automatically jump to the device page in %s s" +#~ "Inviato con successo. Salta automaticamente alla pagina del dispositivo " +#~ "in %s" #~ msgid "Suggestion: Actual Volume in range [%d, %d]" -#~ msgstr "Suggestion: Actual Volume in range [%d, %d]" +#~ msgstr "Suggerimento: volume attuale nell'intervallo [%d, %d]" + +#~ msgid "Support base" +#~ msgstr "Supporto base" #~ msgid "" #~ "Support layer uses layer height independent with object layer. This is to " #~ "support custom support gap,but may cause extra filament switches if " #~ "support is specified as different extruder with object" #~ msgstr "" -#~ "The support layer uses layer height independent of object layers. This is " -#~ "to support custom support gaps, but may cause extra filament switches if " -#~ "support is specified as a different filament from the object." +#~ "Il layer di supporto utilizza l'altezza del layer indipendentemente dai " +#~ "layer oggetto. Questo serve a supportare i gap dei supporti " +#~ "personalizzati, ma può causare scambi di filamento extra se il supporto è " +#~ "specificato come filamento diverso da quello dell'oggetto." + +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." +#~ msgstr "" +#~ "Il layer supporti utilizzano l'altezza del layer indipendente dal layer " +#~ "oggetto. Questo per supportare la personalizzazione dello z-gap e " +#~ "risparmiare tempo di stampa." #~ msgid "" #~ "Switch to rectilinear pattern?\n" #~ "Yes - switch to rectilinear pattern automaticlly\n" #~ "No - reset density to default non 100% value automaticlly\n" #~ msgstr "" -#~ "Switch to rectilinear pattern?\n" -#~ "Yes - switch to rectilinear pattern automaticlly\n" -#~ "No - reset density to default non 100% value automaticlly\n" +#~ "Passare alla trama rettilinea?\n" +#~ "Sì - passa automaticamente alla trama rettilinea\n" +#~ "No - ripristina automaticamente la densità al valore predefinito non " +#~ "100%\n" #~ msgid "" #~ "Switch to zig-zag pattern?\n" #~ "Yes - switch to zig-zag pattern automaticlly\n" #~ "No - reset density to default non 100% value automaticlly\n" #~ msgstr "" -#~ "Switch to zig-zag pattern?\n" -#~ "Yes - Switch to zig-zag pattern automatically\n" -#~ "No - Reset density to default non-100% value automatically\n" +#~ "Passa alla trama zig-zag?\n" +#~ "Sì - passa automaticamente alla trama zig-zag\n" +#~ "No - ripristina automaticamente la densità al valore predefinito non " +#~ "100%\n" #~ msgid "Swith cloud environment, Please login again!" -#~ msgstr "Cloud environment has switched; please login again!" +#~ msgstr "Cambia ambiente cloud; Effettua nuovamente il login!" #~ msgid "Sync material list from AMS" -#~ msgstr "Sync material list from AMS" +#~ msgstr "Sincronizza l'elenco materiali da AMS" + +#~ msgid "The %s filament is too soft to be used with the AMS" +#~ msgstr "Filamento %s troppo morbido per essere usato con l'AMS" #~ msgid "" #~ "The 3mf's version %s is newer than %s's version %s, Found following keys " #~ "unrecognized:\n" #~ msgstr "" -#~ "The 3mf file's version %s is newer than %s's version %s, Found the " -#~ "following unrecognized keys:\n" +#~ "Versione del 3mf %s è più recente %s della versione %s, trovate le " +#~ "seguenti chiavi non riconosciute:\n" #~ msgid "" #~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade " #~ "your software.\n" #~ msgstr "" -#~ "The 3mf's version %s is newer than %s's version %s; it is suggested to " -#~ "update your software.\n" +#~ "Versione del 3mf %s è più recente della versione %s di %s, si consiglia " +#~ "di aggiornare il software.\n" #~ msgid "The 3mf is not from Bambu lab, load geometry data only." -#~ msgstr "The 3mf is not from Bambu lab, loading geometry data only." +#~ msgstr "Il 3mf non proviene da Bambu Lab, carica solo dati geometrici." #~ msgid "The Config is not compatible and can not be loaded." -#~ msgstr "The configuration is not compatible and cannot be loaded!" +#~ msgstr "La configurazione non è compatibile e non può essere caricata!" + +#~ msgid "" +#~ "The P1P printer does not support smooth timelapse, use traditional " +#~ "timelapse instead." +#~ msgstr "" +#~ "La stampante P1P non supporta il timelapse fluido; utilizza invece il " +#~ "timelapse tradizionale." #~ msgid "" #~ "The firmware versions of printer and AMS are too low.Please update to the " #~ "latest version before sending the print job" #~ msgstr "" -#~ "The firmware versions of the printer and AMS are too low. Please update " -#~ "them to the latest version before sending any print jobs." +#~ "Le versioni firmware stampante e AMS sono troppo basse. Aggiornali alla " +#~ "versione più recente prima di inviare qualsiasi lavoro di stampa." #~ msgid "" #~ "The flush volume is less than the minimum value and will be automatically " #~ "set to the minimum value." #~ msgstr "" -#~ "The flush volume is less than the minimum value and will be automatically " -#~ "set to the minimum value." +#~ "Il volume di spurgo è inferiore al valore minimo e verrà impostato " +#~ "automaticamente sul valore minimo." #~ msgid "" #~ "The model has overlapping or self-intersecting facets. I tried to repair " #~ "it, however you might want to check the results or repair the input file " #~ "and retry." #~ msgstr "" -#~ "The model has overlapping or self-intersecting facets. Repair was " -#~ "attempted, however we recommend checking the results or repairing the " -#~ "input file and retrying." +#~ "Il modello presenta sfaccettature sovrapposte o autointersecanti. È stata " +#~ "tentata una ripaparazione, tuttavia si consiglia di controllare i " +#~ "risultati o di riparare il file di input e riprovare." #~ msgid "" #~ "The printer type used to generate G-code is not the same type as the " #~ "currently selected physical printer. It is recommend to re-slice by " #~ "selecting the same printer type.\n" #~ msgstr "" -#~ "The printer type used to generate G-code is not the same type as the " -#~ "currently selected physical printer. It is recommend to re-slice by " -#~ "selecting the same printer type.\n" +#~ "Il tipo di stampante utilizzato per generare il G-code non è lo stesso " +#~ "tipo della stampante attualmente selezionata. Si consiglia di " +#~ "risuddividere selezionando lo stesso tipo di stampante.\n" #~ msgid "" #~ "This controls brim position including outer side of models, inner side of " #~ "holes or both. Auto means both the brim position and brim width is " #~ "analysed and calculated automatically" #~ msgstr "" -#~ "This controls brim position including outer side of models, inner side of " -#~ "holes, or both. Auto means both the brim position and brim width are " -#~ "analyzed and calculated automatically." +#~ "Controlla la posizione del brim, compreso il lato esterno dei modelli, il " +#~ "lato interno dei fori o entrambi. Auto significa che sia la posizione che " +#~ "la larghezza del brim vengono analizzate e calcolate automaticamente." #~ msgid "" #~ "This object will be used to purge the nozzle after a filament change to " #~ "save filament and decrease the print time. Colours of the objects will be " #~ "mixed as a result" #~ msgstr "" -#~ "This object will be used to purge the nozzle after a filament change to " -#~ "save filament and decrease the print time. Colors of the objects will be " -#~ "mixed as a result." +#~ "Questo oggetto viene utilizzato per spurgare il nozzle dopo un cambio " +#~ "filamento per risparmiare filamento e ridurre il tempo di stampa. I " +#~ "colori degli oggetti saranno quindi mescolati." #~ msgid "" #~ "This setting specifies whether to add infill inside large hollows of tree " #~ "support" #~ msgstr "" -#~ "This setting specifies whether to add infill inside large hollows of tree " -#~ "support." +#~ "Questa specifica se aggiungere un riempimento all'interno di ampie cavità " +#~ "del supporto ad albero." #~ msgid "" #~ "This setting stands for how much volume of filament can be melted and " #~ "extruded per second. Printing speed is limited by max volumetric speed, " #~ "in case of too high and unreasonable speed setting. Zero means no limit" #~ msgstr "" -#~ "Use this to set the maximum volume of filament that can be melted and " -#~ "extruded per second. Printing speed is limited by maximum volumetric " -#~ "speed if settings are unreasonably high. 0 means there is no limit." +#~ "Utilizzalo per impostare il volume massimo di filamento che può essere " +#~ "fuso ed estruso al secondo. La velocità di stampa è limitata dalla " +#~ "velocità volumetrica massima se le impostazioni sono irragionevolmente " +#~ "alte. 0 significa che non vi è alcun limite." #~ msgid "Timelapse Wipe Tower" -#~ msgstr "Timelapse Wipe Tower" +#~ msgstr "Timelapse Torre di pulizia" #~ msgid "Timelapse without toolhead" -#~ msgstr "Timelapse without toolhead" +#~ msgstr "Timelapse senza testa strumenti" #~ msgid "Translation" #~ msgstr "Traduzione" #~ msgid "Tree support with infill" -#~ msgstr "Tree support with infill" +#~ msgstr "Riempimento supporti ad albero" #~ msgid "Unable to connect printer" -#~ msgstr "Unable to connect printer" +#~ msgstr "Impossibile collegare la stampante" #~ msgid "Unable to create zip file" -#~ msgstr "Unable to create zip file" +#~ msgstr "Impossibile creare un file zip" #~ msgid "Uploading" #~ msgstr "Caricamento" #~ msgid "User pause" -#~ msgstr "User pause" +#~ msgstr "Pausa utente" #~ msgid "Waiting" -#~ msgstr "Waiting" +#~ msgstr "In attesa…" #~ msgid "" #~ "When recording timelapse without toolhead, it is recommended to add a " @@ -10006,10 +10188,11 @@ msgstr "" #~ "by right-click the empty position of build plate and choose \"Add " #~ "Primitive\"->\"Timelapse Wipe Tower\".\n" #~ msgstr "" -#~ "When recording timelapse without toolhead, it is recommended to add a " -#~ "\"Timelapse Wipe Tower\" \n" -#~ "by right-click the empty position of build plate and choose \"Add " -#~ "Primitive\"->\"Timelapse Wipe Tower\".\n" +#~ "Quando si registra un timelapse senza testa di satmpa, si consiglia di " +#~ "aggiungere un \"Timelapse Torre di pulizia\"\n" +#~ "facendo clic con il pulsante destro del mouse sulla posizione vuota del " +#~ "piatto e scegli \"Aggiungi primitiva\" ->\"Timelapse Torre di pulizia" +#~ "\"».\n" #~ msgid "" #~ "When sparse infill density is low, the internal solid infill or internal " @@ -10019,80 +10202,93 @@ msgstr "" #~ "specific thickness, so that better archor can be provided for internal " #~ "bridge. 0 means disable this feature" #~ msgstr "" -#~ "When sparse infill density is low, the internal solid infill or internal " -#~ "bridge may have no anchor at the end of the line. This causes falling and " -#~ "bad quality when printing internal solid infill. When enable this " -#~ "feature, loop paths will be added to the sparse fill of the lower layers " -#~ "for specific thickness, so that better anchors can be provided for " -#~ "internal bridges. 0 means disable this feature" +#~ "Quando la densità riempimento è bassa, il riempimento solido interno o il " +#~ "ponte interno potrebbero non avere alcun ancoraggio alla fine della " +#~ "linea. Ciò causa cadute e cattiva qualità durante la stampa del " +#~ "riempimento solido interno. Quando si abilita questa funzione, i percorsi " +#~ "ad anello verranno aggiunti al riempimento dei layer inferiori per uno " +#~ "spessore specifico, in modo da poter fornire ancoraggi migliori per i " +#~ "ponti interni. 0 significa disabilitare questa funzione" + +#~ msgid "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." +#~ msgstr "" +#~ "Quando si utilizza materiale di supporto per l'interfaccia supporto, si " +#~ "consigliano le seguenti impostazioni:\n" +#~ "0 distanza superiore, 0 distanza tra interfacce, trama concentrica." #~ msgid "" #~ "X1 General Settings - Network Settings in the side bar of X1 main screen" #~ msgstr "" -#~ "X1 General Settings - Network Settings in the side bar of the X1 main " -#~ "screen." +#~ "Impostazioni generali X1 - Impostazioni rete nella barra laterale della " +#~ "schermata principale X1." #~ msgid "" #~ "You have changed some preset settings. \n" #~ "Would you like to keep these changed settings after switching preset?" #~ msgstr "" -#~ "You have changed some preset settings. \n" -#~ "Would you like to keep these changed settings after switching presets?" +#~ "Sono stati modificati alcuni preset preimpostati. \n" +#~ "Vuoi mantenere le impostazioni modificate dopo aver cambiato i preset?" #~ msgid "Zig zag" #~ msgstr "Zig zag" #~ msgid "(Sort)" -#~ msgstr "(Sort)" +#~ msgstr "(Ordina)" #~ msgid " Object:" -#~ msgstr " Object:" +#~ msgstr "Oggetto:" #~ msgid "" #~ " is too close to exclusion area, there may be collisions when printing.\n" #~ msgstr "" -#~ " is too close to an exclusion area; there may be collisions when " -#~ "printing.\n" +#~ " è troppo vicino all'area di esclusione, potrebbero verificarsi " +#~ "collisioni durante la stampa.\n" #~ msgid "" #~ " is too close to exclusion area, there will be collisions when printing.\n" #~ msgstr "" -#~ " is too close to an exclusion area, there will be collisions when " -#~ "printing.\n" +#~ " è troppo vicino a un'area di esclusione, si verificheranno collisioni " +#~ "durante la stampa.\n" #~ msgid " is too close to others, there may be collisions when printing.\n" -#~ msgstr " is too close to others; there may be collisions when printing.\n" +#~ msgstr "" +#~ " è troppo vicino agli altri; potrebbero verificarsi delle collisioni " +#~ "durante la stampa.\n" #~ msgid " is too close to others, there will be collisions when printing.\n" -#~ msgstr " is too close to others, there will be collisions when printing.\n" +#~ msgstr "" +#~ " è troppo vicino agli altri, si verificheranno collisioni durante la " +#~ "stampa.\n" #~ msgid "" #~ " will be closed before creating a new model. Do you want to continue?" -#~ msgstr "" -#~ " will be closed before creating a new model. Do you want to continue?" +#~ msgstr " verrà chiuso prima di creare un nuovo modello. Vuoi continuare?" #~ msgid "default value" -#~ msgstr "default value" +#~ msgstr "Valore predefinito" #~ msgid "hybrid(auto)" -#~ msgstr "hybrid(auto)" +#~ msgstr "ibrido(auto)" #~ msgid "normal" -#~ msgstr "normal" +#~ msgstr "normale" #~ msgid "" #~ "normal(auto) and tree(auto) is used to generate support automatically. If " #~ "normal or tree is selected, only support enforcers are generated" #~ msgstr "" -#~ "normal(auto), hybrid(auto) and tree(auto) are used to generate support " -#~ "automatically. If normal or tree is selected, only support enforcers are " -#~ "generated." +#~ "normale(auto), ibrido(auto) e albero(auto) sono usati per generare " +#~ "automaticamente i supporti. Se si seleziona normale o albero, vengono " +#~ "generati solo i rinforzi del supporto." #~ msgid "preparing, export 3mf failed!" -#~ msgstr "preparing; exporting 3mf failed!" +#~ msgstr "preparazione; esportazione 3mf non riuscita!" #~ msgid "the 3mf is not compatible, load geometry data only!" -#~ msgstr "The 3mf is not compatible, loading geometry data only!" +#~ msgstr "Il 3mf non è compatibile, carica solo i dati della geometria!" #~ msgid "tree" -#~ msgstr "tree" +#~ msgstr "albero" diff --git a/bbl/i18n/ja/BambuStudio_ja.po b/bbl/i18n/ja/BambuStudio_ja.po index ef8be765f1..cf84fe2e5e 100644 --- a/bbl/i18n/ja/BambuStudio_ja.po +++ b/bbl/i18n/ja/BambuStudio_ja.po @@ -2,16 +2,13 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-04 14:45+0800\n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" +"POT-Creation-Date: 2023-04-06 08:26+0800\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Localazy (https://localazy.com)\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 3.2.2\n" msgid "Supports Painting" msgstr "サポートペイント" @@ -1881,14 +1878,14 @@ msgstr "ベッド温度" msgid "Max volumetric speed" msgstr "最大体積速度" -msgid "℃" -msgstr "" +msgid "\\u2103" +msgstr "u2103" msgid "Bed temperature" msgstr "ベッド温度" -msgid "mm³" -msgstr "mm³" +msgid "mm\\u00B3" +msgstr "mmu00B3" msgid "Start calibration" msgstr "開始" @@ -6910,6 +6907,9 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "プライムタワー上最小フラッシュ量" +msgid "mm³" +msgstr "mm³" + msgid "Filament load time" msgstr "フィラメントロード時間" @@ -8718,101 +8718,6 @@ msgstr "" "強度の向上\n" "壁面層数やインフィルの充填密度を増やして造形強度を向上できます。" -#~ msgid "" -#~ "Arachne engine only works when overhang slowing down is disabled.\n" -#~ "This may cause decline in the quality of overhang surface when print " -#~ "fastly" -#~ msgstr "" -#~ "Arachneを使用するには、オーハーハング減速を無効にする必要があります。従っ" -#~ "てオーバーハングの造形品質が劣る可能性があります。" - -#~ msgid "" -#~ "Disable overhang slowing down automatically? \n" -#~ "Yes - Enable arachne and disable overhang slowing down\n" -#~ "No - Give up using arachne this time" -#~ msgstr "" -#~ "オーバーハング減速を無効にしますか?\n" -#~ "はい - Arachneを有効し、オーバーハング減速を無効にする\n" -#~ "いいえ - Arachneを無効にします" - -#~ msgid "Start" -#~ msgstr "開始" - -#~ msgid "G-code" -#~ msgstr "G-code" - -#~ msgid "Backup" -#~ msgstr "バックアップ" - -#~ msgid "Backup interval" -#~ msgstr "時間間隔" - -#, c-format, boost-format -#~ msgid "The %s filament is too soft to be used with the AMS" -#~ msgstr "%sは柔らかい為AMSに使用できません" - -#, c-format, boost-format -#~ msgid "" -#~ "It seems object %s has completely floating regions. Please re-orient the " -#~ "object or enable support generation." -#~ msgstr "" -#~ "オブジェクト %s がプレートに接触していません。向きを調整するか、サポートを" -#~ "有効にしてください。" - -#, c-format, boost-format -#~ msgid "" -#~ "It seems object %s has large overhangs. Please enable support generation." -#~ msgstr "" -#~ "オブジェクト %s に大きなオーバーハングがあります、サポートを有効にしてくだ" -#~ "さい。" - -#~ msgid "\\u2103" -#~ msgstr "u2103" - -#~ msgid "mm\\u00B3" -#~ msgstr "mmu00B3" - -#~ msgid "" -#~ "Spiral mode only works when wall loops is 1, support is disabled, top " -#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " -#~ "traditional" -#~ msgstr "" -#~ "スパイラルモードを使用するには、壁面層数を1、サポートを無効、トップ面層数" -#~ "を0、充填密度を0にする必要があります" - -#~ msgid "Keep upper part" -#~ msgstr "上の部分を残す" - -#~ msgid "Keep lower part" -#~ msgstr "下の部分を残す" - -#~ msgid "AMS auto switch filament" -#~ msgstr "AMSフィラメント自動切替え" - -#~ msgid "" -#~ "When using support material for the support interface, We recommend the " -#~ "following settings:\n" -#~ "0 top z distance, 0 interface spacing, concentric pattern." -#~ msgstr "" -#~ "When using support material for the support interface, We recommend the " -#~ "following settings:\n" -#~ "0 top z distance, 0 interface spacing, concentric pattern." - -#~ msgid "" -#~ "The P1P printer does not support smooth timelapse, use traditional " -#~ "timelapse instead." -#~ msgstr "" -#~ "P1Pプリンターはスムージタイムラプスをサポートしません、通常タイムラプスに" -#~ "切替えます。" - -#~ msgid "Support base" -#~ msgstr "サポート基材" - -#~ msgid "" -#~ "Support layer uses layer height independent with object layer. This is to " -#~ "support customizing z-gap and save print time." -#~ msgstr "サポートの積層ピッチは独立で設定できます。" - #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -8835,6 +8740,9 @@ msgstr "" #~ msgid "AMSMaterialsSetting" #~ msgstr "AMS素材設定" +#~ msgid "AMS auto switch filament" +#~ msgstr "AMSフィラメント自動切替え" + #~ msgid "AWS PRE host" #~ msgstr "AWS PREホスト" @@ -8857,6 +8765,14 @@ msgstr "" #~ "プレートの境界を越えるか、高さ制限を超えるオブジェクトがあります、ご確認く" #~ "ださい" +#~ msgid "" +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly" +#~ msgstr "" +#~ "Arachneを使用するには、オーハーハング減速を無効にする必要があります。従っ" +#~ "てオーバーハングの造形品質が劣る可能性があります。" + #~ msgid "" #~ "Arachne engine only works when overhang slowing down is disabled.\n" #~ "This may cause decline in the quality of overhang surface when print " @@ -8880,6 +8796,12 @@ msgstr "" #~ msgid "Avoid crossing wall when travel" #~ msgstr "移動時に壁面を避ける" +#~ msgid "Backup" +#~ msgstr "バックアップ" + +#~ msgid "Backup interval" +#~ msgstr "時間間隔" + #~ msgid "" #~ "Bed exclude area that can't used as printable area in X-Y plane. For " #~ "example, the bottom left area which is used to cut filament in X1 when " @@ -8968,6 +8890,15 @@ msgstr "" #~ msgid "Device:" #~ msgstr "デバイス" +#~ msgid "" +#~ "Disable overhang slowing down automatically? \n" +#~ "Yes - Enable arachne and disable overhang slowing down\n" +#~ "No - Give up using arachne this time" +#~ msgstr "" +#~ "オーバーハング減速を無効にしますか?\n" +#~ "はい - Arachneを有効し、オーバーハング減速を無効にする\n" +#~ "いいえ - Arachneを無効にします" + #~ msgid "Display printable box" #~ msgstr "造形可能な境界を表示" @@ -9149,6 +9080,9 @@ msgstr "" #~ msgid "Fragment filter" #~ msgstr "断片フィルタ" +#~ msgid "G-code" +#~ msgstr "G-code" + #~ msgid "" #~ "Green represents that AMS humidity is normal, orange and red represent " #~ "that humidity is too high.(Lower the better)" @@ -9208,6 +9142,19 @@ msgstr "" #~ msgid "Inner wall speed" #~ msgstr "内壁速度" +#~ msgid "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." +#~ msgstr "" +#~ "オブジェクト %s がプレートに接触していません。向きを調整するか、サポートを" +#~ "有効にしてください。" + +#~ msgid "" +#~ "It seems object %s has large overhangs. Please enable support generation." +#~ msgstr "" +#~ "オブジェクト %s に大きなオーバーハングがあります、サポートを有効にしてくだ" +#~ "さい。" + #~ msgid "" #~ "It seems object %s needs support to print. Please enable support " #~ "generation." @@ -9215,6 +9162,12 @@ msgstr "" #~ "オブジェクト %s の造形にはサポートが必要なようです。サポートを有効にしてく" #~ "ださい。" +#~ msgid "Keep lower part" +#~ msgstr "下の部分を残す" + +#~ msgid "Keep upper part" +#~ msgstr "上の部分を残す" + #~ msgid "Layer Time(log): " #~ msgstr "積層時間 (log)" @@ -9449,6 +9402,17 @@ msgstr "" #~ "スパイラルモードを使用するには、壁面層数を1、サポートを無効、トップ面層数" #~ "を0、スパース インフィルの充填密度を0に変更する必要があります\n" +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" +#~ msgstr "" +#~ "スパイラルモードを使用するには、壁面層数を1、サポートを無効、トップ面層数" +#~ "を0、充填密度を0にする必要があります" + +#~ msgid "Start" +#~ msgstr "開始" + #~ msgid "Stop printing when Spaghetti or Excess Chute Pileup is detected" #~ msgstr "スパゲティや廃料口詰りを検出した場合、造形を停止します" @@ -9465,6 +9429,9 @@ msgstr "" #~ msgid "Suggestion: Actual Volume in range [%d, %d]" #~ msgstr "推奨ボリューム範囲 [%d, %d]" +#~ msgid "Support base" +#~ msgstr "サポート基材" + #~ msgid "" #~ "Support layer uses layer height independent with object layer. This is to " #~ "support custom support gap,but may cause extra filament switches if " @@ -9473,6 +9440,11 @@ msgstr "" #~ "サポートの積層ピッチを造形用積層ピッチと違う値を設定でき、カスタムサポート" #~ "ギャップを実現できますが、フィラメントの切替回数が増えます。" +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." +#~ msgstr "サポートの積層ピッチは独立で設定できます。" + #~ msgid "" #~ "Switch to rectilinear pattern?\n" #~ "Yes - switch to rectilinear pattern automaticlly\n" @@ -9494,6 +9466,9 @@ msgstr "" #~ msgid "Sync material list from AMS" #~ msgstr "AMSと素材を同期" +#~ msgid "The %s filament is too soft to be used with the AMS" +#~ msgstr "%sは柔らかい為AMSに使用できません" + #~ msgid "" #~ "The 3mf's version %s is newer than %s's version %s, Found following keys " #~ "unrecognized:\n" @@ -9515,6 +9490,13 @@ msgstr "" #~ msgid "The Config is not compatible and can not be loaded." #~ msgstr "構成データは互換性がない為ロードできませんでした" +#~ msgid "" +#~ "The P1P printer does not support smooth timelapse, use traditional " +#~ "timelapse instead." +#~ msgstr "" +#~ "P1Pプリンターはスムージタイムラプスをサポートしません、通常タイムラプスに" +#~ "切替えます。" + #~ msgid "" #~ "The firmware versions of printer and AMS are too low.Please update to the " #~ "latest version before sending the print job" @@ -9619,6 +9601,15 @@ msgstr "" #~ "能性があります。この機能を有効にする場合、指定された厚さでパスを追加されま" #~ "す。値が0の場合、この機能が無効になります。" +#~ msgid "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." +#~ msgstr "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." + #~ msgid "" #~ "X1 General Settings - Network Settings in the side bar of X1 main screen" #~ msgstr "一般設定" diff --git a/bbl/i18n/nl/BambuStudio_nl.po b/bbl/i18n/nl/BambuStudio_nl.po index 3aebdc89b1..985dc6b7f7 100644 --- a/bbl/i18n/nl/BambuStudio_nl.po +++ b/bbl/i18n/nl/BambuStudio_nl.po @@ -2,16 +2,13 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-04 14:45+0800\n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" +"POT-Creation-Date: 2023-04-06 08:26+0800\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Localazy (https://localazy.com)\n" "Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" -"X-Generator: Poedit 3.2.2\n" msgid "Supports Painting" msgstr "Onderteuning (Support) tekenen" @@ -1849,7 +1846,7 @@ msgstr "" "plaats daarvan worden ze toegeschreven in de bijbehorende codecommentaar." msgid "AMS Materials Setting" -msgstr "AMS Materials Setting" +msgstr "AMS Materiaal instellingen" msgid "Confirm" msgstr "Bevestigen" @@ -1940,14 +1937,14 @@ msgstr "Bed Temperatuur" msgid "Max volumetric speed" msgstr "Maximale volumetrische snelheid" -msgid "℃" -msgstr "" +msgid "\\u2103" +msgstr "\\ u2103" msgid "Bed temperature" msgstr "Printbed temperatuur" -msgid "mm³" -msgstr "mm³" +msgid "mm\\u00B3" +msgstr "mm\\u00B3" msgid "Start calibration" msgstr "Start" @@ -2009,7 +2006,7 @@ msgid "Disable AMS" msgstr "AMS uitschakelen" msgid "Print with the filament mounted on the back of chassis" -msgstr "Print with filament on an external spool" +msgstr "Print met filament op een externe spoel" msgid "Cabin humidity" msgstr "Vochtigheid in de cabine" @@ -4233,7 +4230,8 @@ msgid "Please correct them in the param tabs" msgstr "" msgid "The 3mf is not compatible, load geometry data only!" -msgstr "The 3mf is not compatible, loading geometry data only!" +msgstr "" +"Het 3mf bestand is niet compatibel, enkel de geometrische data wordt geladen!" msgid "Incompatible 3mf" msgstr "Onbruikbaar 3mf bestand" @@ -7285,6 +7283,9 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimale filament reiniging op de wipe tower" +msgid "mm³" +msgstr "mm³" + msgid "Filament load time" msgstr "Filament laadt tijd" @@ -9266,106 +9267,6 @@ msgstr "" "Wist je dat je meer wandlussen en een hogere dunne invuldichtheid kunt " "gebruiken om de sterkte van het model te verbeteren?" -#~ msgid "" -#~ "Arachne engine only works when overhang slowing down is disabled.\n" -#~ "This may cause decline in the quality of overhang surface when print " -#~ "fastly" -#~ msgstr "" -#~ "De Arachne-motor werkt alleen als vertraging van de overhang is " -#~ "uitgeschakeld. Dit kan leiden tot een achteruitgang van de kwaliteit van " -#~ "het overhangende oppervlak bij snel printen." - -#~ msgid "" -#~ "Disable overhang slowing down automatically? \n" -#~ "Yes - Enable arachne and disable overhang slowing down\n" -#~ "No - Give up using arachne this time" -#~ msgstr "" -#~ "Overhangvertraging automatisch uitschakelen?\n" -#~ "Ja - Arachne inschakelen en overhangvertraging uitschakelen\n" -#~ "Nee - Arachne niet gebruiken voor deze afdruk" - -#~ msgid "Start" -#~ msgstr "Starten" - -#~ msgid "G-code" -#~ msgstr "G-code" - -#~ msgid "Backup" -#~ msgstr "Backup" - -#~ msgid "Backup interval" -#~ msgstr "Backupinterval" - -#, c-format, boost-format -#~ msgid "The %s filament is too soft to be used with the AMS" -#~ msgstr "Het %s-filament is te zacht om te worden gebruikt met de AMS" - -#, c-format, boost-format -#~ msgid "" -#~ "It seems object %s has completely floating regions. Please re-orient the " -#~ "object or enable support generation." -#~ msgstr "" -#~ "Het lijkt erop dat object %s volledig zwevende gebieden heeft. " -#~ "Heroriënteer het object of schakel het genereren van ondersteuning in." - -#, c-format, boost-format -#~ msgid "" -#~ "It seems object %s has large overhangs. Please enable support generation." -#~ msgstr "" -#~ "Het lijkt erop dat object %s grote overhangen heeft. Schakel het " -#~ "genereren van ondersteuning in." - -#~ msgid "\\u2103" -#~ msgstr "\\ u2103" - -#~ msgid "mm\\u00B3" -#~ msgstr "mm\\u00B3" - -#~ msgid "" -#~ "Spiral mode only works when wall loops is 1, support is disabled, top " -#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " -#~ "traditional" -#~ msgstr "" -#~ "De spiraalmodus werkt alleen als de wandlussen 1 zijn, de ondersteuning " -#~ "is uitgeschakeld, de bovenste lagen 0 zijn, de sparse infill 0 is en het " -#~ "timelapse-type traditioneel is" - -#~ msgid "Keep upper part" -#~ msgstr "Bewaar het bovenstee deel" - -#~ msgid "Keep lower part" -#~ msgstr "Bewaar het onderste deel" - -#~ msgid "AMS auto switch filament" -#~ msgstr "AMS automatische filament overschakelen" - -#~ msgid "" -#~ "When using support material for the support interface, We recommend the " -#~ "following settings:\n" -#~ "0 top z distance, 0 interface spacing, concentric pattern." -#~ msgstr "" -#~ "Als u ondersteuningsmateriaal gebruikt voor de ondersteuningsinterface, " -#~ "raden we de volgende instellingen aan:\n" -#~ "0 op z afstand, 0 interface-afstand, concentrisch patroon." - -#~ msgid "" -#~ "The P1P printer does not support smooth timelapse, use traditional " -#~ "timelapse instead." -#~ msgstr "" -#~ "De P1P-printer ondersteunt geen soepele timelapse. Gebruik in plaats " -#~ "daarvan een traditionele timelapse." - -#~ msgid "Support base" -#~ msgstr "Ondersteuningsbasis" - -#~ msgid "" -#~ "Support layer uses layer height independent with object layer. This is to " -#~ "support customizing z-gap and save print time." -#~ msgstr "" -#~ "Ondersteuningslaag gebruikt laaghoogte-onafhankelijk met objectlaag. Dit " -#~ "is ter ondersteuning van het aanpassen van z-gap en om afdruktijd te " -#~ "besparen." - #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -9391,6 +9292,9 @@ msgstr "" #~ msgid "AMSMaterialsSetting" #~ msgstr "AMS Materiaal instellingen" +#~ msgid "AMS auto switch filament" +#~ msgstr "AMS automatische filament overschakelen" + #~ msgid "AWS PRE host" #~ msgstr "AWS PRE host" @@ -9414,6 +9318,15 @@ msgstr "" #~ "Los dit probleem op door het object geheel binnen of buiten de printplaat " #~ "te plaatsen." +#~ msgid "" +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly" +#~ msgstr "" +#~ "De Arachne-motor werkt alleen als vertraging van de overhang is " +#~ "uitgeschakeld. Dit kan leiden tot een achteruitgang van de kwaliteit van " +#~ "het overhangende oppervlak bij snel printen." + #~ msgid "" #~ "Arachne engine only works when overhang slowing down is disabled.\n" #~ "This may cause decline in the quality of overhang surface when print " @@ -9441,6 +9354,12 @@ msgstr "" #~ msgid "Avoid crossing wall when travel" #~ msgstr "Vermijd wanden tijdens het verplaatsen" +#~ msgid "Backup" +#~ msgstr "Backup" + +#~ msgid "Backup interval" +#~ msgstr "Backupinterval" + #~ msgid "" #~ "Bed exclude area that can't used as printable area in X-Y plane. For " #~ "example, the bottom left area which is used to cut filament in X1 when " @@ -9537,6 +9456,15 @@ msgstr "" #~ msgid "Device:" #~ msgstr "Apparaat:" +#~ msgid "" +#~ "Disable overhang slowing down automatically? \n" +#~ "Yes - Enable arachne and disable overhang slowing down\n" +#~ "No - Give up using arachne this time" +#~ msgstr "" +#~ "Overhangvertraging automatisch uitschakelen?\n" +#~ "Ja - Arachne inschakelen en overhangvertraging uitschakelen\n" +#~ "Nee - Arachne niet gebruiken voor deze afdruk" + #~ msgid "Display printable box" #~ msgstr "Toon printbare box" @@ -9740,6 +9668,9 @@ msgstr "" #~ msgid "Fragment filter" #~ msgstr "Fragmentfilter" +#~ msgid "G-code" +#~ msgstr "G-code" + #~ msgid "" #~ "Green represents that AMS humidity is normal, orange and red represent " #~ "that humidity is too high.(Lower the better)" @@ -9804,6 +9735,19 @@ msgstr "" #~ msgid "Inner wall speed" #~ msgstr "Binnenste wand snelheid" +#~ msgid "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." +#~ msgstr "" +#~ "Het lijkt erop dat object %s volledig zwevende gebieden heeft. " +#~ "Heroriënteer het object of schakel het genereren van ondersteuning in." + +#~ msgid "" +#~ "It seems object %s has large overhangs. Please enable support generation." +#~ msgstr "" +#~ "Het lijkt erop dat object %s grote overhangen heeft. Schakel het " +#~ "genereren van ondersteuning in." + #~ msgid "" #~ "It seems object %s needs support to print. Please enable support " #~ "generation." @@ -9811,6 +9755,12 @@ msgstr "" #~ "Het lijkt er op dat object %s support nodig heeft om te printen. Zet " #~ "support genereren aan indien nodig." +#~ msgid "Keep lower part" +#~ msgstr "Bewaar het onderste deel" + +#~ msgid "Keep upper part" +#~ msgstr "Bewaar het bovenstee deel" + #~ msgid "Layer Time(log): " #~ msgstr "Laagtijd (logboek):" @@ -10060,6 +10010,18 @@ msgstr "" #~ "support uitgeschakeld is, er 0 top layers gekozen zijn en de vulling " #~ "dichtheid 0 is\n" +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" +#~ msgstr "" +#~ "De spiraalmodus werkt alleen als de wandlussen 1 zijn, de ondersteuning " +#~ "is uitgeschakeld, de bovenste lagen 0 zijn, de sparse infill 0 is en het " +#~ "timelapse-type traditioneel is" + +#~ msgid "Start" +#~ msgstr "Starten" + #~ msgid "Stop printing when Spaghetti or Excess Chute Pileup is detected" #~ msgstr "" #~ "Stop met afdrukken wanneer Spaghetti of verstopping van de afvoer chute " @@ -10075,11 +10037,14 @@ msgstr "" #~ msgid "" #~ "Successfully sent. Will automatically jump to the device page in %s s" #~ msgstr "" -#~ "Successfully sent. Will automatically jump to the device page in %s s" +#~ "Succesvol verzonden. Automatisch terug naar de apparaatpagina in %s s" #~ msgid "Suggestion: Actual Volume in range [%d, %d]" #~ msgstr "Suggestie: Werkelijk volume in het bereik [%d, %d]" +#~ msgid "Support base" +#~ msgstr "Ondersteuningsbasis" + #~ msgid "" #~ "Support layer uses layer height independent with object layer. This is to " #~ "support custom support gap,but may cause extra filament switches if " @@ -10090,6 +10055,14 @@ msgstr "" #~ "filament wisselingen veroorzaken indien support is gespecificeerd als een " #~ "andere extruder dan het object" +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." +#~ msgstr "" +#~ "Ondersteuningslaag gebruikt laaghoogte-onafhankelijk met objectlaag. Dit " +#~ "is ter ondersteuning van het aanpassen van z-gap en om afdruktijd te " +#~ "besparen." + #~ msgid "" #~ "Switch to rectilinear pattern?\n" #~ "Yes - switch to rectilinear pattern automaticlly\n" @@ -10115,6 +10088,9 @@ msgstr "" #~ msgid "Sync material list from AMS" #~ msgstr "Materiaallijst synchroniseren vanuit AMS" +#~ msgid "The %s filament is too soft to be used with the AMS" +#~ msgstr "Het %s-filament is te zacht om te worden gebruikt met de AMS" + #~ msgid "" #~ "The 3mf's version %s is newer than %s's version %s, Found following keys " #~ "unrecognized:\n" @@ -10136,6 +10112,13 @@ msgstr "" #~ msgid "The Config is not compatible and can not be loaded." #~ msgstr "De configuratie is niet compatibel en kan niet geladen worden!" +#~ msgid "" +#~ "The P1P printer does not support smooth timelapse, use traditional " +#~ "timelapse instead." +#~ msgstr "" +#~ "De P1P-printer ondersteunt geen soepele timelapse. Gebruik in plaats " +#~ "daarvan een traditionele timelapse." + #~ msgid "" #~ "The firmware versions of printer and AMS are too low.Please update to the " #~ "latest version before sending the print job" @@ -10237,10 +10220,10 @@ msgstr "" #~ "by right-click the empty position of build plate and choose \"Add " #~ "Primitive\"->\"Timelapse Wipe Tower\".\n" #~ msgstr "" -#~ "When recording timelapse without toolhead, it is recommended to add a " -#~ "\"Timelapse Wipe Tower\" \n" -#~ "by right-click the empty position of build plate and choose \"Add " -#~ "Primitive\"->\"Timelapse Wipe Tower\".\n" +#~ "Bij het opnemen van timelapse zonder toolhead is het aan te raden om een " +#~ "„Timelapse Wipe Tower” toe te voegen \n" +#~ "door met de rechtermuisknop op de lege positie van de bouwplaat te " +#~ "klikken en „Add Primitive” ->\"Timelapse Wipe Tower” te kiezen.\n" #~ msgid "" #~ "When sparse infill density is low, the internal solid infill or internal " @@ -10258,6 +10241,15 @@ msgstr "" #~ "dikte, zodat betere ankers kunnen worden aangebracht voor interne " #~ "bruggen. 0 betekent dat deze functie moet worden uitgeschakeld" +#~ msgid "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." +#~ msgstr "" +#~ "Als u ondersteuningsmateriaal gebruikt voor de ondersteuningsinterface, " +#~ "raden we de volgende instellingen aan:\n" +#~ "0 op z afstand, 0 interface-afstand, concentrisch patroon." + #~ msgid "" #~ "X1 General Settings - Network Settings in the side bar of X1 main screen" #~ msgstr "" diff --git a/bbl/i18n/sv/BambuStudio_sv.po b/bbl/i18n/sv/BambuStudio_sv.po index 116f7b13c6..cf87483b43 100644 --- a/bbl/i18n/sv/BambuStudio_sv.po +++ b/bbl/i18n/sv/BambuStudio_sv.po @@ -2,16 +2,13 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-04 14:45+0800\n" -"PO-Revision-Date: \n" -"Last-Translator: \n" -"Language-Team: \n" +"POT-Creation-Date: 2023-04-06 08:26+0800\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Localazy (https://localazy.com)\n" "Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" -"X-Generator: Poedit 3.2.2\n" msgid "Supports Painting" msgstr "Färgläggning av Support" @@ -1914,14 +1911,14 @@ msgstr "Byggplattans temperatur" msgid "Max volumetric speed" msgstr "Max volymetrisk hastighet" -msgid "℃" -msgstr "" +msgid "\\u2103" +msgstr "\\u2103" msgid "Bed temperature" msgstr "Byggplattans temperatur" -msgid "mm³" -msgstr "mm³" +msgid "mm\\u00B3" +msgstr "mm\\u00B3" msgid "Start calibration" msgstr "Starta" @@ -7132,6 +7129,9 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimal purge på wipe torn" +msgid "mm³" +msgstr "mm³" + msgid "Filament load time" msgstr "Inmatningstid för filament" @@ -8173,8 +8173,8 @@ msgid "" "interface is Concentric" msgstr "" "Linje mönster för support gränssnittsytan .Standardmönstret för olösligt " -"(material) support gränssnittet är Räta medan standardmönstret för " -"lösligt(material) stödgränssnittet är koncentriskt" +"(material) support gränssnittet är Räta medan standardmönstret för lösligt" +"(material) stödgränssnittet är koncentriskt" msgid "Rectilinear Interlaced" msgstr "" @@ -9066,106 +9066,6 @@ msgstr "" "Visste du att du kan använda fler väggslingor och högre gles fyllningstäthet " "för att förbättra modellens styrka?" -#~ msgid "" -#~ "Arachne engine only works when overhang slowing down is disabled.\n" -#~ "This may cause decline in the quality of overhang surface when print " -#~ "fastly" -#~ msgstr "" -#~ "Arachne funktionen fungerar bara när ned saktning vid överhäng är " -#~ "inaktiverad.\n" -#~ "Detta kan leda till en minskning av kvaliteten på överhängens yta när du " -#~ "skriver ut snabbt." - -#~ msgid "" -#~ "Disable overhang slowing down automatically? \n" -#~ "Yes - Enable arachne and disable overhang slowing down\n" -#~ "No - Give up using arachne this time" -#~ msgstr "" -#~ "Inaktivera överhäng sakta ner automatiskt? \n" -#~ "Ja - Aktivera Arachne och inaktivera överhäng sakta ner\n" -#~ "Nej - Använd inte Arachne för denna utskrift" - -#~ msgid "Start" -#~ msgstr "Start" - -#~ msgid "G-code" -#~ msgstr "G-kod" - -#~ msgid "Backup" -#~ msgstr "Säkerhetskopiering" - -#~ msgid "Backup interval" -#~ msgstr "Säkerhetskopierings intervall" - -#, c-format, boost-format -#~ msgid "The %s filament is too soft to be used with the AMS" -#~ msgstr "Filament %s är för mjukt för att kunna användas med AMS" - -#, c-format, boost-format -#~ msgid "" -#~ "It seems object %s has completely floating regions. Please re-orient the " -#~ "object or enable support generation." -#~ msgstr "" -#~ "Det verkar som att objekt %s har helt flytande regioner. Omorientera " -#~ "objektet eller aktivera supportgenerering." - -#, c-format, boost-format -#~ msgid "" -#~ "It seems object %s has large overhangs. Please enable support generation." -#~ msgstr "" -#~ "Det verkar som om objekt %s har stora överhäng. Vänligen aktivera " -#~ "supportgenerering." - -#~ msgid "\\u2103" -#~ msgstr "\\u2103" - -#~ msgid "mm\\u00B3" -#~ msgstr "mm\\u00B3" - -#~ msgid "" -#~ "Spiral mode only works when wall loops is 1, support is disabled, top " -#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " -#~ "traditional" -#~ msgstr "" -#~ "Spiralläget fungerar endast när väggslingor är 1, support är inaktiverad, " -#~ "de översta skal skikten är 0, tätheten av sparsam utfyllnad är 0 och " -#~ "timelapse typen är traditionell." - -#~ msgid "Keep upper part" -#~ msgstr "Behåll övre del" - -#~ msgid "Keep lower part" -#~ msgstr "Behåll lägre del" - -#~ msgid "AMS auto switch filament" -#~ msgstr "AMS automatisk växling av filament" - -#~ msgid "" -#~ "When using support material for the support interface, We recommend the " -#~ "following settings:\n" -#~ "0 top z distance, 0 interface spacing, concentric pattern." -#~ msgstr "" -#~ "När du använder supportmaterial för support gränssnittet rekommenderar vi " -#~ "följande inställningar:\n" -#~ "0 topp z-avstånd, 0 gränssnittsavstånd, koncentriskt mönster." - -#~ msgid "" -#~ "The P1P printer does not support smooth timelapse, use traditional " -#~ "timelapse instead." -#~ msgstr "" -#~ "P1P-skrivaren stöder inte smooth timelapse, använd traditionell timelapse " -#~ "istället." - -#~ msgid "Support base" -#~ msgstr "Support bas" - -#~ msgid "" -#~ "Support layer uses layer height independent with object layer. This is to " -#~ "support customizing z-gap and save print time." -#~ msgstr "" -#~ "Supportens lager använder lagerhöjd oberoende med objektlager. Detta är " -#~ "för att stödja anpassning av z-gap och spara utskriftstid." - #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -9188,6 +9088,9 @@ msgstr "" #~ msgid "AMSMaterialsSetting" #~ msgstr "AMS Material Inställning" +#~ msgid "AMS auto switch filament" +#~ msgstr "AMS automatisk växling av filament" + #~ msgid "AWS PRE host" #~ msgstr "AWS PRE värd" @@ -9210,6 +9113,16 @@ msgstr "" #~ "Ett objekt är placerad över byggplattans begränsningar.\n" #~ "Flytta objektet så det är helt inom eller utom byggplattans begränsningar." +#~ msgid "" +#~ "Arachne engine only works when overhang slowing down is disabled.\n" +#~ "This may cause decline in the quality of overhang surface when print " +#~ "fastly" +#~ msgstr "" +#~ "Arachne funktionen fungerar bara när ned saktning vid överhäng är " +#~ "inaktiverad.\n" +#~ "Detta kan leda till en minskning av kvaliteten på överhängens yta när du " +#~ "skriver ut snabbt." + #~ msgid "" #~ "Arachne engine only works when overhang slowing down is disabled.\n" #~ "This may cause decline in the quality of overhang surface when print " @@ -9237,6 +9150,12 @@ msgstr "" #~ msgid "Avoid crossing wall when travel" #~ msgstr "Undvik väggar vid förflyttning" +#~ msgid "Backup" +#~ msgstr "Säkerhetskopiering" + +#~ msgid "Backup interval" +#~ msgstr "Säkerhetskopierings intervall" + #~ msgid "" #~ "Bed exclude area that can't used as printable area in X-Y plane. For " #~ "example, the bottom left area which is used to cut filament in X1 when " @@ -9330,6 +9249,15 @@ msgstr "" #~ msgid "Device:" #~ msgstr "Enhet:" +#~ msgid "" +#~ "Disable overhang slowing down automatically? \n" +#~ "Yes - Enable arachne and disable overhang slowing down\n" +#~ "No - Give up using arachne this time" +#~ msgstr "" +#~ "Inaktivera överhäng sakta ner automatiskt? \n" +#~ "Ja - Aktivera Arachne och inaktivera överhäng sakta ner\n" +#~ "Nej - Använd inte Arachne för denna utskrift" + #~ msgid "Display printable box" #~ msgstr "Visa utskriftbar box" @@ -9531,6 +9459,9 @@ msgstr "" #~ msgid "Fragment filter" #~ msgstr "Fragment filter" +#~ msgid "G-code" +#~ msgstr "G-kod" + #~ msgid "" #~ "Green represents that AMS humidity is normal, orange and red represent " #~ "that humidity is too high.(Lower the better)" @@ -9596,6 +9527,19 @@ msgstr "" #~ msgid "Inner wall speed" #~ msgstr "Inre vägg hastighet" +#~ msgid "" +#~ "It seems object %s has completely floating regions. Please re-orient the " +#~ "object or enable support generation." +#~ msgstr "" +#~ "Det verkar som att objekt %s har helt flytande regioner. Omorientera " +#~ "objektet eller aktivera supportgenerering." + +#~ msgid "" +#~ "It seems object %s has large overhangs. Please enable support generation." +#~ msgstr "" +#~ "Det verkar som om objekt %s har stora överhäng. Vänligen aktivera " +#~ "supportgenerering." + #~ msgid "" #~ "It seems object %s needs support to print. Please enable support " #~ "generation." @@ -9603,6 +9547,12 @@ msgstr "" #~ "Objekt verkar %s behöva support för att skrivas ut. Aktivera support " #~ "valen." +#~ msgid "Keep lower part" +#~ msgstr "Behåll lägre del" + +#~ msgid "Keep upper part" +#~ msgstr "Behåll övre del" + #~ msgid "Layer Time(log): " #~ msgstr "Lagertid (logg): " @@ -9849,6 +9799,18 @@ msgstr "" #~ "Spiral läge fungerar bara när vägg antalet är 1,\n" #~ "support är inaktiverad, top lager är 0 och låg ifyllnads densitet är 0\n" +#~ msgid "" +#~ "Spiral mode only works when wall loops is 1, support is disabled, top " +#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " +#~ "traditional" +#~ msgstr "" +#~ "Spiralläget fungerar endast när väggslingor är 1, support är inaktiverad, " +#~ "de översta skal skikten är 0, tätheten av sparsam utfyllnad är 0 och " +#~ "timelapse typen är traditionell." + +#~ msgid "Start" +#~ msgstr "Start" + #~ msgid "Stop printing when Spaghetti or Excess Chute Pileup is detected" #~ msgstr "" #~ "Stoppa utskriften när spaghetti fenomen eller fylld avfallsränna upptäcks" @@ -9869,6 +9831,9 @@ msgstr "" #~ msgid "Suggestion: Actual Volume in range [%d, %d]" #~ msgstr "Förslag: Faktisk volym inom intervallet [%d, %d]." +#~ msgid "Support base" +#~ msgstr "Support bas" + #~ msgid "" #~ "Support layer uses layer height independent with object layer. This is to " #~ "support custom support gap,but may cause extra filament switches if " @@ -9878,6 +9843,13 @@ msgstr "" #~ "stöda custom support mellanrum, detta kan orsaka extra filament byten om " #~ "support (materialet) är vald som en annan extruder än objektets" +#~ msgid "" +#~ "Support layer uses layer height independent with object layer. This is to " +#~ "support customizing z-gap and save print time." +#~ msgstr "" +#~ "Supportens lager använder lagerhöjd oberoende med objektlager. Detta är " +#~ "för att stödja anpassning av z-gap och spara utskriftstid." + #~ msgid "" #~ "Switch to rectilinear pattern?\n" #~ "Yes - switch to rectilinear pattern automaticlly\n" @@ -9903,6 +9875,9 @@ msgstr "" #~ msgid "Sync material list from AMS" #~ msgstr "Synkronisera materiallista från AMS" +#~ msgid "The %s filament is too soft to be used with the AMS" +#~ msgstr "Filament %s är för mjukt för att kunna användas med AMS" + #~ msgid "" #~ "The 3mf's version %s is newer than %s's version %s, Found following keys " #~ "unrecognized:\n" @@ -9923,6 +9898,13 @@ msgstr "" #~ msgid "The Config is not compatible and can not be loaded." #~ msgstr "Ej kompatibel konfiguration; kan inte laddas." +#~ msgid "" +#~ "The P1P printer does not support smooth timelapse, use traditional " +#~ "timelapse instead." +#~ msgstr "" +#~ "P1P-skrivaren stöder inte smooth timelapse, använd traditionell timelapse " +#~ "istället." + #~ msgid "" #~ "The firmware versions of printer and AMS are too low.Please update to the " #~ "latest version before sending the print job" @@ -10043,6 +10025,15 @@ msgstr "" #~ "tillhandahållas för interna bridges. 0 innebär att denna funktion är " #~ "inaktiverad" +#~ msgid "" +#~ "When using support material for the support interface, We recommend the " +#~ "following settings:\n" +#~ "0 top z distance, 0 interface spacing, concentric pattern." +#~ msgstr "" +#~ "När du använder supportmaterial för support gränssnittet rekommenderar vi " +#~ "följande inställningar:\n" +#~ "0 topp z-avstånd, 0 gränssnittsavstånd, koncentriskt mönster." + #~ msgid "" #~ "X1 General Settings - Network Settings in the side bar of X1 main screen" #~ msgstr "" diff --git a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po index f6a346e75d..1cdf48a39b 100644 --- a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po +++ b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-04 14:45+0800\n" +"POT-Creation-Date: 2023-04-06 08:26+0800\n" "PO-Revision-Date: 2023-03-29 12:43+0800\n" "Last-Translator: Jiang Yue \n" "Language-Team: \n" @@ -1869,14 +1869,14 @@ msgstr "热床温度" msgid "Max volumetric speed" msgstr "最大体积速度" -msgid "℃" +msgid "\\u2103" msgstr "" msgid "Bed temperature" msgstr "床温" -msgid "mm³" -msgstr "mm³" +msgid "mm\\u00B3" +msgstr "" msgid "Start calibration" msgstr "开始" @@ -6835,6 +6835,9 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "擦拭塔上的最小清理量" +msgid "mm³" +msgstr "mm³" + msgid "Filament load time" msgstr "加载耗材丝的时间" @@ -8641,7 +8644,6 @@ msgstr "" #~ msgid "Start" #~ msgstr "首层" -#, boost-format #~ msgid "Shortcut key %1%" #~ msgstr "快捷键 %1%" @@ -8651,17 +8653,14 @@ msgstr "" #~ msgid "Backup interval" #~ msgstr "备份间隔时长" -#, c-format, boost-format #~ msgid "The %s filament is too soft to be used with the AMS" #~ msgstr "%s耗材太软,无法与AMS一起使用" -#, c-format, boost-format #~ msgid "" #~ "It seems object %s has completely floating regions. Please re-orient the " #~ "object or enable support generation." #~ msgstr "似乎对象%s有完全浮空的区域。请调整朝向或打开支撑生成。" -#, c-format, boost-format #~ msgid "" #~ "It seems object %s has large overhangs. Please enable support generation." #~ msgstr "似乎对象%s有很大面积的悬垂面。请打开支撑生成。" diff --git a/resources/i18n/de/BambuStudio.mo b/resources/i18n/de/BambuStudio.mo index 2393438f98e764bcaf79b9848d70087454ee4c7e..5d4caa9a651825f7a2bce290238642d283365055 100644 GIT binary patch delta 67143 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 G=l=l9gngj^ delta 36600 zcmXZl1#}fhABW+)NpOO@22CKr32wnPXmEFTD85K==i*YlxCZw^p%izA0xcBR@*zdO z_jhM{PR}zlyF2n9*&Ay=ObnblG0?r2EMSg@e>TMRcrsxBN*<3lfyZ-Zl1e?EGWv~jmSQLN9viJje+*5WRbzu#3@CZiWQLKOg`#qiz9`{rwk(Yu#=#R@V zKCZ$7xCN`@11yeV2Rxp9*b&p>Tug{tF+Cncb@(Qx!oRFvkTH6a9`tyUU^+}s`<_q| zaVV&QiLf@R11(V%b-`HJ&pH^@plkC}tg}!fpN~Uu6>8*}4;iyy0QqdF`a&=v?R)Z) zP(vkAJ+6d!SY=GZj&&kk7$%c-`jTp(0)Q zR|b)iL@^Q?Q6#D(%`gxc|CDMYm8>^B4N#J58OU6p(m9;joc0omE z1nRz-sKvS(wbl-!>i^xf1s6~^-aw7;1*+jUm};_r{~B6o{ncs z2YaF-HUg{SEX<0x?e*`dktaIKmd0|Z$jm@Jw-6JnYnw^bqTmoF#DwR}B1&t`jtMBw zhjFna>b{CLUl+AznqnF3h9z-5hT&t>bIH$}MVtWx$%kTMg{HVIsD|0dH^N*v)aF;C zLiq>A$0ryY-=iY-1p_eff*D~lOhY~cs^j6P4o9G-I?|T6MmIkN-AQc6C71;3Tr@{% z8&t!?QTHvzI(QaUai&YA!Q9xBd|}iaufz4F`EL- z-2v1{{zQ%7Z`7*)hU!@QD`r)PVOjF^aRho%t3TOQb3paRe&lChCh$K zB9*Qa{}d$ZT{ofagh|Qw#pD=`>iK-s1B+3MXdNcT7}VSzL(Si9;g{tQOYS)~!`OB#K{=~T2|9_KEg)e;t9?wUc_xxo#6d%>|^r#1O zqZ-VIYM?A?u4|wo&=OPPKvZO>Sl6H;auoI4HB3VLo`)p#zb7gBYRK2}X^^8MJ)j|xxjp(i*ag{_?9Q4@C)gsJ7emknc zE2t6PMy=vksMY=-Dsu7uF^e)e<|025>*9JWi(jz>mU?2I{|RH0kA6b@14vA!Kp~xB zU4~jTTX6>dj)SrBQxm#NsB_^SYD8Z#A0~QcrmPI=dTmtXdSEP^fN60WYCvnB5&uFY z_EXRnUt<{7dv0`59ovW+`2keN{=i }8pr7pCE|sFBsdxY!8eU~625ol#Sf?4{{Y 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 diff --git a/resources/i18n/es/BambuStudio.mo b/resources/i18n/es/BambuStudio.mo index 579f6238f707eaf7bf42ba7a77b3a7b0a8992641..865791d02c4589ec65da7cfbc9c6c3f905861577 100644 GIT binary patch delta 48936 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
    t@Ggg(YB_}QkXn`(AT2!@be2sPBL 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 esH;^BOj_ic6c+;66&9!3(MjcM?@jekH_LtglR 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 diff --git a/resources/i18n/fr/BambuStudio.mo b/resources/i18n/fr/BambuStudio.mo index cf2cedf2f443bab251d2af96554c39159f195247..3d42406e69934b16103f647d3691b1853f673ba9 100644 GIT binary patch delta 83009 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�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 delta 50312 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 diff --git a/resources/i18n/hu/BambuStudio.mo b/resources/i18n/hu/BambuStudio.mo index 654d3103a107cc9999afb348d2d42adfa5f7e93d..f015b7c281b7c7be7989e2ac332b896222a4f547 100644 GIT binary patch delta 36703 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 P`jW)hHKnhwV9fsmF20oe diff --git a/resources/i18n/it/BambuStudio.mo b/resources/i18n/it/BambuStudio.mo index b75e439c969bc1d7973e030f4e92d78f8292ea5f..ee74a5f13813ab29f3ce483892b4d54bbca144e1 100644 GIT binary patch literal 229684 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 MAIvWAUraCkUmZ#?G5`Po delta 59417 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

    KSug{Q!0_fU|UV5PD!v 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 diff --git a/resources/i18n/ja/BambuStudio.mo b/resources/i18n/ja/BambuStudio.mo index 4e5281379504c38faf3d2fd934e570b8175969d8..b7af955e1c3e68a09b127c9deb31fa0bc7dca269 100644 GIT binary patch delta 36749 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 MO#5Zq1kMQhKj{&*RsaA1 delta 36683 zcmXZl1$0!$9>?*$3Blc+;DH2};0Y3(1b6q~?r?F6%Ob_yo#5_nr8q@fcz7wa#p(P0 zcIKV)&Sz%s+>!stZm=%6n&`%rMDBy+vF3RA-^REePe$w);qiDAcsv&;snp|1yU*i^ zhv_gqX2)_`6b(=zpM&Y~md(FMMY`xQ zCXtFn2@;x7Bx)edFcEgZWY`zA6yq=p?m?~XEliFzkDCa#!VvPEP@$fUYIiZF!3|g+ zkE8ZLniIso5s79eOz2`zYjXrOkgKSM?xL3Fcl5{isDb^9DKPFyQ!gWG>2jhvE{JNU zENVhk?DGbggna9h#9tMAQJ@BgqXsY?)$uY^1M5-sVz3JyMRgo}$}CZswZ1hP6`2vJ zdNWa*bv0_Q9YM8!#b>AI zrd~1B(ltj-V48KI)m=wIGv9^U3ujOb-^UX82DRC8o%MK1VIwSxvv3)nL8^E3t(I< zjjC74=IfyLOj9g}U9mK7zz}?fdN0KlvxzfeBJ#nQM4>5Z3#wsu@{KSL4z>B!s8F86 z`1l-S;|Em4zF;g&bk)o-Ii@9_5jF5)r~#KpEp?aVe_aUeunrh-&Y5n}3f1I{)z=n+}qoLYErVaBkd#MKBh=!uj|PwFHx%n1Rkl zEyYsQK(`_ddv>GRIfyznXKnshRC^CGuFn4-B-G#=UxCN-(dIqBn*qf~jXVSD#k{Bv z3!pj(L#=fUR0LXLDja}{>=f%-R78%W-n)rO>EH8&gkJc78!_G=CWO0CFI+}7^aM4- z@Ai4Dr{+T?6Ka5=sLfp2+6>ihFH}3@QA@P|gK!hND@fcRkqrkuGi$XFvy$I|>hL;h zhWAjr_$_L;e?>(u-v7*|Oo4gGkHk8-0mJYcmcla6&HDo}Hu8rV6^gO9K%#(!-(4nxhXHpaz97zbP9dhCo^isWz1fO5Gc z8c+~|HE}d*Kv%FB`oHyf3S&tuiQTX`u0eHt-{zD5Y1Y0P>gsKYdVeUE!R@FeeT#}j z(sw2@ZfX*VDJX<`5RMbDGA6*wsE+PpQcUuf8BieV>vlcVdp%L@^v8ra);iOcFF{3S zvvnsX(fL0>LThmWHS!0jhQDG?O!MAsva%STd==E5sf*RH5o)cM+x!vKn#cQK%5$J* zUI8m(d(SzBsr?#{1}Acm6iGL`G?G)(leu1UY`DSKT7S&-TYZUqh zhU{L?aMYfeis^AXDv}p51wKSAl-pK9i_RK^A|< z(-iw)YrKS7+x)Q{->xrl)-Yv&uK`a!+)Tb6mO>}CDKCQ$$hSo;Vfi?YZ{{^o z5p98!b^iO3&`keBt!do2#i%n3+tut!G-BBSPgBrj>%!6xD1N;TG2|uFRNgm(v zl*hEFC2fj<*aj7m(dcS3OeLWUWeF+*XHWyUg=+8_mO&?h<7tQG(6?uh)$_c-DwMxY z==grrDw@dgbSFO+)zNz_ir-NKE}Yo$?X~8K9oM%e(G(~&L#$IU3;89O7Z0Nb^a3@r zPpD1#!{(DEaeTWyjWq-nvGSM;8=)dF!ag5|YJWiz*F4xyK{*PJp(5c)>iB+e$b)*Z z0crrvZN4jN&-6hZzoDo#9%J)UQSHq^-51xf5`IKQxJ)wBZcUej3hJTuKs!{(hG8L` zfV#odKa~HZ&2_5z;u{6x#Rm34MN>`5vcc@qxMJ_%#1ToOY3eWp^nd^UicmL z!WUa1ZVI#OvtuCTp{R?cF={h*M|C_7HK3)arQC*^$Z=F;E};f`%a;Gol)IkyBoxYT zs2K*NG@(w5dLcKefl!+-Z>@vsunqc_!a5W)Qa%>71j|taeT0Sa6IQ_BRGJXyuLlWj zhUwT5w_-6&o!ZQ_CgvvJ2HWFA)Ii^2Bsysv-?!Y_*q{6iEP%1ont>F@4CL#fK3jUC zCbkiM=l=i+&G0%Z^bb(y`?W3qgjyQEbY}ObLp{%ey6b~&c@!!V4N&d1L@hyQRQL8zPX4d%o5m;(c|m{3Mo z8=&fSz#G^F6}j+0^O@2J)$U%@rad0$niqbfKr?=f3fX(qx&Mw@l2}>IaY>F^%X~N= ztD*1Ipx*z2s-Ga6xfjx5e)3sS&ugOw-Uc0R&hajZdKCPW-SK@#`wcaNJUL9o{Fs$| zJ=}@?QA?3GC!wc-+NgZ{T#n};PD1U0D!ENNwK0Hv1JuNtp-w|bn|DW$P$(v%mS80o z#l5JRyg}W3Uu`~qkQqo?)Hj+-s1Cna{qvZ7LR5#TP{}a_jYG6|^q0aw2 z5;`8MP;0&oHNriphR<5BqIUajoQAJaOEomu)E|l3^)pd-{w~yjZll_Lfd2T@`T`Ts zzvm4Jh59op)Nw-0u1<}bX)aWGNmN5sQD4=fuq!sV`Ln2YZdiXuEzMu3fqt?6XN{GQ z^RJsI9to{wI#j4CqZ(?3&#*hHONYtqrh1Kx}CZOfO!e$^LMIGNS zXf{H19KV=}L}t`Pa-;TG{$iYeo!>|b6ygr3Q_v3;fr+S@&ckuI7PU9>6*u+Dp_Zr~ z>R#xGfjAn~(Mp_%8&LI%hMF6(3aXtZE(wjW3n~&LP@8cKY5>zQ6D~$wp$AaA`xn$e zUs!)&Ao&y}OnXI9^{QfiY>hc_I_i||LLGDWI*EKF;*~U?dZDNpcSjwQ;ixdizmpc^-AV?xSY(4E4TK);y1g1<7YbosL?lB_4!&Z#X8``5#Y0$7nukhAVL+ z?m+E@mgUSv(giiMUZ^D*jtcd3TfP7l^0hX90M+qXTmAu6KTeq0oXOGECQC;`4|1dO zg>60@HGmqZkvBpOv^i=39Z``Ogxc+s?ekfvNG!7XRjBv3*nAACze8c1e}(ic1-bDy zmOxLqy~A-0**d5z^%LsF4CT$H%4My9y0}`RuHb=~0~gxzqo}=g2Nn81Q4{@C-Zi^8 zb_G)*6Dq_-Py-6L`Oc^r_s1eQ0gK@Q`}{A|Y50Mvm#U)U`{laas7SQ2Mx!R&8?{uU zToM}D9MpN;h#J5N)NZ|s+TBl4GyE6zVvn4kP^^nGffI(UJ4@dN5E|AA`IiLkpK721rbf#gL^q$KM7 zNYq|wjIDM4Tai!)M^O!*M1}AQHo?cJ$ds<^_glh3`TuOG{zttgxZA5ttYMjv&OIHc)svFA8O`7)s3On z%GL&``=Y(n`FCx>0_!d;Px)2U+9j`H%w{cYt$+=9UKh25>rkQHf(rF6n?Hhz;AvE( zAK3g8^nLz+A)z}ueoe>s+i1B^As&m0zU7k%hC(a>%)IM)m+w6^Y)*04A)|aT` zoTiSMNIuksQx$c5>!1eQ1vTKYE(y(e8tR;{N4>BgHS-gwikDGqcN;ap-%#}*qn7GD zhGLw$CQ@Oj51)Fd<2e??a0+TEE@E|b?~>3l$yv|5SOyiM+Nh43qXyCu^(ojJwHIcf zj_D@UfDWVXgA-U2Pov&TQQw@Z%&5&=0Tqe5m{aG!D+$ebChCO+SQ1xb9(-ua<25i# zloB`2Y6h>dB9?6E zc%I{M9E%+rnGRlA-=lW>XH*9X8=LkrqVl_;DCD(vGMR z_CbYsBq}1aP)l&p`U(~D_)X1#5@9d$DN*l@!!kI}=C7mn%rompbh}Uxx0#uFU(_*M zh#JUNRA>*NPR9xBRSYD5A2q`tsCtQ;o25yOY9|mikfIoZm9Z`MMZI^kIp<$%^^5|2 z%YB1Un4pFEcG?V8J_B>%7L3Fj7>GGqnl+C=4X`@uVrqn%zz|zL9yJiJb+vU*OU}Pu zJV$|ExQSY$C$_>rsF}oRWk#FT}M{Vxom;*1MCj1Vy z6dzp@+RbrWn}H-pRmg(6!E)L15Nk=)04t;FH9>9O)~E)%qGmeG=BHs0`K71Rvd6YWNN+GEY#)@*`@1 z-*5ybYU|qzu4f8~qz>Q7@DvX`?Mgb^@e~N1OA5_QjJDBHbQA?Q__3H`2 zsJ&Aa^J7QUCY*zc_;K|8{{KZ13ds%Yebh{!qV~jR)Ib6{nvN2qE~b>IB`AlQVFYR^ zs$)1dz`8gW)$t3|6`i`1`IL>sOgjIYNa&(Dj~aR6&gM77A)1Sdz%ta@Z9+xr z5GvHCP?5TZ5%>%>fsn3dK-Ez9%LwZWRD1QinSNS#>3D9zbX76ZUp|e{NtFYM|Nsn05+cZSuuYduKu)*WC4U zDA0_bU=Y4Wb(pHJIR#l!OHmLDV@F#)A2s83sAG2uRqqz+G$iV0j$IzqQdL9U8>3MD z?R81$m>oxj_!ra?JV8a|JqF_!tb)1vn>Fo$sy_y`bhA-2T8tXVMm&gzQ0IQg0Mp(A z)O#y1H@Yz-dXu<^3RSIvreagn$7@^ErWu6#o-hNoS=XWl_zG3;1L})Ryg}xI%7K9_ zZ73e0yzyW&v9v?XfPyfqKL4wdP(xi%Gw*{sPNQx41k^E`Zp-JQ2DA_rxfs+^9Y@u> zj05ooYVXt!Hqb8|whn z047@(p}t&hM!k0iwKp!KCU^@KvH#ipzvvdAAod9JI~K(;ANh{f*{C%?jvC+{oBxiv z$fxA=XaJ>A_dre5(zHf}eh{j|5!R`wfh@9aaykE+*+B|)b)H9k*xW#c@RP0R8EHC7 zikewg)bk+JrYne=c@0!M9Z;vB7ixf`QSEwB1KVvqIMQ}}oPzQ^xP+mYWR$rFs-Tvl z7ixxMPy?8U+H^}$Gu(g*^*+>bJB}LQ6Vw1+q91<6>-Yl|sbAgEX7jv4jr<*IjlZHc zOVTkWWSLOq`E0%ds)4$w3#bb!k`qt^n}d3PIqLq{f{N5#)KdO~iiDePthorXpkAng zoJ&uA)VUsjn!yy*02ZSnwF9;5|3-EE*&1h@X*d} z7g3@61+|vim}=p$_Y!Hcc~YJJhD@ivH-LHrE(bhbvJbjX_1|DC%arY@gpo4d^+lUaX1clqAD^ z^OiW-1tvKeqj z)RKju+N(6#p8tjvXbIY*uG(nKj}uTG?M5|x0<}cm@Oq#4`IJv)8Ou0aV2>Y>Bl|FKk84>>&C+ z8!(vs9n|p*m~GxmioUBFqbLtT4SWzPQlpW`xSk0l)X{RRiaW3`enoAfo^#Asu1Tnl z520pq0=4!Ruq?hnMI`rJa~fJ=3-aAi$M?MT5o#j;Vt_vX{pXp2cvy!AsZj&!j7xDa zhG4p%9Zxf?j74w-Y7^eXa`+N;n)1vyUqGs%PSr6~gl?kR^;=*jmICwAzb8M5V%P*1 z;dJy}nG4NKi=gtQtrbvfTn#s115{)@i_B(=jRnXCqBeJJ%#R~b6WNUY@Gkm(|37N6 z*^RC7G!J^B8Z5rVd;=3-O3ft|2xT{R)i=$>-4%Ja4YUIsPGwF`ngf7;?#rF9t z`}~{DCthtfcNX;REj&j3!7d4Xnw4H-HeV#_0$GMy!}F+9@C9{|q*`l^T>(@CDq|pa zz+5;URe!V1pG954f1+-_1nbPei=Z~A8$m)dYl=E1oiQJdu=!0`hWv4i!vAm*My)sX z@1i<L7BkywJ-d}mQ# zp>ClDd>3^Jo}-rHZ`55Mdy^Shc2vERsDV{M?WLBe`y(2Y>-_g7QGtT7sB?V=L-8wW zPZZf~uHZ>Hg8U=YF>STQ@hrn{xEvR6HQ$`VwwXQA2D?-4;!J#lk;-p3k-Uskb^bH& zaD0C&WfKOHFBW5tT|?B(wg}b0T`Z5?cAAgpEvN|nhfOihE_1%e;t}%OQA^i*x8wWM z^IK3iY|tLZ_t$lLqdSO#MW|u#3s9TyJSt)@ z?DI?q%+LK5usG!dF(+=p^LQN(;?jfWx9^)D;{1ox@wP*}h<_b+JoBiK>!|sKgTttX z@*HzKL$Nj1$KNml3mrGVM>G)YkpBf$p8bURu|68xlHZLbFx^SB1a(oTW%)_Ye@zl+ zDJX}jPC33mr(YizkpF@Dx;+21*_?+^o9z+mIK4+*Sn1E02HRsj@{>_}>LDsZ+0L3@ z6KaTBl6k0m(+$6-9YfQsM^)MrNSJLWSX1a*%T#`rq_#YpJG zBOG-%S3?b`Ddxbucg? zquwioX|Xs4V$=i9zZ&XAf!1aKs-qE@6{n$&&osh z^VrmDhuT8}u^vvrD)`H-}#e{m>hMJro_}(0@>8ACyInR?tof?A*dOT#vq)Gx>$Cimg*jAK#x%a zc!oM1&L8GtNrS529yPPAx(Zc& z5_&Kcbv&k`URZ+)^+7Cv$87#D)D8A8Dk5J{n=at3`8M4NTaw>|gE7IMj_)s_j>8<} z%2DuYJl2YO;Iy!kBUrh)bSdK zn$QUA4Ag{Hpe~@js0-}cd)KV_?-Z!R|4^Y!{=qbu9@S7FD&&Px&#Rzza};Xt^hNEJ znW%xR$3Wa_^H)*r+(h;B9JQyux+FA`_n_xLXHiRh$(Fm%NT`F)sDZ@&$3!F@s>5QK7ptH;>|-5_+5;o4V^JOd zgo@B)REJ*Fdq3O!QtK*H?t0df&@tJDIdC6V#0RLg&GxVPDpmkB(DSH)-N7pO3N_Or zAIGE%-UqdG<1w)g;sz4>blZpO_#f0vN`5j8mO-s)4OD}5P@APzYX%!xZuA7*z^1C0H{L?HeT&c7PYOhGg3 zYrTSMAoxEsplH+@&qnRuwW#xd6m?&mM|BW~IA}?Vpq_`@e07^|WNl;Z>T&&iq3Lfc zjER)C?bDFMN$!+7@xl zfOnue%pcd!x0IEP{QEDqpbKiV3`d1W-{8hDG^3$fz)`F;pZgDNkMs$UZ| zu+FG@gD^8rwr)VxJLh}O`F~164SYhqm^i+l?~hJpMwLgQUg&^|)F{+BUWGcA2dwu{ z^}nLpNyeW@mswF0Dujwq3Do9{&~y6tM3K9^hlP`=zDX)ct@Elga3Q7EYKTeNB zHGCKs;9b;G^-pSMycl(1twPn?ggU-wu^>K9>gW2ty(UlQ=lf%JjZrguiwflr)C(z- z`}r=Oe5enj*{J77FdT27zHp>YVb;7qY9K$M>TSdMc-lU1ozk3+z9~8XIwk{c!BDG< z>Ua!l%@(27Y(2Ka7;KGcQu+CQ${mCn_+IqQ5Y_Qx)Y^YUz5fG4F>Y!<-vt-$l2E}2 z%!j*C75}ilMc-PZ8j737%rFTmq}fmdEN88O+U<=|yMG{Rk4!=x$78lUbz1YDn}>v6 zD2~ms0XD-OsF@^AXDa5#_T-DA>d&|3dvO~1Q>X#fPj8+#L%lx)H4raqAZt+d?juX- zdj24xib*mUgHSUokEO5$F2Fw->sHLH&;NrY6!LqhfjmWp{D(Dh7V~0eRCzEe0;N&MwyAyYqTZi^s<#?7fL%BT z&!Pt0GSKAXWcB0ke^IcQ#6!%H&CfFuV`VpvLofN*IZS>54kw=>rwRFdoJT$=m!IbV z9!2GcJ11hBP z@)%R2+R2V;C$G(ywa+Wr@;cV`c{u++QE?yz8kr}rpYQMa#78wy2h~A))OqfW>R>*q z{xVd(4K{xWwKQi?OYqE=|BE_~o?tsr^bIuFH5K#Pf>PGaP1!rLp?m$KE z9%^9UZF$ZR^C1?A+Qj`(^=4Ri;3o3dQF~{Uo6l5OgX-`sYGxl$Bm8cSmER0B0jfNM zHJdHZWAi0Z?}uX;R!8ljNvJC~a{<$F6c!-w_9LMeR-tCH1r^epsF}Y&EkWFZex9S4 z3X9-PY>n{?nePK#QJ)QmPy_T7Ht)qj}lEE5^wC{TAk=VzBJ~$XdikO+MvF=8_ zcp7Ws6I))OsM*zFs1P?sbu@YS)BrxAE}s8Tdnj#L^IlF= zWJ{Fg{A=dX6zGLz*0rdPwxBlEUeuS)uh;==l`{>*pl1FDDq_jQ%%-e~T9VDyL#XyI zVQIXMftWPhHEUHU+>Ep#YNS0;FAT#&I0iN2^5xC*`l!v-1~tQhsJ$@*Rd18^2&$cH zHh%|o?q8#hdos6znQ0l+ajR_e9k3$#p4J%Diyu)l%UIF87lP`bIF7}#cn6Q8mU2-g zGoZtmn*1-A5}%`f?r^`8(09Ki5yrfz2t=S}QrG4?U^Vi6Fa;jOZg>^7RAnps`TneD z6;vd4pdxeG`ajgbJylG*Ns-O#da~Ps8mNX_+I%0>h{vI3xCn>fN>oFctC|k-qXt?9 zbsCytF&vEzaWCo{R+4IdzTX9}g0;yHz}PzfXGo~Q%hm@NM*gkM=dW&#WjRy_{ZUJ` z7_}q^ZT>N86MAZx0hhv#WXq!lunra3M;Hg+pzr(tKP0pn0&1EW6-0%!8fswmP!VWn z?SlFc>Wv!60@PaX!(Z?oDk7U}`T73x=}~M!zIvo7UxymV0d&>ySrY2#3hKgnh{v#4 zl&Sa;RWDX;(_sSCcfP#VeW(tq)-mby%osX!^7pI|Fn(R1 z8ESI|G~)a#k-3q%XhKo>A*ca(QKw@)>f$(wy0AQrO}$W5z1pY_I--_hFsh@4HoxEc z8)|8PpavY*ZDK-}7B%uLs7+NGHIUY*4hLf~+=jjxpsw10rhdL(qKSuUxGw5>bJQ9S zMYa1AYGA8S9iK+kcW;u=75fOQV)ka{)2bV;BcHIjpYKmR?ZR^82e&ZCXfNs*{SVbq ziI%3F2vkQup*q@N^ZQW~`_1aK@Vq9%G1RquUA&c8rk8dA=bleoy{H?fSSNs9Dz4bd!c@`YaR@bHX+-Hjd<`7 z6_L;`W|OtWUgVdeZoZ^lO}(Y4P4*FW;{|my-<;Z_W_rka2NkJ*P-~x{yUFKtNob~} zQEOTi6}s-I84g4(!6ei#D6X*O>#PS*pPH9Z9Xvt(82WQr`;(uDio}1Y7aH|4p&fwQg!@oSchCAas$Qbr=6HqR4D!QpsmlA9PtVP$ z_ii8)bUklL^rXP)Ya-DbJCPrOTGMB!P-g09W>^xnN1{+m(h3vdRji8-P?0Ot--Nmn z>e#kK4ZH&?!V`RQ{$`R;=oZ=v+fg(56>sBv)EZwHVCsECJx@N+45Se17b?o5Iv$4F z3)68Pp2IL~GsyhNwH&qNzhE_;{|6-UW6)qf&lYTi3VrM$eEoJ9IjX@CL(R`}dr=M4 z9A^LW1F@;moLk1Y-!^wdHX}nCB_2 zSy7S8k6NlqsDTW%&qt${YC2}arKpJ{daGmkPI)z8(f4RaVX9n=Q}n0`)}j@JmD17Kpmqg z7=dT78z!1yE~FtiiPP{7^_6VsM05AgMGfR4s-xd*{u$~D{}*-FXPso~RYygjDf<5X z&(S0_v!78H%1%s;IVYQ4TL#roE7Y$GOhV0UEvnSy09&c71pDA0>{Py_mk`tdl8*UU5zDx_f;AKTmVo~X};ai~4A z8`Z&M>vL4cf7<*vROI|;n_uio=aNtbFY3i*r~$1-eXj4Z&o5YSqn6?+s@@N*iizi# z@gX(L#E)(HN7UN=Kn)<-T$9g= zdcUZ(G-@CfPJuBp1GlRpi9FNfh0eh4g)bK`GVGl zwtN_>{uG;Eftv9S)Y2V9P3W=p3ue{#{}l7hi^Z%pP(QV{L49f5jM^LbP;30%=7ScP z&xq=%hF78neh@W~bEwVv(B^-j_EyS;ro15L(D{!dp^K#-s>7M6j*g%je2JRLN2{~Q zbeI73JO^q?3ZXizgj$Mrw!8~!sfOF~si*tilq`e>90^6sX}-_!b|dI=H&j&-Z6O zez(52I?GIXQq(ccVl8B?Xl;NRU?)^$hNJevB2=W0E#v&F!k@N6z;bi!a#%}PYg$|5 z2FU~o8P=uNE!IQWjfxjhYh7}s32kN6lGH+# zw?KW$b+OOAsE95=MRGUlqB@5&@eAsGcgiaB;v!VVQ>akgMs326*b%d>HqR%bo-aam zd;qo9XHgwqL0vGfte>rM)|lt1FofrYkWKA+T9Qyhol#5C-#qY4w)r`z&9V{I(MkLK z0_v;Q4O@N()y^YSJ8!K1Yt6lq4pm+o)lNtB{r7*mlh{weMEju9Ix~YB)+VTiJ6Zdo zPQ@rx#Kxi;oQE3d64ZUM$Clr*<&UhNZF%zb3`plc9SJp505zius0J&m0@gx>yd6g2 zXjJ`cs5O0xx*t++FrNj1sQ03AFuJIv{EVufW1|^p19UaB9whX_P}IlpOjHLKZ21G! zfc{2x^cB4ru*n?1`KT`#8&MH>j@k>(X7fED6RN!k)ccK5_fFf*oPT{QJ!C8VZH=?V z?9TM4uiJTTz9niPJ*@pv9S*b4=b$FE+CJZbYJVSUg6~iRjlI?ULTAOTod4z&%%`BX z!?o4It!4L>V*(nUIZ0^%GTznQ_=@D^EIgY7wq$E zsDV7U`B;a{DM*j5I&MTl5$J_#_-9*T3u;EMP+w3!VSY??*mO_{Rlf#mplwj?bwzEq zvDhEaTf>i--=5ozifEdnoPUKd?@`lHDQgvLeN@FZHs24`;V9IM=b`q<1@zr;)*Q!7 zdr_$No1->)H&kSL+46zMIRENkf_<<6HRI)|8EmoTe_OxW=YGe{J&^?U^}9W){${L& zA5fdP{0Xxp^RXlO!>EDhJn85Av*1l!5)~+zjJlgIqmJ8us0Op1GHcZdbuq0%{SL@y z?2V01o25I4k>vkEMI!u+d9N!fV(U;dKa5(UQ#S8Du!*OrP`$SKZ>UK4pEWNeMa?V^ z7Q%s81=r&c{0nt4bvtJ|{0Frs5}fz*{Sz;#Q0>3G;OG07RKFk*ay=t2nvvZ`jr5`Q zAN)@ZT=Mg@r$vs(c`EH zK1Sca{~PwJsaO*g^0uf?r*-Iyz;zSiq^NueRJ{mPs3%)@+w#ZO+&4`9?x;OB#5&cw z41K@<7ek^F6;7aj@Q8cUyigxCgHEVW4o8J>0%|Si;R0NOnpw$Pro+al4m(%}p_XVe zCc@aa&GVG#W}_fCi4d%g$`3?^XaQ=*pHLkH+%cOohqW?(qr5ZDzz%oKfd54u%Y^sL zk7}h*18$8PKqs5;e~8<>s-yF$$X>VJ!&2m*pgz_!{h=k{^S2QRH8{<>3iaZC>oMzD>lM@z+(iA# z$tTQ(v7VZl1>*?vSD#Yj{Kt#A?!LWR=* zg^5ri)F#Z1DldX+uq^81wUW(OwMJPRqTXwPigb6>(v5k+`B%YG3bZM9*@|aTGq{bK zk>{l`C+fxOs0KS)2Vh0=vwC4w`PWUP|xewd?(cRis`8KuAwIA|EKwM%!2*MyAw$0IDA8OSp1z0 z73#B~md*D!VmvD1d+?0T|6e2; z;J$y&i%CA31~a18ur#Wn5!RWg4pw1x+-}Rip=OrklZjLoRLAA92ev>h*+taX`IqSX z{l7S${e1u2MtW4prlLC7glb?PY5+HE`E#59$L8aHF<(woq3U(PSU4QDM59py+kpCB zu^;DQ+OM2{ZH8@M&9~KisE*TqGn*wRY7c~HxC%9czfrq5*?05ac+>#As1Dbl zHr;Magoki3UO@E|{e$zb&*cF>%-U?m{^TEEbFBZLiO6;=O8%-ffcvfw`BJDEZpLzW z1GO1bI{v=%UlP@RC)7lipqBI~YGD4ZpGm~GCPR%ptu+W0suK43RaA$!P+vm-!!j7* zZ}Ov2`LnnP17i96mT(0sGKX;({(_2t8yVp5`*Z!xFfj#3QEPq$HNsb@8NEj}kS4aj z@8-*kxpdvF6+u#gTz4!Kc+(iDqP2UZ3>-^6n zp_v@P5WI-l@iXScOo{zHfmjjqV|&bnUeu3b`%(2@+viD>m;r=Y8>2qnd!r&b8ug(z z4}G8if0F1%LE@zTzMp)C;&k#iQOC1mG837ZsF`m=EzLD-jh^KGzTd8EgPO=vRC}9j zK3xj4WVuk0$cNfv6;t@TzN@em1sN%rkAAotwG{hMd*L>!;fL1O*3b5N?38B4iBR=& zq4rV{YegJNz8*&76>G^zx4j*AGtu4ughQ}cg7{57lShTdsg5;?1Jet znTul_s-uHg9v`FXXV2{K`z6>us0L$aF*D4GeaJ7zI+!xhly}5!_%b)ooWx0?!;Z)}}|`ZT+SgD_zZ)6O_-Og;u5sywH^=M}z2 zEz#{<{`yb8xSppZno=+%x9>vm+`tj!%LV!S{zUU3RK7wU<1uS^Ui172j^lZyV1M7I z;d#`|Q-zqwbwaKA6x0&_i>t9kK7an)5$Df8znMW_RA@G%&hHgesGnmy3@u$9Fo{#;{C)pzhp}O1bCd`-Gl@WLmYO&To8S!m19c_$ zFYnKP!;wGXg!-^aS;3eY{mBQRE}RflI~6bpqwqNns^FTnY*W#!`DWDj`qQWoeL>$% zRmqIF6{@4Ds4I0IY9Q-SOLG8q@mxdIdxF|audM+Qc7T|U@*tOlI;eoE*b>#?KZsBiJI{u``{^RhOce@ zJ8EFDs+fk;paz};RUVF-Kt0rj)eW_$W?Hvdub>9>*64aZ*#f_+W+n+y6#}h!QEOJz z=37`hS$m@*F%&i9nW)XR#Cj2RD!y2qY9>-~F+}G-EeXva!rItY=xQB`X?Q*vHRF}2 z`bSXr#Whsu|3*b1R&~>1CR7A+SSzCHwYB*^==<;g%_N~2Z$Ndh(|Q%vz-#P@32K<< zL$M9{d8nCxMhzrMP4nSX2z8}T#VmN$`VO;^Pg=_iqzJm|up$W!pcN_~jhf*&)LQXk!>d>z#3sfUWh1k?bRp>Ok|B5=a`Yb57i6@IrBKcfbcB+7&^ z9clo9s0JcX7fxLa$F-=neU4%HC#r)2wf%j+)DmWGiYo7qzKNmU`?)sfUn5;=E9^ye zbk2i+yeRltyNNGf*>GY~6;s<4@SYsKVS>aq8hw{>fjY>KwnW8O6gW+_eY~P>1^~} zG&X+`6{(x3rFo8O?<*?gX<8eDtR*G=d#aPjip@|B3`Z@=bks;^qZ(L1bKN;}oO#ikcR>HT0p9lhsfhB{uaGi#w!)w_6Bu(KiN+^p=5 z6X|{9ZRRxaR+~M~S?zs1yOp!TTYgTkv&P$fPG4u5_wk(E&U|mYxfv35p}9+n7XO>+ zEi|{4)7?9BZVIQ9clF%TPEGIQxw)No-gxs?I_tcf=bdoY$MpW$-*Lvp^q*hFab|cA zEy&_5@ZMh#>P+#bTDZqq9CL~PvW?Thn`iMJXO8#r;wWdfx6qOcPPF&?lA+AfJ7j5L zrU+DC>~4_kVlt~lZ> z^sZi+rB);I`d=-gu?TyU*AFN0*_})1p)dI)JgZ1qq}G%F&BGd$Kc&5t0epWTJ&OMi zk4d&FjpNkz=2_j-851*q^<>9c=FPdbfV0ZmU~OqoJuw?D2`G_5Hke2e$%K-1= zwP8*hZ`O68&RB1gbm|zdt0op;Y|0gU*Fdm@6E)&AlS$Zjx)|IZwo-|9`^>`9vNz8!Wm>bMMx<6l@FgZ6nm-0o?IvDgD0yoVL>K32wD`#qje zkH__Nqfm&3S?I+hm;{ew5j>Bz&^f>$ur?OP@%Rn?h{^B*X2v_H0e`~u=sjr6gv`-X z1XE!t%*^vWQ4|u=&=pf)Z`1%rqB@#{@zG~phbbQd9f@Tzh8ptqAj&Yb8eW;~ajX`)FwYDEH4fg!WM9{?o)F+@q zy%W{%LCk=^Vq?6I%7Nm?h<`H*!;YEIT}G|V@2G*iLUr^RwKU%2X5?v5151yA7>c^C z3~K4Bq8?ly)lVDLgu2?#2VhF-qmH}g!kILv!zHKzY(;f=1l7SQREL-GTfB#QaMTI2 zMD47x)=8+yEJa=S11echpmObZRR4duw&4}(!jI_1WGBsoQ(-phnJ_Ds#5~vxHG`4Z z7N=tye2yA$)X(O+Ca9$wj+($0>wc^I3kA*mDk>NLLUsHFOJMR}OtMwOQq%`wQQVHp z@h{|3&%{$^8`uBUB%_NO_+=!>o;RrE?swW`|0GPPk7iIv$_MjNAzO)|_#@`W-%;Bs z=@}Ec@u&e#M@4KY*1+wU1OK(3XFF?VUI^>a-X0a1ZK(V9VM-0{9ECbG+{I*A;G9XK zlGZAil=ga<2wS19>tySFQ8_ad%i$C(jlW_6OmN=Z7lA3Lm%-#1g((%97Pg@~=A=Fd z^WtJ#KY3kq9T?F<6%M648t)amO%}?32MO6sHKjv?W52QqhTtA?RXGV zVV{fUC>@P@@DkK@2e3XqM|E88l6hb)jG^8bwZ_LV3*N*@_yLvFqc59-C=Rs*%P$lE z5DGhK(AwQb&EzX;2Jx<#tj~%XSZU0IwXr<*$C0=LmHpvY%>gwN`%~YB`7zfub5hpF ziPUeSBGUOf@lQ*k-*pq(37DGtYz)LzsFCkM-EaUE;!~IsFQanePt=Q z(;Z&ncmq{$d)MO`gO@Q5oBnPFd>a*U_aOz1B+)%H^PH$8i$rB>1yr)t!)(|T6`293 z9GHZP*j&tjYcV4pMqT$CDkuI%_2>P=)YD*m?f<+K^nk*s&=o^gP7_NH&V}w3gK1M z4KGj~1w1q}%!>Lv7k-0fQ3Gs-O6D%sVW@%3MD?=PMwa51*Pk~kHM;YlotUu-@6rCIy#sH1lz>i)%8 z1}~zPG{r0P;4oBV++q|`P-tL3Xpa-9cfq9i0`;KJmiwjV-8=B)J!rquqwML}!v3^nrqP#tG}IMmvIhw6AU zs^jgbHQj^D@i6)$^vV3-5rbaZw_!WniOP+%pG`!ve%=wr27pHKM2A$oB|7Sv( z9W}Eys0Vhk_D27}knHs=LFLS5%!C(Fk^CD2@hfU61HYJar3h+(ZLu77aVg}Zuo`va z1yn@-w7$Z0)W4vXAn-pEsa&Y*3ZgnJWvzr7P%YF_#$Yxai=%M`s-Ik6IZM!uq@Zo_ z6RN|+{LHGEr$;SGR@A`qU}G$ar*S%J30gXi$$nG>V{j;r$GPYPIQ}2s=c5LC9}D4A zWP7`wZ@iADAr0lRCClhytZ#$IsrN>$VbS>h4m@>mGxh#h3bQ9L?XB@H z^)aX=j85qIXWkPP(GfUB``<@FGYv}Q_}4VlS^~A*Y9J%^v_!4xDAdg7*!ptR0kac> z@tSS_fSN$k#Ew6SGokv+g&I&X%*gXS6;;5NsBP6Bb>k4!cAJPA@ibJ3SE2^6AM@hR zr~$r4C1Hjnrk`-ENWBDVNrz%Ejz$e&1-eRx%@lN?971LFU#J0mKy{cPspH=+*|8(_ zw&>3pWEnk)lR5rB3rd#U@&BmR7<+NuD%6A0q;UN2kgTWyH$>&y@Dz^gUz15RC^U<# zn=pv_AM(lsC4q@f%Q zf1n}}oXYY4;7}8F;{enEhTHlSRL;ysW%XjzLABD>H>3L7g*q?ZVinAg+C;cDs^6Zj zZRn56fw8ENeTPMGE$RfjftvAO*3YP=OPb4b+L(8Fl|~RE|u>Y`6`z zwC;Hddhk=!4cH! zJz-jZyX#3qL7~ionqh8Ks7s)3sE+EOnXN}#`=TB=8vRRQU5tvrD%27jMGe%G&hdYf z%7~SyMq#k_|8xpUhOO8I&toJOOK)b{6GNzv#!k2%HP93p98X=$j^(ir4!~_#81rN_ z18ItxsrSdyI0H4Y)9By-wt|A$k!O@orEMK-e(F{l|#M?Gi(>Lg4a z9e}zn4zJ>5ROH$Rn|I0}RKLHWlJ>*DQe{=^mNb%RUenf@f^Sns2u1TV*2TW%9#PETo{Jh4dZRy zT}nZrSdUtQV^|b_L(L?4sM(I0QT2SNft0`k_#E}XOnHqttp!jIj6~%`1yn>Dp(5Q1 z$qm=jlY;i^NYu%+82x86YG5}}p?`}SdCGjI!w^(QrBEG5p=R0$bzKWQ_%J}j#~2zsE)6rI(}?@h06AiI31JaHz8h(x_&t->wiF<`BzZ``iScH zKlEb!0>;Fcl;?YrQ&4EXL7jXdsH`rA3SBkZ-U8K8H`MF1H}=5cw*DB^&pWHPpjndC zsGQ1V4YKA!R}acdL2FqO6{;?%j$C|%(@+nNEo43)hPrPKDx|A0A8x_?cmp-S_=U~q zX;6{Nf&mzYTJng(?0=1{J`HoQ32w%xSPd71nJ*TA6C< z8A$D-j{grd2caIEFVaM!9BLxfQ8`vOlKrp!8$*LaABWlnb5IdjkDBRjjKiN%Yh9<9 zxvnj0iTb0?h4C1SD^L$QhLiAD)OC%En-j4ss-Gb)1&werDiTXk$+!|VfUTGn52B9d zTd3@QjT&g;62@#8Og#eCUt`pD-B1V6D9nvpQM>Fa7De|hg@P3FmNaj@W~doYLv52K zs55+>t?xsP`~)g;*HDprjvCi#j-890~vcc}it%b3Vk$0FMQO( zP|!Boi<;3f+=!P@xiGSvIY=g>W;PQQ$|a~!Z?*0FP;39Qt=~dD__1vdEN`w4K_zE6 zx=ON=_JiuEdP7@pj~YM^)W`>+209!yfbpoAE^ z?0<#yF%2R35ldij1$&0$8tQ#fM{353=El;fq^f4^fI7HFqK@GCm<#vY_Is$@`h*I7 z%1UOU87sLai}TQ+3(BHG+z2(G_O?C|HRHJ$fom}mZ`sdNS2q1*LtPh%C9ygx5~Hn? zP!pboTB`3|3VQG^)P6mU8o-~ZY<-2w?)X*A4AY}-EQ|_aWmIVEqL!u+Du>#jmZm4_ zfiCL48K?oRMBVRhq@cIdkEjP9u%5y~)UToctyR@LATjF3K-5{D4b@?G^k+RPhsvM^ zQVTVa7N`NnpmJp}w%7i5Dd++BP#r%&h43Y|K&P6COe@?$y+5kMkm_b;WvsQWt*t## z2h?z@&$_{S6mw|*|3)D{7ygS%o{$>mZ5V}mNesqNT!2c#qt*x3gf&fjKK#t*bx<>} zQOnrO+Qm8mbzY2<+W*UJ!#?X(tVsJS)Y^qd87o;ET03A9KJSNG!e3CKJ%&!~Cdy9FF>qSQ<6s zCaBQ2L){;P+8wdBeF*A6n`oU=kNvNg&vF`+{Xd~@IBzewf^(_gv!4&FZ*pU-b({5$ zHAw@ror|L;QU^8AZm0vQFKWP(Q3GD(QqYB4Q2YE8>V})B-S8*s!WXEu`-mFg|4`RE z4Nd6NU~%dps7SR#y?pwkw&yA=kDE|S@i*2&_cH};ld6r(jjd53>VtalaMVD?quzqE zP`R=VwN1~U26Pv79{h>5@e%62h{k4Dl|v%90cr-x znmYd9QfYyYsV~8CIKG*AK+@*MG^lL<2K9gfsQ${>dUYI2y&3AdTNr^au#)zFjusjT zKgFU(IvzE`*{BdNM@3{iY6y>1=zdE> zCjhf1FPsDYeEh4vO|cl>F6g~8Onpk|z{wYjbkYH5n0`l)~#NMkI3U9bcCQ1`uW z&HmTO6SOf0M{=x3JwF!3VYYo6=AnKL>*6~M#wu;ins-JG@LSZuGzc|;MYeqnY9KqT zC#=`ovj27C6B=~Gd(;{Qv@Hw$%Au0dUY5*4|dsN}wn zx$qfk!l~NZC2%PyWTB{mgrhDfk2=As+4kDj7N`MsL0vZlm29I>YdZxs)9-A33x-lZ zj2hr$)W8x&n}NBhC}>9Cppq^Wwe5=8_V%cd_D0QYwym#04e%7|zVoPa;SOrXpHPtr z=wOy818RU-a3mH)a>4a%(gzOT$vQfo6MPWd$%Oh5s-yR)2Yt2e@jIK2)1e-m5A}Ho zR0PYRez=T6{p8dQ3*mSyfV)r;zmNWZ|Nl1yh2)*}3u>nEyO^B#1~rh}s0S57MW`rh z3EH9#p3bPH_!cYR0Bndqq8^;Mt2v^Jq297Fm{t4#428=06gBcf-OP53!bs}S z<<8oEt~u*>(V!Uz^f%ij8EWQ{sNGQ!wG{O+9LL-Cy{IMo1-0!SqOSXZ+6@I`&9QBX&dQ8S;7+Dp4QC~Q=p(b?7etyx`@1r98)V6=X%-a8nMwqWixlkR}K!vacYDPU# zYug{S_M@%yP}gs?9zcD$Jd3*TFH~;4Kuz!iDq;yontFP43)7H?f^3R9K*n2lqSpLA z=EP67o|Rpbhk8-e09v8Wfu5+P8HEb{0@MSSS~sHxa=?1VW&dktw`tJP`4siCd4~#N z#!=>mVAO-cP&2ED`n(1z>FT3q-UHQ79BLQLMBTRn)$b0}z^++uYoxm2J`EM|ITpvl zqs=+c6}1#IQ8QeL8o+K;E*wJ5@K;o*Z=kl@ebfL0#+U&l!2s%+@d{=`Md}}yf|4ic zSTm4Rs5Q=vN|rEG$jaLGI=0>c)j>bh0W=vE$+f6~?Lysu6!YUbRHQzmmNMNq6A8B@ zg%BFbqi*Pm>`PB9YX8qeg>VyUU%Ax5J#f!D~*a+ZB+k_tnE#^ z>*+;7OAu>6a8VDQidw@JsG03VUH21eNzS4oa1V9Vezf(p<4wd0pq8u*>f3XD>tx%0 z+%Nm@Hwv1`->A^NMy=%+)BqApFayen+6{$J53Y)Nu?=d8CZGl~A472mYH4oU_D`rK zNH@_$JPg0l{%=k}5A26Znqk(ls2NN_FD^qR*Gkj_kD)?(85N;>sFUr5{rn?pK#3-q z>vExXNf9iFQRu3}Ar!Q>3vnoJ!TOkYviSjGC@K=WQ3E}NdhjLGTK{f+hi@;4*3;zo8-%FvAQaku?YEx-zK#D!LRjqx#qmTjMx9fYlr>m}&luXW}f=;a$`k zKR|tvc!7H9KjlGzJr>{pQv1UhWf6Uc%F$!b<}PciEVHy>O6UB^~^UDNssaM{?BO}@?rxn zEQT7;L|ldou>h7_;CNbL7mUE4P)Yb6%VCm*W_#AeLDajWcGVxK2)#%3n`4ogSOn(d z`JTEIB5??Qhg;EqWG*%{ZG@_~vUWhNad+H+15l9({>~&@9xP0~0xG%tpmx(z)I`o= zEPh7+@Bj2(VzO}*p5%iWs1BPhHQ#_*qq21cY9IfA+7(Ap`}kK>Zrnyqbe1_{X7)4)(cSsT5H{g zn!sLUlAgo(2ldt~%o3GbX(H2hrE7jKXDSU%x!|JxAas=peN)to+oB#6gBtm8)J&$K zl5iQ;!Gremq^r&6Sy0y(LM3;3Tc3zWsV{UXC^W6snBZoA|ETPbHSn0k{PX4?%!oookC9el=$ICZCaJ)c8GC}@}Y&B>am{k;kg z<3-fc&HB;t|MvVjR1((M?fCz?&Mb5X)8N^|9|k)dK&Wg!zSr^pTF!mc+O^wf{`6`t zDk=A&*7zwZVu|;g&&y&_>K(8c&d1z%4u8eBcmNL{F#q~~_(Ar61s;6iAU9&_!;WV@ z7gRf9{@~y)s-v1m9nUZvg^lrlSQQ)mWd0q|d~87dHLAVxG4o^nB(x48kQm78cVI$m# z%BioY2vz#U@l?Qps3qBriu7BTLVpTrPT4{#}v*z_%2Q|@V*a_Wv6qH2&qHfH6&ivugUDSoe&YJ^d z0A8g&3r}I!3y$Xq7P;tn?%^9$1TJ4P?Vqtc_5GJkKmTG8>ZPuji1$SLcRhP4oacj& z_yT{qYJN>__chc04=PEIT{q`MncvJipf;wYy#ZFnXw=%T#>Dsx6~T9?cSiLa=ABR* z1E@E|B-;N?DCp(U9(7iCM-6Bw=E7Px%~9DKL#U5KwQsWR7g5{p5$ZvKx6A-CT63WK zEr2?B%A&r`S4IEN|26FeolyfBh&u6H)EPY;b)v0Ab+i`)@mE{Fi#iEk+V+1j8TFL6 z?Mnz1sX`bZ%c1(Ig8qO1--LpW#*V0tVo(Daipt`#SQ<~FLK|?$bdU@aP|u3`x}6L4 z;Bu&bqEOd2v-N1yb-hqW^@Ka@e-&2IpqIl@d*Kb#03M<`c!8S1M^uOt-8C~wj(Yh7 z+Ik_>eMM3Cm9t-nL% z%KuOgJoCG`{~Bswk5B`0?irJy`UylWaVD379+(#unv$sR1C200c0qM88+F}c)Y@-E z4eT%~>(APH;2(}BntFEBbz@OEG#?w`CajL0`zANs8n)09bzx7`$VQ_cFcTHJrKmMs ziJIwF)C~8cj_50>0Ve&^IO_UwsH1u#>I6NA>i>gn|LT|hpZcLWi*usBDpf=c zpbaW1yPzU6617XFp=PiEgK;b7zze7W{)2kZCsaSqBlF8>Nl+)?LFBQXm-v$kz5g;l z>xDmdJQt`Bd1C(NLanFf-{IzcX5MlwQ4iROir7BPNNmre9{Big6PZ`2rF)0kj^5`c zLa9&@$%ER?CD2uFppM?4UXNc;yP(u-$8#C$pt3jn8#AB*sN@=o zn&CLqwwi^C&;nauikk6i>u%J;s<;)(`eHSnoui5$sR6k!(6HMv8HOZ9&HIO3KO4df!PN*atfa+iz zYH8-7X1*A;-&dfv;g6`d+)31fPFZiG?t6(^YWJ=EAo)A3Zo)Y0rkMvm=9x6 z4_s(nj(VG|wQfW`cq=M`+ffhPhq~`DYFC^z?XKs%z2J(y;D){69_Hf0Cs-L%yfbEsI?u2>TonFc_*Th(T7@s<*1k2Hq>@Ji<}yqt^Nf>HvC+8o+-z3DX1w z_-Fo|btx+Qm!tYwjarJ0sJH1}mx9*p1kS=+sD0VXYi=BmTFWU|3a6tFPhm4`6VKeY z3u{uZ9zVdpM6*yy{Q#R{q67i{NVh}1wmYJ>xjT}AW-j%b;6F0^qe43cwFL7} zOR@|#z^$mY-HSSEucCItKd4<3KZ#k2jHvqx*m@b%OzWc}9c|kOVFta3r`Qix+7I@k zIy{R?qI)<7KcM#WP=3=~51x-oru7(%zhEAGV%t+CGodbwic~FYQ`AH|pnw1OqM+m$ zhsx^7sE!t50X%|5@HuKGLCFLBUm(J86!mSW2NX#W;D39TMeUlQsASt`{l$6>^_&Oj zDtrH-ptVn!GQj_uO^a2icS9xFW~_nnQw4Z_#JYG<_0$3WpAoNP2kPn5n4}wm1lF?z z6``zwW(muna-A55B_{jUp#r#B&-imER_g?gQ>??r|36e>Bdqat?? zmDO*t7FNm-;D2{aL(TLQYJwN74^aJlKs_hEo6)RwI@DU1vGwklo%&2vN83>^n|-K( z9YwAAB~(Q2qW1eI)WEWSW437#Yc13lla8o?4#S_(J!wCfp2-Yk4eGUf7VF^~)Y?|c zY&u+x{+A4nqWubLTQS)i9)m)z$gQ*w6{MZmla@RAGf@ZQB_23_{ zFkV9)Gzqeq11Jb9Q?G+laTa#OY(eI}F&IaEE$SUoFgU>fcSd^SDC$3=LSH<)8BkSB ztTb&!K_Tso3gtl58qY#y=_1sPYf)>q%YJ?Wbq<_Ee=eXuxlj>Fn#0^5f;v%)qRx++ zI3K&&;ZXo>cgyQ z@&@>SYks}8emM&CwbAskTge!`=zOwziK5BqXQA^gX5c^*@45vW@n1~wCEL8HX zL5=hDDQL?)mHFyE!Hp29{{2%ChN z0rWwIEDp8rm!Ljhg?i9o)BtXw2K*d#eLxXoCR8$p+j>nbK|LB3;YC;k-8SJS8D^kf zI-60UzJeOzUDSx*pms?>go#)nj-Vcd;kX3#9q|IT#zIBScAbLCne(WA@1S0Ge>4D0n zK6nC$pq8$DDRW&*Y)3sBJ81tOrBDWQl{Rm$Xsk+oIo8HUSRNzF1o;2#ra!i#z8`a9 zhO)-e*ob;Ntb;pH5pl|yF_?cE3dJqJRqK`V`h6)OBH~wJ(NRx(cWzZ&88$uMzd2K_Qxq8u4mW2+yI`>^iEW z2iOyzVkvA^F~I+?W@ckB^~b1)B(7wZsvy>+-U5{)D^a^;H)=bcspOiM&2<_yvV@h5 z!Kj&*L=B(`>V^)Om!r8CYDV*`n2x_k<;X5nKW8x)K0-Y(X;ot|D&mo-1FWn|LEmOu zqHY+Bn&}eM>vSdRb$b%E&2FQTFJ(3Jm8=?SfHP1@_?>knHl@A+-=kCA4Dcf=sZ-T3 z+u9AHpb-{EB}ElmZ-vT*KBxhWM6K~S)XZn%XUuur@|hZ;B;w4~A<0zowuWXR2o&5Q-XcX=_td^7Tcn^>Ebgm}H%eir`|@ zx7;(RUG)fm!T9yf(w@VE)F0w7T-kvAuTTXwG#wVQ7Dwem1?+&$@ORvYTDwJ!%#1do z9<&P=;uSoEF^vQKe=)gW6O%g&QQLKy^(Ho_o~|kTf2?k38sPtz%5P8u8qv(G@l^bi z`uC^@$2B+KVCJD_atN#7@D}FGKZ>c@o{v$H`rOiN&xEbaQf04dFp^|!{ zOCcVG?@>9h2DP?3Q3udLRC3)wCD#WG$CPbNQdUA;*9Xg5)P8o*DeNL)f*)2`=%DR`20GG}){_KF-Gi_!!$@x~^u%{ZTm-hl<2Z%%c6joPyT=AZp~NQQ4lNn@N%&)J#jDwq<>5 zR}7*)5_98H494TAq&&Lj>8`P%x-vv>8QK$ z`Rp)U9Zd!a(yV`zY< zD^5h^)+sputn_(~x#U;2HHRF=Q&33GVy1o-? zzpTaV;fG+d$^T)xskjjwf|pG(3-U*8LMGujKod&Gv3EWxM383xI_p4 zN$RD>@Mpu+2ciZrWUTokm+`2an2c)opBMzyEiaLPZ*0qLQY_I1}2k zsL(aU#~6);u~wYvXs9*LIumt}EkSCuTj^1K`+LiWK4|eKRIe5K`sTYQJDRp zthF90RMDuU?2Ec?FiylcTTe0BbeI{HYz0vdu87L=ny87?we{wx0k^>-=uV=bknKmU z-A&XVK0QW_{L2*cxii%)O)zSPrBUZYb<|1eq6WMNwKTt=26Pbv@FD8u_1J#?6&LCK zpJ-Zu=LsLI#BMlky7{x+_o#aN8Rh^vg*~XJo*Cf(m&+rN)7f(y^)jmE3-BDp!Kmab zHOI`n4l3)LVNUFTiokeGul>K>esBsk;^(NfapneirePXXZY)O~EPGH7xQcr1K1L;R zig_mVVW@$WK;_P7%!=vfnlM_EuTe8exxl=h zBQThHOVm;hL!A$cFbuDuB9w5Uc^gJz8S1g@ z*Z>u&SoD93MGgFW)EaL_?f2uTes7|V>SyThf3f-El5#QoUpExC4b@QlxC@rVQK$~~ zp+7={y22h<+ac07dY|Cp^`bSY>?*HB6G z2y@}OW#)#nsNA@Oy6z6@fzPcUP@#2}o9ohJ1?t&ROVa^${V>!(;!qQqVs+Rlo19zfsIBY*Zff~Ri>wVP0^u~Vv3Dt3e?@d1`Q8WI=*0Z7d4Ml}M0!wNCSE3L@ z!wA&O|HjjpdWHG3n>(l*Lspu#3`cFN2DaV{3sawp3jG1pE_sH^t;DO$z=BZ^&WpOg z1ZL6xZ)`v4i#ifVq1JpmD$7rxlI8{~2~(^#YZ!&v|1D5U;9_H(gNnoxR0Q9k2J#Vg zj-*^;PSOzc|Neg^3QCGzs0)XoUJ|oW5m|-W@25~5KSwRud(@J7*P4MQMKd8_qT4(yn zfNBp#-B%XXPYoQ34N>=>U1z`lU!_5zeu#td6Kcl&)(80ii^cOWhM} zLhX(sTZ|R04Xn|qFE)LxQ>|-VTlfhZa={(cz75-ItZD6F9frO5d=4tP0=AjZCPFP? z8dPX=q9TzWwbqqT2U-*=35Q?-bZ1eRK;e-6pxO^+=50}-nuejc8P&lxEY6JMZ8u9) zW{2shJ!;LTq1Ji@YCxM%4?JkSYJHC6jO&TN)4aXXqGl9{N}AHB4yvIJnr5hu+oG1F z8){~gQM<>7y8nAr@~%Z?|0dLRhpa!NW_|(v|Nid_1)bdqcbSd?@hSD}sP<$(njb(i zTI*TITMwdg<}E5xnRc58Rz@vlZPZ({Gim}8F+a{m|9}7I5Cx6!25QFlQ8W4nz3A*Q zGm4LzQ4-W!G7EBqdWxZTPhZsQJPy^*F|37GQ2hn%4ev`13@1S0zo_*#)L8t*opaxh5n_vah0W%NF;d)dA9;3FSv)_b1E9$(cwV(a32e+W1 zGIm9ccq95xIMnCf1E!uDHS=t!8I(Y+bv;zpH%2W%Yt(&lsBP)9^_8d-^#{}dt{q_i z>xPFkbi)(}&A)OPgjvY)<2aA@KMt8B9DLa5qGmcCHIRjP)U>Nq&a|Ephh?mJL_{)hq-<>Yu*|av1rux z>y281xu{4iM-61Vt^aJjftt`WOs@C;M+zEwf?rIwW<}MDp=MeKwY}P6Y3zr}>Mf{! z{4**k|3S?x`6&~bv{;0C7F2}lq6X9wHGtld=X-`z(8)Ck)xiu@=;!GIT#b5pY`34E zwVz)>4eU?*`3F=4()?=v95E|ufbCK3Q&CGh9|^r@Il2nfaSA#(uA#m@r#)?wEg$N_ zIv9a{QER>$mDQV3Ge3gr_@-_D6Lr$Pw{_1M^9u=qIF0sw*pA&*<1G9C84c^snb6ER zZ$`Qv^`M=oB{+b3iJV16WfQ`Nn3sm0SQ6)92wp&~@kb2BWLL~mMPfMh{;2EMV0*lWTEdD~&AHJGb^jR5 zhVyKF7b*hoDGK_!d=WL%m#Ad)RQ3KzG%9&$08Q-I;4n{vT9Zo~#!dz6A z?m(^GX;dVhp=MCxk-4ri>ZjspRIZG~^6cyR_=x)Tzf6Pkljf$gA!YZ~s3YER}Q4#2k3jH|L1m@vpT!Ff;{!?>eHbV`#A8JWQpdLIG zb^pAlu9?X?8XD7Z5<6k$XXb&UP!Cv!8rVkEfcMz?X)I3tH`Iet{cRqU8TFuisO?u2 zb%fWjcEl3YN4gX=lHI5aPoW-o2lb#QsG0u{m0X#ho9l|BK953u-WJ(To)M@APeGjn zb5YlAv>rm`)55Bi|qek)KX*k07yK0(bi;HBxX6l%bAFgr%020qq) zKEt{KHNjn|0sV~X{|+)x*YlP_UK;*Gg)sD$xiA8CVNKMG+S~fK7)E_G7QpSOm(cI1 zc#T?u%>S6(lNUMY_`4%aj9pO$HNbjr%|Lo#a_#?E3QCSKs4QKATC+{4&>lt& zZDqL74aa(!>_0Z#rt3)krs7iXGi5q2EqGlL{%9S3dr5S^@a0b@Lo2ZE9|6~SO4*diA#QxVz zqG^zQQ4b!C3iU$k4lGFhESAE5Q5_chYz9yhb>w!(d^j6*G9I*_-$doeXVf>UT>qMg z)o>|j#C0(dwnBxl6KaGbunYt$NNkKs;SVk<2#ZeLIis~>Hwe6;%a%Car#?7diTt*G_E2^JN z{79;LNmRYDt@lSoYC6`%W!PH#{{;ojB+Bvn{||^7qDHzI^|CpDck!aFZwv7Hx8(^` zB>qATO{6cj)Bca6FdH9Y7Y>TS@x1;6>G$}i!=eei z{)m*qHe6R7HN(}m{RnEnXR#XIMnx=VLNl?#s0S899ZiJPiu^hFZH)AmF!qRvR^`JC~&3)NWNn98^VF}dCm!SGti`wQpQ3JY^*vo(ajlv@u z4q?3{UjH^qk<{xyv5KRXCKi=6!%#Ug9vkA1SQ8T`^ZJvp5e}jLEowp!Q1^X6MJOP- z8DMJEcF&aD_4otkKcSAyT`9c&e;NG-Yg3`&cE<@F!618@%Y zwYFX+wYfe9!)V`+qrx+M{OvEh_YVQK24!4=@fj zvv1RSJvvYZU~ycC+UFN-J!v{quZ+`aAA#Dg$K2b)mfBOcb`YnmNuRLmE^^x7f|Nk?EdNi~~t=%Tn z1M__2^}h>>p|)8=)WOmWmBoEg5pz)ynuvPPOkBqhpq zm>qXwF1&_13I9bcS*9FjVj<}N`+ub=6yt*isE#ILYg~mf=;ZYJ{|^cJpazm9mw9k; z)PvfhA~*^g;|8pOUojYKj1sDr2w zA3^Pci>M{JgX-`lro|*7W`;qi_5!G+t&Yl(2B_q0fnBk02>ZVdg&Q=~#E?+VWPN}g z@FK=x(Yz)C`|wxlUGkZ8qey-e;+Ggod)fkC|8K>Y#oN^P<3L=rg_^Ajp`f1nPEVqsqY&u9Zs1Mw8``u`NHBUYz+3Oi!za1;6gc$)e$)Y04{ z!s}UpYq2|4DC+h9x1~0q+N(!;J)_tq?mY_1^627T|9`b=09K;@9CfgSl`s!%jQWD{ z9qJ{t7mHwql3xF>VAixw$GWs%#tWFE6x)&q{ev3Fr_x?eW$GQv(69a?{Mxc!&vHI^ zSVvr|08NUHLK|L|0(un)b>kQ$?O01-Il1OT#ky^3se#} zsOU02(j7nf0?PEg0||Fzodn4Ef8U2`IqLk*w`>ZLUk!!cex_P@^l;uHpB zvifEh#G$s&c~r+w@e=ND;PwA;-SmcROV)5`Bd`Ali4l#xo{xOK0i$tc6BD8MP0cyb z85_{P1*@T_ndz^3GxmQbI?B}Cta)S$+cD1Jx)CkSeooWMyaR$z2S+Yc5=Nlbcortc z7pT|tN7Or`YHJgLTBv$`RAic<-Z33pv;TGC^`{{f1DSyZs4s8h^?z$Ui`q_qqS}Mn zn)ceLkaj@5hPPl++>5F31nQg4HCum+dRfJ9XWCO(3%C?CqFUDGn2~xH)Dq}(y{{Lc zM*IV68y-c?_%7-se2lv8v#qCYZyuBr6VP4}HLx0}2(~~C*zHC^FNIjtOh%)&*;Ld% zzKbms>x;ok7 zcQaWXgc?~SYGyT1Yt_)&19MOxhqZAns>8RaB}v-dT%QLCkf%Hrz>26Gh(Qf_igkH+ z_P;{Biw1cB^)2?8^rYVw`-pl=e#JZ(*wci#6zcQls3mKM>Zd23$Dyd?tJTZv z{|}N6!_U-{#dtjf2vI_}HzB7mq7Na*nSIR<9*g>!*YS1K4C?ha-|d=VK3$JWvURa0 zLO-Aeup6~KkE6c(T|f=|9TvmH1I&agpeE`@+rnT}NM@k6+iKLwx53sQVF2}Ks0X~j zp71lJGdrr(R`{`J!qgSB`H&tnf< zIMmEE{xFl2DNrHKh>A=eRE`uvEk#jO5|>8Jye=yFI-m|97qy#KVm9rY9TaroB~*ux zP@#Q+ipU34)+Qfr29N^_Q!jwp9j#H<4M0V13P$2g)PPQ+zI2{NUH1^RRR5y?@Bb$n zVLk{#tw|(mJJm)FtSf3?4?{05LUp_p_3~PcdcaZC65T+p{cWo=(wwMyP}dhheO?D$ zjiet1e=?vRG!OOQT^Nq1P$B*wDnbG58Vw|gH3jOyX;7c1Lq#GhYM?n#5zTAc!>z?# zyZ_73pn+7zl2{+B;bc_EF5)5l3pKDcqs)x=VN>dtP&3Lq+T=!E45Ho|HSpocrtyqH z9eCqVOSp729qJ`>j)q3~JLdj8Mf}M+;M7hl;gDZrJI`58SE=Lb*wXW$HA#Vj?>b2XIf@wobS`L z#ZEKd-078_F}@qqOFOlE>1GsmHv6j17@K$?LD|c5SNbl_=;}=Im7Lkk>F%2~bF8z} zmu^;+)5{kN&b>{YWX8MlK4RIFxp3Kdhya(N#Retf0&zE{$ zJ1551cV3{=%@;SXv{T1-bY6(l$@gU5N@s&_+WceA#vKh7cpYcLjwTDMJI-w1l0`wz zcfNy*iaXPN?-uQLmhITQxRv8{@g-ie+nMh>x}=^n&zE}XY3Eztou$J9swMKZTo&&1 z^-Wur!CCHGy=;mzVn>nXJsfAWZ^`%NohH6J-xqiK_|mOdnf!Z(_JN@_#&*6FD-JtL zd~qv->NKaWf9ep8@30^BIMlx%SV|mYsi)+#%Cyzhdh*YFtWEnv`b$eT$D=%!|G7I} zugu^$4Sb1L_jclT3|T$JaaQ=^uPyAX@kOpJ?TqsEU0XhNXRf?QMjW6g{ms=uzN2f) zI~{z^y5i1wU&(c?oL0WM>pD6!e4o};cG~#Lu8(qN`6jLJ?@aW4S%1rE@4K-f!ddT2 zzOkLt+t+L36sNB5(?*}u+Ba=eJ7w6E{x#ZG-+@-3&GM!p+cLY$F4XY0n) zlX!M@X0wR@>7OXy!L3~bh9%mOXInAH>A$1R4}p#|&DVGP&(0iQ$sH4t_v8j%gq}G} zb+Yg5j?B&w-;*6ZQn#R8|L|W-@>Jx1Lw9uE8R0lJd<%E=aH{W!|6@wWS?x==yRg&I zS9N!3XQ6NO?g(dqZ`W?uX*f1=&+f=QPMJ~(S`P>>5*D$$&l{(Rmr7VzrHI{2-#OpM z%hR}E<$j%`W4rf`DOe>swsWcA@UZZRf?-7qh7}7AD^V)ESpKjQVPW(8es;PQXkM^- z=a|m@qGNmaD-~S3cgN_S(L;v>hjxpN?bE+h;le#_OQDXvd*z+~+h-?ycdmb(z@#ao zdj@xp=^xv8~{s_piJLrCZTQy;g&auG}y}Hc5H`<$de%}yp zV21u3yLArk6dfBKJg9fSPO-sVJNJz4#I2V@yiTKpt%J>cE)Vto_y6-bH`43I|393I B)dBzj delta 36769 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 diff --git a/resources/i18n/sv/BambuStudio.mo b/resources/i18n/sv/BambuStudio.mo index 42bd8cfc4a3fcaaebf5df92424c8a9d81ec64795..b8d330d504105c246750f175287eec75051b6813 100644 GIT binary patch delta 36750 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 delta 18773 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 From 464af822e1499057809ca9816e7ba6d73db364b4 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Thu, 6 Apr 2023 08:21:59 +0800 Subject: [PATCH 213/339] ENH: add print error in cmd clean_print_error Change-Id: I22328a8be58c9896c40eb5f270e8a08e4469bd7d Signed-off-by: Stone Li --- src/slic3r/GUI/DeviceManager.cpp | 3 ++- src/slic3r/GUI/DeviceManager.hpp | 2 +- src/slic3r/GUI/StatusPanel.cpp | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 9a35bde598..8bf734569d 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -1459,13 +1459,14 @@ int MachineObject::command_pushing(std::string cmd) return -1; } -int MachineObject::command_clean_print_error(std::string subtask_id) +int MachineObject::command_clean_print_error(std::string subtask_id, int print_error) { BOOST_LOG_TRIVIAL(info) << "command_clean_print_error, id = " << subtask_id; json j; j["print"]["command"] = "clean_print_error"; j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); j["print"]["subtask_id"] = subtask_id; + j["print"]["print_error"] = print_error; return this->publish_json(j.dump()); } diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 213341fd91..94e0f08873 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -694,7 +694,7 @@ public: int command_get_version(bool with_retry = true); int command_request_push_all(); int command_pushing(std::string cmd); - int command_clean_print_error(std::string task_id); + int command_clean_print_error(std::string task_id, int print_error); /* command upgrade */ int command_upgrade_confirm(); diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 476ac6c4c5..f282bc60b9 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -1622,7 +1622,7 @@ void StatusPanel::show_error_message(MachineObject* obj, wxString msg, std::stri m_print_error_dlg->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this, obj](wxCommandEvent& e) { if (obj) { - obj->command_clean_print_error(obj->subtask_id_); + obj->command_clean_print_error(obj->subtask_id_, obj->print_error); } }); From 4c6623848d49bb2e799e73ceebb131f8c9921ca6 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Thu, 6 Apr 2023 08:39:38 +0800 Subject: [PATCH 214/339] ENH: refine tips when sending print job Change-Id: I2ff35053cf507329880caae3dbfe700d6e45ca2e Signed-off-by: Stone Li --- src/slic3r/GUI/Jobs/PrintJob.cpp | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/slic3r/GUI/Jobs/PrintJob.cpp b/src/slic3r/GUI/Jobs/PrintJob.cpp index 7bc7937268..7210957d76 100644 --- a/src/slic3r/GUI/Jobs/PrintJob.cpp +++ b/src/slic3r/GUI/Jobs/PrintJob.cpp @@ -110,6 +110,7 @@ void PrintJob::process() { /* display info */ wxString msg; + wxString error_str; int curr_percent = 10; NetworkAgent* m_agent = wxGetApp().getAgent(); AppConfig* config = wxGetApp().app_config; @@ -232,19 +233,22 @@ void PrintJob::process() 30, // PrintingStageUpload 70, // PrintingStageWaiting 75, // PrintingStageRecord - 99, // PrintingStageSending + 97, // PrintingStageSending 100 // PrintingStageFinished }; - auto update_fn = [this, &msg, &curr_percent, &error_text, StagePercentPoint](int stage, int code, std::string info) { - if (stage == BBL::SendingPrintJobStage::PrintingStageCreate) { + bool is_try_lan_mode = false; + bool is_try_lan_mode_failed = false; + + auto update_fn = [this, &is_try_lan_mode, &is_try_lan_mode_failed, &msg, &error_str, &curr_percent, &error_text, StagePercentPoint](int stage, int code, std::string info) { + if (stage == BBL::SendingPrintJobStage::PrintingStageCreate && !is_try_lan_mode_failed) { if (this->connection_type == "lan") { msg = _L("Sending print job over LAN"); } else { msg = _L("Sending print job through cloud service"); } } - else if (stage == BBL::SendingPrintJobStage::PrintingStageUpload) { + else if (stage == BBL::SendingPrintJobStage::PrintingStageUpload && !is_try_lan_mode_failed) { if (code >= 0 && code <= 100 && !info.empty()) { if (this->connection_type == "lan") { msg = _L("Sending print job over LAN"); @@ -261,10 +265,10 @@ void PrintJob::process() msg = _L("Sending print job through cloud service"); } } - else if (stage == BBL::SendingPrintJobStage::PrintingStageRecord) { + else if (stage == BBL::SendingPrintJobStage::PrintingStageRecord && !is_try_lan_mode) { msg = _L("Sending print configuration"); } - else if (stage == BBL::SendingPrintJobStage::PrintingStageSending) { + else if (stage == BBL::SendingPrintJobStage::PrintingStageSending && !is_try_lan_mode) { if (this->connection_type == "lan") { msg = _L("Sending print job over LAN"); } else { @@ -294,9 +298,11 @@ void PrintJob::process() if (code > 100 || code < 0) { error_text = this->get_http_error_msg(code, info); - msg += wxString::Format("[%s]", error_text); + error_str = wxString::Format("[%s]", error_text); + } else { + error_str = wxEmptyString; } - this->update_status(curr_percent, msg); + this->update_status(curr_percent, msg + error_str); }; auto cancel_fn = [this]() { @@ -324,6 +330,7 @@ void PrintJob::process() else { BOOST_LOG_TRIVIAL(info) << "print_job: use ftp send print only"; this->update_status(curr_percent, _L("Sending print job over LAN")); + is_try_lan_mode = true; result = m_agent->start_local_print_with_record(params, update_fn, cancel_fn); if (result < 0) { error_text = wxString::Format("Access code:%s Ip address:%s", params.password, params.dev_ip); @@ -341,7 +348,10 @@ void PrintJob::process() BOOST_LOG_TRIVIAL(info) << "print_job: try to start local print with record"; this->update_status(curr_percent, _L("Sending print job over LAN")); result = m_agent->start_local_print_with_record(params, update_fn, cancel_fn); - if (result == BAMBU_NETWORK_ERR_FTP_LOGIN_DENIED) { + if (result == 0) { + params.comments = ""; + } + else if (result == BAMBU_NETWORK_ERR_FTP_LOGIN_DENIED) { params.comments = "wrong_code"; } else if (result == BAMBU_NETWORK_ERR_FTP_UPLOAD_FAILED) { @@ -351,6 +361,7 @@ void PrintJob::process() params.comments = (boost::format("failed(%1%)") % result).str(); } if (result < 0) { + is_try_lan_mode_failed = true; // try to send with cloud BOOST_LOG_TRIVIAL(warning) << "print_job: try to send with cloud"; this->update_status(curr_percent, _L("Sending print job through cloud service")); From f06b214c308e5e821acfd3ea3b44a4493ee2c9ef Mon Sep 17 00:00:00 2001 From: tao wang Date: Thu, 6 Apr 2023 09:37:19 +0800 Subject: [PATCH 215/339] ENH:optimize ams settings and virtual tray 1. separate virtual tray and extrustion calibrations 2. only when confirming will the disabled materials be checked 3. uptimize ams style Change-Id: Ie435555d0cad45fbc0cb1bf7e1706985ec1aaa78 --- resources/config.json | 25 ++++++------ src/slic3r/GUI/AMSMaterialsSetting.cpp | 54 ++++++++++++++------------ src/slic3r/GUI/DeviceManager.cpp | 3 ++ src/slic3r/GUI/DeviceManager.hpp | 1 + src/slic3r/GUI/StatusPanel.cpp | 18 ++++----- src/slic3r/GUI/StatusPanel.hpp | 2 +- src/slic3r/GUI/Widgets/AMSControl.cpp | 41 +++++++++++++------ src/slic3r/GUI/Widgets/AMSControl.hpp | 4 +- 8 files changed, 89 insertions(+), 59 deletions(-) diff --git a/resources/config.json b/resources/config.json index c69e70b33b..e0a5acfa6b 100644 --- a/resources/config.json +++ b/resources/config.json @@ -26,22 +26,23 @@ "ftp_folder" : "sdcard/", "printer_thumbnail_image": "printer_thumbnail_p1p" }, - { - "display_name": "Bambu Lab X1", - "func": { - "FUNC_EXTRUSION_CALI": true, - "FUNC_LOCAL_TUNNEL": false + { + "display_name": "Bambu Lab X1", + "func": { + "FUNC_VIRTUAL_TYAY" : true, + "FUNC_EXTRUSION_CALI": false, + "FUNC_LOCAL_TUNNEL": false + }, + "model_id": "BL-P002", + "camera_resolution":["720p","1080p"], + "printer_type": "3DPrinter-X1", + "printer_thumbnail_image": "printer_thumbnail" }, - "camera_resolution": [ "720p", "1080p" ], - "model_id": "BL-P002", - "printer_type": "3DPrinter-X1", - "printer_thumbnail_image": "printer_thumbnail" - }, - { "display_name": "Bambu Lab X1 Carbon", "func": { - "FUNC_EXTRUSION_CALI": true, + "FUNC_VIRTUAL_TYAY" : true, + "FUNC_EXTRUSION_CALI": false, "FUNC_LOCAL_TUNNEL": false }, "model_id": "BL-P001", diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index 06a7e41864..efdfea3023 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -530,9 +530,39 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) PresetBundle* preset_bundle = wxGetApp().preset_bundle; if (preset_bundle) { for (auto it = preset_bundle->filaments.begin(); it != preset_bundle->filaments.end(); it++) { + if (it->alias.compare(m_comboBox_filament->GetValue().ToStdString()) == 0) { + + + //check is it in the filament blacklist + if(!is_virtual_tray()){ + bool in_blacklist = false; + std::string action; + std::string info; + std::string filamnt_type; + it->get_filament_type(filamnt_type); + + if (it->vendor) { + DeviceManager::check_filaments_in_blacklist(it->vendor->name, filamnt_type, in_blacklist, action, info); + } + + if (in_blacklist) { + if (action == "prohibition") { + MessageDialog msg_wingow(nullptr, info, _L("Error"), wxICON_WARNING | wxOK); + msg_wingow.ShowModal(); + //m_comboBox_filament->SetSelection(m_filament_selection); + return; + } + else if (action == "warning") { + MessageDialog msg_wingow(nullptr, info, _L("Warning"), wxICON_INFORMATION | wxOK); + msg_wingow.ShowModal(); + } + } + } + ams_filament_id = it->filament_id; ams_setting_id = it->setting_id; + break; } } } @@ -835,30 +865,6 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt) for (auto it = preset_bundle->filaments.begin(); it != preset_bundle->filaments.end(); it++) { if (!m_comboBox_filament->GetValue().IsEmpty() && it->alias.compare(m_comboBox_filament->GetValue().ToStdString()) == 0) { - //check is it in the filament blacklist - bool in_blacklist = false; - std::string action; - std::string info; - std::string filamnt_type; - it->get_filament_type(filamnt_type); - - if (it->vendor) { - DeviceManager::check_filaments_in_blacklist(it->vendor->name, filamnt_type, in_blacklist, action, info); - } - - if (in_blacklist) { - if (action == "prohibition") { - MessageDialog msg_wingow(nullptr, info, _L("Error"), wxICON_WARNING | wxOK); - msg_wingow.ShowModal(); - m_comboBox_filament->SetSelection(m_filament_selection); - return; - } - else if (action == "warning") { - MessageDialog msg_wingow(nullptr, info, _L("Warning"), wxICON_INFORMATION | wxOK); - msg_wingow.ShowModal(); - } - } - // ) if nozzle_temperature_range is found ConfigOption* opt_min = it->config.option("nozzle_temperature_range_low"); if (opt_min) { diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 8bf734569d..7db3e4fd40 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -2283,6 +2283,9 @@ bool MachineObject::is_function_supported(PrinterFunction func) case FUNC_PRINT_ALL: func_name = "FUNC_PRINT_ALL"; break; + case FUNC_VIRTUAL_TYAY: + func_name = "FUNC_VIRTUAL_TYAY"; + break; default: return true; } diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 94e0f08873..7756dfcc6c 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -91,6 +91,7 @@ enum PrinterFunction { FUNC_AUTO_SWITCH_FILAMENT, FUNC_CHAMBER_FAN, FUNC_EXTRUSION_CALI, + FUNC_VIRTUAL_TYAY, FUNC_PRINT_ALL, FUNC_MAX }; diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index f282bc60b9..9b023a2533 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -1096,11 +1096,11 @@ wxBoxSizer *StatusBasePanel::create_ams_group(wxWindow *parent) return sizer; } -void StatusBasePanel::show_ams_group(bool show, bool support_virtual_tray, bool support_vt_load) +void StatusBasePanel::show_ams_group(bool show, bool support_virtual_tray, bool support_extrustion_cali, bool support_vt_load) { m_ams_control->Show(true); m_ams_control_box->Show(true); - m_ams_control->show_noams_mode(show, support_virtual_tray, support_vt_load); + m_ams_control->show_noams_mode(show, support_virtual_tray, support_extrustion_cali, support_vt_load); if (m_show_ams_group != show) { Fit(); } @@ -1924,7 +1924,7 @@ void StatusPanel::update_ams(MachineObject *obj) if (is_support_extrusion_cali) { m_ams_control->update_vams_kn_value(obj->vt_tray); } - show_ams_group(false, obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI), obj->is_support_filament_edit_virtual_tray); + show_ams_group(false, obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY), obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI), obj->is_support_filament_edit_virtual_tray); return; } @@ -1933,7 +1933,7 @@ void StatusPanel::update_ams(MachineObject *obj) m_ams_control->update_vams_kn_value(obj->vt_tray); } - show_ams_group(true, obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI), obj->is_support_filament_edit_virtual_tray); + show_ams_group(true, obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY), obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI), obj->is_support_filament_edit_virtual_tray); if (m_filament_setting_dlg) m_filament_setting_dlg->update(); std::vector ams_info; @@ -2684,11 +2684,11 @@ void StatusPanel::on_ams_setting_click(SimpleEvent &event) if (obj) { m_ams_setting_dlg->update_insert_material_read_mode(obj->ams_insert_flag); m_ams_setting_dlg->update_starting_read_mode(obj->ams_power_on_flag); - std::string ams_id = m_ams_control->GetCurentAms(); - if (ams_id.compare(std::to_string(VIRTUAL_TRAY_ID)) == 0) { - wxString txt = _L("AMS settings are not supported for external spool"); - MessageDialog msg_dlg(nullptr, txt, wxEmptyString, wxICON_WARNING | wxOK); - msg_dlg.ShowModal(); + std::string ams_id = m_ams_control->GetCurentShowAms(); + if (obj->amsList.size() == 0) { + /* wxString txt = _L("AMS settings are not supported for external spool"); + MessageDialog msg_dlg(nullptr, txt, wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal();*/ return; } else { try { diff --git a/src/slic3r/GUI/StatusPanel.hpp b/src/slic3r/GUI/StatusPanel.hpp index 01b34d5a1f..3bdcaa7f8a 100644 --- a/src/slic3r/GUI/StatusPanel.hpp +++ b/src/slic3r/GUI/StatusPanel.hpp @@ -253,7 +253,7 @@ public: wxBoxSizer *create_ams_group(wxWindow *parent); wxBoxSizer *create_settings_group(wxWindow *parent); - void show_ams_group(bool show = true, bool support_virtual_tray = true, bool support_vt_load = true); + void show_ams_group(bool show = true, bool support_virtual_tray = true, bool support_extrustion_cali = true, bool support_vt_load = true); }; diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index 32bfcf3421..b32ce5dcd8 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -757,16 +757,25 @@ void AMSLib::render(wxDC &dc) } //draw k&n - if (m_show_kn) { - wxString str_k = wxString::Format("K %1.3f", m_info.k); - wxString str_n = wxString::Format("N %1.3f", m_info.n); - dc.SetFont(::Label::Body_11); - auto tsize = dc.GetMultiLineTextExtent(str_k); - auto pot_k = wxPoint((libsize.x - tsize.x) / 2, (libsize.y - tsize.y) / 2 - FromDIP(9) + tsize.y); - dc.DrawText(str_k, pot_k); - - //auto pot_n = wxPoint((libsize.x - tsize.x) / 2, (libsize.y - tsize.y) / 2 - FromDIP(18) + tsize.y * 2); - //dc.DrawText(str_n, pot_n); + if (m_obj && m_obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)) { + if (m_show_kn){ + wxString str_k = wxString::Format("K %1.3f", m_info.k); + wxString str_n = wxString::Format("N %1.3f", m_info.n); + dc.SetFont(::Label::Body_11); + auto tsize = dc.GetMultiLineTextExtent(str_k); + auto pot_k = wxPoint((libsize.x - tsize.x) / 2, (libsize.y - tsize.y) / 2 - FromDIP(9) + tsize.y); + dc.DrawText(str_k, pot_k); + } + } + else if(m_info.material_state == AMSCanType::AMS_CAN_TYPE_VIRTUAL){ + if (m_show_kn) { + wxString str_k = wxString::Format("K %1.3f", m_info.k); + wxString str_n = wxString::Format("N %1.3f", m_info.n); + dc.SetFont(::Label::Body_11); + auto tsize = dc.GetMultiLineTextExtent(str_k); + auto pot_k = wxPoint((libsize.x - tsize.x) / 2, (libsize.y - tsize.y) / 2 - FromDIP(9) + tsize.y); + dc.DrawText(str_k, pot_k); + } } } @@ -939,6 +948,12 @@ void AMSLib::doRender(wxDC &dc) void AMSLib::Update(Caninfo info, bool refresh) { + DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) return; + if (dev->get_selected_machine() && dev->get_selected_machine() != m_obj) { + m_obj = dev->get_selected_machine(); + } + m_info = info; Layout(); if (refresh) Refresh(); @@ -2250,6 +2265,7 @@ void AMSControl::init_scaled_buttons() } std::string AMSControl::GetCurentAms() { return m_current_ams; } +std::string AMSControl::GetCurentShowAms() { return m_current_show_ams; } std::string AMSControl::GetCurrentCan(std::string amsid) { @@ -2497,11 +2513,12 @@ void AMSControl::Reset() m_current_senect = ""; } -void AMSControl::show_noams_mode(bool show, bool support_virtual_tray, bool support_vt_load) +void AMSControl::show_noams_mode(bool show, bool support_virtual_tray, bool support_extrustion_cali, bool support_vt_load) { show_vams(support_virtual_tray); m_sizer_ams_tips->Show(support_virtual_tray); - if (!support_virtual_tray) + + if (!support_extrustion_cali) m_button_extrusion_cali->Hide(); else { m_button_extrusion_cali->Show(); diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index 6cd71b52e9..33f00bc93f 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -284,6 +284,7 @@ public: public: wxColour GetLibColour(); Caninfo m_info; + MachineObject* m_obj = {nullptr}; int m_can_index; void Update(Caninfo info, bool refresh = true); void UnableSelected() { m_unable_selected = true; }; @@ -571,6 +572,7 @@ protected: std::string m_last_tray_id; public: std::string GetCurentAms(); + std::string GetCurentShowAms(); std::string GetCurrentCan(std::string amsid); wxColour GetCanColour(std::string amsid, std::string canid); @@ -610,7 +612,7 @@ public: void on_clibration_cancel_click(wxMouseEvent &event); void Reset(); - void show_noams_mode(bool show, bool support_virtual_tray, bool support_vt_load = false); + void show_noams_mode(bool show, bool support_virtual_tray, bool support_extrustion_cali, bool support_vt_load = false); void show_vams(bool show); void show_vams_kn_value(bool show); void update_vams_kn_value(AmsTray tray); From 3e185433896daf65507dba98cfc16cd87b11ad50 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Tue, 4 Apr 2023 19:50:44 +0800 Subject: [PATCH 216/339] FIX: [STUDIO-2523] sync user preset on restart network Change-Id: I9099b469a16e6714f65c1d806f9e7ce1dcc2fe72 --- src/slic3r/GUI/GUI_App.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 37a68ef988..88b82854eb 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1738,6 +1738,8 @@ void GUI_App::restart_networking() mainframe->refresh_plugin_tips(); if (plater_) plater_->get_notification_manager()->bbl_close_plugin_install_notification(); + + if (app_config->get("sync_user_preset") == "true") { start_sync_user_preset(); } } BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< boost::format(" exit, m_agent=%1%")%m_agent; } From bdc500d90f6d9356dde4cad78340f2bed983afb3 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Tue, 4 Apr 2023 19:21:48 +0800 Subject: [PATCH 217/339] FIX: [STUDIO-2625] fix backup_switch from < 01.06.00.00 Change-Id: Iedc2e26bfc346fd7e92b4c2862f2cef1ca9aa96f --- src/libslic3r/AppConfig.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index c54429fc75..3cddcec90f 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -300,7 +300,7 @@ void AppConfig::set_defaults() set_bool("sync_system_preset", true); } - if (get("backup_switch").empty()) { + if (get("backup_switch").empty() || get("version") < "01.06.00.00") { set_bool("backup_switch", true); } From ca4902fb871985dfdbff652a41d842003cf3d20f Mon Sep 17 00:00:00 2001 From: Stone Li Date: Thu, 6 Apr 2023 14:16:38 +0800 Subject: [PATCH 218/339] ENH: update version to 01.06.00.51 Change-Id: Iaddd6c5a0795e95c165b5945470f122d8ebffe0b --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index d2aef24b9b..64aeb4d0e9 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.05.05.68") +set(SLIC3R_VERSION "01.06.00.51") From e2395744b1c312a154b79566bd5bff1c4d2990fe Mon Sep 17 00:00:00 2001 From: gerrit Date: Thu, 6 Apr 2023 14:37:42 +0800 Subject: [PATCH 219/339] ci: update network module based on commit 6a243cc Change-Id: Iab3750f3a7575093a72781fed861a1f3f41f1d1f (cherry picked from commit ddc88c624b11eb0f66064a54e7c9cc50546ef6eb) --- src/slic3r/Utils/bambu_networking.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/Utils/bambu_networking.hpp b/src/slic3r/Utils/bambu_networking.hpp index 646988d502..8e46f88c72 100644 --- a/src/slic3r/Utils/bambu_networking.hpp +++ b/src/slic3r/Utils/bambu_networking.hpp @@ -41,7 +41,7 @@ namespace BBL { #define BAMBU_NETWORK_LIBRARY "bambu_networking" #define BAMBU_NETWORK_AGENT_NAME "bambu_network_agent" -#define BAMBU_NETWORK_AGENT_VERSION "01.05.05.01" +#define BAMBU_NETWORK_AGENT_VERSION "01.06.00.01" //iot preset type strings From f2c06d7059ac5555c9068c2d4187704f25a85735 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Thu, 6 Apr 2023 14:48:35 +0800 Subject: [PATCH 220/339] ENH: add some protective code JRIA: STUDIO-2487 Change-Id: I9b6e3e6af70877b685d2bfec1592975ef16134fd Signed-off-by: Stone Li --- src/slic3r/GUI/GCodeViewer.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index d375297228..d749561d71 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -1790,7 +1790,10 @@ void GCodeViewer::update_layers_slider_mode() void GCodeViewer::update_marker_curr_move() { if ((int)m_last_result_id != -1) { auto it = std::find_if(m_gcode_result->moves.begin(), m_gcode_result->moves.end(), [this](auto move) { - return move.gcode_id == static_cast(m_sequential_view.gcode_ids[m_sequential_view.current.last]); + if (m_sequential_view.current.last < m_sequential_view.gcode_ids.size() && m_sequential_view.current.last >= 0) { + return move.gcode_id == static_cast(m_sequential_view.gcode_ids[m_sequential_view.current.last]); + } + return false; }); if (it != m_gcode_result->moves.end()) m_sequential_view.marker.update_curr_move(*it); From b99b1f8d733ee822ebf14f31ca508dd73aa1470a Mon Sep 17 00:00:00 2001 From: Stone Li Date: Thu, 6 Apr 2023 15:29:25 +0800 Subject: [PATCH 221/339] FIX: fix a bug that can not send all to lan mode printers Signed-off-by: Stone Li Change-Id: I704cf0336dc809c84a1d8e149e831ffcf55f3004 --- src/slic3r/GUI/Plater.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 09b3bdc25a..d9398417d0 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -10047,9 +10047,7 @@ int Plater::send_gcode(int plate_idx, Export3mfProgressFn proFn) if (plate_idx == PLATE_CURRENT_IDX) { p->m_print_job_data.plate_idx = get_partplate_list().get_curr_plate_index(); } - else if (plate_idx == PLATE_ALL_IDX) { - p->m_print_job_data.plate_idx = get_partplate_list().get_curr_plate_index(); - } else { + else { p->m_print_job_data.plate_idx = plate_idx; } From f704dbf8d871841a1fd8bca3d31bbe60615d324e Mon Sep 17 00:00:00 2001 From: gerrit Date: Thu, 6 Apr 2023 15:41:39 +0800 Subject: [PATCH 222/339] ci: update build version to 01.06.00.52 Change-Id: I8c8198714f2252848e1b3ad76f6d4f3275c38088 --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index 64aeb4d0e9..38f7bdff5d 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.06.00.51") +set(SLIC3R_VERSION "01.06.00.52") From acae9fc088175d0868bcb20eedf39a7c745ce1da Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Tue, 4 Apr 2023 10:45:45 +0800 Subject: [PATCH 223/339] FIX: preview tick should reset in some case(STUDIO-2621) Switch to ByObject or switch spiral vase mode, should clear all preview tick because they are invalid and doesn't work. Change-Id: If68e9ebe4e915286a34e2e1003b281d770f0864c --- src/slic3r/GUI/GUI_Preview.cpp | 3 ++- src/slic3r/GUI/IMSlider.cpp | 31 +++++++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index 64f0fc4a0f..29c636efbb 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -581,12 +581,13 @@ void Preview::update_layers_slider(const std::vector& layers_z, bool kee } } m_layers_slider->SetSelectionSpan(idx_low, idx_high); - m_layers_slider->SetTicksValues(ticks_info_from_curr_plate); auto curr_plate = wxGetApp().plater()->get_partplate_list().get_curr_plate(); auto curr_print_seq = curr_plate->get_real_print_seq(); bool sequential_print = (curr_print_seq == PrintSequence::ByObject); m_layers_slider->SetDrawMode(sequential_print); + + m_layers_slider->SetTicksValues(ticks_info_from_curr_plate); auto print_mode_stat = m_gcode_result->print_statistics.modes.front(); m_layers_slider->SetLayersTimes(print_mode_stat.layers_times, print_mode_stat.time); diff --git a/src/slic3r/GUI/IMSlider.cpp b/src/slic3r/GUI/IMSlider.cpp index df23872eb3..ab36613d2f 100644 --- a/src/slic3r/GUI/IMSlider.cpp +++ b/src/slic3r/GUI/IMSlider.cpp @@ -227,6 +227,8 @@ void IMSlider::SetTicksValues(const Info &custom_gcode_per_print_z) return; } + static bool last_spiral_vase_status = false; + const bool was_empty = m_ticks.empty(); m_ticks.ticks.clear(); @@ -245,6 +247,30 @@ void IMSlider::SetTicksValues(const Info &custom_gcode_per_print_z) post_ticks_changed_event(); } + if (last_spiral_vase_status != m_is_spiral_vase) { + last_spiral_vase_status = m_is_spiral_vase; + if (!m_ticks.empty()) { + m_ticks.ticks.clear(); + post_ticks_changed_event(); + } + } + + //auto has_tick_execpt = [this](CustomGCode::Type type) { + // for (const TickCode& tick : m_ticks.ticks) + // if (tick.type != type) return true; + + // return false; + //}; + if ((!m_ticks.empty() /*&& has_tick_execpt(PausePrint)*/) && m_draw_mode == dmSequentialFffPrint) { + for (auto it{ m_ticks.ticks.begin() }, end{ m_ticks.ticks.end() }; it != end;) { + if (true/*it->type != PausePrint*/) + it = m_ticks.ticks.erase(it); + else + ++it; + } + post_ticks_changed_event(); + } + if (custom_gcode_per_print_z.mode && !custom_gcode_per_print_z.gcodes.empty()) m_ticks.mode = custom_gcode_per_print_z.mode; set_as_dirty(); @@ -285,6 +311,7 @@ void IMSlider::SetDrawMode(bool is_sequential_print) { m_draw_mode = is_sequential_print ? dmSequentialFffPrint : dmRegular; + m_can_change_color = m_can_change_color && !(m_draw_mode == dmSequentialFffPrint); } void IMSlider::SetModeAndOnlyExtruder(const bool is_one_extruder_printed_model, const int only_extruder, bool can_change_color) @@ -1216,7 +1243,7 @@ void IMSlider::render_add_menu() //BBS render this menu item only when extruder_num > 1 if (extruder_num > 1) { - if (!m_can_change_color || m_draw_mode == dmSequentialFffPrint) { + if (!m_can_change_color) { begin_menu(_u8L("Change Filament").c_str(), false); } else if (begin_menu(_u8L("Change Filament").c_str())) { @@ -1262,7 +1289,7 @@ void IMSlider::render_edit_menu(const TickCode& tick) case CustomGCode::ToolChange: { int extruder_num = m_extruder_colors.size(); if (extruder_num > 1) { - if (!m_can_change_color || m_draw_mode == dmSequentialFffPrint) { + if (!m_can_change_color) { begin_menu(_u8L("Change Filament").c_str(), false); } else if (begin_menu(_u8L("Change Filament").c_str())) { From 94d50a117700d135a020ae34c8967dce349a568c Mon Sep 17 00:00:00 2001 From: tao wang Date: Thu, 6 Apr 2023 16:48:56 +0800 Subject: [PATCH 224/339] ENH:use layer to represent the current number of layers Change-Id: I42d1f55a16efd6082df82e12c7bff575eea74fad --- src/slic3r/GUI/StatusPanel.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 9b023a2533..0d70160c43 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -508,7 +508,7 @@ wxBoxSizer *StatusBasePanel::create_project_task_page(wxWindow *parent) panel_button_block->SetSize(wxSize(TASK_BUTTON_SIZE.x * 2 + FromDIP(5) * 2, -1)); panel_button_block->SetBackgroundColour(*wxWHITE); - m_staticText_layers = new wxStaticText(penel_text, wxID_ANY, _L("Layers: N/A")); + m_staticText_layers = new wxStaticText(penel_text, wxID_ANY, _L("Layer: N/A")); m_staticText_layers->SetFont(wxFont(12, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxT("HarmonyOS Sans SC"))); m_staticText_layers->SetForegroundColour(wxColour(146, 146, 146)); m_staticText_layers->Hide(); @@ -2290,7 +2290,7 @@ void StatusPanel::update_subtask(MachineObject *obj) m_staticText_progress_percent->SetLabelText(NA_STR); m_staticText_progress_percent_icon->SetLabelText(wxEmptyString); m_staticText_progress_left->SetLabel(NA_STR); - m_staticText_layers->SetLabelText(wxString::Format(_L("Layers: %s"), NA_STR)); + m_staticText_layers->SetLabelText(wxString::Format(_L("Layer: %s"), NA_STR)); wxString subtask_text = wxString::Format("%s", GUI::from_u8(obj->subtask_name)); m_staticText_subtask_value->SetLabelText(subtask_text); update_basic_print_data(false); @@ -2319,13 +2319,13 @@ void StatusPanel::update_subtask(MachineObject *obj) m_gauge_progress->SetValue(obj->subtask_->task_progress); m_staticText_progress_percent->SetLabelText(wxString::Format("%d", obj->subtask_->task_progress)); m_staticText_progress_percent_icon->SetLabelText("%"); - m_staticText_layers->SetLabelText(wxString::Format(_L("Layers: %d/%d"), obj->curr_layer, obj->total_layers)); + m_staticText_layers->SetLabelText(wxString::Format(_L("Layer: %d/%d"), obj->curr_layer, obj->total_layers)); } else { m_gauge_progress->SetValue(0); m_staticText_progress_percent->SetLabelText(NA_STR); m_staticText_progress_percent_icon->SetLabelText(wxEmptyString); - m_staticText_layers->SetLabelText(wxString::Format(_L("Layers: %s"), NA_STR)); + m_staticText_layers->SetLabelText(wxString::Format(_L("Layer: %s"), NA_STR)); } } wxString subtask_text = wxString::Format("%s", GUI::from_u8(obj->subtask_name)); @@ -2407,7 +2407,7 @@ void StatusPanel::reset_printing_values() update_basic_print_data(false); m_printing_stage_value->SetLabelText(""); m_staticText_progress_left->SetLabelText(NA_STR); - m_staticText_layers->SetLabelText(wxString::Format(_L("Layers: %s"), NA_STR)); + m_staticText_layers->SetLabelText(wxString::Format(_L("Layer: %s"), NA_STR)); m_staticText_progress_percent->SetLabelText(NA_STR); m_staticText_progress_percent_icon->SetLabelText(wxEmptyString); m_bitmap_thumbnail->SetBitmap(m_thumbnail_placeholder.bmp()); From e25dd0ca01e7bbd331277ad5fd1489b3449fd659 Mon Sep 17 00:00:00 2001 From: tao wang Date: Thu, 6 Apr 2023 16:16:51 +0800 Subject: [PATCH 225/339] FIX:fixed the length of the progress bar is incorrect Change-Id: I56f0bd70a5bdd523d5b4c08038ebffc7468ea2c0 --- src/slic3r/GUI/BBLStatusBarSend.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/slic3r/GUI/BBLStatusBarSend.cpp b/src/slic3r/GUI/BBLStatusBarSend.cpp index 327b5d2655..0f3d6efb48 100644 --- a/src/slic3r/GUI/BBLStatusBarSend.cpp +++ b/src/slic3r/GUI/BBLStatusBarSend.cpp @@ -33,6 +33,7 @@ BBLStatusBarSend::BBLStatusBarSend(wxWindow *parent, int id) m_status_text->SetMaxSize(wxSize(m_self->FromDIP(300), m_self->FromDIP(46))); m_prog = new wxGauge(m_self, wxID_ANY, 100, wxDefaultPosition, wxSize(-1, m_self->FromDIP(6)), wxGA_HORIZONTAL); + m_prog->SetMinSize(wxSize(m_self->FromDIP(300),m_self->FromDIP(6))); m_prog->SetValue(0); StateColor btn_bd_white(std::pair(*wxWHITE, StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); From 6d445f5754e66e25df064ea7cffe5a75ed7328ca Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Tue, 4 Apr 2023 16:20:34 +0800 Subject: [PATCH 226/339] FIX: time displayed inconsisitently(STUDIO-2001) time displayed in send_dialog should be consistent with time displayed in preview legend. Change-Id: I4aa3bd0e8e7a2688cb7b97ea39fd9c0e1a361f52 Change-Id: I3763f5232ab61a5609248f1f7d79373f4077fec7 --- src/slic3r/GUI/SelectMachine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index ab52261e6c..9cbe9b2d42 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -3262,7 +3262,7 @@ void SelectMachineDialog::set_default() wxString time; PartPlate *plate = m_plater->get_partplate_list().get_curr_plate(); if (plate) { - if (plate->get_slice_result()) { time = wxString::Format("%s", get_bbl_monitor_time_dhm(plate->get_slice_result()->print_statistics.modes[0].time)); } + if (plate->get_slice_result()) { time = wxString::Format("%s", short_time(get_time_dhms(plate->get_slice_result()->print_statistics.modes[0].time))); } } char weight[64]; From f0a41b552b1c9af00ddbad74d3f04a30eba1c1f3 Mon Sep 17 00:00:00 2001 From: tao wang Date: Thu, 6 Apr 2023 15:09:33 +0800 Subject: [PATCH 227/339] FIX:fixed loading model failure on macos Change-Id: I3b7944e4dc7339404efc76323d898b660810a92b --- src/slic3r/GUI/GUI_App.cpp | 14 +++++++++++++- src/slic3r/GUI/GUI_App.hpp | 2 ++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 88b82854eb..f9cfe30592 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1040,6 +1040,7 @@ void GUI_App::post_init() } } } + //#if BBL_HAS_FIRST_PAGE bool slow_bootup = false; if (app_config->get("slow_bootup") == "true") { @@ -2656,6 +2657,11 @@ bool GUI_App::on_init_inner() this->mainframe->register_win32_callbacks(); #endif this->post_init(); + + if (!m_download_file_url.empty()) { + request_model_download(m_download_file_url); + m_download_file_url = ""; + } } }); @@ -5543,7 +5549,13 @@ void GUI_App::MacOpenURL(const wxString& url) std::string download_file_url = url_decode(download_origin_url); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << download_file_url; if (!download_file_url.empty() && (boost::starts_with(download_file_url, "http://") || boost::starts_with(download_file_url, "https://"))) { - request_model_download(download_file_url); + + if (m_post_initialized) { + request_model_download(download_file_url); + } + else { + m_download_file_url = download_file_url; + } } } } diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 62803cb003..bdf498294d 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -228,6 +228,8 @@ private: bool m_opengl_initialized{ false }; #endif +//import model from mall + std::string m_download_file_url; //#ifdef _WIN32 wxColour m_color_label_modified; From a6be285843b3ffda26a4c8afd28106d1ff4f38fb Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Mon, 3 Apr 2023 16:44:31 +0800 Subject: [PATCH 228/339] FIX:textinput behavior on send dialog (STUDIO-2347) Change-Id: Iec970de7cd2f85b835b64283089c41f52df1cfcc --- src/slic3r/GUI/AmsMappingPopup.cpp | 10 ++++++++-- src/slic3r/GUI/AmsMappingPopup.hpp | 1 + src/slic3r/GUI/SelectMachine.cpp | 9 +++++++-- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index 390d897629..15e4ac22c3 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -45,7 +45,13 @@ wxDEFINE_EVENT(EVT_SET_FINISH_MAPPING, wxCommandEvent); SetMaxSize(MATERIAL_ITEM_SIZE); SetBackgroundColour(*wxWHITE); - Bind(wxEVT_PAINT, &MaterialItem::paintEvent, this); + m_main_panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + auto main_sizer = new wxBoxSizer(wxVERTICAL); + main_sizer->Add(m_main_panel, 1, wxEXPAND); + this->SetSizer(main_sizer); + this->Layout(); + + m_main_panel->Bind(wxEVT_PAINT, &MaterialItem::paintEvent, this); wxGetApp().UpdateDarkUI(this); } @@ -89,7 +95,7 @@ void MaterialItem::on_normal() void MaterialItem::paintEvent(wxPaintEvent &evt) { - wxPaintDC dc(this); + wxPaintDC dc(m_main_panel); render(dc); //PrepareDC(buffdc); diff --git a/src/slic3r/GUI/AmsMappingPopup.hpp b/src/slic3r/GUI/AmsMappingPopup.hpp index 7606a172ff..5fb5e0b6f7 100644 --- a/src/slic3r/GUI/AmsMappingPopup.hpp +++ b/src/slic3r/GUI/AmsMappingPopup.hpp @@ -66,6 +66,7 @@ public: MaterialItem(wxWindow *parent,wxColour mcolour, wxString mname); ~MaterialItem(); + wxPanel* m_main_panel; wxColour m_material_coloul; wxString m_material_name; diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 9cbe9b2d42..4e94b611c5 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -1024,6 +1024,11 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) m_rename_input->SetMinSize(wxSize(FromDIP(380), FromDIP(24))); m_rename_input->SetMaxSize(wxSize(FromDIP(380), FromDIP(24))); m_rename_input->Bind(wxEVT_TEXT_ENTER, [this](auto& e) {on_rename_enter();}); + m_rename_input->Bind(wxEVT_KILL_FOCUS, [this](auto& e) { + if (!m_rename_input->HasFocus() && !m_rename_text->HasFocus()) + on_rename_enter(); + else + e.Skip(); }); rename_edit_sizer_v->Add(m_rename_input, 1, wxALIGN_CENTER, 0); @@ -1217,7 +1222,7 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) m_ams_backup_tip->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); }); img_ams_backup->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); }); - m_ams_backup_tip->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {popup_filament_backup();}); + m_ams_backup_tip->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {popup_filament_backup(); on_rename_enter(); }); img_ams_backup->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {popup_filament_backup();}); @@ -3501,7 +3506,7 @@ void EditDevNameDialog::on_edit_name(wxCommandEvent &e) SetBackgroundStyle(wxBG_STYLE_CUSTOM); wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL); - m_staticbitmap = new wxStaticBitmap(this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize); + m_staticbitmap = new wxStaticBitmap(parent, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize); sizer->Add(m_staticbitmap, 1, wxEXPAND|wxALL, 0); SetSizer(sizer); Layout(); From 688640e808bd1fd9a7752139cbb39975baf45bfd Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Thu, 6 Apr 2023 14:24:09 +0800 Subject: [PATCH 229/339] FIX: display '?' on a notification(STUDIO-2199) Change-Id: Id20f287aa1e26571cb416c5f237257418589cf29 --- src/slic3r/GUI/NotificationManager.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/slic3r/GUI/NotificationManager.cpp b/src/slic3r/GUI/NotificationManager.cpp index 46da873b34..12d9f9b6e1 100644 --- a/src/slic3r/GUI/NotificationManager.cpp +++ b/src/slic3r/GUI/NotificationManager.cpp @@ -1112,13 +1112,14 @@ void NotificationManager::PrintHostUploadNotification::render_bar(ImGuiWrapper& } void NotificationManager::PrintHostUploadNotification::render_left_sign(ImGuiWrapper& imgui) { - if (m_uj_state == UploadJobState::PB_ERROR) { - std::string text; - text = ImGui::ErrorMarker; - ImGui::SetCursorPosX(m_line_height / 3); - ImGui::SetCursorPosY(m_window_height / 2 - m_line_height); - imgui.text(text.c_str()); - } + // BBS: do not render left button + //if (m_uj_state == UploadJobState::PB_ERROR) { + // std::string text; + // text = ImGui::ErrorMarker; + // ImGui::SetCursorPosX(m_line_height / 3); + // ImGui::SetCursorPosY(m_window_height / 2 - m_line_height); + // imgui.text(text.c_str()); + //} } void NotificationManager::PrintHostUploadNotification::render_cancel_button(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) { From bd29e371a6ed304b83cd34d1577c331e3f8d7c2f Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Thu, 6 Apr 2023 17:48:25 +0800 Subject: [PATCH 230/339] FIX: shortcu key tooltip on aseembly view Change-Id: Ibf02cd7caf68bb7624021e469aab00bcc2ccb77e --- src/slic3r/GUI/GLCanvas3D.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 3ee4b12ec5..d16aaae1ff 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -7733,7 +7733,7 @@ void GLCanvas3D::_render_paint_toolbar() const if (!ImGui::IsMouseHoveringRect(left_arrow_button.Min, left_arrow_button.Max) && !ImGui::IsMouseHoveringRect(right_arrow_button.Min, right_arrow_button.Max)) wxPostEvent(m_canvas, IntEvent(EVT_GLTOOLBAR_FILLCOLOR, i + 1)); } - if (ImGui::IsItemHovered()) { + if (ImGui::IsItemHovered() && i < 9) { if (!ImGui::IsMouseHoveringRect(left_arrow_button.Min, left_arrow_button.Max) && !ImGui::IsMouseHoveringRect(right_arrow_button.Min, right_arrow_button.Max)) { ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, { 20.0f * f_scale, 10.0f * f_scale }); ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 3.0f * f_scale); From 0440e288f762d7389d631e46c8af1bef1ab9f7bd Mon Sep 17 00:00:00 2001 From: wintergua Date: Thu, 6 Apr 2023 14:52:11 +0800 Subject: [PATCH 231/339] ENH: move the volumes grouping process to an indivial function grouping of volumes in the slicing process, which will be used by the brim generation processes, is moved to an indivial function from the fixed_slicing_errors function. Change-Id: I241081823a671829d8cc4e923da5f6f22776c410 (cherry picked from commit 18a7b541ee48f3c01319d5835c05610c3d8ca0ae) --- src/libslic3r/Layer.hpp | 2 +- src/libslic3r/PrintObjectSlice.cpp | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/libslic3r/Layer.hpp b/src/libslic3r/Layer.hpp index 421e33f864..47b0b78177 100644 --- a/src/libslic3r/Layer.hpp +++ b/src/libslic3r/Layer.hpp @@ -197,7 +197,7 @@ public: protected: friend class PrintObject; friend std::vector new_layers(PrintObject*, const std::vector&); - friend std::string fix_slicing_errors(PrintObject* object, LayerPtrs&, const std::function&); + friend std::string fix_slicing_errors(PrintObject* object, LayerPtrs&, const std::function&, int &); Layer(size_t id, PrintObject *object, coordf_t height, coordf_t print_z, coordf_t slice_z) : upper_layer(nullptr), lower_layer(nullptr), slicing_errors(false), diff --git a/src/libslic3r/PrintObjectSlice.cpp b/src/libslic3r/PrintObjectSlice.cpp index fa5aa1e790..382296e16c 100644 --- a/src/libslic3r/PrintObjectSlice.cpp +++ b/src/libslic3r/PrintObjectSlice.cpp @@ -608,7 +608,7 @@ void reGroupingLayerPolygons(std::vector& gvss, ExPolygons } } -std::string fix_slicing_errors(PrintObject* object, LayerPtrs &layers, const std::function &throw_if_canceled) +std::string fix_slicing_errors(PrintObject* object, LayerPtrs &layers, const std::function &throw_if_canceled, int &firstLayerReplacedBy) { std::string error_msg;//BBS @@ -720,10 +720,14 @@ std::string fix_slicing_errors(PrintObject* object, LayerPtrs &layers, const std // BBS: first layer slices are sorted by volume group, if the first layer is empty and replaced by the 2nd layer // the later will be stored in "object->firstLayerObjGroupsMod()" - int firstLayerReplacedBy = 0; if (!buggy_layers.empty() && buggy_layers.front() == 0 && layers.size() > 1) firstLayerReplacedBy = 1; + return error_msg; +} + +void groupingVolumesForBrim(PrintObject* object, LayerPtrs& layers, int firstLayerReplacedBy) +{ const auto scaled_resolution = scaled(object->print()->config().resolution.value); auto partsObjSliceByVolume = findPartVolumes(object->firstLayerObjSliceMod(), object->model_object()->volumes); groupingVolumes(partsObjSliceByVolume, object->firstLayerObjGroupsMod(), scaled_resolution, firstLayerReplacedBy); @@ -731,8 +735,6 @@ std::string fix_slicing_errors(PrintObject* object, LayerPtrs &layers, const std // BBS: the actual first layer slices stored in layers are re-sorted by volume group and will be used to generate brim reGroupingLayerPolygons(object->firstLayerObjGroupsMod(), layers.front()->lslices); - - return error_msg; } // Called by make_perimeters() @@ -757,10 +759,12 @@ void PrintObject::slice() m_layers = new_layers(this, generate_object_layers(m_slicing_params, layer_height_profile)); this->slice_volumes(); m_print->throw_if_canceled(); + int firstLayerReplacedBy = 0; + #if 1 // Fix the model. //FIXME is this the right place to do? It is done repeateadly at the UI and now here at the backend. - std::string warning = fix_slicing_errors(this, m_layers, [this](){ m_print->throw_if_canceled(); }); + std::string warning = fix_slicing_errors(this, m_layers, [this](){ m_print->throw_if_canceled(); }, firstLayerReplacedBy); m_print->throw_if_canceled(); //BBS: send warning message to slicing callback if (!warning.empty()) { @@ -768,6 +772,10 @@ void PrintObject::slice() this->active_step_add_warning(PrintStateBase::WarningLevel::CRITICAL, warning, PrintStateBase::SlicingReplaceInitEmptyLayers); } #endif + + // BBS: the actual first layer slices stored in layers are re-sorted by volume group and will be used to generate brim + groupingVolumesForBrim(this, m_layers, firstLayerReplacedBy); + // Update bounding boxes, back up raw slices of complex models. tbb::parallel_for( tbb::blocked_range(0, m_layers.size()), From b42a0d5632e99ad3725d400c30ea369680198b40 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Tue, 4 Apr 2023 14:20:40 +0800 Subject: [PATCH 232/339] FIX:custom gcodes are reset after import geometry only (STUDIO-2595) Change-Id: I11052ea28aacca78103852d2beba0dc97b42eb31 --- src/slic3r/GUI/Plater.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index d9398417d0..d43fb3c570 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -3249,9 +3249,14 @@ std::vector Plater::priv::load_files(const std::vector& input_ if (!config_substitutions.empty()) show_substitutions_info(config_substitutions.substitutions, filename.string()); // BBS - this->model.plates_custom_gcodes = model.plates_custom_gcodes; - this->model.design_info = model.design_info; - this->model.model_info = model.model_info; + if (load_model && !load_config) { + ; + } + else { + this->model.plates_custom_gcodes = model.plates_custom_gcodes; + this->model.design_info = model.design_info; + this->model.model_info = model.model_info; + } } if (load_config) { From 50d9dd331c40744dbc0ab1e33ea69423459bf901 Mon Sep 17 00:00:00 2001 From: tao wang Date: Thu, 6 Apr 2023 19:18:36 +0800 Subject: [PATCH 233/339] ENH:update some Chinese translations Change-Id: I280a9340c0540b5c00d8651f3c9705b775a359c7 --- bbl/i18n/BambuStudio.pot | 18 ++++------ bbl/i18n/de/BambuStudio_de.po | 52 +++++++++++++++++---------- bbl/i18n/en/BambuStudio_en.po | 48 ++++++++++++++++--------- bbl/i18n/es/BambuStudio_es.po | 49 ++++++++++++++++--------- bbl/i18n/fr/BambuStudio_fr.po | 52 +++++++++++++++++---------- bbl/i18n/hu/BambuStudio_hu.po | 48 ++++++++++++++++--------- bbl/i18n/it/BambuStudio_it.po | 51 ++++++++++++++++---------- bbl/i18n/ja/BambuStudio_ja.po | 48 ++++++++++++++++--------- bbl/i18n/nl/BambuStudio_nl.po | 52 +++++++++++++++++---------- bbl/i18n/sv/BambuStudio_sv.po | 53 ++++++++++++++++++---------- bbl/i18n/zh_cn/BambuStudio_zh_CN.po | 27 +++++++------- resources/i18n/de/BambuStudio.mo | Bin 233785 -> 233354 bytes resources/i18n/en/BambuStudio.mo | Bin 214261 -> 213867 bytes resources/i18n/es/BambuStudio.mo | Bin 233748 -> 233344 bytes resources/i18n/fr/BambuStudio.mo | Bin 239766 -> 239338 bytes resources/i18n/hu/BambuStudio.mo | Bin 227264 -> 226870 bytes resources/i18n/it/BambuStudio.mo | Bin 229684 -> 229274 bytes resources/i18n/ja/BambuStudio.mo | Bin 223258 -> 222848 bytes resources/i18n/nl/BambuStudio.mo | Bin 230576 -> 230164 bytes resources/i18n/sv/BambuStudio.mo | Bin 220543 -> 220141 bytes resources/i18n/zh_cn/BambuStudio.mo | Bin 212566 -> 212422 bytes 21 files changed, 309 insertions(+), 189 deletions(-) diff --git a/bbl/i18n/BambuStudio.pot b/bbl/i18n/BambuStudio.pot index 0bbcdb9ca1..a49f1fa0e6 100644 --- a/bbl/i18n/BambuStudio.pot +++ b/bbl/i18n/BambuStudio.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-06 08:26+0800\n" +"POT-Creation-Date: 2023-04-06 19:20+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1848,13 +1848,13 @@ msgstr "" msgid "Max volumetric speed" msgstr "" -msgid "\\u2103" +msgid "℃" msgstr "" msgid "Bed temperature" msgstr "" -msgid "mm\\u00B3" +msgid "mm³" msgstr "" msgid "Start calibration" @@ -3448,7 +3448,7 @@ msgstr "" msgid "0" msgstr "" -msgid "Layers: N/A" +msgid "Layer: N/A" msgstr "" msgid "Clear" @@ -3519,11 +3519,11 @@ msgid "In Cloud Slicing Queue, there are %s tasks ahead." msgstr "" #, possible-c-format, possible-boost-format -msgid "Layers: %s" +msgid "Layer: %s" msgstr "" #, possible-c-format, possible-boost-format -msgid "Layers: %d/%d" +msgid "Layer: %d/%d" msgstr "" msgid "Please heat the nozzle to above 170 degree before loading filament." @@ -3535,9 +3535,6 @@ msgstr "" msgid "Still load" msgstr "" -msgid "AMS settings are not supported for external spool" -msgstr "" - msgid "Please select an AMS slot before calibration" msgstr "" @@ -6638,9 +6635,6 @@ msgstr "" msgid "Minimal purge on wipe tower" msgstr "" -msgid "mm³" -msgstr "" - msgid "Filament load time" msgstr "" diff --git a/bbl/i18n/de/BambuStudio_de.po b/bbl/i18n/de/BambuStudio_de.po index a23080f09b..c81081d7d0 100644 --- a/bbl/i18n/de/BambuStudio_de.po +++ b/bbl/i18n/de/BambuStudio_de.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-06 08:26+0800\n" +"POT-Creation-Date: 2023-04-06 19:20+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1942,14 +1942,14 @@ msgstr "Druckbetttemperatur" msgid "Max volumetric speed" msgstr "Maximale Volumengeschwindigkeit" -msgid "\\u2103" -msgstr "\\u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "Druckbetttemperatur" -msgid "mm\\u00B3" -msgstr "mm\\u00B3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "Starten" @@ -3692,8 +3692,8 @@ msgstr "Stop" msgid "0" msgstr "0" -msgid "Layers: N/A" -msgstr "Schichten: N/A" +msgid "Layer: N/A" +msgstr "" msgid "Clear" msgstr "Löschen" @@ -3770,12 +3770,12 @@ msgid "In Cloud Slicing Queue, there are %s tasks ahead." msgstr "" #, c-format, boost-format -msgid "Layers: %s" -msgstr "Schichten: %s" +msgid "Layer: %s" +msgstr "" #, c-format, boost-format -msgid "Layers: %d/%d" -msgstr "Schichten: %d/%d" +msgid "Layer: %d/%d" +msgstr "" msgid "Please heat the nozzle to above 170 degree before loading filament." msgstr "" @@ -3787,11 +3787,6 @@ msgstr "Immer noch entladen" msgid "Still load" msgstr "Immer noch laden" -msgid "AMS settings are not supported for external spool" -msgstr "" -"Die aktuellen AMS-Einstellungen unterstützen die Verwendung einer externen " -"Spule nicht." - msgid "Please select an AMS slot before calibration" msgstr "Bitte wählen Sie vor der Kalibrierung einen AMS-Slot aus." @@ -7299,9 +7294,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimale Wischmenge im Wischturm" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "Ladedauer des Filaments" @@ -9283,6 +9275,28 @@ msgstr "" "Wussten Sie, dass Sie die Festigkeit des Modells durch mehr Wandschleifen " "und eine höhere Dichte der Füllung verbessern können?" +#~ msgid "\\u2103" +#~ msgstr "\\u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\u00B3" + +#~ msgid "Layers: N/A" +#~ msgstr "Schichten: N/A" + +#, c-format, boost-format +#~ msgid "Layers: %s" +#~ msgstr "Schichten: %s" + +#, c-format, boost-format +#~ msgid "Layers: %d/%d" +#~ msgstr "Schichten: %d/%d" + +#~ msgid "AMS settings are not supported for external spool" +#~ msgstr "" +#~ "Die aktuellen AMS-Einstellungen unterstützen die Verwendung einer " +#~ "externen Spule nicht." + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/en/BambuStudio_en.po b/bbl/i18n/en/BambuStudio_en.po index 3a4d422cfa..ef48a35f93 100644 --- a/bbl/i18n/en/BambuStudio_en.po +++ b/bbl/i18n/en/BambuStudio_en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-06 08:26+0800\n" +"POT-Creation-Date: 2023-04-06 19:20+0800\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1898,14 +1898,14 @@ msgstr "Bed Temperature" msgid "Max volumetric speed" msgstr "Max volumetric speed" -msgid "\\u2103" -msgstr "\\u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "Bed temperature" -msgid "mm\\u00B3" -msgstr "mm\\u00B3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "Start" @@ -3619,8 +3619,8 @@ msgstr "Stop" msgid "0" msgstr "0" -msgid "Layers: N/A" -msgstr "Layers: N/A" +msgid "Layer: N/A" +msgstr "" msgid "Clear" msgstr "Clear" @@ -3695,12 +3695,12 @@ msgid "In Cloud Slicing Queue, there are %s tasks ahead." msgstr "" #, c-format, boost-format -msgid "Layers: %s" -msgstr "Layers: %s" +msgid "Layer: %s" +msgstr "" #, c-format, boost-format -msgid "Layers: %d/%d" -msgstr "Layers: %d/%d" +msgid "Layer: %d/%d" +msgstr "" msgid "Please heat the nozzle to above 170 degree before loading filament." msgstr "Please heat the nozzle to above 170 degrees before loading filament." @@ -3711,9 +3711,6 @@ msgstr "Still unload" msgid "Still load" msgstr "Still load" -msgid "AMS settings are not supported for external spool" -msgstr "Current AMS settings do not support using an external spool." - msgid "Please select an AMS slot before calibration" msgstr "Please select an AMS slot before calibration." @@ -7119,9 +7116,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimal purge on wipe tower" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "Filament load time" @@ -9050,6 +9044,26 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" +#~ msgid "\\u2103" +#~ msgstr "\\u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\u00B3" + +#~ msgid "Layers: N/A" +#~ msgstr "Layers: N/A" + +#, c-format, boost-format +#~ msgid "Layers: %s" +#~ msgstr "Layers: %s" + +#, c-format, boost-format +#~ msgid "Layers: %d/%d" +#~ msgstr "Layers: %d/%d" + +#~ msgid "AMS settings are not supported for external spool" +#~ msgstr "Current AMS settings do not support using an external spool." + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/es/BambuStudio_es.po b/bbl/i18n/es/BambuStudio_es.po index 002fbec5a8..c68d5c06e2 100644 --- a/bbl/i18n/es/BambuStudio_es.po +++ b/bbl/i18n/es/BambuStudio_es.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-06 08:26+0800\n" +"POT-Creation-Date: 2023-04-06 19:20+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1939,14 +1939,14 @@ msgstr "Temperatura de la base" msgid "Max volumetric speed" msgstr "Velocidad volumétrica máxima" -msgid "\\u2103" -msgstr "\\ u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "Temperatura de la base" -msgid "mm\\u00B3" -msgstr "mm\\ u00b3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "Iniciar" @@ -3680,8 +3680,8 @@ msgstr "Detener" msgid "0" msgstr "0" -msgid "Layers: N/A" -msgstr "Capas: N/A" +msgid "Layer: N/A" +msgstr "" msgid "Clear" msgstr "Borrar" @@ -3757,12 +3757,12 @@ msgid "In Cloud Slicing Queue, there are %s tasks ahead." msgstr "" #, c-format, boost-format -msgid "Layers: %s" -msgstr "Capas: %s" +msgid "Layer: %s" +msgstr "" #, c-format, boost-format -msgid "Layers: %d/%d" -msgstr "Capas: %d/%d" +msgid "Layer: %d/%d" +msgstr "" msgid "Please heat the nozzle to above 170 degree before loading filament." msgstr "" @@ -3775,9 +3775,6 @@ msgstr "Todavía estoy descargando" msgid "Still load" msgstr "Todavía estoy cargando" -msgid "AMS settings are not supported for external spool" -msgstr "La configuración actual de AMS no admite el uso de una bobina externa." - msgid "Please select an AMS slot before calibration" msgstr "Seleccione una ranura AMS antes de realizar la calibración." @@ -7272,9 +7269,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Purga mínima en la torre de limpieza" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "Tiempo de carga de filamento" @@ -9246,6 +9240,27 @@ msgstr "" "¿Sabía que puede utilizar más bucles de pared y una densidad de relleno " "dispersa más alta para mejorar la resistencia del modelo?" +#~ msgid "\\u2103" +#~ msgstr "\\ u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\ u00b3" + +#~ msgid "Layers: N/A" +#~ msgstr "Capas: N/A" + +#, c-format, boost-format +#~ msgid "Layers: %s" +#~ msgstr "Capas: %s" + +#, c-format, boost-format +#~ msgid "Layers: %d/%d" +#~ msgstr "Capas: %d/%d" + +#~ msgid "AMS settings are not supported for external spool" +#~ msgstr "" +#~ "La configuración actual de AMS no admite el uso de una bobina externa." + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/fr/BambuStudio_fr.po b/bbl/i18n/fr/BambuStudio_fr.po index e4742c850a..b59424f5db 100644 --- a/bbl/i18n/fr/BambuStudio_fr.po +++ b/bbl/i18n/fr/BambuStudio_fr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-06 08:26+0800\n" +"POT-Creation-Date: 2023-04-06 19:20+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1940,14 +1940,14 @@ msgstr "Température du lit" msgid "Max volumetric speed" msgstr "Vitesse volumétrique maximale" -msgid "\\u2103" -msgstr "\\u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "Température du plateau" -msgid "mm\\u00B3" -msgstr "mm\\u00B3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "Démarrer" @@ -3673,8 +3673,8 @@ msgstr "Arrêt" msgid "0" msgstr "0" -msgid "Layers: N/A" -msgstr "Couches: N/A" +msgid "Layer: N/A" +msgstr "" msgid "Clear" msgstr "Nettoyer" @@ -3750,12 +3750,12 @@ msgid "In Cloud Slicing Queue, there are %s tasks ahead." msgstr "" #, c-format, boost-format -msgid "Layers: %s" -msgstr "Couches: %s" +msgid "Layer: %s" +msgstr "" #, c-format, boost-format -msgid "Layers: %d/%d" -msgstr "Couches: %d/%d" +msgid "Layer: %d/%d" +msgstr "" msgid "Please heat the nozzle to above 170 degree before loading filament." msgstr "" @@ -3767,11 +3767,6 @@ msgstr "Décharger encore" msgid "Still load" msgstr "Charger encore" -msgid "AMS settings are not supported for external spool" -msgstr "" -"Les paramètres actuels de l'AMS ne prennent pas en charge l'utilisation de " -"bobine externe." - msgid "Please select an AMS slot before calibration" msgstr "Veuillez sélectionner un emplacement AMS avant la calibration." @@ -7294,9 +7289,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Purge minimale sur la tour de nettoyage" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "Temps de chargement du filament" @@ -9290,6 +9282,28 @@ msgstr "" "Saviez-vous que vous pouvez définir un plus grand nombre de mur et une " "densité de remplissage plus élevée pour améliorer la résistance du modèle ?" +#~ msgid "\\u2103" +#~ msgstr "\\u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\u00B3" + +#~ msgid "Layers: N/A" +#~ msgstr "Couches: N/A" + +#, c-format, boost-format +#~ msgid "Layers: %s" +#~ msgstr "Couches: %s" + +#, c-format, boost-format +#~ msgid "Layers: %d/%d" +#~ msgstr "Couches: %d/%d" + +#~ msgid "AMS settings are not supported for external spool" +#~ msgstr "" +#~ "Les paramètres actuels de l'AMS ne prennent pas en charge l'utilisation " +#~ "de bobine externe." + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/hu/BambuStudio_hu.po b/bbl/i18n/hu/BambuStudio_hu.po index 31428de081..604f48dec0 100644 --- a/bbl/i18n/hu/BambuStudio_hu.po +++ b/bbl/i18n/hu/BambuStudio_hu.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-06 08:26+0800\n" +"POT-Creation-Date: 2023-04-06 19:20+0800\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1925,14 +1925,14 @@ msgstr "Bed Temperature" msgid "Max volumetric speed" msgstr "Max. volumetrikus sebesség" -msgid "\\u2103" -msgstr "\\u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "Asztalhőmérséklet" -msgid "mm\\u00B3" -msgstr "mm\\u00B3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "Start" @@ -3645,8 +3645,8 @@ msgstr "Állj" msgid "0" msgstr "0" -msgid "Layers: N/A" -msgstr "Layers: N/A" +msgid "Layer: N/A" +msgstr "" msgid "Clear" msgstr "Clear" @@ -3721,12 +3721,12 @@ msgid "In Cloud Slicing Queue, there are %s tasks ahead." msgstr "" #, c-format, boost-format -msgid "Layers: %s" -msgstr "Layers: %s" +msgid "Layer: %s" +msgstr "" #, c-format, boost-format -msgid "Layers: %d/%d" -msgstr "Layers: %d/%d" +msgid "Layer: %d/%d" +msgstr "" msgid "Please heat the nozzle to above 170 degree before loading filament." msgstr "Please heat the nozzle to above 170 degrees before loading filament." @@ -3737,9 +3737,6 @@ msgstr "Still unload" msgid "Still load" msgstr "Still load" -msgid "AMS settings are not supported for external spool" -msgstr "Current AMS settings do not support using an external spool." - msgid "Please select an AMS slot before calibration" msgstr "Please select an AMS slot before calibration." @@ -7177,9 +7174,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimális tisztítás a törlőtoronyban" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "Filament betöltési idő" @@ -9129,6 +9123,26 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" +#~ msgid "\\u2103" +#~ msgstr "\\u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\u00B3" + +#~ msgid "Layers: N/A" +#~ msgstr "Layers: N/A" + +#, c-format, boost-format +#~ msgid "Layers: %s" +#~ msgstr "Layers: %s" + +#, c-format, boost-format +#~ msgid "Layers: %d/%d" +#~ msgstr "Layers: %d/%d" + +#~ msgid "AMS settings are not supported for external spool" +#~ msgstr "Current AMS settings do not support using an external spool." + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/it/BambuStudio_it.po b/bbl/i18n/it/BambuStudio_it.po index 68154c3e3e..19512ea44d 100644 --- a/bbl/i18n/it/BambuStudio_it.po +++ b/bbl/i18n/it/BambuStudio_it.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-06 08:26+0800\n" +"POT-Creation-Date: 2023-04-06 19:20+0800\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1929,14 +1929,14 @@ msgstr "Temperatura piano" msgid "Max volumetric speed" msgstr "Massima velocità volumetrica" -msgid "\\u2103" -msgstr "\\u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "Temperatura piano" -msgid "mm\\u00B3" -msgstr "mm\\u00B3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "Calibra" @@ -3665,8 +3665,8 @@ msgstr "Ferma" msgid "0" msgstr "0" -msgid "Layers: N/A" -msgstr "Layers: N/A" +msgid "Layer: N/A" +msgstr "" msgid "Clear" msgstr "Cancella" @@ -3741,12 +3741,12 @@ msgid "In Cloud Slicing Queue, there are %s tasks ahead." msgstr "" #, c-format, boost-format -msgid "Layers: %s" -msgstr "Layers: %s" +msgid "Layer: %s" +msgstr "" #, c-format, boost-format -msgid "Layers: %d/%d" -msgstr "Layers: %d/%d" +msgid "Layer: %d/%d" +msgstr "" msgid "Please heat the nozzle to above 170 degree before loading filament." msgstr "" @@ -3759,10 +3759,6 @@ msgstr "Scarica ancora" msgid "Still load" msgstr "Carica ancora" -msgid "AMS settings are not supported for external spool" -msgstr "" -"Le impostazioni attuali dell'AMS non supportano l'uso di una bobina esterna." - msgid "Please select an AMS slot before calibration" msgstr "Seleziona uno slot AMS prima di calibrare." @@ -7247,9 +7243,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Spurgo minimo sulla torre di pulitura" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "Durata caricamento filamento" @@ -9223,6 +9216,28 @@ msgstr "" "Sapevate che è possibile utilizzare un maggior numero di anelli a parete e " "una maggiore densità riempimento per migliorare la resistenza del modello?" +#~ msgid "\\u2103" +#~ msgstr "\\u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\u00B3" + +#~ msgid "Layers: N/A" +#~ msgstr "Layers: N/A" + +#, c-format, boost-format +#~ msgid "Layers: %s" +#~ msgstr "Layers: %s" + +#, c-format, boost-format +#~ msgid "Layers: %d/%d" +#~ msgstr "Layers: %d/%d" + +#~ msgid "AMS settings are not supported for external spool" +#~ msgstr "" +#~ "Le impostazioni attuali dell'AMS non supportano l'uso di una bobina " +#~ "esterna." + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/ja/BambuStudio_ja.po b/bbl/i18n/ja/BambuStudio_ja.po index cf84fe2e5e..efc59b543a 100644 --- a/bbl/i18n/ja/BambuStudio_ja.po +++ b/bbl/i18n/ja/BambuStudio_ja.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-06 08:26+0800\n" +"POT-Creation-Date: 2023-04-06 19:20+0800\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1878,14 +1878,14 @@ msgstr "ベッド温度" msgid "Max volumetric speed" msgstr "最大体積速度" -msgid "\\u2103" -msgstr "u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "ベッド温度" -msgid "mm\\u00B3" -msgstr "mmu00B3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "開始" @@ -3546,8 +3546,8 @@ msgstr "中止" msgid "0" msgstr "0" -msgid "Layers: N/A" -msgstr "積層: N/A" +msgid "Layer: N/A" +msgstr "" msgid "Clear" msgstr "クリア" @@ -3621,12 +3621,12 @@ msgid "In Cloud Slicing Queue, there are %s tasks ahead." msgstr "" #, c-format, boost-format -msgid "Layers: %s" -msgstr "積層: %s" +msgid "Layer: %s" +msgstr "" #, c-format, boost-format -msgid "Layers: %d/%d" -msgstr "積層: %d/%d" +msgid "Layer: %d/%d" +msgstr "" msgid "Please heat the nozzle to above 170 degree before loading filament." msgstr "フィラメントをロードする前に、ノズル温度を170℃以上に加熱してください" @@ -3637,9 +3637,6 @@ msgstr "アンロード" msgid "Still load" msgstr "ロード" -msgid "AMS settings are not supported for external spool" -msgstr "現在のAMS設定は、外部スプールホルダーを使用できません" - msgid "Please select an AMS slot before calibration" msgstr "キャリブレーション前に、AMSスロットを選択してください" @@ -6907,9 +6904,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "プライムタワー上最小フラッシュ量" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "フィラメントロード時間" @@ -8718,6 +8712,26 @@ msgstr "" "強度の向上\n" "壁面層数やインフィルの充填密度を増やして造形強度を向上できます。" +#~ msgid "\\u2103" +#~ msgstr "u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mmu00B3" + +#~ msgid "Layers: N/A" +#~ msgstr "積層: N/A" + +#, c-format, boost-format +#~ msgid "Layers: %s" +#~ msgstr "積層: %s" + +#, c-format, boost-format +#~ msgid "Layers: %d/%d" +#~ msgstr "積層: %d/%d" + +#~ msgid "AMS settings are not supported for external spool" +#~ msgstr "現在のAMS設定は、外部スプールホルダーを使用できません" + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/nl/BambuStudio_nl.po b/bbl/i18n/nl/BambuStudio_nl.po index 985dc6b7f7..bf91c1380a 100644 --- a/bbl/i18n/nl/BambuStudio_nl.po +++ b/bbl/i18n/nl/BambuStudio_nl.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-06 08:26+0800\n" +"POT-Creation-Date: 2023-04-06 19:20+0800\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1937,14 +1937,14 @@ msgstr "Bed Temperatuur" msgid "Max volumetric speed" msgstr "Maximale volumetrische snelheid" -msgid "\\u2103" -msgstr "\\ u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "Printbed temperatuur" -msgid "mm\\u00B3" -msgstr "mm\\u00B3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "Start" @@ -3670,8 +3670,8 @@ msgstr "Stop" msgid "0" msgstr "0" -msgid "Layers: N/A" -msgstr "Lagen: N/A" +msgid "Layer: N/A" +msgstr "" msgid "Clear" msgstr "Wissen" @@ -3747,12 +3747,12 @@ msgid "In Cloud Slicing Queue, there are %s tasks ahead." msgstr "" #, c-format, boost-format -msgid "Layers: %s" -msgstr "Lagen: %s" +msgid "Layer: %s" +msgstr "" #, c-format, boost-format -msgid "Layers: %d/%d" -msgstr "Lagen: %d/%d" +msgid "Layer: %d/%d" +msgstr "" msgid "Please heat the nozzle to above 170 degree before loading filament." msgstr "" @@ -3764,11 +3764,6 @@ msgstr "Nog steeds aan het ontladen" msgid "Still load" msgstr "Laad nog steeds" -msgid "AMS settings are not supported for external spool" -msgstr "" -"De huidige AMS-instellingen ondersteunen het gebruik van een externe spoel " -"niet." - msgid "Please select an AMS slot before calibration" msgstr "Selecteer een AMS-slot voor de kalibratie." @@ -7283,9 +7278,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimale filament reiniging op de wipe tower" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "Filament laadt tijd" @@ -9267,6 +9259,28 @@ msgstr "" "Wist je dat je meer wandlussen en een hogere dunne invuldichtheid kunt " "gebruiken om de sterkte van het model te verbeteren?" +#~ msgid "\\u2103" +#~ msgstr "\\ u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\u00B3" + +#~ msgid "Layers: N/A" +#~ msgstr "Lagen: N/A" + +#, c-format, boost-format +#~ msgid "Layers: %s" +#~ msgstr "Lagen: %s" + +#, c-format, boost-format +#~ msgid "Layers: %d/%d" +#~ msgstr "Lagen: %d/%d" + +#~ msgid "AMS settings are not supported for external spool" +#~ msgstr "" +#~ "De huidige AMS-instellingen ondersteunen het gebruik van een externe " +#~ "spoel niet." + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/sv/BambuStudio_sv.po b/bbl/i18n/sv/BambuStudio_sv.po index cf87483b43..1038c28f89 100644 --- a/bbl/i18n/sv/BambuStudio_sv.po +++ b/bbl/i18n/sv/BambuStudio_sv.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-06 08:26+0800\n" +"POT-Creation-Date: 2023-04-06 19:20+0800\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1911,14 +1911,14 @@ msgstr "Byggplattans temperatur" msgid "Max volumetric speed" msgstr "Max volymetrisk hastighet" -msgid "\\u2103" -msgstr "\\u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "Byggplattans temperatur" -msgid "mm\\u00B3" -msgstr "mm\\u00B3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "Starta" @@ -3634,8 +3634,8 @@ msgstr "Stopp" msgid "0" msgstr "0" -msgid "Layers: N/A" -msgstr "Lager: N/A" +msgid "Layer: N/A" +msgstr "" msgid "Clear" msgstr "Rensa" @@ -3710,12 +3710,12 @@ msgid "In Cloud Slicing Queue, there are %s tasks ahead." msgstr "" #, c-format, boost-format -msgid "Layers: %s" -msgstr "Lager: %s" +msgid "Layer: %s" +msgstr "" #, c-format, boost-format -msgid "Layers: %d/%d" -msgstr "Lager: %d/%d" +msgid "Layer: %d/%d" +msgstr "" msgid "Please heat the nozzle to above 170 degree before loading filament." msgstr "Värm nozzeln till över 170 grader innan du laddar filamentet." @@ -3726,9 +3726,6 @@ msgstr "Matar ut fortfarande" msgid "Still load" msgstr "Laddar fortfarande" -msgid "AMS settings are not supported for external spool" -msgstr "Aktuell AMS-inställningar stöder inte användning av en extern spole." - msgid "Please select an AMS slot before calibration" msgstr "Välj ett AMS-fack innan kalibrering." @@ -7129,9 +7126,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimal purge på wipe torn" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "Inmatningstid för filament" @@ -8173,8 +8167,8 @@ msgid "" "interface is Concentric" msgstr "" "Linje mönster för support gränssnittsytan .Standardmönstret för olösligt " -"(material) support gränssnittet är Räta medan standardmönstret för lösligt" -"(material) stödgränssnittet är koncentriskt" +"(material) support gränssnittet är Räta medan standardmönstret för " +"lösligt(material) stödgränssnittet är koncentriskt" msgid "Rectilinear Interlaced" msgstr "" @@ -9066,6 +9060,27 @@ msgstr "" "Visste du att du kan använda fler väggslingor och högre gles fyllningstäthet " "för att förbättra modellens styrka?" +#~ msgid "\\u2103" +#~ msgstr "\\u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\u00B3" + +#~ msgid "Layers: N/A" +#~ msgstr "Lager: N/A" + +#, c-format, boost-format +#~ msgid "Layers: %s" +#~ msgstr "Lager: %s" + +#, c-format, boost-format +#~ msgid "Layers: %d/%d" +#~ msgstr "Lager: %d/%d" + +#~ msgid "AMS settings are not supported for external spool" +#~ msgstr "" +#~ "Aktuell AMS-inställningar stöder inte användning av en extern spole." + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po index 1cdf48a39b..e83a081d18 100644 --- a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po +++ b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-06 08:26+0800\n" +"POT-Creation-Date: 2023-04-06 19:20+0800\n" "PO-Revision-Date: 2023-03-29 12:43+0800\n" "Last-Translator: Jiang Yue \n" "Language-Team: \n" @@ -1869,14 +1869,14 @@ msgstr "热床温度" msgid "Max volumetric speed" msgstr "最大体积速度" -msgid "\\u2103" +msgid "℃" msgstr "" msgid "Bed temperature" msgstr "床温" -msgid "mm\\u00B3" -msgstr "" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "开始" @@ -1968,7 +1968,7 @@ msgid "" msgstr "配置当前打印任务应使用哪个AMS槽位" msgid "Filament used in this print job" -msgstr "当前打印打印使用的料丝" +msgstr "当前打印使用的料丝" msgid "AMS slot used for this filament" msgstr "当前料丝对应的AMS槽位" @@ -3544,7 +3544,7 @@ msgstr "停止" msgid "0" msgstr "" -msgid "Layers: N/A" +msgid "Layer: N/A" msgstr "" msgid "Clear" @@ -3619,11 +3619,11 @@ msgid "In Cloud Slicing Queue, there are %s tasks ahead." msgstr "前面还有%s个任务在云端切片队列中" #, c-format, boost-format -msgid "Layers: %s" +msgid "Layer: %s" msgstr "" #, c-format, boost-format -msgid "Layers: %d/%d" +msgid "Layer: %d/%d" msgstr "" msgid "Please heat the nozzle to above 170 degree before loading filament." @@ -3635,9 +3635,6 @@ msgstr "继续退料" msgid "Still load" msgstr "继续进料" -msgid "AMS settings are not supported for external spool" -msgstr "AMS设置对外置料盘无效" - msgid "Please select an AMS slot before calibration" msgstr "请先选择一个AMS槽位后进行标定" @@ -3794,7 +3791,7 @@ msgid "Warning:" msgstr "警告:" msgid "Export successfully." -msgstr "导出成功." +msgstr "发送成功." msgid " (Repair)" msgstr "(修复)" @@ -6835,9 +6832,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "擦拭塔上的最小清理量" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "加载耗材丝的时间" @@ -8618,6 +8612,9 @@ msgstr "" "提高强度\n" "你知道吗?你可以使用更多的墙层数和更高的疏散填充密度来提高模型的强度。" +#~ msgid "AMS settings are not supported for external spool" +#~ msgstr "AMS设置对外置料盘无效" + #~ msgid "Auto sync system presets(Printer/Filament/Process)" #~ msgstr "自动同步预设(打印机/耗材丝/工艺)" diff --git a/resources/i18n/de/BambuStudio.mo b/resources/i18n/de/BambuStudio.mo index 5d4caa9a651825f7a2bce290238642d283365055..319a344438f0cf6087b003c8ca0f7c551c92f079 100644 GIT binary patch delta 47666 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 delta 48044 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 YwLrHU#-kiaat?Aa9>s08^EB800TJ23Z~y=R diff --git a/resources/i18n/en/BambuStudio.mo b/resources/i18n/en/BambuStudio.mo index 6506a4badca472f2624a291a474f935642cea90b..8cf4180234387fdd7c56033166563dc604caddec 100644 GIT binary patch delta 47675 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 K+L<6PwEsVxhzSP( delta 48043 zcmZ791#}fh-^cMyf(H%m0RluIxVyW%yGw8{3lw*E*WwPviWMmC?oga!#ihL8-_GzH z&U??f&u3ljL-$c45 zx(T^ZmxM;t8P$>g7z>ACJe-1>ie;D@FQex60|sEn115qlW+FcV73wXhcK2XnJcc## z9%>EbIY|8Lkm!HVgzh|QZf>JG@(R_^XVldA{b_n0fa+KxjE}*ndIeEaR|@sus;G7v zp$62(Uhj!<$PfC{H5DgPpa$omIF2qMjRcGW;vyH1B zGmFthb^JUMWakZPad$gzR{toBs!J0{_;X1P6lm^lphof? zHG)VN%&Jd`>R18HfEBR_cE^FZ8MXSeUo;2QMC?v}1BPMHC38|%#gXK1pd!-hGVxD9 zqT6K?+7TF!{A7%eOHn=l9d*NQREUpa96XO&6ZcVb`W)5K&lrIIS4=(?>i#UK`wF6t zu=ER2hqf>o%FZb5}~ zFRGo>NW;!0R693N^&Z>&zo_=UV>IpmNcT;Hu~2iF*yaOK9STMDya4LP@~8(^K|P=e zYOXt=A}|njl1@iOc8&E2DkAq#_r1rsJm2yC+uRTzSCbDxh43Qkh8L)Yd>@z*rbJy2 z!lYOT)xkQb#oXH3AJvhGsCJg4rfMe!;|X*ZlXyoWEzW#s=4KbBA%6}P(zmD)enG9` z*pJL=PmY?35Y(c~fg!jMtKl&$f+-%G&yI$u`)8oqUHX{#MW86Cnj`nFeUl_P$Nq5)O;rlM@?B{)b$8dysE$2BjnsK=J`F=r4{m}QSr?3ky)h~d!j(7@H5J+aF&!%HlBh*N zMXZR6Q5|}TxiH-eDq}s&hhs4}9>$#b&E~VeG;`k$b@UEI-9HBl;#t&`#(rfUoD~%r zH#dpcB&yj9O>qSI*65EfP!IZyaWTtl)1jiMuiM>Gp`CzgXBx)DrPhtM{0~%QPFgQu z9PR(>Bs3S#P(A+-)o}7Rj*}kqV03JRF|ZA4&2+r7z>-CI?@@LPNy&G{?_lz$U9>^^8GOY z$Dum35Ov=!>tT$l{eRY0xN3ci8d040W~7->5y_5fxH1M~Q_O&)umEmAMd~>!Lhn&i z^98lGd_M5GfR!;327e^}nzJG#)YHnC0Gpx8d!Z^0L(TnMRKsgg4R1ot>F>A@_o5e} zPv!@Y&ge(^25f>`P-`Q>XA_Y$pNYQ;3R0l$QVug>b<}~>4>h8B))lA_ZbU84-KdWK zh3)V%YAT9-F%K$->QHUeKw4rF?2p8A`qZ-U_Esp9?dDK*P##Hz#4#vf(c7nchmY|!9gto;2RD;p^nN=fCgqo6+ zsE%d8nwSrd<9O5*)c5f*s~;7?&e#u!<23Z~_3?gupMmP=Jq*XE$o6)fq<%h5bqb1L zeVmL<@gLOOR*vN3t@=jzC;14}9OjJdHQ-djwdA{FeoPa^lsCj%JJ=Htz2ur)7gyOl+H>eNTg=^)g|r`r5N)B&>v1M!kA|9~2Re{>&j z5hp{n7li6iZcM`SonlI0eblz`dA#7j^e*o7f@1l7UUs707KhG{1| z79*b*HKqM95C@|=uozt}hP5Pgp!|Va)sIje_<(9KiocJyUD99+@{Q43GsrYL(PR2} zzYB^P%g6gst0s1$-crFJn>c9Y-AA?#mlToXB4(gyDBw1iOkF@gwVJ)YQcaFb$@{q~yaf1(rpfc&$+P4?wMv(U=N1pr+P6O+pWTin_rs zzPTY8szNYo)tA6Ptb+=5AJk$ThkEcbREPGWrt%DGAooy_`3JSOKG^c83A}RG2_T_R zra+A_Ju1|BQ8$!9HBiUqn_0V}9yl1isj$vLMPMmv3ihKq>Lm2>zDXs);$$mep!WZG z5?T!Fu{EB?T$nqN8EHq%NPaN3#FeOy#!l?xRK_$|1iN5Q+<;jyLlV=G+L)YtcPxMt zPy;)T-u}N%LL+>Onydd%`#WY*Q=SAhHEB`jLq62?BB-;zf-R3gMWQFFy@9AH7>TMs z1^eLwjKE~c?EW83LUT3;wQbg-LVFNL;04s;X_(yX{~_3e{6o~*Xpq9k`~Dw+ip&jE z$6lh^ji1uAn;t{R7rD?!?Da0Fjt@p3PR`{ni5e9Amd?lfj`kHbf^tEoVr5K2 zzB_KgX{f0vpPtauKo?YgXa*l=H?Bghfi@XUJ6%v~rYCAG^hfQ6;WqEiC!tWRL`}g# z%!yY}BZ(DkwqtTsJ`~lFyqF39K|L^8h%uct6Y7DvP-~(nDk3#dk#2yj4cF;NLi=?f z>SUUO-r0=m*fmt>-=caRC)6~U5!FzBRKpceBdvj|SI^oNb-;~6&HZ9j$JSs>?f>m0 zv_1Yr&G{Kr!Lp9VE_3;^j9dLlnKSs6l&gz%hOi4V{no4F(Z4E+K z4+9aauQ6(hx}(m8 z;TVXEQ4czZqwpB2Ud=q_L~Mg{#wJsgdS#C+6ZT!QMrdQ6FXP)GB1)arhX>S*-5 z##9(cJ_oA3ny7khQ3ucO`3@mI8lF_J!=4mw&n4QnEDw}i!(dAT4ed`g)*po zb(?RB>Ocon&wHafIsnyy;i!?$L^ZhDUf+a@fjoPI)Z0l5bm<&cTj8V6Dss^ikpEZDejt8 zoPh#WD1-`e4OEAk+Wbh=h^Ju=T!Fdpy1gE+glQ)gs$MS4hhro6Re+j)$ty1Oz(NQ4~ZD{R?I-mwvr&w26 z_hVY^|0^WIsQ3l7crunXpN17s9};~q7-ymu;ePAi)~Mx7c_@D7dL`7z%a%9Rv9`AM zM4cByrS|^o55sOj&3N?4xD;SGgt6Q66Ev|P%P2pdt(4Int`l8L>My;)fs7U{3 z^S%}B=YKL1+D@U^2uq_vyc89I9rpTF)V6wuibS$XKF(JxgsPvvviY#8f?5lmP#qeC zS`#Bs9hqibTbcc@fb;D^};Q~%0f5%?$Rn@GGU#%OgH?1+MneChh zHIPcEjO8oQ74aeJz8p2pt}2XL%*|1e=!WUF|HqKfh&Q5c*oiti4`B#?x8)(V%oOEB zb*vcb6N=)qSpBmRvVLCo4d-rrKG zhmXn6!=X65j(LE8U1I=hwI@YAAQP&+f;L|UefvNmh!>(FvI#W>&#nITO~^x0BhHLnFemE1Wmpim+x%P9nu*fDm>Avm6aH>#bYsE*XcOxPNm;}q0=?;EoJ)$=Hg z%)t>0tB?=FoY>!%Z@>)XPhn+zhk;nKv6=H$s1CMA9ZbDZ1DI{gm!mqe*?P!&xiR}+ zH$I_2H@rv9k#7@oLqgO@GNO810Cm7rz}#3Lb@EL@os`Q_^$(*WcMY|;?_m%=Lk&1? zQ#%DN356^e)sgI|3Pn&SSZP~c(OM7H!PcmHeNl^T5NdA6phh~^=GS2``MszPK1Ovc zS~JrzH!cZ{C@E^u1*5iIZd=|I719XQ$R^wTa#RP8qV7A5Iu~xDM*ImC8Q1 zRJ6yU*b}ScHq?Wow=qX_Zq%o2XH2R6e}Y5_e2VIMcw4g_D_}12-7!6`M1}M;YD9md z&iwf8%xsE9eqw?myT^R3Z4n)Z62o-?Q;`~L!SKam18+^VyWQyV*B zA^Z~+a^DDZV>D|598Y;5UdHvf6i0M1Kc;8u>f`;rfla86mgr{Msfty}*G8?K72RBO z)^DXiBlhiXwo6RZ$aA4~M={h?RK@H#+?MY^P1#?lZTA3G?*nQ#WbR?MT{+ZLwL_g7 zi%`$I;*!tJL;`+jyW z)80_}U-hQS-WigHRe_Il2Xf$f%lTq7gu`OSL+Ggu*`8HICcA+A79yL|> zQ1xD5Z+wSZJDvKQh;&D_I}8>2(HK>q|5Him!E;d`uWL~I_Bd))ry5`ml9s3k4Y7_# zg>p8k;nk=w92-yrI%=<vUB8)z;mpFPA4#_dPOhlEgl-lJGLVq9Q3uFy>lW0U-@|nH$>vkC zYci0}iRwTD)H%=*H8q1!p`VF*;C$;^R7ZAOPq^%VjqC;mIy#@CK5X8hLYQQbxgiks zpsc8o6+>Mwi&}J5Q6ukwYG)W~7feLmw;0v#W>m*6S#PMPy5SxL#qb}@gINZfbD#}s zDkh>vxCGUK?Wncz2Wo`JP@%qx+HUty9rPVyIuHYW$tTAPmJXH zadOmR$%+bDAzNO_=9{A$=!QCgMx!FR0@bmtsQdS07@k5!>N9F86Am?zaPyJKNI?GVMD|LLd@u0eHd4=PgUP#sS&%se=$H6tp-xls2NKt-$~s{I<)rl#C=I+4&6 z^spCP)Pu*O=5R4;WLr@64xpywBq{=TP)F@Yn@=#@L@X0($_k>sJy*4kw&j0%vj47- z&`6%6LiZXqm)}qwh%&--C<$segrgo@3PZ3FYKlgnIx+);aWiUaZrJiqs3}M|(nLHf zCe{A0OF|FqhFUcJt-qp1Fb4f_0cvqAK|SywDx~L85xRpq*Daes|Nd$(A>_#ez*>+V#sLo14KVmB(|eEdKC5GbEvt#ZGC`xz%$fHBabm12t;+b zAS!YdQSG%HWA}eA3N!^nQQz4{VK}ZpJ?Iju;rpm5`i6>3^s%OXO4L*oK&_2dsQP_S zQ!p8Iw68}k_EV^B`+h9@U!jOR&ir7J1GQR*U>O{R8u3}w4cG7>KC$_=2BkS`&oh=B#YE;aP>d;7B zfU__Y=9}r`G{DxF0}r4U;d?BMF=m ziI`_r;~+fDg$bwzYtJ{|fEuD!>tfVC-iX>2`%(M&7;0_YKn>&xhGOakCPL*=+p;mL zepgf^eqF%+*T|+)phYnU%i%)ohEGw8s?kF8fVQZ5JyH9)A8M{=p*pm}x&bwS9mpV^ zy?B>=!^LKb3NJB{X}rWWe=lb&1+}Sg)?Nr+YC>NdHR8so2X#jEd;n@B<4}um0an62 z_PYNvb3FyBemH7z7qR(~xS#wimxMyoV7Xa*olytKKGYmOMIEKdR+zcXh1zyiP!VX2 zfjA5^;Br*`lQ#bt^%)T7H*@lZp*mgzwK&~YBs8*qsBJP5Gvj=lKY<0w-@_`HdZmvu z8Y58kKcgNPca`Z_7^-8%u?RLpt%*gbv;Q)7#Fxl(U8mt{6XN!$?`Zun5a*#H@ds-0 zJw|2XVfl;w#JMo0qU&Jfa+KYRK0qrh_ykjrGcpPV-yBx|4$-OoPwpOef<|>f%DODc1Wqi*OI7!6qBbni!0o$S=T27;B^Xj9Gw+|9 z{a<*KkN01toWMZxwKkh=*9&#B?M5~58H?fAE#~9-6e>cgx0=5>Sq`W!1JoUq4YlU zi-TLJhRW^tar)yRtchQ-6jnQ6{)}h_RwMr!RbJwt`LTW!HYa}x^J2a~%@lM)?Uwz2 zvi~cRcuYZI%yr1e`+NF5a5ni=ht1dJ9hjErj+pHffI6`9qZ%BFHE=a*O?^j2 zsQ6z#PEqWInv(6PNWXPSbSDvT)c#@t1Ih0|jp!Qcb3D^A6N%QSH8Bqt;&ohr1CE<7 zoheTEIKPuGg+=i{)GjD;(tP|@LJhPIwnTS22`!>8s2kItGQT{!g{qkQv^hX};zjb4 z@F=!9pj z^Vj6IUoz$Yq891F%jTRYc*T4MRKz%xSHlw63^n)5FgiX%MerT!Go#E^^O;Z)eaTnH z7~21}Na(|(DeA0lhw4y248ro)%uyME8OaYtm9MeoXHnbkA?iW#ubU1ev8F|}n+bLB z6heKSFNNOE|K)6jR;Z5jLY;Un>Wm(bI?n+&Ux}p@=)+;Zt#}pHfd{AtUZ6(s5f$QSx6DXlp+0=#+k80c zzMQE03R%mb?yH7Lur>x_#4Yx}LNbv8&CPVwgXUuzT!-2|XHX-(Wv@T5`FE(b@)h;K z6SvL%mrxyhi0Y8f9b*hsJMmFdoXjPm2Zo?RlMnTMpazCvYg7Z1QT67a=6*G*V|!7n z{-n*vzw6^PBcBFU?^o0snt?TN4VFRYo>?1iS(~Vjs@M_Lv%#nbOhkolK59;vphmhL zHNqXJBl-fWgZ}r;8c2?+7mPlb9n)b>)W>mMWKp|L1PMKO7-|Y;qei?KgK;(LV7Y*r zsxPPx`TT7<5Cye6(x8s=JgE9ZQAhP^)Csx=)&2)t{@s)PAMb%Vi_@XLDiuR@pb=_O zwnjx{AZnM4Lycf22I6{5i)Tt%oJ z5sHh7 zNCwn)&Wo->)x%zxgW4WzQ6W8y3iS=lf_H5`-V1YrB|=3c8EVm`$C5Y#8{-M=i(xN) zy#EMw83vILeq}xzD!pR=x1?Yk1#0LG>f`YnY8T{x?ccDJ+wC{(e;tLNDA3%;_}4r*11hBXPz@GCHB<%_`g-)Hd9P`jk72deBkp4b*)vQB&={wHIQ&GY<$vbtDTaB1KUTY>1)Q8TG(f z)`h4~vlZ6Ws0Xh{MQ{`9fjd$6?M3a1!=~JIPTL9>Y=x_~!W|5v;u9=^vEQ4yu8#U@ z)&v!i&!`SY|6oqGji#XAzU7^k47U?J+mZ3AjMotqM}>aB^$6;LCvE*VR>I)FT`80B>9i1 zNEGt(b&6qKRHSF4*2sKRN8BwW)RXKI*>psCqk4yXX#T00A+KsjZn%k<5qQ{;xnnp=pMi^RAc^*P(s} zypQ=YEq}*;0XD+p_zm@-qcMHG&;Ku|jyH-$!#DsHiLa>DA2+rcc_L))om8=X`R~6- zgi@e}3Sk&VptjQ-RHzcgF&#{WYA_tjVsX?_I>ugKhic~!tb(slktrJ2+*cko(8j1Q zD4pZFCNw80&?35KeSqrWE7aV5MTIhQJd+PVO+|7nikVP9mUlv(Y^zcCT|+J6`>4hE z2Gs#4z~tk)B!bAN!cZ(>^PMp@`6;N5ZAN|A{DF$tA&i7qP$RsF`aFMx>bMi%bT}qz zu9Kq5!!Rr6!42rPC83cdP2lStjiIPHER70fE3An#Pz^jsJ@6xTLEnVt0PBuAT1Vql zT#j1Q1rnKqs0eD;)W=|qK&H-hW|GiIcA*Z8eW;JkE2xgWL#^s4iG96aC}hSVS_^ai!KA|*3DPlCE31!}}0 zsJY95n%ffgdPP)6>!GHmJ*vH5?DYw#`{tsKV}6Q~hA#oYMS=5u5=*Gr)y*8;UB2BJPihoS~FA9LVFtgnx$2P864P&C}w2{qTV zQ6pc4>ezPF5q%1C;wRKxhG#J&D}stlY1D^S72J$|nk zBXOAm?c*=DLi{}Dh7i=MFN``+D&oIb2h~7@yk_JzP;=bW z+5^?0k*NEYSl6NM+hMQocWvSZs^=e2BTbmkL?jt%wdclQEQ=YiD{78sq9Sz>b>D4N z$p6N=_!O^ViTq{}rz~KmEGKFT+!7=dn%ee42h?ishno9IsD>A#8eV~#%eA-=x1b_a ztDyNoqXp`7e;GExm8i85y^x7WB2+#bvRhoIFo{eQltFzu^+1hihIJ7tgsV}Da~o>W z9l&0A78TO6g-yd%Q5|Z88b}A!htm)&f^$#@)^$v*{U5c6Ik8fsM%Ebhz*g2S7)ZW9 zYW2=Vt(i5bIX;65I=zDT#8Lf*$0$1_3EHP-vss9umIJ8Tcz3m z4M}7x+Ah>xd7B0K0=)jPB~v^5oEv;_!ov?%<{g@9n6iI!o(F! z1k<7-lLMDwIn+R3R&dRnexyKi8?B;wa1zvmLQ!*C6*cmfHs1wxv<}5UTyD#cpayUq zwTPdh2J#lwp(vHiK;l_LT@sPGPy%&hIn>E z%4QozLrrOU48&@v4s=7Usb4S{-SH$e^6jV&9Kk@mgbM8kY=;G^m@k>jP`{B#Ue){v zmZF-k_m|CEVF&8%K|Ls>x;db7VixjUQTu)ossrng$hgj4lW@*rYA)QzQ1q)|Iuwo? zSs~OmD`E4sQEQ?h>HzDBir8q(i3?E?xM;86K(+tcmdC59#mN3oLPDXagJC!bb>kXT zL^j*}0o0;7irRMPP;-3E=Kn^m?&qi}3ajPo{n1P z#YyOf_85qLP^*3xDr9R>p*@LOjQ3Fw{(|aI!n$UaXFx?HueCU;qZLsDY-r2dpd#6| zF8g0|+K&Q-dK~J8xwhgOTfWVfA3{CwBC3Ih)|aRVd_+w_!g{8oH8DH+j#vs8U?4s~ z4J=B1_J0!+8S0y_Si@0^X%8wg=dcrgMs>7p1M{)kAB&Q|fc-FGL$k^!q9U^o^@Zjd z7QpwYfn{%GB3T?2sk$x+g}ymze|NDL2B1Pc9JTuA+v`hF4R5gJCs2_%hidRTD%1~9 z?Y%;E@GC}O@5UyAk5C7b`;mm^HbxV3ArME9&xToX2lmIO*aKTPHEZKKb|n826`6+3 z%x^v-Pz}#VwYvfH;bH8HPIF)HZ_)HaBJDb#NN6r%w=g3JM?EMn>Lgr?nQ;>a;~i8e zqqj6BMb!(zix`gD1(90$I!!S-Dl!95Q!^Y@e<8-z{$EByA=`%9pZif$@)v5mTtbEX zHBQG^t?f2LEyi7_`X^B5!Zi%Xd-i&~Hs(jKv>2I_vkW%idZo5}y7GMfyB^b{|1gNW zUpw>R5{z5Om&Z{2j>%~tw7prJr91d~e-)!MY7OM=Xxb@;S~I0l1FMKyOLc5M0u_mV z=rRY+R1(@ID^Vl4f!dBwZT=H(BOkSs`9|{x>VeO!Z>`@@4~){;tdV%Ah@?kFDl=+r z6h>{=s-4;YI+;3ApfxZS)w4CI&>u$i{4Q#deL^)9Gr}~S5;fBFsCr@65~$CH2B^93 zf$G>m)Q8Y0)b5xb;hH&LOo19+iR$rA>jBhBcnoLbE!5)a+r`u$i2CX^0rll|Gpa+E zP;2Q1`r&=+Bh-VRp(6dkC81D9?rK(Z0@O%@P~~}04V6aqyb^ZC`Zj+Q)zBsD->9j1 zgX-uPtJBToBcpat49tXXG7=hL8B{|J@By|%J-AAD6Uy4C8zWF5by16Q6o%mzR0r?a z>;ItI{eXO9aQu6iIggF%SQxI>{?AHc1qC;-8V>Dgz8qdc)NZS9GNoY~rus%jL{1#O) z?l0yj4MH`T-&zT^dzzxQm5aJ>5@yG>7=m|Di!;VRU+-_hWyWmeTcewY#7q(z@fp-M zxr1u(nazJg^*kE8MWIWITAW#Jz6k2R+NcgULv^Gls+~!w`<9^E*@a6M19ks?>nWT;{yJ)EyAL+)j6{umI%>dw z4d%gW;EJtq$NB;l+OM`^@*yVlVW{m@7bFEK z&IoHS)WPKbLP8-PjH);RwHRlkdcGXB-&dnLuoX3eBd7+i+3R;vk$7hF|Dx{yX7j$o zO#3lWp-+rCwf{4cs6s(QOpj~u4?Kqo<)q=}#sjEDbrSXA@dWi*5oLrqf&(##d`Z;V z-ww65hM+<}6V;(bsKvP4yUzaGLqZ`wj~Vff%|{z)7EeOVL3t?V!p5ljQ&9~qLPh3x z%!kKNk%%WoIy>^ zMbrasqo(EsD#Sjc&3*Au9ZHY7KQn4=stVqt?n7Y=ypKO#5xeu>aL?M+y|e-l#Kv6zcQ*J|4s`s0R0r zH6y!V{oDH18fl!Fk_6T;YjJBm)JfO{wM(XqWB;d9!xUt~`w~lUqYk=S4niO>2Z}6Qi*<6_%mq?yEKCB$H2J&4l&2UJx~h zGf<(OhYIyln_q{D;8xUBp0xS1sP>*G4Mv$} z_HiuKzE6Z2aaL65^P}!BhuR%gYm6NAKVNTTDVXthW`m;70QMPzOi1 z>1MI?x2~|Bw|+B$rs1vglYI{z{5;z|<75A__zCs;b1!l4Tbz^lB3Q=p+ zgS(+RG640P%n_)yune_L_oF&=9(5jE!HRetwYY+3n_ZO`m2ZfOL`O`I!%zcWJ=^a8 zEfnbJ+>1JZKA}1gJjWbNIZz!diVAgk)CilRI?@)kMmnJ$)B`o3ai|W=LPcOD2I6*9 z`&Z_$|1*-fPk~0@KiAhOj&<=d&cUHLbe?%Y^!diPsMVer^?*=RgZXW~6iy^x3svtS z2ID7G`)L=LjD2LKE^Ts1aAkE?5tB-!UwMH*7v= zky$gjt!1zi*Xv>^x`#<<4ZKEmB=TYt+IXnXgrwFC7)U+`YQ!~BQ_vDMH62my^g?xH zH0ng1i_P&U>b^`%Ovei%Ys+;?kf_3iW|$c_nhVZtRLH*B>lv1s4)j9J`3zJC=c2w$ zu0##sxGleo>d4>L_o&?yZJ8Yy`s@3D1`?X1?5G<`p+-^%)#DDRsp*foaTIF%?L(cE z7g6=!p&}A}xmn%uP^&!|YO0E&I#31`vAXE}|9>^N6(Ue4ST9|`0oGBd4o*ikv=X)0 zHlP~Zh3fbTo4t}5!ptcTv;|8Gk|bJfdUSb}NEZ$gdiqRl@+ zbui{{CL#f-b0HAba6wdLN};BxKB|LF@E7cYUGW7b<5RQgO7{P83i_`yp)Rx9G*k!m zpr)uPXpL&P7iucT*z2=Uky?QIPPhhjU>!xBBacu6OSHy>yacMFl~7YvdyQ)z)R+Q| zv?Xd0^|2L)qB=4TLvRXe3ihBz_$O*Aj$%=~fORn8TJzven1}pqY=q}fKUZX3XZ|)^ z6_Vma)A8o(c@4qeCg7WXHg_^qSSRL=8)=thH=5N^)$LQMst4IWMVGHVkH&NT;3F_nXBWmsn?lk4IQAg)W z)V8}|^AAy<>+yD(InIP?w}Q0?D#G(n?XN)Z^M4x&t@0zNP+!I{yp1K%f47;_s;DVx zg_^rws1doSj*P=yxBzu9HP~a?>yNtcSJWDtirR*|(fj@%{)eep0QK=&0<~!Bp}r_| zMMYvHs)Hv`^)8@R^HbCT6@9PS*C}u}`8@l~z}})d6luRXs)JDNl-|$&*T^eVpvBSH zUTA^ZW*uyKH&lmuqe3?UHC6Lb^;V(gej{qms~j*9sfB8{4Jz~pN}!IBM6Nx8-+GC+2HRhq2s0 zO@rA`AuNs>Q7zQmHbk9#?X5rRPbII8EJJ-8-iEsG3~Fs$Mvd?eDq^o}{yS=$#yMnk zOOnVzL0`;{Yf*E42i3z5HlO^k`2vz1_27D_bD%wHY6hZ0KOObJxz^RFj_kA^Lk;X2 za&o%PV-otX`4<(!L`TdGsZb9JM~$oqdW#0N%_^fF+zxdF4@T{Rv8emzquO1M>exB! z6;%COm|y$<35l!}1pQ_9Yc14N3`C7^5~>5sP-|h0^>4=2emssqc6ri zYW@&AKB~iyQESIJMn`zQ6PbkOI4-Jz^r(exz~--==6 z51=CT0yUMFTJlY8}hq0{5Q6UaN z-IoOwv7)FBma*2f<;_r2(DnrTUlqDjpa%~^&Ea&^BKgf$+=iNx{iq0BKy9PvHXrSz ziC7?N%Ce$Ulj}5?a;2ScjoTFb@525o&QQLp|^iDqUsyq<-g22U4LroF6r1S*7Lnv!#W0Utk-bCBJ<6CSuMTW)U4ieHh(AJvjbNGm@mJ@-(Qas)wSBAK zGPXqxWFV@&F*ZNx7W-cho=<^#l;yVh<#SQg&wAgn1LnSC9=I6wq4E@KVXV7mF}1)! ztJ!-4@iG?XvlU)?=tSK8t_gP1H!{ z{%sc9VpPMsQ4K#w?WSZ8%nu^vum|~GsDVC1Ek^e%iNhrPADRZwVJY%gP!&==GHW9< zYF89O?c>s@kk-Y#*a{Vy`KWEWA9ZA3M0NBr>cKBiYven!CiwSX9{YO#rmH`8<3fGZ zhr>zK1FoPJ&jVB_pQ7eE`V-Tk#MVI6gFlaKqt zMCKe;*ZzM%LW?8sOEZVfQAg=y)QPqh^_A=hDgw7K5WistO!dmtFNMlCMSTX0z>K&A z)uH34HFN_tu*c~A_doARXz|2+ZAMZM3zDynRd521#oP9J$2aDILr@)?hw9iCEQ04z z2T}Zg&3>wYvH_-sx5$^6%DIdL7=f5RGB=d)Slt8qN}&o~lCxnIo41HPKYlmiQK zVK7d?y;vPURcf4!smd4E>>dvrhVsI3~q&l}-x?8}Ys zP;(XG@8_Kpe_~xV7}MlCVhQrQup)lP=2$V7pBKsXSeg7k7={I7n|f{0`}==eNv!9> zTU>%m)H%`+ zbsjW9eVDaR=lXd^V|NNpQ!o^@+G_^+d0&r*qP}pw#}j{C6yM#^YLRuuJs@)!jhpgx?M zV@w=?YG)KG64Pvc0jl0=Oo4~2_mJ;`uJfIQZcH3(I*<<4Kqk~&=SIzCY1Bw6pgtX| zq3U(C_OcGLjz--#6_emB48%>ScFv>s@BdyUp$FZy6<(vJA|S+!G>tXbngvgDJvXWY zQ9{lAaZw!$L`AZIwInKHl~C>0L_MzsdjI}scM|%lG!DaXA*z8BsEQX+bNT=^cOOs( zOXM(VGo$+XkgItIPJ|2L0>dbSDmfc>b@okmT~1=L9I zphoxxVj8ID@i^H3e!oSFTv?eP}{8u1wn#;d4< z#W&o{RS2p>Sx_CwiE5|{>d0+{s=o;psjFBTpP|~%p2d{sw^l?Q#f`JD|Fs_nP@oRX zME!)a2o;eXsBQ8WY6Ryo5T9aN^v`NK7>;^SPE^}womOl0b!rmhic zDmtJd)CU!j@u;JHAu3XLY`GgXuh||+Q8#2qg}N;29H?aT6HzDFG*m=pp+2mZVkz{^ z=jZ)R>ay66{BQUxrpxc={Y10^^`UkYTcKY8uN{~F-!4Dzt5y$G2ae%+yo1$nOF`42 zD22@8^0y|$C|pmCickid&x9Ir4r?h?yLC_pQ76=D zK@AFi#WHvqHKNodOoM4rbDIs-U>?*iD2(38hnj-gs86}psO|VGYUGnJEzU-rBYRLC zx!{se&mUtTenCAbMM<+-)1s!LAnNOPWmJeep&IUqTHOOt9iEDsni;4L%(2&3qB^+O z=1<$a`+$T(Q-!C7^1ep;=T{vr=2DM%so_=pPfp5~5QYz=)fv4uG2v~=k0kw86?uK& zqW+v$uf?SMqA$H1?v?P9cO>>-bSfw3J%e{N4T)C)Dk;2r#iZd#JnS8YkpG2-`cSu_ zZCG`*NdM#dbsWj{^t5xHHdgYUOMWxgiZh6ITpz=IH@UwZ<@)~NozHowP?5@n?Q? zQ~u+1nhvjDkc z!6MWv#6y0(nvjo1hYI6(>h{I4bhI4xW1wC;DCajb`cUMT!BqZcAL8RD06SAYhC2N*F6~vPd_C!Tw)4G6 z>lofc-TwOTula89zgHL+%ks|5jl1d4B>RBYG@@60>d)YsUWtFYuPfJo;o1T2twZOw z*b$qW=70Gm2>Z`*ic&8PZy)M-@!v=$5$|SPKhFc(k{&`Mr)(pe?1Spt2Pd+f>Go6W zo48M(@7u6E_cph6R*prM8{kO8z$Q!IUka(|n}-@1K zwK0_4b9umzS3Wwij`sv^IAufqTEU&*eR7w32P-5u zgS_+Do7Z!nH~(L4uP*cOAFtX!J?Jm4*X6BkN%6MPkbL}Q_phw;wDdo*?V z6~DvpkR852J6-K4^|QfEuBReDfO|qn&%{^c|KnO4(uwWE`NJ0eV`av_nunFNz5c~M zwHy~OaPvO$iMT$E8|#r?OxX?c1-br>&eq`Jd`t6wY)egkC3WUeN3R<{MQ}A`MQG!h zy|#wy1?f~8EtaAr^eSdmIzJr>x0RLGcYxohtJlAjzozbS(iP}TIT}u>P;-4RZ@vUM zPstbNT19(LA3Ae`d)82Q2iM-yh9B2m{q5zJjK-e|H)(JSdA*KtV|CsqshpGRdhu&r z@BgB!Iye7AW3_mvr@W{x^5SO|XAtr`P3Ns0eLCt4)J6MhiPI=+L7naT{Qv*2SUfPk zz4-(cQ;?p>JDjv$CwX{t^3!`i*{do1F&I+3k;-2E# z{|l(duWy|sgrnKmSJP|6csbic^#Z z^wst^-sQP=+J?L@4e*Okej&{lNXn~GcLa5_(a=@uT;zR=vJSjo(Zrv0CNK38QU4z4 z+P0knwi8eF9Ic=T2&R%=6S?@tj&>joEvHg@uOh$Kp)r0N?{vXAsz#GBfKwje?{!fJ*DuAj?Y@W^O6~ZKK916REXdKb9h)F>9M@u z(7{f;4^vmKBwX*z11^(a$94V?#aThREoE_N=Q!7UQqP}ue|{z4`ViXH%gw>XD^z@B zD^=p+8yZVS-jDJJrk?k|X(&s}`x!U4q@G^lDD@Xn_dV~Eyo1Q=RTr~SpFiJnveB`B z$(JDA%?^?({P*8v&d}hmT>OQLF?mQ!>vo>3%*xP7pGec}QX^J|{h$MuVuB6l?O(JCtptqaV5c z<29UX?I|n5eYbevDlRmm?q14TU}xL0?Bw@zT|cJjm7V%W@eM}P_rHy{;$Ng!Qm9u- z>pon~C~k1=cN!{bN0gV2wB;S0_kWa!(ncrLs{#*CKsu_eJDGv}&GnJARgvp`XloPs zN7VDif0o1r+lhrV7+}+CY?E#DBX#uRmml7%3dW?NAFsnUtZBG^y-lyA&Uo@KsCSn( z14!$2fHqf?&Jo%B<3&@b|9!}XepKGgjjgCqn0#aM+qiiIqv4Niy?^0Mb$4+68Q1@_ zjc&x*QKmH8oOnu?%~9PG+_r=PPoytZxor}*q`EKf!8CuGvUJpGif{2Z%46|}d0f+L zC(Xs9T(A7J(}wh9(wQj#oAj@gHMEabonI+ygAHh>w$8OiJn*({OcloQpdYV&Kb60v zUL$S}W<=R| z?ITq(Qluj&t3Y}@=^w9N zBodMDMfo1m^LYEaG?0wKEWDH1-rcbgNW}v?lK!2B`FD_=hWOcbqJpjSnftr**6TbC zU!vndHounqBbzogICM!AO&No=RzHtT+X+dB9cMi3M~hIyd*^T4~-zsa%ok zdd;w%NJn}m^;6o1R3YD=Isw$pL7fS-J(2e{%4+=7kuH>#p#5?BWp8FG@>^aej}2fS za09pTUPj|bDgVxO{+z`*&W*b;Ha9;et=D(n=e!j2PTjY(mxXKdZP`cC1!$)u_ci^g z6T19cROWvW7sv9jXPDaFRFm{b+Zh$D{G1K^xsEPfneLJmiCI{5RVHWdkYiOWoGgbyIL5C5^~oZ8c?rFG?0n+8p=!YZq7Bm`r8gHMmvq`i@DA}7VrH6 zUUf&)srI?q+?TR7bv< z9)R(AC*b|#wV(3RJp43ehe@CMsiQyYOriWc?-jIroa>j+?aEEf=-qI7tygx^GwH}e zl~Xw}m2y$mgN7SpM#^?#DA)BG&wbY^<1cVHv#}TNn3UI~{1Qg|Ut{MU*Ym-}@n1K$ zO*CUOx8I~>R6j*3*W^A@h$0mIm`SzzSv2Gpav3I)>vG$e>tZ#RtjTq3vDvWAExeis zV;+n><9VN7=ex(tU(b2HPUoD@`JB%=-(Qd4OXXQ;)uK0vg-i4(eo|qYOg=^4|GTol zhvEocP9DzCO$etEGHf!-ZXno}BZ{8GrSAcD1?(Qahg|Fc3&r?{Kc?5gPT~R7_t99T zz3U?vTf8KO}?Y3mCe{0hIwA5nM|h41Sy1 z0v^P&4;l7nuz>t5eK$Qe44yA8#xDRc)rB(*&!z6q%u?bt_+stR+s52AJRa^NJYzKr zSCQ<5a0tRZhQ+p$k0X!LC+vgBD)1EQOky==*08`vU4vdISeQOx4zV}*br!vfjx+fT zT)v1G0xKgvrZy~qW6I?HzavOx2&aq=@ogneMo{bo;x~w;@V>>5al{$oMtis7 z!^d#?F=wXiK;KMW3>H9)X8BTFY#f>~;9@7_>zZ+pBe-T6xeKBPbm`&>j_GAEu|Wvk zqt^%CBxVxHA81ed?Wp^KPbGFEw&v9dM7Nx{Ul;xY&j~CO7qh?qfd~gcxK@GLe}Gm6 z;VCStPOr1#v&fs_so-Mu5E)*PnnGE49G^k|0t=7fVlNXvCe|i)L34rh*maUPyb}A{ zk{GrD;a$|%iGL!L|J>8rsMkZ3SL`VHMtWsDshB6RtLDDUJFs9JJh9%?>);!9kh(v9 zi~h4p_UGqIJ-QnZXrv2QLzoI-IquI>R!8t_`mLzz6X&bi0PtaO=MZ1C_raX;G#ZQG zxbf=LL_d#X9H=ee)8%Oz&{)TkQu1f`OXR~;t)&Wo3T_zx=F+qYPF3PeX2nL~t;okB z?yawcy}^eE`t)a6x*5(?X5S=#4b2RzHe&%+a@}D>KSn@)lE0Doj*86&-^@TZxD|oR zaQBlpV=j%lr|8hHjjv*+n0gOTO>##)lG3yUoi+L@2iyPt4=@6Os|-{|Y#p`OZ;+OQ z&DH}x&>=6lVpphVX)bj~mK==z}uqjSB1}iPaTK?IL`HT zA$t;ssCXOl2@G$bUl(k;KFu8JqdL2cT&$d)Uqx#FZyNta?a6Etu+_vgv<>s1w@}^^ zudtv6O*3Nrsu8;-=#rZVze@fNeG}0E?lgRaz8Vvl8H&bv=I(*N58s>KP1RX$Y$Fa) zY$jSR@D8GvaYrv-z;IItixFE0=AjD~LAJ8Q1zhYg?oKVXkKRMLcl6joW+qTa;5)!- zP=}$p8(talD%etHFXA20n=XI;{{?A|iibnmhF=GJNc<9^Tyn949N1kK`BJx{SBUT? z#BPy`{X`r?eHMH<^I^=0)duTM9tT!LJ&=9`nEn0lE(@Ac6ywH^nPx-$3X<4%M4OP` zrk{yO5BNLjPvIC}dWWgkDz_$hJ@B82(Tc_D!)595?}Gn|&T8tn>|gn^Bwm{vh+om% ztV2!6UBP0AXISRw!gp@!1lhp(En+9|dGz)X_rPC4jH6zPZXYh%NiG(K z-Zo~ObuJ0bzvTA`kDz&+!XL6&LzXOOxERa@@-^_=ShZ=t;q4ijswJKQ;D1HBmeb8lD{fER>r9IzLWy)+KuQF`$}`UTXB5vxT12zg}= zokJa_ON*#`GM`8923jjvbPg<*yf^*>8b8tZAm%amiG1BRm_|HtGhU8&gdjE&57qoS z_$2CA7_=fNRz$vszALdN8s|779MNdFJBXLyIn$5hh$E^abC>B=l?1at{|pAaDr)=3 zB80vsTcL}LRwe3N2sz;c06pPdX0cczF=W+yeQ&&ti(xkY?e%Ab3GMOq{Re*$jN52g>kF#U)SHWBTeV)t}|v!RMoqsJ-pv zVpa7h$)~{EAv5y&k5+;|13e%eW!Z1!uDB;ev1m9Qse22DIt9)f2zcRjIcN<}XxLTi z7R+6R^E3V-vm3!iGn+%S;bP6;Wb|jDRS)=_=tP~5s2P8x#4L#2!B^m7Z&PojpQ!!E zEI$Tb4rW*ooH5!Tq{sC{-(5MM5u4h7pEwhq5T0_W4WCCni)bZ&fJiu3chUn(z{R%e zA$!0()4xJo!?M@FzeTGxoFKSv%FCj5LrcsL>~k;*anjA^i$r zB*Izr#r~EB#L@Jt>mi5em(tJDC%r?z9{p#`H^jH2@eTD^<&&Cf!=J|7e2Ojd=YK5C zt`OVP@C6K_*^p};@E~x*#=;fz21{V!hvco8{hipF*-^OI-)N*VYlG*b^SOGU^k1eo zPw|X%EW4=JH6|BZOmxH#k*}gRg5jTaxt+j=^DoqARInFEyls$(f1z{fIc^lZB=oLU zaP03trs;aXeHD>jETm5v^prz*BEy=pV46OufnBFx8SE7UAZ`SE%4{TFU-1PzxncS2 zdP_e4OLgf?h|lo4T3;d;`qOR_&{Agki3!RSu8t>cQT%o+1)%;5LguXMKrz8 z5DVdmHq7n8kICm>>~uviwSe>|`Eu|w2D8ha2tR{7k+={SyMz~TnEmx{Cj$`uxmL_o;b7Uf)80(3MLk*f`xD+sq5g;PV$%0jJ{CAX|JJGgV9o@+Q%3VMY1kF z2)XX`tLgI;fjz-X;Ou9%jM$afoI8J$VQiUl(}|tvAIHnVYqO&!T3Ci@H^pZR`A7po zW9q{QiG44}G3-SDJUy|-_(6BxX;bxfM5T8@UC)E8jxw!c&Mfskq40 zU6+5v;>Y+?6^XL^Uj+Y_yp>F1 z=&X{X0Mp4!@HBF}!C8P{t{zyR_!@A-F6xq906pLi*JH;slLqe>>R5W~h}(%(*g26I z`&$XMDVMAE;pGs%XTXOgzmtnyfmoehGQt76yef5DdR@R~=u;QNPq0t???XQhaDgi} z5$;E5y@@vfKPCS(ZXCm>a38!H9>?+sh=YmWQvZTmS=tax>@CE$Rivgf^qf`vJ+LqE z5HNSegjNTgclAM55a*)xJ^fzbelA`3DXXxsku-d`Y90b3Stbv9kh}@x9>iCPCy9oo zkhh{(;+(&|&{m~|)n*%$I6BoFmtr+1CfUrXanvxioU`|a= zN=nE%?daGqKe4#^WcRp<)|Av>vq!wIN4%-GQKkNqhWUo%G@s#^R^ZyvVZ-N@V#fQm zwD=e7y64c+iNa#(>|b!{-wtb?y~6tr@D5F}#@WUsC3<&>vsr`9eilD}Z%Zq0OMuxD z80;6&+!AQ96ij~X5LvZd==hWrYog5@(x<;U)wn%A>G{*m<5PJeb6nyJ*ZUN3e$3SW i=kx+jPcPJ~bGX`EP}0_^j&XVpr`Id^ql42#=l=q|l3=j_ diff --git a/resources/i18n/es/BambuStudio.mo b/resources/i18n/es/BambuStudio.mo index 865791d02c4589ec65da7cfbc9c6c3f905861577..2064891364d7b479669eb3de3c50918786025301 100644 GIT binary patch delta 47633 zcmY)11#}fh!^ZJVE)d*Zg9QziKyXM1uEE{iA-FB>TAU)KxU{$wcZ!taTHK*{X^VgV zXJ>lO``vTy`Xi`948EGVi_EV-0mF5K6nBBu+lEa3CAi}4ku$y$8nvr1oDya z0ezTrx8uacyjT#!unKmvH zerF4T01|%3gm?wjfJdl;-e64pWcAx?DhxoSC%2|W^*j&MxzQGfCX?6PQrCq2gCL|P83eUGI$d;Of9&}R>I6y!{cp24@`>_jheE-sEWs; z%9)Ak$Rc}v9VQ~a9hL9cVb>IRfdnmzho}PoMiubQW{h*haXJ%EiK=)6YHDU%*IM_Z zM&=?a-(%Dw{e&8+6h}?@8Bp;cmw+q^5 zeIro$CZTrEW>ilfSl?K`qDInZfx6q$P0`Hg^v>>B38KQRxcIAyj`IO>Kys0JQE zjo3x3gikOF7CddP*G2WbE!M<2s1bdHy6-iroEX13PIWagIf3{jw8psD!#W7#5g&uG zaRw^i0vlh2S~DB5G#S0GrjlEF~pM+}gT-01Ix9QtaQ+o*A%>>>NP)}B#HAm zFg+=Z>OpbTs;`5Iu@?s6NGyYEa2P&Ct^SS|%>i``qlrJlJlOb>IU&d5c;ZPfn-TdQ zlM`Qkneo@0?> zuQzHWMxu`RMJ|Ei1X5i!J(`Cj6u-uB;(XkKGp{>NSFCu$^l&ToBA)XPb0jao(Zmzo zH1SzDl6ah3EMT0BT8v3=o86KQ)eyHd0rk8QY9zW~LhOfHY-3PsVKQoD)}a>He$;)Z zFcscJP2GD`zJzzon#h7Gub7QjLY)IGkn&xp9RUqpS5(16aR*L7t?uxnbU zg=0_^%tp=iQq%}+MV+LlQA2yr`UN#2sqdTn@}kNwiYchysZ3xUwm=PGya(onY^Z{Y zqIy^db-gjB!Dv(ir=V8zLhB|}Lyn;;{sT2tuQ4b3KjhJkdC<*5;0%G3_y#j$>_?`; z+^8NFM6KdT)M}4HO+^dTqU?mZ@G?fB^Vn?D+E|?Ecc}Y+!&rD7W8mG#jK7BT5ef2d zR6}Atah&Ox0SDsGs3Fh!)SL^Us2)yRK>GVJzI&f@h1$x?YIW_p{AnapQb@W zupaS|E`e$UuA*9${RJx&8(|@whQ;s@7QxS`ibGzSct_OSFF_r>TT%C)!;%>A%1mh_ zY9!jDMy4w!M0cFMFbBtxun^;6w%4Yj0;nFgLp7)$ro%O;0*|5!I)(A^y7jS5{|hxT zzBk6Wn22~1WGY-IGXb?c6jg8(X2)(A2WO)8@gmfsS&fzPC)6|I9~)2c*7U3eDt!=Y zG0(#axC=E>e(%igNQnX3|9J^y*iic4{eHnG%8|!D(eF5*euKk}#0nCkRd3jV%+n`3IBdXxhm=ot<5bnnk_y{#p zS^hTn8p?}Q}7|YQ|`Xg+C&roZl$_LZY2B>)N4~)OIi%UWd9FIDXHlliT!Fm%lgpW~+ z^DS!8eZ@|g;G-GR{-}aoRD&j?I(J+FqU zs1B-OO|dTaz*BexH3if8QB)0Bh#JA=I0*OPYz*`B^L}jq4V5pozn}MWLLh2;*TmY? z@AM_mn1o-kC1&;cd2>4&wd!Z$5nO?q!_F~G0i*CI;%l%tHi&7`zr$O^ccP|nZY)2q z=RcxGbPGb_5-BA?}L$!1|YEHLXPofT%TNsE=Y;!#`YEc$OE#62} zIW}R|R>d|r9<^BhL}tkeiRb5i_fsUk zpZ6oyFzm+lGpLG6Ch+qfQWa4R9)en9D^U&Df*P443H)3yaG8WmBs{^~7(1b9Pzb7L z5vavj$;O+YR(UIHKh%g#!XR9V8i8N!_1{tDKd|XB68U-CFkT|p3`G?Z@{l1Kb>kA$ zl&rMzZKz$b2eq1yqUQKF8^403iQh(@6B!fxIguES8sV|1a_89iBGg*=$t9p6JB9`E z9O~rqB{4ltV$Fscx-e9Ml`su9#Prx3b<#~k-MK{>yaR;j6-%$;Eiki!hsE))>W=19zs-c-t=>=_iNz_PIK&I4n zY7)>;w?^I23pKPOYWK~2GPR6}zo_wzomL|_E*z8Hu*QETBE zw%7juK%g)QEmN4D&cPhS*I`?{fLeS-Q~EhIuqu|p1=ts_V}7ia$~0s+rX#)xOW-f4 zj=e_>eazIRgBj8L`9CKC?e8M?LIi3qtD#nZ8+*MI>WuGe)90f`VhL)*R-=Y`GpfA3 zI0#Q*4~$G>MsO=?%8sJ<{ofUP;RTN4!dKMd8JpJZ|Ml31c;a+sZH&RL#OI?%CRTdW zur#QGOQE)7P1OExhy8FG4#8L%%t(*Q!2Z`<%p*ZP*oms>5b7ih%jo9>V@b@0ol!$M z&AJ4YZv$S!t*DWkn8`d#mZHk_4>XH5J}Q3@YAxjnWdCc(N|K=cSrN4xYM^#QQ`B7c z$N4xDRY7oOQ$Qpte?8Q>&<68i7khmHs^RO}SH~=%_ zBHW7mQB%<;8$(Y43sCW&v-|O=w4V#N!k&@hB`rd>(4soWd%YsUSm1$(>OR=@;VX zY{sRiitC1&k?4r(NH5eH8-Uur^H3waA(Z{EZLp67jlcy|Pw(Owe1n?n{)J7x@u(?U zggO^CVj!MIRrCTU;9sbG!-|+yKLb_HGE@V%qDJCZmw*<R=b!wmQsb%e$YGpjot zs-Yp)N*GAI8LGfxs9o?K=EJp^9j~FD|KBhaGZr-`Y8@<0+#NwcJ>G%ZCdX0x^t_Ef zK(+i8YUrF|X6RC(8W@DSuOzA=6;UJ81XWId)JZx4RnBtM0k;jg-*v7K(CU7H>fuKW z#ze(UMWrx|cr_azjVfp+>Ks^(x_`a(7o1J}7^=LcCCte7!h*zIREIaA_w)Zjo8g4@ z3Tnt6qB6!PY34FHYJ25C^{4=<0afkwI#_^sd(@(wi<;v@sQZqi*2G!VF1e51{(nJW z9SNUNYhiUMbC7IB^=ubvD37Ct`kGCDfEw~QHXgIIsW>Sry%Z{c6l!rcMXj+mHoX_R zYT*z9YS9Q(MU&85<)|As+Uq+|Jw9mTCs6lau<@&?3h$vt?gi$+FIW__moba9Ij$t$ zuMGQNM`wnz=Ekz9#Z%SV0d+u)LLIdWF&iGR=?_th@GEMFlZTrgWE3<$Kg3j_Z~)JxqtXF%&g~l~6-l2Q@VfQ72Yw)YSAsRX7@T-z-#vR-^9Uh!Cy5X4hsWpBjlb#k;pdn#12vLwf-=)YonN0cvqQM-8>Fs)+}n%FBe> zP5H4IRz;2Q8q^5vLsuDY5zw~!h#HAZ)%={#7=gN>Om*{6s*73+y-^JsgIW`lQ4LvO z-E2K+uirzB%xhGK;?*!~B1sMQzgBO05>#LT)IJVFeHJW>>TzS#(6>bu5RKX$18w>+ z)X6!;Iv@3rS%F&p$5Ht&+UwVFHt~lw*#F8fxTaYg3++O6RY z)$lp$#-er1wkn5OY#mS|(I2zpbX1SGqw?=Zot!5z7sjaTrMpf(0-AzisFqbg9i6pM zJ#3F^NO#m4iAGg42-TyRs0J)Sjlc#B#J#ABZ($C6it0d;dVbz7p)|)Q+W$Wi7|n%A z^-Tqd8yHieR(nQN1qD$BhTC{G97Vh-D&HLp!FL#eIU1UVbVfCF5~_i7Q6szpi)sJw zAfPFDV@=%140(Q3j|*W>EQY#qEtbSRHvR#%$l^6NrpM02gHb)7hgv%aPz||=8reJO zYUrO3knb@N{hOE`XGLWUK}}5wR6*rY4QYgVu?x1wd8m>4glc%arsmv8iZzKBz)&1+ z)3-Hc{|Aw9frJ|P5d*PuGc)I%Q4Q;XI+%u_da%T%uR}Ftr}d=u4}1M3D*q?c6a_Rl z`O~60lD9egUo9?6f)1EkSOi<3w%;7oQMnFv!zt8=+(xbL$CwRYqk5d8g`EP_hy|lM z5Qe%Qi8{cl+Vm*b2AZQ<*aekw7;3SNLCx)SR8N=M_!i7b{0ORnFHj9j(9$$41*$_C zQHw4Zwe3pS^meEbb^8!d&*s{Mb*L7eLEU%}buQdP_4q4lWCB{5DN2uOU}hYKg-~l@ zlhXb8NY>iVIZ8Zx8#B_+QRRF>>T#VIZOw(asDjg?D$b8;NGa41mP7pzSqt?OQa8+p zlTeFr7i!2KqbhiV8j+7y|8}OMaZzg`BYNNe=O&OT`%rWC8*1At_s(2~t>ADHEZO@_>b=JY!rtH5?1XR&D>rB*8E-+l_WETTe~em;uWb5f)EY@J#C$@^g(|N)Y6P33I@Alj@Bar7(A*T)wFy~UL%#@B;WF!HR6`D0&!HCWUDV0>3iYu0h#J8R>^kMo?y~K=OZ!ru*hnsVtD{3lc59fk< zxS9ktU=M0797grI=0y#0any}vQ6m=kyej%WY$5C@~9yJ0FQQPQ?ji(u7hO8iJ%ED1UP}H+dv*{?R0pP`kNTbE1hlwTqbmFrHKbQjbN>)^vc0p{zo2)(j5qmmp(-qb!B`7b z-Z0eEF2+H)1#4lx3FhYq7hTQ89s+9V8C1nrP;>pj`V3XUYgA9;PBab3j%si?YUH9& z<#j?ed@yPXCZIkMO~rh;9#zkciR^zB{DcI}k^dw!Gzn2RWI;_uS=8F-jLJV0H3f4~ zXZu#vYQKQmwx3WV5qGlrxuPg)v5v!vI2G05%ahsvy5Tknhw&vUzIlpS69-W}xQc4X zP1MK)Of?NjV9kNb7mm8W0;)sxum!fl(RdIm_;G!j`HE+XJKYp`A2r8MQ6D7Up&mN9 zXPESIr~<2FF>GYxGf|6c33?|YYG`-jP&{hW%YA32sxB&DTWpSQUjn+}BC2P1(R(;x z9^zk7+cWn}b7Nujj%ut)dUaI87okRA6>5ssqbfRvmGBBiW8f^ahGtP;pbnH*)|hilN7A9n%W32JFp78yRD-7A5?qXVwf{@c z^>dn#&;>*AIBI`>!qS*%p4m<{us`wcsBQHKHA0_I1?QM=dR7#36R(4XaTqSdt>~SY z3rt5FVl3)+S}K4YP;=ZJ*Ww^lPqKe+hBOc6Cte=4y8B{2T!wk^JodqFs0Q^}Xcprb zJVtyLs=OwP%qO5$=xVjDBA|V|9knfvq4x3bsI_qy)svT~o@HBXMyMugTed;v?}w^* zJgP(UQETD{tc)wLH@-rxsn$!_|Ei$d5|eQdYCpTExn7KF(0c1OR1fwcopFxfUE-~l znkg#xqZyet7)kmJtdEy%dhjwc^i5D5ZnMla6-ASvmXAR7LktNt~7I79JTH0qDG(#2I52v!gZ({ z&fEA4)H5LYDs%D`KsCG}YH@Z(ji8I#B~wsqW|@tj!;-rGm_SVe*;e~G6R{8KhHt0} zQ>-x!D}ZWPMJ$8uQEOr)>g@jmyW(G{id(HUL)-)P5zWOw{1G)0hmp1CIxh(5Bh+Wq zjo(naAi+A*qco_qJ`bv4l~DPbqeiSNYB7yMogY(CLq7*2a1Cl(|A}E3xZbRZhFDMg ze*=MGT!{IT*{7rN2jZE3_H&lvACcpX1EI0mNhO;JaWy4j|NGKC#pM`psk1)V2ME{hy7%0s>l<`%!cJ3N>U2 zcbRXuA~2MA2P}dMF*{zsllTGm;E~J;hPdFzJ#Hea-W|wm+Mvco9_+oqspmq zfc-z1z?cJm-Y=Q@9W+B!9~+Ur5To#Kn_lUV`MG{7wkG`s7RAzs%@p)U?UrL$4PRhs zEPlk#`!)Q5xPW-pqvq4{zN74atVC(KZEK`n|O@dvzvOK`+V^Pw~IDL-c? z@hVsreW%SXh{QO=YomJF6x-tWs5RvLX70<44T#=Hll~3M5I=C<6y#hm|EyjHHRQce73{;`@e97h-!7WphTC(=r2mU7 zQkVba${ZBoSIjdY3KMZdebg5c?Xf(rMfLPGY6w4~9xm0cnrA{3`V((}Iu9D7o*nH_ zM|F2pgIv_2uX#-;CHt=rfgB`EKwa46U0|D`w%v17MX9fw24t}2KowjNb?`)>538V# z<{I{TXH-K5qn@^-QAhMl^#1#w)dW<~K1_zc+xUIdN%)sdcW#)+adOmR&5RnU5R8fC zP~}ucosf-DBhe96PBf|^E@}~vN4ErlQv@`$0e_eRl3*<2Sx}$la$$TdhbpKRDt}WO zZ;#5?8+BAqwyr@v8;+swyM=1NGt~X>{$T&B2VY3g5GS~4dXg0N@JVgsA*dURp>B+@ zRzuxaA5&u!48%UD5t)sen(tBdEW^yW1vNsKZnFQ?)B85VGgSN|YO(m;G8LXf6>tO9 zu;-`-#ky@wgt{*^YK}9Z^5;X1Olj0ZsUhaUE~xwGx&)N*2h`keM78V)YSo{&@zi(x zoL0nxQ2EBA7STeigPX7-#=L9RMs;foRK8xQhK)s)KN~f2?lJBs-Pg$!BP^r!I^+s{Toq7=pj@EpKW@K2j+T8)KQ!hwH+&<8qgZGD7#=n?f+2( zv`xN4^PdDL8!&$qIx(1H8OKh z+iM}Jr^~F{P(3=1+GaOVC*VJ*IgkC;RG1All3}Rw%Am?AuP+8QSybS*V`QNA2?; zP}^@S>gjd_Rnc+lb<}+?P;>m&rpNosRFDzXkYLn^lt$Ip7;~fBm4GUoYh8?bimkA& zK~?+{Y6v%?D%^>>Z?BCXv7WH$XHdK35@y3&SPp&f&D2)J1=|0031}!@p<4D8D`Mim zO-~!5u6IF=$RJe3Q;|*L%(m%sQB$`LmH&6tZn%Z2IPE{CBh69QTVYIX*q#JbU_aDq z9g13f<55FD8}(FMf!cnDP(3?~Iv=i~&W+Eg1}6L0G&~1taTZ6dom!|xS|8QXo|sAd zeTW|vIM-6f1&*le{s;K?H5Vd$dq0Wz>FQ$R@QH!%N7RPQF zg{x6h@DW3>^jEVOdw*sBtA$fZ&^B9y>ftuj_B)Jv7TiUR%xBcl#r$USr$UWfe$+^W zq4HHkl~c>co1><<18Tc>xA9TmT(g=dlAs%=;Tl|o>Ul*bz#9S7s;`RPT%sCMAGKyW zqB;6PQaBXbqt1y3=$*7*2vi^;Af~^!>T6h=U`EnA zVlSN86X5Tyh2*Fy%7K|MzqKaPaM$T!0*;H?KGRTB zu?#iDo9y+&sO@tBmG1>=+xf*d4M>f;FW6cFH8PcP8a6`p{3+@r^pB%B`!6E_C4^xR z)Ita1IlPf}%3`TOGloQ%D-|6}s2 z?CR+N%!?DT6z)LX@ZK6XzKLf-^*j_cq*ZNt7u1>=j$wGz#=oGpUqk|b??=3`c!qeb zg#L~jOdwMtfA8P(tE1vOaRffXK<%;5yoHkyGN+Igskti}SkAB*B^oQt`Vn2|e( z8sU?uk$r?c(Mjs>dIw0aq~^j>EKB-sjKa^T1F1$bv%MOl=CC(*!%3*s{sA@gv6Gty zr9+KeA=Fx_h|1Rl)q&2a6Sh}!*R1|=Bxs1vU??U{VR~E(^HvO25KSVv=KVveD zL7YIdPcxwAxHzh(4N*_IUZ{c=qNZpI&cmy?RM#{6d%w+|EQ`PQ)ZB$N{g~sd{`x~0 z&a7-EeMok5=En*$yJJ3%&>R%ZVUE--xR7{QPJicTyoft-R4&uvlDW;nQWb^lYHB{Ac0r0fX5_M=s~#64pebm8I5ZP6R5d< zZhebd%^y$=NR-##`$GePsMY=vx1bYjj^?eX1|C99-Nj(`za9=xNsw<)bNs;?C!Z-e z4eEMsRL=^b9x^3R51k4&UJKRJCa8+~qSnGV8=s82Z!v00*W`1}4F^cjoL@(c#5+_$ zDe{|xB|mD>M4)c0iF)3*#|tc{ctEby9^FHa)3st%sV!X4c-QPs8JI5w69_SgD8^xl5=Kxrb_4 ztT2E5f3=ESL}MYID0aWAUETUZ0%VIPbr>hJx$umjbRZ>Yssw3z8} zWz$Vh#1h1RK~?-7wH7|3R(F~* zCOr@8oG66aJruN#$>1l zq(NN|L@lZUsKpwITEy+KAdW>XvYi+o523cy`|9~0B!4X9mmpprSmucKD=Q`D~Tt8C^vB?c1DYva{XL*E9~ShR2p%zy$)b?qF6>&N0g!~gLVcZ&K1nZ#6 zYlLb*JIsaAs71R7LvRyj(*A!)Ko!TVX+|Oy>eFg|)Z(g&>ggbCfTL{s4b+(*x0b0W zJ8Bn&pc-5O)sgn7`v;>&aen3 zh+4geuqD1gt&tiH{GE|_6jec`hUT1Tgs+HqLXAYDM&^j`j#r7#X~h1oPM}9)^LX5g zA*}WX7?rh z7}+eX&D8a2lnS$!^3e?cvu;~v_i|#XOq;hmHBajb6iFZe> zp=GEO?hWc8^#PSXPDeAMiBZ?nqSjUx^nU+8m_RrQMNkLB0Mrn!M=hGTolJu=qI#AC zwKl?0Pq&s>9J`_R|7z5l+KuY@1=J#ZX49R{=95rr%%}Zdl7I^Cg5J@JT0C=6ADMnZ z9j!Mp2%Rpb0Xa|=RzT%%geqq+=D^vgiua<Fc@96G=hK*kjAJvZjb7D zf7DP-vd%$G%~I4FSc_`FepLSRsQiymJ%3}voRQdw(&o#?@>dZFxuqHiF(+CqgHzt)X4TiP2EtNz8tm9 z*SZ8WBwJA#_o5cn37md> zN>tB-k%F8E)b6Q_+BHp34RrBGT#2f<@-TCMD@>y2{{RA-i-{P9vuuXb7()C$*7c(Y ztd-`(yAC&B*`7jGTwsJb)5A~|cf=<+8MPMrj^vXS_b)+}_wOiw=O4^FntHYWvyCx5 z%ZD1eP)vX&QM;oGYHjpG?cb58Rs9oIz_X~Hry6UvVJ_6jmBKez9kqDNj5GPVp{~2= z{r>MXdtoW62U}1Lxq{lqw^8T9->9=YV7w_XJ8JFJL2cWysFQFd>fpJHs^}loR0T{h zBc0wFG=crE3JQ>r7AvB*TWi!@4@Mm*BT!Q`88zf{tcy?;EJy8{t*D9)q8fS`_u*ft z4sDreuJ1-o#o39>saAQ6Nv6VLsElRMhZU_=Q5DogjYLyxH&lhgP>zS1E&p9erKS8a9*b9s)tXWX|JwNKeYJ^&ZeNj_46Sc^HLT$%iF+KG=e-ls-lYMWF z%)%H&ydUOQM%4EJ|6&A&E;Jul`lA~13u5-_O)QaQ}Y$ITM{oZ zBc6Q;`(N85m;~KW3io0y%z_DjFjG(vwdyOO8a4>EE2g3vFw?pm^+{(ND&GUtb~@-DGEV#I07|QwOs-ln%)?WqftY740Xc;)P8=4+I}Cb{>x1d;-LymftteX zsONe(>b~Zv6SOVr{vN0`GXT{wcMJhlG#ORU_oz8qhaq?X>)>CgMN?^o`Np#)79}3K z(%jb#^AjJ6n!2CRTRW(S*n8ADl6jR$uYok!b)pHVh0{F_Yu|bHB zMj#S(V=Gh-UDP5wiaNMXqDJsM`r}Ph1MZ-v^eO7Z{DA6U()FgpxzSa{r3q;0tKblf zLaqKYsPo}Gsv&o<4}QVi*!w4c=Q1urog00AHU-bLu0l=KZtHpLQ>(MVKL1l~Fd6e< z4sIxq1+W`t#l@(_a|pGVUSTMv+i0e!mbI7lJL?t<_hYD0i#+9KV|HukX7;}>lp{e$ zV{L0k>oDsqEXVb=sI~Ia>c7RrQ(ALld#;y8jpz#0He8Q7A2y?=<|t}J&$t9M)Xz~v z`UiQWbFD{4*bMI9IyP`lwKsz=XJJ^F|mnXjmA7ITlO zC?nP+UJBLFDOe4cqmJM=SfBcxuLM+Jy}f4fv_&=O6l!GNpsxGvGYw3PYDjw2Q0GSV ztOjb4bwf3HIO;r@h`n$MYDB+bAxyI0{`?aMfMUn0RKKL%jGA*KDhEBoraxPi%x) zkJ_KtQM+I{Y7V!d8hRQv61Pz!m-U$04V6(t-U-#?t~eN@QAh79)O`WRO}wgW18q=G ztHG!vcsAz2q`#VsrBOpxA2p<{Q4Q;C9gG_K$*7)hL`~sQ)D&JqZP)v#5%--iKRdc9 z2xxIMMcr@)HJ7(g1wO&182_aCJl_d}iLb(fcnLLP0jJC-r&bt~_+r$eU5?s*TTl)8 z!=^t&rp9$X5YUmD^t2h;AXLwap&C>Lb@DYv4Pjr@BASA_Z>_z)4~r4MhRT=hH?x@Y zpc>i`wKgWAIyloyXa6m-7k)?0?NwAupIbkm<}%=nIk^&|8kh_Wl+fB)k#0o{<`cT-?`)MCqtnyWHc0HaU^j6@yDb5RxV!VtWG zUPI5Cr(#0X$mK_sSH;F#p&B{_-5>%Z37p3@*iRSEA=~R6`mpl_Q&IPerh(&719HHHP9TERW80vl}X)w(%(JjvFu#Gu|-Q%eVwIH$$)l z&P1)=-%+ddF=}Yvpn8_z4|9^GM(yY9s1YiUS}QeBL);QIvZGO-9ZzET%jzX7Lo09ARZq1y;OchO7}*B7PLL$P(T)QWj#3_=xzi7wmsk{L@P_LP{_@Cwyazb|Hr(x4ig1(h!nU45XaMnJYg%~d~C#UoKYn~ADu6>3gT zp(=Qc%J%{Fkcs=%Oi4~u{&J}8+W|EKQ&IJ-z^b_GEBn6&fmq*6!SzrD^+GMCX{ZY3 zpc=Lc)q^dlHE;>F`d?uljL#2bMX)Gp=zE|>ZVZ;d%~$|mqNXU5pX>9!RI23XbIOu1 z40XirM=hRPsGdGSt@4kkp7{KIUIWu&Vd9xlL)`$?!yc#xj7HtR05xUnQRN@C*B`h9 z)T586he~>%DXT0dG)?IYEHW`v6iF z)zI;%DO!nYzcBlz`Oi@0B#&o$p23s-SDb)`ssXCN=BPRBgI#a}&c*kVil)T(c|VM1 zPiQI_it)KV2DJ^p!|Zqubs)t~fvoX zif?WD&UB_h2T%vkZOo5})BC)i7s|Q>LP+R~!*C618|KVl=DsYRBwiaeG8r=ZynnyT zfhmdiLXFgT)b;tO#k&l(c6Oqs>Llt1mbjVB;wx`;TM$qW2BJn{1gd8XQQy-o!%Das z$Ke}P0|y40{4-GZug9FY71f}ds0O`6mG`gp8}c8@Ik7VP9Dn@>vtP6Lyr13tviZEH zUS6!n4V|$s9>7p6lHF9)1+`71F%eEc^>{w2;-4`S?#F?6+g@)JWENd_>qu;+=l>i6 zD(GL-P{+<;hV}xsApQ(>0#?ashH?bzq&sN6Y5jm&Y$jYauf)>%wsJY#aZSXW|^%f{#MxZBZO{~M#n7N?O z`x7gpaTDCnMNC26aTyr` z!_19GunzI3SRG3h^?CmfCX-Mj5?IXV{T~tbz&ymSVIz!L+~@sp+5#UCpNE>tp(T9Y zZ(Qzl3Fs`YQ_|=Cv-&>N!=_;=pEHAP@)|W%Bg>eUFGrnhh02<#8HR<4uSQMXEv$ea z?DewY=6val;iNCdf_Mk7qMI~=4-8cF90!o_rku~|L%ee&4xVa3$dY-$?NxS7xSm-KO{ks03HEaG$M>LAF}!W<|~F`W3%cm-c$ z7zO>>(kwcswU3`Bm;#)|_3CZRKEH=LFai@`BtsHtWJOg} z5|ytO>geu`dUi~(*H^d%^m+XkR15c`Dm;f8fjg)kyui5l0d)Yy=xo+PZPW-ZLEXO^ zHPpLMALWjqDtv}|$i?bn%1?6K&sWsv zgd|-}M^a)A;^|TOBCWMh_cyii4oJiK_kRLv=@8T${%9^ZS5XDrMfL0j=D}|^o~N7X zc_~znE1>e%LaqL$HoZf4Gj+XCQ#BTqZ>1;ue=`BKY#-_%If0tHyBLV?ZF1W4;F5tJvwADzL!zy* z4OSXs8nhmDPHeL7M~%#HsFApUTHM!ByWk}<0(}2F)*O*pP)BYgY6P02ZkT{7U=eC4 zmt!EVM=hq`Q2Y4-2IFhg&}JNG7IQIFL!vMTHn4FQ)9U#@hJfbo2h`JRA8Pepw7y17 zMf~xm;#{a6R6*U>235fbR71z1Ix-bC*Q?PV_uBLW*6SEw`~NQjSUkCt z3SfCuf&EasVJud}W5}*@5>7E|A~CAx*-#D5jcQmZ>i%%li5Z32u#HV0kJ=scFfT5f z!uHY-pCv(a`6sHyai^Na6Nsv)DC&mNs72WYb#Az*#kUF7fW4@xIf)v2ziDPlVxaDe zjhf2zsHrUJ641~@p<3J>)zceH)NUrV3gfkw7NnuH{e&-ZahoQQS4XSDTeSe}s|#l~ zOUn73yscFjuO0S!LXAJK^}MxP+n&sx_lml)*`&q2QI2dwps&`MOhJVg3K_{Yt_~GIXNS4O|HEvYP+d zO-1^zmiXI2PEPXuNS@VHw9ppF>FmwtFbcbD@2jc`cs(aA7x(D_H;sFaQ#pTu%Q;5+ z2JS27jR^ZM3yGiXP4`Jm!bQHIcJg3$u5BV5&P~0&8+eS8rdJHo3euoGmGpB|yv#PR zg)O8#Y01c|R}|rYct>%MUYyv@Ch|wvyf;j;6GElKY?_j;5T^g;m5stK)3bgQa*Cvn zy!n?H=P?C+<=u&EN3aFgdvL7*ZX#_m;j|RQaqb-B`VQWWxlgYvG)k{(*uyq%7x%2@ z`hDIHHUFdNWnA8T8gfRG@fW;HrdGUrbJI!u?=^_PV)Crv<}Fn8#a8f)`~7VNP02rm zYfw1g+se{ph$Nhdw~uf_D$9nKiEpIf*A#k+0%{Zfi~IF@k0g1&N0Nv9+sRXj1pckr zS%js@dx*4@R63LJa>B3F|Iq}>lkgq#hwZ%AEaI=pcuytrN`=u}uT5clNgvMjG{p6q zYH)hefPvgUlZGB7PfOb{d)ZmSy?hY%UiHbR<2TUz?{5k4U~-y~c#BN>+T|$~RHT5b zCcjgY0#^~E$KbK0&+WYR4<30EG!t6Hxa$EKW(wg#4 zX47Be9^&5mTTiCLBxK@dy;l8CPZS?$E8x#}IlJiDJMxucqz(~(LU1<`X~j2d7ID`726nqKM!zVi5kG za$aIu8rBup^G-^><>c|kKZ7kSqg6Lv;{9F$UIWNDpPQm_p)FYH(<$USl^*<``;=at z_@BIgAsl6|3!o?B#! zL)snEYVp2n3Ur>?n}^%@e`WC_pYw+N>qyAW{bjrh)c*sCpvx;|XyHkd! z|24>*%O>>4tHcxGWINRSN{7>kLgRDef3HDY+e$o=_fQ)7itCN3Br|!p5ROF|dJQ9f zjBqlp{b1{OLV8y6XzjWANjyrRJ%v=K(31AXHDq#$*Th_0o6K9UcI4IT4cC_P{_k~z zhJ;d95-R$IcVe5ri!E;|X%orZmAC#C^&oLxuJI0D zwB!1}#3StW2pUnwHmU&W7l}VLh3i)50{MD!ZyfRz=UTG=DOdG-uc=%}ZwqOJ32m!K zalAUl;3O@8-8W$GWGWZoQrzLq7@V;!XzopD3gfG~#SJ2omF7wdc zmMNNZ!z?oBC)i?KTTT2NHwD=S93@_lcs8yjr-0<7pQp0Qw$S-p*DD{_KND_Go>1Ny zxMw`+lL_nfj_a!1UBQJj1o#7{-m8Hv;1%YvL%x&>s&lmjm0cuXUh#cLn!-rQDge%<-fp;#xJ*rW5vFM%TH-g%ApB%f&c^_3CRIq3|6W&WDXCa4$EO z<~@UVAlEZ+?^oNH&8ARiB95XFHEHNilo_9R6Y_S#Ot_1*I$X==&;0*QBomeY_gYLP zYe<`D3vEos)TD)x=DmnV)0lP`Y|~zIT`#^ya#oUliuV=Lrs6CbGSrq|f;<(t_qYG* z)B3A#hdG)X;&Cx8tvpHPIk`EI0$-ALTc!WcYdhESlm7(QtCBvD{HMvclz3Z=!uFJt zo;-DIN78Z6Y_8qs{VVtAJ3`g({loJQHd6vxmXeGaX;cu`_(S#10}9h?BL(X9(%|&7 z_Z%kwc;3mmH-N$qa8F$FX0!R1<67<+&9#KQhmtoD@^YP{b|}_i1yWLRF%<>76!Ml# zNqO^&OwLu(j`2QVD-9)IYa2dc%P2{s%aE?uT>O*w1j_l%ROU3b>iQJkIr;me-fIX2 zwB!AhSXv5QLdNODuM_UcyOyn>0wXboLdWr*#rq8DHEbhP&~xq^M`LgBzRdOCxu&1{ z_1e$9b8G|J5I?OlZT-%2G6#@(B{#;!Xs(SR!zA8(C*fo#eGBRJ=;1D|>9v=h{r6hS z{VV^ASi6zdig!2eU(9{YFgXnv!21d1>D4?9h5SjutEos|!Bp{*&HrR4V-W8gy!Glx zzBjyG-UE0?Q0RZJa>V(b+Q~-VFT96PL6(4-Gv=psr`bGZ$sSC5?vXVfmshJ@#Pur2 zdl>0@J;!of-(%aTw0Pvzs~lx~<2v83I77LfnPwlO3#;%at~aLY-lRV!p4gOahPV?q zAP&hmfL&Ub5BRgti%mp z$(xn*^Y&Ve7}S6Ce+nx}c&jQ@fv8t%jN;vnLP}Ff46d!lR^%ULXG$u%;p;GLF>|Gm1~ zUMaqgbbS%`zpvc3F&`+bG7ag#o3F>b*8!|;8=!>4RQ}MGH{Ui|>33qW#a`K#6~)?I z4AYIapmTOEeWWemU6JdXY0P1=G$2oM-ot1}IqX4tZ{E{v#fu2*wT3vqtL^>kkK##e zdI7AVE#BNVKo`r|i=(J$5(TH@eUj@J|F5Y#0r$Di{s4Zjts-qgiiFB!WJ$Ip)sQ7E z6Irs;lq{)6Oi@>olC+Q|5>c9_Ld4A|BK=W`l0qbf%GAFpWuMIJbMN`h^E=OTe&?L` zd7t+=-`~aKcJCE|_52l!Hj9<{5&Yfi|Id1&C-H~CkBcLcW>@pi2d9L&-_&obhlmB= zV)BKe3$NrYYReB2O;$tvle$>Eb;ZR!1pI^U1=ioOzCS;w6HjJ$PBpz>#fO8F@EYX$6u8R&;(53e;ZyPY(9YNm!5v@lBfijkkbgyP7Nid9E7IeH^@zA#e-++$AuvqbY1waC zPn4*|;vK1*g)a(?9WdXi9_HhJF~MY|3PVl_i?4!xiFjM|QtML7Ke2E-?5jB7G(uY= zf6XB+@!pKOrrtNOWVO;E=BkVB;q!4G^pO41@BjCBr+C^5z>E!s_XvUR;u3?i#FG)e zBGy9vIiUuyDlwNUo~74OZ)qIT9Ja{fCG?WLs-NtrnD>O{82*Uj1xM^KI3Wm$)HFnX zkT2HzbJUXw`kw5Z)$m7P-#X&i^ps)O$OnW@6THoKBpZW!t6n+1Md_b-Z)@qTgwoW=>oef*QX z9M`>LsA(aT(+gn}{APpa$;;{eVDMd71q)Zk%pBNv>XR)#*@A|FCz%Vz z4mgZ+O#Nm0EN*%%Y-mA4%NoKe@a~o-`xw@Tz&d$<0`C`~@_54fxcU0e2A;n7dYst@ z_+9w>)gRKRB;Sg6t2|lys&C#*FSihw7GQ3Of^%MlC%f6;^U?1bM_uG;tMeK93(b@j ze^ig*H(HXcEN(+}`NA@%3ytSOf2zD&`uLZV^s;EKc)o#ph7ZQ#cMPuN`FdBw{QnaQ z{)xHyL?47#QP&sG)+=fD3VE`B=(h}wRPUG9*Z&s&MI4uK&+o5^S-@+ErI7j(9w=t4 zh<9L_VozY->u2mId3VL!=sg&VpQAe{cq2Xa>p1y*LF`)&JC;7p%h>6FzPt+Tq99cb zvDf^9>70n_vU=0hOL4FBRQ1J-)wJ+uMdQGVhE8$3n}akw4lRnCSHZGZ;>y$?M|eUE zud?hL0_|X{aPF1+>7$%#A#{1f<#sIjo z7v=@8l@Ny$T7%pzuB=6*s-ZRNpWzh)PXpx%R^x}vEr4Gu|4F>uf}!Rv!Cx<*9XtBb z$+mszN4%yR*r@TYSlU1bgA>#TxSxs2dBMaq@$z_=X6gSOwm6<53D%Xjhi?qdPFQcg z!rX^^t9+*T0{zkUyv$oVwo&@?r>(}_ih34aA}0GD@d*5Cg1NAJ4K#u!Yok8dvSdHw z3>N>So`GA0x6KAoo*BIX&%Kn1Dh{&+iWx7Y{}l8Ot7bz?;aI^7i^O;Ln8U z^Lniv@S?aR4o@2E^v{G}>ZmQjP53CBYiM6U<2p0Tajr}?er~8j8&BU&dckiA6(ceW|X6|GD|r@C*6V@NuwY zkI~zme#EOk@mDpHeL`q<5N3ziY`tlE6M0|#1L~<_T?>*mE(`^)t!ZWKFrC|R8-&gV zbtgV6^iPN1nm+%l>B8x$Ab6MQYQ&Q*6fYJV5FMyrA{LGkPt%(lb-fVWK_}S<>NXZX zslHH5wv5ID>79^&7jtLQyebdj42?+|Hvry|k0JiHc$&8;+aA&X2>(a^yCt18rv~R7 z{6+A7un}=knw1zwU~GC%s7vx<+VeTsgvE`{$xUQQ>#Va?+Ufx@oWucKbA z_bop{^a)D`#S=FY$7Id?LgxhiKDhfWexFy2Wmm(KZF5vP`9_>V^ZYBaL<+y-#@ifA zjyG_O&}iNYRy+j%zS9#;#Qy|-q51$$vaaTmZB@6#X%z3o z-EnZS<#JkZvmZgO?= zYj5^#=?QcyrqBON6Kby*O=JOqGYmZtgRRx0kaNW~d@;@|Vz!-vdppr#G$!f2#mnJ6 zhg1umv1RrQ(Yp=sl9}=HGU-dqGhDh*vv#^Do}??nL%dDY?`2fPqx^KkEA$$P+4hj) zWB34?$x1t*cdBV6tKl7M5cx8Bm-OFZ+DkqMjyAN`Ax*PHFNO7VSRMT-c*%-}z;Sx7 z>&=R~m)^$(4E)geP=BHwP3UIqM)^GbIrQ?H6PZrnMZ`lIpNgem$=;8rzfpfE{GkxJ z)^OM8Jxk;b{an4J@`L8q#6d}8NX%4m#Hn=8HoGe|*ayXYH_|4;Efgmj&RA;#9TCeK zIEz3#@m~`j7*{6mO{{NJ|G`+xYniSHJLa5r>PCDVEZKP!np%4j{*&s7l%9djiPP)B z&w#fPKQMO{ZfAa?`k4BX(AgkAi7!pRT$7bVm}%)J#J2Hd!^K?&mRhn=y^SBl8AGr{ zya$&Pc{`S`#s44{l*Vh0KR0^P0=o^~7VmNMd+aRuTnTj6#DgHV5O2S_t-W!V& zwVK|D5Ui_SZdot9HSo*e>u{^X?^b7Q5BzRAJuH4KW|nt$jZ+O>0!y~jf?b5R!mbx@S0BM^PVnoL!ym)#ZhkZW8s{8Xvd$Kdf@SPZ_`jpK zOnh3SUojv56BGjww;R|Z-e|!@qI+Zbdc;2xep>x0P96QlmS?PTi2knkz5FV?{ed;d zO}5?qC-T+ehL}B9T_b%(EZHCnYieBY$!ZhI*jS`0iZnCT%QXFD?c%s5>hEI7B1`Yf znr$o}k2ftAE|7P`oeeJntFK;=dih0s;h=oFWHX6oC>J^BW^svoccR~c_LyGJEcp_! zTVTUsPdQ^;`atkW@=ow%eZ-;Gl*cUw|3&{wSOxi8@CrEdd1<@yMiH7N$=DZ$1}a7( z)(*jK`i&fQ4QwRr6@vY7Mi6YwcLc8)PO{0cp^*>6y-gjaPfnr znWf2^%0G?4zOb@{_eJmFz#kEFVZ$80l3>%o)BIETbu8aQr#ingddI_t>GjKc(8TYU zK5>~Pc_5aIHMBd1E`m>qfh~dkoyZ-Q?!sTD_j-J2>dHUXD~>nCva4}6@v(d!>`}em zX08jp6LIFqx8!+g6JR~W4hE7HkC^hR@?S0bmQRd@>*L_mPu9xeC3&*idY$5;Xpuy#*?j|xweio6R4=0l|*2^GRIe)N}$$Nvs`Bqkiv@&s`$%il&W9GuziF5fM^~S@C z=r`c|V9CBVJI=;CcwLvAK14@*tO}!FhR;+d8wQ)H9w5#qUI)HT{iu41yyV!Z delta 48003 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 aM;h%1pG|eC<0_TO)ITum-E@}}w|@at>6bSE diff --git a/resources/i18n/fr/BambuStudio.mo b/resources/i18n/fr/BambuStudio.mo index 3d42406e69934b16103f647d3691b1853f673ba9..7843c25c62c2e32e22b18ad005ba28e9dff0e786 100644 GIT binary patch delta 47649 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 V+WY)rdbY}8t)nR=)!{>-{{TL_SI+Nxp!I!;u~ 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 G+3o*Gu!<@G diff --git a/resources/i18n/hu/BambuStudio.mo b/resources/i18n/hu/BambuStudio.mo index f015b7c281b7c7be7989e2ac332b896222a4f547..c9f36d03c60748e05fb449ffd476b7f170436676 100644 GIT binary patch delta 47654 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 G*ZIGsl7@}| diff --git a/resources/i18n/it/BambuStudio.mo b/resources/i18n/it/BambuStudio.mo index ee74a5f13813ab29f3ce483892b4d54bbca144e1..d34930ccc731098ac2a9500f3f9e3feb4492bfbe 100644 GIT binary patch delta 47649 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 delta 48040 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

    GRuzP9~n=| z>>eJf30Pn9YiRnSA=a8B8Z);SKQ5ntv2(6qst4&$^5x*SAY4Y|Gx7=K7UFCAKJ-%% zv5=Pq@2aofPb_H!r>!o^pjVb&F#II)7~%q4EDz7*Fz4&vTm~Qpa;;bijTMNK@f3X} z`oL?>;&5Gf4m_GVmO6z6v&qFKk&87}otMOM^uAVnuD-(V@^#;16*mJ8B6rhfNtT)M z(})jr>6zB+;&0#;hnEU|Kt(@iNo}whct1VlPk62IM6JDuUevGf-DsVZ|3A?m5cr;# zZ8~5H77o?}WM>L^4QdB@vM#?1Pb?mM9DT7wjU$;iY`tPeEpd+?+n-}o@tg7!?I@C5 z;xPzyAsoRc;=TwR#vjr1VtJMx(2Mw#MVZXi<%!lXw^WxkWo{F_{rDZ`I_tx9mhD(0 z_+Qg&p|3~>7tGU;L^B{(65%5Vc7jwL!DlQy3ntb}1^2=2Mg2bB&t1M4P3i_UjP`0; zB^f=dROcAuZIP^q_d%{B{i6Cj*u5aH1yy8=2Xq{aP&Qqj>_oK~6TGAU)PA?YWAYERBx*5H8U{m#} zbKpliC;s=LI|q2e6&nZl3$#AOtAL-DzZy4+;nR41yeMvEc{s%W#52^t;5L?41rw`- z*mhTHI#16-#Xkf48gC6&LouPfkItw1AS;Qp(fW~o7w`bjcKnuASlBQc^|@*e0>fA) z4|<5aCge`Ua>P?a!{W#rQY`k!*s;%1xSq}7h>95zZ??wS%rSO{Iev6(tUbXdQN_PaL;YK4E^FylIiujf z(E$xCftkA>yESm9uvppzX6F6JZHjZR2cKN0dFrubtIlYibU#1O)n78v0p+ z%$DG$0YP;w!4^yAgcoj)i-v^Q%u%Ca?ePw4A_GxotHUwc8XaYhv_(hzwC>u2%VUho ztuc0Uw9n{xyE!t-JUYf|9%>&NMX<#?AEkcgD31c6sWsmo{{J2$YfXWai^gMg9pnDy M?PGLKbPxCZ8zB(5(*OVf diff --git a/resources/i18n/ja/BambuStudio.mo b/resources/i18n/ja/BambuStudio.mo index b7af955e1c3e68a09b127c9deb31fa0bc7dca269..55ad2aa18e3e67cb07713b9d0f428c34ee1a411c 100644 GIT binary patch delta 47649 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 GxBmgDmVw{^ diff --git a/resources/i18n/nl/BambuStudio.mo b/resources/i18n/nl/BambuStudio.mo index 3fd56a2cb10797bafecbcc74d2ec271cc93a3ff5..d53fc0371c57cbb4d5bb1b73feff7a4b0ceac175 100644 GIT binary patch delta 47649 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 delta 48041 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 T=W}F^bA9vob1Y7FO>zGVy^)6V diff --git a/resources/i18n/sv/BambuStudio.mo b/resources/i18n/sv/BambuStudio.mo index b8d330d504105c246750f175287eec75051b6813..93a108902c95d5076609d090445f314ed2d4b1c2 100644 GIT binary patch delta 47649 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 delta 48031 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 delta 50151 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 F`hU>@ExrH% From 82b3e9206949f64c586498d02f5358e5c4fa0fff Mon Sep 17 00:00:00 2001 From: tao wang Date: Thu, 6 Apr 2023 20:58:59 +0800 Subject: [PATCH 234/339] FIX:fixed crash caused by ColorPicker not being initialized Change-Id: Id394a68b00b28c02a682ed457a14235a2e9f7053 --- src/slic3r/GUI/AMSMaterialsSetting.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index efdfea3023..dac47064e5 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -914,11 +914,12 @@ void AMSMaterialsSetting::on_dpi_changed(const wxRect &suggested_rect) { this->R ColorPicker::ColorPicker(wxWindow* parent, wxWindowID id, const wxPoint& pos /*= wxDefaultPosition*/, const wxSize& size /*= wxDefaultSize*/) { + wxWindow::Create(parent, id, pos, size); + SetSize(wxSize(FromDIP(25), FromDIP(25))); SetMinSize(wxSize(FromDIP(25), FromDIP(25))); SetMaxSize(wxSize(FromDIP(25), FromDIP(25))); - wxWindow::Create(parent, id, pos, size); Bind(wxEVT_PAINT, &ColorPicker::paintEvent, this); m_bitmap_border = create_scaled_bitmap("color_picker_border", nullptr, 25); } From c0bcb2270a53e333970b8effc3994d13f05fdfa4 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Thu, 6 Apr 2023 19:37:18 +0800 Subject: [PATCH 235/339] FIX: [STUDIO-2557] use load() to stop media play on windows Change-Id: I0d2d45569ef64a5a212ea04fe926a3a25ce7b50d --- src/slic3r/GUI/wxMediaCtrl2.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/wxMediaCtrl2.cpp b/src/slic3r/GUI/wxMediaCtrl2.cpp index fd792c9c79..ef35b5d308 100644 --- a/src/slic3r/GUI/wxMediaCtrl2.cpp +++ b/src/slic3r/GUI/wxMediaCtrl2.cpp @@ -157,7 +157,14 @@ void wxMediaCtrl2::Load(wxURI url) void wxMediaCtrl2::Play() { wxMediaCtrl::Play(); } -void wxMediaCtrl2::Stop() { wxMediaCtrl::Stop(); } +void wxMediaCtrl2::Stop() +{ +#ifdef __WIN32__ + wxMediaCtrl::Load(wxURI()); +#else + wxMediaCtrl::Stop(); +#endif +} #ifdef __LINUX__ extern int gst_bambu_last_error; From e2b8bff66054ea2a6db6d9891e0ef6323bd91b35 Mon Sep 17 00:00:00 2001 From: tao wang Date: Thu, 6 Apr 2023 19:12:54 +0800 Subject: [PATCH 236/339] ENH:clear virtual tray when change printers Change-Id: I894c9ba54512a1b833bfd9da33f901457d297aed --- src/slic3r/GUI/AMSMaterialsSetting.cpp | 14 +++++++------- src/slic3r/GUI/StatusPanel.cpp | 8 ++++++-- src/slic3r/GUI/Widgets/AMSControl.cpp | 14 +++++++++++++- src/slic3r/GUI/Widgets/AMSControl.hpp | 3 ++- 4 files changed, 28 insertions(+), 11 deletions(-) diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index dac47064e5..d382787122 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -419,7 +419,7 @@ void AMSMaterialsSetting::on_select_reset(wxCommandEvent& event) { } // set k / n value - if (obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)) { + if (obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY)) { // set extrusion cali ratio int cali_tray_id = ams_id * 4 + tray_id; @@ -477,7 +477,7 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) else { if (!m_is_third) { // check and set k n - if (obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)) { + if (obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY)) { if (!ExtrusionCalibration::check_k_validation(k_text)) { wxString k_tips = _L("Please input a valid value (K in 0~0.5)"); wxString kn_tips = _L("Please input a valid value (K in 0~0.5, N in 0.6~2.0)"); @@ -489,7 +489,7 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) // set k / n value - if (obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)) { + if (obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY)) { // set extrusion cali ratio int cali_tray_id = ams_id * 4 + tray_id; @@ -575,7 +575,7 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) } else { if (obj) { - if (obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)) { + if (obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY)) { if (!ExtrusionCalibration::check_k_validation(k_text)) { wxString k_tips = _L("Please input a valid value (K in 0~0.5)"); wxString kn_tips = _L("Please input a valid value (K in 0~0.5, N in 0.6~2.0)"); @@ -596,7 +596,7 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) } // set k / n value - if (obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)) { + if (obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY)) { // set extrusion cali ratio int cali_tray_id = ams_id * 4 + tray_id; @@ -698,7 +698,7 @@ void AMSMaterialsSetting::update_widgets() else m_panel_normal->Hide(); m_panel_kn->Show(); - } else if (obj && obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)) { + } else if (obj && obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY)) { m_panel_normal->Show(); m_panel_kn->Show(); } else { @@ -749,7 +749,7 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi if (!m_is_third) { m_button_reset->Hide(); - if (obj && obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)) { + if (obj && obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY)) { m_button_confirm->Show(); } else { m_button_confirm->Hide(); diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 0d70160c43..ffed03067e 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -1921,7 +1921,9 @@ void StatusPanel::update_ams(MachineObject *obj) BOOST_LOG_TRIVIAL(trace) << "machine object" << obj->dev_name << " was disconnected, set show_ams_group is false"; } bool is_support_extrusion_cali = obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI); - if (is_support_extrusion_cali) { + bool is_support_virtual_tray = obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY); + + if (is_support_virtual_tray) { m_ams_control->update_vams_kn_value(obj->vt_tray); } show_ams_group(false, obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY), obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI), obj->is_support_filament_edit_virtual_tray); @@ -1929,7 +1931,9 @@ void StatusPanel::update_ams(MachineObject *obj) } bool is_support_extrusion_cali = obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI); - if (is_support_extrusion_cali) { + bool is_support_virtual_tray = obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY); + + if (is_support_virtual_tray) { m_ams_control->update_vams_kn_value(obj->vt_tray); } diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index b32ce5dcd8..ccc45442c8 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -757,7 +757,7 @@ void AMSLib::render(wxDC &dc) } //draw k&n - if (m_obj && m_obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)) { + if (m_obj && m_obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY)) { if (m_show_kn){ wxString str_k = wxString::Format("K %1.3f", m_info.k); wxString str_n = wxString::Format("N %1.3f", m_info.n); @@ -2563,6 +2563,18 @@ void AMSControl::update_vams_kn_value(AmsTray tray) m_vams_lib->Refresh(); } +void AMSControl::reset_vams() +{ + m_vams_lib->m_info.k = 0; + m_vams_lib->m_info.n = 0; + m_vams_lib->m_info.material_name = wxEmptyString; + m_vams_lib->m_info.material_colour = AMS_CONTROL_WHITE_COLOUR; + m_vams_info.material_name = wxEmptyString; + m_vams_info.material_colour = AMS_CONTROL_WHITE_COLOUR; + m_vams_lib->Refresh(); +} + + void AMSControl::UpdateAms(std::vector info, bool keep_selection, bool has_extrusion_cali, bool is_reset) { std::string curr_ams_id = GetCurentAms(); diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index 33f00bc93f..e34267fa81 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -617,7 +617,8 @@ public: void show_vams_kn_value(bool show); void update_vams_kn_value(AmsTray tray); - void post_event(wxEvent &&event); + void reset_vams(); + void post_event(wxEvent&& event); virtual bool Enable(bool enable = true); From eb86b00c82543875f3a46d88b76a442537e6015a Mon Sep 17 00:00:00 2001 From: tao wang Date: Thu, 6 Apr 2023 20:05:58 +0800 Subject: [PATCH 237/339] FIX:fixed speed control window will not dismiss Change-Id: I7d053936fd13b08f624f7e1488fcc79d9a270f53 --- src/slic3r/GUI/StatusPanel.cpp | 5 +---- src/slic3r/GUI/Widgets/AMSControl.cpp | 26 ++++++++++++++++++++++---- src/slic3r/GUI/Widgets/AMSControl.hpp | 1 + 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index ffed03067e..e5270d64d9 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -3058,16 +3058,13 @@ void StatusPanel::on_switch_speed(wxCommandEvent &event) }); popUp->Bind(wxEVT_SHOW, [this, popUp](auto &e) { if (!e.IsShown()) { - /* wxGetApp().CallAfter([this, popUp] { - - });*/ popUp->Destroy(); m_showing_speed_popup = false; speed_dismiss_time = boost::posix_time::microsec_clock::universal_time(); } }); - m_ams_control->Bind(EVT_AMS_SHOW_HUMIDITY_TIPS, [this, popUp](auto& e) { + m_ams_control->Bind(EVT_CLEAR_SPEED_CONTROL, [this, popUp](auto& e) { if (m_showing_speed_popup) { if (popUp && popUp->IsShown()) { popUp->Show(false); diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index ccc45442c8..c7d93637df 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -31,6 +31,7 @@ wxDEFINE_EVENT(EVT_AMS_GUIDE_WIKI, wxCommandEvent); wxDEFINE_EVENT(EVT_AMS_RETRY, wxCommandEvent); wxDEFINE_EVENT(EVT_AMS_SHOW_HUMIDITY_TIPS, wxCommandEvent); wxDEFINE_EVENT(EVT_AMS_UNSELETED_VAMS, wxCommandEvent); +wxDEFINE_EVENT(EVT_CLEAR_SPEED_CONTROL, wxCommandEvent); bool AMSinfo::parse_ams_info(Ams *ams, bool remain_flag, bool humidity_flag) { @@ -1030,8 +1031,15 @@ AMSRoad::AMSRoad(wxWindow *parent, wxWindowID id, Caninfo info, int canindex, in if (mouse_pos.x > rect.x + GetSize().x - FromDIP(25) && mouse_pos.y > rect.y + GetSize().y - FromDIP(25)) { - wxCommandEvent event(EVT_AMS_SHOW_HUMIDITY_TIPS); - wxPostEvent(GetParent()->GetParent(), event); + wxCommandEvent show_event(EVT_AMS_SHOW_HUMIDITY_TIPS); + wxPostEvent(GetParent()->GetParent(), show_event); + +#ifdef __WXMSW__ + wxCommandEvent close_event(EVT_CLEAR_SPEED_CONTROL); + wxPostEvent(GetParent()->GetParent(), close_event); +#endif // __WXMSW__ + + } } }); @@ -1803,6 +1811,11 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_ams_introduce_popup.set_mode(true); m_ams_introduce_popup.Position(popup_pos, wxSize(0, 0)); m_ams_introduce_popup.Popup(); + +#ifdef __WXMSW__ + wxCommandEvent close_event(EVT_CLEAR_SPEED_CONTROL); + wxPostEvent(this, close_event); +#endif // __WXMSW__ }); img_amsmapping_tip->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) { m_ams_introduce_popup.Dismiss(); @@ -2028,11 +2041,16 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_ams_introduce_popup.set_mode(false); m_ams_introduce_popup.Position(popup_pos, wxSize(0, 0)); m_ams_introduce_popup.Popup(); - }); + +#ifdef __WXMSW__ + wxCommandEvent close_event(EVT_CLEAR_SPEED_CONTROL); + wxPostEvent(this, close_event); +#endif // __WXMSW__ + }); img_vams_tip->Bind(wxEVT_LEAVE_WINDOW, [this](wxMouseEvent& e) { m_ams_introduce_popup.Dismiss(); - }); + }); m_sizer_vams_tips->Add(m_vams_tip, 0, wxTOP, FromDIP(5)); m_sizer_vams_tips->Add(img_vams_tip, 0, wxALL, FromDIP(3)); diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index e34267fa81..0f3ea61593 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -641,6 +641,7 @@ wxDECLARE_EVENT(EVT_AMS_GUIDE_WIKI, wxCommandEvent); wxDECLARE_EVENT(EVT_AMS_RETRY, wxCommandEvent); wxDECLARE_EVENT(EVT_AMS_SHOW_HUMIDITY_TIPS, wxCommandEvent); wxDECLARE_EVENT(EVT_AMS_UNSELETED_VAMS, wxCommandEvent); +wxDECLARE_EVENT(EVT_CLEAR_SPEED_CONTROL, wxCommandEvent); }} // namespace Slic3r::GUI From e11c004de42d1144393d15d3ccab1780c102cad8 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Thu, 6 Apr 2023 18:01:59 +0800 Subject: [PATCH 238/339] FIX: [BLPIOT-64] only default or user presets Change-Id: I1c846aa26fdac95652ae8e7b3d01c30f99e7ef61 --- src/libslic3r/PresetBundle.cpp | 6 +++--- src/slic3r/GUI/GUI_App.cpp | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index c1f859b5c1..da08a08ed5 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -241,12 +241,12 @@ PresetsConfigSubstitutions PresetBundle::load_presets(AppConfig &config, Forward //BBS: change system config to json std::tie(substitutions, errors_cummulative) = this->load_system_presets_from_json(substitution_rule); - // Load default user presets always - load_user_presets(DEFAULT_USER_FOLDER_NAME, substitution_rule); // BBS load preset from user's folder, load system default if // BBS: change directories by design std::string dir_user_presets = config.get("preset_folder"); - if (!dir_user_presets.empty()) { + if (dir_user_presets.empty()) { + load_user_presets(DEFAULT_USER_FOLDER_NAME, substitution_rule); + } else { load_user_presets(dir_user_presets, substitution_rule); } diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index f9cfe30592..8a316cf89a 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -4425,6 +4425,9 @@ void GUI_App::start_sync_user_preset(bool load_immediately, bool with_progress_d { if (!m_agent || !m_agent->is_user_login()) return; + if (load_immediately) + remove_user_presets(); + enable_user_preset_folder(true); // has already start sync @@ -4541,6 +4544,9 @@ void GUI_App::stop_sync_user_preset() remove_user_presets(); enable_user_preset_folder(false); + preset_bundle->load_user_presets(DEFAULT_USER_FOLDER_NAME, ForwardCompatibilitySubstitutionRule::Enable); + mainframe->update_side_preset_ui(); + if (!enable_sync) return; From 0aea102bd397fc7035d1815d36fd49261e15be04 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Thu, 6 Apr 2023 16:18:23 +0800 Subject: [PATCH 239/339] FIX: [STUDIO-2631] call AddScriptMessageHandler queued Change-Id: I6a71c2db3ed1b3d06931f53428a8d78881399b4d --- src/slic3r/GUI/Widgets/WebView.cpp | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/slic3r/GUI/Widgets/WebView.cpp b/src/slic3r/GUI/Widgets/WebView.cpp index e1006f0736..74efaa67ba 100644 --- a/src/slic3r/GUI/Widgets/WebView.cpp +++ b/src/slic3r/GUI/Widgets/WebView.cpp @@ -128,6 +128,7 @@ class FakeWebView : public wxWebView wxDEFINE_EVENT(EVT_WEBVIEW_RECREATED, wxCommandEvent); static std::vector g_webviews; +static std::vector g_delay_webviews; class WebViewRef : public wxObjectRefData { @@ -193,16 +194,27 @@ wxWebView* WebView::CreateWebView(wxWindow * parent, wxString const & url) WKWebView * wkWebView = (WKWebView *) webView->GetNativeBackend(); Slic3r::GUI::WKWebView_setTransparentBackground(wkWebView); #endif + auto addScriptMessageHandler = [] (wxWebView *webView) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": begin to add script message handler for wx."; + Slic3r::GUI::wxGetApp().set_adding_script_handler(true); + if (!webView->AddScriptMessageHandler("wx")) + wxLogError("Could not add script message handler"); + Slic3r::GUI::wxGetApp().set_adding_script_handler(false); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": finished add script message handler for wx."; + }; #ifndef __WIN32__ - webView->CallAfter([webView] { + webView->CallAfter([webView, addScriptMessageHandler] { #endif - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": begin to add script message handler for wx."; - Slic3r::GUI::wxGetApp().set_adding_script_handler(true); - if (!webView->AddScriptMessageHandler("wx")) - wxLogError("Could not add script message handler"); - Slic3r::GUI::wxGetApp().set_adding_script_handler(false); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": finished add script message handler for wx."; - + if (Slic3r::GUI::wxGetApp().is_adding_script_handler()) { + g_delay_webviews.push_back(webView); + } else { + addScriptMessageHandler(webView); + while (!g_delay_webviews.empty()) { + auto views = std::move(g_delay_webviews); + for (auto wv : views) + addScriptMessageHandler(wv); + } + } #ifndef __WIN32__ }); #endif From 031d61faca3275180d47dd7ac170543174b140f2 Mon Sep 17 00:00:00 2001 From: gerrit Date: Fri, 7 Apr 2023 09:07:20 +0800 Subject: [PATCH 240/339] ci: update build version to 01.06.00.53 Change-Id: I5c1a8aef816ebde7b1703b414aa9bffe3922a1a8 --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index 38f7bdff5d..9c2b57c3a2 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.06.00.52") +set(SLIC3R_VERSION "01.06.00.53") From 90760e0d075b892c596d039e9cf8db7b9d5ec61d Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Thu, 6 Apr 2023 21:21:44 +0800 Subject: [PATCH 241/339] ENH: refine the thumbnail rendering 1. add specific shader for thumbnail 2. do not render the negative-z part 3. fix the sinking related issue under cli Change-Id: Ia59083437544c1c0bd924c811274ccbb137e9eb7 --- resources/shaders/thumbnail.fs | 16 +++++++++++ resources/shaders/thumbnail.vs | 43 +++++++++++++++++++++++++++++ src/BambuStudio.cpp | 12 ++++---- src/slic3r/GUI/GLCanvas3D.cpp | 13 +++++++-- src/slic3r/GUI/GLShadersManager.cpp | 2 ++ src/slic3r/GUI/OpenGLManager.cpp | 11 ++++++-- 6 files changed, 86 insertions(+), 11 deletions(-) create mode 100644 resources/shaders/thumbnail.fs create mode 100644 resources/shaders/thumbnail.vs diff --git a/resources/shaders/thumbnail.fs b/resources/shaders/thumbnail.fs new file mode 100644 index 0000000000..4b269734ee --- /dev/null +++ b/resources/shaders/thumbnail.fs @@ -0,0 +1,16 @@ +#version 110 + +uniform vec4 uniform_color; +uniform float emission_factor; + +// x = tainted, y = specular; +varying vec2 intensity; +//varying float drop; +varying vec4 world_pos; + +void main() +{ + if (world_pos.z < 0.0) + discard; + gl_FragColor = vec4(vec3(intensity.y) + uniform_color.rgb * (intensity.x + emission_factor), uniform_color.a); +} diff --git a/resources/shaders/thumbnail.vs b/resources/shaders/thumbnail.vs new file mode 100644 index 0000000000..a02248f28d --- /dev/null +++ b/resources/shaders/thumbnail.vs @@ -0,0 +1,43 @@ +#version 110 + +#define INTENSITY_CORRECTION 0.6 + +// normalized values for (-0.6/1.31, 0.6/1.31, 1./1.31) +const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929); +#define LIGHT_TOP_DIFFUSE (0.8 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SPECULAR (0.125 * INTENSITY_CORRECTION) +#define LIGHT_TOP_SHININESS 20.0 + +// normalized values for (1./1.43, 0.2/1.43, 1./1.43) +const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074); +#define LIGHT_FRONT_DIFFUSE (0.3 * INTENSITY_CORRECTION) + +#define INTENSITY_AMBIENT 0.3 + +uniform mat4 volume_world_matrix; +// x = tainted, y = specular; +varying vec2 intensity; +varying vec4 world_pos; + +void main() +{ + // First transform the normal into camera space and normalize the result. + vec3 normal = normalize(gl_NormalMatrix * gl_Normal); + + // Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex. + // Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range. + float NdotL = max(dot(normal, LIGHT_TOP_DIR), 0.0); + + intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; + vec3 position = (gl_ModelViewMatrix * gl_Vertex).xyz; + intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(position), reflect(-LIGHT_TOP_DIR, normal)), 0.0), LIGHT_TOP_SHININESS); + + // Perform the same lighting calculation for the 2nd light source (no specular applied). + NdotL = max(dot(normal, LIGHT_FRONT_DIR), 0.0); + intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; + + // Point in homogenous coordinates. + world_pos = volume_world_matrix * gl_Vertex; + + gl_Position = ftransform(); +} diff --git a/src/BambuStudio.cpp b/src/BambuStudio.cpp index adfc3aac26..a56d650aa3 100644 --- a/src/BambuStudio.cpp +++ b/src/BambuStudio.cpp @@ -1765,11 +1765,11 @@ int CLI::run(int argc, char **argv) // All transforms have been dealt with. Now ensure that the objects are on bed. // (Unless the user said otherwise.) - //BBS: current only support models on bed + //BBS: current only support models on bed, 0407 sinking supported //if (m_config.opt_bool("ensure_on_bed")) - for (auto &model : m_models) - for (auto &o : model.objects) - o->ensure_on_bed(); + // for (auto &model : m_models) + // for (auto &o : model.objects) + // o->ensure_on_bed(); // loop through action options bool export_to_3mf = false, load_slicedata = false, export_slicedata = false, export_slicedata_error = false; @@ -2092,7 +2092,7 @@ int CLI::run(int argc, char **argv) outfile = outfile_final; }*/ // Run the post-processing scripts if defined. - run_post_process_scripts(outfile, print->full_print_config()); + //run_post_process_scripts(outfile, print->full_print_config()); BOOST_LOG_TRIVIAL(info) << "Slicing result exported to " << outfile << std::endl; part_plate->update_slice_result_valid_state(true); #if defined(__linux__) || defined(__LINUX__) @@ -2359,7 +2359,7 @@ int CLI::run(int argc, char **argv) } ThumbnailsParams thumbnail_params; - GLShaderProgram* shader = opengl_mgr.get_shader("gouraud_light"); + GLShaderProgram* shader = opengl_mgr.get_shader("thumbnail"); if (!shader) { BOOST_LOG_TRIVIAL(error) << boost::format("can not get shader for rendering thumbnail"); } diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index d16aaae1ff..4aa80e0181 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1983,7 +1983,7 @@ void GLCanvas3D::render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, void GLCanvas3D::render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, const GLVolumeCollection& volumes, Camera::EType camera_type, bool use_top_view, bool for_picking) { - GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light"); + GLShaderProgram* shader = wxGetApp().get_shader("thumbnail"); ModelObjectPtrs& model_objects = GUI::wxGetApp().model().objects; std::vector> colors = ::get_extruders_colors(); switch (OpenGLManager::get_framebuffers_type()) @@ -5429,7 +5429,14 @@ void GLCanvas3D::render_thumbnail_internal(ThumbnailData& thumbnail_data, const auto is_visible = [plate_idx, plate_build_volume](const GLVolume& v) { bool ret = v.printable; if (plate_idx >= 0) { - ret &= plate_build_volume.contains(v.transformed_convex_hull_bounding_box()); + bool contained = false; + BoundingBoxf3 plate_bbox = plate_build_volume; + plate_bbox.min(2) = -1e10; + const BoundingBoxf3& volume_bbox = v.transformed_convex_hull_bounding_box(); + if (plate_bbox.contains(volume_bbox) && (volume_bbox.max(2) > 0)) { + contained = true; + } + ret &= contained; } else { ret &= (!v.shader_outside_printer_detection_enabled || !v.is_outside); @@ -5461,6 +5468,7 @@ void GLCanvas3D::render_thumbnail_internal(ThumbnailData& thumbnail_data, const volumes_box.merge(vol->transformed_bounding_box()); } } + volumes_box.min.z() = -Slic3r::BuildVolume::SceneEpsilon; double width = volumes_box.max.x() - volumes_box.min.x(); double depth = volumes_box.max.y() - volumes_box.min.y(); double height = volumes_box.max.z() - volumes_box.min.z(); @@ -5592,6 +5600,7 @@ void GLCanvas3D::render_thumbnail_internal(ThumbnailData& thumbnail_data, const curr_color[3] = vol->color[3]; shader->set_uniform("uniform_color", curr_color); + shader->set_uniform("volume_world_matrix", vol->world_matrix()); //BBS set all volume to orange //shader->set_uniform("uniform_color", orange); /*if (plate_idx > 0) { diff --git a/src/slic3r/GUI/GLShadersManager.cpp b/src/slic3r/GUI/GLShadersManager.cpp index c7d1c2647b..107fcb5627 100644 --- a/src/slic3r/GUI/GLShadersManager.cpp +++ b/src/slic3r/GUI/GLShadersManager.cpp @@ -35,6 +35,8 @@ std::pair GLShadersManager::init() // used to render bed axes and model, selection hints, gcode sequential view marker model, preview shells, options in gcode preview valid &= append_shader("gouraud_light", { "gouraud_light.vs", "gouraud_light.fs" }); + //used to render thumbnail + valid &= append_shader("thumbnail", { "thumbnail.vs", "thumbnail.fs" }); // used to render first layer for calibration valid &= append_shader("cali", { "cali.vs", "cali.fs"}); // used to render printbed diff --git a/src/slic3r/GUI/OpenGLManager.cpp b/src/slic3r/GUI/OpenGLManager.cpp index 1e6b6cd7ec..5d8e90ead4 100644 --- a/src/slic3r/GUI/OpenGLManager.cpp +++ b/src/slic3r/GUI/OpenGLManager.cpp @@ -251,14 +251,19 @@ bool OpenGLManager::init_gl() if (GLEW_ARB_framebuffer_object) { s_framebuffers_type = EFramebufferType::Arb; BOOST_LOG_TRIVIAL(info) << "Found Framebuffer Type ARB."<< std::endl; - } - else if (GLEW_EXT_framebuffer_object) + } + else if (GLEW_EXT_framebuffer_object) { + BOOST_LOG_TRIVIAL(info) << "Found Framebuffer Type Ext."<< std::endl; s_framebuffers_type = EFramebufferType::Ext; - else + } + else { s_framebuffers_type = EFramebufferType::Unknown; + BOOST_LOG_TRIVIAL(warning) << "Found Framebuffer Type unknown!"<< std::endl; + } bool valid_version = s_gl_info.is_version_greater_or_equal_to(2, 0); if (!valid_version) { + BOOST_LOG_TRIVIAL(warning) << "Found opengl version <= 2.0"<< std::endl; // Complain about the OpenGL version. wxString message = from_u8((boost::format( _utf8(L("The application cannot run normally because OpenGL version is lower than 2.0.\n")))).str()); From 697a45379fe12cb27725a576d0217cdf4436f9fb Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Fri, 7 Apr 2023 09:38:31 +0800 Subject: [PATCH 242/339] ENH: refine the multiple-object detects logic while sinking opened no need to detect the project file Change-Id: Ia84d94832d16c2a68ecc25ee457d79735873e82a (cherry picked from commit 39e9f3de907f19d452abf831221656c9a8e1d0e0) --- src/slic3r/GUI/Plater.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index d43fb3c570..fd966c414b 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -3479,7 +3479,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ // convert_model_if(model, answer_convert_from_imperial_units == wxID_YES); } - if (model.looks_like_multipart_object()) { + if (!is_project_file && model.looks_like_multipart_object()) { MessageDialog msg_dlg(q, _L( "This file contains several objects positioned at multiple heights.\n" "Instead of considering them as multiple objects, should \n" From 420fae9bbf52226727aa0e4de94c8356f9628908 Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Fri, 7 Apr 2023 10:07:55 +0800 Subject: [PATCH 243/339] FIX: fix a crash issue when switch language under debug mode Change-Id: I901e880601f963ceea433aaec1c455c2698b77f7 (cherry picked from commit 6a0fc275664503a53515d174ef7c71c829db4b14) --- src/slic3r/GUI/GUI_App.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 8a316cf89a..1ea1ea8724 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -3269,7 +3269,7 @@ void GUI_App::recreate_GUI(const wxString& msg_name) // }); //show publish button - if (m_agent->is_user_login() && mainframe) { + if (m_agent && m_agent->is_user_login() && mainframe) { int identifier; int result = m_agent->get_user_info(&identifier); auto publish_identifier = identifier & 1; From db3acf7d72499dd1052b1aec2fa4ae5fa31c1d0d Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Fri, 7 Apr 2023 12:02:03 +0800 Subject: [PATCH 244/339] FIX: cannot click AmsMapping Change-Id: Ie6e908ee263d2c072520cdc8d8228f740646c995 --- src/slic3r/GUI/AmsMappingPopup.cpp | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index 15e4ac22c3..390d897629 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -45,13 +45,7 @@ wxDEFINE_EVENT(EVT_SET_FINISH_MAPPING, wxCommandEvent); SetMaxSize(MATERIAL_ITEM_SIZE); SetBackgroundColour(*wxWHITE); - m_main_panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); - auto main_sizer = new wxBoxSizer(wxVERTICAL); - main_sizer->Add(m_main_panel, 1, wxEXPAND); - this->SetSizer(main_sizer); - this->Layout(); - - m_main_panel->Bind(wxEVT_PAINT, &MaterialItem::paintEvent, this); + Bind(wxEVT_PAINT, &MaterialItem::paintEvent, this); wxGetApp().UpdateDarkUI(this); } @@ -95,7 +89,7 @@ void MaterialItem::on_normal() void MaterialItem::paintEvent(wxPaintEvent &evt) { - wxPaintDC dc(m_main_panel); + wxPaintDC dc(this); render(dc); //PrepareDC(buffdc); From 951be6e4714e9a600f84c58f0a3817825d3e5d30 Mon Sep 17 00:00:00 2001 From: gerrit Date: Fri, 7 Apr 2023 14:45:25 +0800 Subject: [PATCH 245/339] ci: update build version to 01.06.00.54 Change-Id: I9a6afcb3ee5f2545565367e6873846bee52d1bd2 --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index 9c2b57c3a2..9e6e8cf87c 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.06.00.53") +set(SLIC3R_VERSION "01.06.00.54") From 6f5de187c696449b341280adc6f863b66e4edbce Mon Sep 17 00:00:00 2001 From: wintergua Date: Fri, 7 Apr 2023 14:10:39 +0800 Subject: [PATCH 246/339] ENH: enable inner brim mode Change-Id: I22f53c75e0731cb1ad397c1233e858a5b9a8fc0f (cherry picked from commit 66637a616498c8fc38745670a75ba119ae9b1a5f) --- src/libslic3r/PrintConfig.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index e9f2422274..688444d013 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -766,12 +766,12 @@ void PrintConfigDef::init_fff_params() def = this->add("brim_type", coEnum); def->label = L("Brim type"); def->category = L("Support"); - def->tooltip = L("This controls the generation of the brim at outer side of models. " + def->tooltip = L("This controls the generation of the brim at outer and/or inner side of models. " "Auto means the brim width is analysed and calculated automatically."); def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.emplace_back("auto_brim"); def->enum_values.emplace_back("outer_only"); -#if !BBL_RELEASE_TO_PUBLIC +#if 1 //!BBL_RELEASE_TO_PUBLIC // BBS: The following two types are disabled def->enum_values.emplace_back("inner_only"); def->enum_values.emplace_back("outer_and_inner"); @@ -780,7 +780,7 @@ void PrintConfigDef::init_fff_params() def->enum_labels.emplace_back(L("Auto")); def->enum_labels.emplace_back(L("Outer brim only")); -#if !BBL_RELEASE_TO_PUBLIC +#if 1 //!BBL_RELEASE_TO_PUBLIC // BBS: The following two types are disabled def->enum_labels.emplace_back(L("Inner brim only")); def->enum_labels.emplace_back(L("Outer and inner brim")); From 13f5171eb3867bd03b65be0bb99346dd937bc384 Mon Sep 17 00:00:00 2001 From: tao wang Date: Fri, 7 Apr 2023 12:15:42 +0800 Subject: [PATCH 247/339] FIX:fixed no longer prompt no SD card when disabling AMS Change-Id: I4083ffc46dee3526d61735206c4795f96d9f2f96 --- src/slic3r/GUI/SelectMachine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 4e94b611c5..5259a21fb7 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -2837,7 +2837,7 @@ void SelectMachineDialog::update_show_status() } // no ams - if (!obj_->has_ams()) { + if (!obj_->has_ams() || !ams_check->GetValue()) { if (!has_tips(obj_)) show_status(PrintDialogStatus::PrintStatusReadingFinished); return; From b116a605f27dfeb28d0071170b398f0a97b294b7 Mon Sep 17 00:00:00 2001 From: tao wang Date: Fri, 7 Apr 2023 10:48:03 +0800 Subject: [PATCH 248/339] ENH:update information for send print timeout Change-Id: I36ecfef98b285ff870e7a1ea382adc4e901eb52e --- src/slic3r/GUI/Jobs/SendJob.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Jobs/SendJob.cpp b/src/slic3r/GUI/Jobs/SendJob.cpp index 189ddec298..4746ab8800 100644 --- a/src/slic3r/GUI/Jobs/SendJob.cpp +++ b/src/slic3r/GUI/Jobs/SendJob.cpp @@ -367,7 +367,7 @@ void SendJob::process() } if (result == BAMBU_NETWORK_ERR_WRONG_IP_ADDRESS) { - msg_text = _L("Failed uploading print file. Please enter ip address again."); + msg_text = timeout_to_upload_str; } update_status(curr_percent, msg_text); From 1e731a15f044d0aabf858ab68d1ab588e3e52570 Mon Sep 17 00:00:00 2001 From: tao wang Date: Fri, 7 Apr 2023 09:29:49 +0800 Subject: [PATCH 249/339] FIX:delete default search terms for search controls Change-Id: Ic400f4120fc78f78ffb138848c9e8046bc32954a --- src/slic3r/GUI/SelectMachine.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 5259a21fb7..db90217aab 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -418,8 +418,6 @@ SelectMachinePopup::SelectMachinePopup(wxWindow *parent) m_search_bar = new wxSearchCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_search_bar->ShowSearchButton( true ); m_search_bar->ShowCancelButton( false ); - m_search_bar->SetHint(_L("Search")); - m_search_bar->SetDescriptiveText(_L("Search")); m_sizer_search_bar->Add( m_search_bar, 1, wxALL| wxEXPAND, 1 ); m_sizer_main->Add(m_sizer_search_bar, 0, wxALL | wxEXPAND, FromDIP(2)); m_search_bar->Bind( wxEVT_COMMAND_TEXT_UPDATED, &SelectMachinePopup::update_machine_list, this ); From 62a2fadeb8f419d4646b73beaf52f1725f95490e Mon Sep 17 00:00:00 2001 From: manch1n Date: Wed, 29 Mar 2023 09:43:17 +0800 Subject: [PATCH 250/339] ENH: make arrangement align better Jira: STUDIO-2584, STUDIO-2507 Change-Id: I1987103e46f5ecb84395b5885954679ffe105c60 (cherry picked from commit 90df278408b79ad5b8d4ceaf90fe483cd8f5a48c) --- .../include/libnest2d/placers/nfpplacer.hpp | 74 ++++++++++++++++--- src/libslic3r/Arrange.cpp | 4 +- 2 files changed, 65 insertions(+), 13 deletions(-) diff --git a/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp b/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp index 08afd130b5..56aa3fdd80 100644 --- a/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp +++ b/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp @@ -602,6 +602,21 @@ private: return nfp::subtract({innerNfp}, nfps); } + Shapes calcnfp(const RawShape &sliding, const Shapes &stationarys, const Box &bed, Lvl) + { + using namespace nfp; + + Shapes nfps(stationarys.size()); + Item slidingItem(sliding); + __parallel::enumerate(stationarys.begin(), stationarys.end(), [&nfps, sliding, &slidingItem](const RawShape &stationary, size_t n) { + auto subnfp_r = noFitPolygon(stationary, sliding); + correctNfpPosition(subnfp_r, stationary, slidingItem); + nfps[n] = subnfp_r.first; + }); + + RawShape innerNfp = nfpInnerRectBed(bed, sliding).first; + return nfp::subtract({innerNfp}, nfps); + } template Shapes calcnfp(const Item &/*trsh*/, Level) @@ -702,18 +717,31 @@ private: }; } - if(items_.empty()) { + bool first_object = std::all_of(items_.begin(), items_.end(), [&](const Item &rawShape) { return rawShape.is_virt_object && !rawShape.is_wipe_tower; }); + + // item won't overlap with virtual objects if it's inside or touches NFP + auto overlapWithVirtObject = [&]() -> double { + if (items_.empty()) return 0; + nfps = calcnfp(item, binbb, Lvl()); + auto v = item.referenceVertex(); + for (const RawShape &nfp : nfps) { + if (sl::isInside(v, nfp) || sl::touches(v, nfp)) { return 0; } + } + return 1; + }; + + if (first_object) { setInitialPosition(item); auto best_tr = item.translation(); auto best_rot = item.rotation(); - best_overfit = overfit(item.transformedShape(), bin_); + best_overfit = overfit(item.transformedShape(), bin_) + overlapWithVirtObject(); for(auto rot : config_.rotations) { item.translation(initial_tr); item.rotation(initial_rot + rot); setInitialPosition(item); double of = 0.; - if ((of = overfit(item.transformedShape(), bin_)) < best_overfit) { + if ((of = overfit(item.transformedShape(), bin_)) + overlapWithVirtObject() < best_overfit) { best_overfit = of; best_tr = item.translation(); best_rot = item.rotation(); @@ -725,7 +753,8 @@ private: global_score = 0.2; item.rotation(best_rot); item.translation(best_tr); - } else { + } + if (can_pack == false) { Pile merged_pile = merged_pile_; @@ -1086,13 +1115,33 @@ private: auto d = cb - ci; - // BBS TODO we assume the exclude region contains bottom left corner. If not, change the code below - if (!config_.m_excluded_regions.empty()) { // do not move to left to much to avoid clash with excluded regions - if (d.x() < 0) { - d.x() = 0;// std::max(long(d.x()), long(bbin.maxCorner().x() - bb.maxCorner().x())); + // BBS make sure the item won't clash with excluded regions + if(1) + { + std::vector objs,excludes; + for (const Item &item : items_) { + if (item.isFixed()) continue; + objs.push_back(item.transformedShape()); } - if (d.y() < 0) { - d.y() = 0;// std::max(long(d.y()), long(bbin.maxCorner().y() - bb.maxCorner().y())); + RawShape objs_convex_hull = sl::convexHull(objs); + if (objs.size() != 0) { + for (const Item &item : config_.m_excluded_regions) { excludes.push_back(item.transformedShape()); } + for (const Item &item : items_) { + if (item.isFixed()) { excludes.push_back(item.transformedShape()); } + } + Box binbb = sl::boundingBox(bin_); + auto allowShifts = calcnfp(objs_convex_hull, excludes, binbb, Lvl()); + int maxAllowShiftX = 0; + int maxAllowShiftY = 0; + for (const auto &shiftShape : allowShifts) { + auto shiftBox = sl::boundingBox(shiftShape); // assume that the exclude region is box so that the nfp is box. + maxAllowShiftX = shiftBox.width(); + maxAllowShiftY = shiftBox.height(); + } + int finalShiftX = std::min(std::abs(maxAllowShiftX), std::abs(d.x())); + int finalShiftY = std::min(std::abs(maxAllowShiftY), std::abs(d.y())); + d.x() = d.x() > 0 ? finalShiftX : -finalShiftX; + d.y() = d.y() > 0 ? finalShiftY : -finalShiftY; } } for(Item& item : items_) @@ -1104,7 +1153,10 @@ private: Box bb = item.boundingBox(); Vertex ci, cb; - auto bbin = sl::boundingBox(bin_); + Box bbin = sl::boundingBox(bin_); + Vertex shrink(10, 10); + bbin.maxCorner() -= shrink; + bbin.minCorner() += shrink; switch(config_.starting_point) { case Config::Alignment::CENTER: { diff --git a/src/libslic3r/Arrange.cpp b/src/libslic3r/Arrange.cpp index 22e9147b64..ca462269b4 100644 --- a/src/libslic3r/Arrange.cpp +++ b/src/libslic3r/Arrange.cpp @@ -85,7 +85,7 @@ const double BIG_ITEM_TRESHOLD = 0.02; template void fill_config(PConf& pcfg, const ArrangeParams ¶ms) { - if (params.is_seq_print || params.excluded_regions.empty()==false) { + if (params.is_seq_print) { // Align the arranged pile into the center of the bin pcfg.alignment = PConf::Alignment::CENTER; // Start placing the items from the center of the print bed @@ -95,7 +95,7 @@ void fill_config(PConf& pcfg, const ArrangeParams ¶ms) { // Align the arranged pile into the center of the bin pcfg.alignment = PConf::Alignment::CENTER; // Start placing the items from the center of the print bed - pcfg.starting_point = PConf::Alignment::CENTER; + pcfg.starting_point = PConf::Alignment::TOP_RIGHT; } // Try 4 angles (45 degree step) and find the one with min cost From bde527f6e1e4711c57dd875836d59a941b9fa5f0 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Fri, 7 Apr 2023 16:46:20 +0800 Subject: [PATCH 251/339] FIX: mac command key display Change-Id: Ida9f41e7c05a414122176893dafaf150c460d458 --- src/slic3r/GUI/KBShortcutsDialog.cpp | 5 +++++ src/slic3r/GUI/MainFrame.cpp | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp index 318714c5e8..70a87b2ce7 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.cpp +++ b/src/slic3r/GUI/KBShortcutsDialog.cpp @@ -183,7 +183,12 @@ void KBShortcutsDialog::fill_shortcuts() // Slice plate { ctrl + "R", L("Slice plate")}, // Send to Print +#ifdef __APPLE__ + { L("⌘+Shift+G"), L("Print plate")}, +#else { L("Ctrl+Shift+G"), L("Print plate")}, +#endif // __APPLE + // Edit { ctrl + "X", L("Cut") }, { ctrl + "C", L("Copy to clipboard") }, diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index cb80ca66a5..9b2cf21069 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -1974,7 +1974,7 @@ static void add_common_publish_menu_items(wxMenu* publish_menu, MainFrame* mainF static void add_common_view_menu_items(wxMenu* view_menu, MainFrame* mainFrame, std::function can_change_view) { - const std::string& ctrl = GUI::shortkey_ctrl_prefix(); + const wxString ctrl = _L("Ctrl+"); // The camera control accelerators are captured by GLCanvas3D::on_char(). append_menu_item(view_menu, wxID_ANY, _L("Default View") + "\t" + ctrl + "0", _L("Default View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("plate"); @@ -2005,7 +2005,7 @@ void MainFrame::init_menubar_as_editor() m_menubar = new wxMenuBar(); #endif - const std::string& ctrl = GUI::shortkey_ctrl_prefix(); + const wxString ctrl = _L("Ctrl+"); // File menu wxMenu* fileMenu = new wxMenu; From 1cb64c15a0aca4937c28c6f9fdc8cb76c00d9155 Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Sat, 8 Apr 2023 16:01:47 +0800 Subject: [PATCH 252/339] ENH: translation: update some translate of Chinese Change-Id: I998eaf77853debdceb95172eb3d0ff3d44916c44 --- bbl/i18n/BambuStudio.pot | 15 ++++++-------- bbl/i18n/de/BambuStudio_de.po | 22 ++++++++++---------- bbl/i18n/en/BambuStudio_en.po | 18 ++++++++--------- bbl/i18n/es/BambuStudio_es.po | 21 +++++++++---------- bbl/i18n/fr/BambuStudio_fr.po | 22 ++++++++++---------- bbl/i18n/hu/BambuStudio_hu.po | 18 ++++++++--------- bbl/i18n/it/BambuStudio_it.po | 22 ++++++++++---------- bbl/i18n/ja/BambuStudio_ja.po | 18 ++++++++--------- bbl/i18n/nl/BambuStudio_nl.po | 18 ++++++++--------- bbl/i18n/sv/BambuStudio_sv.po | 18 ++++++++--------- bbl/i18n/zh_cn/BambuStudio_zh_CN.po | 30 ++++++++++++++++++---------- resources/i18n/de/BambuStudio.mo | Bin 233354 -> 233194 bytes resources/i18n/en/BambuStudio.mo | Bin 213867 -> 213731 bytes resources/i18n/es/BambuStudio.mo | Bin 233344 -> 233188 bytes resources/i18n/fr/BambuStudio.mo | Bin 239338 -> 239178 bytes resources/i18n/hu/BambuStudio.mo | Bin 226870 -> 226734 bytes resources/i18n/it/BambuStudio.mo | Bin 229274 -> 229116 bytes resources/i18n/ja/BambuStudio.mo | Bin 222848 -> 222681 bytes resources/i18n/nl/BambuStudio.mo | Bin 230164 -> 230020 bytes resources/i18n/sv/BambuStudio.mo | Bin 220141 -> 220000 bytes resources/i18n/zh_cn/BambuStudio.mo | Bin 212422 -> 212019 bytes 21 files changed, 114 insertions(+), 108 deletions(-) diff --git a/bbl/i18n/BambuStudio.pot b/bbl/i18n/BambuStudio.pot index a49f1fa0e6..acfc5097c6 100644 --- a/bbl/i18n/BambuStudio.pot +++ b/bbl/i18n/BambuStudio.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-06 19:20+0800\n" +"POT-Creation-Date: 2023-04-08 15:59+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1637,9 +1637,6 @@ msgstr "" msgid "Please log out and login to the printer again." msgstr "" -msgid "Failed uploading print file. Please enter ip address again." -msgstr "" - msgid "Choose SLA archive:" msgstr "" @@ -4654,9 +4651,6 @@ msgstr "" msgid "(LAN)" msgstr "" -msgid "Search" -msgstr "" - msgid "My Device" msgstr "" @@ -5379,6 +5373,9 @@ msgstr "" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "" +msgid "⌘+Shift+G" +msgstr "" + msgid "Ctrl+Shift+G" msgstr "" @@ -6326,8 +6323,8 @@ msgid "Brim type" msgstr "" msgid "" -"This controls the generation of the brim at outer side of models. Auto means " -"the brim width is analysed and calculated automatically." +"This controls the generation of the brim at outer and/or inner side of " +"models. Auto means the brim width is analysed and calculated automatically." msgstr "" msgid "Outer brim only" diff --git a/bbl/i18n/de/BambuStudio_de.po b/bbl/i18n/de/BambuStudio_de.po index c81081d7d0..6a649f226a 100644 --- a/bbl/i18n/de/BambuStudio_de.po +++ b/bbl/i18n/de/BambuStudio_de.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-06 19:20+0800\n" +"POT-Creation-Date: 2023-04-08 15:59+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1712,11 +1712,6 @@ msgstr "" msgid "Please log out and login to the printer again." msgstr "Bitte loggen Sie sich aus und melden Sie sich erneut am Drucker an." -msgid "Failed uploading print file. Please enter ip address again." -msgstr "" -"Hochladen der Druckdatei fehlgeschlagen. Bitte geben Sie die IP-Adresse " -"erneut ein." - msgid "Choose SLA archive:" msgstr "" @@ -4990,9 +4985,6 @@ msgstr "Offline" msgid "(LAN)" msgstr "" -msgid "Search" -msgstr "" - msgid "My Device" msgstr "Mein Gerät" @@ -5835,6 +5827,9 @@ msgstr "Liste der Objekte" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "" +msgid "⌘+Shift+G" +msgstr "" + msgid "Ctrl+Shift+G" msgstr "" @@ -6930,8 +6925,8 @@ msgid "Brim type" msgstr "Randtyp" msgid "" -"This controls the generation of the brim at outer side of models. Auto means " -"the brim width is analysed and calculated automatically." +"This controls the generation of the brim at outer and/or inner side of " +"models. Auto means the brim width is analysed and calculated automatically." msgstr "" msgid "Outer brim only" @@ -9275,6 +9270,11 @@ msgstr "" "Wussten Sie, dass Sie die Festigkeit des Modells durch mehr Wandschleifen " "und eine höhere Dichte der Füllung verbessern können?" +#~ msgid "Failed uploading print file. Please enter ip address again." +#~ msgstr "" +#~ "Hochladen der Druckdatei fehlgeschlagen. Bitte geben Sie die IP-Adresse " +#~ "erneut ein." + #~ msgid "\\u2103" #~ msgstr "\\u2103" diff --git a/bbl/i18n/en/BambuStudio_en.po b/bbl/i18n/en/BambuStudio_en.po index ef48a35f93..f03fc329cf 100644 --- a/bbl/i18n/en/BambuStudio_en.po +++ b/bbl/i18n/en/BambuStudio_en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-06 19:20+0800\n" +"POT-Creation-Date: 2023-04-08 15:59+0800\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1671,9 +1671,6 @@ msgstr "A MicroSD card needs to be inserted before sending to printer." msgid "Please log out and login to the printer again." msgstr "Please log out and login to the printer again." -msgid "Failed uploading print file. Please enter ip address again." -msgstr "Failed uploading print file. Please enter IP address again." - msgid "Choose SLA archive:" msgstr "" @@ -4886,9 +4883,6 @@ msgstr "Offline" msgid "(LAN)" msgstr "" -msgid "Search" -msgstr "" - msgid "My Device" msgstr "My Device" @@ -5695,6 +5689,9 @@ msgstr "Objects list" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "" +msgid "⌘+Shift+G" +msgstr "" + msgid "Ctrl+Shift+G" msgstr "" @@ -6756,8 +6753,8 @@ msgid "Brim type" msgstr "Brim type" msgid "" -"This controls the generation of the brim at outer side of models. Auto means " -"the brim width is analysed and calculated automatically." +"This controls the generation of the brim at outer and/or inner side of " +"models. Auto means the brim width is analysed and calculated automatically." msgstr "" msgid "Outer brim only" @@ -9044,6 +9041,9 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" +#~ msgid "Failed uploading print file. Please enter ip address again." +#~ msgstr "Failed uploading print file. Please enter IP address again." + #~ msgid "\\u2103" #~ msgstr "\\u2103" diff --git a/bbl/i18n/es/BambuStudio_es.po b/bbl/i18n/es/BambuStudio_es.po index c68d5c06e2..b233558870 100644 --- a/bbl/i18n/es/BambuStudio_es.po +++ b/bbl/i18n/es/BambuStudio_es.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-06 19:20+0800\n" +"POT-Creation-Date: 2023-04-08 15:59+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1707,10 +1707,6 @@ msgstr "Se debe insertar una tarjeta microSD antes de enviar a la impresora." msgid "Please log out and login to the printer again." msgstr "Cierre sesión y vuelva a iniciarla en la impresora." -msgid "Failed uploading print file. Please enter ip address again." -msgstr "" -"Error al cargar el archivo de impresión. Vuelva a introducir la dirección IP." - msgid "Choose SLA archive:" msgstr "" @@ -4975,9 +4971,6 @@ msgstr "Fuera de línea" msgid "(LAN)" msgstr "" -msgid "Search" -msgstr "" - msgid "My Device" msgstr "Mi dispositivo" @@ -5806,6 +5799,9 @@ msgstr "Lista de objetos" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "" +msgid "⌘+Shift+G" +msgstr "" + msgid "Ctrl+Shift+G" msgstr "" @@ -6903,8 +6899,8 @@ msgid "Brim type" msgstr "Tipo de balsa" msgid "" -"This controls the generation of the brim at outer side of models. Auto means " -"the brim width is analysed and calculated automatically." +"This controls the generation of the brim at outer and/or inner side of " +"models. Auto means the brim width is analysed and calculated automatically." msgstr "" msgid "Outer brim only" @@ -9240,6 +9236,11 @@ msgstr "" "¿Sabía que puede utilizar más bucles de pared y una densidad de relleno " "dispersa más alta para mejorar la resistencia del modelo?" +#~ msgid "Failed uploading print file. Please enter ip address again." +#~ msgstr "" +#~ "Error al cargar el archivo de impresión. Vuelva a introducir la dirección " +#~ "IP." + #~ msgid "\\u2103" #~ msgstr "\\ u2103" diff --git a/bbl/i18n/fr/BambuStudio_fr.po b/bbl/i18n/fr/BambuStudio_fr.po index b59424f5db..05a2e81b80 100644 --- a/bbl/i18n/fr/BambuStudio_fr.po +++ b/bbl/i18n/fr/BambuStudio_fr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-06 19:20+0800\n" +"POT-Creation-Date: 2023-04-08 15:59+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1706,11 +1706,6 @@ msgstr "Une carte microSD doit être insérée avant l'envoi à l'imprimante." msgid "Please log out and login to the printer again." msgstr "Veuillez vous déconnecter et vous reconnecter à l'imprimante." -msgid "Failed uploading print file. Please enter ip address again." -msgstr "" -"Impossible de téléverser le fichier d'impression. Entrez à nouveau l'adresse " -"IP." - msgid "Choose SLA archive:" msgstr "" @@ -4971,9 +4966,6 @@ msgstr "Hors ligne" msgid "(LAN)" msgstr "" -msgid "Search" -msgstr "" - msgid "My Device" msgstr "Mon appareil" @@ -5817,6 +5809,9 @@ msgstr "Liste des objets" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "" +msgid "⌘+Shift+G" +msgstr "" + msgid "Ctrl+Shift+G" msgstr "" @@ -6920,8 +6915,8 @@ msgid "Brim type" msgstr "Type de bordure" msgid "" -"This controls the generation of the brim at outer side of models. Auto means " -"the brim width is analysed and calculated automatically." +"This controls the generation of the brim at outer and/or inner side of " +"models. Auto means the brim width is analysed and calculated automatically." msgstr "" msgid "Outer brim only" @@ -9282,6 +9277,11 @@ msgstr "" "Saviez-vous que vous pouvez définir un plus grand nombre de mur et une " "densité de remplissage plus élevée pour améliorer la résistance du modèle ?" +#~ msgid "Failed uploading print file. Please enter ip address again." +#~ msgstr "" +#~ "Impossible de téléverser le fichier d'impression. Entrez à nouveau " +#~ "l'adresse IP." + #~ msgid "\\u2103" #~ msgstr "\\u2103" diff --git a/bbl/i18n/hu/BambuStudio_hu.po b/bbl/i18n/hu/BambuStudio_hu.po index 604f48dec0..4624cb0210 100644 --- a/bbl/i18n/hu/BambuStudio_hu.po +++ b/bbl/i18n/hu/BambuStudio_hu.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-06 19:20+0800\n" +"POT-Creation-Date: 2023-04-08 15:59+0800\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1695,9 +1695,6 @@ msgstr "A MicroSD card needs to be inserted before sending to printer." msgid "Please log out and login to the printer again." msgstr "Please log out and login to the printer again." -msgid "Failed uploading print file. Please enter ip address again." -msgstr "Failed uploading print file. Please enter IP address again." - msgid "Choose SLA archive:" msgstr "" @@ -4918,9 +4915,6 @@ msgstr "Offline" msgid "(LAN)" msgstr "" -msgid "Search" -msgstr "" - msgid "My Device" msgstr "Saját eszköz" @@ -5736,6 +5730,9 @@ msgstr "Objektumok listája" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "" +msgid "⌘+Shift+G" +msgstr "" + msgid "Ctrl+Shift+G" msgstr "" @@ -6813,8 +6810,8 @@ msgid "Brim type" msgstr "Perem típusa" msgid "" -"This controls the generation of the brim at outer side of models. Auto means " -"the brim width is analysed and calculated automatically." +"This controls the generation of the brim at outer and/or inner side of " +"models. Auto means the brim width is analysed and calculated automatically." msgstr "" msgid "Outer brim only" @@ -9123,6 +9120,9 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" +#~ msgid "Failed uploading print file. Please enter ip address again." +#~ msgstr "Failed uploading print file. Please enter IP address again." + #~ msgid "\\u2103" #~ msgstr "\\u2103" diff --git a/bbl/i18n/it/BambuStudio_it.po b/bbl/i18n/it/BambuStudio_it.po index 19512ea44d..0970e864bd 100644 --- a/bbl/i18n/it/BambuStudio_it.po +++ b/bbl/i18n/it/BambuStudio_it.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-06 19:20+0800\n" +"POT-Creation-Date: 2023-04-08 15:59+0800\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1696,11 +1696,6 @@ msgstr "" msgid "Please log out and login to the printer again." msgstr "Fai un logout e rieffettua il login alla stampante." -msgid "Failed uploading print file. Please enter ip address again." -msgstr "" -"Caricamento del file di stampa non riuscito. Inserisci nuovamente " -"l'indirizzo IP." - msgid "Choose SLA archive:" msgstr "" @@ -4949,9 +4944,6 @@ msgstr "Off-line" msgid "(LAN)" msgstr "" -msgid "Search" -msgstr "" - msgid "My Device" msgstr "Mio dispositivo" @@ -5778,6 +5770,9 @@ msgstr "Elenco oggetti" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "" +msgid "⌘+Shift+G" +msgstr "" + msgid "Ctrl+Shift+G" msgstr "" @@ -6873,8 +6868,8 @@ msgid "Brim type" msgstr "Tipo di brim" msgid "" -"This controls the generation of the brim at outer side of models. Auto means " -"the brim width is analysed and calculated automatically." +"This controls the generation of the brim at outer and/or inner side of " +"models. Auto means the brim width is analysed and calculated automatically." msgstr "" msgid "Outer brim only" @@ -9216,6 +9211,11 @@ msgstr "" "Sapevate che è possibile utilizzare un maggior numero di anelli a parete e " "una maggiore densità riempimento per migliorare la resistenza del modello?" +#~ msgid "Failed uploading print file. Please enter ip address again." +#~ msgstr "" +#~ "Caricamento del file di stampa non riuscito. Inserisci nuovamente " +#~ "l'indirizzo IP." + #~ msgid "\\u2103" #~ msgstr "\\u2103" diff --git a/bbl/i18n/ja/BambuStudio_ja.po b/bbl/i18n/ja/BambuStudio_ja.po index efc59b543a..76c8240a91 100644 --- a/bbl/i18n/ja/BambuStudio_ja.po +++ b/bbl/i18n/ja/BambuStudio_ja.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-06 19:20+0800\n" +"POT-Creation-Date: 2023-04-08 15:59+0800\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1656,9 +1656,6 @@ msgstr "SDカードが必要です" msgid "Please log out and login to the printer again." msgstr "一旦サインアウトし、再度サインインしてください" -msgid "Failed uploading print file. Please enter ip address again." -msgstr "造型ファイルをアップロードできませんでした、ご確認ください。" - msgid "Choose SLA archive:" msgstr "" @@ -4789,9 +4786,6 @@ msgstr "オフライン" msgid "(LAN)" msgstr "" -msgid "Search" -msgstr "" - msgid "My Device" msgstr "私のデバイス" @@ -5554,6 +5548,9 @@ msgstr "オブジェクト一覧" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "" +msgid "⌘+Shift+G" +msgstr "" + msgid "Ctrl+Shift+G" msgstr "" @@ -6569,8 +6566,8 @@ msgid "Brim type" msgstr "ブリムタイプ" msgid "" -"This controls the generation of the brim at outer side of models. Auto means " -"the brim width is analysed and calculated automatically." +"This controls the generation of the brim at outer and/or inner side of " +"models. Auto means the brim width is analysed and calculated automatically." msgstr "" msgid "Outer brim only" @@ -8712,6 +8709,9 @@ msgstr "" "強度の向上\n" "壁面層数やインフィルの充填密度を増やして造形強度を向上できます。" +#~ msgid "Failed uploading print file. Please enter ip address again." +#~ msgstr "造型ファイルをアップロードできませんでした、ご確認ください。" + #~ msgid "\\u2103" #~ msgstr "u2103" diff --git a/bbl/i18n/nl/BambuStudio_nl.po b/bbl/i18n/nl/BambuStudio_nl.po index bf91c1380a..f4b432a035 100644 --- a/bbl/i18n/nl/BambuStudio_nl.po +++ b/bbl/i18n/nl/BambuStudio_nl.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-06 19:20+0800\n" +"POT-Creation-Date: 2023-04-08 15:59+0800\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1705,9 +1705,6 @@ msgstr "" msgid "Please log out and login to the printer again." msgstr "Log uit en log opnieuw in op de printer." -msgid "Failed uploading print file. Please enter ip address again." -msgstr "Uploaden van printbestand is mislukt. Voer het IP-adres opnieuw in." - msgid "Choose SLA archive:" msgstr "" @@ -4979,9 +4976,6 @@ msgstr "Offline" msgid "(LAN)" msgstr "" -msgid "Search" -msgstr "" - msgid "My Device" msgstr "Mijn apparaat" @@ -5818,6 +5812,9 @@ msgstr "Object lijst" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "" +msgid "⌘+Shift+G" +msgstr "" + msgid "Ctrl+Shift+G" msgstr "" @@ -6909,8 +6906,8 @@ msgid "Brim type" msgstr "Rand type" msgid "" -"This controls the generation of the brim at outer side of models. Auto means " -"the brim width is analysed and calculated automatically." +"This controls the generation of the brim at outer and/or inner side of " +"models. Auto means the brim width is analysed and calculated automatically." msgstr "" msgid "Outer brim only" @@ -9259,6 +9256,9 @@ msgstr "" "Wist je dat je meer wandlussen en een hogere dunne invuldichtheid kunt " "gebruiken om de sterkte van het model te verbeteren?" +#~ msgid "Failed uploading print file. Please enter ip address again." +#~ msgstr "Uploaden van printbestand is mislukt. Voer het IP-adres opnieuw in." + #~ msgid "\\u2103" #~ msgstr "\\ u2103" diff --git a/bbl/i18n/sv/BambuStudio_sv.po b/bbl/i18n/sv/BambuStudio_sv.po index 1038c28f89..2af4db12df 100644 --- a/bbl/i18n/sv/BambuStudio_sv.po +++ b/bbl/i18n/sv/BambuStudio_sv.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-06 19:20+0800\n" +"POT-Creation-Date: 2023-04-08 15:59+0800\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1683,9 +1683,6 @@ msgstr "Ett Micro SD-kort måste sättas i innan det skickas till skrivaren." msgid "Please log out and login to the printer again." msgstr "Logga ut och logga in på skrivaren igen." -msgid "Failed uploading print file. Please enter ip address again." -msgstr "Det gick inte att ladda upp utskriftsfilen. Ange IP-adress igen." - msgid "Choose SLA archive:" msgstr "" @@ -4901,9 +4898,6 @@ msgstr "Offline" msgid "(LAN)" msgstr "" -msgid "Search" -msgstr "" - msgid "My Device" msgstr "Min Enhet" @@ -5722,6 +5716,9 @@ msgstr "Objektlista" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "" +msgid "⌘+Shift+G" +msgstr "" + msgid "Ctrl+Shift+G" msgstr "" @@ -6770,8 +6767,8 @@ msgid "Brim type" msgstr "Brim typ" msgid "" -"This controls the generation of the brim at outer side of models. Auto means " -"the brim width is analysed and calculated automatically." +"This controls the generation of the brim at outer and/or inner side of " +"models. Auto means the brim width is analysed and calculated automatically." msgstr "" msgid "Outer brim only" @@ -9060,6 +9057,9 @@ msgstr "" "Visste du att du kan använda fler väggslingor och högre gles fyllningstäthet " "för att förbättra modellens styrka?" +#~ msgid "Failed uploading print file. Please enter ip address again." +#~ msgstr "Det gick inte att ladda upp utskriftsfilen. Ange IP-adress igen." + #~ msgid "\\u2103" #~ msgstr "\\u2103" diff --git a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po index e83a081d18..2ba2579fcd 100644 --- a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po +++ b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-06 19:20+0800\n" +"POT-Creation-Date: 2023-04-08 15:59+0800\n" "PO-Revision-Date: 2023-03-29 12:43+0800\n" "Last-Translator: Jiang Yue \n" "Language-Team: \n" @@ -1650,9 +1650,6 @@ msgstr "需要插入SD卡后方可发送到打印机。" msgid "Please log out and login to the printer again." msgstr "请先退出登录然后再重新登录打印机。" -msgid "Failed uploading print file. Please enter ip address again." -msgstr "上传打印文件失败,请重新输入IP地址。" - msgid "Choose SLA archive:" msgstr "" @@ -4028,7 +4025,7 @@ msgid "The Config can not be loaded." msgstr "配置无法加载。" msgid "The 3mf is generated by old Bambu Studio, load geometry data only." -msgstr "该3mf文件来自旧版本的Bambu Lab,将只加载几何数据。" +msgstr "该3mf文件来自旧版本的Bambu Studio,将只加载几何数据。" #, c-format, boost-format msgid "" @@ -4769,9 +4766,6 @@ msgstr "离线" msgid "(LAN)" msgstr "(局域网)" -msgid "Search" -msgstr "搜索" - msgid "My Device" msgstr "我的设备" @@ -5529,6 +5523,9 @@ msgstr "对象列表" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "从STL/STEP/3MF/OBJ/AMF文件中导入几何数据" +msgid "⌘+Shift+G" +msgstr "" + msgid "Ctrl+Shift+G" msgstr "" @@ -6501,9 +6498,9 @@ msgid "Brim type" msgstr "Brim类型" msgid "" -"This controls the generation of the brim at outer side of models. Auto means " -"the brim width is analysed and calculated automatically." -msgstr "设置外墙brim的生成方式,选择自动意味着brim的宽度会被自动分析计算。" +"This controls the generation of the brim at outer and/or inner side of " +"models. Auto means the brim width is analysed and calculated automatically." +msgstr "" msgid "Outer brim only" msgstr "仅外侧" @@ -8612,6 +8609,17 @@ msgstr "" "提高强度\n" "你知道吗?你可以使用更多的墙层数和更高的疏散填充密度来提高模型的强度。" +#~ msgid "Failed uploading print file. Please enter ip address again." +#~ msgstr "上传打印文件失败,请重新输入IP地址。" + +#~ msgid "Search" +#~ msgstr "搜索" + +#~ msgid "" +#~ "This controls the generation of the brim at outer side of models. Auto " +#~ "means the brim width is analysed and calculated automatically." +#~ msgstr "设置外墙brim的生成方式,选择自动意味着brim的宽度会被自动分析计算。" + #~ msgid "AMS settings are not supported for external spool" #~ msgstr "AMS设置对外置料盘无效" diff --git a/resources/i18n/de/BambuStudio.mo b/resources/i18n/de/BambuStudio.mo index 319a344438f0cf6087b003c8ca0f7c551c92f079..f347bcd89f06ae6228000722291596e4118aee9f 100644 GIT binary patch delta 46919 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 I(+2PV0d$p2O8@`> delta 47043 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

  • O-U=%NOgA!q#!UE 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 delta 47007 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
  • Q0C!#T&Jc^i%jvKzP z1Yc=6zmHBmJW+e^gC)@$ zZWQe@TV|-@JQ(+t;m7nceHpGPwuy-`Y`6#iFuk4ne()pzj-D&LWhi%na~YqH=Yq|n zH-wpR)hi2U1Nk*P%*{j>YicCy_N?#+k`M7EDt*ydw%gOYF~iY#I~AynfZfX2#!Y_o zEARkqjoZ7;!M#9Rq0tW7OwJIit&h<`CteY^(|dyIcoajJ7TW?AW(4MYTArdX4WFzE zJK5o_yYDgm24AC>z9x4@DMtHGbelhl+sHS7AJ+}Cr6c^IV2NO-m>UCUf@(?s1fK>- zG|4khfmn$nGAN!y@?xk2`C<+d`;uN)@X{*q4*V0%!|7EgkJjb8;MZgMK(H8k{@_mN ze`5p}xc7gJ>Htnj#=izl#{bYQ_n8_^?#a~eM7TA}(fZoLAh)adC-W@uR(BVq+8I#*X!h n85$Em(kJDF*{R@!+4-CH8Jo;bp8w>BhW~?K5Yg9p!Gr$+vZWX2 diff --git a/resources/i18n/es/BambuStudio.mo b/resources/i18n/es/BambuStudio.mo index 2064891364d7b479669eb3de3c50918786025301..60a52a10d0aee48f2daac107a0a95f2d35ccc37d 100644 GIT binary patch delta 46903 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 diff --git a/resources/i18n/ja/BambuStudio.mo b/resources/i18n/ja/BambuStudio.mo index 55ad2aa18e3e67cb07713b9d0f428c34ee1a411c..5eaffdf5725b3e8cc88398f3a5f542a86353a400 100644 GIT binary patch delta 46915 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 delta 46989 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 GtoT2c^;m}h diff --git a/resources/i18n/nl/BambuStudio.mo b/resources/i18n/nl/BambuStudio.mo index d53fc0371c57cbb4d5bb1b73feff7a4b0ceac175..e27f562e67d761341bed31db97299cbbdd4c1627 100644 GIT binary patch delta 46919 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 CNDCqW delta 47015 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 G{P_<(N;ste diff --git a/resources/i18n/zh_cn/BambuStudio.mo b/resources/i18n/zh_cn/BambuStudio.mo index 685fb2d56309f2ecf46130f6be467742c5097ded..ac780c8f7bee7161991d22088c15b1e4cc956564 100644 GIT binary patch delta 49231 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 delta 49596 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 From 67d95d3fc8883b742360fbb80cbbe81061e7abdc Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Fri, 7 Apr 2023 11:45:55 +0800 Subject: [PATCH 253/339] ENH: add protect logic in post_init to check opengl resource when the opengl context not ready postpone the GLCanvas3D's init Change-Id: I68b9d70f08e4ba0076a64aca59612a3f613070ff (cherry picked from commit 446a384dcc74af8184ee0a1af6668626d13413e9) --- src/slic3r/GUI/GUI_App.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 1ea1ea8724..fd2337298b 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1000,7 +1000,7 @@ void GUI_App::post_init() BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", init with input files, size %1%, input_gcode %2%") %this->init_params->input_files.size() %this->init_params->input_gcode; - + if (this->init_params->input_files.size() == 1 && boost::starts_with(this->init_params->input_files.front(), "bambustudio://open")) { @@ -1054,9 +1054,9 @@ void GUI_App::post_init() mainframe->select_tab(size_t(MainFrame::tp3DEditor)); plater_->select_view_3D("3D"); //BBS init the opengl resource here -#ifdef __linux__ +//#ifdef __linux__ if (plater_->canvas3D()->get_wxglcanvas()->IsShownOnScreen()&&plater_->canvas3D()->make_current_for_postinit()) { -#endif +//#endif Size canvas_size = plater_->canvas3D()->get_canvas_size(); wxGetApp().imgui()->set_display_size(static_cast(canvas_size.get_width()), static_cast(canvas_size.get_height())); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", start to init opengl"; @@ -1076,9 +1076,12 @@ void GUI_App::post_init() plater_->canvas3D()->render(false); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ", finished rendering a first frame for test"; } -#ifdef __linux__ +//#ifdef __linux__ } -#endif + else { + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << "Found glcontext not ready, postpone the init"; + } +//#endif if (is_editor()) mainframe->select_tab(size_t(0)); mainframe->Thaw(); @@ -5701,7 +5704,7 @@ void GUI_App::open_mall_page_dialog() host_url = get_model_http_url(app_config->get_country_code()); //model url - + wxString language_code = this->current_language_code().BeforeFirst('_'); model_url = language_code.ToStdString(); @@ -5715,7 +5718,7 @@ void GUI_App::open_mall_page_dialog() if(result == 0){ link_url = host_url + "api/sign-in/ticket?to=" + host_url + url_encode(model_url) + "&ticket=" + ticket; } - } + } } if (result < 0) { From dd473bdc3f0953b14a3d2a9433d7e043cf8ada96 Mon Sep 17 00:00:00 2001 From: manch1n Date: Fri, 7 Apr 2023 21:52:59 +0800 Subject: [PATCH 254/339] FIX: avoid wipe tower conflict with objects Use a more accurate way to estimate wipe tower: 1. read wipe configure from front-end (the positions may be different at different plates). 2. when depth is unavailable, use all materials to estimate depth (the estimated wipe tower may be larger than the actual generated one). Change-Id: I42ffd03d9817b57f5023a6820cda0032509c6fe5 (cherry picked from commit 77ba9757023afb9160c996eeea6ead8a27b50ce4) --- .../include/libnest2d/placers/nfpplacer.hpp | 32 +++++++------------ src/libslic3r/Arrange.cpp | 10 +++--- src/libslic3r/Model.cpp | 12 ++++--- src/slic3r/GUI/GLCanvas3D.cpp | 30 +++++++++++++++++ src/slic3r/GUI/GLCanvas3D.hpp | 3 ++ src/slic3r/GUI/Jobs/ArrangeJob.cpp | 19 ++++++++--- 6 files changed, 71 insertions(+), 35 deletions(-) diff --git a/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp b/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp index 56aa3fdd80..863dcb43cd 100644 --- a/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp +++ b/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp @@ -1064,27 +1064,9 @@ private: if (!item.is_virt_object) bb = sl::boundingBox(item.boundingBox(), bb); - // if move to center is infeasible, move to topright corner instead - auto alignment = config_.alignment; - if (!config_.m_excluded_regions.empty() && alignment== Config::Alignment::CENTER) { - Box bb2 = bb; - auto d = bbin.center() - bb2.center(); - d.x() = std::max(d.x(), 0); - d.y() = std::max(d.y(), 0); - bb2.minCorner() += d; - bb2.maxCorner() += d; - for (auto& region : config_.m_excluded_regions) { - auto region_bb = region.boundingBox(); - if (bb2.intersection(region_bb).area()>0) { - alignment = Config::Alignment::TOP_RIGHT; - break; - } - } - } - Vertex ci, cb; - switch(alignment) { + switch(config_.alignment) { case Config::Alignment::CENTER: { ci = bb.center(); cb = bbin.center(); @@ -1118,6 +1100,13 @@ private: // BBS make sure the item won't clash with excluded regions if(1) { + // do we have wipe tower after arranging? + std::set extruders; + for (const Item& item : items_) { + if (!item.is_virt_object) { extruders.insert(item.extrude_ids.begin(), item.extrude_ids.end()); } + } + bool need_wipe_tower = extruders.size() > 1; + std::vector objs,excludes; for (const Item &item : items_) { if (item.isFixed()) continue; @@ -1127,7 +1116,10 @@ private: if (objs.size() != 0) { for (const Item &item : config_.m_excluded_regions) { excludes.push_back(item.transformedShape()); } for (const Item &item : items_) { - if (item.isFixed()) { excludes.push_back(item.transformedShape()); } + if (item.isFixed()) { + if (!(item.is_wipe_tower && !need_wipe_tower)) + excludes.push_back(item.transformedShape()); + } } Box binbb = sl::boundingBox(bin_); auto allowShifts = calcnfp(objs_convex_hull, excludes, binbb, Lvl()); diff --git a/src/libslic3r/Arrange.cpp b/src/libslic3r/Arrange.cpp index ca462269b4..eeb385676a 100644 --- a/src/libslic3r/Arrange.cpp +++ b/src/libslic3r/Arrange.cpp @@ -545,11 +545,11 @@ public: auto binbb = sl::boundingBox(m_bin); // BBS: excluded region (virtual object but not wipe tower) should not affect final alignment - bool all_is_excluded_region = std::all_of(items.begin(), items.end(), [](Item &itm) { return itm.is_virt_object && !itm.is_wipe_tower; }); - if (!all_is_excluded_region) - cfg.alignment = PConfig::Alignment::DONT_ALIGN; - else - cfg.alignment = PConfig::Alignment::CENTER; + //bool all_is_excluded_region = std::all_of(items.begin(), items.end(), [](Item &itm) { return itm.is_virt_object && !itm.is_wipe_tower; }); + //if (!all_is_excluded_region) + // cfg.alignment = PConfig::Alignment::DONT_ALIGN; + //else + // cfg.alignment = PConfig::Alignment::CENTER; auto starting_point = cfg.starting_point == PConfig::Alignment::BOTTOM_LEFT ? binbb.minCorner() : binbb.center(); // if we have wipe tower, items should be arranged around wipe tower diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index f1031ee126..0af344e876 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -3360,18 +3360,20 @@ void ModelInstance::get_arrange_polygon(void *ap, const Slic3r::DynamicPrintConf return; } ret.extrude_ids = volume->get_extruders(); - if (ret.extrude_ids.empty()) //the default extruder - ret.extrude_ids.push_back(1); - // get per-object support extruders auto op = object->get_config_value(config_global, "enable_support"); bool is_support_enabled = op && op->getBool(); if (is_support_enabled) { auto op1 = object->get_config_value(config_global, "support_filament"); auto op2 = object->get_config_value(config_global, "support_interface_filament"); - if (op1) ret.extrude_ids.push_back(op1->getInt()); - if (op2) ret.extrude_ids.push_back(op2->getInt()); + int extruder_id; + // id==0 means follow previous material, so need not be recorded + if (op1 && (extruder_id = op1->getInt()) > 0) ret.extrude_ids.push_back(extruder_id); + if (op2 && (extruder_id = op2->getInt()) > 0) ret.extrude_ids.push_back(extruder_id); } + + if (ret.extrude_ids.empty()) //the default extruder + ret.extrude_ids.push_back(1); } indexed_triangle_set FacetsAnnotation::get_facets(const ModelVolume& mv, EnforcerBlockerType type) const diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 4aa80e0181..50224cdb96 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1718,6 +1718,36 @@ bool GLCanvas3D::make_current_for_postinit() { return _set_current(); } +Points GLCanvas3D::estimate_wipe_tower_points(int plate_index) const +{ + PartPlateList & ppl = wxGetApp().plater()->get_partplate_list(); + DynamicPrintConfig &proj_cfg = wxGetApp().preset_bundle->project_config; + auto & print = wxGetApp().plater()->get_partplate_list().get_current_fff_print(); + int plate_count = ppl.get_plate_count(); + float x = dynamic_cast(proj_cfg.option("wipe_tower_x"))->get_at(plate_index); + float y = dynamic_cast(proj_cfg.option("wipe_tower_y"))->get_at(plate_index); + if (plate_index >= plate_count) { plate_index = 0; } + float w = dynamic_cast(m_config->option("prime_tower_width"))->value; + float v = dynamic_cast(m_config->option("prime_volume"))->value; + Vec3d wipe_tower_size = ppl.get_plate(plate_index)->estimate_wipe_tower_size(w, v); + + if (wipe_tower_size(1) == 0) { + // when depth is unavailable (no items on this plate), we have to estimate the depth using the extruder number of all plates + std::set extruder_ids; + auto pl = ppl.get_plate_list(); + for (const auto& p : pl) { + auto es = p->get_extruders(); + extruder_ids.insert(es.begin(), es.end()); + } + int extruder_size = extruder_ids.size(); + wipe_tower_size(1) = extruder_size * print.wipe_tower_data(extruder_size).depth + 2 * print.wipe_tower_data().brim_width; + } + Vec3d plate_origin = ppl.get_plate(plate_index)->get_origin(); + Point wt_min_corner{scale_(x), scale_(y)}; + Point wt_max_corner(scale_(x + wipe_tower_size(0)), scale_(y + wipe_tower_size(1))); + return {wt_min_corner, {wt_max_corner.x(), wt_min_corner.y()}, wt_max_corner, {wt_min_corner.x(),wt_max_corner.y()}}; +} + void GLCanvas3D::render(bool only_init) { if (m_in_render) { diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 0325cf6e28..37f61d0713 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -1058,6 +1058,9 @@ public: bool make_current_for_postinit(); + //BBS + Points estimate_wipe_tower_points(int plate_index) const; + private: bool _is_shown_on_screen() const; diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index dc2a5016ca..b81b015168 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -241,9 +241,15 @@ void ArrangeJob::prepare_all() { } // 准备料塔。逻辑如下: -// 1. 如果料塔被禁用,或是逐件打印,则不需要料塔 -// 2. 以下两种情况需要料塔:1)某对象是多色对象;2)打开了支撑,且支撑体与接触面使用的是不同材料 -// 3. 如果允许不同材料落在相同盘,则以下情况也需要料塔:1)所有选定对象中使用了多种热床温度相同的材料(比如颜色不同的PLA) +// 1. 以下几种情况不需要料塔: +// 1)料塔被禁用, +// 2)逐件打印, +// 3)不允许不同材料落在相同盘,且没有多色对象 +// 2. 以下情况需要料塔: +// 1)某对象是多色对象; +// 2)打开了支撑,且支撑体与接触面使用的是不同材料 +// 3)允许不同材料落在相同盘,且所有选定对象中使用了多种热床温度相同的材料 +// (所有对象都是单色的,但不同对象的材料不同,例如:对象A使用红色PLA,对象B使用白色PLA) void ArrangeJob::prepare_wipe_tower() { bool need_wipe_tower = false; @@ -257,7 +263,7 @@ void ArrangeJob::prepare_wipe_tower() // need wipe tower if some object has multiple extruders (has paint-on colors or support material) for (const auto &item : m_selected) { std::set obj_extruders; - for (int id : item.extrude_ids) obj_extruders.insert(id); + obj_extruders.insert(item.extrude_ids.begin(), item.extrude_ids.end()); if (obj_extruders.size() > 1) { need_wipe_tower = true; BOOST_LOG_TRIVIAL(info) << "arrange: need wipe tower because object " << item.name << " has multiple extruders (has paint-on colors)"; @@ -266,6 +272,7 @@ void ArrangeJob::prepare_wipe_tower() } // if multile extruders have same bed temp, we need wipe tower + // 允许不同材料落在相同盘,且所有选定对象中使用了多种热床温度相同的材料 if (params.allow_multi_materials_on_same_plate) { std::map> bedTemp2extruderIds; for (const auto &item : m_selected) @@ -301,9 +308,11 @@ void ArrangeJob::prepare_wipe_tower() wipe_tower_ap.is_virt_object = true; wipe_tower_ap.is_wipe_tower = true; } - + const GLCanvas3D* canvas3D=static_cast(m_plater->canvas3D()); for (int bedid = 0; bedid < MAX_NUM_PLATES; bedid++) { if (!plates_have_wipe_tower[bedid]) { + wipe_tower_ap.translation = {0, 0}; + wipe_tower_ap.poly.contour.points = canvas3D->estimate_wipe_tower_points(bedid); wipe_tower_ap.bed_idx = bedid; m_unselected.emplace_back(wipe_tower_ap); } From 7ba23d7ec735beb0a0a6cab96010d5dee0f1cac9 Mon Sep 17 00:00:00 2001 From: gerrit Date: Mon, 10 Apr 2023 08:20:51 +0800 Subject: [PATCH 255/339] ci: update build version to 01.06.00.55 Change-Id: I8b1ba77a337e78f7e617dcd44edb16aef1a8fa9e --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index 9e6e8cf87c..277ec8970b 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.06.00.54") +set(SLIC3R_VERSION "01.06.00.55") From 466e17ea88a11183cc1c9a2fcad9c899884031d2 Mon Sep 17 00:00:00 2001 From: tao wang Date: Fri, 7 Apr 2023 19:20:02 +0800 Subject: [PATCH 256/339] FIX:fixed color picker display error in dark mode Change-Id: Id31d19d33f7ced0a89b5bc61b0d913554dc38be2 --- src/slic3r/GUI/AMSMaterialsSetting.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index d382787122..aeb75e212d 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -1046,7 +1046,7 @@ ColorPickerPopup::ColorPickerPopup(wxWindow* parent) wxBoxSizer* m_sizer_ams = new wxBoxSizer(wxHORIZONTAL); auto m_title_ams = new wxStaticText(m_def_color_box, wxID_ANY, _L("AMS"), wxDefaultPosition, wxDefaultSize, 0); m_title_ams->SetFont(::Label::Body_14); - m_title_ams->SetBackgroundColour(GetParent()->GetBackgroundColour()); + m_title_ams->SetBackgroundColour(wxColour(238, 238, 238)); m_sizer_ams->Add(m_title_ams, 0, wxALL, 5); auto ams_line = new wxPanel(m_def_color_box, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); ams_line->SetBackgroundColour(wxColour(0xCECECE)); @@ -1075,6 +1075,7 @@ ColorPickerPopup::ColorPickerPopup(wxWindow* parent) auto cp = new ColorPicker(m_def_color_box, wxID_ANY, wxDefaultPosition, wxDefaultSize); cp->set_color(col); cp->set_selected(false); + cp->SetBackgroundColour(wxColour(238, 238, 238)); m_color_pickers.push_back(cp); fg_sizer->Add(cp, 0, wxALL, FromDIP(3)); cp->Bind(wxEVT_LEFT_DOWN, [this, cp](auto& e) { @@ -1090,7 +1091,7 @@ ColorPickerPopup::ColorPickerPopup(wxWindow* parent) wxBoxSizer* m_sizer_other = new wxBoxSizer(wxHORIZONTAL); auto m_title_other = new wxStaticText(m_def_color_box, wxID_ANY, _L("Other color"), wxDefaultPosition, wxDefaultSize, 0); m_title_other->SetFont(::Label::Body_14); - m_title_other->SetBackgroundColour(GetParent()->GetBackgroundColour()); + m_title_other->SetBackgroundColour(wxColour(238, 238, 238)); m_sizer_other->Add(m_title_other, 0, wxALL, 5); auto other_line = new wxPanel(m_def_color_box, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); other_line->SetMinSize(wxSize(-1, 1)); @@ -1141,6 +1142,7 @@ void ColorPickerPopup::set_ams_colours(std::vector ams) auto cp = new ColorPicker(m_def_color_box, wxID_ANY, wxDefaultPosition, wxDefaultSize); cp->set_color(col); cp->set_selected(false); + cp->SetBackgroundColour(StateColor::darkModeColorFor(wxColour(238,238,238))); m_color_pickers.push_back(cp); m_ams_color_pickers.push_back(cp); m_ams_fg_sizer->Add(cp, 0, wxALL, FromDIP(3)); From 6887626313fe391cff0a41eec7239e7cf3cf6c2a Mon Sep 17 00:00:00 2001 From: tao wang Date: Fri, 7 Apr 2023 16:22:32 +0800 Subject: [PATCH 257/339] ENH:privacy agreement does not jump to local web pages Change-Id: I00be32922e1c6e2e0bbf69a6382e405dd8c2bf98 --- src/slic3r/GUI/PrivacyUpdateDialog.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/slic3r/GUI/PrivacyUpdateDialog.cpp b/src/slic3r/GUI/PrivacyUpdateDialog.cpp index 7cd85cfa4a..c04896236d 100644 --- a/src/slic3r/GUI/PrivacyUpdateDialog.cpp +++ b/src/slic3r/GUI/PrivacyUpdateDialog.cpp @@ -57,12 +57,8 @@ PrivacyUpdateDialog::PrivacyUpdateDialog(wxWindow* parent, wxWindowID id, const m_vebview_release_note->SetSize(wxSize(FromDIP(540), FromDIP(340))); m_vebview_release_note->SetMinSize(wxSize(FromDIP(540), FromDIP(340))); - fs::path ph(data_dir()); - ph /= "resources/tooltip/privacyupdate.html"; - if (!fs::exists(ph)) { - ph = resources_dir(); - ph /= "tooltip/privacyupdate.html"; - } + fs::path ph(resources_dir()); + ph /= "tooltip/privacyupdate.html"; m_host_url = ph.string(); std::replace(m_host_url.begin(), m_host_url.end(), '\\', '/'); m_host_url = "file:///" + m_host_url; @@ -87,7 +83,7 @@ PrivacyUpdateDialog::PrivacyUpdateDialog(wxWindow* parent, wxWindowID id, const e.Skip(); }); - m_vebview_release_note->Bind(wxEVT_WEBVIEW_NAVIGATING , &PrivacyUpdateDialog::OnNavigating, this); + //m_vebview_release_note->Bind(wxEVT_WEBVIEW_NAVIGATING , &PrivacyUpdateDialog::OnNavigating, this); m_button_ok = new Button(this, _L("Accept")); m_button_ok->SetBackgroundColor(btn_bg_green); From 2003bbd768d4f4474fa11d0845dccfd2a4bef1ac Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Fri, 7 Apr 2023 09:32:31 +0800 Subject: [PATCH 258/339] FIX: Flush log in generic_exception_handle Change-Id: I07fd22ace35418f18694fec017a0a7633065ef10 --- src/slic3r/GUI/GUI_App.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index fd2337298b..6ec8a20c4a 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -951,23 +951,26 @@ static void generic_exception_handle() } catch (const std::bad_alloc& ex) { // bad_alloc in main thread is most likely fatal. Report immediately to the user (wxLogError would be delayed) // and terminate the app so it is at least certain to happen now. + BOOST_LOG_TRIVIAL(error) << boost::format("std::bad_alloc exception: %1%") % ex.what(); + flush_logs(); wxString errmsg = wxString::Format(_L("BambuStudio will terminate because of running out of memory." "It may be a bug. It will be appreciated if you report the issue to our team.")); wxMessageBox(errmsg + "\n\n" + wxString(ex.what()), _L("Fatal error"), wxOK | wxICON_ERROR); - BOOST_LOG_TRIVIAL(error) << boost::format("std::bad_alloc exception: %1%") % ex.what(); std::terminate(); //throw; } catch (const boost::io::bad_format_string& ex) { + BOOST_LOG_TRIVIAL(error) << boost::format("Uncaught exception: %1%") % ex.what(); + flush_logs(); wxString errmsg = _L("BambuStudio will terminate because of a localization error. " "It will be appreciated if you report the specific scenario this issue happened."); wxMessageBox(errmsg + "\n\n" + wxString(ex.what()), _L("Critical error"), wxOK | wxICON_ERROR); - BOOST_LOG_TRIVIAL(error) << boost::format("Uncaught exception: %1%") % ex.what(); std::terminate(); //throw; } catch (const std::exception& ex) { wxLogError(format_wxstr(_L("BambuStudio got an unhandled exception: %1%"), ex.what())); BOOST_LOG_TRIVIAL(error) << boost::format("Uncaught exception: %1%") % ex.what(); + flush_logs(); throw; } //#endif From 5468573e27a3fe17e8134ecf624db6bc987fadff Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Fri, 7 Apr 2023 10:09:59 +0800 Subject: [PATCH 259/339] FIX: [STUDIO-2438] inline search line in popup on Linux Change-Id: Idcf7c4eca52438aab4129163b90314631b7f7492 --- src/slic3r/GUI/Search.cpp | 32 +++++++++++++++++++++++++------- src/slic3r/GUI/Search.hpp | 3 ++- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/slic3r/GUI/Search.cpp b/src/slic3r/GUI/Search.cpp index f4965cb9f5..c7c0978b97 100644 --- a/src/slic3r/GUI/Search.cpp +++ b/src/slic3r/GUI/Search.cpp @@ -366,7 +366,11 @@ void OptionsSearcher::show_dialog(Preset::Type type, wxWindow *parent, TextInput if (parent == nullptr || input == nullptr) return; auto search_dialog = new SearchDialog(this, type, parent, input, ssearch_btn); wxPoint pos = input->GetParent()->ClientToScreen(wxPoint(0, 0)); +#ifndef __WXGTK__ pos.y += input->GetParent()->GetRect().height; +#else + input->GetParent()->Hide(); +#endif search_dialog->SetPosition(pos); search_dialog->Popup(); } @@ -558,11 +562,18 @@ SearchDialog::SearchDialog(OptionsSearcher *searcher, Preset::Type type, wxWindo // search line //search_line = new wxTextCtrl(m_client_panel, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER); +#ifdef __WXGTK__ + search_line = new TextInput(m_client_panel, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0); + search_line->SetBackgroundColour(wxColour(238, 238, 238)); + search_line->SetForegroundColour(wxColour(43, 52, 54)); + search_line->SetFont(GUI::wxGetApp().bold_font()); +#endif // default_string = _L("Enter a search term"); search_line->Bind(wxEVT_TEXT, &SearchDialog::OnInputText, this); search_line->Bind(wxEVT_LEFT_UP, &SearchDialog::OnLeftUpInTextCtrl, this); search_line->Bind(wxEVT_KEY_DOWN, &SearchDialog::OnKeyDown, this); + search_line2 = search_line->GetTextCtrl(); // scroll window m_scrolledWindow = new ScrolledWindow(m_client_panel, wxID_ANY, wxDefaultPosition, wxSize(POPUP_WIDTH * em - (em + em /2), POPUP_HEIGHT * em), wxVSCROLL, 6, 6); @@ -579,7 +590,10 @@ SearchDialog::SearchDialog(OptionsSearcher *searcher, Preset::Type type, wxWindo m_listPanel->Fit(); m_scrolledWindow->SetScrollbars(1, 1, 0, m_listPanel->GetSize().GetHeight()); - //m_sizer_body->Add(search_line, 0, wxEXPAND | wxTOP, em + em / 2); +#ifdef __WXGTK__ + m_sizer_body->Add(search_line, 0, wxEXPAND | wxALL, em / 2); + search_line = input; +#endif m_sizer_body->Add(m_scrolledWindow, 0, wxEXPAND | wxALL, em); m_client_panel->SetSizer(m_sizer_body); @@ -589,7 +603,7 @@ SearchDialog::SearchDialog(OptionsSearcher *searcher, Preset::Type type, wxWindo m_border_panel->SetSizer(m_sizer_main); m_border_panel->Layout(); - m_sizer_border->Add(m_border_panel, 0, wxEXPAND | wxALL, 1); + m_sizer_border->Add(m_border_panel, 1, wxEXPAND | wxALL, 1); SetSizer(m_sizer_border); Layout(); @@ -619,11 +633,11 @@ void SearchDialog::Popup(wxPoint position /*= wxDefaultPosition*/) //const std::string &line = searcher->search_string(); //search_line->SetValue(line.empty() ? default_string : from_u8(line)); - search_line->GetTextCtrl()->SetValue(wxString("")); + search_line2->SetValue(wxString("")); //const std::string &line = searcher->search_string(); //searcher->search(into_u8(line), true); PopupWindow::Popup(); - search_line->SetFocus(); + search_line2->SetFocus(); update_list(); } @@ -671,8 +685,8 @@ void SearchDialog::ProcessSelection(wxDataViewItem selection) void SearchDialog::OnInputText(wxCommandEvent &) { - search_line->GetTextCtrl()->SetInsertionPointEnd(); - wxString input_string = search_line->GetTextCtrl()->GetValue(); + search_line2->SetInsertionPointEnd(); + wxString input_string = search_line2->GetValue(); if (input_string == default_string) input_string.Clear(); searcher->search(into_u8(input_string), true, search_type); update_list(); @@ -680,7 +694,7 @@ void SearchDialog::OnInputText(wxCommandEvent &) void SearchDialog::OnLeftUpInTextCtrl(wxEvent &event) { - if (search_line->GetTextCtrl()->GetValue() == default_string) search_line->GetTextCtrl()->SetValue(""); + if (search_line2->GetValue() == default_string) search_line2->SetValue(""); event.Skip(); } @@ -726,7 +740,9 @@ void SearchDialog::OnSelect(wxDataViewEvent &event) void SearchDialog::update_list() { +#ifndef __WXGTK__ Freeze(); +#endif m_scrolledWindow->Destroy(); m_scrolledWindow = new ScrolledWindow(m_client_panel, wxID_ANY, wxDefaultPosition, wxSize(POPUP_WIDTH * em - (em + em / 2), POPUP_HEIGHT * em - em), wxVSCROLL, 6, 6); @@ -755,7 +771,9 @@ void SearchDialog::update_list() m_sizer_body->Add(m_scrolledWindow, 0, wxEXPAND | wxALL, em); m_sizer_body->Fit(m_client_panel); m_sizer_body->Layout(); +#ifndef __WXGTK__ Thaw(); +#endif // Under OSX model->Clear invoke wxEVT_DATAVIEW_SELECTION_CHANGED, so // set prevent_list_events to true already here diff --git a/src/slic3r/GUI/Search.hpp b/src/slic3r/GUI/Search.hpp index 6331609ca5..51f5030428 100644 --- a/src/slic3r/GUI/Search.hpp +++ b/src/slic3r/GUI/Search.hpp @@ -206,7 +206,8 @@ public: const int POPUP_WIDTH = 38; const int POPUP_HEIGHT = 40; - TextInput * search_line{nullptr}; + TextInput * search_line{nullptr}; + wxTextCtrl * search_line2{nullptr}; Preset::Type search_type = Preset::TYPE_INVALID; wxDataViewCtrl * search_list{nullptr}; From 9c402384acac8b1c0c3b2b5b551ec158a9a723f6 Mon Sep 17 00:00:00 2001 From: tao wang Date: Fri, 7 Apr 2023 17:43:37 +0800 Subject: [PATCH 260/339] FIX:fixed move wrong pos when amsmapping window popup first time Change-Id: I5a9830141ef897399097dc21e70bfddd5113bcff --- src/slic3r/GUI/AmsMappingPopup.cpp | 8 ++++++++ src/slic3r/GUI/AmsMappingPopup.hpp | 4 +++- src/slic3r/GUI/SelectMachine.cpp | 3 ++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index 390d897629..b5d09ff0c4 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -273,6 +273,14 @@ void MaterialItem::doRender(wxDC &dc) SetSizer(m_sizer_main); Layout(); Fit(); + + Bind(wxEVT_SHOW, [this](wxShowEvent& e) { + if (e.IsShown() && m_parent_item) { + wxPoint pos = m_parent_item->ClientToScreen(wxPoint(0, 0)); + pos.y += m_parent_item->GetRect().height; + this->Move(pos); + } + }); } wxString AmsMapingPopup::format_text(wxString &m_msg) diff --git a/src/slic3r/GUI/AmsMappingPopup.hpp b/src/slic3r/GUI/AmsMappingPopup.hpp index 5fb5e0b6f7..d1094a3859 100644 --- a/src/slic3r/GUI/AmsMappingPopup.hpp +++ b/src/slic3r/GUI/AmsMappingPopup.hpp @@ -130,7 +130,6 @@ class AmsMapingPopup : public PopupWindow { public: AmsMapingPopup(wxWindow *parent); - wxString format_text(wxString &m_msg); ~AmsMapingPopup(){}; wxStaticText * m_warning_text{nullptr}; @@ -144,7 +143,9 @@ public: std::string m_tag_material; wxBoxSizer *m_sizer_main{nullptr}; wxBoxSizer *m_sizer_list{nullptr}; + wxWindow *m_parent_item{nullptr}; + wxString format_text(wxString &m_msg); void update_materials_list(std::vector list); void set_tag_texture(std::string texture); void update_ams_data(std::map amsList); @@ -156,6 +157,7 @@ public: virtual void OnDismiss() wxOVERRIDE; virtual bool ProcessLeftDown(wxMouseEvent &event) wxOVERRIDE; void paintEvent(wxPaintEvent &evt); + void set_parent_item(wxWindow* item) {m_parent_item = item;}; std::vector parse_ams_mapping(std::map amsList); }; diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index db90217aab..717e541762 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -3192,9 +3192,10 @@ void SelectMachineDialog::set_default() if (m_mapping_popup.IsShown()) return; wxPoint pos = item->ClientToScreen(wxPoint(0, 0)); pos.y += item->GetRect().height; - m_mapping_popup.Position(pos, wxSize(0, 0)); + m_mapping_popup.Move(pos); if (obj_ && obj_->has_ams() && ams_check->GetValue()) { + m_mapping_popup.set_parent_item(item); m_mapping_popup.set_current_filament_id(extruder); m_mapping_popup.set_tag_texture(materials[extruder]); m_mapping_popup.update_ams_data(obj_->amsList); From 62af2b960862388d3fbca244332ef500a5888963 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Fri, 7 Apr 2023 14:56:57 +0800 Subject: [PATCH 261/339] FIX: vector capacity reset(STUDIO-2239) Change-Id: Ie40e8c6d3a42b6a40f4f73d6906acdc6e26d0b41 --- src/libslic3r/GCode/GCodeProcessor.hpp | 5 +++++ src/slic3r/GUI/GCodeViewer.cpp | 3 +++ src/slic3r/GUI/GCodeViewer.hpp | 3 +++ 3 files changed, 11 insertions(+) diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index 96dedabb82..0801e2f66f 100644 --- a/src/libslic3r/GCode/GCodeProcessor.hpp +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -59,9 +59,13 @@ namespace Slic3r { time = 0.0f; prepare_time = 0.0f; custom_gcode_times.clear(); + custom_gcode_times.shrink_to_fit(); moves_times.clear(); + moves_times.shrink_to_fit(); roles_times.clear(); + roles_times.shrink_to_fit(); layers_times.clear(); + layers_times.shrink_to_fit(); } }; @@ -81,6 +85,7 @@ namespace Slic3r { m.reset(); } volumes_per_color_change.clear(); + volumes_per_color_change.shrink_to_fit(); volumes_per_extruder.clear(); flush_per_filament.clear(); used_filaments_per_role.clear(); diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index d749561d71..d2854940c4 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -176,7 +176,9 @@ void GCodeViewer::InstanceVBuffer::Ranges::reset() void GCodeViewer::InstanceVBuffer::reset() { s_ids.clear(); + s_ids.shrink_to_fit(); buffer.clear(); + buffer.shrink_to_fit(); render_ranges.reset(); } @@ -1222,6 +1224,7 @@ void GCodeViewer::reset() m_moves_count = 0; m_ssid_to_moveid_map.clear(); + m_ssid_to_moveid_map.shrink_to_fit(); for (TBuffer& buffer : m_buffers) { buffer.reset(); } diff --git a/src/slic3r/GUI/GCodeViewer.hpp b/src/slic3r/GUI/GCodeViewer.hpp index e8f83e7c66..7bb19d6fed 100644 --- a/src/slic3r/GUI/GCodeViewer.hpp +++ b/src/slic3r/GUI/GCodeViewer.hpp @@ -666,8 +666,11 @@ public: void reset() { stop_mapping_file(); m_lines_ends.clear(); + m_lines_ends.shrink_to_fit(); m_lines.clear(); + m_lines.shrink_to_fit(); m_filename.clear(); + m_filename.shrink_to_fit(); } void toggle_visibility() { m_visible = !m_visible; } From afb9886e0e215beee6234d2ce98af9488574f74f Mon Sep 17 00:00:00 2001 From: "qing.zhang" Date: Fri, 7 Apr 2023 15:33:24 +0800 Subject: [PATCH 262/339] ENH: add Bambu PLA Silk & Bambu PETG Basic add cool plate temp for PLA Signed-off-by: qing.zhang Change-Id: If3ca9c773351939358d7bed9f6d6c890a28b302b --- resources/profiles/BBL.json | 34 +++++++- .../Bambu PETG Basic @BBL X1C 0.2 nozzle.json | 16 ++++ .../Bambu PETG Basic @BBL X1C 0.8 nozzle.json | 19 ++++ .../filament/Bambu PETG Basic @BBL X1C.json | 16 ++++ .../BBL/filament/Bambu PETG Basic @base.json | 86 +++++++++++++++++++ .../BBL/filament/Bambu PETG-CF @base.json | 3 + .../BBL/filament/Bambu PLA SilK @BBL X1.json | 22 +++++ .../Bambu PLA Silk @BBL X1C 0.2 nozzle.json | 16 ++++ .../BBL/filament/Bambu PLA Silk @BBL X1C.json | 16 ++++ .../BBL/filament/Bambu PLA Silk @base.json | 29 +++++++ .../BBL/filament/fdm_filament_pla.json | 4 +- .../BBL/filament/fdm_filament_pva.json | 4 +- 12 files changed, 260 insertions(+), 5 deletions(-) create mode 100644 resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C 0.8 nozzle.json create mode 100644 resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/Bambu PETG Basic @base.json create mode 100644 resources/profiles/BBL/filament/Bambu PLA SilK @BBL X1.json create mode 100644 resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1C 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1C.json create mode 100644 resources/profiles/BBL/filament/Bambu PLA Silk @base.json diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index 9637cd8e37..a389017f59 100644 --- a/resources/profiles/BBL.json +++ b/resources/profiles/BBL.json @@ -1,7 +1,7 @@ { "name": "Bambulab", "url": "http://www.bambulab.com/Parameters/vendor/BBL.json", - "version": "01.05.00.23", + "version": "01.05.00.24", "force_update": "0", "description": "the initial version of BBL configurations", "machine_model_list": [ @@ -321,6 +321,14 @@ "name": "Bambu PLA Metal @base", "sub_path": "filament/Bambu PLA Metal @base.json" }, + { + "name": "Bambu PLA Silk @base", + "sub_path": "filament/Bambu PLA Silk @base.json" + }, + { + "name": "Bambu PETG Basic @base", + "sub_path": "filament/Bambu PETG Basic @base.json" + }, { "name": "Bambu ABS @base", "sub_path": "filament/Bambu ABS @base.json" @@ -541,6 +549,30 @@ "name": "Bambu PLA Sparkle @BBL X1C", "sub_path": "filament/Bambu PLA Sparkle @BBL X1C.json" }, + { + "name": "Bambu PLA Silk @BBL X1", + "sub_path": "filament/Bambu PLA Silk @BBL X1.json" + }, + { + "name": "Bambu PLA Silk @BBL X1C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Silk @BBL X1C 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Silk @BBL X1C", + "sub_path": "filament/Bambu PLA Silk @BBL X1C.json" + }, + { + "name": "Bambu PETG Basic @BBL X1C", + "sub_path": "filament/Bambu PETG Basic @BBL X1C.json" + }, + { + "name": "Bambu PETG Basic @BBL X1C 0.2 nozzle", + "sub_path": "filament/Bambu PETG Basic @BBL X1C 0.2 nozzle.json" + }, + { + "name": "Bambu PETG Basic @BBL X1C 0.8 nozzle", + "sub_path": "filament/Bambu PETG Basic @BBL X1C 0.8 nozzle.json" + }, { "name": "Bambu ABS @BBL X1C", "sub_path": "filament/Bambu ABS @BBL X1C.json" diff --git a/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..7805e7125d --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C 0.2 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "setting_id": "GFSG00_00", + "name": "Bambu PETG Basic @BBL X1C 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PETG Basic @base", + "filament_max_volumetric_speed": [ + "1" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab X1 0.2 nozzle", + "Bambu Lab P1P 0.2 nozzle" + ] +} diff --git a/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C 0.8 nozzle.json new file mode 100644 index 0000000000..364354608d --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C 0.8 nozzle.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "setting_id": "GFSG00_02", + "name": "Bambu PETG Basic @BBL X1C 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PETG Basic @base", + "filament_max_volumetric_speed": [ + "16" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1 0.8 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ] +} diff --git a/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C.json new file mode 100644 index 0000000000..a7b23cc1fa --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "setting_id": "GFSG00_01", + "name": "Bambu PETG Basic @BBL X1C", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PETG Basic @base", + "filament_max_volumetric_speed": [ + "14" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab P1P 0.4 nozzle" + ] +} diff --git a/resources/profiles/BBL/filament/Bambu PETG Basic @base.json b/resources/profiles/BBL/filament/Bambu PETG Basic @base.json new file mode 100644 index 0000000000..e37b48daba --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PETG Basic @base.json @@ -0,0 +1,86 @@ +{ + "type": "filament", + "filament_id": "GFG00", + "name": "Bambu PETG Basic @base", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_pet", + "filament_flow_ratio": [ + "0.95" + ], + "temperature_vitrification": [ + "70" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "slow_down_layer_time": [ + "8" + ], + "fan_cooling_layer_time": [ + "30" + ], + "cool_plate_temp" : [ + "0" + ], + "eng_plate_temp" : [ + "70" + ], + "hot_plate_temp" : [ + "70" + ], + "textured_plate_temp" : [ + "70" + ], + "cool_plate_temp_initial_layer" : [ + "0" + ], + "eng_plate_temp_initial_layer" : [ + "70" + ], + "hot_plate_temp_initial_layer" : [ + "70" + ], + "textured_plate_temp_initial_layer" : [ + "70" + ], + "filament_vendor": [ + "Bambu Lab" + ], + "filament_type": [ + "PETG" + ], + "filament_cost": [ + "24.99" + ], + "filament_density": [ + "1.29" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "255" + ], + "nozzle_temperature": [ + "255" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >60)||(bed_temperature_initial_layer[current_extruder] >60)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S180\n{endif}" + ] +} diff --git a/resources/profiles/BBL/filament/Bambu PETG-CF @base.json b/resources/profiles/BBL/filament/Bambu PETG-CF @base.json index d037da45d4..f6e26c2edb 100644 --- a/resources/profiles/BBL/filament/Bambu PETG-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PETG-CF @base.json @@ -5,6 +5,9 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_pet", + "filament_flow_ratio": [ + "0.95" + ], "temperature_vitrification": [ "75" ], diff --git a/resources/profiles/BBL/filament/Bambu PLA SilK @BBL X1.json b/resources/profiles/BBL/filament/Bambu PLA SilK @BBL X1.json new file mode 100644 index 0000000000..3066814ecf --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PLA SilK @BBL X1.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "setting_id": "GFSA05_02", + "name": "Bambu PLA Silk @BBL X1", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PLA Silk @base", + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle", + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1C 0.2 nozzle.json new file mode 100644 index 0000000000..86a717635c --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1C 0.2 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "setting_id": "GFSA05_00", + "name": "Bambu PLA Silk @BBL X1C 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PLA Silk @base", + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab X1 0.2 nozzle", + "Bambu Lab P1P 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1C.json new file mode 100644 index 0000000000..f1f4151e0e --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1C.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "setting_id": "GFSA05_01", + "name": "Bambu PLA Silk @BBL X1C", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PLA Silk @base", + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Silk @base.json b/resources/profiles/BBL/filament/Bambu PLA Silk @base.json new file mode 100644 index 0000000000..30870a0d06 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PLA Silk @base.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "filament_id": "GFA05", + "name": "Bambu PLA Silk @base", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_pla", + "filament_vendor": [ + "Bambu Lab" + ], + "required_nozzle_HRC": [ + "3" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_density": [ + "1.32" + ], + "filament_cost": [ + "29.99" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature": [ + "230" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/fdm_filament_pla.json b/resources/profiles/BBL/filament/fdm_filament_pla.json index b90eebee88..02a8f8705c 100644 --- a/resources/profiles/BBL/filament/fdm_filament_pla.json +++ b/resources/profiles/BBL/filament/fdm_filament_pla.json @@ -20,7 +20,7 @@ "20" ], "cool_plate_temp" : [ - "35" + "45" ], "eng_plate_temp" : [ "0" @@ -32,7 +32,7 @@ "55" ], "cool_plate_temp_initial_layer" : [ - "35" + "45" ], "eng_plate_temp_initial_layer" : [ "0" diff --git a/resources/profiles/BBL/filament/fdm_filament_pva.json b/resources/profiles/BBL/filament/fdm_filament_pva.json index 76f2f14e42..e02e18fd3b 100644 --- a/resources/profiles/BBL/filament/fdm_filament_pva.json +++ b/resources/profiles/BBL/filament/fdm_filament_pva.json @@ -5,7 +5,7 @@ "instantiation": "false", "inherits": "fdm_filament_common", "cool_plate_temp" : [ - "35" + "45" ], "eng_plate_temp" : [ "0" @@ -17,7 +17,7 @@ "55" ], "cool_plate_temp_initial_layer" : [ - "35" + "45" ], "eng_plate_temp_initial_layer" : [ "0" From a798ed22b96ec07023b4940f0dbeb25e95a1c07a Mon Sep 17 00:00:00 2001 From: tao wang Date: Mon, 10 Apr 2023 14:39:20 +0800 Subject: [PATCH 263/339] ENH:optimize virtual tray when printer is no AMS Change-Id: I68425afc8c3f467a8e3f3c2745b6ac9cfb80232e --- src/slic3r/GUI/AMSMaterialsSetting.cpp | 21 +++++++++++++++---- src/slic3r/GUI/AMSMaterialsSetting.hpp | 1 + src/slic3r/GUI/StatusPanel.cpp | 17 +++++++++++---- src/slic3r/GUI/Widgets/AMSControl.cpp | 29 +++++++++++--------------- src/slic3r/GUI/Widgets/AMSControl.hpp | 9 ++++++-- 5 files changed, 50 insertions(+), 27 deletions(-) diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index aeb75e212d..8899de08a7 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -268,9 +268,9 @@ void AMSMaterialsSetting::create_panel_kn(wxWindow* parent) { auto sizer = new wxBoxSizer(wxVERTICAL); // title - auto ratio_text = new wxStaticText(parent, wxID_ANY, _L("Factors of dynamic flow cali")); - ratio_text->SetForegroundColour(wxColour(50, 58, 61)); - ratio_text->SetFont(Label::Head_14); + m_ratio_text = new wxStaticText(parent, wxID_ANY, _L("Factors of dynamic flow cali")); + m_ratio_text->SetForegroundColour(wxColour(50, 58, 61)); + m_ratio_text->SetFont(Label::Head_14); auto kn_val_sizer = new wxFlexGridSizer(0, 2, 0, 0); kn_val_sizer->SetFlexibleDirection(wxBOTH); @@ -304,7 +304,7 @@ void AMSMaterialsSetting::create_panel_kn(wxWindow* parent) m_input_n_val->Hide(); sizer->Add(0, 0, 0, wxTOP, FromDIP(10)); - sizer->Add(ratio_text, 0, wxLEFT | wxRIGHT | wxEXPAND, FromDIP(20)); + sizer->Add(m_ratio_text, 0, wxLEFT | wxRIGHT | wxEXPAND, FromDIP(20)); sizer->Add(0, 0, 0, wxTOP, FromDIP(10)); sizer->Add(kn_val_sizer, 0, wxLEFT | wxRIGHT | wxEXPAND, FromDIP(20)); sizer->Add(0, 0, 0, wxTOP, FromDIP(10)); @@ -715,6 +715,19 @@ bool AMSMaterialsSetting::Show(bool show) m_input_nozzle_max->GetTextCtrl()->SetSize(wxSize(-1, FromDIP(20))); m_input_nozzle_min->GetTextCtrl()->SetSize(wxSize(-1, FromDIP(20))); //m_clr_picker->set_color(m_clr_picker->GetParent()->GetBackgroundColour()); + + if (obj && obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)) { + m_ratio_text->Show(); + m_k_param->Show(); + m_input_k_val->Show(); + } + else { + m_ratio_text->Hide(); + m_k_param->Hide(); + m_input_k_val->Hide(); + } + Layout(); + Fit(); } return DPIDialog::Show(show); } diff --git a/src/slic3r/GUI/AMSMaterialsSetting.hpp b/src/slic3r/GUI/AMSMaterialsSetting.hpp index 7889c32f22..972bb26847 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.hpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.hpp @@ -146,6 +146,7 @@ protected: wxColourData * m_clrData; wxPanel * m_panel_kn; + wxStaticText* m_ratio_text; wxStaticText* m_k_param; TextInput* m_input_k_val; wxStaticText* m_n_param; diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index e5270d64d9..0154924e3a 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -1907,6 +1907,8 @@ void StatusPanel::update_ams(MachineObject *obj) } if (m_filament_setting_dlg) { m_filament_setting_dlg->obj = obj; } + bool is_none_ams_mode = false; + if (!obj || !obj->is_connected() || obj->amsList.empty() @@ -1924,20 +1926,24 @@ void StatusPanel::update_ams(MachineObject *obj) bool is_support_virtual_tray = obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY); if (is_support_virtual_tray) { - m_ams_control->update_vams_kn_value(obj->vt_tray); + m_ams_control->update_vams_kn_value(obj->vt_tray, obj); } show_ams_group(false, obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY), obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI), obj->is_support_filament_edit_virtual_tray); - return; + is_none_ams_mode = true; + //return; } bool is_support_extrusion_cali = obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI); bool is_support_virtual_tray = obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY); if (is_support_virtual_tray) { - m_ams_control->update_vams_kn_value(obj->vt_tray); + m_ams_control->update_vams_kn_value(obj->vt_tray, obj); } - show_ams_group(true, obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY), obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI), obj->is_support_filament_edit_virtual_tray); + if (!is_none_ams_mode) { + show_ams_group(true, obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY), obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI), obj->is_support_filament_edit_virtual_tray); + } + if (m_filament_setting_dlg) m_filament_setting_dlg->update(); std::vector ams_info; @@ -2616,6 +2622,9 @@ void StatusPanel::on_ams_load_curr() int old_temp = -1; int new_temp = -1; AmsTray* curr_tray = obj->get_curr_tray(); + + if (!curr_tray) return; + try { if (!curr_tray->nozzle_temp_max.empty() && !curr_tray->nozzle_temp_min.empty()) old_temp = (atoi(curr_tray->nozzle_temp_min.c_str()) + atoi(curr_tray->nozzle_temp_max.c_str())) / 2; diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index c7d93637df..8656ea593c 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -465,7 +465,10 @@ void AMSextruder::doRender(wxDC& dc) wxSize size = GetSize(); dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); - dc.DrawLine(size.x / 2, -1, size.x / 2, size.y * 0.6 - 1); + + if (!m_none_ams_mode) { + dc.DrawLine(size.x / 2, -1, size.x / 2, size.y * 0.6 - 1); + } if (m_has_vams) { dc.DrawRoundedRectangle(-size.x / 2, FromDIP(8), size.x, size.y, 4); @@ -475,7 +478,7 @@ void AMSextruder::doRender(wxDC& dc) dc.DrawRoundedRectangle(-size.x / 2, FromDIP(8), size.x, size.y, 4); } - if (m_ams_loading) { + if (m_ams_loading && !m_none_ams_mode) { dc.SetPen(wxPen(m_current_colur, 6, wxSOLID)); dc.DrawLine(size.x / 2, -1, size.x / 2, size.y * 0.6 - 1); } @@ -708,6 +711,7 @@ void AMSLib::render(wxDC &dc) if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_THIRDBRAND || m_info.material_state == AMSCanType::AMS_CAN_TYPE_BRAND || m_info.material_state == AMSCanType::AMS_CAN_TYPE_VIRTUAL) { + if (m_info.material_name.empty() && m_info.material_state != AMSCanType::AMS_CAN_TYPE_VIRTUAL) { auto tsize = dc.GetMultiLineTextExtent("?"); auto pot = wxPoint(0, 0); @@ -748,7 +752,7 @@ void AMSLib::render(wxDC &dc) } else { auto pot = wxPoint(0, 0); - if (m_show_kn) { + if (m_obj && m_obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)) { pot = wxPoint((libsize.x - tsize.x) / 2, (libsize.y - tsize.y) / 2 - FromDIP(9)); } else { pot = wxPoint((libsize.x - tsize.x) / 2, (libsize.y - tsize.y) / 2 + FromDIP(3)); @@ -758,7 +762,7 @@ void AMSLib::render(wxDC &dc) } //draw k&n - if (m_obj && m_obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY)) { + if (m_obj && m_obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)) { if (m_show_kn){ wxString str_k = wxString::Format("K %1.3f", m_info.k); wxString str_n = wxString::Format("N %1.3f", m_info.n); @@ -768,16 +772,6 @@ void AMSLib::render(wxDC &dc) dc.DrawText(str_k, pot_k); } } - else if(m_info.material_state == AMSCanType::AMS_CAN_TYPE_VIRTUAL){ - if (m_show_kn) { - wxString str_k = wxString::Format("K %1.3f", m_info.k); - wxString str_n = wxString::Format("N %1.3f", m_info.n); - dc.SetFont(::Label::Body_11); - auto tsize = dc.GetMultiLineTextExtent(str_k); - auto pot_k = wxPoint((libsize.x - tsize.x) / 2, (libsize.y - tsize.y) / 2 - FromDIP(9) + tsize.y); - dc.DrawText(str_k, pot_k); - } - } } if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_EMPTY) { @@ -2331,7 +2325,7 @@ void AMSControl::EnterNoneAMSMode(bool support_vt_load) m_panel_top->Hide(); m_simplebook_amsitems->SetSelection(1); m_simplebook_ams->SetSelection(1); - m_extruder->Hide(); + m_extruder->no_ams_mode(true); m_button_ams_setting->Hide(); m_button_guide->Hide(); m_button_retry->Hide(); @@ -2356,7 +2350,7 @@ void AMSControl::ExitNoneAMSMode() m_panel_top->Show(); m_simplebook_ams->SetSelection(0); m_simplebook_amsitems->SetSelection(0); - m_extruder->Show(); + m_extruder->no_ams_mode(false); m_button_ams_setting->Show(); m_button_guide->Show(); m_button_retry->Show(); @@ -2568,8 +2562,9 @@ void AMSControl::show_vams_kn_value(bool show) m_vams_lib->show_kn_value(show); } -void AMSControl::update_vams_kn_value(AmsTray tray) +void AMSControl::update_vams_kn_value(AmsTray tray, MachineObject* obj) { + m_vams_lib->m_obj = obj; m_vams_info.k = tray.k; m_vams_info.n = tray.n; m_vams_lib->m_info.k = tray.k; diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index 0f3ea61593..779c6b28ac 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -238,7 +238,9 @@ public: void doRender(wxDC& dc); void msw_rescale(); void has_ams(bool hams) {m_has_vams = hams; Refresh();}; + void no_ams_mode(bool mode) {m_none_ams_mode = mode; Refresh();}; + bool m_none_ams_mode{false}; bool m_has_vams{false}; bool m_vams_loading{false}; bool m_ams_loading{false}; @@ -292,9 +294,11 @@ public: void OnSelected(); void UnSelected(); bool is_selected() {return m_selected;}; - virtual bool Enable(bool enable = true); void post_event(wxCommandEvent &&event); void show_kn_value(bool show) { m_show_kn = show; }; + void support_cali(bool sup) { m_support_cali = sup; Refresh(); }; + virtual bool Enable(bool enable = true); + protected: wxStaticBitmap *m_edit_bitmp = {nullptr}; @@ -308,6 +312,7 @@ protected: bool m_selected = {false}; bool m_hover = {false}; bool m_show_kn = {false}; + bool m_support_cali = {false}; double m_radius = {4}; wxColour m_border_color; @@ -615,7 +620,7 @@ public: void show_noams_mode(bool show, bool support_virtual_tray, bool support_extrustion_cali, bool support_vt_load = false); void show_vams(bool show); void show_vams_kn_value(bool show); - void update_vams_kn_value(AmsTray tray); + void update_vams_kn_value(AmsTray tray, MachineObject* obj); void reset_vams(); void post_event(wxEvent&& event); From 5114a79e2cd72521b92b6315043ff2faeb16b361 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Mon, 10 Apr 2023 16:32:10 +0800 Subject: [PATCH 264/339] FIX: clean ams result when unchecking enable ams Change-Id: I95a416f966d1aa81301dd8685f0909eeff8ad2c1 Signed-off-by: Stone Li --- src/slic3r/GUI/SelectMachine.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 717e541762..80944acc9f 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -2785,17 +2785,26 @@ void SelectMachineDialog::update_show_status() // do ams mapping if no ams result + bool clean_ams_mapping = false; if (obj_->has_ams() && m_ams_mapping_result.empty()) { if (obj_->ams_support_use_ams) { if (ams_check->GetValue()) { do_ams_mapping(obj_); } else { - m_ams_mapping_result.clear(); - sync_ams_mapping_result(m_ams_mapping_result); + clean_ams_mapping = true; } } } + if (!obj_->has_ams() || !ams_check->GetValue()) { + clean_ams_mapping = true; + } + + if (clean_ams_mapping) { + m_ams_mapping_result.clear(); + sync_ams_mapping_result(m_ams_mapping_result); + } + // reading done if (wxGetApp().app_config && wxGetApp().app_config->get("internal_debug").empty()) { if (obj_->upgrade_force_upgrade) { From 8ace4e6d812d42caaa3580e9b77bd1ae7e7c1638 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Mon, 10 Apr 2023 17:09:39 +0800 Subject: [PATCH 265/339] ENH: sync with localazy Change-Id: I03891176cee9a41ed5524d32d0e0a01f657d62d1 Signed-off-by: Stone Li --- bbl/i18n/BambuStudio.pot | 9 +- bbl/i18n/de/BambuStudio_de.po | 59 +- bbl/i18n/en/BambuStudio_en.po | 63 +- bbl/i18n/es/BambuStudio_es.po | 144 +- bbl/i18n/fr/BambuStudio_fr.po | 86 +- bbl/i18n/hu/BambuStudio_hu.po | 1963 ++++++++++++++------------- bbl/i18n/it/BambuStudio_it.po | 59 +- bbl/i18n/ja/BambuStudio_ja.po | 51 +- bbl/i18n/nl/BambuStudio_nl.po | 55 +- bbl/i18n/sv/BambuStudio_sv.po | 96 +- bbl/i18n/zh_cn/BambuStudio_zh_CN.po | 21 +- resources/i18n/de/BambuStudio.mo | Bin 233194 -> 233315 bytes resources/i18n/en/BambuStudio.mo | Bin 213731 -> 213870 bytes resources/i18n/es/BambuStudio.mo | Bin 233188 -> 233338 bytes resources/i18n/fr/BambuStudio.mo | Bin 239178 -> 239290 bytes resources/i18n/hu/BambuStudio.mo | Bin 226734 -> 234293 bytes resources/i18n/it/BambuStudio.mo | Bin 229116 -> 229237 bytes resources/i18n/ja/BambuStudio.mo | Bin 222681 -> 222800 bytes resources/i18n/nl/BambuStudio.mo | Bin 230020 -> 230142 bytes resources/i18n/sv/BambuStudio.mo | Bin 220000 -> 220142 bytes resources/i18n/zh_cn/BambuStudio.mo | Bin 212019 -> 212073 bytes 21 files changed, 1310 insertions(+), 1296 deletions(-) diff --git a/bbl/i18n/BambuStudio.pot b/bbl/i18n/BambuStudio.pot index acfc5097c6..88bbfe6b0e 100644 --- a/bbl/i18n/BambuStudio.pot +++ b/bbl/i18n/BambuStudio.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-08 15:59+0800\n" +"POT-Creation-Date: 2023-04-10 17:16+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1845,13 +1845,13 @@ msgstr "" msgid "Max volumetric speed" msgstr "" -msgid "℃" +msgid "\\u2103" msgstr "" msgid "Bed temperature" msgstr "" -msgid "mm³" +msgid "mm\\u00B3" msgstr "" msgid "Start calibration" @@ -6632,6 +6632,9 @@ msgstr "" msgid "Minimal purge on wipe tower" msgstr "" +msgid "mm³" +msgstr "" + msgid "Filament load time" msgstr "" diff --git a/bbl/i18n/de/BambuStudio_de.po b/bbl/i18n/de/BambuStudio_de.po index 6a649f226a..53984d3501 100644 --- a/bbl/i18n/de/BambuStudio_de.po +++ b/bbl/i18n/de/BambuStudio_de.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-08 15:59+0800\n" +"POT-Creation-Date: 2023-04-10 17:16+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1937,14 +1937,14 @@ msgstr "Druckbetttemperatur" msgid "Max volumetric speed" msgstr "Maximale Volumengeschwindigkeit" -msgid "℃" -msgstr "" +msgid "\\u2103" +msgstr "\\u2103" msgid "Bed temperature" msgstr "Druckbetttemperatur" -msgid "mm³" -msgstr "mm³" +msgid "mm\\u00B3" +msgstr "mm\\u00B3" msgid "Start calibration" msgstr "Starten" @@ -7289,6 +7289,9 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimale Wischmenge im Wischturm" +msgid "mm³" +msgstr "mm³" + msgid "Filament load time" msgstr "Ladedauer des Filaments" @@ -9270,33 +9273,6 @@ msgstr "" "Wussten Sie, dass Sie die Festigkeit des Modells durch mehr Wandschleifen " "und eine höhere Dichte der Füllung verbessern können?" -#~ msgid "Failed uploading print file. Please enter ip address again." -#~ msgstr "" -#~ "Hochladen der Druckdatei fehlgeschlagen. Bitte geben Sie die IP-Adresse " -#~ "erneut ein." - -#~ msgid "\\u2103" -#~ msgstr "\\u2103" - -#~ msgid "mm\\u00B3" -#~ msgstr "mm\\u00B3" - -#~ msgid "Layers: N/A" -#~ msgstr "Schichten: N/A" - -#, c-format, boost-format -#~ msgid "Layers: %s" -#~ msgstr "Schichten: %s" - -#, c-format, boost-format -#~ msgid "Layers: %d/%d" -#~ msgstr "Schichten: %d/%d" - -#~ msgid "AMS settings are not supported for external spool" -#~ msgstr "" -#~ "Die aktuellen AMS-Einstellungen unterstützen die Verwendung einer " -#~ "externen Spule nicht." - #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -9325,6 +9301,11 @@ msgstr "" #~ msgid "AMS auto switch filament" #~ msgstr "Filament im AMS automatisch wechseln" +#~ msgid "AMS settings are not supported for external spool" +#~ msgstr "" +#~ "Die aktuellen AMS-Einstellungen unterstützen die Verwendung einer " +#~ "externen Spule nicht." + #~ msgid "AWS PRE host" #~ msgstr "AWS PRE-Host" @@ -9608,6 +9589,11 @@ msgstr "" #~ "Bitte geben Sie die korrekte IP-Adresse des Druckers und den Zugangscode " #~ "ein." +#~ msgid "Failed uploading print file. Please enter ip address again." +#~ msgstr "" +#~ "Hochladen der Druckdatei fehlgeschlagen. Bitte geben Sie die IP-Adresse " +#~ "erneut ein." + #~ msgid "Filament 1" #~ msgstr "Filament 1" @@ -9806,6 +9792,15 @@ msgstr "" #~ msgid "Layer Time (log)" #~ msgstr "Schichtdauer (Protokoll)" +#~ msgid "Layers: %d/%d" +#~ msgstr "Schichten: %d/%d" + +#~ msgid "Layers: %s" +#~ msgstr "Schichten: %s" + +#~ msgid "Layers: N/A" +#~ msgstr "Schichten: N/A" + #~ msgid "Layers and Perimeters" #~ msgstr "Schichten und Wände" diff --git a/bbl/i18n/en/BambuStudio_en.po b/bbl/i18n/en/BambuStudio_en.po index f03fc329cf..33fad4b92c 100644 --- a/bbl/i18n/en/BambuStudio_en.po +++ b/bbl/i18n/en/BambuStudio_en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-08 15:59+0800\n" +"POT-Creation-Date: 2023-04-10 17:16+0800\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1884,7 +1884,7 @@ msgid "Nozzle Diameter" msgstr "Nozzle Diameter" msgid "Bed Type" -msgstr "Bed Type" +msgstr "Plate Type" msgid "Nozzle temperature" msgstr "Nozzle temperature" @@ -1895,14 +1895,14 @@ msgstr "Bed Temperature" msgid "Max volumetric speed" msgstr "Max volumetric speed" -msgid "℃" -msgstr "" +msgid "\\u2103" +msgstr "\\u2103" msgid "Bed temperature" msgstr "Bed temperature" -msgid "mm³" -msgstr "mm³" +msgid "mm\\u00B3" +msgstr "mm\\u00B3" msgid "Start calibration" msgstr "Start" @@ -4011,7 +4011,7 @@ msgid "Connection" msgstr "Connection" msgid "Bed type" -msgstr "Bed type" +msgstr "Plate type" msgid "Flushing volumes" msgstr "Flushing volumes" @@ -4742,10 +4742,10 @@ msgid "Print sequence" msgstr "Print sequence" msgid "Same as Global Bed Type" -msgstr "Same as Global Bed Type" +msgstr "Same as Global Plate Type" msgid "Cool Plate" -msgstr "Cool Plate" +msgstr "Cool Plate/PLA Plate" msgid "Engineering Plate" msgstr "Engineering Plate" @@ -6627,7 +6627,7 @@ msgstr "" "the Textured PEI Plate." msgid "Bed types supported by the printer" -msgstr "Bed types supported by the printer" +msgstr "Plate types supported by the printer" msgid "This G-code is inserted at every layer change before lifting z" msgstr "This G-code is inserted at every layer change before lifting z." @@ -7113,6 +7113,9 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimal purge on wipe tower" +msgid "mm³" +msgstr "mm³" + msgid "Filament load time" msgstr "Filament load time" @@ -9041,29 +9044,6 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" -#~ msgid "Failed uploading print file. Please enter ip address again." -#~ msgstr "Failed uploading print file. Please enter IP address again." - -#~ msgid "\\u2103" -#~ msgstr "\\u2103" - -#~ msgid "mm\\u00B3" -#~ msgstr "mm\\u00B3" - -#~ msgid "Layers: N/A" -#~ msgstr "Layers: N/A" - -#, c-format, boost-format -#~ msgid "Layers: %s" -#~ msgstr "Layers: %s" - -#, c-format, boost-format -#~ msgid "Layers: %d/%d" -#~ msgstr "Layers: %d/%d" - -#~ msgid "AMS settings are not supported for external spool" -#~ msgstr "Current AMS settings do not support using an external spool." - #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -9092,6 +9072,9 @@ msgstr "" #~ msgid "AMS auto switch filament" #~ msgstr "AMS auto switch filament" +#~ msgid "AMS settings are not supported for external spool" +#~ msgstr "Current AMS settings do not support using an external spool." + #~ msgid "AWS PRE host" #~ msgstr "AWS PRE host" @@ -9370,6 +9353,9 @@ msgstr "" #~ "Failed to connect to the printer through LAN. Please enter the correct " #~ "printer IP address and access code." +#~ msgid "Failed uploading print file. Please enter ip address again." +#~ msgstr "Failed uploading print file. Please enter IP address again." + #~ msgid "Filament 1" #~ msgstr "Filament 1" @@ -9558,6 +9544,15 @@ msgstr "" #~ msgid "Layer Time (log)" #~ msgstr "Layer Time (log)" +#~ msgid "Layers: %d/%d" +#~ msgstr "Layers: %d/%d" + +#~ msgid "Layers: %s" +#~ msgstr "Layers: %s" + +#~ msgid "Layers: N/A" +#~ msgstr "Layers: N/A" + #~ msgid "Layers and Perimeters" #~ msgstr "Layers and Perimeters" @@ -9756,7 +9751,7 @@ msgstr "" #~ msgstr "Save configuration as:" #~ msgid "Select Bed Type" -#~ msgstr "Select Bed Type" +#~ msgstr "Select Plate Type" #~ msgid "Sending" #~ msgstr "Sending" diff --git a/bbl/i18n/es/BambuStudio_es.po b/bbl/i18n/es/BambuStudio_es.po index b233558870..de8472d9b8 100644 --- a/bbl/i18n/es/BambuStudio_es.po +++ b/bbl/i18n/es/BambuStudio_es.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-08 15:59+0800\n" +"POT-Creation-Date: 2023-04-10 17:16+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -682,7 +682,7 @@ msgstr "" "corte!" msgid "Open Project" -msgstr "Proyesto Abierto" +msgstr "Abrir proyecto" msgid "" "The version of Bambu studio is too low and needs to be updated to the latest " @@ -716,13 +716,13 @@ msgid "*" msgstr "*" msgid "The uploads are still ongoing" -msgstr "Las subidas aún están en curso" +msgstr "El envío aún están en curso" msgid "Stop them and continue anyway?" msgstr "¿Detenerlos y continuar de todos modos?" msgid "Ongoing uploads" -msgstr "Cargas en curso" +msgstr "El envío todavía esta en curso" msgid "Select a G-code file:" msgstr "Seleccione un archivo de código G:" @@ -879,13 +879,13 @@ msgid "Reload from disk" msgstr "Recargar desde el disco" msgid "Reload the selected parts from disk" -msgstr "Recargar las piezas seleccionadas desde el disco" +msgstr "Recargar las partes seleccionadas desde disco" msgid "Replace with STL" -msgstr "Sustituir por STL" +msgstr "Reemplazar con STL" msgid "Replace the selected part with new STL" -msgstr "Sustituir la pieza seleccionada por un STL nuevo" +msgstr "Reemplazar las partes seleccionadas con nuevo STL" msgid "Change filament" msgstr "Cambiar el filamento" @@ -1049,7 +1049,7 @@ msgid "Center" msgstr "Centrar" msgid "Edit Process Settings" -msgstr "Editar la configuración del proceso" +msgstr "Editar en tabla de parámetros" msgid "Edit print parameters for a single object" msgstr "Editar los parámetros de impresión de un solo objeto" @@ -1369,10 +1369,10 @@ msgid "Open Preferences." msgstr "Abrir preferencias" msgid "Open next tip." -msgstr "Abrir el siguiente consejo" +msgstr "Abrir siguiente sugerencia" msgid "Open Documentation in web browser." -msgstr "Abrir documentación en el navegador web" +msgstr "Abrir documentación en el navegador" msgid "Pause:" msgstr "" @@ -1399,7 +1399,7 @@ msgid "Jump to layer" msgstr "Saltar a la capa" msgid "Please enter the layer number" -msgstr "Introduzca el número de capa." +msgstr "Por favor, introduzca el número de capa." msgid "Add Pause" msgstr "Añadir pausa" @@ -1497,7 +1497,7 @@ msgid "Pull back current filament" msgstr "Extraer el filamento actual" msgid "Push new filament into extruder" -msgstr "Introducir el nuevo filamento en el extrusor" +msgstr "Empuje el nuevo filamento en el extrusor" msgid "Purge old filament" msgstr "Purgar el filamento viejo" @@ -1620,7 +1620,7 @@ msgid "Unknown Failure" msgstr "Error desconocido" msgid "Please check the printer network connection." -msgstr "Compruebe la conexión de red de la impresora." +msgstr "Por favor, comprueba la conexión de red de la impresora." msgid "Abnormal print file data. Please slice again" msgstr "Datos anormales del archivo de impresión. Por favor, procese de nuevo" @@ -1673,8 +1673,7 @@ msgstr "Enviando la configuración de impresión" #, c-format, boost-format msgid "Successfully sent. Will automatically jump to the device page in %ss" msgstr "" -"Enviado con éxito. Se saltará automáticamente a la página del dispositivo en " -"%s s" +"Enviado correctamente. Se mostrará automáticamente en el dispositivo en %s S" msgid "An SD card needs to be inserted before printing via LAN." msgstr "Se debe insertar una tarjeta microSD antes de imprimir mediante LAN." @@ -1702,7 +1701,7 @@ msgid "Successfully sent. Close current page in %s s" msgstr "Se ha enviado correctamente. Cerrar la página actual en %s s" msgid "An SD card needs to be inserted before sending to printer." -msgstr "Se debe insertar una tarjeta microSD antes de enviar a la impresora." +msgstr "Debe insertar una tarjeta microSD antes de enviar a la impresora." msgid "Please log out and login to the printer again." msgstr "Cierre sesión y vuelva a iniciarla en la impresora." @@ -1760,7 +1759,7 @@ msgid "Attention!" msgstr "¡Atención!" msgid "Downloading" -msgstr "" +msgstr "Descargando" msgid "Download failed" msgstr "Descarga fallida" @@ -1781,7 +1780,7 @@ msgid "Portions copyright" msgstr "Porciones del copyright" msgid "Copyright" -msgstr "Copyright" +msgstr "Derecho de autor" msgid "License" msgstr "Licencia" @@ -1935,14 +1934,14 @@ msgstr "Temperatura de la base" msgid "Max volumetric speed" msgstr "Velocidad volumétrica máxima" -msgid "℃" -msgstr "" +msgid "\\u2103" +msgstr "\\ u2103" msgid "Bed temperature" msgstr "Temperatura de la base" -msgid "mm³" -msgstr "mm³" +msgid "mm\\u00B3" +msgstr "mm\\ u00b3" msgid "Start calibration" msgstr "Iniciar" @@ -2004,7 +2003,7 @@ msgid "Disable AMS" msgstr "Deshabilitar AMS" msgid "Print with the filament mounted on the back of chassis" -msgstr "Impresión con filamento en una bobina externa" +msgstr "Imprimir con el filamento montado en la parte posterior del chasis" msgid "Cabin humidity" msgstr "Humedad de cabina" @@ -2043,7 +2042,7 @@ msgid "" msgstr "Configure qué ranura AMS debe utilizarse para la impresión." msgid "Filament used in this print job" -msgstr "Filamento utilizado en esta impresión" +msgstr "Filamento utilizado en este trabajo de impresión" msgid "AMS slot used for this filament" msgstr "Ranura AMS utilizada para este filamento" @@ -2829,13 +2828,13 @@ msgid "Quality / Speed" msgstr "Calidad / Velocidad" msgid "Smooth" -msgstr "Suavizar" +msgstr "Alisado" msgid "Radius" msgstr "Radio" msgid "Keep min" -msgstr "Mantener mínimo" +msgstr "minutos restantes" msgid "Left mouse button:" msgstr "Botón izquierdo del ratón:" @@ -3104,7 +3103,7 @@ msgid "Slice plate" msgstr "Laminar placa" msgid "Print plate" -msgstr "Placa de impresión" +msgstr "Imprimir placa" msgid "Slice all" msgstr "Laminar todo" @@ -3410,7 +3409,7 @@ msgid "No to All" msgstr "No a todo" msgid "Choose a directory" -msgstr "Elegir un directorio" +msgstr "Seleccionar directorio" #, c-format, boost-format msgid "There is %d config exported. (Only non-system configs)" @@ -3547,13 +3546,13 @@ msgid "All Files" msgstr "Todos los archivos" msgid "Group files by year, recent first." -msgstr "Agrupe los archivos por año, primero los recientes." +msgstr "Agrupar ficheros por año, primero los más recientes" msgid "Group files by month, recent first." -msgstr "Agrupe los archivos por mes, primero los recientes." +msgstr "Agrupar ficheros por mes, primero los más recientes." msgid "Show all files, recent first." -msgstr "Mostrar todos los archivos, primero los recientes." +msgstr "Mostrar todos los fciheros, primero los más recientes." msgid "Timelapse" msgstr "Timelapse" @@ -3568,13 +3567,13 @@ msgid "Switch to video files." msgstr "Cambia a archivos de vídeo." msgid "Delete selected files from printer." -msgstr "Elimine los archivos seleccionados de la impresora." +msgstr "Delete selected files from printer." msgid "Download" msgstr "Descargar" msgid "Download selected files from printer." -msgstr "Descargue los archivos seleccionados de la impresora." +msgstr "Descargar archivos seleccionados de la impresora." msgid "Select" msgstr "Seleccionar" @@ -3586,7 +3585,7 @@ msgid "No printers." msgstr "No hay impresoras." msgid "Not supported by this model of printer!" -msgstr "¡No es compatible con este modelo de impresora!" +msgstr "¡Modelo de impresora no soportado!" msgid "Connecting..." msgstr "Conectando…" @@ -3659,7 +3658,7 @@ msgid "Camera" msgstr "Cámara" msgid "SD Card" -msgstr "Tarjeta MicroSD" +msgstr "Tarjeta SD" msgid "Camera Setting" msgstr "Configuración de cámara" @@ -3710,10 +3709,10 @@ msgid "Debug Info" msgstr "Información de Depuración" msgid "No SD Card" -msgstr "No hay tarjeta SD" +msgstr "Tarjeta SD no encontrada" msgid "SD Card Abnormal" -msgstr "Tarjeta microSD anormal" +msgstr "Tarjeta SD errónea" msgid "Printing List" msgstr "Imprimiendo Lista" @@ -3722,7 +3721,7 @@ msgid "Cancel print" msgstr "Cancelar impresión" msgid "Are you sure you want to cancel this print?" -msgstr "¿Estás seguro de que quieres cancelar esta impresión?" +msgstr "¿Está seguro de cancelar la impresión?" #, c-format, boost-format msgid "" @@ -3911,13 +3910,13 @@ msgid "ERROR" msgstr "¡Error!" msgid "CANCELED" -msgstr "Cancelado" +msgstr "CANCELADO" msgid "COMPLETED" -msgstr "Completado" +msgstr "COMPLETADO" msgid "Cancel upload" -msgstr "Cancelar la subida" +msgstr "Cancelar envío" msgid "Slice ok." msgstr "Rebanado correcto." @@ -3932,7 +3931,7 @@ msgid "Warning:" msgstr "Advertencia:" msgid "Export successfully." -msgstr "Exportación correcta" +msgstr "Exportado correctamente" msgid " (Repair)" msgstr " (Reparación)" @@ -4088,7 +4087,7 @@ msgid "Remove last filament" msgstr "Retirar el último filamento" msgid "Synchronize filament list from AMS" -msgstr "Sincronizar la lista de filamentos de AMS" +msgstr "Sincronizar filamentos desde AMS" msgid "Set filaments to use" msgstr "Establecer filamentos a utilizar" @@ -4184,15 +4183,15 @@ msgid "The 3mf is not from Bambu Lab, load geometry data only." msgstr "El 3mf no es Bambu lab, solo se carga datos de geometría." msgid "Load 3mf" -msgstr "cargar 3mf" +msgstr "Cargar 3mf" msgid "The Config can not be loaded." -msgstr "No se puede cargar la configuración" +msgstr "La configuración no puede ser cargada." msgid "The 3mf is generated by old Bambu Studio, load geometry data only." msgstr "" -"El 3mf fue generado por una versión antigua de Bambu Studio, solo se " -"cargaran datos de geometría." +"3mf generado con versión antigua de Bambu Studio, se cargan datos de " +"geometría unicamente." #, c-format, boost-format msgid "" @@ -4394,7 +4393,7 @@ msgstr "descargando proyecto..." #, c-format, boost-format msgid "Project downloaded %d%%" -msgstr "Proyecto descargado %d%%" +msgstr "Proyecto %d%% descargado" msgid "The selected file" msgstr "El archivo seleccionado" @@ -4814,7 +4813,7 @@ msgid "Add/Remove filaments" msgstr "Añadir/quitar filamento" msgid "Add/Remove materials" -msgstr "Añadir/eliminar materiales" +msgstr "Añadir/quitar materiales" msgid "Add/Remove printers" msgstr "Añadir/quitar impresoras" @@ -7265,6 +7264,9 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Purga mínima en la torre de limpieza" +msgid "mm³" +msgstr "mm³" + msgid "Filament load time" msgstr "Tiempo de carga de filamento" @@ -9236,32 +9238,6 @@ msgstr "" "¿Sabía que puede utilizar más bucles de pared y una densidad de relleno " "dispersa más alta para mejorar la resistencia del modelo?" -#~ msgid "Failed uploading print file. Please enter ip address again." -#~ msgstr "" -#~ "Error al cargar el archivo de impresión. Vuelva a introducir la dirección " -#~ "IP." - -#~ msgid "\\u2103" -#~ msgstr "\\ u2103" - -#~ msgid "mm\\u00B3" -#~ msgstr "mm\\ u00b3" - -#~ msgid "Layers: N/A" -#~ msgstr "Capas: N/A" - -#, c-format, boost-format -#~ msgid "Layers: %s" -#~ msgstr "Capas: %s" - -#, c-format, boost-format -#~ msgid "Layers: %d/%d" -#~ msgstr "Capas: %d/%d" - -#~ msgid "AMS settings are not supported for external spool" -#~ msgstr "" -#~ "La configuración actual de AMS no admite el uso de una bobina externa." - #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -9290,6 +9266,10 @@ msgstr "" #~ msgid "AMS auto switch filament" #~ msgstr "Cambio automático de filamento AMS" +#~ msgid "AMS settings are not supported for external spool" +#~ msgstr "" +#~ "La configuración actual de AMS no admite el uso de una bobina externa." + #~ msgid "AWS PRE host" #~ msgstr "Host de AWS PRE" @@ -9573,6 +9553,11 @@ msgstr "" #~ "No se pudo conectar a la impresora a través de LAN. Introduzca la " #~ "dirección IP de la impresora y el código de acceso correctos." +#~ msgid "Failed uploading print file. Please enter ip address again." +#~ msgstr "" +#~ "Error al cargar el archivo de impresión. Vuelva a introducir la dirección " +#~ "IP." + #~ msgid "Filament 1" #~ msgstr "Filamento 1" @@ -9771,6 +9756,15 @@ msgstr "" #~ msgid "Layer Time (log)" #~ msgstr "Tiempo de capa (registro)" +#~ msgid "Layers: %d/%d" +#~ msgstr "Capas: %d/%d" + +#~ msgid "Layers: %s" +#~ msgstr "Capas: %s" + +#~ msgid "Layers: N/A" +#~ msgstr "Capas: N/A" + #~ msgid "Layers and Perimeters" #~ msgstr "Capas y perímetros" diff --git a/bbl/i18n/fr/BambuStudio_fr.po b/bbl/i18n/fr/BambuStudio_fr.po index 05a2e81b80..eeed0ed721 100644 --- a/bbl/i18n/fr/BambuStudio_fr.po +++ b/bbl/i18n/fr/BambuStudio_fr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-08 15:59+0800\n" +"POT-Creation-Date: 2023-04-10 17:16+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1675,8 +1675,7 @@ msgstr "" "Envoyé avec succès. Basculement automatique vers la page Appareil dans %ss" msgid "An SD card needs to be inserted before printing via LAN." -msgstr "" -"Une carte microSD doit être insérée avant d'imprimer via le réseau local." +msgstr "Une carte SD doit être insérée avant d'imprimer via le réseau local." msgid "Failed to send the print job. Please try again." msgstr "L'envoi de la tâche d'impression a échoué. Veuillez réessayer." @@ -1694,14 +1693,14 @@ msgid "Sending gcode file through cloud service" msgstr "Envoi du fichier G-code via le service cloud" msgid "Sending gcode file to sdcard" -msgstr "Envoi du fichier G-code sur la carte MicroSD" +msgstr "Envoi du fichier G-code sur la carte SD" #, c-format, boost-format msgid "Successfully sent. Close current page in %s s" msgstr "Envoyé avec succès. Fermeture de la page actuelle dans %ss" msgid "An SD card needs to be inserted before sending to printer." -msgstr "Une carte microSD doit être insérée avant l'envoi à l'imprimante." +msgstr "Une carte SD doit être insérée avant l'envoi à l'imprimante." msgid "Please log out and login to the printer again." msgstr "Veuillez vous déconnecter et vous reconnecter à l'imprimante." @@ -1935,14 +1934,14 @@ msgstr "Température du lit" msgid "Max volumetric speed" msgstr "Vitesse volumétrique maximale" -msgid "℃" -msgstr "" +msgid "\\u2103" +msgstr "\\u2103" msgid "Bed temperature" msgstr "Température du plateau" -msgid "mm³" -msgstr "mm³" +msgid "mm\\u00B3" +msgstr "mm\\u00B3" msgid "Start calibration" msgstr "Démarrer" @@ -2496,7 +2495,7 @@ msgid "Heatbed preheating" msgstr "Préchauffage du plateau chauffant" msgid "Sweeping XY mech mode" -msgstr "Mode mécanique de balayage XY" +msgstr "Mesure fréquence axes XY" msgid "Changing filament" msgstr "Changement de filament" @@ -3651,7 +3650,7 @@ msgid "Camera" msgstr "Caméra" msgid "SD Card" -msgstr "Carte MicroSD" +msgstr "Carte SD" msgid "Camera Setting" msgstr "Réglage de la Caméra" @@ -3702,10 +3701,10 @@ msgid "Debug Info" msgstr "Les informations de débogage" msgid "No SD Card" -msgstr "Pas de carte MicroSD" +msgstr "Pas de carte SD" msgid "SD Card Abnormal" -msgstr "Carte MicroSD anormale" +msgstr "Carte SD anormale" msgid "Printing List" msgstr "Liste d'impression" @@ -3788,7 +3787,7 @@ msgid "Ludicrous" msgstr "Ridicule" msgid "Can't start this without SD card." -msgstr "Impossible de démarrer sans carte microSD." +msgstr "Impossible de démarrer sans carte SD." msgid "Failed to connect to the server" msgstr "Impossible de se connecter au serveur" @@ -5092,10 +5091,10 @@ msgstr "" "filament => emplacement AMS." msgid "An SD card needs to be inserted before printing." -msgstr "Une carte MicroSD doit être insérée avant l'impression." +msgstr "Une carte SD doit être insérée avant l'impression." msgid "An SD card needs to be inserted to record timelapse." -msgstr "Une carte MicroSD doit être insérée pour enregistrer un timelapse." +msgstr "Une carte SD doit être insérée pour enregistrer un timelapse." msgid "" "Cannot send the print job to a printer whose firmware is required to get " @@ -5150,7 +5149,7 @@ msgid "Modifying the device name" msgstr "Modification du nom de l'appareil" msgid "Send to Printer SD card" -msgstr "Envoyer à la carte microSD de l'imprimante" +msgstr "Envoyer à la carte SD de l'imprimante" msgid "Cannot send the print task when the upgrade is in progress" msgstr "" @@ -5165,7 +5164,7 @@ msgstr "" "L'imprimante doit se trouver sur le même réseau local que Bambu Studio." msgid "The printer does not support sending to printer SD card." -msgstr "L'imprimante ne prend pas en charge l'envoi vers la carte microSD." +msgstr "L'imprimante ne prend pas en charge l'envoi vers la carte SD." msgid "Log in printer" msgstr "Connectez-vous à l'imprimante" @@ -5530,7 +5529,7 @@ msgstr "Détaché" msgid "Following preset will be deleted too." msgid_plural "Following presets will be deleted too." msgstr[0] "Le préréglage suivant sera également supprimé." -msgstr[1] "" +msgstr[1] "Le préréglage suivants sera également supprimé." #, boost-format msgid "Are you sure to %1% the selected preset?" @@ -7284,6 +7283,9 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Purge minimale sur la tour de nettoyage" +msgid "mm³" +msgstr "mm³" + msgid "Filament load time" msgstr "Temps de chargement du filament" @@ -9277,33 +9279,6 @@ msgstr "" "Saviez-vous que vous pouvez définir un plus grand nombre de mur et une " "densité de remplissage plus élevée pour améliorer la résistance du modèle ?" -#~ msgid "Failed uploading print file. Please enter ip address again." -#~ msgstr "" -#~ "Impossible de téléverser le fichier d'impression. Entrez à nouveau " -#~ "l'adresse IP." - -#~ msgid "\\u2103" -#~ msgstr "\\u2103" - -#~ msgid "mm\\u00B3" -#~ msgstr "mm\\u00B3" - -#~ msgid "Layers: N/A" -#~ msgstr "Couches: N/A" - -#, c-format, boost-format -#~ msgid "Layers: %s" -#~ msgstr "Couches: %s" - -#, c-format, boost-format -#~ msgid "Layers: %d/%d" -#~ msgstr "Couches: %d/%d" - -#~ msgid "AMS settings are not supported for external spool" -#~ msgstr "" -#~ "Les paramètres actuels de l'AMS ne prennent pas en charge l'utilisation " -#~ "de bobine externe." - #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -9332,6 +9307,11 @@ msgstr "" #~ msgid "AMS auto switch filament" #~ msgstr "Changement de filament automatique dans l'AMS" +#~ msgid "AMS settings are not supported for external spool" +#~ msgstr "" +#~ "Les paramètres actuels de l'AMS ne prennent pas en charge l'utilisation " +#~ "de bobine externe." + #~ msgid "AWS PRE host" #~ msgstr "Hôte AWS PRE" @@ -9617,6 +9597,11 @@ msgstr "" #~ "Impossible de se connecter à l'imprimante via le réseau local. Entrez " #~ "l'adresse IP et le code d'accès corrects de l'imprimante." +#~ msgid "Failed uploading print file. Please enter ip address again." +#~ msgstr "" +#~ "Impossible de téléverser le fichier d'impression. Entrez à nouveau " +#~ "l'adresse IP." + #~ msgid "Filament 1" #~ msgstr "Filament 1" @@ -9817,6 +9802,15 @@ msgstr "" #~ msgid "Layer Time (log)" #~ msgstr "Temps de couche (journal)" +#~ msgid "Layers: %d/%d" +#~ msgstr "Couches: %d/%d" + +#~ msgid "Layers: %s" +#~ msgstr "Couches: %s" + +#~ msgid "Layers: N/A" +#~ msgstr "Couches: N/A" + #~ msgid "Layers and Perimeters" #~ msgstr "Couches et Périmètres" diff --git a/bbl/i18n/hu/BambuStudio_hu.po b/bbl/i18n/hu/BambuStudio_hu.po index 4624cb0210..bac28fa152 100644 --- a/bbl/i18n/hu/BambuStudio_hu.po +++ b/bbl/i18n/hu/BambuStudio_hu.po @@ -2,13 +2,16 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-08 15:59+0800\n" +"POT-Creation-Date: 2023-04-10 17:16+0800\n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Localazy (https://localazy.com)\n" "Plural-Forms: nplurals=2; plural=(n==1) ? 0 : 1;\n" +"X-Generator: Poedit 3.2.2\n" msgid "Supports Painting" msgstr "Támaszok festése" @@ -20,7 +23,7 @@ msgid "Section view" msgstr "Keresztmetszet nézet" msgid "Reset direction" -msgstr "Reset direction" +msgstr "Irány visszaállítása" msgid "Ctrl + Mouse wheel" msgstr "Ctrl + Egérgörgő" @@ -59,7 +62,7 @@ msgid "Perform" msgstr "Alkalmaz" msgid "Gap area" -msgstr "Gap area" +msgstr "Rés területe" msgid "Tool type" msgstr "Eszköz típusa" @@ -68,7 +71,7 @@ msgid "Smart fill angle" msgstr "Okos kitöltési szög" msgid "On overhangs only" -msgstr "On overhangs only" +msgstr "Csak túlnyúlásokon" msgid "Auto support threshold angle: " msgstr "Automatikus támasz szögének határértéke: " @@ -87,7 +90,7 @@ msgstr "Hézagok kitöltése" #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" -msgstr "Allows painting only on facets selected by: \"%1%\"" +msgstr "Csak a(z) „%1%“ által kijelölt felületeken történik festés" msgid "Highlight faces according to overhang angle." msgstr "Felületek kiemelése a túlnyúlási szögnek megfelelően." @@ -149,7 +152,7 @@ msgid "Ctrl + Shift + Enter" msgstr "Ctrl + Shift + Enter" msgid "Toggle Wireframe" -msgstr "Toggle Wireframe" +msgstr "Drótváz-megjelenítés váltása" msgid "Shortcut Key " msgstr "Gyorsgomb " @@ -282,10 +285,10 @@ msgid "Movement:" msgstr "Mozgatás:" msgid "Movement" -msgstr "Movement" +msgstr "Mozgás" msgid "Height" -msgstr "Height" +msgstr "Magasság" msgid "Edit connectors" msgstr "" @@ -465,22 +468,22 @@ msgid "Perform Recognition" msgstr "Felismerés" msgid "Brush size" -msgstr "Brush size" +msgstr "Ecset mérete" msgid "Brush shape" -msgstr "Brush shape" +msgstr "Ecset alakja" msgid "Enforce seam" -msgstr "Enforce seam" +msgstr "Varrat kényszerítése" msgid "Block seam" -msgstr "Block seam" +msgstr "Varrat blokkolása" msgid "Seam painting" -msgstr "Seam painting" +msgstr "Varratfestés" msgid "Remove selection" -msgstr "Remove selection" +msgstr "Kijelölés törlése" msgid "Shift + Mouse move up or dowm" msgstr "" @@ -489,16 +492,16 @@ msgid "Rotate text" msgstr "" msgid "Text shape" -msgstr "Text shape" +msgstr "Szöveg alakja" msgid "Font" -msgstr "Font" +msgstr "Betűtípus" msgid "Thickness" -msgstr "Thickness" +msgstr "Vastagság" msgid "Input text" -msgstr "Input text" +msgstr "Szöveg" msgid "Embeded" msgstr "" @@ -566,7 +569,7 @@ msgid "V" msgstr "V" msgid "Internal Version" -msgstr "Internal Version" +msgstr "Belső verzió" msgid "Version" msgstr "Verzió" @@ -596,14 +599,14 @@ msgid "BambuStudio got an unhandled exception: %1%" msgstr "A BambuStudio kezeletlen kivételbe ütközött: %1%" msgid "Downloading Bambu Network Plug-in" -msgstr "Downloading Bambu Network Plug-in" +msgstr "Bambu Network bővítmény letöltése" msgid "Incorrect password" -msgstr "Incorrect password" +msgstr "Helytelen jelszó" #, c-format, boost-format msgid "Connect %s failed! [SN:%s, code=%s]" -msgstr "Connect %s failed! [SN:%s, code=%s]" +msgstr "A következőhöz való csatlakozás sikertelen: %s! [SN:%s, code=%s]" msgid "" "BambuStudio configuration file may be corrupted and is not abled to be " @@ -652,7 +655,7 @@ msgid "Choose one file (3mf):" msgstr "Válassz ki egy fájlt (3mf):" msgid "Choose one or more files (3mf/step/stl/svg/obj/amf):" -msgstr "Choose one or more files (3mf/step/stl/svg/obj/amf):" +msgstr "Válassz ki egy vagy több fájlt (3mf/step/stl/svg/obj/amf):" msgid "Choose one file (gcode/.gco/.g/.ngc/ngc):" msgstr "Válassz ki egy fájlt (gcode/.gco/.g/.ngc/ngc):" @@ -668,10 +671,11 @@ msgstr "" "elmentheted új beállításokként." msgid "User logged out" -msgstr "User logged out" +msgstr "Felhasználó kijelentkezett" msgid "new or open project file is not allowed during the slicing process!" -msgstr "new or open project file is not allowed during the slicing process!" +msgstr "" +"a projektfájlokkal kapcsolatos műveletek nem engedélyezettek szeletés közben!" msgid "Open Project" msgstr "Projekt megnyitása" @@ -708,13 +712,13 @@ msgid "*" msgstr "*" msgid "The uploads are still ongoing" -msgstr "The uploads are still ongoing" +msgstr "Még folyamatban van a feltöltés" msgid "Stop them and continue anyway?" -msgstr "Stop them and continue anyway?" +msgstr "Megállítod és folytatod?" msgid "Ongoing uploads" -msgstr "Ongoing uploads" +msgstr "Folyamatban lévő feltöltések" msgid "Select a G-code file:" msgstr "Válassz egy G-code fájlt:" @@ -732,7 +736,7 @@ msgid "New Folder" msgstr "" msgid "Open" -msgstr "Open" +msgstr "Megnyitás" msgid "Rename" msgstr "Átnevezés" @@ -817,10 +821,10 @@ msgid "Select settings" msgstr "Beállítások kiválasztása" msgid "Hide" -msgstr "Hide" +msgstr "Elrejtés" msgid "Show" -msgstr "Show" +msgstr "Megjelenítés" msgid "Del" msgstr "" @@ -868,16 +872,16 @@ msgid "Export as STL" msgstr "Exportálás STL-ként" msgid "Reload from disk" -msgstr "Reload from disk" +msgstr "Újratöltés lemezről" msgid "Reload the selected parts from disk" -msgstr "Reload the selected parts from disk" +msgstr "A kiválasztott tárgyak újratöltése a lemezről" msgid "Replace with STL" -msgstr "Replace with STL" +msgstr "Lecserélés STL-lel" msgid "Replace the selected part with new STL" -msgstr "Replace the selected part with new STL" +msgstr "Lecseréli a kijelölt tárgyat egy új STL-lel" msgid "Change filament" msgstr "Filament csere" @@ -902,7 +906,7 @@ msgid "Scale an object to fit the build volume" msgstr "Átméretez egy objektumot, hogy beférjen a nyomtatótérbe" msgid "Flush Options" -msgstr "Flush Options" +msgstr "Öblítési lehetőségek" msgid "Flush into objects' infill" msgstr "Öblítés a tárgyak kitöltésébe" @@ -914,7 +918,7 @@ msgid "Flush into objects' support" msgstr "Öblítés a tárgyak támaszába" msgid "Edit in Parameter Table" -msgstr "Edit in Parameter Table" +msgstr "Szerkesztés a paramétertáblában" msgid "Convert from inch" msgstr "Átváltás hüvelykről" @@ -972,7 +976,7 @@ msgid "Add Primitive" msgstr "Primitív hozzáadása" msgid "Show Labels" -msgstr "Show Labels" +msgstr "Címkék megjelenítése" msgid "To objects" msgstr "Objektumokra" @@ -1036,13 +1040,13 @@ msgid "Clone" msgstr "Klónozás" msgid "Simplify Model" -msgstr "Simplify Model" +msgstr "Modell egyszerűsítése" msgid "Center" -msgstr "Center" +msgstr "Közép" msgid "Edit Process Settings" -msgstr "Edit Process Settings" +msgstr "Folyamatbeállítások szerkesztése" msgid "Edit print parameters for a single object" msgstr "Nyomtatási paraméterek szerkesztése egy objektumhoz" @@ -1143,8 +1147,8 @@ msgid "" "Switch to per-object setting mode to edit process settings of selected " "objects." msgstr "" -"Switch to per-object setting mode to edit process settings of selected " -"objects." +"Válts át objektumonkénti beállítás módba a kiválasztott objektumok " +"folyamatbeállításainak szerkesztéséhez." msgid "Delete connector from object which is a part of cut" msgstr "" @@ -1238,7 +1242,7 @@ msgstr "" "lennie." msgid "The type of the last solid object part is not to be changed." -msgstr "Az utolsó tömör objektumrész típusa nem módosítható." +msgstr "Az utolsó tömör objektum típusa nem módosítható." msgid "Negative Part" msgstr "Negatív tárgy" @@ -1334,7 +1338,7 @@ msgid "Auto Brim" msgstr "Automatikus perem" msgid "Outer wall speed" -msgstr "Outer wall speed" +msgstr "Külső fal sebessége" msgid "Plate" msgstr "Tálca" @@ -1358,13 +1362,13 @@ msgid "More" msgstr "Több" msgid "Open Preferences." -msgstr "Open Preferences" +msgstr "Beállítások megnyitása" msgid "Open next tip." -msgstr "Open next tip" +msgstr "Következő tipp megnyitása" msgid "Open Documentation in web browser." -msgstr "Open documentation in web browser" +msgstr "Dokumentáció megnyitása webböngészőben" msgid "Pause:" msgstr "" @@ -1379,28 +1383,28 @@ msgid "Custom G-code" msgstr "Egyedi G-kód" msgid "Enter Custom G-code used on current layer:" -msgstr "Enter Custom G-code used on current layer:" +msgstr "Add meg az aktuális rétegnél használandó egyedi G-kódot:" msgid "OK" msgstr "OK" msgid "Jump to Layer" -msgstr "Jump to layer" +msgstr "Ugrás a rétegre" msgid "Jump to layer" -msgstr "Jump to layer" +msgstr "Ugrás a rétegre" msgid "Please enter the layer number" -msgstr "Please enter the layer number." +msgstr "Kérjük, add meg a réteg számát." msgid "Add Pause" -msgstr "Add Pause" +msgstr "Szünet hozzáadása" msgid "Add Custom G-code" -msgstr "Add Custom G-code" +msgstr "Egyedi G-kód hozzáadása" msgid "Add Custom Template" -msgstr "Add Custom Template" +msgstr "Egyéni sablon hozzáadása" msgid "Filament " msgstr "Filament " @@ -1439,13 +1443,13 @@ msgid "Ams filament backup" msgstr "" msgid "AMS not connected" -msgstr "AMS not connected" +msgstr "Az AMS nincs csatlakoztatva" msgid "Cali" -msgstr "Cali" +msgstr "Kali" msgid "Calibration of extrusion" -msgstr "Calibration of extrusion" +msgstr "Extrudálás kalibrálása" msgid "Load Filament" msgstr "Filament betöltés" @@ -1454,16 +1458,16 @@ msgid "Unload Filament" msgstr "Filament kitöltése" msgid "Ext Spool" -msgstr "Ext Spool" +msgstr "Kül. tekercs" msgid "Tips" msgstr "Tippek" msgid "Guide" -msgstr "Guide" +msgstr "Útmutató" msgid "Retry" -msgstr "Retry" +msgstr "Újra" msgid "Calibrating AMS..." msgstr "AMS kalibrálása..." @@ -1480,7 +1484,7 @@ msgid "Cancel calibration" msgstr "Kalibrálás megszakítása" msgid "Heat the nozzle" -msgstr "Heat the nozzle" +msgstr "Fűtsd fel a fúvókát" msgid "Cut filament" msgstr "Filament vágása" @@ -1537,7 +1541,7 @@ msgstr "" "feldolgozásakor." msgid "Arranging" -msgstr "Arranging" +msgstr "Elrendezés" msgid "Arranging canceled." msgstr "Elrendezése törölve." @@ -1612,7 +1616,7 @@ msgid "Unknown Failure" msgstr "Ismeretlen hiba" msgid "Please check the printer network connection." -msgstr "Please check the printer network connection." +msgstr "Kérjük, ellenőrizd a nyomtató hálózati kapcsolatát." msgid "Abnormal print file data. Please slice again" msgstr "Rendellenes nyomtatási fájladatok. Kérjük, szeleteld újra" @@ -1662,38 +1666,39 @@ msgstr "Nyomtatási konfiguráció küldése" #, c-format, boost-format msgid "Successfully sent. Will automatically jump to the device page in %ss" -msgstr "Successfully sent. Will automatically jump to the device page in %ss" +msgstr "" +"Sikeresen elküldve. Az eszköz oldala automatikusan megjelenik %s mp-en belül" msgid "An SD card needs to be inserted before printing via LAN." msgstr "A LAN-on keresztüli nyomtatáshoz helyezz be egy SD kártyát." msgid "Failed to send the print job. Please try again." -msgstr "Failed to send the print job. Please try again." +msgstr "Nem sikerült elküldeni a nyomtatási feladatot. Kérlek próbáld újra." msgid "Send to Printer failed. Please try again." -msgstr "Send to Printer failed. Please try again." +msgstr "Nem sikerült elküldeni a nyomtatóra. Kérjük, próbáld újra." msgid "No space left on Printer SD card" msgstr "" msgid "Sending gcode file over LAN" -msgstr "Sending G-code file over LAN" +msgstr "G-kód fájl küldése LAN-on keresztül" msgid "Sending gcode file through cloud service" -msgstr "Sending G-code file through cloud service" +msgstr "G-kód fájl küldése felhőszolgáltatáson keresztül" msgid "Sending gcode file to sdcard" -msgstr "Sending G-code file to MicroSD card" +msgstr "G-kód fájl küldése MicroSD-kártyára" #, c-format, boost-format msgid "Successfully sent. Close current page in %s s" -msgstr "Successfully sent. Close current page in %s s" +msgstr "Sikeresen elküldve. Az oldal bezárul %s mp-en belül" msgid "An SD card needs to be inserted before sending to printer." -msgstr "A MicroSD card needs to be inserted before sending to printer." +msgstr "A nyomtatóra való küldés előtt be kell helyezned egy MicroSD-kártyát." msgid "Please log out and login to the printer again." -msgstr "Please log out and login to the printer again." +msgstr "Kérjük, jelentkezz ki, majd jelentkezz be újra a nyomtatóba." msgid "Choose SLA archive:" msgstr "" @@ -1757,7 +1762,7 @@ msgid "Cancelled" msgstr "Megszakítva" msgid "Install successfully." -msgstr "Installed successfully" +msgstr "Sikeresen telepítve" msgid "Installing" msgstr "Telepítés" @@ -1833,7 +1838,7 @@ msgstr "" "vannak feltüntetve." msgid "AMS Materials Setting" -msgstr "AMS Materials Setting" +msgstr "AMS anyagok beállítása" msgid "Confirm" msgstr "Megerősítés" @@ -1866,16 +1871,16 @@ msgid "SN" msgstr "SN" msgid "Setting AMS slot information while printing is not supported" -msgstr "Setting AMS slot information while printing is not supported" +msgstr "Nyomtatás közben nem változtathatóak meg a AMS férőhelyek adatai" msgid "Factors of dynamic flow cali" -msgstr "Factors of dynamic flow cali" +msgstr "Dinamikus anyagáramlás kali." msgid "Factor K" -msgstr "Factor K" +msgstr "K-tényező" msgid "Factor N" -msgstr "Factor N" +msgstr "N-tényező" msgid "Setting Virtual slot information while printing is not supported" msgstr "" @@ -1884,10 +1889,10 @@ msgid "Are you sure you want to clear the filament information?" msgstr "" msgid "Please input a valid value (K in 0~0.5)" -msgstr "Please input a valid value (K in 0~0.5)" +msgstr "Adj meg egy érvényes értéket (K 0-0,5 között)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" -msgstr "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" +msgstr "Adj meg egy érvényes értéket (K 0-0,5, N 0,6-2,0 között)" msgid "You need to select the material type and color firet." msgstr "" @@ -1896,121 +1901,124 @@ msgid "Other color" msgstr "" msgid "Dynamic flow calibration" -msgstr "Dynamic flow calibration" +msgstr "Dinamikus anyagáramlás kalibráció" msgid "" "The nozzle temp and max volumetric speed will affect the calibration " "results. Please fill in the same values as the actual printing. They can be " "auto-filled by selecting a filament preset." msgstr "" -"The nozzle temp and max volumetric speed will affect the calibration " -"results. Please fill in the same values as the actual printing. They can be " -"auto-filled by selecting a filament preset." +"A fúvóka hőmérséklete és a maximális anyagáramlás sebessége befolyásolja a " +"kalibrációs eredményeket. Kérjük, add meg a nyomtatás használt tényleges " +"értékeket. Ezek automatikusan is kitöltheted a megfelelő filamentbeállítás " +"kiválasztásával." msgid "Nozzle Diameter" -msgstr "Nozzle Diameter" +msgstr "Fúvóka átmérője" msgid "Bed Type" -msgstr "Bed Type" +msgstr "Tálcatípus" msgid "Nozzle temperature" msgstr "Fúvóka hőmérséklet" msgid "Bed Temperature" -msgstr "Bed Temperature" +msgstr "Asztalhőmérséklet" msgid "Max volumetric speed" msgstr "Max. volumetrikus sebesség" -msgid "℃" -msgstr "" +msgid "\\u2103" +msgstr "\\u2103" msgid "Bed temperature" msgstr "Asztalhőmérséklet" -msgid "mm³" -msgstr "mm³" +msgid "mm\\u00B3" +msgstr "mm\\u00B3" msgid "Start calibration" msgstr "Start" msgid "Next" -msgstr "Next" +msgstr "Következő" msgid "" "Calibration completed. Please find the most uniform extrusion line on your " "hot bed like the picture below, and fill the value on its left side into the " "factor K input box." msgstr "" -"Calibration completed. Please find the most uniform extrusion line on your " -"hot bed like the picture below, and fill the value on its left side into the " -"factor K input box." +"A kalibrálás befejeződött. Kérjük, válaszd ki az alábbi képen láthatóhoz " +"legjobban hasonlító, legegyenletesebb extrudálási vonalat, és írd be a bal " +"oldalán lévő értéket a K-tényező beviteli mezőjébe." msgid "Save" msgstr "Mentés" msgid "Last Step" -msgstr "Back" +msgstr "Vissza" msgid "Example" -msgstr "Example" +msgstr "Példa" #, c-format, boost-format msgid "Calibrating... %d%%" -msgstr "Calibrating... %d%%" +msgstr "Kalibrálás... %d%%" msgid "Calibration completed" -msgstr "Calibration completed" +msgstr "A kalibrálás befejeződött" #, c-format, boost-format msgid "%s does not support %s" -msgstr "%s does not support %s" +msgstr "%s nem támogatja %s" msgid "Dynamic flow Calibration" -msgstr "Dynamic flow calibration" +msgstr "Dinamikus anyagáramlás kalibráció" msgid "Step" -msgstr "Step" +msgstr "Lépés" msgid "AMS Slots" -msgstr "AMS Slots" +msgstr "AMS férőhelyek" msgid "" "Note: Only the AMS slots loaded with the same material type can be selected." msgstr "" -"Note: Only the AMS slots loaded with the same material type can be selected." +"Megjegyzés: Csak az ugyanazzal az anyagtípussal feltöltött AMS helyek " +"választhatók ki." msgid "Enable AMS" -msgstr "Enable AMS" +msgstr "AMS engedélyezése" msgid "Print with filaments in the AMS" -msgstr "Print with filament in the AMS" +msgstr "Nyomtatás AMS-ben lévő filamenttel" msgid "Disable AMS" -msgstr "Disable AMS" +msgstr "AMS kikapcsolása" msgid "Print with the filament mounted on the back of chassis" -msgstr "Print with filament on an external spool" +msgstr "Nyomtatás külső tartón lévő filamenttel" msgid "Cabin humidity" -msgstr "Cabin humidity" +msgstr "Kamra páratartalma" msgid "" "Green means that AMS humidity is normal, orange represent humidity is high, " "red represent humidity is too high.(Hygrometer: lower the better.)" msgstr "" -"Green means that AMS humidity is normal, orange means that humidity is high, " -"and red means that humidity is too high. (Hygrometer: the lower, the better.)" +"A zöld azt jelenti, hogy az AMS páratartalma normális, a narancs és a piros " +"pedig azt jelenti, hogy a páratartalom túl magas (Higrométer: minél " +"alacsonyabb, annál jobb)." msgid "Desiccant status" -msgstr "Desiccant status" +msgstr "Páramegkötő állapota" msgid "" "A desiccant status lower than two bars indicates that desiccant may be " "inactive. Please change the desiccant.(The bars: higher the better.)" msgstr "" -"A desiccant status lower than two bars indicates that desiccant may be " -"inactive. Please change the desiccant. (The higher, the better.)" +"A két sávnál alacsonyabb páramegkötő-állapot azt jelzi, hogy a páramegkötő " +"nem működik. Cseréld ki a páramegkötő tasakokat (minél magasabb, annál jobb)." msgid "" "Note: When the lid is open or the desiccant pack is changed, it can take " @@ -2018,36 +2026,37 @@ msgid "" "process. During this time, the indicator may not represent the chamber " "accurately." msgstr "" -"Note: When the lid is open or the desiccant pack is changed, it can take " -"hours or a night to absorb the moisture. Low temperatures also slow down the " -"process. During this time, the indicator may not represent the chamber " -"accurately." +"Megjegyzés: Ha a fedél nyitva van, vagy nemrég cserélted ki a tasakokat, " +"órákig vagy egy éjszakáig tarthat a nedvesség felszívódása. Az alacsony " +"hőmérséklet szintén lelassítja a folyamatot. Ez idő alatt előfordulhat, hogy " +"a visszajelző nem a pontos értéket mutatja." msgid "" "Config which AMS slot should be used for a filament used in the print job" msgstr "" -"Configure which AMS slot should be used for a filament used in the print job." +"Add meg, hogy melyik AMS-férőhely legyen legyen hozzárendelve a nyomtatásnál " +"használt filamenthez." msgid "Filament used in this print job" -msgstr "Filament used in this print job" +msgstr "A nyomtatási feladatban használt filament" msgid "AMS slot used for this filament" -msgstr "AMS slot used for this filament" +msgstr "A filamenthez használt AMS-férőhely" msgid "Click to select AMS slot manually" -msgstr "Click to select AMS slot manually" +msgstr "Kattints az AMS-férőhely kézi kiválasztásához" msgid "Do not Enable AMS" -msgstr "Do not Enable AMS" +msgstr "Ne engedélyezd az AMS-t" msgid "Print using materials mounted on the back of the case" -msgstr "Print using filament on an external spool." +msgstr "Nyomtatás külső tartón lévő filamenttel." msgid "Print with filaments in ams" -msgstr "Print with filament in AMS" +msgstr "Nyomtatás az AMS-ben lévő filamentekkel" msgid "Print with filaments mounted on the back of the chassis" -msgstr "Print with filament on an external spool" +msgstr "Nyomtatás külső tartón lévő filamenttel" msgid "Filaments replace" msgstr "" @@ -2104,16 +2113,16 @@ msgstr "" "rögzített információkat használja." msgid "Update remaining capacity" -msgstr "Update remaining capacity" +msgstr "Fennmaradó kapacitás frissítése" msgid "" "The AMS will estimate Bambu filament's remaining capacity after the filament " "info is updated. During printing, remaining capacity will be updated " "automatically." msgstr "" -"The AMS will estimate Bambu filament's remaining capacity after the filament " -"info is updated. During printing, remaining capacity will be updated " -"automatically." +"Az AMS képes megbecsülni, hogy mennyi filament maradt egy Bambu filament " +"tekercsen, a filament információinak frissítése során. Nyomtatás közben a " +"maradék mennyiség automatikusan frissül." msgid "AMS filament backup" msgstr "" @@ -2122,8 +2131,8 @@ msgid "" "AMS will continue to another spool with the same properties of filament " "automatically when current filament runs out" msgstr "" -"AMS will continue to another spool with the same filament properties " -"automatically when current filament runs out." +"Az AMS automatikusan egy másik, azonos tulajdonságú filamentre vált, ha az " +"aktuális filament kifogy." msgid "File" msgstr "Fájl" @@ -2132,31 +2141,31 @@ msgid "" "Failed to download the plug-in. Please check your firewall settings and vpn " "software, check and retry." msgstr "" -"Failed to download the plug-in. Please check your firewall settings and vpn " -"software and retry." +"Nem sikerült letölteni a bővítményt. Kérjük, ellenőrizd a tűzfal " +"beállításait és a VPN-szoftvert, majd próbálja meg újra." msgid "" "Failed to install the plug-in. Please check whether it is blocked or deleted " "by anti-virus software." msgstr "" -"Failed to install the plug-in. Please check whether it is blocked or has " -"been deleted by anti-virus software." +"Nem sikerült telepíteni a bővítményt. Kérjük, ellenőrizd, hogy a vírusirtó " +"szoftver nem blokkolta vagy törölte-e." msgid "click here to see more info" -msgstr "click here to see more info" +msgstr "kattints ide további információkért" msgid "Please home all axes (click " -msgstr "Please home all axes (click " +msgstr "Kérjük, végezd el a tengelyek alaphelyzetbe állítását (kattints" msgid "" ") to locate the toolhead's position. This prevents device moving beyond the " "printable boundary and causing equipment wear." msgstr "" -") to locate the toolhead's position. This prevents device moving beyond the " -"printable boundary and causing equipment wear." +"). Ez megakadályozza, hogy a nyomtató megpróbálja a nyomtatható területen " +"túlra mozgatni a fejet, ezzel az eszköz esetleges meghibásodását kockáztatva." msgid "Go Home" -msgstr "Go Home" +msgstr "Alaphelyzet" msgid "" "A error occurred. Maybe memory of system is not enough or it's a bug of the " @@ -2212,14 +2221,15 @@ msgid "Succeed to export G-code to %1%" msgstr "G-kód sikeresen exportálva ide: %1%" msgid "Running post-processing scripts" -msgstr "Running post-processing scripts" +msgstr "Utófeldolgozási szkriptek futtatása" msgid "Copying of the temporary G-code to the output G-code failed" -msgstr "Copying of the temporary G-code to the output G-code failed." +msgstr "Nem sikerült az ideiglenes G-kódot a kimeneti G-kódba másolni." #, boost-format msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" -msgstr "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" +msgstr "" +"Feltöltés ütemezése ide: „%1%“. Lásd: Ablak -> Nyomtató feltöltési várólista" msgid "Origin" msgstr "Origó" @@ -2328,17 +2338,17 @@ msgid "" "Please keep the printer open during the printing process to ensure air " "circulation or reduce the temperature of the hot bed" msgstr "" -"Bed temperature is higher than vitrification temperature of this filament.\n" -"This may cause nozzle blockage and print failure.\n" -"Please keep the printer open during the printing process to ensure air " -"circulation or reduce the temperature of the hot bed." +"Az asztalhőmérséklet magasabb, mint a filament üvegesedési hőmérséklete.\n" +"Ez a fúvóka eltömődését és nyomtatási hibákat okozhat.\n" +"Kérjük, hogy a nyomtatás során tartsd nyitva a nyomtatót, vagy csökkentsd az " +"asztalhőmérsékletet." msgid "" "Too small max volumetric speed.\n" "Reset to 0.5" msgstr "" -"Too small max volumetric speed.\n" -"Value was reset to 0.5" +"Túl alacsony max. volumetrikus sebesség.\n" +"Az értéke 0,5-re állt vissza" msgid "" "Too small layer height.\n" @@ -2458,9 +2468,9 @@ msgid "" "Yes - switch to rectilinear pattern automaticlly\n" "No - reset density to default non 100% value automaticlly" msgstr "" -"Switch to rectilinear pattern?\n" -"Yes - Switch to rectilinear pattern automatically\n" -"No - Reset density to default non 100% value automatically" +"Átváltasz vonalak mintázatra?\n" +"Igen - Váltás a vonalak mintázatra\n" +"Nem - Sűrűség visszaállítása az alapértelmezett, nem 100%-os értékre" msgid "" "While printing by Object, the extruder may collide skirt.\n" @@ -2573,7 +2583,7 @@ msgid "default" msgstr "alapértelmezett" msgid "parameter name" -msgstr "parameter name" +msgstr "paraméter neve" msgid "N/A" msgstr "N/A" @@ -2625,28 +2635,28 @@ msgid "Tool" msgstr "Szerszám" msgid "Layer Time" -msgstr "Layer Time" +msgstr "Rétegidő" msgid "Height: " -msgstr "Height: " +msgstr "Magasság:" msgid "Width: " -msgstr "Width: " +msgstr "Szélesség:" msgid "Speed: " -msgstr "Speed: " +msgstr "Sebesség:" msgid "Flow: " -msgstr "Flow: " +msgstr "Anyagáramlás:" msgid "Layer Time: " -msgstr "Layer Time: " +msgstr "Rétegidő: " msgid "Fan Speed: " -msgstr "Fan Speed: " +msgstr "Ventilátor-fordulatszám:" msgid "Temperature: " -msgstr "Temperature: " +msgstr "Hőmérséklet:" msgid "Loading G-codes" msgstr "G-kódok betöltése" @@ -2661,10 +2671,10 @@ msgid "Statistics of All Plates" msgstr "" msgid "Display" -msgstr "Megjelenítés" +msgstr "Mutat" msgid "Flushed" -msgstr "Flushed" +msgstr "Öblített" msgid "Total" msgstr "Összesen" @@ -2673,7 +2683,7 @@ msgid "Total Time Estimation" msgstr "" msgid "Total time" -msgstr "Total time" +msgstr "Teljes idő" msgid "up to" msgstr "legfeljebb" @@ -2691,7 +2701,7 @@ msgid "Time" msgstr "Idő" msgid "Percent" -msgstr "Százalék" +msgstr "%" msgid "Layer Height (mm)" msgstr "Rétegmagasság (mm)" @@ -2769,7 +2779,7 @@ msgid "Total Estimation" msgstr "Összesített becslés" msgid "Time Estimation" -msgstr "Time Estimation" +msgstr "Időbecslés" msgid "Normal mode" msgstr "Normál mód" @@ -2787,52 +2797,52 @@ msgid "Switch to normal mode" msgstr "Váltás normál módra" msgid "Variable layer height" -msgstr "Variable layer height" +msgstr "Változó rétegmagasság" msgid "Adaptive" -msgstr "Adaptive" +msgstr "Adaptív" msgid "Quality / Speed" -msgstr "Quality / Speed" +msgstr "Minőség / sebesség" msgid "Smooth" -msgstr "Smooth" +msgstr "Sima" msgid "Radius" msgstr "Sugár" msgid "Keep min" -msgstr "Keep min" +msgstr "Maradjon min." msgid "Left mouse button:" -msgstr "Left mouse button:" +msgstr "Bal egérgomb:" msgid "Add detail" -msgstr "Add Detail" +msgstr "Részlet hozzáadása" msgid "Right mouse button:" -msgstr "Right mouse button:" +msgstr "Jobb egérgomb:" msgid "Remove detail" -msgstr "Remove detail" +msgstr "Részlet eltávolítása" msgid "Shift + Left mouse button:" -msgstr "Shift + Left mouse button:" +msgstr "Shift + bal egérgomb" msgid "Reset to base" -msgstr "Reset to base" +msgstr "Alaphelyzetbe állítás" msgid "Shift + Right mouse button:" -msgstr "Shift + Right mouse button:" +msgstr "Shift + jobb egérgomb:" msgid "Smoothing" -msgstr "Smoothing" +msgstr "Simítás" msgid "Mouse wheel:" -msgstr "Mouse wheel:" +msgstr "Egérgörgő:" msgid "Increase/decrease edit area" -msgstr "Increase/decrease edit area" +msgstr "Szerkesztési terület növelése/csökkentése" msgid "Sequence" msgstr "Sorrend" @@ -2916,10 +2926,10 @@ msgid "Explosion Ratio" msgstr "Robbantási arány" msgid "Section View" -msgstr "Section View" +msgstr "Keresztmetszet nézet" msgid "Assemble Control" -msgstr "Assembly Control" +msgstr "Összeállítás" msgid "Total Volume:" msgstr "Teljes térfogat:" @@ -2962,16 +2972,16 @@ msgid "Calibration" msgstr "Kalibrálás" msgid "Calibration step selection" -msgstr "Calibration step selection" +msgstr "Kalibrálási lépés kiválasztása" msgid "Micro lidar calibration" -msgstr "Micro lidar calibration" +msgstr "Micro Lidar kalibrálás" msgid "Bed leveling" -msgstr "Bed leveling" +msgstr "Asztalszintezés" msgid "Resonance frequency identification" -msgstr "Resonance frequency identification" +msgstr "Rezonanciafrekvencia meghatározása" msgid "Calibration program" msgstr "Kalibrációs program" @@ -2998,16 +3008,16 @@ msgid "Calibrating" msgstr "Kalibrálás" msgid "Auto-record Monitoring" -msgstr "Auto-record Monitoring" +msgstr "Automatikus felügyelet" msgid "Go Live" -msgstr "Go Live" +msgstr "Streamelés indítása" msgid "Resolution" msgstr "Felbontás" msgid "Show \"Live Video\" guide page." -msgstr "Show \"Live Video\" guide page." +msgstr "Az „Élő videó” útmutató oldal megjelenítése." msgid "720p" msgstr "720p" @@ -3029,13 +3039,13 @@ msgstr "" "találod a nyomtatón, ahogy az ábrán látható:" msgid "Invalid input." -msgstr "Invalid input" +msgstr "Érvénytelen adat" msgid "New Window" -msgstr "New Window" +msgstr "Új ablak" msgid "Open a new window" -msgstr "Open a new window" +msgstr "Új ablak megnyitása" msgid "Application is closing" msgstr "Az alkalmazás bezárul" @@ -3071,28 +3081,28 @@ msgid "Slice plate" msgstr "Tálca szeletelése" msgid "Print plate" -msgstr "Print plate" +msgstr "Nyomtatótálca" msgid "Slice all" msgstr "Összes szeletelése" msgid "Export G-code file" -msgstr "Export G-code file" +msgstr "G-kód fájl exportálása" msgid "Send" msgstr "Küldés" msgid "Export plate sliced file" -msgstr "Export plate sliced file" +msgstr "Szeletelt tálca exportálása" msgid "Export all sliced file" -msgstr "Export all sliced file" +msgstr "Minden szeletelt fájl exportálása" msgid "Print all" msgstr "Összes nyomtatása" msgid "Send all" -msgstr "Send all" +msgstr "Összes elküldése" msgid "Keyboard Shortcuts" msgstr "Gyorsbillentyűk" @@ -3107,23 +3117,23 @@ msgid "Show Configuration Folder" msgstr "Konfigurációs mappa megjelenítése" msgid "Show Tip of the Day" -msgstr "Show Tip of the Day" +msgstr "A nap tippjének megjelenítése" msgid "Check for Update" msgstr "Frissítés keresése" msgid "Open Network Test" -msgstr "Open Network Test" +msgstr "Hálózati teszt megnyitása" #, c-format, boost-format msgid "&About %s" msgstr "&%s névjegye" msgid "Upload Models" -msgstr "Upload Models" +msgstr "Modellek feltöltése" msgid "Download Models" -msgstr "Download Models" +msgstr "Modellek letöltése" msgid "Default View" msgstr "Alapértelmezett nézet" @@ -3167,7 +3177,7 @@ msgid "Right View" msgstr "Jobb nézet" msgid "Start a new window" -msgstr "Start a new window" +msgstr "Új ablak nyitása" msgid "New Project" msgstr "Új projekt" @@ -3197,34 +3207,34 @@ msgid "Save current project as" msgstr "Jelenlegi projekt mentése másként" msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" -msgstr "Import 3MF/STL/STEP/SVG/OBJ/AMF" +msgstr "Importálás 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Modell betöltése" msgid "Import Configs" -msgstr "Import Configs" +msgstr "Konfiguráció importálása" msgid "Load configs" -msgstr "Load configs" +msgstr "Konfiguráció betöltése" msgid "Import" -msgstr "Import" +msgstr "Importálás" msgid "Export all objects as STL" msgstr "Összes objektum exportálása STL-ként" msgid "Export Generic 3MF" -msgstr "Export Generic 3MF" +msgstr "Szabványos 3MF exportálása" msgid "Export 3mf file without using some 3mf-extensions" -msgstr "Export 3mf file without using some 3mf-extensions" +msgstr "3MF fájl exportálása 3MF bővítmények nélkül" msgid "Export current sliced file" -msgstr "Export current sliced file" +msgstr "Aktuális szeletelt fájl exportálása" msgid "Export all plate sliced file" -msgstr "Export all plate sliced file" +msgstr "Az összes szeletelt tálca exportálása" msgid "Export G-code" msgstr "G-kód exportálása" @@ -3233,10 +3243,10 @@ msgid "Export current plate as G-code" msgstr "Jelenlegi tálca exportálása G-kódként" msgid "Export &Configs" -msgstr "Export &Configs" +msgstr "Exportálás & Konfigurációk" msgid "Export current configuration to files" -msgstr "Export current configuration to files" +msgstr "Aktuális konfiguráció exportálása fájlokba" msgid "Export" msgstr "Exportálás" @@ -3302,10 +3312,10 @@ msgid "Use Orthogonal View" msgstr "Ortogonális nézet használata" msgid "Show &Labels" -msgstr "Show &Labels" +msgstr "Címkék megjelenítése" msgid "Show object labels in 3D scene" -msgstr "Show object labels in 3D scene" +msgstr "Objektumcímkék megjelenítése a 3D-térben" msgid "Preferences" msgstr "Beállítások" @@ -3317,7 +3327,7 @@ msgid "Help" msgstr "Segítség" msgid "3D Models" -msgstr "3D Models" +msgstr "3D modellek" msgid "&Open G-code" msgstr "&G-kód megnyitása" @@ -3338,10 +3348,10 @@ msgid "Export toolpaths as OBJ" msgstr "Szerszámút exportálása OBJ-ként" msgid "Open &Studio" -msgstr "Open &Studio" +msgstr "Studio megnyitása" msgid "Open Studio" -msgstr "Open Studio" +msgstr "Studio megnyitása" msgid "&Quit" msgstr "&Kilépés" @@ -3368,16 +3378,16 @@ msgid "A config exists with the same name: %s, do you want to override it." msgstr "" msgid "Overwrite file" -msgstr "Overwrite file" +msgstr "Fájl felülírása" msgid "Yes to All" -msgstr "Yes to All" +msgstr "Igen mindegyikre" msgid "No to All" -msgstr "No to All" +msgstr "Nem mindegyikre" msgid "Choose a directory" -msgstr "Choose a directory" +msgstr "Válassz egy mappát" #, c-format, boost-format msgid "There is %d config exported. (Only non-system configs)" @@ -3386,10 +3396,10 @@ msgstr[0] "" msgstr[1] "" msgid "Export result" -msgstr "Export Result" +msgstr "Exportálás eredménye" msgid "Select profile to load:" -msgstr "Select profile to load:" +msgstr "Válaszd ki a betölteni kívánt profilt:" #, c-format, boost-format msgid "There is %d config imported. (Only non-system and compatible configs)" @@ -3399,7 +3409,7 @@ msgstr[0] "" msgstr[1] "" msgid "Import result" -msgstr "Import result" +msgstr "Importálás eredménye" msgid "File is missing" msgstr "Hiányzik a fájl" @@ -3417,11 +3427,11 @@ msgid "" "2. The Filament presets\n" "3. The Printer presets" msgstr "" -"Do you want to synchronize your personal data from Bambu Cloud? \n" -"It contains the following information:\n" -"1. Process presets\n" -"2. Filament presets\n" -"3. Printer presets" +"Szeretnéd szinkronizálni személyes adataidat a Bambu Cloudból?\n" +"Ezek a következő információkat tartalmazzák:\n" +"1. Folyamatbeállítások\n" +"2. Filamentbeállítások\n" +"3. Nyomtatóbeállítások" msgid "Synchronization" msgstr "Szinkronizálás" @@ -3430,7 +3440,7 @@ msgid "Initialize failed (No Device)!" msgstr "Sikertelen inicializálás (Nincs eszköz)!" msgid "Initialize failed (No Camera Device)!" -msgstr "Initialization failed (No Camera Device)!" +msgstr "Sikertelen inicializálás (nem található kamera)!" msgid "Initializing..." msgstr "Inicializálás…" @@ -3439,62 +3449,64 @@ msgid "Loading..." msgstr "Betöltés…" msgid "Initialize failed (Not supported with LAN-only mode)!" -msgstr "Initialization failed (Not supported in LAN-only mode)!" +msgstr "Sikertelen inicializálás (nem támogatott LAN-módban)!" msgid "Initialize failed (Not accessible in LAN-only mode)!" -msgstr "Initialization failed (Not accessible in LAN-only mode)!" +msgstr "Sikertelen inicializálás (nem elérhető LAN-módban)!" msgid "Printer is busy downloading, Please wait for the downloading to finish." -msgstr "Printer is busy downloading; please wait for the download to finish." +msgstr "" +"A nyomtató a letöltéssel van elfoglalva; kérjük, várd meg, amíg a letöltés " +"befejeződik." msgid "Initialize failed (Missing LAN ip of printer)!" -msgstr "Initialization failed (Missing LAN IP of printer)!" +msgstr "Az inicializálás sikertelen (hiányzó nyomtató LAN IP-cím)!" msgid "Initialize failed (Not supported by printer)!" -msgstr "Initialization failed (Not supported by printer)!" +msgstr "Az inicializálás sikertelen (a nyomtató nem támogatja)!" #, c-format, boost-format msgid "Initialize failed (%s)!" -msgstr "Initialization failed (%s)!" +msgstr "Sikertelen inicializálás (%s)!" msgid "Network unreachable" -msgstr "Network unreachable" +msgstr "A hálózat nem elérhető" #, c-format, boost-format msgid "Stopped [%d]!" -msgstr "Stopped [%d]!" +msgstr "Megállítva [%d]!" msgid "Stopped." msgstr "Megállítva." msgid "LAN Connection Failed (Failed to start liveview)" -msgstr "LAN Connection Failed (Failed to start liveview)" +msgstr "Sikertelen LAN csatlakozás (Nem sikerült elindítani az élő videót)" msgid "" "Virtual Camera Tools is required for this task!\n" "Do you want to install them?" msgstr "" -"Virtual Camera Tools is required for this task!\n" -"Do you want to install them?" +"Ehhez a feladathoz virtuális kameraeszközök szükségesek!\n" +"Telepíted őket?" msgid "Downloading Virtual Camera Tools" -msgstr "Downloading Virtual Camera Tools" +msgstr "Virtuális kameraeszközök letöltése" msgid "" "Another virtual camera is running.\n" "Bambu Studio supports only a single virtual camera.\n" "Do you want to stop this virtual camera?" msgstr "" -"Another virtual camera is running.\n" -"Bambu Studio supports only a single virtual camera.\n" -"Do you want to stop this virtual camera?" +"Már fut egy másik virtuális kamera.\n" +"A Bambu Studio csak egy virtuális kamerát támogat.\n" +"Leállítod ezt a virtuális kamerát?" #, c-format, boost-format msgid "Virtual camera initialize failed (%s)!" -msgstr "Virtual camera initialize failed (%s)!" +msgstr "A virtuális kamera inicializálása sikertelen (%s)!" msgid "Information" -msgstr "Information" +msgstr "Információ" msgid "Playing..." msgstr "Lejátszás..." @@ -3504,74 +3516,74 @@ msgid "Load failed [%d]!" msgstr "A betöltés sikertelen [%d]!" msgid "Year" -msgstr "Year" +msgstr "Év" msgid "Month" -msgstr "Month" +msgstr "Hónap" msgid "All Files" -msgstr "All Files" +msgstr "Minden fájl" msgid "Group files by year, recent first." -msgstr "Group files by year, recent first." +msgstr "Fájlok csoportosítása év szerint, elöl a legújabb." msgid "Group files by month, recent first." -msgstr "Group files by month, recent first." +msgstr "Fájlok csoportosítása hónap szerint, elöl a legújabb." msgid "Show all files, recent first." -msgstr "Show all files, recent first." +msgstr "Minden fájl megjelenítése, elöl a legújabb." msgid "Timelapse" msgstr "Timelapse" msgid "Switch to timelapse files." -msgstr "Switch to timelapse files." +msgstr "Váltás timelapse fájlokra." msgid "Video" -msgstr "Video" +msgstr "Videó" msgid "Switch to video files." -msgstr "Switch to video files." +msgstr "Váltás a videófájlokra." msgid "Delete selected files from printer." -msgstr "Delete selected files from printer." +msgstr "Kijelölt fájlok törlése a nyomtatóról." msgid "Download" msgstr "Letöltés" msgid "Download selected files from printer." -msgstr "Download selected files from printer." +msgstr "Kiválasztott fájlok letöltése a nyomtatóról." msgid "Select" -msgstr "Select" +msgstr "Kiválasztás" msgid "Batch manage files." -msgstr "Batch manage files." +msgstr "Fájlok kötegelt kezelése." msgid "No printers." -msgstr "No printers." +msgstr "Nincs nyomtató." msgid "Not supported by this model of printer!" -msgstr "Not supported by this model of printer!" +msgstr "Ez a nyomtatómodell nem támogatja!" msgid "Connecting..." msgstr "Csatlakozás..." #, c-format, boost-format msgid "Connect failed [%d]!" -msgstr "Connection failed [%d]!" +msgstr "Csatlakozás sikertelen [%d]!" msgid "Loading file list..." -msgstr "Loading file list..." +msgstr "Fájllista betöltése..." msgid "No files" -msgstr "No files" +msgstr "Nincs fájl" msgid "Not accessible in LAN-only mode!" -msgstr "Not accessible in LAN-only mode!" +msgstr "Nem érhető el LAN módban!" msgid "Missing LAN ip of printer!" -msgstr "Missing LAN IP of printer!" +msgstr "Hiányzik a nyomtató LAN IP-címe!" #, c-format, boost-format msgid "You are going to delete %u files. Are you sure to continue?" @@ -3582,23 +3594,23 @@ msgstr "" #, c-format, boost-format msgid "File '%s' was lost! Please download it again." -msgstr "File '%s' was lost! Please download it again." +msgstr "A (z) '%s' fájl elveszett! Kérjük, töltsd le újra." msgid "Download waiting..." -msgstr "Download waiting..." +msgstr "Várakozás letöltésre..." msgid "Play" -msgstr "Play" +msgstr "Lejátszás" msgid "Open Folder" -msgstr "Open Folder" +msgstr "Mappa megnyitása" msgid "Download finished" -msgstr "Download finished" +msgstr "A letöltés kész" #, c-format, boost-format msgid "Downloading %d%%..." -msgstr "Downloading %d%%..." +msgstr "Letöltés %d%%..." msgid "Speed:" msgstr "Sebesség:" @@ -3613,7 +3625,7 @@ msgid "Zoom" msgstr "Nagyítás" msgid "Translation/Zoom" -msgstr "Translation/Zoom" +msgstr "Fordítás/Nagyítás" msgid "3Dconnexion settings" msgstr "3Dconnexion beállítások" @@ -3625,10 +3637,10 @@ msgid "Camera" msgstr "Kamera" msgid "SD Card" -msgstr "MicroSD Card" +msgstr "MicroSD kártya" msgid "Camera Setting" -msgstr "Camera Setting" +msgstr "Kamera beállítása" msgid "Printing Progress" msgstr "Nyomtatás folyamata" @@ -3646,13 +3658,13 @@ msgid "Layer: N/A" msgstr "" msgid "Clear" -msgstr "Clear" +msgstr "Törlés" msgid "Control" msgstr "Vezérlés" msgid "Print Options" -msgstr "Print Options" +msgstr "Nyomtatási lehetőségek" msgid "100%" msgstr "100%" @@ -3676,42 +3688,42 @@ msgid "Debug Info" msgstr "Hibakeresési infó" msgid "No SD Card" -msgstr "No MicroSD Card" +msgstr "Nincs MicroSD kártya" msgid "SD Card Abnormal" -msgstr "MicroSD Card Abnormal" +msgstr "Hibás MicroSD kártya" msgid "Printing List" msgstr "Nyomtatási lista" msgid "Cancel print" -msgstr "Cancel print" +msgstr "Nyomtatás megszakítása" msgid "Are you sure you want to cancel this print?" -msgstr "Are you sure you want to cancel this print?" +msgstr "Biztosan megszakítod ezt a nyomtatást?" #, c-format, boost-format msgid "" "Disconnected from printer [%s] due to LAN mode disabled.Please reconnect the " "printer by logging in with your user account." msgstr "" -"Disconnected from printer [%s] due to LAN mode being disabled. Please " -"reconnect the printer by logging in with your user account." +"Megszakadt a kapcsolat a(z) [%s] nyomtatóval, mivel a LAN mód le van tiltva. " +"Kérjük, csatlakoztasd újra a nyomtatót a fiókodba történő bejelentkezéssel." #, c-format, boost-format msgid "" "Disconnected from printer [%s] due to LAN mode enabled.Please reconnect the " "printer by inputting Access Code which can be gotten from printer screen." msgstr "" -"Disconnected from printer [%s] due to LAN mode being enabled. Please " -"reconnect the printer by inputting the Access Code which can be gotten from " -"the printer screen." +"Megszakadt a kapcsolat a(z) [%s] nyomtatóval, mivel a LAN mód le van tiltva. " +"Kérjük, csatlakoztasd újra a nyomtatót a hozzáférési kód megadásával, " +"amelyet a nyomtató kijelzőjén találsz." msgid "Downloading..." msgstr "Letöltés..." msgid "Cloud Slicing..." -msgstr "Cloud Slicing..." +msgstr "Felhőszeletelés..." #, c-format, boost-format msgid "In Cloud Slicing Queue, there are %s tasks ahead." @@ -3726,26 +3738,26 @@ msgid "Layer: %d/%d" msgstr "" msgid "Please heat the nozzle to above 170 degree before loading filament." -msgstr "Please heat the nozzle to above 170 degrees before loading filament." +msgstr "A filament betöltése előtt melegítsd fel a fúvókát 170 fok fölé." msgid "Still unload" -msgstr "Still unload" +msgstr "Még kitöltődik" msgid "Still load" -msgstr "Still load" +msgstr "Még töltődik" msgid "Please select an AMS slot before calibration" -msgstr "Please select an AMS slot before calibration." +msgstr "Válassz egy AMS-helyet a kalibrálás előtt" msgid "" "Cannot read filament info: the filament is loaded to the tool head,please " "unload the filament and try again." msgstr "" -"Cannot read filament info: the filament is loaded to the tool head. Please " -"unload the filament and try again." +"A filamentinformáció nem olvasható: a filament a nyomtatófejbe van betöltve. " +"Kérjük, távolítsd el a filamentet és próbáld újra." msgid "This only takes effect during printing" -msgstr "This only takes effect during printing" +msgstr "Ez csak a nyomtatás során érvényesül" msgid "Silent" msgstr "Csendes" @@ -3760,7 +3772,7 @@ msgid "Ludicrous" msgstr "Őrült" msgid "Can't start this without SD card." -msgstr "Can't start without MicroSD card." +msgstr "MicroSD kártya nélkül nem indítható." msgid "Failed to connect to the server" msgstr "Nem sikerült csatlakozni a szerverhez" @@ -3829,10 +3841,10 @@ msgid "Undo integration was successful." msgstr "Az integráció visszavonása sikeres volt." msgid "New network plug-in available." -msgstr "New network plug-in available" +msgstr "Új hálózati bővítmény érhető el" msgid "Details" -msgstr "Details" +msgstr "Részletek" msgid "Undo integration failed." msgstr "Az integráció visszavonása nem sikerült." @@ -3871,16 +3883,16 @@ msgstr[0] "" msgstr[1] "" msgid "ERROR" -msgstr "ERROR" +msgstr "HIBA" msgid "CANCELED" -msgstr "CANCELED" +msgstr "MEGSZAKÍTVA" msgid "COMPLETED" -msgstr "COMPLETED" +msgstr "KÉSZ" msgid "Cancel upload" -msgstr "Cancel upload" +msgstr "Feltöltés megszakítása" msgid "Slice ok." msgstr "Szeletelés kész." @@ -3895,7 +3907,7 @@ msgid "Warning:" msgstr "Figyelem:" msgid "Export successfully." -msgstr "Exported successfully" +msgstr "Sikeresen exportálva" msgid " (Repair)" msgstr " (Javítás)" @@ -3961,26 +3973,26 @@ msgid "Bottom" msgstr "Alsó" msgid "Enable AI monitoring of printing" -msgstr "Enable AI monitoring of printing" +msgstr "Nyomtatás MI-felügyeletének engedélyezése" msgid "Sensitivity of pausing is" -msgstr "Sensitivity of pausing is" +msgstr "Szüneteltetés érzékenysége" msgid "Enable detection of build plate position" -msgstr "Enable detection of build plate position" +msgstr "Nyomtatótálca helyzetének érzékelése" msgid "" "The localization tag of build plate is detected, and printing is paused if " "the tag is not in predefined range." msgstr "" -"The localization tag of the build plate will be detected, and printing will " -"be paused if the tag is not in predefined range." +"A nyomtató megkeresi a nyomtatótálca lokalizációs címkéjét, és szünetelteti " +"a nyomtatást, ha az nem egy előre meghatározott tartományban van." msgid "First Layer Inspection" -msgstr "First Layer Inspection" +msgstr "Kezdőréteg ellenőrzése" msgid "Auto-recovery from step loss" -msgstr "Auto-recover from step loss" +msgstr "Automatikus helyreállítás lépésvesztésből" msgid "Global" msgstr "Globális" @@ -4035,7 +4047,7 @@ msgid "Click to edit preset" msgstr "Kattints a beállítás szerkesztéséhez" msgid "Connection" -msgstr "Connection" +msgstr "Kapcsolat" msgid "Bed type" msgstr "Asztaltípus" @@ -4044,31 +4056,32 @@ msgid "Flushing volumes" msgstr "Tisztítási mennyiségek" msgid "Add one filament" -msgstr "Add one filament" +msgstr "Adj hozzá egy filamentet" msgid "Remove last filament" -msgstr "Remove last filament" +msgstr "Az utolsó filament eltávolítása" msgid "Synchronize filament list from AMS" -msgstr "Synchronize filament list from AMS" +msgstr "Filamentlista szinkronizálása az AMS-ből" msgid "Set filaments to use" -msgstr "Set filaments to use" +msgstr "Használni kívánt filament beállítása" msgid "" "No AMS filaments. Please select a printer in 'Device' page to load AMS info." msgstr "" -"No AMS filaments. Please select a printer in 'Device' page to load AMS info." +"Nem található AMS-filament. Kérjük, válassz egy nyomtatót az „Nyomtató” " +"oldalon az AMS információk betöltéséhez." msgid "Sync filaments with AMS" -msgstr "Sync filaments with AMS" +msgstr "Filamentek szinkronizálása az AMS-sel" msgid "" "Sync filaments with AMS will drop all current selected filament presets and " "colors. Do you want to continue?" msgstr "" -"Sync filaments with AMS will drop all current selected filament presets and " -"colors. Do you want to continue?" +"Ha szinkronizálod a filamenteket az AMS-sel, akkor az összes jelenleg " +"kiválasztott filamentbeállítás és szín felülírásra kerül. Folytatod?" msgid "" "Already did a synchronization, do you want to sync only changes or resync " @@ -4082,16 +4095,16 @@ msgid "Resync" msgstr "" msgid "There are no compatible filaments, and sync is not performed." -msgstr "There are no compatible filaments, and sync is not performed." +msgstr "Nincs kompatibilis filament és nem történt szinkronizálás." msgid "" "There are some unknown filaments mapped to generic preset. Please update " "Bambu Studio or restart Bambu Studio to check if there is an update to " "system presets." msgstr "" -"There are some unknown filaments mapped to generic presets. Please update " -"Bambu Studio or restart Bambu Studio to check if there is an update to " -"system presets." +"Van néhány ismeretlen filament, amelyekhez általános beállítások vannak " +"hozzárendelve. Kérjük, frissítsd a Bambu Studiót vagy indítsd újra, hogy " +"letöltsd az esetlegesen elérhető frissített rendszerbeállításokat." msgid "Untitled" msgstr "Névtelen" @@ -4105,12 +4118,12 @@ msgid "" "Successfully unmounted. The device %s(%s) can now be safely removed from the " "computer." msgstr "" -"Successfully unmounted. The device %s(%s) can now be safely removed from the " -"computer." +"Sikeresen leválasztva. A(z) %s(%s) eszköz most már biztonságosan " +"eltávolítható." #, c-format, boost-format msgid "Ejecting of device %s(%s) has failed." -msgstr "Ejecting of device %s(%s) has failed." +msgstr "A(z) %s(%s) eszköz kiadása nem sikerült." msgid "Previous unsaved project detected, do you want to restore it?" msgstr "Korábbi, nem mentett projektet találtunk, vissza szeretnéd állítani?" @@ -4122,43 +4135,46 @@ msgid "" "The bed temperature exceeds filament's vitrification temperature. Please " "open the front door of printer before printing to avoid nozzle clog." msgstr "" -"The bed temperature exceeds filament's vitrification temperature. Please " -"open the front door of printer before printing to avoid nozzle clogs." +"Az asztalhőmérséklet magasabb, mint a filament üvegesedési hőmérséklete. " +"Kérjük, hogy a nyomtatás során tartsd nyitva a nyomtatót, vagy csökkentsd az " +"asztalhőmérsékletet." msgid "" "The nozzle hardness required by the filament is higher than the default " "nozzle hardness of the printer. Please replace the hardened nozzle or " "filament, otherwise, the nozzle will be attrited or damaged." msgstr "" -"The nozzle hardness required by the filament is higher than the default " -"nozzle hardness of the printer. Please replace the hardened nozzle or " -"filament, otherwise, the nozzle will be worn down or damaged." +"Ez a filament nagyobb keménységű fúvókát igényel. Kérjük, cseréld ki a " +"fúvókát vagy válassz másik filamentet, különben előfordulhat, hogy a fúvóka " +"idő előtt elhasználódik vagy megsérül." #, c-format, boost-format msgid "Loading file: %s" msgstr "Fájl betöltése: %s" msgid "The 3mf is not from Bambu Lab, load geometry data only." -msgstr "The 3mf is not from Bambu Lab, loading geometry data only." +msgstr "" +"Ez a 3mf nem a Bambu Labtól származik, csak a geometriai adatok kerülnek " +"betöltésre." msgid "Load 3mf" -msgstr "Load 3mf" +msgstr "3mf betöltése" msgid "The Config can not be loaded." -msgstr "The Config cannot be loaded." +msgstr "A konfiguráció nem tölthető be." msgid "The 3mf is generated by old Bambu Studio, load geometry data only." msgstr "" -"The 3mf was generated by an old version of Bambu Studio, loading geometry " -"data only." +"A 3mf a Bambu Studio egy régebbi verziójával lett létrehozva, csak a " +"geometriai adatok kerülnek betöltésre." #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, Found following keys " "unrecognized:" msgstr "" -"The 3mf's version %s is newer than %s's version %s, Found following keys " -"unrecognized:" +"A 3mf fájl %s verziója újabb, mint a(z) %s verziója %s, a következő " +"ismeretlen kulcsokat találtuk:" msgid "You'd better upgrade your software.\n" msgstr "Jobb lenne, ha frissítenéd a szoftvert.\n" @@ -4171,8 +4187,8 @@ msgid "" "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " "software." msgstr "" -"The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " -"software." +"A 3mf fájl %s verziója újabb, mint a(z) %s verziója %s, javasolt a szoftver " +"frissítése." msgid "Invalid values found in the 3mf:" msgstr "" @@ -4181,7 +4197,7 @@ msgid "Please correct them in the param tabs" msgstr "" msgid "The 3mf is not compatible, load geometry data only!" -msgstr "The 3mf is not compatible, loading geometry data only!" +msgstr "A 3mf nem kompatibilis, csak geometriai adatok kerülnek betöltésre!" msgid "Incompatible 3mf" msgstr "Nem kompatibilis 3mf" @@ -4219,12 +4235,11 @@ msgid "" "Instead of considering them as multiple objects, should \n" "the file be loaded as a single object having multiple parts?" msgstr "" -"This file contains several objects positioned at multiple heights.\n" -"Instead of considering them as multiple objects, should \n" -"the file be loaded as a single object with multiple parts?" +"Ez a fájl több objektumot is tartalmaz különböző magasságban. Szeretnéd több " +"objektum helyett több részből álló egyetlen objektumként betölteni?" msgid "Multi-part object detected" -msgstr "Multi-part object detected" +msgstr "Több részből álló objektum észlelve" msgid "Load these files as a single object with multiple parts?\n" msgstr "Betöltöd ezeket a fájlokat több részből álló egyetlen objektumként?\n" @@ -4239,11 +4254,11 @@ msgid "" "Your object appears to be too large, Do you want to scale it down to fit the " "heat bed automatically?" msgstr "" -"Your object appears to be too large, Do you want to scale it down to fit the " -"print bed automatically?" +"Úgy tűnik, hogy az objektum túl nagy. Szeretnéd átméretezni, hogy " +"illeszkedjen a nyomtatótér méretéhez?" msgid "Object too large" -msgstr "Object too large" +msgstr "Az objektum túl nagy" msgid "Export STL file:" msgstr "STL fájl exportálása:" @@ -4267,13 +4282,13 @@ msgid "Another export job is running." msgstr "Egy másik exportálási feladat is fut." msgid "Select a new file" -msgstr "Select a new file" +msgstr "Válassz egy új fájlt" msgid "File for the replace wasn't selected" -msgstr "File for the replacement wasn't selected" +msgstr "A cserefájl nem lett kiválasztva" msgid "Error during replace" -msgstr "Error during replacement" +msgstr "Hiba a csere során" msgid "Please select a file" msgstr "Kérjük, válassz egy fájlt" @@ -4291,7 +4306,7 @@ msgid "Invalid data" msgstr "Érvénytelen adat" msgid "Slicing Canceled" -msgstr "Slicing Canceled" +msgstr "Szeletelés megszakítva" #, c-format, boost-format msgid "Slicing Plate %d" @@ -4303,7 +4318,8 @@ msgstr "Kérjük, orvosold a szeletelési hibákat, és próbáld meg újra." msgid "" "Network Plug-in is not detected. Network related features are unavailable." msgstr "" -"Network Plug-in is not detected. Network related features are unavailable." +"Nem található a hálózati bővítmény. A hálózattal kapcsolatos szolgáltatások " +"nem érhetők el." msgid "" "Preview only mode:\n" @@ -4328,25 +4344,25 @@ msgid "" "Please check whether the folder exists online or if other programs open the " "project file." msgstr "" -"Failed to save the project.\n" -"Please check whether the folder exists online or if other programs have the " -"project file open." +"Nem sikerült elmenteni a projektet.\n" +"Ellenőrizd, hogy a mappa létezik-e online, vagy más programokban meg van-e " +"nyitva a projektfájl." msgid "Save project" -msgstr "Save project" +msgstr "Projekt mentése" msgid "Importing Model" -msgstr "Importing Model" +msgstr "Modell importálása" msgid "prepare 3mf file..." -msgstr "preparing 3mf file..." +msgstr "3mf fájl előkészítése..." msgid "downloading project ..." -msgstr "downloading project ..." +msgstr "projekt letöltése ..." #, c-format, boost-format msgid "Project downloaded %d%%" -msgstr "Project downloaded %d%%" +msgstr "Projekt letöltve %d%%" msgid "The selected file" msgstr "A kiválasztott fájl" @@ -4412,8 +4428,7 @@ msgid "" "The file %s has been sent to the printer's storage space and can be viewed " "on the printer." msgstr "" -"The file %s has been sent to the printer's storage space and can be viewed " -"on the printer." +"A(z) %s fájl elküldésre került a nyomtatóra, és megtekinthető a nyomtatón." msgid "" "Print By Object: \n" @@ -4468,14 +4483,14 @@ msgid "Triangles: %1%\n" msgstr "Háromszögek: %1%\n" msgid "Tips:" -msgstr "Tips:" +msgstr "Tippek:" msgid "" "\"Fix Model\" feature is currently only on Windows. Please repair the model " "on Bambu Studio(windows) or CAD softwares." msgstr "" -"The \"Fix Model\" feature is currently only on Windows. Please repair the " -"model in Bambu Studio (Windows) or CAD software." +"A „Modelljavítás” funkció jelenleg csak Windows rendszeren érhető el. " +"Javítsd meg a modellt a Bambu Studióban (Windows) vagy más CAD szoftverben." #, c-format, boost-format msgid "" @@ -4509,10 +4524,10 @@ msgid "Second" msgstr "Másodperc" msgid "Browse" -msgstr "Browse" +msgstr "Tallózás" msgid "Choose Download Directory" -msgstr "Choose Download Directory" +msgstr "Válassz letöltési mappát" msgid "General Settings" msgstr "Általános beállítások" @@ -4553,10 +4568,10 @@ msgid "" msgstr "" msgid "Show \"Tip of the day\" notification after start" -msgstr "Show \"Tip of the day\" notification after start" +msgstr "A nap tippje értesítés megjelenítése indítás után" msgid "If enabled, useful hints are displayed at startup." -msgstr "If enabled, useful hints are displayed at startup." +msgstr "Ha engedélyezve van, hasznos tippek jelennek meg indításkor." msgid "Presets" msgstr "" @@ -4634,13 +4649,13 @@ msgid "The peroid of backup in seconds." msgstr "" msgid "Downloads" -msgstr "Downloads" +msgstr "Letöltések" msgid "Dark Mode" -msgstr "Dark Mode" +msgstr "Sötét mód" msgid "Enable Dark mode" -msgstr "Enable Dark Mode" +msgstr "Sötét mód engedélyezése" msgid "Home page and daily tips" msgstr "Kezdőoldal és napi tippek" @@ -4730,7 +4745,7 @@ msgid "DEBUG settings have saved successfully!" msgstr "DEBUG beállítások sikeresen elmentve!" msgid "Switch cloud environment, Please login again!" -msgstr "Cloud environment switched; please login again!" +msgstr "Felhőkörnyezet megváltozott, kérjük, jelentkezz be újra!" msgid "System presets" msgstr "Rendszer beállítások" @@ -4760,13 +4775,13 @@ msgid "Project-inside presets" msgstr "Projekten belüli beállítások" msgid "Add/Remove filaments" -msgstr "Add/Remove filament" +msgstr "Filament hozzáadása/eltávolítása" msgid "Add/Remove materials" -msgstr "Add/Remove materials" +msgstr "Anyagok hozzáadása/eltávolítása" msgid "Add/Remove printers" -msgstr "Add/Remove printers" +msgstr "Nyomtatók hozzáadása/eltávolítása" msgid "Same as Global Print Sequence" msgstr "" @@ -4775,7 +4790,7 @@ msgid "Print sequence" msgstr "Nyomtatás sorrendje" msgid "Same as Global Bed Type" -msgstr "Same as Global Bed Type" +msgstr "Ugyanaz, mint a globális tálca típusa" msgid "Cool Plate" msgstr "Cool Plate" @@ -4925,7 +4940,7 @@ msgid "Input access code" msgstr "Add meg a hozzáférési kódot" msgid "Can't find my devices?" -msgstr "Can't find devices?" +msgstr "Nem találod az eszközöket?" msgid "Log out successful." msgstr "Sikeres kijelentkezés." @@ -4971,7 +4986,9 @@ msgid "Synchronizing device information time out" msgstr "Eszközinformációk szinkronizálása túllépte az időkorlátot" msgid "Cannot send the print job when the printer is updating firmware" -msgstr "Cannot send a print job while the printer is updating firmware" +msgstr "" +"Nem küldhetsz nyomtatási feladatot a nyomtatóra, amíg az firmware frissítést " +"végez." msgid "" "The printer is executing instructions. Please restart printing after it ends" @@ -4987,15 +5004,15 @@ msgid "" "Filament %s exceeds the number of AMS slots. Please update the printer " "firmware to support AMS slot assignment." msgstr "" -"Filament %s exceeds the number of AMS slots. Please update the printer " -"firmware to support AMS slot assignment." +"%s filament nem fér el a rendelkezésre álló AMS-férőhelyben. Kérjük, " +"frissítsd a nyomtató szoftverét az AMS-kiosztás támogatásához." msgid "" "Filament exceeds the number of AMS slots. Please update the printer firmware " "to support AMS slot assignment." msgstr "" -"Filament exceeds the number of AMS slots. Please update the printer firmware " -"to support AMS slot assignment." +"A filament nem fér el a rendelkezésre álló AMS-férőhelyben. Kérjük, " +"frissítsd a nyomtató szoftverét az AMS-kiosztás támogatásához." msgid "" "Filaments to AMS slots mappings have been established. You can click a " @@ -5016,58 +5033,60 @@ msgid "" "Filament %s does not match the filament in AMS slot %s. Please update the " "printer firmware to support AMS slot assignment." msgstr "" -"Filament %s does not match the filament in AMS slot %s. Please update the " -"printer firmware to support AMS slot assignment." +"%s filament típusa nem egyezik a(z) %s AMS-férőhelyben találhatóval. Kérjük, " +"frissítsd a nyomtató szoftverét az AMS-kiosztás támogatásához." msgid "" "Filament does not match the filament in AMS slot. Please update the printer " "firmware to support AMS slot assignment." msgstr "" -"Filament does not match the filament in AMS slot. Please update the printer " -"firmware to support AMS slot assignment." +"A filament típusa nem egyezik az AMS-férőhelyben találhatóval. Kérjük, " +"frissítsd a nyomtató szoftverét az AMS-kiosztás támogatásához." msgid "" "The printer firmware only supports sequential mapping of filament => AMS " "slot." msgstr "" -"The printer firmware only supports sequential mapping of filament => AMS " -"slot." +"A nyomtató firmware-je csak a szekvenciális filamentkiosztást támogatja = > " +"AMS férőhely" msgid "An SD card needs to be inserted before printing." -msgstr "A MicroSD card needs to be inserted before printing." +msgstr "Nyomtatás előtt be kell helyezned egy microSD kártyát." msgid "An SD card needs to be inserted to record timelapse." -msgstr "A MicroSD card needs to be inserted to record a timelapse." +msgstr "A timelapse rögzítéséhez egy microSD kártyára van szükség." msgid "" "Cannot send the print job to a printer whose firmware is required to get " "updated." -msgstr "Cannot send the print job to a printer whose firmware must be updated." +msgstr "" +"Nem küldhetsz nyomtatási feladatot a nyomtatóra, mert annak firmware-jét " +"frissíteni kell." msgid "Cannot send the print job for empty plate" -msgstr "Cannot send a print job for an empty plate." +msgstr "Nem küldhetsz nyomtatási feladatot egy üres tálcával." msgid "This printer does not support printing all plates" -msgstr "This printer does not support printing all plates" +msgstr "Ez a nyomtató nem támogatja az összes tálcára való nyomtatást" msgid "Errors" -msgstr "Errors" +msgstr "Hibák" msgid "" "Please check the following infomation and click Confirm to continue sending " "print:" msgstr "" -"Please check the following information and click Confirm to continue sending " -"the print:" +"Kérjük, ellenőrizd a következő adatokat, majd kattints a Megerősítés gombra " +"a nyomtatás folytatásához:" msgid "" "The printer type used to generate G-code is not the same type as the " "currently selected physical printer. It is recommend to re-slice by " "selecting the same printer type." msgstr "" -"The printer type used to generate G-code is not the same type as the " -"currently selected physical printer. It is recommend to re-slice after " -"selecting the correct printer type." +"A G-kód generálásához használt nyomtatótípus nem azonos a jelenleg " +"kiválasztott fizikai nyomtatóval. Javasoljuk, hogy szeleteld újra a " +"megfelelő nyomtatótípust kiválasztva." #, c-format, boost-format msgid "%s is not supported by AMS." @@ -5078,9 +5097,9 @@ msgid "" "they are the required filaments. If they are okay, press \"Confirm\" to " "start printing." msgstr "" -"There are some unknown filaments in the AMS mappings. Please check whether " -"they are the required filaments. If they are okay, click \"Confirm\" to " -"start printing." +"Van néhány ismeretlen filament az AMS kiosztásban. Győződj meg róla, hogy " +"ezek a szükséges filamentek. Ha igen, kattints a „Megerősítés” gombra a " +"nyomtatás megkezdéséhez." msgid "Preparing print job" msgstr "Nyomtatási feladat előkészítése" @@ -5089,7 +5108,7 @@ msgid "Modifying the device name" msgstr "Eszköz nevének módosítása" msgid "Send to Printer SD card" -msgstr "Send to Printer MicroSD card" +msgstr "Küldés a nyomtatóban lévő MicroSD kártyára" msgid "Cannot send the print task when the upgrade is in progress" msgstr "" @@ -5100,10 +5119,11 @@ msgid "An SD card needs to be inserted before send to printer SD card." msgstr "" msgid "The printer is required to be in the same LAN as Bambu Studio." -msgstr "The printer is required to be on the same LAN as Bambu Studio." +msgstr "" +"A nyomtatónak ugyanazon a hálózaton kell lennie, mint a Bambu Studiónak." msgid "The printer does not support sending to printer SD card." -msgstr "The printer does not support sending to printer MicroSD card." +msgstr "A nyomtató nem támogatja a MicroSD kártyára küldést." msgid "Log in printer" msgstr "Bejelentkezés a nyomtatóra" @@ -5138,52 +5158,53 @@ msgid "Delete this preset" msgstr "Ezen beállítás törlése" msgid "Search in preset" -msgstr "Search in preset" +msgstr "Keresés a beállításokban" msgid "Click to reset all settings to the last saved preset." -msgstr "Click to reset all settings to the last saved preset." +msgstr "" +"Kattints az összes beállítás utolsó mentett változatának visszaállításához." msgid "" "Prime tower is required for smooth timeplase. There may be flaws on the " "model without prime tower. Are you sure you want to disable prime tower?" msgstr "" -"A Prime tower is required for smooth timeplase mode. There may be flaws on " -"the model without a prime tower. Are you sure you want to disable the prime " -"tower?" +"A sima timelapse miatt szükség van a törlőtoronyra. Nélküle előfordulhatnak " +"hibák a nyomtatott tárgyon. Biztos, hogy kikapcsolod a törlőtornyot?" msgid "" "Prime tower is required for smooth timelapse. There may be flaws on the " "model without prime tower. Do you want to enable prime tower?" msgstr "" -"A prime tower is required for smooth timelapse mode. There may be flaws on " -"the model without prime tower. Do you want to enable the prime tower?" +"A sima timelapse miatt szükség van a törlőtoronyra. Nélküle előfordulhatnak " +"hibák a nyomtatott tárgyon. Engedélyezed a törlőtornyot?" msgid "" "We have added an experimental style \"Tree Slim\" that features smaller " "support volume but weaker strength.\n" "We recommend using it with: 0 interface layers, 0 top distance, 2 walls." msgstr "" -"We have added an experimental style \"Tree Slim\" that features smaller " -"support volume but weaker strength.\n" -"We recommend using it with: 0 interface layers, 0 top distance, 2 walls." +"Kísérleti jelleggel hozzáadtunk egy \"Tree Slim\" nevű támaszt, amely " +"kevesebb anyagot igényel, de emiatt gyengébb szilárdságú.\n" +"Használatát a következőkkel javasoljuk: 0 érintkezőréteg, 0 felső távolság, " +"2 fal." msgid "" "Change these settings automatically? \n" "Yes - Change these settings automatically\n" "No - Do not change these settings for me" msgstr "" -"Change these settings automatically? \n" -"Yes - Change these settings automatically.\n" -"No - Do not change these settings for me." +"Automatikusan megváltoztatod ezeket a beállításokat?\n" +"Igen - Módosítsa ezeket a beállításokat\n" +"Nem - Ne változtassa meg a beállításokat" msgid "" "For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommend the following " "settings: at least 2 interface layers, at least 0.1mm top z distance or " "using support materials on interface." msgstr "" -"For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommend the following " -"settings: at least 2 interface layers, at least 0.1mm top z distance or " -"using support materials on interface." +"Az „Erős fa” és a „Hibrid fa” támaszok esetében a következő beállításokat " +"javasoljuk: legalább 2 érintkező réteg, legalább 0,1 mm felső Z-távolság " +"vagy támaszanyag használata." msgid "" "When using support material for the support interface, We recommend the " @@ -5198,10 +5219,10 @@ msgid "" "by right-click the empty position of build plate and choose \"Add Primitive" "\"->\"Timelapse Wipe Tower\"." msgstr "" -"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\"." +"Ha a nyomtatófej nélküli timelapse engedélyezve van, javasoljuk, hogy " +"helyezz el a tálcán egy „Timelapse törlőtornyot“. Ehhez kattints jobb " +"gombbal a tálca egy üres részére, majd válaszd a „Primitív hozzáadása“ -> " +"„Timelapse törlőtorony“ lehetőséget." msgid "Line width" msgstr "Nyomtatott vonal szélessége" @@ -5213,7 +5234,7 @@ msgid "Precision" msgstr "Pontosság" msgid "Wall generator" -msgstr "Wall generator" +msgstr "Falgenerátor" msgid "Walls" msgstr "Falak" @@ -5246,7 +5267,7 @@ msgid "Acceleration" msgstr "Gyorsulás" msgid "Raft" -msgstr "Raft" +msgstr "Tutaj" msgid "Support filament" msgstr "Filament a támaszhoz" @@ -5348,8 +5369,9 @@ msgid "" "Bed temperature when Textured PEI Plate is installed. Value 0 means the " "filament does not support to print on the Textured PEI Plate" msgstr "" -"Bed temperature when Textured PEI Plate is installed. 0 means the filament " -"is not supported on the Textured PEI Plate" +"Asztalhőmérséklet a texturált PEI tálca használatával. A 0 érték azt " +"jelenti, hogy a filament nem támogatja a High Temp Plate-re történő " +"nyomtatást" msgid "Volumetric speed limitation" msgstr "Volumetrikus sebességhatár" @@ -5401,7 +5423,7 @@ msgid "Printable space" msgstr "Nyomtatási terület" msgid "Extruder Clearance" -msgstr "Extruder Clearance" +msgstr "Extruder távolság" msgid "Accessory" msgstr "Tartozékok" @@ -5428,7 +5450,7 @@ msgid "Pause G-code" msgstr "Szünet G-kód" msgid "Template Custom G-code" -msgstr "Template Custom G-code" +msgstr "Sablon egyedi G-kód" msgid "Motion ability" msgstr "Géplimitek" @@ -5571,18 +5593,17 @@ msgid "" "Would you like to keep these changed settings (new value) after switching " "preset?" msgstr "" -"You have changed some settings of preset \"%1%\". \n" -"Would you like to keep these changed settings (new value) after switching " -"presets?" +"Megváltoztattad a(z) \"%1%\" beállítás néhány beállítását.\n" +"Szeretnéd ezeket a módosított beállításokat (új értéket) megtartani a másik " +"beállításra való váltás után?" msgid "" "You have changed some preset settings. \n" "Would you like to keep these changed settings (new value) after switching " "preset?" msgstr "" -"You have changed some preset settings. \n" -"Would you like to keep these changed settings (new value) after switching " -"presets?" +"Megváltoztattál néhány beállítást.\n" +"Szeretnéd ezeket megtartani a másik beállításra való váltás után?" msgid "Extruders count" msgstr "Extruderek száma" @@ -5597,10 +5618,10 @@ msgid "Select presets to compare" msgstr "" msgid "Show all presets (including incompatible)" -msgstr "Show all presets (including incompatible)" +msgstr "Minden beállítás megjelenítése (beleértve az inkompatibiliseket is)" msgid "Add File" -msgstr "Add File" +msgstr "Fájl hozzáadása" msgid "Set as cover" msgstr "Beállítás borítóként" @@ -5625,7 +5646,7 @@ msgid "Assembly Guide" msgstr "Összeszerelési útmutató" msgid "Author" -msgstr "Author" +msgstr "Szerző" msgid "Model Name" msgstr "Modellnév" @@ -5684,21 +5705,21 @@ msgid "Flushing volumes for filament change" msgstr "Filament csere tiszítási mennyisége" msgid "Multiplier" -msgstr "Multiplier" +msgstr "Szorzó" msgid "Flushing volume (mm³) for each filament pair." msgstr "Egyes filamentpárok tiszítási mennyisége (mm³)." #, c-format, boost-format msgid "Suggestion: Flushing Volume in range [%d, %d]" -msgstr "Suggestion: Flushing Volume in range [%d, %d]" +msgstr "Javaslat: öblítési érték a [%d, %d] tartományban" #, c-format, boost-format msgid "The multiplier should be in range [%.2f, %.2f]." -msgstr "The multiplier should be in range [%.2f, %.2f]." +msgstr "A szorzónak [%.2f, %.2f] tartományban kell lennie." msgid "unloaded" -msgstr "unloaded" +msgstr "kitöltve" msgid "loaded" msgstr "betöltve" @@ -5743,7 +5764,7 @@ msgid "Paste from clipboard" msgstr "Beillesztés a vágólapról" msgid "Show/Hide 3Dconnexion devices settings dialog" -msgstr "Show/Hide 3Dconnexion devices settings dialog" +msgstr "3Dconnexion-eszközbeállítások párbeszédablak megjelenítése/elrejtése" msgid "Show keyboard shortcuts list" msgstr "Gyorsgombok listájának megjelenítése" @@ -5752,16 +5773,16 @@ msgid "Global shortcuts" msgstr "Globális gyorsbillentyűk" msgid "Rotate View" -msgstr "Rotate View" +msgstr "Nézet elforgatása" msgid "Pan View" -msgstr "Pan View" +msgstr "Pásztázó nézet" msgid "Mouse wheel" -msgstr "Mouse wheel" +msgstr "Egérgörgő" msgid "Zoom View" -msgstr "Zoom View" +msgstr "Nagyítás nézet" msgid "Shift+A" msgstr "" @@ -5791,10 +5812,10 @@ msgid "Movement in camera space" msgstr "Mozgás a kameratérben" msgid "⌥+Left mouse button" -msgstr "⌥+Left mouse button" +msgstr "⌥+Bal egérgomb" msgid "Select a part" -msgstr "Select a part" +msgstr "Válassz egy tárgyat" msgid "⌘+Left mouse button" msgstr "⌘+Bal egérgomb" @@ -5806,7 +5827,7 @@ msgid "Ctrl+Any arrow" msgstr "Ctrl+Bármelyik nyílgomb" msgid "Alt+Left mouse button" -msgstr "Alt+Left mouse button" +msgstr "Alt+bal egérgomb" msgid "Ctrl+Left mouse button" msgstr "Ctrl+Bal egérgomb" @@ -5902,7 +5923,7 @@ msgid "Plater" msgstr "Plater" msgid "Move: press to snap by 1mm" -msgstr "Move: press to snap by 1mm" +msgstr "Mozgatás: nyomd meg, hogy 1 mm-t mozduljon" msgid "⌘+Mouse wheel" msgstr "⌘+Egérgörgő" @@ -5911,7 +5932,7 @@ msgid "Support/Color Painting: adjust pen radius" msgstr "Támasz/Színfestés: toll méretének beállítása" msgid "⌥+Mouse wheel" -msgstr "⌥+Mouse wheel" +msgstr "⌥+Egérgörgő" msgid "Support/Color Painting: adjust section position" msgstr "Támasz/Színfestés: metszet pozíciójának beállítása" @@ -5972,118 +5993,119 @@ msgid "Shift+Mouse wheel" msgstr "Shift+Egérgörgő" msgid "Release Note" -msgstr "Release Note" +msgstr "Verzióinformáció" #, c-format, boost-format msgid "version %s update information :" -msgstr "version %s update information:" +msgstr "%s verzió frissítési információi:" msgid "Network plug-in update" -msgstr "Network plug-in update" +msgstr "Hálózati bővítmény frissítése" msgid "" "Click OK to update the Network plug-in when Bambu Studio launches next time." msgstr "" -"Click OK to update the Network plug-in the next time Bambu Studio launches." +"Kattints az OK gombra a hálózati bővítmény frissítéséhez a Bambu Studio " +"következő indításakor." #, c-format, boost-format msgid "A new Network plug-in(%s) available, Do you want to install it?" -msgstr "A new network plug-in (%s) is available. Do you want to install it?" +msgstr "Új hálózati bővítmény (%s) érhető el. Szeretnéd telepíteni?" msgid "New version of Bambu Studio" msgstr "A Bambu Studio új verziója" msgid "Don't remind me of this version again" -msgstr "Don't remind me about this version again." +msgstr "Ne emlékeztessen újra erre a verzióra." msgid "Done" msgstr "" msgid "LAN Connection Failed (Sending print file)" -msgstr "LAN Connection Failed (Sending print file)" +msgstr "LAN kapcsolódás sikertelen (nyomtatási fájl küldése)" msgid "" "Step 1, please confirm Bambu Studio and your printer are in the same LAN." msgstr "" -"Step 1, please confirm that Bambu Studio and your printer are on the same " -"LAN." +"1. lépés: Ellenőrizd, hogy a Bambu Studio és a nyomtató ugyanazon a helyi " +"hálózaton van." msgid "" "Step 2, if the IP and Access Code below are different from the actual values " "on your printer, please correct them." msgstr "" -"Step 2, if the IP and Access Code below are different from the actual values " -"on your printer, please correct them." +"2. lépés: Ha az alábbi IP és hozzáférési kód eltér a nyomtatón láthatótól, " +"kérjük, javítsd ki őket." msgid "IP" msgstr "IP" msgid "Access Code" -msgstr "Access Code" +msgstr "Hozzáférési kód" msgid "Where to find your printer's IP and Access Code?" -msgstr "Where to find your printer's IP and Access Code?" +msgstr "Hol találom a nyomtató IP címét és a hozzáférési kódot?" msgid "Error: IP or Access Code are not correct" -msgstr "Error: IP or Access Code are not correct" +msgstr "Hiba: az IP vagy a hozzáférési kód nem helyes" msgid "Model:" -msgstr "Model:" +msgstr "Modell:" msgid "Serial:" -msgstr "Serial:" +msgstr "Sorozatszám:" msgid "Version:" -msgstr "Version:" +msgstr "Verzió:" msgid "Update firmware" -msgstr "Update firmware" +msgstr "Firmware frissítése" msgid "Printing" -msgstr "Printing" +msgstr "Nyomtatás" msgid "Idle" -msgstr "Idle" +msgstr "Tétlen" msgid "Latest version" -msgstr "Latest version" +msgstr "Legfrissebb verzió" msgid "Updating" -msgstr "Updating" +msgstr "Frissítés" msgid "Updating failed" -msgstr "Updating failed" +msgstr "A frissítés nem sikerült" msgid "Updating successful" -msgstr "Update successful" +msgstr "Sikeres frissítés" msgid "" "Are you sure you want to update? This will take about 10 minutes. Do not " "turn off the power while the printer is updating." msgstr "" -"Are you sure you want to update? This will take about 10 minutes. Do not " -"turn off the power while the printer is updating." +"Biztos, hogy frissíteni akarsz? Ez körülbelül 10 percet vesz igénybe. Ne " +"kapcsold ki a nyomtatót, amíg a frissítés tart." msgid "" "An important update was detected and needs to be run before printing can " "continue. Do you want to update now? You can also update later from 'Upgrade " "firmware'." msgstr "" -"An important update was detected and needs to be run before printing can " -"continue. Do you want to update now? You can also update later from 'Update " -"firmware'." +"Fontos frissítést találtunk, amelyet a nyomtatás előtt telepíteni kell. " +"Szeretnél most frissíteni? A frissítés később is elvégezhető a „Firmware " +"frissítése“ menüpontban." msgid "" "The firmware version is abnormal. Repairing and updating are required before " "printing. Do you want to update now? You can also update later on printer or " "update next time starting the studio." msgstr "" -"The firmware version is abnormal. Repairing and updating are required before " -"printing. Do you want to update now? You can also update later on the " -"printer or update next time you start Bambu Studio." +"A firmware verziója rendellenes. A nyomtatás előtt javításra és frissítésre " +"van szükség. Szeretnél frissíteni most? A frissítés később is elvégezhető a " +"Bambu Studio következő indításakor." msgid "Extension Board" -msgstr "Extension Board" +msgstr "Bővítőpanel" msgid "Saving objects into the 3mf failed." msgstr "Az objektumok mentése a 3mf-be sikertelen volt." @@ -6125,7 +6147,7 @@ msgid "Repaired 3mf file does not contain any volume" msgstr "A javított 3mf fájl nem tartalmaz térfogatot." msgid "Repaired 3mf file contains more than one volume" -msgstr "The repaired 3mf file contains more than one volume." +msgstr "A megjavított 3mf fájl egynél több kötetet tartalmaz." msgid "Repair finished" msgstr "Javítás befejezve" @@ -6332,7 +6354,8 @@ msgstr "írás callback sikertelen" msgid "" "%1% is too close to exclusion area, there may be collisions when printing." msgstr "" -"%1% is too close to exclusion area. There may be collisions when printing." +"%1% túl közel van a tiltott területhez, a nyomtatás során előfordulhatnak " +"ütközések." #, boost-format msgid "%1% is too close to others, and collisions may be caused." @@ -6345,11 +6368,13 @@ msgid "%1% is too tall, and collisions will be caused." msgstr "%1% túl magas, a nyomtatás során előfordulhatnak ütközések." msgid " is too close to others, there may be collisions when printing." -msgstr " is too close to others; there may be collisions when printing." +msgstr "" +"túl közel van más tárgyakhoz, a nyomtatás során előfordulhatnak ütközések." msgid " is too close to exclusion area, there may be collisions when printing." msgstr "" -" is too close to exclusion area, there may be collisions when printing." +"túl közel van a tiltott területhez, a nyomtatás során előfordulhatnak " +"ütközések." msgid "Prime Tower" msgstr "Törlő torony" @@ -6379,8 +6404,8 @@ msgid "" "Smooth mode of timelapse is not supported when \"by object\" sequence is " "enabled." msgstr "" -"Smooth mode of timelapse is not supported when \"by object\" sequence is " -"enabled." +"A sima timelapse funkció nem használható, ha a nyomtatás „Tárgyanként“ " +"sorrendre van állítva." msgid "" "Please select \"By object\" print sequence to print multiple objects in " @@ -6397,42 +6422,46 @@ msgstr "" "tartalmaz." msgid "The prime tower is not supported in \"By object\" print." -msgstr "A prime tower is not supported in “By object” print." +msgstr "A törlőtorony nem támogatott a „Tárgyanként“ nyomtatási módban." msgid "" "The prime tower is not supported when adaptive layer height is on. It " "requires that all objects have the same layer height." msgstr "" -"A prime tower is not supported when adaptive layer height is on. It requires " -"that all objects have the same layer height." +"A törlőtorony nem támogatott, ha az adaptív rétegmagasság engedélyezve van. " +"A törlőtorony használatához minden objektumnak azonos rétegmagassággal kell " +"rendelkeznie." msgid "The prime tower requires \"support gap\" to be multiple of layer height" msgstr "" -"A prime tower requires any “support gap” to be a multiple of layer height." +"A törlőtorony használatához minden „támasz rés”-nek a rétegmagasság " +"többszörösének kell lennie." msgid "The prime tower requires that all objects have the same layer heights" -msgstr "A prime tower requires that all objects have the same layer height." +msgstr "" +"A törlőtorony használatához minden objektumnak azonos rétegmagassággal kell " +"rendelkeznie." msgid "" "The prime tower requires that all objects are printed over the same number " "of raft layers" msgstr "" -"A prime tower requires that all objects are printed over the same number of " -"raft layers." +"A törlőtorony használatához minden objektumnak azonos számú tutaj réteggel " +"kell rendelkeznie." msgid "" "The prime tower requires that all objects are sliced with the same layer " "heights." msgstr "" -"A prime tower requires that all objects are sliced with the same layer " -"height." +"A törlőtorony használatához minden objektumnak azonos rétegmagassággal kell " +"rendelkeznie." msgid "" "The prime tower is only supported if all objects have the same variable " "layer height" msgstr "" -"The prime tower is only supported if all objects have the same variable " -"layer height" +"A törlőtorony használatához minden objektumnak azonos változó " +"rétegmagassággal kell rendelkeznie." msgid "Too small line width" msgstr "Túl kicsi a vonalszélesség" @@ -6443,7 +6472,8 @@ msgstr "Túl nagy vonalszélesség" msgid "" "The prime tower requires that support has the same layer height with object." msgstr "" -"A prime tower requires that support has the same layer height as the object." +"A törlőtorony használatához a támasznak ugyanakkora rétegmagassággal kell " +"rendelkeznie, mint az objektumnak." msgid "" "Support enforcers are used but support is not enabled. Please enable support." @@ -6456,7 +6486,7 @@ msgstr "A rétegmagasság nem lehet nagyobb a fúvóka átmérőjénél." #, c-format, boost-format msgid "Plate %d: %s does not support filament %s" -msgstr "Plate %d: %s does not support filament %s" +msgstr "%d. tálca: %s nem használható %s filamenttel." msgid "Generating skirt & brim" msgstr "Szoknya & perem generálása" @@ -6481,15 +6511,15 @@ msgid "" "left corner to cut filament during filament change. The area is expressed as " "polygon by points in following format: \"XxY, XxY, ...\"" msgstr "" -"Unprintable area in XY plane. For example, X1 Series printers use the front " -"left corner to cut filament during filament change. The area is expressed as " -"polygon by points in following format: \"XxY, XxY, ...\"" +"A nyomtatásra nem használható terület az XY síkban. Az X1 nyomtatók például " +"a bal első sarkot használják a filament elvágására filamentcserét követően. " +"A terület sokszögként van meghatározva a következő formátumban: XxY, XxY, ..." msgid "Bed custom texture" -msgstr "Bed custom texture" +msgstr "Egyedi tárgyasztal textúra" msgid "Bed custom model" -msgstr "Bed custom model" +msgstr "Egyedi tárgyasztal modell" msgid "Elephant foot compensation" msgstr "Elefántláb kompenzáció" @@ -6520,7 +6550,7 @@ msgid "Printer preset names" msgstr "Nyomtató beállítások neve" msgid "Hostname, IP or URL" -msgstr "Hostname, IP or URL" +msgstr "Hosztnév, IP vagy URL" msgid "" "Slic3r can upload G-code files to a printer host. This field should contain " @@ -6529,76 +6559,76 @@ msgid "" "name and password into the URL in the following format: https://username:" "password@your-octopi-address/" msgstr "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the hostname, IP address or URL of the printer host instance. Print host " -"behind HAProxy with basic auth enabled can be accessed by putting the user " -"name and password into the URL in the following format: https://username:" -"password@your-octopi-address/" +"A Slic3r képes G-kód fájlokat feltölteni a nyomtatóra. Ennek a mezőnek " +"tartalmaznia kell a nyomtató hostnevét, IP-címét vagy URL-címét. A HAProxy " +"mögött lévő nyomtató alapszintű hitelesítéssel érhető el, ha a " +"felhasználónevet és a jelszót a következő formátumban beleírod az URL-be: " +"https://username:password@your-octopi-address/" msgid "API Key / Password" -msgstr "API Key / Password" +msgstr "API kulcs / jelszó" msgid "" "Slic3r can upload G-code files to a printer host. This field should contain " "the API Key or the password required for authentication." msgstr "" -"Slic3r can upload G-code files to a printer host. This field should contain " -"the API Key or the password required for authentication." +"A Slic3r képes G-kód fájlokat feltölteni a nyomtatóra. Ennek a mezőnek " +"tartalmaznia kell a hitelesítéshez szükséges API-kulcsot vagy jelszót." msgid "Name of the printer" -msgstr "Name of the printer" +msgstr "A nyomtató neve" msgid "HTTPS CA File" -msgstr "HTTPS CA File" +msgstr "HTTPS CA fájl" msgid "" "Custom CA certificate file can be specified for HTTPS OctoPrint connections, " "in crt/pem format. If left blank, the default OS CA certificate repository " "is used." msgstr "" -"Custom CA certificate file can be specified for HTTPS OctoPrint connections, " -"in crt/pem format. If left blank, the default OS CA certificate repository " -"is used." +"A HTTP-alapú OctoPrint kapcsolatokhoz megadható egy egyedi CA-tanúsítvány, " +"crt/pem formátumban. Ha üresen hagyod, az alapértelmezett OS CA tanúsítvány " +"lesz használva." msgid "User" -msgstr "User" +msgstr "Felhasználó" msgid "Password" -msgstr "Password" +msgstr "Jelszó" msgid "Ignore HTTPS certificate revocation checks" -msgstr "Ignore HTTPS certificate revocation checks" +msgstr "A HTTPS-tanúsítvány visszavonás ellenőrzésének figyelmen kívül hagyása" msgid "" "Ignore HTTPS certificate revocation checks in case of missing or offline " "distribution points. One may want to enable this option for self signed " "certificates if connection fails." msgstr "" -"Ignore HTTPS certificate revocation checks in the case of missing or offline " -"distribution points. One may want to enable this option for self signed " -"certificates if connection fails." +"Hiányzó vagy offline terjesztési pontok esetén figyelmen kívül hagyja a " +"HTTPS-tanúsítványok visszavonásának ellenőrzését. Ez az opció akkor lehet " +"segítségedre, ha nem sikerül csatlakoznod egy általad aláírt tanúsítvánnyal." msgid "Names of presets related to the physical printer" -msgstr "Names of presets related to the physical printer" +msgstr "A fizikai nyomtatóhoz kapcsolódó beállítások nevei" msgid "Authorization Type" -msgstr "Authorization Type" +msgstr "Hitelesítés típusa" msgid "API key" -msgstr "API key" +msgstr "API-kulcs" msgid "HTTP digest" msgstr "HTTP digest" msgid "Avoid crossing wall" -msgstr "Avoid crossing walls" +msgstr "Kerülje a falak keresztezését" msgid "Detour and avoid to travel across wall which may cause blob on surface" msgstr "" "Kerülje a falon keresztül való áthaladást, ami nyomot hagyhat a felületen" msgid "Avoid crossing wall - Max detour length" -msgstr "Avoid crossing walls - Max detour length" +msgstr "Kerülje a falak keresztezését - Max kitérő hossza" msgid "" "Maximum detour distance for avoiding crossing wall. Don't detour if the " @@ -6606,13 +6636,14 @@ msgid "" "either as an absolute value or as percentage (for example 50%) of a direct " "travel path. Zero to disable" msgstr "" -"Maximum detour distance for avoiding crossing wall: The printer won't detour " -"if the detour distance is larger than this value. Detour length could be " -"specified either as an absolute value or as percentage (for example 50%) of " -"a direct travel path. A value of 0 will disable this." +"A kitérő maximális hossza a fal keresztezésének elkerüléséhez: a nyomtató " +"figyelmen kívül hagyja a kitérést, ha az ehhez szükséges távolság nagyobb, " +"mint ez az érték. A kitérő megadható abszolút értékként vagy a közvetlen " +"útvonal százalékában (például 50%). Állítsd az értéket 0-ra, ha ki szeretnéd " +"kapcsolni ezt az opciót." msgid "mm or %" -msgstr "mm or %" +msgstr "mm vagy %" msgid "Other layers" msgstr "Többi réteg" @@ -6645,8 +6676,8 @@ msgid "" "Bed temperature for layers except the initial one. Value 0 means the " "filament does not support to print on the Textured PEI Plate" msgstr "" -"Bed temperature after the first layer. 0 means the filament is not supported " -"on the Textured PEI Plate." +"Asztalhőmérséklet az első réteg után. A 0 érték azt jelenti, hogy a filament " +"nem támogatja texturált PEI tálcára történő nyomtatást." msgid "Initial layer" msgstr "Kezdőréteg" @@ -6679,8 +6710,8 @@ msgid "" "Bed temperature of the initial layer. Value 0 means the filament does not " "support to print on the Textured PEI Plate" msgstr "" -"Bed temperature of the first layer 0 means the filament is not supported on " -"the Textured PEI Plate." +"Az első réteg asztalhőmérsékletének beállított 0 érték azt jelenti, hogy a " +"filament nem támogatja texturált PEI tálcára történő nyomtatást." msgid "Bed types supported by the printer" msgstr "Nyomtató által támogatott asztaltípusok" @@ -6749,22 +6780,24 @@ msgid "" "of the line without support from lower layer. 0% means forcing cooling for " "all outer wall no matter how much overhang degree" msgstr "" -"Force cooling fan to be a specific speed when overhang degree of printed " -"part exceeds this value. This is expressed as a percentage which indicates " -"how much width of the line without support from lower layer. 0% means " -"forcing cooling for all outer wall no matter the overhang degree." +"Kényszeríti a hűtőventilátort, hogy egy adott fordulatszámot használjon, ha " +"a túlnyúlás mértéke meghaladja ezt az értéket. Százalékban van kifejezve, " +"ami azt jelzi, hogy a nyomtatott vonal hány százaléka maradhat az alsóbb " +"rétegek alátámasztása nélkül. A 0%%-os érték bekapcsolja a hűtést a külső " +"fal teljes szélességén, függetlenül a túlnyúlás mértékétől." msgid "Bridge direction" -msgstr "Bridge direction" +msgstr "Áthidalás iránya" msgid "" "Bridging angle override. If left to zero, the bridging angle will be " "calculated automatically. Otherwise the provided angle will be used for " "external bridges. Use 180°for zero angle." msgstr "" -"Bridging angle override. 0 means the bridging angle will be calculated " -"automatically. Otherwise the provided angle will be used for external " -"bridges. Use 180° for zero angle." +"Az áthidalás szögének felülbírálása. A 0 érték azt jelenti, hogy az " +"áthidalás szöge automatikusan kerül kiszámításra. Máskülönben a megadott " +"érték kerül alkalmazásra. Ha az áthidalást a falakkal párhuzamosra szeretnéd " +"állítani, használj 180°-os értéket." msgid "Bridge flow" msgstr "Áthidalás áramlási sebessége" @@ -6837,7 +6870,7 @@ msgid "Compatible machine" msgstr "Kompatibilis gép" msgid "upward compatible machine" -msgstr "upward compatible machine" +msgstr "felfelé kompatibilis gép" msgid "Compatible machine condition" msgstr "Kompatibilis gépállapot" @@ -6956,17 +6989,17 @@ msgid "End G-code when finish the printing of this filament" msgstr "Befejező G-kód a filament nyomtatásának befejezésekor" msgid "Ensure vertical shell thickness" -msgstr "Ensure vertical shell thickness" +msgstr "Függőleges héjvastagság biztosítása" msgid "" "Add solid infill near sloping surfaces to guarantee the vertical shell " "thickness (top+bottom solid layers)" msgstr "" -"Add solid infill near sloping surfaces to guarantee the vertical shell " -"thickness (top+bottom solid layers)." +"A függőleges héjvastagság biztosítása érdekében szilárd kitöltést alkalmaz a " +"lejtős felületek közelében." msgid "Internal bridge support thickness" -msgstr "Internal bridge support thickness" +msgstr "Belső áthidalások támaszának vastagsága" msgid "" "If enabled, Studio will generate support loops under the contours of " @@ -6995,16 +7028,16 @@ msgid "Monotonic line" msgstr "Monotonikus vonal" msgid "Aligned Rectilinear" -msgstr "Aligned Rectilinear" +msgstr "Igazított vonal" msgid "Hilbert Curve" -msgstr "Hilbert Curve" +msgstr "Hilbert-görbe" msgid "Archimedean Chords" -msgstr "Archimedean Chords" +msgstr "Archimédeszi vonalak" msgid "Octagram Spiral" -msgstr "Octagram Spiral" +msgstr "Nyolcágú spirál" msgid "Bottom surface pattern" msgstr "Alsó felület mintázata" @@ -7041,7 +7074,7 @@ msgid "infill/outer/inner" msgstr "kitöltés/külső/belső" msgid "inner-outer-inner/infill" -msgstr "inner-outer-inner/infill" +msgstr "belső-külső-belső/kitöltés" msgid "Height to rod" msgstr "Magasság a rúdig" @@ -7050,8 +7083,8 @@ msgid "" "Distance of the nozzle tip to the lower rod. Used for collision avoidance in " "by-object printing." msgstr "" -"Distance from the nozzle tip to the lower rod. Used for collision avoidance " -"in by-object printing." +"A fúvóka hegye és az alsó rúd közötti távolság. Objektumonként történő " +"nyomtatás során az ütközések elkerülésére szolgál." msgid "Height to lid" msgstr "Magasság a fedélig" @@ -7060,25 +7093,25 @@ msgid "" "Distance of the nozzle tip to the lid. Used for collision avoidance in by-" "object printing." msgstr "" -"Distance from the nozzle tip to the lid. Used for collision avoidance in by-" -"object printing." +"A fúvóka hegye és a fedél közötti távolság. Objektumonként történő nyomtatás " +"során az ütközések elkerülésére szolgál." msgid "" "Clearance radius around extruder. Used for collision avoidance in by-object " "printing." msgstr "" -"Clearance radius around extruder: used for collision avoidance in by-object " -"printing." +"Az extruder körüli szabadon hagyott terület sugara. Objektumonként történő " +"nyomtatás során az ütközések elkerülésére szolgál." msgid "Max Radius" -msgstr "Max Radius" +msgstr "Max. sugár" msgid "" "Max clearance radius around extruder. Used for collision avoidance in by-" "object printing." msgstr "" -"Max clearance radius around extruder. Used for collision avoidance in by-" -"object printing." +"Az extruder körüli szabadon hagyott terület sugara. Objektumonként történő " +"nyomtatás során az ütközések elkerülésére szolgál." msgid "Extruder Color" msgstr "Extruder szín" @@ -7138,32 +7171,33 @@ msgid "s" msgstr "mp" msgid "Default color" -msgstr "Default color" +msgstr "Alapértelmezett szín" msgid "Default filament color" -msgstr "Default filament color" +msgstr "Alapértelmezett filament szín" msgid "Color" msgstr "Szín" msgid "Required nozzle HRC" -msgstr "Required nozzle HRC" +msgstr "Szükséges fúvóka HRC-érték" msgid "" "Minimum HRC of nozzle required to print the filament. Zero means no checking " "of nozzle's HRC." msgstr "" -"Minimum HRC of nozzle required to print the filament. A value of 0 means no " -"checking of the nozzle's HRC." +"A filament nyomtatásához szükséges fúvóka minimum HRC értéke. A 0 azt " +"jelenti, hogy nem ellenőrzi a fúvóka HRC értékét." msgid "" "This setting stands for how much volume of filament can be melted and " "extruded per second. Printing speed is limited by max volumetric speed, in " "case of too high and unreasonable speed setting. Can't be zero" msgstr "" -"This setting is the volume of filament that can be melted and extruded per " -"second. Printing speed is limited by max volumetric speed, in case of too " -"high and unreasonable speed setting. This value cannot be zero." +"Ezzel a beállítással adhatod meg a másodpercenként megolvasztható és " +"extrudálható maximális filamentmennyiséget. A nyomtatási sebességet a " +"maximális térfogatsebesség korlátozhatja, túl magas és ésszerűtlen sebesség " +"esetén. Ez az érték nem lehet 0." msgid "mm³/s" msgstr "mm³/s" @@ -7171,6 +7205,9 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimális tisztítás a törlőtoronyban" +msgid "mm³" +msgstr "mm³" + msgid "Filament load time" msgstr "Filament betöltési idő" @@ -7293,13 +7330,13 @@ msgid "Adaptive Cubic" msgstr "Adaptív kocka" msgid "3D Honeycomb" -msgstr "3D Honeycomb" +msgstr "3D-méhsejt" msgid "Support Cubic" -msgstr "Support Cubic" +msgstr "Támasz kocka" msgid "Lightning" -msgstr "Lightning" +msgstr "Világítás" msgid "" "Acceleration of top surface infill. Using a lower value may improve top " @@ -7309,7 +7346,9 @@ msgstr "" "javíthatja a felső felület minőségét" msgid "Acceleration of outer wall. Using a lower value can improve quality" -msgstr "Acceleration of outer wall: using a lower value can improve quality." +msgstr "" +"Gyorsulás a külső falnál: alacsonyabb érték használata javíthatja a " +"minőséget." msgid "" "Acceleration of initial layer. Using a lower value can improve build plate " @@ -7433,7 +7472,7 @@ msgstr "" "milyen filamentekkel képes nyomtatni." msgid "Undefine" -msgstr "Undefined" +msgstr "Nincs meghatározva" msgid "Hardened steel" msgstr "Edzett acél" @@ -7445,14 +7484,14 @@ msgid "Brass" msgstr "Sárgaréz" msgid "Nozzle HRC" -msgstr "Nozzle HRC" +msgstr "Fúvóka HRC értéke" msgid "" "The nozzle's hardness. Zero means no checking for nozzle's hardness during " "slicing." msgstr "" -"The nozzle's hardness. Zero means no checking for nozzle hardness during " -"slicing." +"A fúvóka keménysége. A 0 azt jelenti, hogy szeletelés során nem ellenőrzi a " +"fúvóka HRC értékét." msgid "HRC" msgstr "HRC" @@ -7562,11 +7601,11 @@ msgid "" "This G-code will be used as a code for the pause print. User can insert " "pause G-code in gcode viewer" msgstr "" -"This G-code will be used as a code for the pause print. Users can insert " -"pause G-code in the G-code viewer." +"Ez a G-kód lesz használva a nyomtatás szüneteltetéséhez. A felhasználók a " +"szünet G-kódot a G-kódnézőben illeszthetik be." msgid "This G-code will be used as a custom code" -msgstr "This G-code will be used as a custom code" +msgstr "Ezt a G-kód egyedi kódként lesz használva." msgid "Maximum speed X" msgstr "Maximális sebesség X" @@ -7730,14 +7769,14 @@ msgid "Diameter of nozzle" msgstr "Fúvóka átmérője" msgid "Host Type" -msgstr "Host Type" +msgstr "Host típusa" msgid "" "Slic3r can upload G-code files to a printer host. This field must contain " "the kind of the host." msgstr "" -"Slic3r can upload G-code files to a printer host. This field must contain " -"the kind of the host." +"A Slic3r képes G-kód fájlokat feltölteni a nyomtatóra. Ennek a mezőnek " +"tartalmaznia kell a gazdagép típusát." msgid "Nozzle volume" msgstr "Fúvóka térfogata" @@ -7746,11 +7785,10 @@ msgid "Volume of nozzle between the cutter and the end of nozzle" msgstr "A fúvóka térfogata a filamentvágó és a fúvóka vége között" msgid "Start end points" -msgstr "Start end points" +msgstr "Kezdő- és végpontok" msgid "The start and end points which is from cutter area to garbage can." -msgstr "" -"The start and end points which are from the cutter area to the excess chute." +msgstr "A kezdő- és végpontok a vágási terület és a kidobónyílás között." msgid "Reduce infill retraction" msgstr "Csökkentett visszahúzás kitöltésnél" @@ -7811,8 +7849,8 @@ msgstr "Tutaj érintkezés Z távolság" msgid "Z gap between object and raft. Ignored for soluble interface" msgstr "" -"This is the Z gap between an object and a raft. It is ignored for soluble " -"interfaces." +"A Z távolság a tárgy és a tutaj között. Oldható érintkező felületek esetén " +"ez az érték figyelmen kívül van hagyva." msgid "Raft expansion" msgstr "Tutaj kibővítése" @@ -7827,10 +7865,12 @@ msgid "Density of the first raft or support layer" msgstr "Az első tutaj vagy támasz réteg sűrűsége" msgid "Initial layer expansion" -msgstr "First layer expansion" +msgstr "Első réteg kiterjesztése" msgid "Expand the first raft or support layer to improve bed plate adhesion" -msgstr "This expands the first raft or support layer to improve bed adhesion." +msgstr "" +"Kiterjeszti az első tutaj- vagy támaszréteget, hogy javítsa az asztalhoz " +"való tapadást." msgid "Raft layers" msgstr "Tutaj rétegek" @@ -7904,13 +7944,13 @@ msgstr "" "körkörös mozgás megelőzheti a szálazást." msgid "Z Hop Type" -msgstr "Z Hop Type" +msgstr "Z-emelés típusa" msgid "Slope" -msgstr "Slope" +msgstr "Lejtő" msgid "Spiral" -msgstr "Spiral" +msgstr "Spirál" msgid "Retraction Speed" msgstr "Visszahúzás sebessége" @@ -7944,7 +7984,7 @@ msgid "Back" msgstr "Hátul" msgid "Random" -msgstr "Random" +msgstr "Véletlenszerû" msgid "Skirt distance" msgstr "Szoknya távolsága" @@ -8000,7 +8040,7 @@ msgstr "" "alsó felületre" msgid "Spiral vase" -msgstr "Spiral vase" +msgstr "Spirál (váza)" msgid "" "Spiralize smooths out the z moves of the outer contour. And turns a solid " @@ -8021,17 +8061,17 @@ msgid "" "process of taking a snapshot, prime tower is required for smooth mode to " "wipe nozzle." msgstr "" -"If smooth or traditional mode is selected, a timelapse video will be " -"generated for each print. After each layer is printed, a snapshot is taken " -"with the chamber camera. All of these snapshots are composed into a " -"timelapse video when printing completes. If smooth mode is selected, the " -"toolhead will move to the excess chute after each layer is printed and then " -"take a snapshot. Since the melt filament may leak from the nozzle during the " -"process of taking a snapshot, a prime tower is required for smooth mode to " -"wipe the nozzle." +"Ha a sima vagy a hagyományos mód van kiválasztva, minden nyomtatásnál készül " +"egy timelapse-videó. Az egyes rétegek kinyomtatása után a beépített kamera " +"egy képet készít. A nyomtatás befejeződése után aztán ezeket a képeket a " +"szoftver egy videóvá fűzi össze. Ha a sima mód van kiválasztva, a réteg " +"nyomtatása után a nyomtatófej a kidobónyíláshoz mozog, majd a kamera egy " +"képet készít. Mivel a kép készítése során szivároghat valamennyi olvadt " +"filament a fúvókából, egy törlőtoronyra van szükség a fúvóka " +"megtisztításához." msgid "Traditional" -msgstr "Traditional" +msgstr "Hagyományos" msgid "Temperature variation" msgstr "Hőmérséklet változás" @@ -8046,35 +8086,36 @@ msgid "Start G-code when start the printing of this filament" msgstr "Kezdő G-kód a filament nyomtatásának megkezdésekor" msgid "Slice gap closing radius" -msgstr "Slice gap closing radius" +msgstr "Szeletelési hézag lezárási sugara" msgid "" "Cracks smaller than 2x gap closing radius are being filled during the " "triangle mesh slicing. The gap closing operation may reduce the final print " "resolution, therefore it is advisable to keep the value reasonably low." msgstr "" -"Cracks smaller than 2x gap closing radius are being filled during the " -"triangle mesh slicing. The gap closing operation may reduce the final print " -"resolution, therefore it is advisable to keep the value reasonably low." +"A háromszögháló szeletelés során a szeletelési hézag lezárási sugaránál 2x " +"kisebb résekk feltöltésre kerülnek. A hézagok lezárása csökkentheti a " +"nyomtatási felbontást, ezért ajánlott ezt az értéket alacsonyan tartani." msgid "Slicing Mode" -msgstr "Slicing Mode" +msgstr "Szeletelési mód" msgid "" "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to " "close all holes in the model." msgstr "" -"Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to " -"close all holes in the model." +"Használd a „Páros-páratlan“ opciót a 3DLabPrint repülőgépmodellekhez. " +"Használd a „Hézagok lezárása“ lehetőséget a modell összes házagának " +"lezárásához." msgid "Regular" -msgstr "Regular" +msgstr "Normál" msgid "Even-odd" -msgstr "Even-odd" +msgstr "Páros-páratlan" msgid "Close holes" -msgstr "Close holes" +msgstr "Hézagok lezárása" msgid "Enable support" msgstr "Támasz engedélyezése" @@ -8087,9 +8128,9 @@ msgid "" "normal(manual) or tree(manual) is selected, only support enforcers are " "generated" msgstr "" -"normal(auto) and tree(auto) are used to generate support automatically. If " -"normal(manual) or tree(manual) is selected, only support enforcers are " -"generated" +"A normál (auto) és a fa (auto) a támaszok automatikus generálásához van " +"használva. Ha a normál (kézi) vagy a fa (kézi) van kiválasztva, akkor csak a " +"kényszerített támaszok kerülnek generálásra." msgid "normal(auto)" msgstr "normál (auto)" @@ -8098,10 +8139,10 @@ msgid "tree(auto)" msgstr "fa (auto)" msgid "normal(manual)" -msgstr "normal(manual)" +msgstr "normál (manuális)" msgid "tree(manual)" -msgstr "tree(manual)" +msgstr "fa (manuális)" msgid "Support/object xy distance" msgstr "Támasz/tárgy XY távolság" @@ -8123,14 +8164,14 @@ msgid "Don't create support on model surface, only on build plate" msgstr "Nem generál támaszt a modell felületén, csak a tárgyasztalon" msgid "Support critical regions only" -msgstr "Support critical regions only" +msgstr "Csak a kritikus területek alátámasztása" msgid "" "Only create support for critical regions including sharp tail, cantilever, " "etc." msgstr "" -"Only create support for critical regions including sharp tail, cantilever, " -"etc." +"Csak olyan kritikus területekhez generál támasztékot, mint például egy farok " +"vagy egyéb kiálló részek." msgid "Top Z distance" msgstr "Z távolság" @@ -8141,10 +8182,10 @@ msgstr "" "között." msgid "Bottom Z distance" -msgstr "Bottom Z distance" +msgstr "Alsó Z távolság" msgid "The z gap between the bottom support interface and object" -msgstr "The z gap between the bottom support interface and object" +msgstr "A Z távolság az alsó támasz érintkező rétege és az objektum között." msgid "Support/raft base" msgstr "" @@ -8153,8 +8194,9 @@ msgid "" "Filament to print support base and raft. \"Default\" means no specific " "filament for support and current filament is used" msgstr "" -"Filament to print support bases and rafts. \"Default\" means no specific " -"filament for support, and current filament is used" +"A támasz alapjához és a tutaj nyomtatásához használt filament. Az " +"„Alapértelmezett“ beállítás választásakor a jelenleg használt filament kerül " +"felhasználásra." msgid "Line width of support" msgstr "A támasz vonalszélessége" @@ -8175,8 +8217,8 @@ msgid "" "Filament to print support interface. \"Default\" means no specific filament " "for support interface and current filament is used" msgstr "" -"Filament to print support interfaces. \"Default\" means no specific filament " -"for support interface, and current filament is used" +"Filament a támasz érintkező felületének nyomtatásához. Az „Alapértelmezett“ " +"beállítás választásakor a jelenleg használt filament kerül felhasználásra." msgid "Top interface layers" msgstr "Felső érintkező rétegek" @@ -8214,7 +8256,7 @@ msgid "Rectilinear grid" msgstr "Vonalrács" msgid "Hollow" -msgstr "Hollow" +msgstr "Üreges" msgid "Interface pattern" msgstr "Érintkező felület mintázata" @@ -8238,10 +8280,10 @@ msgid "Spacing between support lines" msgstr "A támasz vonalai közötti távolság" msgid "Normal Support expansion" -msgstr "Normal support expansion" +msgstr "Normál támasz kibővítése" msgid "Expand (+) or shrink (-) the horizontal span of normal support" -msgstr "Expand (+) or shrink (-) the horizontal span of normal support" +msgstr "Megnöveli (+) vagy összehúzza (-) a normál támaszt vízszintes irányban" msgid "Speed of support" msgstr "Támaszok sebessége" @@ -8254,24 +8296,24 @@ msgid "" "a lot of material (default), while hybrid style will create similar " "structure to normal support under large flat overhangs." msgstr "" -"Style and shape of the support. For normal support, projecting the supports " -"into a regular grid will create more stable supports (default), while snug " -"support towers will save material and reduce object scarring.\n" -"For tree support, slim style will merge branches more aggressively and save " -"a lot of material (default), while hybrid style will create similar " -"structure to normal support under large flat overhangs." +"A támaszok típusa és formája. Normál támasz esetén a rácsmintázat stabilabb " +"alátámasztást eredményez, míg a szorosan illeszkedő tornyok anyagot " +"takarítanak meg és csökkentik az objektumon keletkező felületi hibákat.\n" +"A fa támaszok esetén a karcsú változat agresszívebben egyesíti az ágakat és " +"több anyagot takarít meg (alapértelmezett), míg a hibrid változat a normál " +"támaszokhoz hasonló szerkezetet hoz létre a nagy lapos túlnyúlások alatt." msgid "Snug" msgstr "Szoros" msgid "Tree Slim" -msgstr "Tree Slim" +msgstr "Karcsú fa" msgid "Tree Strong" -msgstr "Tree Strong" +msgstr "Erős fa" msgid "Tree Hybrid" -msgstr "Tree Hybrid" +msgstr "Hibrid fa" msgid "Independent support layer height" msgstr "Független támasz rétegmagassága" @@ -8336,9 +8378,10 @@ msgid "" "layer for more than this threshold. Too low bed temperature of other layer " "may cause the model broken free from build plate" msgstr "" -"It is not recommend for bed temperature of other layers to be lower than the " -"first layer by more than this threshold. Too low bed temperature of other " -"layer may cause the model to break free from the build plate." +"Nem ajánlott, hogy a kezdőréteget követő többi réteg asztalhőmérséklete " +"alacsonyabb legyen ennél a küszöbértéknél. Ha a többi rétegnél túl alacsony " +"asztalhőmérsékletet használsz, előfordulhat, hogy a tárgy leválik az " +"asztalról nyomtatás közben" msgid "Detect thin wall" msgstr "Vékony fal felismerése" @@ -8434,8 +8477,8 @@ msgid "" "The actual flushing volumes is equal to the flush multiplier multiplied by " "the flushing volumes in the table." msgstr "" -"The actual flushing volumes is equal to the flush multiplier value " -"multiplied by the flushing volumes in the table." +"A tényleges öblítési mennyiségek megegyeznek az öblítési szorzó értékével, " +"szorozva a táblázatban szereplő öblítési mennyiségekkel." msgid "Prime volume" msgstr "Tisztítási mennyiség" @@ -8455,28 +8498,29 @@ msgid "" "printed with transparent filament, the mixed color infill will be seen " "outside. It will not take effect, unless the prime tower is enabled." msgstr "" -"Purging after filament change will be done inside objects' infills. This may " -"lower the amount of waste and decrease the print time. If the walls are " -"printed with transparent filament, the mixed color infill will be visible. " -"It will not take effect unless the prime tower is enabled." +"A filamentcsere utáni tisztítás az objektumok kitöltésén belül történik. Ez " +"csökkentheti a hulladék mennyiségét és a nyomtatási időt. Ha a falakat " +"átlátszó filamenttel nyomtatod, a vegyes színű kitöltés látható lesz. Ez az " +"opció csak akkor működik, ha a törlőtorony engedélyezve van." msgid "" "Purging after filament change will be done inside objects' support. This may " "lower the amount of waste and decrease the print time. It will not take " "effect, unless the prime tower is enabled." msgstr "" -"Purging after filament change will be done inside objects' support. This may " -"lower the amount of waste and decrease the print time. It will not take " -"effect unless a prime tower is enabled." +"A filamentcsere utáni tisztítás az objektumok támaszain belül történik. Ez " +"csökkentheti a hulladék mennyiségét és a nyomtatási időt. Ez az opció csak " +"akkor működik, ha a törlőtorony engedélyezve van." msgid "" "This object will be used to purge the nozzle after a filament change to save " "filament and decrease the print time. Colours of the objects will be mixed " "as a result. It will not take effect, unless the prime tower is enabled." msgstr "" -"This object will be used to purge the nozzle after a filament change to save " -"filament and decrease the print time. Colors of the objects will be mixed as " -"a result. It will not take effect unless the prime tower is enabled." +"Ez az objektum lesz használva a fúvóka tisztítására filamentcsere után, a " +"nyomtatási idő csökkentése és némi filament megtakarításának érdekében. Az " +"objektum színei ennek eredményeképpen keveredni fognak. Ez az opció csak " +"akkor működik, ha a törlőtorony engedélyezve van." msgid "X-Y hole compensation" msgstr "X-Y furatkompenzáció" @@ -8511,30 +8555,31 @@ msgid "" "very thin areas is used gap-fill. Arachne engine produces walls with " "variable extrusion width" msgstr "" -"The classic wall generator produces walls with constant extrusion width and " -"for very thin areas, gap-fill is used. The Arachne engine produces walls " -"with variable extrusion width." +"A klasszikus falgenerátor állandó szélességű falakat generál, és a nagyon " +"vékony területeknél hézagkitöltést használ. Az Arachne engine változó " +"szélességű falakat generál." msgid "Classic" -msgstr "Classic" +msgstr "Klasszikus" msgid "Arachne" msgstr "Arachne" msgid "Wall transition length" -msgstr "Wall transition length" +msgstr "Falátmenet hossza" msgid "" "When transitioning between different numbers of walls as the part becomes " "thinner, a certain amount of space is allotted to split or join the wall " "segments. It's expressed as a percentage over nozzle diameter" msgstr "" -"When transitioning between different numbers of walls as the part becomes " -"thinner, a certain amount of space is allotted to split or join the wall " -"segments. It's expressed as a percentage over nozzle diameter." +"A különböző vastagságú falak közötti átmenetkor, ahogy a tárgy vékonyabbá " +"válik, egy bizonyos terület elkülönítésre kerül a falszegmensek " +"összekapcsolására vagy épp elhatárolására. A fúvóka átmérőjének százalékában " +"van kifejezve." msgid "Wall transitioning filter margin" -msgstr "Wall transitioning filter margin" +msgstr "Falátmenet szűrésének értéke" msgid "" "Prevent transitioning back and forth between one extra wall and one less. " @@ -8545,16 +8590,16 @@ msgid "" "variation can lead to under- or overextrusion problems. It's expressed as a " "percentage over nozzle diameter" msgstr "" -"Prevent transitioning back and forth between one extra wall and one less. " -"This margin extends the range of extrusion widths which follow to [Minimum " -"wall width - margin, 2 * Minimum wall width + margin]. Increasing this " -"margin reduces the number of transitions, which reduces the number of " -"extrusion starts/stops and travel time. However, large extrusion width " -"variation can lead to under- or overextrusion problems. It's expressed as a " -"percentage over nozzle diameter" +"Megakadályozza az oda-vissza átmenetet egy extra és eggyel kevesebb fal " +"között. Ez a toleranciaérték megnöveli a soron következő extrudálás " +"szélességét [Minimális falszélesség - tolerancia, 2 * Minimális falszélesség " +"+ tolerancia]. Az érték növelése csökkenti az átmenetek számát, ami " +"csökkenti az extrudálások számát és a nyomtatási időt. Azonban a túl nagy " +"eltérések az extrudálás szélességében alul- vagy túlextrudáláshoz " +"vezethetnek. A fúvóka átmérőjének százalékában van kifejezve" msgid "Wall transitioning threshold angle" -msgstr "Wall transitioning threshold angle" +msgstr "Falátmenet szögének küszöbértéke" msgid "" "When to create transitions between even and odd numbers of walls. A wedge " @@ -8563,24 +8608,24 @@ msgid "" "this setting reduces the number and length of these center walls, but may " "leave gaps or overextrude" msgstr "" -"When to create transitions between even and odd numbers of walls. A wedge " -"shape with an angle greater than this setting will not have transitions and " -"no walls will be printed in the center to fill the remaining space. Reducing " -"this setting reduces the number and length of these center walls, but may " -"leave gaps or overextrude" +"Mikor legyen átmenetet a páros és páratlan számú falak között. Az ennél " +"nagyobb szögű ék formánál nem lesz átmenet és nem kerül közé anyag, hogy " +"kitöltse a fennmaradó helyet. Ennek az értéknek a csökkentése csökkenti a " +"középső falak számát és hosszát, de hézagokat hagyhat vagy túlextrudálhat" msgid "Wall distribution count" -msgstr "Wall distribution count" +msgstr "Falak elosztása" msgid "" "The number of walls, counted from the center, over which the variation needs " "to be spread. Lower values mean that the outer walls don't change in width" msgstr "" -"The number of walls, counted from the center, over which the variation needs " -"to be spread. Lower values mean that the outer walls don't change in width" +"A falak száma, a középponttól számítva, amelyek között a falakat el kell " +"osztani. Az alacsonyabb érték azt jelenti, hogy a külső falak szélessége nem " +"változik." msgid "Minimum feature size" -msgstr "Minimum feature size" +msgstr "Minimális méret" msgid "" "Minimum thickness of thin features. Model features that are thinner than " @@ -8588,13 +8633,12 @@ msgid "" "feature size will be widened to the Minimum wall width. It's expressed as a " "percentage over nozzle diameter" msgstr "" -"Minimum thickness of thin features. Model features that are thinner than " -"this value will not be printed, while features thicker than the minimum " -"feature size will be widened to the minimum wall width. It's expressed as a " -"percentage over nozzle diameter" +"A vékony elemek minimális vastagsága. Az ennél vékonyabb modellelemek nem " +"lesznek kinyomtatva, míg a minimum méretnél nagyobb elemek a minimális " +"falszélességre szélesednek. A fúvóka átmérőjének százalékában van kifejezve" msgid "Minimum wall width" -msgstr "Minimum wall width" +msgstr "Minimális falszélesség" msgid "" "Width of the wall that will replace thin features (according to the Minimum " @@ -8602,10 +8646,10 @@ msgid "" "thickness of the feature, the wall will become as thick as the feature " "itself. It's expressed as a percentage over nozzle diameter" msgstr "" -"Width of the wall that will replace thin features (according to the Minimum " -"feature size) of the model. If the Minimum wall width is thinner than the " -"thickness of the feature, the wall will become as thick as the feature " -"itself. It's expressed as a percentage over nozzle diameter" +"A fal szélessége, amely lecseréli a modell vékony részeit (a Minimális " +"méretben megadott érték szerint). Ha a minimális falszélesség vékonyabb, " +"mint a nyomtatandó elem vastagsága, akkor a fal olyan vastag lesz, mint maga " +"a nyomtatott elem. A fúvóka átmérőjének százalékában van kifejezve" msgid "Detect narrow internal solid infill" msgstr "Keskeny belső szilárd kitöltés felismerése" @@ -8643,16 +8687,16 @@ msgid "Export project as 3MF." msgstr "Projekt exportálása 3MF formátumban." msgid "Export slicing data" -msgstr "Export slicing data" +msgstr "Szeletelési adatok exportálása" msgid "Export slicing data to a folder." -msgstr "Export slicing data to a folder" +msgstr "Szeletelési adatok exportálása egy mappába" msgid "Load slicing data" -msgstr "Load slicing data" +msgstr "Szeletelési adatok betöltése" msgid "Load cached slicing data from directory" -msgstr "Load cached slicing data from directory" +msgstr "Gyorsítótárazott szeletelési adatok betöltése mappából" msgid "Slice" msgstr "Szeletelés" @@ -8664,10 +8708,10 @@ msgid "Show command help." msgstr "Parancs súgó megjelenítése." msgid "UpToDate" -msgstr "UpToDate" +msgstr "Naprakész" msgid "Update the configs values of 3mf to latest." -msgstr "Update the configs values of 3mf to latest." +msgstr "Frissítsd a 3mf konfigurációs értékeit a legújabbra." msgid "mtcpp" msgstr "" @@ -8706,10 +8750,10 @@ msgid "Export settings to a file." msgstr "Beállítások exportálása egy fájlba." msgid "Send progress to pipe" -msgstr "Send progress to pipe" +msgstr "Folyamat elküldése" msgid "Send progress to pipe." -msgstr "Send progress to pipe." +msgstr "Folyamat elküldése." msgid "Arrange Options" msgstr "Elrendezési lehetőségek" @@ -8776,7 +8820,7 @@ msgid "Generating infill toolpath" msgstr "Kitöltési szerszámút generálás" msgid "Detect overhangs for auto-lift" -msgstr "Detect overhangs for auto-lift" +msgstr "Túlnyúlások észlelése az automatikus emeléshez" msgid "Generating support" msgstr "Támaszok generálása" @@ -8806,7 +8850,7 @@ msgid "Empty layers around bottom are replaced by nearest normal layers." msgstr "Az alsó üres rétegeket a legközelebbi normál rétegek váltják fel." msgid "The model has too many empty layers." -msgstr "The model has too many empty layers." +msgstr "A modellben túl sok az üres réteg." msgid "Slicing mesh" msgstr "Háló szeletelése" @@ -8859,9 +8903,9 @@ msgid "" "Did you know how to control view and object/part selection with mouse and " "touchpanel in the 3D scene?" msgstr "" -"3D Scene Operations\n" -"Do you know how to control view and object/part selection with mouse and " -"touch panel in the 3D scene?" +"3D-jelenettel kapcsolatos műveletek\n" +"Tudod, hogyan változtathatod meg a nézetet és hogyan választhatod ki az " +"objektumot/tárgyat egérrel és érintőképernyővel a 3D-jelenetben?" #: resources/data/hints.ini: [hint:Cut Tool] msgid "" @@ -8869,9 +8913,9 @@ msgid "" "Did you know that you can cut a model at any angle and position with the " "cutting tool?" msgstr "" -"Cut Tool\n" -"Did you know that you can cut a model at any angle and position with the " -"cutting tool?" +"Vágóeszköz\n" +"Tudtad, hogy a vágóeszközzel bármilyen szögben és pozícióban elvághatsz egy " +"modellt?" #: resources/data/hints.ini: [hint:Fix Model] msgid "" @@ -8879,9 +8923,9 @@ msgid "" "Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " "problems?" msgstr "" -"Fix Model\n" -"Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " -"problems?" +"Modell javítása\n" +"Tudtad, hogy a sérült 3D-modelleket megjavíthatod, amivel elkerülhetsz sok " +"szeletelési problémát?" #: resources/data/hints.ini: [hint:Timelapse] msgid "" @@ -8889,15 +8933,15 @@ msgid "" "Did you know that you can generate a timelapse video during each print?" msgstr "" "Timelapse\n" -"Did you know that you can generate a timelapse video during each print?" +"Tudtad, hogy minden nyomtatáshoz timelapse-videót készíthetsz?" #: resources/data/hints.ini: [hint:Auto-Arrange] msgid "" "Auto-Arrange\n" "Did you know that you can auto-arrange all objects in your project?" msgstr "" -"Auto-Arrange\n" -"Did you know that you can auto-arrange all the objects in your project?" +"Automatikus elrendezés\n" +"Tudtad, hogy automatikusan elrendezheted a projekt összes objektumát?" #: resources/data/hints.ini: [hint:Auto-Orient] msgid "" @@ -8905,9 +8949,9 @@ msgid "" "Did you know that you can rotate objects to an optimal orientation for " "printing by a simple click?" msgstr "" -"Auto-Orient\n" -"Did you know that you can rotate objects to an optimal orientation for " -"printing with a simple click?" +"Automatikus orientáció\n" +"Tudtad, hogy az objektumokat egy kattintással elforgathatod a nyomtatáshoz " +"optimális orientációba?" #: resources/data/hints.ini: [hint:Lay on Face] msgid "" @@ -8916,10 +8960,11 @@ msgid "" "sits on the print bed? Select the \"Place on face\" function or press the " "F key." msgstr "" -"Lay on Face\n" -"Did you know that you can quickly orient a model so that one of its faces " -"sits on the print bed? Select the \"Place on face\" function or press the " -"F key." +"Felületre fektetés\n" +"Tudtad, hogy a modellt egyszerűen elforgathatod úgy, hogy az egyik oldala az " +"asztalra kerüljön? Válaszd a „Felületre fektetés“ opciót, vagy csak nyomd " +"meg az F gombot.\n" +" " #: resources/data/hints.ini: [hint:Object List] msgid "" @@ -8927,9 +8972,9 @@ msgid "" "Did you know that you can view all objects/parts in a list and change " "settings for each object/part?" msgstr "" -"Object List\n" -"Did you know that you can view all objects/parts in a list and change " -"settings for each object/part?" +"Objektumlista\n" +"Tudtad, hogy megtekintheted az összes objektumot/tárgyat egy listában és " +"egyesével módosíthatod a beállításaikat?" #: resources/data/hints.ini: [hint:Simplify Model] msgid "" @@ -8938,10 +8983,10 @@ msgid "" "Simplify mesh feature? Right-click the model and select Simplify model. Read " "more in the documentation." msgstr "" -"Simplify Model\n" -"Did you know that you can reduce the number of triangles in a mesh using the " -"Simplify mesh feature? Right-click the model and select Simplify model. Read " -"more in the documentation." +"Modell egyszerűsítése\n" +"Tudtad, hogy csökkentheted a háromszögek számát a Modell egyszerűsítése " +"opcióval? Kattints jobb gombbal a modellre, és válaszd a Modell " +"egyszerűsítése lehetőséget. További információ a dokumentációban található." #: resources/data/hints.ini: [hint:Slicing Parameter Table] msgid "" @@ -8949,9 +8994,9 @@ msgid "" "Did you know that you can view all objects/parts on a table and change " "settings for each object/part?" msgstr "" -"Slicing Parameter Table\n" -"Did you know that you can view all objects/parts on a table and change " -"settings for each object/part?" +"Szeletelési paramétertáblázat\n" +"Tudtad, hogy megtekintheted az összes objektumot/tárgyat egy listában és " +"egyesével módosíthatod a beállításaikat?" #: resources/data/hints.ini: [hint:Split to Objects/Parts] msgid "" @@ -8959,9 +9004,9 @@ msgid "" "Did you know that you can split a big object into small ones for easy " "colorizing or printing?" msgstr "" -"Split to Objects/Parts\n" -"Did you know that you can split a big object into small ones for easy " -"colorizing or printing?" +"Objektumokra/tárgyakra osztás\n" +"Tudtad, hogy egy nagy objektumot kisebbekre oszthatsz a könnyebb színezés " +"vagy nyomtatás érdekében?" #: resources/data/hints.ini: [hint:Subtract a Part] msgid "" @@ -8970,10 +9015,11 @@ msgid "" "part modifier? That way you can, for example, create easily resizable holes " "directly in Bambu Studio. Read more in the documentation." msgstr "" -"Subtract a Part\n" -"Did you know that you can subtract one mesh from another using the Negative " -"part modifier? That way you can, for example, create easily resizable holes " -"directly in Bambu Studio. Read more in the documentation." +"Tárgy kivonása\n" +"Tudtad, hogy a negatív módosító segítségével kivonhatsz egy tárgyat a " +"másikból? Így például könnyen átméretezhető furatokat hozhatsz létre " +"közvetlenül a Bambu Studióban. További információ a dokumentációban " +"található." #: resources/data/hints.ini: [hint:STEP] msgid "" @@ -8984,10 +9030,10 @@ msgid "" "lower resolution STL. Give it a try!" msgstr "" "STEP\n" -"Did you know that you can improve your print quality by slicing a STEP file " -"instead of an STL?\n" -"Bambu Studio supports slicing STEP files, providing smoother results than a " -"lower resolution STL. Give it a try!" +"Tudtad, hogy javíthatod a nyomtatási minőséget azáltal, hogy STL helyett " +"STEP fájlt használsz?\n" +"A Bambu Studio képes a STEP fájlokat közvetlenül szeletelni, ami simább " +"eredményt biztosít, mint egy alacsonyabb felbontású STL fájl. Próbáld ki!" #: resources/data/hints.ini: [hint:Z seam location] msgid "" @@ -8996,10 +9042,10 @@ msgid "" "paint it on your print, to have it in a less visible location? This improves " "the overall look of your model. Check it out!" msgstr "" -"Z seam location\n" -"Did you know that you can customize the location of the Z seam, and even " -"paint it on your print, to have it in a less visible location? This improves " -"the overall look of your model. Check it out!" +"Z varrat helye\n" +"Tudtad, hogy testreszabhatod a Z varrat helyét, és akár rá is festheted a " +"nyomatra, hogy kevésbé látható helyre kerüljön? Ezzel javíthatod a modelled " +"megjelenését. Próbáld ki!" #: resources/data/hints.ini: [hint:Fine-tuning for flow rate] msgid "" @@ -9008,10 +9054,10 @@ msgid "" "prints? Depending on the material, you can improve the overall finish of the " "printed model by doing some fine-tuning." msgstr "" -"Fine-tuning for flow rate\n" -"Did you know that flow rate can be fine-tuned for even better-looking " -"prints? Depending on the material, you can improve the overall finish of the " -"printed model by doing some fine-tuning." +"Anyagáramlás finomhangolása\n" +"Tudtad, hogy az anyagáramlás finomhangolható a még szebb nyomatok érdekében? " +"Az anyagtól függően némi finomhangolással jelentősen javíthatsz a nyomtatott " +"modell felületeinek megjelenésén." #: resources/data/hints.ini: [hint:Split your prints into plates] msgid "" @@ -9020,10 +9066,9 @@ msgid "" "individual plates ready to print? This will simplify the process of keeping " "track of all the parts." msgstr "" -"Split your prints into plates\n" -"Did you know that you can split a model that has a lot of parts into " -"individual plates ready to print? This will simplify the process of keeping " -"track of all the parts." +"Oszd fel a nyomatokat több tálcára\n" +"Tudtad, hogy a sok részből álló modellt nyomtatásra kész tálcákra oszthatod? " +"Így egyszerűbben nyomon követheted a nyomtatásra váró tárgyakat." #: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer #: Height] @@ -9032,9 +9077,9 @@ msgid "" "Did you know that you can print a model even faster, by using the Adaptive " "Layer Height option? Check it out!" msgstr "" -"Speed up your print with Adaptive Layer Height\n" -"Did you know that you can print a model even faster by using the Adaptive " -"Layer Height option? Check it out!" +"Gyorsítsd fel a nyomtatást az adaptív rétegmagassággal\n" +"Tudtad, hogy a nyomtatást tovább gyorsíthatod adaptív rétegmagasság " +"használatával? Próbáld ki!" #: resources/data/hints.ini: [hint:Support painting] msgid "" @@ -9043,10 +9088,9 @@ msgid "" "makes it easy to place the support material only on the sections of the " "model that actually need it." msgstr "" -"Support painting\n" -"Did you know that you can paint the location of your supports? This feature " -"makes it easy to place the support material only on the sections of the " -"model that actually need it." +"Támaszok festése\n" +"Tudtad, hogy festéssel is kijelölheted a támaszok helyét? Ezzel az opcióval " +"elérheted, hogy csak oda kerüljön támasz, ahol valóban szükség van rá." #: resources/data/hints.ini: [hint:Different types of supports] msgid "" @@ -9055,10 +9099,10 @@ msgid "" "supports work great for organic models, while saving filament and improving " "print speed. Check them out!" msgstr "" -"Different types of supports\n" -"Did you know that you can choose from multiple types of supports? Tree " -"supports work great for organic models while saving filament and improving " -"print speed. Check them out!" +"Különböző típusú támaszok\n" +"Tudtad, hogy többféle támasz közül választhatsz? A fatámaszok remekül " +"működnek az organikus modelleknél, kevesebb filamentet igényelnek és " +"elősegítik a gyorsabb nyomtatást. Próbáld ki!" #: resources/data/hints.ini: [hint:Printing Silk Filament] msgid "" @@ -9067,10 +9111,10 @@ msgid "" "successfully? Higher temperature and lower speed are always recommended for " "the best results." msgstr "" -"Printing Silk Filament\n" -"Did you know that Silk filament needs special consideration to print " -"successfully? A higher temperature and lower speed are always recommended " -"for the best results." +"Nyomtatás selyemhatású filamenttel\n" +"Tudtad, hogy a selyemhatású filamentek több figyelmet igényelnek a sikeres " +"nyomtatás érdekében? A legjobb eredmény érdekében mindig használj magasabb " +"hőmérsékletet és alacsonyabb sebességet." #: resources/data/hints.ini: [hint:Brim for better adhesion] msgid "" @@ -9078,9 +9122,9 @@ msgid "" "Did you know that when printing models have a small contact interface with " "the printing surface, it's recommended to use a brim?" msgstr "" -"Brim for better adhesion\n" -"Did you know that when printed models have a small contact interface with " -"the printing surface, it's recommended to use a brim?" +"Perem a jobb tapadás érdekében\n" +"Tudtad, hogy a ha a nyomtatott modell csak kis felületen érintkezik az " +"asztallal, akkor ajánlott peremet használni?" #: resources/data/hints.ini: [hint:Set parameters for multiple objects] msgid "" @@ -9088,17 +9132,18 @@ msgid "" "Did you know that you can set slicing parameters for all selected objects at " "one time?" msgstr "" -"Set parameters for multiple objects\n" -"Did you know that you can set slicing parameters for all selected objects at " -"once?" +"Paraméterek beállítása több objektumhoz\n" +"Tudtad, hogy egyszerre is beállíthatod a szeletelési paramétereket az összes " +"kijelölt objektumhoz?" #: resources/data/hints.ini: [hint:Stack objects] msgid "" "Stack objects\n" "Did you know that you can stack objects as a whole one?" msgstr "" -"Stack objects\n" -"Did you know that you can stack objects as a whole one?" +"Objektumok egymásra helyezése\n" +"Tudtad, hogy több objektumot is egymásra rakhatsz, amit aztán egyben " +"kinyomtathatsz?" #: resources/data/hints.ini: [hint:Flush into support/objects/infill] msgid "" @@ -9106,9 +9151,9 @@ msgid "" "Did you know that you can save the wasted filament by flushing them into " "support/objects/infill during filament change?" msgstr "" -"Flush into support/objects/infill\n" -"Did you know that you can reduce wasted filament by flushing it into support/" -"objects/infill during filament changes?" +"Öblítés támaszokba/objektumokba/kitöltésbe\n" +"Tudtad, hogy csökkentheted a felhasznált filament mennyiségét, ha a " +"filamentcsere során az öblítést a támaszba/objektumba/kitöltésbe állítod?" #: resources/data/hints.ini: [hint:Improve strength] msgid "" @@ -9116,32 +9161,9 @@ msgid "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" msgstr "" -"Improve strength\n" -"Did you know that you can use more wall loops and higher sparse infill " -"density to improve the strength of the model?" - -#~ msgid "Failed uploading print file. Please enter ip address again." -#~ msgstr "Failed uploading print file. Please enter IP address again." - -#~ msgid "\\u2103" -#~ msgstr "\\u2103" - -#~ msgid "mm\\u00B3" -#~ msgstr "mm\\u00B3" - -#~ msgid "Layers: N/A" -#~ msgstr "Layers: N/A" - -#, c-format, boost-format -#~ msgid "Layers: %s" -#~ msgstr "Layers: %s" - -#, c-format, boost-format -#~ msgid "Layers: %d/%d" -#~ msgstr "Layers: %d/%d" - -#~ msgid "AMS settings are not supported for external spool" -#~ msgstr "Current AMS settings do not support using an external spool." +"Szilárdság javítása\n" +"Tudtad, hogy több fal vagy nagyobb kitöltés használatával javíthatod a " +"modell szilárdságát?" #~ msgid "" #~ "\n" @@ -9160,16 +9182,20 @@ msgstr "" #~ "ütközések." #~ msgid "&Edit" -#~ msgstr "&Edit" +#~ msgstr "&Szerkesztés" #~ msgid "0%" #~ msgstr "0%" #~ msgid "AMSMaterialsSetting" -#~ msgstr "AMS Materials Setting" +#~ msgstr "AMS anyagok beállítása" #~ msgid "AMS auto switch filament" -#~ msgstr "AMS auto switch filament" +#~ msgstr "AMS automatikus filamentváltás" + +#~ msgid "AMS settings are not supported for external spool" +#~ msgstr "" +#~ "A jelenlegi AMS-beállítások nem támogatják a külső tekercs használatát." #~ msgid "AWS PRE host" #~ msgstr "AWS PRE host" @@ -9178,13 +9204,13 @@ msgstr "" #~ msgstr "AWS host" #~ msgid "Actual Volume = Flushing Volume * Multiplier" -#~ msgstr "Actual Volume = Flushing Volume * Multiplier" +#~ msgstr "Tényleges térfogat = öblítési térfogat * szorzó" #~ msgid "Adaptive layer height" #~ msgstr "Adaptív rétegmagasság" #~ msgid "Add Custom Printer" -#~ msgstr "Add Custom Printer" +#~ msgstr "Egyedi nyomtató hozzáadása" #~ msgid "" #~ "An object is layed over the boundary of plate.\n" @@ -9199,18 +9225,19 @@ msgstr "" #~ "This may cause decline in the quality of overhang surface when print " #~ "fastly" #~ msgstr "" -#~ "The Arachne engine only works when overhang slowdown is disabled.\n" -#~ "This may cause decline in the quality of overhang surface when printing " -#~ "quickly." +#~ "Az Arachne engine csak akkor működik, ha a túlnyúlásoknál való lassítás " +#~ "ki van kapcsolva.\n" +#~ "Ez a túlnyúló felületek minőségének romlását okozhatja gyors nyomtatáskor." #~ msgid "" #~ "Arachne engine only works when overhang slowing down is disabled.\n" #~ "This may cause decline in the quality of overhang surface when print " #~ "fastly\n" #~ msgstr "" -#~ "The Arachne engine only works when overhang slowdown is disabled.\n" -#~ "This may cause decline in the quality of overhang surfaces when printing " -#~ "quickly.\n" +#~ "Az Arachne engine csak akkor működik, ha a túlnyúlásoknál való lassítás " +#~ "ki van kapcsolva.\n" +#~ "Ez a túlnyúló felületek minőségének romlását okozhatja gyors " +#~ "nyomtatáskor.\n" #~ msgid "Auto arrange" #~ msgstr "Automatikus elrendezés" @@ -9243,45 +9270,44 @@ msgstr "" #~ "printing multi colors with AMS. The area is expressed as polygon by " #~ "points in following format: \"XxY, XxY, ...\"" #~ msgstr "" -#~ "Bed excludes area that can't used as printable area in the X-Y plane. For " -#~ "example, the bottom left area which is used to cut filament in X1 when " -#~ "printing multi-color with an AMS. The area is expressed as polygon by " -#~ "points in following format: \"XxY, XxY, ...\"" +#~ "Az asztal nem tartalmazza azt a területet, amely nem használható " +#~ "nyomtatásra az X-Y síkban. Ilyen például a bal alsó terület, ahol a " +#~ "nyomtatófej elvágja a filamentet többszínű nyomtatásnál. A terület " +#~ "sokszögként van meghatározva a következő formátumban: XxY, XxY, ..." #~ msgid "" #~ "Bed temperature is higher than vitrification temperature of this " #~ "filament.\n" #~ "This may cause nozzle blocked and printing failure" #~ msgstr "" -#~ "Az asztalhőmérséklet magasabb, mint ennek a filamentnek az üvegesedési " -#~ "hőmérséklete.\n" +#~ "Az asztalhőmérséklet magasabb, mint a filament üvegesedési hőmérséklete.\n" #~ "Ez a fúvóka eltömődését és nyomtatási hibákat okozhat" #~ msgid "" #~ "Calibration completed. Please select the factors according to the left " #~ "figure and fill them in the input boxes." #~ msgstr "" -#~ "Calibration completed. Please select the factors according to the left " -#~ "figure and fill them in the input boxes." +#~ "A kalibrálás befejeződött. Kérjük, válaszd ki a tényezőket a bal oldali " +#~ "ábra szerint, és add meg őket a beviteli mezőkben." #~ msgid "Can't connect to the printer" -#~ msgstr "Can't connect to the printer" +#~ msgstr "Nem lehet csatlakozni a nyomtatóhoz" #~ msgid "" #~ "Cannot detect the LAN IP address of %s. Are %s and Bambu Studio in the " #~ "same LAN?" #~ msgstr "" -#~ "Cannot detect the LAN IP address of %s. Are %s and Bambu Studio in the " -#~ "same LAN?" +#~ "Nem sikerült észlelni %s LAN IP-címét. Biztos, hogy %s és a Bambu Studio " +#~ "ugyanazon a hálózaton vannak?" #~ msgid "Choose one or more files (3mf/step/stl/obj/amf):" #~ msgstr "Válassz ki egy vagy több fájlt (3mf/step/stl/obj/amf):" #~ msgid "Choose save directory" -#~ msgstr "Choose save directory" +#~ msgstr "Válaszd ki a mappát a mentéshez" #~ msgid "Clean" -#~ msgstr "Clear" +#~ msgstr "Törlés" #~ msgid "Clear all" #~ msgstr "Összes törlése" @@ -9298,7 +9324,7 @@ msgstr "" #~ msgstr "Kattints a ceruza ikonra a filament szerkesztéséhez." #~ msgid "Clipping of view" -#~ msgstr "Clipping of view" +#~ msgstr "Metszetnézet" #~ msgid "Color Print" #~ msgstr "Színes nyomtatás" @@ -9322,8 +9348,9 @@ msgstr "" #~ "Desiccant status lower than two bars indicates that desiccant can be " #~ "inactive. Please change the desiccant.(Higher the better)" #~ msgstr "" -#~ "Desiccant status lower than two bars indicates that desiccant can be " -#~ "inactive. Please change the desiccant. (the higher, the better)" +#~ "A két sávnál alacsonyabb páramegkötő-állapot azt jelzi, hogy a " +#~ "páramegkötő nem működik. Cseréld ki a páramegkötő tasakokat. (minél " +#~ "magasabb, annál jobb)" #~ msgid "Designer" #~ msgstr "Tervező" @@ -9336,9 +9363,9 @@ msgstr "" #~ "Yes - Enable arachne and disable overhang slowing down\n" #~ "No - Give up using arachne this time" #~ msgstr "" -#~ "Disable overhang slowdown automatically? \n" -#~ "Yes - Enable Arachne and disable overhang slowing down\n" -#~ "No - Don't use Arachne for this print" +#~ "Kikapcsolod a túlnyúlásoknál való lassítást?\n" +#~ "Igen - Engedélyezd az Arachnét és kapcsold ki a lassítást\n" +#~ "Nem - Ne használd az Arachnét ennél a nyomtatásnál" #~ msgid "Display printable box" #~ msgstr "Nyomtatható doboz megjelenítése" @@ -9381,9 +9408,9 @@ msgstr "" #~ msgstr "" #~ "Szeretnéd szinkronizálni személyes adataidat a Bambu Cloudból?\n" #~ "Ezek az adatok a következő információkat tartalmazzák:\n" -#~ "1. Folyamat beállítások\n" -#~ "2. Filament beállítások\n" -#~ "3. Nyomtató beállítások\n" +#~ "1. Folyamatbeállítások\n" +#~ "2. Filamentbeállítások\n" +#~ "3. Nyomtatóbeállítások\n" #~ msgid "" #~ "Don't retract when the travel is in infill area absolutely. That means " @@ -9393,7 +9420,7 @@ msgstr "" #~ "területen belül történik." #~ msgid "Downloading Bambu Network plug-in" -#~ msgstr "Downloading Bambu Network plug-in" +#~ msgstr "Bambu Network bővítmény letöltése" #~ msgid "" #~ "Enabling this option means the height of every layer except the first " @@ -9412,7 +9439,7 @@ msgstr "" #~ msgstr "Add meg a keresési kifejezést" #~ msgid "Entering Seam painting" -#~ msgstr "Entering seam painting" +#~ msgstr "Belépés varratfestő módba" #~ msgid "Erase painting" #~ msgstr "Festés törlése" @@ -9442,14 +9469,19 @@ msgstr "" #~ msgstr "Extruder pozíció" #~ msgid "Failed" -#~ msgstr "Failed" +#~ msgstr "Sikertelen" #~ msgid "" #~ "Failed to connect to the printer through LAN. Please enter the correct " #~ "printer IP address and access code." #~ msgstr "" -#~ "Failed to connect to the printer through LAN. Please enter the correct " -#~ "printer IP address and access code." +#~ "Nem sikerült csatlakozni a nyomtatóhoz LAN-on keresztül. Kérjük, add meg " +#~ "a nyomtató helyes IP-címét és hozzáférési kódját." + +#~ msgid "Failed uploading print file. Please enter ip address again." +#~ msgstr "" +#~ "Nem sikerült feltölteni a nyomtatási fájlt. Kérjük, add meg újra az IP-" +#~ "címet." #~ msgid "Filament 1" #~ msgstr "Filament 1" @@ -9461,36 +9493,37 @@ msgstr "" #~ "Filament index %s does not match the filament in AMS slot %s. Please " #~ "update the printer firmware to support AMS slot assignment." #~ msgstr "" -#~ "Filament index %s does not match the filament in AMS slot %s. Please " -#~ "update the printer firmware to support AMS slot assignment." +#~ "A(z) %s filamentindex nem egyezik a(z) %s AMS-helyen találhatóval. " +#~ "Kérjük, frissítsd a nyomtató szoftverét az AMS-kiosztás támogatásához." #~ msgid "" #~ "Filament index %s exceeds the number of AMS slots. Please update the " #~ "printer firmware to support AMS slot assignment." #~ msgstr "" -#~ "Filament index %s exceeds the number of AMS slots. Please update the " -#~ "printer firmware to support AMS slot assignment." +#~ "A(z) %s filamentindex több, mint a rendelkezésre álló AMS férőhelyek " +#~ "száma. Kérjük, frissítsd a nyomtató szoftverét az AMS-kiosztás " +#~ "támogatásához." #~ msgid "" #~ "Filament index does not match the filament in AMS slot. Please update the " #~ "printer firmware to support AMS slot assignment." #~ msgstr "" -#~ "Filament index does not match the filament in AMS slot. Please update the " -#~ "printer firmware to support AMS slot assignment." +#~ "A filamentindex nem egyezik az AMS-helyen találhatóval. Kérjük, frissítsd " +#~ "a nyomtató szoftverét az AMS-kiosztás támogatásához." #~ msgid "" #~ "Filament index exceeds the number of AMS slots. Please update the printer " #~ "firmware to support AMS slot assignment." #~ msgstr "" -#~ "Filament index exceeds the number of AMS slots. Please update the printer " -#~ "firmware to support AMS slot assignment." +#~ "A filamentindex több, mint a rendelkezésre álló AMS férőhelyek száma. " +#~ "Kérjük, frissítsd a nyomtató szoftverét az AMS-kiosztás támogatásához." #~ msgid "" #~ "Filament to print support and raft. \"Default\" means no specific " #~ "filament for support and current filament is used" #~ msgstr "" -#~ "Filament to print supports and rafts. \"Default\" means no specific " -#~ "filament for support and current filament is used" +#~ "A támasz és tutaj nyomtatásához használt filament. Az „Alapértelmezett“ " +#~ "beállítás választásakor a jelenleg használt filament kerül felhasználásra." #~ msgid "" #~ "Filament to print support and skirt. 0 means no specific filament for " @@ -9545,14 +9578,15 @@ msgstr "" #~ msgstr "Töredékszűrő" #~ msgid "G-code" -#~ msgstr "G-code" +#~ msgstr "G-kód" #~ msgid "" #~ "Green represents that AMS humidity is normal, orange and red represent " #~ "that humidity is too high.(Lower the better)" #~ msgstr "" -#~ "Green represents that AMS humidity is normal, and orange and red " -#~ "represent that humidity is too high. (the lower, the better)" +#~ "A zöld azt jelenti, hogy az AMS páratartalma normális, a narancs és a " +#~ "piros pedig azt jelenti, hogy a páratartalom túl magas. (minél " +#~ "alacsonyabb, annál jobb)" #~ msgid "" #~ "Heat the nozzle to target \n" @@ -9583,12 +9617,12 @@ msgstr "" #~ "melt filament may leak from the nozzle during the process of taking a " #~ "snapshot, prime tower is required for nozzle priming." #~ msgstr "" -#~ "If enabled, a timelapse video will be generated for each print. After " -#~ "each layer is printed, the toolhead will move to the excess chute, and " -#~ "then a snapshot is taken with the chamber camera. All of these snapshots " -#~ "are composed into a timelapse video when printing completes. Since the " -#~ "melted filament may leak from the nozzle during the process of taking a " -#~ "snapshot, a prime tower is required for nozzle priming." +#~ "Ha engedélyezve van, minden nyomtatáshoz készül egy timelapse-videó. Az " +#~ "egyes rétegek kinyomtatása után a nyomtatófej a kidobónyíláshoz mozog, " +#~ "majd a beépített kamera egy fényképet készít. A nyomtatás befejeződése " +#~ "után aztán ezeket a fényképeket a szoftver egy videóvá fűzi össze. Mivel " +#~ "a kép készítése során szivároghat valamennyi olvadt filament a fúvókából, " +#~ "egy törlőtoronyra van szükség a fúvóka megtisztításához." #~ msgid "Import 3MF/STL/STEP/OBJ/AMF" #~ msgstr "3MF/STL/STEP/OBJ/AMF importálása" @@ -9606,7 +9640,8 @@ msgstr "" #~ msgstr "Az inicializálás sikertelen [%d]!" #~ msgid "Initialize failed (Not supported without remote video tunnel)!" -#~ msgstr "Initialization failed (Not supported without remote video tunnel)!" +#~ msgstr "" +#~ "Sikertelen inicializálás (nem támogatott távoli videóelérés nélkül)!" #~ msgid "Inner wall speed" #~ msgstr "Belső fal sebessége" @@ -9615,13 +9650,14 @@ msgstr "" #~ "It seems object %s has completely floating regions. Please re-orient the " #~ "object or enable support generation." #~ msgstr "" -#~ "It seems object %s has completely floating regions. Please re-orient the " -#~ "object or enable support generation." +#~ "Úgy tűnik, hogy a(z) %s objektum egyes részei a levegőben vannak. Kérjük, " +#~ "változtasd meg az orientációját vagy engedélyezd a támasz generálását." #~ msgid "" #~ "It seems object %s has large overhangs. Please enable support generation." #~ msgstr "" -#~ "It seems object %s has large overhangs. Please enable support generation." +#~ "Úgy tűnik, hogy a(z) %s objektum nagy túlnyúlásokkal rendelkezik. Kérjük, " +#~ "engedélyezd a támasz generálását." #~ msgid "" #~ "It seems object %s needs support to print. Please enable support " @@ -9637,16 +9673,25 @@ msgstr "" #~ msgstr "Felső rész megtartása" #~ msgid "Layer Time(log): " -#~ msgstr "Layer Time(log): " +#~ msgstr "Rétegidő (log): " #~ msgid "Layer Time (log)" -#~ msgstr "Layer Time (log)" +#~ msgstr "Rétegidő (log)" + +#~ msgid "Layers: %d/%d" +#~ msgstr "Réteg:​•%d​/%d" + +#~ msgid "Layers: %s" +#~ msgstr "Réteg:​•​%s" + +#~ msgid "Layers: N/A" +#~ msgstr "Réteg: N/A" #~ msgid "Layers and Perimeters" -#~ msgstr "Layers and Perimeters" +#~ msgstr "Rétegek és peremek" #~ msgid "Leaving Seam painting" -#~ msgstr "Leaving Seam Painting" +#~ msgstr "Kilépés varratfestő módból" #~ msgid "Line type" #~ msgstr "Vonal típusa" @@ -9655,7 +9700,7 @@ msgstr "" #~ msgstr "Felhasználói beállítások betöltése..." #~ msgid "Management" -#~ msgstr "Management" +#~ msgstr "Kezelés" #~ msgid "Max travel detour distance" #~ msgstr "Max. kerülőút távolság" @@ -9668,7 +9713,7 @@ msgstr "" #~ "távolság nagyobb ennél az értéknél, akkor nem lesz kitérő." #~ msgid "Modify" -#~ msgstr "Modify" +#~ msgstr "Módosítás" #~ msgid "Module" #~ msgstr "Modul" @@ -9680,15 +9725,14 @@ msgstr "" #~ msgstr "Felvétel monitorozása" #~ msgid "NO AMS" -#~ msgstr "NO AMS" +#~ msgstr "NINCS AMS" #~ msgid "Not supported." -#~ msgstr "Not supported." +#~ msgstr "Nem támogatott." #~ msgid "" #~ "Note : The location of IP and access code on the machine is as follows :" -#~ msgstr "" -#~ "Note: The location of IP and access code on the machine is as follows:" +#~ msgstr "Megjegyzés: Az IP-t és a hozzáférési kódot itt találod:" #~ msgid "Open &PrusaSlicer" #~ msgstr "PrusaSlicer megnyitása" @@ -9700,10 +9744,10 @@ msgstr "" #~ msgstr "Kimeneti fájl" #~ msgid "P1P General Settings - WLAN in the sidebar of the main screen" -#~ msgstr "P1P General Settings - WLAN in the sidebar of the main screen" +#~ msgstr "P1P General Settings - WLAN a főképernyő bal oldalán" #~ msgid "Paint-on seam editing" -#~ msgstr "Paint-on seam editing" +#~ msgstr "Festett varrat szerkesztése" #~ msgid "Part Cooling" #~ msgstr "Tárgyhűtés" @@ -9721,26 +9765,26 @@ msgstr "" #~ msgstr "Szerkesztés objektumonként" #~ msgid "Plate %d: %s does not support filament %s\n" -#~ msgstr "Plate %d: %s does not support filament %s\n" +#~ msgstr "%d tálca: %s nem használható %s filamenttel.\n" #~ msgid "Plate %d: %s does not support filament %s.\n" #~ msgstr "%d. tálca: %s nem használható %s filamenttel.\n" #~ msgid "Plate %d: %s does not support filament %s (%s)." -#~ msgstr "Plate %d: %s does not support filament %s (%s)." +#~ msgstr "%d. tálca: %s nem használható %s (%s) filamenttel." #~ msgid "Plate %d: %s does not support filament %s (%s).\n" -#~ msgstr "Plate %d: %s does not support filament %s (%s).\n" +#~ msgstr "%d tálca: %s nem támogatja a(z) %s (%s) filamentet.\n" #~ msgid "Please Fill Task Report." -#~ msgstr "Please fill task report." +#~ msgstr "Kérjük, töltsd ki a feladatjelentést." #~ msgid "" #~ "Please check the following infomation and click Confirm to continue " #~ "sending print:\n" #~ msgstr "" -#~ "Please check the following infomation and click Confirm to continue " -#~ "sending print:\n" +#~ "Kérjük, ellenőrizd a következő adatokat, majd kattints a Megerősítés " +#~ "gombra a nyomtatás folytatásához:\n" #~ msgid "Please fill report first." #~ msgstr "Kérjük, először töltsd ki a riportot." @@ -9764,20 +9808,22 @@ msgstr "" #~ msgid "" #~ "Prime tower is required by timelapse. Do you want to enable both of them?" #~ msgstr "" -#~ "Prime tower is required by timelapse. Do you want to enable both of them?" +#~ "A törlőtoronyra szükség van a timelapse miatt. Szeretnéd engedélyezni " +#~ "mindkettőt?" #~ msgid "" #~ "Prime tower is required by timeplase. Are you sure you want to disable " #~ "both of them?" #~ msgstr "" -#~ "Prime tower is required by timeplase. Are you sure you want to disable " -#~ "both of them?" +#~ "A törlőtoronyra szükség van a timelapse miatt. Biztos, hogy mindkettőt " +#~ "kikapcsolod?" #~ msgid "Printer Selection" #~ msgstr "Nyomtató kiválasztása" #~ msgid "Printer firmware does not support material = >ams slot mapping." -#~ msgstr "Printer firmware does not support material = > AMS slot mapping." +#~ msgstr "" +#~ "A nyomtató firmware-je nem támogatja az anyagot = > AMS férőhelykiosztás" #~ msgid "" #~ "Purging after filament change will be done inside objects' infills. This " @@ -9841,7 +9887,7 @@ msgstr "" #~ msgstr "Konfiguráció mentése mint:" #~ msgid "Select Bed Type" -#~ msgstr "Select Bed Type" +#~ msgstr "Válaszd ki a tálca típusát" #~ msgid "Sending" #~ msgstr "Küldés" @@ -9856,7 +9902,7 @@ msgstr "" #~ msgstr "Shift + Egérgörgő" #~ msgid "Show Log" -#~ msgstr "Show Log" +#~ msgstr "Napló megjelenítése" #~ msgid "Show Model Mesh(TODO)" #~ msgstr "Modellháló megjelenítése (TODO)" @@ -9868,10 +9914,10 @@ msgstr "" #~ msgstr "Nyomtatható doboz megjelenítése(TODO)" #~ msgid "Spaghetti Detection" -#~ msgstr "Spaghetti Detection" +#~ msgstr "Spagetti felismerése" #~ msgid "Spaghetti and Excess Chute Pileup Detection" -#~ msgstr "Spaghetti and Excess Chute Pileup Detection" +#~ msgstr "Spagetti és kidobónyílás eltömődésének észlelése" #~ msgid "Spiral mode" #~ msgstr "Spirál/Váza mód" @@ -9890,18 +9936,19 @@ msgstr "" #~ "shell layers is 0, sparse infill density is 0 and timelapse type is " #~ "traditional" #~ msgstr "" -#~ "Spiral mode only works when wall loops is 1, support is disabled, top " -#~ "shell layers is 0, sparse infill density is 0 and timelapse type is " -#~ "traditional" +#~ "A spirál mód csak akkor működik, ha a falak száma 1, a támaszok ki vannak " +#~ "kapcsolva, a felső rétegek száma 0 és a hiányos kitöltés sűrűsége 0 és a " +#~ "timelapse hagyományosra van állítva" #~ msgid "Start" -#~ msgstr "Start" +#~ msgstr "Indítás" #~ msgid "Stop printing when Spaghetti or Excess Chute Pileup is detected" -#~ msgstr "Stop printing when Spaghetti or Excess Chute Pileup is detected" +#~ msgstr "" +#~ "Nyomtatás leállítása, ha spagettit vagy kidobónyílás eltömődést észlelt" #~ msgid "Stop printing when spaghetti detected" -#~ msgstr "Stop printing when spaghetti is detected" +#~ msgstr "Állítsa le a nyomtatást, ha spagettit észlel" #~ msgid "Successfully sent.Will automatically jump to the device page in %s s" #~ msgstr "" @@ -9914,10 +9961,10 @@ msgstr "" #~ "Sikeresen elküldve. Az eszköz oldala automatikusan megjelenik %s mp belül" #~ msgid "Suggestion: Actual Volume in range [%d, %d]" -#~ msgstr "Suggestion: Actual Volume in range [%d, %d]" +#~ msgstr "Javaslat: Aktuális térfogat a [%d, %d] tartományban" #~ msgid "Support base" -#~ msgstr "Support base" +#~ msgstr "Támasz alapja" #~ msgid "" #~ "Support layer uses layer height independent with object layer. This is to " @@ -9933,17 +9980,17 @@ msgstr "" #~ "Support layer uses layer height independent with object layer. This is to " #~ "support customizing z-gap and save print time." #~ msgstr "" -#~ "Support layer uses layer height independent with object layer. This is to " -#~ "support customizing z-gap and save print time." +#~ "A támasz rétegmagassága független a nyomtatott tárgy rétegmagasságától. " +#~ "Így jobban testreszabható a Z-távolság és lerövidíthető a nyomtatás ideje." #~ msgid "" #~ "Switch to rectilinear pattern?\n" #~ "Yes - switch to rectilinear pattern automaticlly\n" #~ "No - reset density to default non 100% value automaticlly\n" #~ msgstr "" -#~ "Switch to rectilinear pattern?\n" -#~ "Yes - switch to rectilinear pattern automaticlly\n" -#~ "No - reset density to default non 100% value automaticlly\n" +#~ "Átváltasz vonalak mintázatra?\n" +#~ "Igen - automatikus váltás vonalak mintázatra\n" +#~ "Nem - sűrűség visszaállítása az alapértelmezett, nem 100%-os értékre\n" #~ msgid "" #~ "Switch to zig-zag pattern?\n" @@ -9959,10 +10006,10 @@ msgstr "" #~ msgstr "Felhőkörnyezet váltása, kérjük, jelentkezz be újra!" #~ msgid "Sync material list from AMS" -#~ msgstr "Sync material list from AMS" +#~ msgstr "Anyaglista szinkronizálása az AMS-ből" #~ msgid "The %s filament is too soft to be used with the AMS" -#~ msgstr "The %s filament is too soft to be used with the AMS" +#~ msgstr "A(z) %s filament túl puha az AMS-sel való használatra" #~ msgid "" #~ "The 3mf's version %s is newer than %s's version %s, Found following keys " @@ -9975,11 +10022,13 @@ msgstr "" #~ "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade " #~ "your software.\n" #~ msgstr "" -#~ "The 3mf's version %s is newer than %s's version %s; it is suggested to " -#~ "update your software.\n" +#~ "A 3mf fájl %s verziója újabb, mint a(z) %s verziója %s, javasolt a " +#~ "szoftver frissítése.\n" #~ msgid "The 3mf is not from Bambu lab, load geometry data only." -#~ msgstr "The 3mf is not from Bambu lab, loading geometry data only." +#~ msgstr "" +#~ "A 3mf nem a Bambu Labtól származik, csak a geometriai adatok kerülnek " +#~ "betöltésre." #~ msgid "The Config is not compatible and can not be loaded." #~ msgstr "A konfiguráció nem kompatibilis és nem tölthető be!" @@ -9988,8 +10037,8 @@ msgstr "" #~ "The P1P printer does not support smooth timelapse, use traditional " #~ "timelapse instead." #~ msgstr "" -#~ "The P1P printer does not support smooth timelapse, please use traditional " -#~ "timelapse instead." +#~ "A P1P nyomtató nem támogatja a sima timelapse funkciót, használd helyette " +#~ "a hagyományos timelapse lehetőséget." #~ msgid "" #~ "The firmware versions of printer and AMS are too low.Please update to the " @@ -10002,8 +10051,8 @@ msgstr "" #~ "The flush volume is less than the minimum value and will be automatically " #~ "set to the minimum value." #~ msgstr "" -#~ "The flush volume is less than the minimum value and will be automatically " -#~ "set to the minimum value." +#~ "Az öblítési mennyiség kisebb, mint a minimális érték, ezért a rendszer " +#~ "automatikusan a minimális értékre állítja be." #~ msgid "" #~ "The model has overlapping or self-intersecting facets. I tried to repair " @@ -10019,9 +10068,9 @@ msgstr "" #~ "currently selected physical printer. It is recommend to re-slice by " #~ "selecting the same printer type.\n" #~ msgstr "" -#~ "The printer type used to generate G-code is not the same type as the " -#~ "currently selected physical printer. It is recommend to re-slice by " -#~ "selecting the same printer type.\n" +#~ "A G-kód generálásához használt nyomtatótípus nem azonos a jelenleg " +#~ "kiválasztott fizikai nyomtatóval. Javasoljuk, hogy szeleteld újra a " +#~ "megfelelő nyomtatótípust kiválasztva.\n" #~ msgid "" #~ "This controls brim position including outer side of models, inner side of " @@ -10070,7 +10119,7 @@ msgstr "" #~ msgstr "Fa támasz kitöltéssel" #~ msgid "Unable to connect printer" -#~ msgstr "Unable to connect printer" +#~ msgstr "Nem lehet csatlakozni a nyomtatóhoz" #~ msgid "Unable to create zip file" #~ msgstr "Nem sikerült létrehozni a zip fájlt" @@ -10090,10 +10139,10 @@ msgstr "" #~ "by right-click the empty position of build plate and choose \"Add " #~ "Primitive\"->\"Timelapse Wipe Tower\".\n" #~ msgstr "" -#~ "When recording timelapse without toolhead, it is recommended to add a " -#~ "\"Timelapse Wipe Tower\" \n" -#~ "by right-click the empty position of build plate and choose \"Add " -#~ "Primitive\"->\"Timelapse Wipe Tower\".\n" +#~ "Ha a nyomtatófej nélküli timelapse engedélyezve van, javasoljuk, hogy " +#~ "helyezz el a tálcán egy „Timelapse törlőtornyot“. Ehhez kattints jobb " +#~ "gombbal a tálca egy üres részére, majd válaszd a „Primitív hozzáadása“ -> " +#~ "„Timelapse törlőtorony“ lehetőséget.\n" #~ msgid "" #~ "When sparse infill density is low, the internal solid infill or internal " @@ -10103,27 +10152,26 @@ msgstr "" #~ "specific thickness, so that better archor can be provided for internal " #~ "bridge. 0 means disable this feature" #~ msgstr "" -#~ "When sparse infill density is low, the internal solid infill or internal " -#~ "bridge may have no anchor at the end of the line. This causes falling and " -#~ "bad quality when printing internal solid infill. When enable this " -#~ "feature, loop paths will be added to the sparse fill of the lower layers " -#~ "for specific thickness, so that better anchors can be provided for " -#~ "internal bridges. 0 means disable this feature" +#~ "Ha alacsony kitöltést állítasz be a ritkás kitöltéshez, akkor " +#~ "előfordulhat, hogy a belső szilárd kitöltésnek vagy a belső áthidalásnak " +#~ "nem lesz mihez csatlakoznia. Ez hibás nyomtatást vagy a nyomtatás " +#~ "minőségének romlását okozhatja. Ha engedélyezed ezt az opciót, a szoftver " +#~ "extra területet ad a ritkás kitöltéshez, ahová az áthidalások " +#~ "csatlakozhatnak. A 0 érték az opció letiltását jelenti." #~ msgid "" #~ "When using support material for the support interface, We recommend the " #~ "following settings:\n" #~ "0 top z distance, 0 interface spacing, concentric pattern." #~ msgstr "" -#~ "When using support material for the support interface, We recommend the " -#~ "following settings:\n" -#~ "0 top z distance, 0 interface spacing, concentric pattern." +#~ "Ha speciális támaszanyagot használsz az érintkező felületekhez, akkor a " +#~ "következő beállításokat javasoljuk:\n" +#~ "0 felső Z-távolság, 0 érintkező réteg térköz, koncentrikus mintázat." #~ msgid "" #~ "X1 General Settings - Network Settings in the side bar of X1 main screen" #~ msgstr "" -#~ "X1 General Settings - Network Settings in the side bar of the X1 main " -#~ "screen." +#~ "X1 General Settings - Network Settings az X1 főképernyőjének bal oldalán." #~ msgid "" #~ "You have changed some preset settings. \n" @@ -10137,7 +10185,7 @@ msgstr "" #~ msgstr "Cikcakk" #~ msgid "(Sort)" -#~ msgstr "(Sort)" +#~ msgstr "(Rendezés)" #~ msgid " Object:" #~ msgstr " Objektum:" @@ -10145,8 +10193,8 @@ msgstr "" #~ msgid "" #~ " is too close to exclusion area, there may be collisions when printing.\n" #~ msgstr "" -#~ " is too close to an exclusion area; there may be collisions when " -#~ "printing.\n" +#~ "túl közel van a tiltott területhez, a nyomtatás során előfordulhatnak " +#~ "ütközések.\n" #~ msgid "" #~ " is too close to exclusion area, there will be collisions when printing.\n" @@ -10155,7 +10203,9 @@ msgstr "" #~ "ütközések.\n" #~ msgid " is too close to others, there may be collisions when printing.\n" -#~ msgstr " is too close to others; there may be collisions when printing.\n" +#~ msgstr "" +#~ "túl közel van más tárgyakhoz, a nyomtatás során előfordulhatnak " +#~ "ütközések.\n" #~ msgid " is too close to others, there will be collisions when printing.\n" #~ msgstr "" @@ -10164,11 +10214,10 @@ msgstr "" #~ msgid "" #~ " will be closed before creating a new model. Do you want to continue?" -#~ msgstr "" -#~ " will be closed before creating a new model. Do you want to continue?" +#~ msgstr " bezáródik az új modell létrehozása előtt. Folytatod?" #~ msgid "default value" -#~ msgstr "default value" +#~ msgstr "alapérték" #~ msgid "hybrid(auto)" #~ msgstr "hibrid (auto)" @@ -10185,7 +10234,7 @@ msgstr "" #~ "támasz kényszerítők kerülnek legenerálásra." #~ msgid "preparing, export 3mf failed!" -#~ msgstr "preparing; exporting 3mf failed!" +#~ msgstr "előkészítés; 3mf exportálása sikertelen!" #~ msgid "the 3mf is not compatible, load geometry data only!" #~ msgstr "A 3mf nem kompatibilis, csak geometriai adatok kerülnek betöltésre!" diff --git a/bbl/i18n/it/BambuStudio_it.po b/bbl/i18n/it/BambuStudio_it.po index 0970e864bd..458a13a873 100644 --- a/bbl/i18n/it/BambuStudio_it.po +++ b/bbl/i18n/it/BambuStudio_it.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-08 15:59+0800\n" +"POT-Creation-Date: 2023-04-10 17:16+0800\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1924,14 +1924,14 @@ msgstr "Temperatura piano" msgid "Max volumetric speed" msgstr "Massima velocità volumetrica" -msgid "℃" -msgstr "" +msgid "\\u2103" +msgstr "\\u2103" msgid "Bed temperature" msgstr "Temperatura piano" -msgid "mm³" -msgstr "mm³" +msgid "mm\\u00B3" +msgstr "mm\\u00B3" msgid "Start calibration" msgstr "Calibra" @@ -7238,6 +7238,9 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Spurgo minimo sulla torre di pulitura" +msgid "mm³" +msgstr "mm³" + msgid "Filament load time" msgstr "Durata caricamento filamento" @@ -9211,33 +9214,6 @@ msgstr "" "Sapevate che è possibile utilizzare un maggior numero di anelli a parete e " "una maggiore densità riempimento per migliorare la resistenza del modello?" -#~ msgid "Failed uploading print file. Please enter ip address again." -#~ msgstr "" -#~ "Caricamento del file di stampa non riuscito. Inserisci nuovamente " -#~ "l'indirizzo IP." - -#~ msgid "\\u2103" -#~ msgstr "\\u2103" - -#~ msgid "mm\\u00B3" -#~ msgstr "mm\\u00B3" - -#~ msgid "Layers: N/A" -#~ msgstr "Layers: N/A" - -#, c-format, boost-format -#~ msgid "Layers: %s" -#~ msgstr "Layers: %s" - -#, c-format, boost-format -#~ msgid "Layers: %d/%d" -#~ msgstr "Layers: %d/%d" - -#~ msgid "AMS settings are not supported for external spool" -#~ msgstr "" -#~ "Le impostazioni attuali dell'AMS non supportano l'uso di una bobina " -#~ "esterna." - #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -9266,6 +9242,11 @@ msgstr "" #~ msgid "AMS auto switch filament" #~ msgstr "Cambio filamento automatico AMS" +#~ msgid "AMS settings are not supported for external spool" +#~ msgstr "" +#~ "Le impostazioni attuali dell'AMS non supportano l'uso di una bobina " +#~ "esterna." + #~ msgid "AWS PRE host" #~ msgstr "PRE host AWS" @@ -9551,6 +9532,11 @@ msgstr "" #~ "Impossibile connettersi alla stampante attraverso la LAN. Immettere " #~ "l'indirizzo IP e il codice di accesso corretti della stampante." +#~ msgid "Failed uploading print file. Please enter ip address again." +#~ msgstr "" +#~ "Caricamento del file di stampa non riuscito. Inserisci nuovamente " +#~ "l'indirizzo IP." + #~ msgid "Filament 1" #~ msgstr "Filamento 1" @@ -9746,6 +9732,15 @@ msgstr "" #~ msgid "Layer Time (log)" #~ msgstr "Tempo layer (log)" +#~ msgid "Layers: %d/%d" +#~ msgstr "Layers: %d/%d" + +#~ msgid "Layers: %s" +#~ msgstr "Layers: %s" + +#~ msgid "Layers: N/A" +#~ msgstr "Layers: N/A" + #~ msgid "Layers and Perimeters" #~ msgstr "Layers e Perimetri" diff --git a/bbl/i18n/ja/BambuStudio_ja.po b/bbl/i18n/ja/BambuStudio_ja.po index 76c8240a91..cc6e605b3d 100644 --- a/bbl/i18n/ja/BambuStudio_ja.po +++ b/bbl/i18n/ja/BambuStudio_ja.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-08 15:59+0800\n" +"POT-Creation-Date: 2023-04-10 17:16+0800\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1875,14 +1875,14 @@ msgstr "ベッド温度" msgid "Max volumetric speed" msgstr "最大体積速度" -msgid "℃" -msgstr "" +msgid "\\u2103" +msgstr "u2103" msgid "Bed temperature" msgstr "ベッド温度" -msgid "mm³" -msgstr "mm³" +msgid "mm\\u00B3" +msgstr "mmu00B3" msgid "Start calibration" msgstr "開始" @@ -6901,6 +6901,9 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "プライムタワー上最小フラッシュ量" +msgid "mm³" +msgstr "mm³" + msgid "Filament load time" msgstr "フィラメントロード時間" @@ -8709,29 +8712,6 @@ msgstr "" "強度の向上\n" "壁面層数やインフィルの充填密度を増やして造形強度を向上できます。" -#~ msgid "Failed uploading print file. Please enter ip address again." -#~ msgstr "造型ファイルをアップロードできませんでした、ご確認ください。" - -#~ msgid "\\u2103" -#~ msgstr "u2103" - -#~ msgid "mm\\u00B3" -#~ msgstr "mmu00B3" - -#~ msgid "Layers: N/A" -#~ msgstr "積層: N/A" - -#, c-format, boost-format -#~ msgid "Layers: %s" -#~ msgstr "積層: %s" - -#, c-format, boost-format -#~ msgid "Layers: %d/%d" -#~ msgstr "積層: %d/%d" - -#~ msgid "AMS settings are not supported for external spool" -#~ msgstr "現在のAMS設定は、外部スプールホルダーを使用できません" - #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -8757,6 +8737,9 @@ msgstr "" #~ msgid "AMS auto switch filament" #~ msgstr "AMSフィラメント自動切替え" +#~ msgid "AMS settings are not supported for external spool" +#~ msgstr "現在のAMS設定は、外部スプールホルダーを使用できません" + #~ msgid "AWS PRE host" #~ msgstr "AWS PREホスト" @@ -9015,6 +8998,9 @@ msgstr "" #~ "プリンターと接続できませんでした。IPアドレスとアクセスコードをご確認くださ" #~ "い。" +#~ msgid "Failed uploading print file. Please enter ip address again." +#~ msgstr "造型ファイルをアップロードできませんでした、ご確認ください。" + #~ msgid "Filament 1" #~ msgstr "フィラメント 1" @@ -9188,6 +9174,15 @@ msgstr "" #~ msgid "Layer Time (log)" #~ msgstr "積層時間 (Log)" +#~ msgid "Layers: %d/%d" +#~ msgstr "積層: %d/%d" + +#~ msgid "Layers: %s" +#~ msgstr "積層: %s" + +#~ msgid "Layers: N/A" +#~ msgstr "積層: N/A" + #~ msgid "Layers and Perimeters" #~ msgstr "積層と境界" diff --git a/bbl/i18n/nl/BambuStudio_nl.po b/bbl/i18n/nl/BambuStudio_nl.po index f4b432a035..b744a28ebd 100644 --- a/bbl/i18n/nl/BambuStudio_nl.po +++ b/bbl/i18n/nl/BambuStudio_nl.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-08 15:59+0800\n" +"POT-Creation-Date: 2023-04-10 17:16+0800\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1934,14 +1934,14 @@ msgstr "Bed Temperatuur" msgid "Max volumetric speed" msgstr "Maximale volumetrische snelheid" -msgid "℃" -msgstr "" +msgid "\\u2103" +msgstr "\\ u2103" msgid "Bed temperature" msgstr "Printbed temperatuur" -msgid "mm³" -msgstr "mm³" +msgid "mm\\u00B3" +msgstr "mm\\u00B3" msgid "Start calibration" msgstr "Start" @@ -7275,6 +7275,9 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimale filament reiniging op de wipe tower" +msgid "mm³" +msgstr "mm³" + msgid "Filament load time" msgstr "Filament laadt tijd" @@ -9256,31 +9259,6 @@ msgstr "" "Wist je dat je meer wandlussen en een hogere dunne invuldichtheid kunt " "gebruiken om de sterkte van het model te verbeteren?" -#~ msgid "Failed uploading print file. Please enter ip address again." -#~ msgstr "Uploaden van printbestand is mislukt. Voer het IP-adres opnieuw in." - -#~ msgid "\\u2103" -#~ msgstr "\\ u2103" - -#~ msgid "mm\\u00B3" -#~ msgstr "mm\\u00B3" - -#~ msgid "Layers: N/A" -#~ msgstr "Lagen: N/A" - -#, c-format, boost-format -#~ msgid "Layers: %s" -#~ msgstr "Lagen: %s" - -#, c-format, boost-format -#~ msgid "Layers: %d/%d" -#~ msgstr "Lagen: %d/%d" - -#~ msgid "AMS settings are not supported for external spool" -#~ msgstr "" -#~ "De huidige AMS-instellingen ondersteunen het gebruik van een externe " -#~ "spoel niet." - #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -9309,6 +9287,11 @@ msgstr "" #~ msgid "AMS auto switch filament" #~ msgstr "AMS automatische filament overschakelen" +#~ msgid "AMS settings are not supported for external spool" +#~ msgstr "" +#~ "De huidige AMS-instellingen ondersteunen het gebruik van een externe " +#~ "spoel niet." + #~ msgid "AWS PRE host" #~ msgstr "AWS PRE host" @@ -9590,6 +9573,9 @@ msgstr "" #~ "Kan geen verbinding maken met de printer via LAN. Voer het juiste IP-" #~ "adres en de juiste toegangscode van de printer in." +#~ msgid "Failed uploading print file. Please enter ip address again." +#~ msgstr "Uploaden van printbestand is mislukt. Voer het IP-adres opnieuw in." + #~ msgid "Filament 1" #~ msgstr "Filament 1" @@ -9781,6 +9767,15 @@ msgstr "" #~ msgid "Layer Time (log)" #~ msgstr "Laagtijd (logboek)" +#~ msgid "Layers: %d/%d" +#~ msgstr "Lagen: %d/%d" + +#~ msgid "Layers: %s" +#~ msgstr "Lagen: %s" + +#~ msgid "Layers: N/A" +#~ msgstr "Lagen: N/A" + #~ msgid "Layers and Perimeters" #~ msgstr "Lagen en perimeters" diff --git a/bbl/i18n/sv/BambuStudio_sv.po b/bbl/i18n/sv/BambuStudio_sv.po index 2af4db12df..1e494fe2b9 100644 --- a/bbl/i18n/sv/BambuStudio_sv.po +++ b/bbl/i18n/sv/BambuStudio_sv.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-08 15:59+0800\n" +"POT-Creation-Date: 2023-04-10 17:16+0800\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1379,7 +1379,7 @@ msgid "Jump to Layer" msgstr "Hoppa till lager" msgid "Jump to layer" -msgstr "Jump to layer" +msgstr "Hoppa till lager" msgid "Please enter the layer number" msgstr "Ange lager numret." @@ -1820,7 +1820,7 @@ msgstr "" "anges i motsvarande kod kommentarer." msgid "AMS Materials Setting" -msgstr "AMS Materials Setting" +msgstr "AMS Material Inställning" msgid "Confirm" msgstr "Acceptera" @@ -1882,7 +1882,7 @@ msgid "Other color" msgstr "" msgid "Dynamic flow calibration" -msgstr "Dynamic flow calibration" +msgstr "Dynamisk flödeskalibrering" msgid "" "The nozzle temp and max volumetric speed will affect the calibration " @@ -1908,14 +1908,14 @@ msgstr "Byggplattans temperatur" msgid "Max volumetric speed" msgstr "Max volymetrisk hastighet" -msgid "℃" -msgstr "" +msgid "\\u2103" +msgstr "\\u2103" msgid "Bed temperature" msgstr "Byggplattans temperatur" -msgid "mm³" -msgstr "mm³" +msgid "mm\\u00B3" +msgstr "mm\\u00B3" msgid "Start calibration" msgstr "Starta" @@ -1936,7 +1936,7 @@ msgid "Save" msgstr "Spara" msgid "Last Step" -msgstr "Back" +msgstr "Tillbaka" msgid "Example" msgstr "Exempel" @@ -1977,7 +1977,7 @@ msgid "Disable AMS" msgstr "Inaktivera AMS" msgid "Print with the filament mounted on the back of chassis" -msgstr "Print with filament on an external spool" +msgstr "Skriv ut med filament på en extern spole" msgid "Cabin humidity" msgstr "Inkapslingens fuktighet" @@ -2956,7 +2956,7 @@ msgid "Micro lidar calibration" msgstr "Micro Lidar Kalibrering" msgid "Bed leveling" -msgstr "Bed leveling" +msgstr "Justering av Byggplattan" msgid "Resonance frequency identification" msgstr "Identifiering av resonansfrekvenser" @@ -4170,7 +4170,7 @@ msgid "Please correct them in the param tabs" msgstr "" msgid "The 3mf is not compatible, load geometry data only!" -msgstr "The 3mf is not compatible, loading geometry data only!" +msgstr "3mf ej kompatibel, laddar endast geometrin !" msgid "Incompatible 3mf" msgstr "Ej kompatibel 3mf" @@ -5738,16 +5738,16 @@ msgid "Global shortcuts" msgstr "Övergripande genvägar" msgid "Rotate View" -msgstr "Rotate View" +msgstr "Rotera vy" msgid "Pan View" -msgstr "Pan View" +msgstr "Panoreringsvy" msgid "Mouse wheel" msgstr "Mus hjul" msgid "Zoom View" -msgstr "Zoom View" +msgstr "Zoomvy" msgid "Shift+A" msgstr "" @@ -7123,6 +7123,9 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimal purge på wipe torn" +msgid "mm³" +msgstr "mm³" + msgid "Filament load time" msgstr "Inmatningstid för filament" @@ -7385,7 +7388,7 @@ msgstr "" "vilken typ av filament som kan skrivas ut" msgid "Undefine" -msgstr "Undefined" +msgstr "Oidentifierad" msgid "Hardened steel" msgstr "Härdat stål" @@ -8164,8 +8167,8 @@ msgid "" "interface is Concentric" msgstr "" "Linje mönster för support gränssnittsytan .Standardmönstret för olösligt " -"(material) support gränssnittet är Räta medan standardmönstret för " -"lösligt(material) stödgränssnittet är koncentriskt" +"(material) support gränssnittet är Räta medan standardmönstret för lösligt" +"(material) stödgränssnittet är koncentriskt" msgid "Rectilinear Interlaced" msgstr "" @@ -9057,30 +9060,6 @@ msgstr "" "Visste du att du kan använda fler väggslingor och högre gles fyllningstäthet " "för att förbättra modellens styrka?" -#~ msgid "Failed uploading print file. Please enter ip address again." -#~ msgstr "Det gick inte att ladda upp utskriftsfilen. Ange IP-adress igen." - -#~ msgid "\\u2103" -#~ msgstr "\\u2103" - -#~ msgid "mm\\u00B3" -#~ msgstr "mm\\u00B3" - -#~ msgid "Layers: N/A" -#~ msgstr "Lager: N/A" - -#, c-format, boost-format -#~ msgid "Layers: %s" -#~ msgstr "Lager: %s" - -#, c-format, boost-format -#~ msgid "Layers: %d/%d" -#~ msgstr "Lager: %d/%d" - -#~ msgid "AMS settings are not supported for external spool" -#~ msgstr "" -#~ "Aktuell AMS-inställningar stöder inte användning av en extern spole." - #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " @@ -9106,6 +9085,10 @@ msgstr "" #~ msgid "AMS auto switch filament" #~ msgstr "AMS automatisk växling av filament" +#~ msgid "AMS settings are not supported for external spool" +#~ msgstr "" +#~ "Aktuell AMS-inställningar stöder inte användning av en extern spole." + #~ msgid "AWS PRE host" #~ msgstr "AWS PRE värd" @@ -9383,6 +9366,9 @@ msgstr "" #~ "Det gick inte att ansluta till skrivaren via LAN. Ange den rätta " #~ "skrivarens IP-adress och åtkomstkod." +#~ msgid "Failed uploading print file. Please enter ip address again." +#~ msgstr "Det gick inte att ladda upp utskriftsfilen. Ange IP-adress igen." + #~ msgid "Filament 1" #~ msgstr "Filament 1" @@ -9574,6 +9560,15 @@ msgstr "" #~ msgid "Layer Time (log)" #~ msgstr "Lagertid (logg)" +#~ msgid "Layers: %d/%d" +#~ msgstr "Lager: %d/%d" + +#~ msgid "Layers: %s" +#~ msgstr "Lager: %s" + +#~ msgid "Layers: N/A" +#~ msgstr "Lager: N/A" + #~ msgid "Layers and Perimeters" #~ msgstr "Lager och perimetrar" @@ -9661,7 +9656,7 @@ msgstr "" #~ msgstr "Plattan %d: %s stöder inte filamentet %s (%s)." #~ msgid "Plate %d: %s does not support filament %s (%s).\n" -#~ msgstr "Plate %d: %s does not support filament %s (%s).\n" +#~ msgstr "Plattan %d: %s stöder inte filamentet %s (%s).\n" #~ msgid "Please Fill Task Report." #~ msgstr "Vänligen fyll i uppgiftsrapporten." @@ -9824,7 +9819,7 @@ msgstr "" #~ "timelapse typen är traditionell." #~ msgid "Start" -#~ msgstr "Start" +#~ msgstr "Starta" #~ msgid "Stop printing when Spaghetti or Excess Chute Pileup is detected" #~ msgstr "" @@ -9841,7 +9836,8 @@ msgstr "" #~ msgid "" #~ "Successfully sent. Will automatically jump to the device page in %s s" #~ msgstr "" -#~ "Successfully sent. Will automatically jump to the device page in %s s" +#~ "Framgångsrikt skickat. Kommer automatiskt att hoppa till enhetssidan om " +#~ "%s s" #~ msgid "Suggestion: Actual Volume in range [%d, %d]" #~ msgstr "Förslag: Faktisk volym inom intervallet [%d, %d]." @@ -10019,10 +10015,10 @@ msgstr "" #~ "by right-click the empty position of build plate and choose \"Add " #~ "Primitive\"->\"Timelapse Wipe Tower\".\n" #~ msgstr "" -#~ "When recording timelapse without toolhead, it is recommended to add a " -#~ "\"Timelapse Wipe Tower\" \n" -#~ "by right-click the empty position of build plate and choose \"Add " -#~ "Primitive\"->\"Timelapse Wipe Tower\".\n" +#~ "När du spelar in timelapse utan verktygshuvud rekommenderas att du lägger " +#~ "till ett \"Timelapse Wipe Tower\".\n" +#~ "genom att högerklicka på den tomma positionen på byggplattan och välja " +#~ "\"Lägg till Primitiv\"->\"Timelapse Wipe Tower\".\n" #~ msgid "" #~ "When sparse infill density is low, the internal solid infill or internal " @@ -10082,7 +10078,7 @@ msgstr "" #~ msgstr " för tätt inpå den isolerade ytan, utskriften kolliderar.\n" #~ msgid " is too close to others, there may be collisions when printing.\n" -#~ msgstr " is too close to others; there may be collisions when printing.\n" +#~ msgstr " är för nära andra; det kan uppstå kollisioner vid utskrift.\n" #~ msgid " is too close to others, there will be collisions when printing.\n" #~ msgstr " för tätt inpå andra, utskriften kolliderar.\n" diff --git a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po index 2ba2579fcd..d2475680aa 100644 --- a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po +++ b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-08 15:59+0800\n" -"PO-Revision-Date: 2023-03-29 12:43+0800\n" +"POT-Creation-Date: 2023-04-10 17:16+0800\n" +"PO-Revision-Date: 2023-04-10 17:13+0800\n" "Last-Translator: Jiang Yue \n" "Language-Team: \n" "Language: zh_CN\n" @@ -1866,14 +1866,14 @@ msgstr "热床温度" msgid "Max volumetric speed" msgstr "最大体积速度" -msgid "℃" +msgid "\\u2103" msgstr "" msgid "Bed temperature" msgstr "床温" -msgid "mm³" -msgstr "mm³" +msgid "mm\\u00B3" +msgstr "" msgid "Start calibration" msgstr "开始" @@ -4629,16 +4629,16 @@ msgid "Same as Global Bed Type" msgstr "跟随全局热床类型" msgid "Cool Plate" -msgstr "低温打印热床" +msgstr "低温打印板/PLA打印板" msgid "Engineering Plate" -msgstr "工程材料热床" +msgstr "工程材料打印板" msgid "High Temp Plate" -msgstr "高温打印热床" +msgstr "高温打印板" msgid "Textured PEI Plate" -msgstr "纹理PEI热床" +msgstr "纹理PEI打印板" msgid "By Layer" msgstr "逐层" @@ -6829,6 +6829,9 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "擦拭塔上的最小清理量" +msgid "mm³" +msgstr "mm³" + msgid "Filament load time" msgstr "加载耗材丝的时间" diff --git a/resources/i18n/de/BambuStudio.mo b/resources/i18n/de/BambuStudio.mo index f347bcd89f06ae6228000722291596e4118aee9f..96dac64f37d145de9b2860fcb27b4714cc50e111 100644 GIT binary patch delta 47786 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 delta 47632 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 MM8TI6i;pV#e@+xhqyPW_ diff --git a/resources/i18n/en/BambuStudio.mo b/resources/i18n/en/BambuStudio.mo index 027450cf3083652ed0da38b5c511f31b6b70c533..a78fc8ea6ea20d0e5bbefe21a9f59bdada60118a 100644 GIT binary patch delta 47857 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 diff --git a/resources/i18n/es/BambuStudio.mo b/resources/i18n/es/BambuStudio.mo index 60a52a10d0aee48f2daac107a0a95f2d35ccc37d..f32f48f169b90f557a2d474370501359eb90a937 100644 GIT binary patch delta 48862 zcmY)11#}e2!ng5G23y=+5+rD_0Kp-_-QC^Ywb8}h-JNBD#ogWAT^C<$@$dO})xPI` zbI#mfRdscFRnLTM?xT4zzs`^8-iaGwn!{^l6vs)9^-DO;xM+?uceGL+=iD~O`3=uw zQoM;p@e`K9(Cxg@#Ui*Bx!w7U-O;zhas041hGAbUhPyBWw>i#E$H_`UM)YBAjEeO! z2e!hpI1BUPBg}>=cR5ZHtccOEH73Izs0L5MggD2#5$U6I9Ao1JOs4uD5{OK~FN}$i zcbf(zL=_Z>5izqh2dctQ8!v7xi|To0?2GkLJ-=$bjuD98M3r|Bqf@{0gn%k~k81G` z?1S<5@W%0|8<(I8T#4CnHIBiXSPfh4b(|`=6N_MseP+ljU{c}}YQSWqrXle#2JsXa2Qy$gGbm9KVSo_cEsGb0hMnjYWF-qbs+vx zW1uxFY9!qP1hfV!pbBn=d9fR6k*&r2cpGzJ;$x1p5Gx=_&TG{6-E!P4!pEqF=R4tT zZl^YCQD4J|_y!~6M`Y?<=LZ1|*>5Mk1Hnm-nTeM`ZKE!z8(yLs_yILy5l*q7Ffpda zCaCMfP(7cDmGB5^L=&Di_XVKx<-!Wu|HTPJCt)&1#Rb;Y7>)R5jDq`7`A*pQRn$Rp z4-4ZvEP&b1nBCAGb>A$EiHk7?Za_6)uj172oF$M3Z(~OEJ8R;ZQA1e?)v%5j3HzW% zY!F7kDX1RK#KgE5)$pCD1|LPu^(CAB1U0q)pu3SknscTnS5QajQ&h#i^Cn|ztW3Nb zs^F!l3fE&t+<}_oj2Fx^q$rLe-T<|zpP~++7pSR=bkT9rW73O^zveES1ofl^st0XR zt9~fP#zm-Ay%CGxbsUIEE}7Lo6H^iYgxxUVWwVAx;~3&wa3qFbF(Yyk;}gGjh4I(W zz9JzG{)_Q2>Q&S7l&B$0jp}hWjD`77b6W;Ar&Uo6ZH#fTi;WLM-9HU=-(u8AY(yRL zr(FVr2$Z^JdUOm2D}LQ^zTk2E3lH9Koc7r3rs?4$>_WWuEpsHFz+uFT+&1w;ID~k< zJB~9PccB^_e%I`la;S#59SNxCqfjF;2V>%L)MDF=S_`{SBXbkA2Hv3V`-X`y#yvB2 z=}`F!V?wNoDzA-=_ePxq6Oi&Yo@dTR_d5^eD}?f-5zVStz5IKQJBG!fPEMW`Fsqbl5ts^Bnc zuFs=J;1MRk@2H`T`_LGS8j;ed`|6|0Z;c74-|0hO4NgF<{sNE84b@QvwMO-DDC+uX zOoB^L4cv`d&8MvQQ4RTosyO;%GgSeYfp|__jP=k>P2eX1%~jwN-k29vVO>-Yo1j*4 zchqVhjGBrGs6{yoGh(Et<^xD}EJAz;=Eno5`+s00jQY%sXq;z^zlJm+2{H)PkUTgM zD_|eIgBrTp&&|2e9JTm{U^bkJ8q!1d`eoF}y~l_c^KUa^@lhShiXj;GH{;)wKo1hK z;5BQ+7p6fuQ7sQgHLMb5#Fm%~C!#7ojOy7HjDoi@GCsjo_!>18Ghdnpt;HI|H@XDM z6NvK4w5SH=CO!&t;$F;$|6m@>^4e6~3>BY=n)|bu93P?X_j|)mz);kbc1MlGbkxYq z#hB=BwHJ=y2og?VG_3yCRMZ&N!)d4nEk`{guA>V4h$`qCM#re{jEPX`X;C8+V$F}S zh=(Cl;W||asO8O31rNq_I1hirgBTT0V+6d0W$-rY8Ik@U6EA`4*#uPjYE;jUVM+WO zHBvd=o83_oBWwTHCy<5<%~2UfVmzE@;~Ovr@gt~)Tta5exr>_PQy)x^FJTQzYM{{4GH4Ey#P)w@*Uqk_{i)wifR8Oa%Mr0)9UWogi@z}b+Ae>RkRG?84y1dix%YiF#y|~yBGlqcjapn; zu?-eN4e1J0MSr3iv=2BI2fb+H06xOvBc+~c7>bam#MfDs^|St6%9r8Xe?I8 z1$Yuapr&9SUq#h`Q>YQVgnjWPPQzAye%{yiAE>4c?-ca84n zebw559f(JbVJhm4xrh%%HFz6pkv~8!>Nhd`TyJQcm}ZFLVk$1AMQxAbs0MXH^=u$& zQ4X{58K~7h&$`^uAjFbOOc?F_#HFjpEkoyR0AH^ z_&e0@_!qUR{bHLr{tXq6hlMd2>b$6n#c=>?gb$!9zF_0mT>@GR&rx&ZAIH!8_8J3q zf)zpaxPrAYYUsM53LJ(>a4IIpb*K~XBYz>UAp<&<$-+Hw>~F z#-mpADh$BgsG+`tT8!^e6-SF_8k7#T%JZN)QW~}TtDzd&z@~Sw>AjJWbe$mt)Wb2T zp`MSr;SW>+yKVfa^(txvo}xDuR=@aW1frs*AU&#~Eioq!#Bkhz0r&w^Y5ylk;ODd? zAvfm6xu~9A!1VYOn`5kmrlH-jBJmMe1g~HZOqj^e`!G5dH5I!s8D2+q=p$;#BPKQ- zONrk1{|p3lu;j59!ckLF9<}P5+3RgkXM7KvJ_|Jh3s57q5;gQ2QRVH%zIYrvVeuqp zM(jg|GR20yuuM&_=#FHzb7^Oel2z<9y^&?6T`7R@mZ*;iZ9mXOf^EY(rIa0CfU}ru1`yu^^_!wy2?;U|oR9_a|P) zO{kF@oyt5*7NN@Z4={^0Ix2qHM5scnP%zCIy*tW~0{30#wJAp?1M~8$X8Hwii*0+hzvjt^>EbMn2y>VE0F`qbq*8I8hC_i zS%i#c=u@Ivo)1-E6;wgZQ3dxv^>hF#-%#ru)HeGIHTS1b4ZDJR_}oYBj@KAT`~NEe z73`PE6dc!@6m6^EkMOfif} z{Z17ETGfqFJ?*RuI25%gC!<4a|nRUJx~MCD9-2qUO8-s$qR` zD!N(O|9=pOpUr%*IDn;y|CZgvt6)yzGf~^-B$mZgIT%VxZi{M2&k#RnBQ8Q!Ts@Z= ziPor&bV04L-l*+66E(tr=3@VA8|)!LBXAMb)B89a-=XHZS8kJUBx;K0q0WW%7=Wix z6}`ey_yLt~U>>vTC!xw&f@DS>4G{4GpoD#sK0C zPz4S|?Sjde6<1?AypDSA|H53DGOsyNt6^^9?qCAy@mAC}If~k+7i|0ys^xD`L+9i( zLzf8Ez#!Cp1yKztg&LW9sB(ItPSR1Ra+abFxXsA@u5*=uR`)AZ55HnC#>#IhDukiL z%iH)cR6$cv=fG0b{cEk;aT@U>sPgI;FeBRqa}ak?9o~T6_y7Gi!*T0X)Q~+!WsFeJ z%w>Gk_DYZHQFc@V%GvAHFgx*y8iF2r3@({iK|BApG627C>!pcJC zAlZcK*$&iD9z_lHb({VOHRSJXJYr!}aa>e-Ayob5c)yJwN8NwX#;>6&e1ICcSC}4uU|vjD#4OT=xSV*;BJ6)1ohgc% z8;hbAPdRHV)B!aVb=1zqw7AcvKSnLWpQs^@A7*-(0<~B(qppXeMzS`lK`m^2Tp0Ub zJ)TWM2(HE4c+X}?7;XwmgUXj5^I>_^Nc?UckLvMs)X*ymKcW_K zRJWMvVKUT>xllt`8a1@lP*YPIbz(I|O-&b6g~L$yO+__mCF=h5sE5%`RK@$PXHe(E zP1M85jauAP5EFG{V$_+P2324Xs=}Ae~7u4Jiw$8NvX+45kQ@2qMC#RHIJ6SLb z(aNZ2!2ryl=l?tcy5WfRxixxelb#K~a=j|5=M~Br>s#Ad`=WQ!S(jS(T5n(&_kTo9 zU1(X<^S_h=Sj*Z9YY^{+n#0qmp}mM2>Kiux2(`FgpoZF4&cq|5%1edXP1&#kmP3v3 zD%1$5YV>ziW-Sj<^7!R7>>H3NCopys*YL#Mz)IJVHeHJW=>TzAv&^JdF&<(Xa`q=b=sFQP?br$L& zvkbNRkD~Hlve&QUG~$mdvj3H#UnR3RMp`#pA6R2mHv73CswY)Z4efwBpn9SjJOS0< zRj7P_q4xP1RQ|iD-S7;R@4ZVvbN2()Lcc2JhDfNPPlS5f}6u88Je2FWq&r63`UnL$$0V>gcSD>S0S%Lpq|? zNHMkoXUAMP$fj?u&;Ac0 z;UWnY@hb*knFeOg+oBrQ33V{_NA+NVO<#j*$TsT<>n(fzH7fr%)D%T-X!0jTbtFqe z_P<(Olms0xl`#)CLT$h4sH1WX>V}i35xI+6-A^$szD4yoK_fc_s1XZBbs!XVy*TOs zD`(TIxHixb)xvhDi~~`NZ8&OfC!%_~$j1M|48#wi8u$v;uo#U^!xEr6loGY*f>GP9 zfK6|K8d0}90rhN#O<03!;ThD8mr&=z15}THqDCfi6Ej80Q4I{lftVAu7B(o|kB?+c z{hY(Z(={_A{Q_0aH>4idiO}3!h>9vWDXQXZsD>0m4Pi0Vm&nSfZ%7?5D~>@e!X2m~ ze~PN$9co0rTK!v?jz&eTiInL5{67-`RTP36qI{?+Xofm?+M=eS6Bfn3SQU4oDvsIG z9MJ_(kJ)ah2A;=a_y*PRkXB|pR>s`Kdt*B7|8)e^^Gm26Jx87SiCdfPQW=AZ564>g z7b<_WHl_gqsK;*wR0mq1*3tyjNGwJz@-?Ut+KC#0!{}=6&J)m3JwOfh->5b58B1Wa zwx$PFFc{UP!|@VxKMhrG+YWwCP3($=@HlG3BX?x~t0gfyngWvG zc;e~sDsIB1IJT4dI-aAmpZ9wKTTu-y-Nh7C11l4+hgv&pu{`cT^*C}@vs>bz>dTMX z9VNTEW-e-wkduTl_QD?2oSjB(yT4I$_8qkwa&|M@t|DrxI-<^v<){j8qbhic8sSf< zk%`>hj7TEPOgxoKpcH{}s5za2x?v@1?zW?PbO6GT} zGa|iF1&>Az{RC9SvrrW;LOoqKptkKf)S^z)PurCJ*M@*98eyG+8p;Kzg4d%yaBM~u ze8yhCV&hLyi}8(3|BhNCG5VWNNEuP(RX~kkLsW;lp!f6t-UKxFzgy>^Zdh;KkNR+V z0d?a`)Y^ED>fv|Ph(#Y@;>j=@@yynGsPkitbvtUxpQ4+Fz)zcydZ77dvwWxqG)A2R zT~Jdq95wXwP!%q*ZbUU?zx6z7(cVX$oNrJMo3E%5Ou?>G{&X(;UlrvhK|L#p%1{Bd z=xU&P-WgTUXw)v4hPrPBs^D#?hTXK@N9BKtVfYV*Vy;2v9B7Z4ifMzmpdPLyK@Hf2 zS_=nJJv@sV>N}|I_7v5?$b(G-Vxd3r0K9~0P$Ts(YVE`xVj7YFHN^p_wUQe(0^zQ` zP}L^1LKV;pbpTC3??gj2YzL}ADcc5Rq-U$6s|xz z<~rL6DC1GooLoSSz+==l`eEZqhMOVFfts=~)E9~x)(JNKxb-%wBkxcn_X#zX{=b_B zM8gEy|0xJ)JA|MrE{hqlDQb?!q8c(6GvGGV)ZDk}KT%VVbc7l5+^9v{099cx)S4M& z9f|6|MD$U=vy^}q*Gg1{$52Ch4K??VQ77Abd;JG`2h2#5FC(hLJQ$3XQRNLpP3?T_ zi+^Ed%sR?^e{j*&Tg znu1ZNPekJ}E3QS=b8|HNUj;uSL389k#tcnN)D5XoQ&Hrk@{4?s=94Aj}a3ANfU zqPFcf)JQ}fYra?HMJ?75SPI9ZI(%g;`(HQQCE*~xM#VRdGizc$st4Cl4Y`dPnaJZ! zLth|Q$C7?rpJ0B(GtQl83Veu~IrIuzM%?EKg;wiFJ>ZM4Rhl_oQs>#J27XQj@HIV z)bBJ_09&EvxFfE{zNnt0n`4GFGiD=R0=2q(U{+j$S?~gO$6u%hb)Rb%<8VAed@8EE zdh^UDpeE>QwXPtbeY^#=Esmh}@mbW`xR2_|YgEtD&Nm}e3AHVoq4M`cRXh^ap;@Rk zu@KAPGVF?PP;08`0`|Wu=&-_y%>7rgE2?xy_H-cGXcM&<+D|GzQ@s)D0JG{1xgM z5PyX^`Ld%LUK_PI+oDF$MeUMts5P_1#?NCxU4KfT5`nZU{hZO*9d*MmRD}svnTBOY zHLMgC!Ir2su^e^w-@^9z0abC6)n|}fIdQfN8R`fwF_db zF+ECxI_oo|8de&WuOVv0+M^cJP}KP`9yRpSF&tN+w)IO4#elVDP1MF3+W&tN7|4Z) zf0%tb3>Oj)T<7O3!UGtH&HprO;&<#od?`-Cxa-YBW+`eU-{Uwew!zQ)k50~G0P(sT z&9>`@I@tE(B<=rS1j2CAU*`FI5j8|^|8*yjo`g}T3md!(Y%|ohdx5Gb@eR{}6xQ^pf^(n_o^bSGS=7;7(Oz$h zYDhoS({>o@h@OJpfB&#vjqZVr*YNSFiA{IlHQwDWH z))UusRKBjL zqk61$73$e=1a;pXR0IA--T(d;`(HiyL4t-j#%b{zo z80%pGc1MlKG}P40LDjPa1Mx4^2wlF-{#Q>Q+6;fA;$KmV#qW-(@I0!3o2Z7pKs6}R zU1KcNeTh+XoC=jcD{5p4qaI4NF*CM9-9N)6po|MqbH5(dvO}mWt|vqt#TiiBu_USiO;L-o9mdrDA4)*mWHPD; z^DqE6VQRdLYT&=9ihiOBiuBn0(pfCbLHqzxobv$>VD~5HyI$y1Kj$3rfzQl;m{94t z`6t}0fAf&j4UGt>g6*gw+lz@A+e@elU%fCR^AR<7Us2mJ%1bjs2~Z=F8MU1Yp+>5Y zO<#!G9UD<2dJ;AF_tDKp;E7F0_{yAM$xtJb3bp7mVR0Ob4e>no!R)X7y#L5_HKrvV z{Kh;Rs$z5ElTqb-Mm-(<-8KH!XX8sy zJzj0yh3eTE)OLG>IthQG=04UxrsB+~5iN`=ucUr3sDjFqprLPQGjv0(>VBw2v;ehe zcB5{*i~)Gl#=oP=@qceBijUfE=}`^IV=ZN^ZEfQcP{zKf0!E?cW)7<73sL)h1!^1a zL_OtBq7IZZ*88aYKA`6Mi%pOF!IYm4)sS4M5h;PH&uu~=6M=513g=swp`K=It?N-0 zZ$b^>R#b(1QTH7}?TV8&{gU;%y?)1De~f9#_Zo|7|Hu1i=DHTn=0bDSi2OpeFy<$7 zvIU@e+!}SgA8KSqqt|d`(>Tj)`U=z(?nLFki`pHpk&2y6pVcAuUq=GU&;>QOgHQ$j zj#|CrP>XRUY6_O2o^qQ}+wlUb=l4+O#dFj-68&G(z%;0ahoTl~SyVlZF^TqnO9JZY zAWVgmQA4~DRqzhfjR#Rva2+)@w@?kZXRp6TH88>#lRrKxo(W4cH2F~-9s1Qg1t+6h zfrL#2s-yom^F^cFqwrtU5D)oozNidCod=guYbe(b^F5*ws(}+wJ)eU4 zaXD7O`=}`h`N{qdA<*lmS(R&0Ej)_aZdXt}e2vUn3>2o6G(Gs?zipr&}?FW2n*6*gfPYE>UZ-Ea(7;T2TR2QdNO2%z!}L(SzVR6{19 z*32SQgVy3$JY?fl{LFoAP~~)V3Fv6-jFa&XY>q|!{k{KYV;P1MPvGT)lvhFB*V5V@RsIm1fRiz?_J8W%{JkTw z0BR&^p$hJdK{(pRH(&tqlc+`Y()!W*6IF5KsAi6nqk0^O=`a`S+^CCruouSH{$EF+ zHy*^USdd?BS5N=MEVv&F;cHX{S)v=mtTjDQSe*D)48`vlhPh(+d)u!k zy2nY_LEsDyi|OzEkf>TLfA8P-2V*elFL5v?jcrC?E@}>Uqqfmu)X<(nHRKj%$M={K z)5h`lzW-N5jocH|L+DK$fAjPIXmS0$-*8HY*|;zrH3dhoDBi;=7#Pp2>Tam*<)Wr+ z26n*psMVe_z8U&pRD+75My?iWO|?hm8x-F)J(xg(j@ap_)xQ>XLcPaa7@ENJxIJnc zbw?dY!%;n7f||0wFby6?_58Vw$4h8-Pbg|v)kK{e&0GSixD9H*Dz1XYU|O7KuOC45 z;2LUY7NJ&hC+>QjaPsgDa;|$cQ zPn6W(`&3&PR}=4yI%tw5GYv?Es;CI&z}l#aMx)lm7E}XwqZ)h_)v?c50)I>H@08R2 zuSB3f33IS9CQe~axIS1%=~x;+;(RQe(%<{=c^ftKwNja$v_g&0@76gseLd=^K8sol zmu&hAFHV=E2ADYsL@kc2sC^oan&U>Oo(@1g<))(w+K-x|Yd8~s;38cQ^!I+dJ#T7% z@2PngEBP_SY5bk1T;HD7q%TUxk*^`o9Avh~9@I9gncf_!*KjWJ`WgJ4b@&Ch;mVAr z!A&xmgQX*;Cw(fa1G`X*^c-r)@1wTed(`6mj+&Z)%uKnqL4E=nx-zI9H^e~fj~a>j zsIz}3s)8H#`fJo&$IfC*gj&ogQ4Pq2*Rcd@wWkX9_kPto9qMSl9?bq%3!jpp27Eys zEHSeh6Qbrgr8O(6;KKHLB~;I9p&l}gQH!~qjrTzHbP%eZ*{HR!*2Xtvbz zfELkDRK;m>nC(&smEHi=fFY=rsp7ItJifRF9mz{@(A7Cc^GSTVg4^ ziRwt2d}htmM@?M^)Km?^Ogi#r639)$K~#ZXP(v0wzcGn5HC`t@GisGbEMQiBGHg#g zHMYbFSQI~5LkpT`NpCDq`YzN*y59=I*Xk zBt&hyAXL6kR7HjC_2Q^SRUNfhTVpC5jX7{NYK`5(==cP+4c~{c{|gcLmjpdL@`U?4 z^|2}H1HxX^BD#rM13$3_rY~mJzyQ=PnUAXAAZiVrMs45k)&#}P)MiB;JS9;1s}*-y zBz|l&611A9moPn@k1F6#)S5Vk>e*e4hJGcDF;E31!E~6$S_U<;olqk+9(DgTRC!xb zBXhBb<6vEaaV7fQDoa-p5twon&QAg-cL9_>Mi%SI#uBFKXz=pcdbHR6`G7UOb7K zx(MaXNTo;B6M~xBFr=Zb(|~}6x+@OFF{mMqRlyXT4ArAx)DVWF7FTmDi^EX+{VeK) zOjObAmfWZj9Ed7!7^(piF(b~$c-sHR2x!~gLKW;(G8G4)Mj|Jw#br^8t0k(Z)36rK zx9OiyXMVcMrlO*#-Bb}(ZWB~T2BYqujiqZSMhhYU=h^Z zf5JbMUez4Ydr%c7sAhVc0kt@Dp+>kcHo#i=1UIAi`@eImn~Z;802j96Y`lg?v0DxE z(X2pC)AG3(O8PR?;=PTHF-k47M%v&I;`dOCxmj&i9d? za06Dr(RIz^@fwEs@fb!u-$Uw~gQl>xDo!T7C90=iP>a#mz*L+7bua~?wp)JGu4s>1 z6GIxX|CM1p2|>6RGvjg8+<(NF7^9)7AUSGZ2cZ^I3Dn$Hvvxzx?G#iG=c0Dc2Go7q zP>c8~>M{PsC6I?e!bavRQw3Cpfv6i7VkKOG>fvY1jedew};=gwR7{{1gLALE+V6Ex1&>6n z>cyzFu?dy$3hIdcib0s7ooPUERE5n@`Fo|L5;*vRK~HW#WWMA;4&PF`MR5--i)Z#)b3h|MR7f9WZxlciu1ppS!{Vx`?50L#agHyh4wc;v8ajqG`k1& zI6i|qH~vO%JE0a|Cfv1X-a}QGaE!^A9DT&oS~H+3$buS)eAcq4^6H@;yPZ)} zFb&nvRj3B8$MLw&wF#BRnj0ITrl32jg}NW%OvyZcqr-!zlnt~=VX7UDR#!{+W!{`@UhRyFvZ{d#i1e7{JsD9d_QXF z_DnYwU9jH7K++$fR)3@!rhz%EWl=qBh8oG9I0Hx8c)(2aRV^nb)c&t+6FQ*^oQ4|u zeYgdWp`M2BEVDRgSl6M3{4i=QJhuL0{e>Axk3QQRSb0#3uqtZmI-~dZKSvYL_F0BH zf-jYK;@ z*S<_mKt0ThI%q1Rj@X8%jD1m4F$=Y-|3I%mOh^17>i*y6oAf|bPjg}}tc>2GLp69N zYHDuIXa8%vydptE?!Uk+zNn}hlHzU*#?<%%bpXX&XjXkXRKseac11f>!#Z0BqdwqF zM&;X&`kZhX)qtN1UDKo3i_C$N8+D-wYKW_#KE;kh?f(;~eS8Mhkjpmy5>@egJc$t& zn+}{qHS8g(+-Io!zM`fmj=RM4H~=+Q*-;rQV;D9?4dqhQ4F^#B`8;a-UA5jrorup- z+xIno5PbuOR9K4M*MYRv@57Qxny*W~hqVq6+GRnxat{g7dK&UO>%x&@%HA z&%&tB`Ei$<`^upfYdzG|jX|xQb*P8fMdTcDonQ7smKCPORZuPLfND^03_usPI~Jmb zdN=BW#2M6(Mp$X?Pllz5hhhmFgc{K!sBL!*)$o73>+JuitIW_~ z0RxDyKsDePYHF^dM(8u@p%s0#*%j$gkLe1ia_gWP(iAn--7y9AJ5vd0zi(6mUP9gY z59)@W*4S&z2&6{kD}w4_1Joj0g4#tZQ6sn>{c$I%0eetWdK7h}Uqx3vd`mz*ju}Um&9bgv$NpEs zQJZkb`q3KwPxJXc4Q3}_IZT87k;UUIL@lP%mozK%v)P<*0a%!58LUi?N1{gV`W7>C zKTsp@X4+~R5QZ9wvZ#Zjj)xi}V?)0bfyzFzGh4mQtfC&T8XT zQS~%LI_f$d2x#?oK`q9fs8u@NIv@3PT!*UY7HSAzqYkbQ_z?ZJn;t#JoW#Fdv+XeP zrq*egf$PUGrJn!q2xz;+-f6xdBts2#IBFZVw&~qbYhn)SsNI0t4LeaiI*#aPeoO<6vJ^N z7Q>II2IbplDlCnvupX*GEo^)gYHdtGjnJHZ?0>EL#U!XFdr@%DvDoDKF z6qp`s5if`3a0w=3mA}Dx#G@TF<*h>PuFa?;dJk$!E}};KxV%d{syN*Cj;W*Ui zfVoIRTxY+%a27Q;cTh*_XVlO}J7sQ6iRwWx>f|eg8p7JBHPjh(-#B}H5#}Sl3zhE^ zYB9$=Z5mnty}$p_fq;70(_R?lU0`*i8n6>JWM{0mP;>b=>fm~Z8v0MDMI8Bz=}0`( zL6rs7^PH%2APfVsF?zrMGlW1+5@w(l&k58GZ&3yQLM^svXU$ZlMm-I4q2{&)>PYU3 z8o_xOf?LpQCk9g?!bMY2l}o09 zZBh64M2%Q~)H7rPYD(7F>wE3>!>AFsc8UG3MfH^g?dO!2&6m)gsJY&QD)0>Ih`x{7 z&o5C8|A-o?*jG#gQd!fXo}QUe_tmsEK}}VAY=Q%>u>ac;xJ!Z-OS!A&AC-pV2;%23 zBi6p=@BK#P5Y*6LMmrewHu1uFx$94b|k*iB@jR$ z(M^*fFKVuPU;!M9TD`|mi}W69X#Ym_EYdA=lEp#o=ai@sDva9JrBEYW2TS1q)Mv-T zSRCDl1bPw3aNGRy*+SGRjd#Z^o}7}WMm|)5MemsrtBR$G??ElH$oI{Z#k8ixt)yqg zgshn-c!T(l2j&F4_RwE{%Efi6KQaYBMz#DiHbv*L8Hr}7x$2ABhPSXh{*9XZ&?jbu zN}|#mVqRQ>Iu{z496F!A-Cqnf#WnD)p8xF$XfZYT+nnXUqqfa>%!Z3m zi}3>L14!K$W~4f!rm7EW-_OJV+<;ni7f>Ub_@$ZiK-AhPf_k>pLsvhE>_OlO31?oJ ziZ{PD4LXj2r2m6@$i#nRt|v#$d3MwYgrfF;n6(sY(N#e8vcPDCU4x*;^ z$vgJHhV&f?>QUr>%ndP7bC()5wD~a@tD)v_FzUW3s3Bg3I#@QM7TrNq&+nlc@Yx#e zy_t$ssF5h-+CV8(fmJX7TiN(X%t?GchTwS{kNCmF^P={Bd(44jQ4QE*<2O-@HO5EN zpa4uyJQURcw-EtV+y>QB7uE79*46g!jMeUM@r~=}CG7q8TsETr+Mx;1uL@S_% zygF*}^+J_11sP%2SwKKTycL!49BOXfqvq@KnegIZhrp&C3MGvZ8)s?Yxi2&m_$(I4;QCwznfc=L;C$amC3DZ*DX{vY|9d3Yp7ZJTPSIq!uUfz_ywS{qRnzD1p2 ze&5aKg{-I%td6?B16IOGsQd4u7VUG?qW*@OqIf^p|7vk^0?Jqz^?{7m!d6H(^C|ewl(R zp$ck;T1=x*6--1mY!Rvhf1uXDS=8!(j+rqMU&!)cPV^QzYUErjfNLGs=RMD#k)SzB z;^*^zs1%MxiT6ewvD;CL=NhV~4^Tt+0o9Wqs0POOH}@w)4RsY%2iu?;Fc5YBRMeC$ zcL}J1y*9%gRF6KO9x4farod_#KztOA!`0Xm^G5J_f79hp)JQoIecn{2L`_W)YBz+V z8dw_j@w<}M?M^`3ZWe0jcG>uKR1dzRS{gr+DL5E4q`9r_QEOres^MEvJ-m);zzYn; z$dP^C2aqDDhK@j{i2wf|0&2i{)DimuwLeow@p*Gv9-9(xX+4e_`YgZsy#1dWwHC&r zhIl6W`SJ4t8($yQ=Y3W@g5GXGmH!;Q&;RkFnVu)N=0gotO;mvmP;=M~+u=x@fgdCl zjg9W}KD?%lX)5TC(YZbhy={o;h~GyYNReatyaO#MhU@vCfq+(TJJcc@jvC4dsFQC4 z>T$UjHMC`8`@CIHA5~xn)LIyXddz-Cl@lqBsW>*4C!Pm2RYOs0ZU(vgjGQ zhqo{YGbHwTzoK0!G5cSu@e>I;5aK5>i={H^#A=6yaRTPUGx#S)N$T?+QroNtQETQ5 zY6LE$dUzWT<6E1)C7Ef^9?Y)mE`e+WVkY-_Ul5LckKVNeP)_l5BU@ye)? zNtV**{qtQqOh~*FYNUQgU7vwkyo*q4XA5eoj-kG=xKUD>#aGPQ0M&zDsIOQqs%NuN z-*y*aX=E1NGW+;23PP%Q@OV+oj#TGrISxX_9 zk$5f4iGwi{^*fsgXqDbYZMUDOxk{VKOidnZWz-Sf7BzPxPz^hPRq#4?!_1j|-tT@a zKuuwlEM^4SqwXJz+Lo)(txVt)0X=L|1e=D`#reehpbAKw)r?381`scXI;xwa9@mpm z+xI^D<44p8{);*XqGU52ijUfDL8t?-csBOGj>?841Y$eX2{sP3h~}c^b}81!9asbt zWj7;G3$-RDqn;5_a`?PIxzY|d5dVOCad}Rk_sc3RL(HO#oy+Ha3eK0yHILIKB&;Lj z8&pB_bDM{YUmjCXZCpZn)KK&IT!+<&U&IQSKCjRFe>CZV8j+~^eBS>tVI9m&{2cx2o;qek?q^g(lc|XDMmG(KsxUVZt$1T_dE0i%k{u5gg|E;Xg`zu?W(OYv^OV9rl z<$T_6CiOsVtG8Gi)0a0RGYA_H--$YclT`3I53m|;!#owu_IiWqiN~vC4x|F8leHSE z!l9^+UP6^0sj{Y+{nv;O~&2C zk78FGUfVp^|HahAOVlxosx>|*UZJkf`GukNcvvxYq4iAz!W;OUe@X9z-u`dh(5&L^ zsB<84BXgh>M~%dEyo%Q_l!DebHjD0A6Cd9~_y*L}tp421%sxMX>c}nB_I-$&!Y|ky zYc)5|f?dto|2nyjkf6_WiCY*0k#e0(sLugeQ0GK`)Ja(iePn2fdRn$^X%43OsE5;D z)Gmn9%8X25R6R{l2hv{{NBLU0=Hxn0LLdo`Q7w+#+B75u1`!WJomdr62UIK6L#8LD zz%i)%S79nVX?=l-iAQT=>Pd^rmlt((*L4Z#;nBrr7>5ywFG96&1**dBs1Z1Z>cM4< ziuX|m&`Z>3y!>rV!$+X*pNM+wE=E0D)}rdWfI6bx*926-Pt;JyXlIVdWSEI~acd{k zNX$m%+mC9%SyY2=pg!?D!3g*T)sdg5Z5g4x$(O~N7rEbcira)rs5MXz)zapuIUH@% z_n|5}j_TQE%#2TMJYENLe>zl;v!e3nMXmngHoa0uGj(;)`}to-0?IhvIvdrq<(LRJ zpq_5WF#vDd^q;70ny`}@%6h0dZHM~gGXyoVYf!6y2WkovclLRI+9@4+|Nozd31|`B zK|OrFqvopoNkmrx_{0yT#}P*2MkT}{stpw9kGr~|76a@0D5QT1F$P1R@g z{{KIsb~D>82(xk_18SSqLXALARK?>_Q?v{<#OtsqZo@GAf|~OJ-Hl-wK)e)c(Y3~! zI1EGaW_R|#3Xa#q3}q%%1)Wem=#6UW6x5nnjvCrir~~FB>g4;5%9pCA8Ihc*kMH5A z{4FsfPC$*+cI*D0?0?P4aS|Tl70iJYPdB63{^sjOuZ?z0d%Q5buWChJT?xyWK%e z%{SDLCLLt9TOQPIC}88Qki*$&k6O%~u?zOYiuekLp<8gU&-;z%{kV#RQbWv;y+b`F zlMXd!b~n^wyN0Fl8R}%qG0f*Y#cvV)S9U^#x$@M zmLc9BH4;b0u>Uo*_ejuCenK@M-dJ-WB}I)ua?FlJPz82I?T$fM3ilzq%!xA2tc|Fs z5lD&ZNLp0GvZC%UfI30Tjbj_7CD6cL7=qd^lQ9d#HSG;067-V!gwJ0l4}8XjH;$#N=c+d{_K)g+SH1EBX`H^yp6P`u>^SoE; z{MSBi$&G96O&tmI)O9Y|Mx>@eQ|vXe@)vUW(8Ede{~Jc-jY<3Om7Ki2 zsF05j-VY#G*=w7y7@6);eh<_Z*NcDpaVpWs%liLcEXz&W<9fv>%wI=x8q$c$&y+zuAfmezxKkB;K^G(~awG;d~%=;t-z5&Cj`>i$tx( zdGrH{I;4Hz-JUmpfzP?Zwd^z?5{*sWV}p)UATJ0 z_F^K}{;>_6NBRjH{*!!sws2OFuM__FicJ2=yiZf^FigbzzgJRQ<}KB~pMqkL>A%-f zTKkxIDjHFnYw-z}fZ!j^l2d^5;*hO};! zU)4^D*Z&W;z=LES#IW$az$r`S8D0@=8N&bjio^Bkyl;@0;D4?)AZIdI6gb>g(vbKd z-hsUNJ7i7|uC=ngD`qR~V~X+q_YC)SBD9bEsrC2Q`4@60H;H+;c^Ws*u{W79^pEH|sCJ^66 z`W%-?YTkO?=SKd{nDd>Bt!cA>&rU9c-N6 zO>ycH{y-yEV=pTCL_@DAjc_5-uM_{B(clMOPD}E)r0iPu{-neok^Yc;8OYy8=~3wa zdm?&8;6fSR6^Q?&pvq*ZYA!jIDRcnWLh(9<=v9z-Q^NUphmp4g*S>LIX5y!iU;lA_ zqpYtqVmr3C^<1zGs-;4_@yBM|9L`M(Ff!)CiWCrsO7yx;AvL%$jKY)Hv_!;blD?U@ zUe9d7uZdr!j8I#lxyq+s(iV{?h_XLYj$ZC6qf?QKxw*(s;+!;8tk*Q+ohhUN?}uD} zVUiuy(~x%>(mPVw1{(C5@N_JQF-YUPuQp-YrSnsXv%HTM4#8 zlZDfav;q_ohr-?xKEV6GS7{p_%{@^lq`JM(oxFO*=XyeofQdQ@X}De`Y#pnKr=~Hl zN$a5be@ntL3i|Igih^cQ$Z~r_d@{G?;u<^brEE|B%iqxkPIBLJ^7OFzDih~V#d_ba z`*BYY^^~LBxixk}?^I4+eQgEraQy#_ zKs4KMf9~Hz;pc1vvr_oKwybQVXXE-wTZhVv#I>hd|Fdn2)^bB$ZvJ31-6XvU8Rt`B z4NO4#En8VS(uR5BmDmNb_?=eh91AgaT{oLm?*Xr_q zsY*#J%{_X>rM%5}gtQu5+eA8ljn{iMrfjzlh5SL_3WBAwh_velJsa?f5kf? z?|SB5?|(OuHyU}{6N^US<+=X{X+3y<w+&gzw!a&GANFRqfP*Ip79anYyTyfP9W z&-KM7>iutJ;xS0qs}qHfq`|ZCzgH!~@$B`PT)Rwuy+SGXv8`C~)#Pc1?rthuOQ!Ar zb1^rC6egb27Ni^W(hnZDk#@-DEl9(o6YtCYStzF+=>w>=I>w`n`CR{p^f2DnY*{C5 zgNm6>yUq?0BK=QA?d)j0rjVr+!k+>5{`+7xAOU$VD8TD9*ZzC)3$)&^?C}R~y;l~> zdq>`4RJ@aNW)nV3c%Uu2AGw;6_8UKca$=L=ku5Ae1(fBTi})aVvW##^!sG3Y^+?mJ zA8CcDWFCdq=e?GAf8v3*0VWsoZ#$Mzjp41=GSV939^O&3|M~0NPGJhkNJIX6@#CQX zd)2Tv_Op%9g-qPHgLpz3RGW7lo4X=~C*WE*?&H2WSdFq~@jgoY58|iEdjR#CQtGcb z+5=6wN1sLcxwg~G)^pC*n~(M-=h}a-4Wxe~UkLBrT${=JDCMo8jOX^A!eov}+GWyu z5&oAl^H4@9;)QrOvUQ9lkK2a=^eV`OMHJAS4*7E-8tM1B=?vk%yr1ySK&Ah^`VjAA zXJi%OYxY8R3is!o#5U$JW#qB>c2mb`t~DVo8fgjj9V8-&{9>&$nuG$}w2`o0wQOah zXvlOb;5R^>L|mW3J2v4uX>H-f$gk0yL|(n(*^afb4cSg!yMV>;-h@yLA=D7+AOVyTQjo3? z2q=)yf{i8UFnNT5Bok&P2na-^ORtfoca#-G79Jv^bSW#M2#5%X(%n_C&;<8)CwDw^ z+;jGxbGi5b-S2+){@=Xd*-fG}w$ueHX-pscw~w&g0gNjk9)AS`7Ou@}g{S0OnM;JlEYb;LdNeJCLI z0k@xn4<~<%A!664SB5*3{^97=0UJfEsr6D3d}3J?D*}!{u&ZuAg!p7Yf|rR}HO^f* zTeuy;dI&rL-kJdmz(%4G3HH49r%-DE{we2eihWK!mj%O^Bep4k%Nv97Bj`4hqSz&`MooL|A~k@teLOP^MM@-gJ6@Y@V%4Ci~W zpmha13KkDAS9>bTKZC?RP+$|H+4%Kh*mi|{Kf~X_zgA9LT}CKFHU9^~V>DmQO??dR z!oXVEqjI)$oHtT`fVaT|e`85;G2~G5At?48-km3M6+r`R6hqq4_zdTtSuWHvbl7R) zO8ktTg)^p=Tj6 zl6uf`>GR_k=t~H}Z;?NZuYfN<=hTLufe-XNrni4W$zO49L33M(eBaBqMK}H#yb5_$ zaIsHVCYJhFVC@kU`;>eP`Ap&}cwMN^Ag_&!bpdM&_E_L)=;xoO%`bA>P7E2S1Ln~* z9qfQUy3I7EYA#}RSilbdBv>=f4avX2XVUX2nsr0CBgkjM$wD&%zaKL2g{*s9Wakn=3g-!uF&-T|`wn%Ft8%A5oLULm4b z2bP$M@IL%;IEV2y)G|5u)FHFr%+zIFXuPjWyr@y;+kT~?ES`sp$#>x8JF06DX;1S` z^3yaoVZq)smRIp5U^}_#4x-q{;Hy;lADpw`FGDjGjTz)YYeKRfe4Kp#M>(9NaV&)X zG&>+)23xMTj02AX8&2)0V(&4u8QuaP3%&>bLtWx$Vs%{*IAERi{5(2h4>`+See(5p zE`(eav6Cv4P8?0`1k4L8u@fJ_c@yXMcQq#drdKa_Mcxu1uqCrkwJ^2LoWMidVk;;zk@0_q46_{tBIqDcfcMH?Fh^So6iz%8smu#8CaJn zb_&7^{|J+b{#efv1uy& zZ|Y&>XAwFGE_NR5yb7kfmie`$uy#85NAT94B}H1XRAmCSbMObB~TMP zNPVm>(U8TTWymt=Azw~B#d$6McP`Nu%+8E#)jR=?71|CXAi0Af-T=ni5BbAlf^81? zNbu6|>f=8l(205ttxHR$J|)R7!LP$0v8^on9(g47dhk!sw~PKAM6pfs`Co@HSZ^_& zW+&&0G{!-iLt`>N3amN;pM%ZgJP6(k^qd2m4^}}1SL*F*fiI=U#(6Wms_^BOQSc^# zU*-4>_;LCAe~n@LD8@mqjQCC!%K;w)E;b)uOnnYDFZfyFL|r;S;E&zZU&XtTAHi?H z+pk3@I_2?{v+%`^g9mK| z%S54ZEC>+Cq2UCVA0JECo*Qs#kT*atQa=CbBo`5G1aTDpE##G)Um-6;Y)HK`PpJou zV!O#NQ5()VAE7~tw}ShSfu*QdB8n}ccS*>SNnmfm&w)EBz>v=$F_S|WWDn${5QdO< z17^%u;j=hbReTEh1$gUpQQzOCd~p{)tqtVHBpz-UNk$b;63yfm2D8hG=_574-U^Emu>77Vq!9QvYj z7v2OGa25{<{GQ`B@G9uN9ny12?q2}$4+`Nr$i{|k7&e!NppDb~2Y5dLuBDzwU(jAg zv^3Z+Xe?l8OV#QGClk^U`u7q$<8|RZO57!j$n#$VxhY-}ak0S^9@5Z)yg&F@6>CJ? zLv10vc8DxzQL%x=!S*h-1{8b7uye&|&>KKLkI=xwK*?SS>h%z!$UNcv+TVGtg=V-ixzebr)zHL3~SR z20s4@h={!jxJwI**luu;M6JAXgcrr28~8ZtS)BhvoX)V%bU-H-aC3f7m$Z>jqE=rp z5x{Dqmqxwt4udLFc*vnZAMthsv%&8p)Q$WH8fxeQb%?d$i#LxQ;Ex*eJ;)T2e<9SD_%|i2A)iCOPtQJLQwD5cv2R0e zbP-<7kaJmd)-lip)(`Hh^tBoJ}E+~L=+oIo`Po~*b;ve zti29eMl9qh`1IUc1%HJzl%58h)5s@Le~Fj`CYH!zHPIRjzL4R)MP~vb!kJtkrs{AMf4`nX%B5A~P%0J23#QU*KGkV2ZaXzF^=mpOC zcp5sfQk3Vvj*tVXrVgKjm{$eu2&Iz8$fHB>H^qzK2hBxaSL$MmSVn9(1F!Q`f)+vF zF0D<~Ia0ePe_4zrxuxVa2-oKvjdx+-J#89A9vk3nnX$b^59|GsVY9DA^eae8Oh~r6 z+zd;!b4W<&kZis3OW2C=`hA*o^qNk;+mqKM)#*1|JCYKTlA9znYm%7YNNmwMv3a9} zmI(<~<-1|$%7qUtaQm&hrHt+Nu+*Z_kw!!7e57&IUfJO@vkSZ)N0#YuIrCg*j??SN zv5rL>jcZm+>E5wZT1sjUTgM*hJ<~e%A+`8VhsBhLF!P4(eaB{dB&hj{19xnoZXRev&H?4_7j8aiyX3_DljTmdu2xDpVK$aZnb`3JU z9-kxM<8|bkzQ&GxuR9mSkpq~!cZJV^hFcVT@wSv~Z$bWFyPSJBd;VXWwfGI=TIFiF z?mR9baz4LP;2_M>xi(9)-P)fPfXQ5PVZpT?{s9OI`TXYGtcG8 z^Lw3HPRqZ`Xl6LlJy~W>;K{gi^HKD8ox<~ZxQ5@E<*~l}*vKpu(=*@K7pLTC**PDaz}P&Wk-(F!E^STd@Me{>2))g3p-qcoIbbD znsUYP+soCP zO~Yxl?`@j7Y&lZiR!V`9f91=Xc?IS$k0YZ`nk}S*f;H+FW0So~Myf63^D@2Oy<753 zr`7e2(JCr-pvxV2!~W+Lv5F$>8ujH?2Vh1?B^){yNBO7YaTAAgoFXfmTQWAY>EE@Ow;1D delta 48552 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 So?w;~+Y&>}hcj)jhyDkf@Q+CV diff --git a/resources/i18n/fr/BambuStudio.mo b/resources/i18n/fr/BambuStudio.mo index f038cd67e06a446900264ffbd7cf88c8f70c6096..d73ecb1db682499828e93c6f823c9a197b63e329 100644 GIT binary patch delta 47929 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 PsnA&;t*HAdr!xNq%u0no delta 47811 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 O8^<_iZye)P$Nz6VM>!w> delta 47057 zcmZ791$0!$1Ml&>+2HOD36c<;;2PYe5Zv9}{o-0QxDC z|9N}P_A@hg?)c2zEP?)cD(=(Maosx!{bxA5Rz`Q6)L5&m#Z>No;_naXw~t9M}1qKn@aOL^_Ta z3t~(xin*~oR>J;R2#;V+{DCPj#~#OtjTJBz)gvaRNqSIF{eIRp9C$652ym89x(;PLuE{X9WV%0@l@2*EVu5qo<)t!Kd5~F zq84eaqh_Qsp~}y0p2cW*8JT+5xlKSr_5?HIH_VEePMU3019ihGR0A)eM(iJ~ zfS)iumON#yw?g&27gom=s1f~$y3aXn@+HQqYGOtLu}SZNG10Y-$5_N?V02uJ%D2YG zcc9kH0W6N^u?WULV|GIo)P4OiE)K^yI2F~Ag^Fv4HWJ8ydocv>+IXz9W+-!_8deRX zVtv$zHA8>wiRxiLOpe1*4WEZ<@JiHNZ?);iP*ZyW-OU8N=S)wwqmIzys5!ikxzO*t z93d(S&NB@@4UkJ zYiLiCkN~e?B7BN!`47|(`du|Wj)(Dxr$EhZ2x?A4Q4KAD39*Kaw?f_D8+G4s)JRN2 z9r5d30z(M|Uo$;gg~JrTPVaCvZo#ED9H$f3y=i)Q1iKS2c*`8gYj7m-bhk}>84f3& z;*R5t!uhBMr~k|BmaM3TxYY=#=j~A=F%aY8Xw+hxfm#dmQ6m$HS_5ZM_ua%~_yRR` zQT{gh(qdBLp{VjI+IT(GInWg;-*tKu(9jJ+6+97l;2hNIu5p(z)FDhW3BBO=#>(aGW-%26aQVd>HD+DX0o(pek67 zn(Ixd5jcW6NpGQs_N_I}eKR7NQTG)^m0tmqP`^{3z*_8z8p2fnm>cq<3aWsbik7JB z9WVusKs9gyYBjI39z-?d3Tn!pqo&GvU{2VCxP)jCbkh^KLqK!odFVKSm>gAMVN?%G zqE>M&)M{^znu@NdMcE%i@FCW~_>assZGnY}FG1aZ8>8Y=^v5@k7=I1vM-pVz$EG1k zaSHM5*dOu%rNjNAfp z<`Sqv;4!L2`CjnG_85u_u@GLs{22SCskk&M-VZhR8!o6APeQhc#f$CvzRD(vNo)NoH1ztuKbQ5FaQ|rGr-T#dlnMBr< z7>|5`$W*vaZUSm~8C1c|F%u5P7`PN;;(FAg*@+c#FX|Z)?X8JtLiMaGDt$a^F|WdM z_$O+l61+3JBM75u{}&~YfeU3&8QNhY9BkuLF%Iz+sD^AsX3N=+n&WlvP0zPt0^$cT zAznl^=ppJp&j({{)P2b?rS^Y11+Xxx<+V{g?TH$ZeyD<{V`f}|L3kF6;78O*g?=>m z6-7-=Nz~dZkJoWJCdDrQnkgHFu39>sKw?~JFYG~OJc;q~9;!j_Pz8TNt@a%e zF19D01~sH(Pz6s$P1$@@N7i6+Jc!yAH?ROE`^xwyBT)UT8OpY(o-IXHxW>8-eGNmc z-utLE^A1yDvTtV2LopHYvZ$%7kJ+#O`ACr(?8Z`y= zQ6tsCUhj!2aHw@GszFmwQ@IuO*!}~D;bT-e9e(hU9tWa!g&X~+skl0-=Z#PmwL~?n z6V_5jJc*Z3Q?Q61Mb&_Hs1e+X1Mn2i!15lC@5lDrsC=3IJieb3a$zRoO|ho-|0n_t zNVta0Fpt;cJ5Z*hR{c^ug4H={=M zFiybh7+w3nbu^D}PPoE}5<{DzG`L>(|+FaT3WH~EU8PQ)6hMcfQk zUI$cz2BA7KMpD1Ch(HwFg}QM+YP+35wfG`xh@YSu;ECb!J%r+*8dw0e2pgly>4(~e zLr_zC00ZzissWEtYvCQbI#B#$ni0s3YCthmfmN_5w#AmX47F&Y$MQJLmQx+e6R#QD zMP9s0-h__jwzRD-Ic zde#KBC|lWhU({+JY@LQ0v6UEvdr>3skG=j3RlXC?qzA-vJ-+=IOoB$D4Q9p3HbW$; z0f%h-JZg7bL#^t&s5yROi$EhHF6Hq;z!ifCP`@Ob#oEW4HZ#0 zG(%D;=8a2UPg5+ zL2@(nff$4Oox%h(^kq={yQVH+6V%kSL#=+-ULS=z>!;fEZK#omMBR4;H3er-)|0l2)W=mz(#$xP5d>d+H(x)~J z%ZDnrKC0Y~7=pvF53a>Qm_7~rUqihxjoFu5Q9ZbXs^|{tBn(gMak67Q%!s2=L%G%( ziOP2pFXK7X$gN0co+*1#<)#fVi#9VVf2jcWzZO$@5_~5XYJavwO-TpTZs>=a%Ltr< z8_~CG0?qx+Q2D!~&IK29;23*-JF4Nw(Zk949K(sfbklo$pV3NXFfE#l$~YYZaTjjI zo2aRnl98dOfbFRGpP4+)9(;{j1M7oKIonZdCKA=LgQ#tL%EtdeZD02l0Zl=SU~^Wd zMfD^cwH=$=csEo-hM+#t&RVpQisXE)amqHer_8q%kj1>a*id z8a6Wr`+qutc_ggITsh4Lj5}DKc&1z?-WfxQZ$)jJM_37qr>qIs%n%8ET4lq0WU< z7=Vva6~)N!@qGgtAC+$|YSphtt(pC(2A*>XXej1d>zpT`0^XrkcZ|ZOhe=T_ z%!;b0J{G`sHogc|&_>jDJ%GCZg!MAcAbt-uV*QGkk)4RSiO<7$+W)5ssDRrx!vpI( z)R1|Knvn@W&1Ejs_9~6)Q5DqvZSD20n2Y#u)S}#in&LaC`|hL4d5*s4|4#zyVT@uP z-}ivYQETA{>SQ~I>e&_4P~Jxk^#_~o6gNX22bC`nRdEiRULTdeGiq`6L#;6vU0s++ zKrNh&+P4c(6|F?yDo5RT%3i;Sz7ezW2dMjB+4y@@xj#^ADn^+3B$WaS5-*8bqyxg( z|0@VgBSA-Jp%UiCMySQp);a=pKrKWawL38*-m>YQl4cF1L=AB+R1XWG7HfHXy$NcB zdSNgQE9shq)g-9L+c6KGK<$ces2f5{nS#Pl`RZUHY=;_&CDt{l9&bkNf9vi#oHzPz9DkRagl%w2e^>>4@5115gc|j9M#m zuo*5wmG3EQ%8h~=!T4BT`#(Ja4b33jg40n2Rw!qB*4WzFI@mf9HMa|_TdgOp_fTu< zGwR`#y1ZFC6)+p|PU!pmKZihO5_X|(xMz)0!NfCLE8`cgcR}^MeMMtG>lo`y^qq9p z1J;|?k64oX6I7yuoIg&u0@%{p(>elclOBPZ!zZYreT5q8k2da9HX|4fHPq>BJOirS zBB3G}R-vYH zyY-Cqp}qbCH8QcQnGOY4WB+ThWhX(aw;-y(DyV%Nj{20^2-V|0sG%Q<8j;DU-7&+a z&qbY_tF7CRhm3O&wfgU)^1rs%KU8D?>mlK(ZZgb5EskZ@^VT2MtiPE3To2WgE~ti% zLv7z_s0Ob^HTWnh-&xc)e~QZg71eQnw}#0W4>flwP%TV@x*b}9K5t@o>pu2#8TCx)LwA+kYEay@C^aZLxKT+p_ zf4KR9B^v6!T9^Twq88f-)JQ~NCR~T=@dZ@=o2ZlXA%wnu+SsMpOeLQ6q2?1MoVk;x8DCQEHnGWXIBa{tqDVm<#)GB(AJu zD#%vXm{%AB}40N>l^4U;^#`g9J1r z7g19Xr@k>8YRD_2dRz^=VQtjZ9K)h`&Bl{7Fl#2*S`a&My&|gTTTyG^7OEky(bdp? zBcP%8Z)i+_0mRdydK`wzR~V83YS)ax7Pu94U$RD~;lZd6vpKLjR>8bD zzY+Ui7tWIqgs-p~CT(mQ&>A)8qfrf@G8`pI68*~H{ehMJ-b zsQmexu>aMQ3M8n-jZgZCl5%Kr#8B41If+uPKfoUu_;l^eBv3!+A> zBB}%7_Ifka0oK;F7dl%9pjtQvRnT12Vq1(Va2=}Udu{wIW+whOs(~?@nTCa+8kQT? zp~9#|R}tBEPFLo)KEw5 zV1_CYmL(pH8v4$t28~A@F#D}pI+|@Z169#tyu{pZLX|tZv&X4}ldu>*=*<4tkZ0&( zZVa*J!%3u<#H)A?m*J|e=Ew1>-8{bE54ebGXshmK>bm1E#QUPw&Izo7S5Q69(8KJO z?5K{{>EW8~(Sn40By`76T#4E?H&8u(g4%XbdzyU7QM;iUYTI={J)Xy-&W%H;3O}RD z@%Az!oDelK8BimV$0d-JKoKmDZBcW&5j7=8P;++~)uTJ8hCIhT_yg5|$lj*Fo2dKl zV=%tQ?wGod8L3IAiszx8uI^F-S~R;*9~91`R_kL_#%z5}#=NLcGL=w^sx<~MxBYNG z@j3lW&+7L#4Qh{pq>n?Dvli9!EvVge*rdD82?E+?=j?^6s0Q6a4c&XxTzLnWeDSa^ z@uaA=GYK^!(@_PlKn?v`RK?p+74JnoT~DL7?Q<-v=YQBhvrk8%Dq3pYh#JaBRKcfE zA2`mV3Vv#@zqN7iATz|VQ1>NAt&tGaC#14Ay*+9K2Vhj{cP0|h+)hW${SxaAR6(b# zw^1K1U!q1V`e3s*;-Pw&95rH@ZM*>HBwpUy7j=HDv|dJ6bM75tT9^_QFOET28`Xe8 zs3UVCYHAjvhJF{S!u{4WsD|9OzCd;CJL=?&#ctEHCMjwJ3%Trn-Jl=CRZ$I8&sx|F z?NN)aJF4fuq6%7pn)6Ml`wpWDzJzMnzt-=l{NADFN3OV7fcP(%8OIJKgXUrr3F_ey zR0FP|*1}(?9zH{D!!M}q<{f5wkO9?ztmubD@e+oiMk?`evv#tf8j>3|#YIsER}Ghd zMxcqk(8b0_pbCgU9YAYQLwN$#uq&tn?qODZg&L_;Bg|ChM~y@S48~@t{9{quat8YL z{|*A`!D&>>?qErLhg$XdMw*HXTPvUnu7kR-5o*LbqblfS9cI%fp?W^UrY}NOydIfC z*Evi;J-dv`cpo(-FHs}l8D+Ln3RFBFYQ(CdrmQjQ({p$0TATjB`We-cIHS$TB}7eS zT1=q*A51_kDui17)ln6-!4MpRs&Ex*Kkq~>o=d2y`EJuwjxke^A2sAPP>Z%ds=^4= zs-JINhKaQQ*AejI0o39;f~xQz)R4YMjgV)oIoaZ&uBSlX0fWj{7FA(Q%#NK<<;_J+ z?QR@^XYm)TG>-jWl)yX!+D_L{Eq#hA@EvNdo$fQ{jZAtB|!!IPcUKL<4hTTo~F zIn>aERSn+ps2@hNze^n@i4}mXyRv3YvMMl2k%i0`HUKw z43kVlLae1x`5L3jYk}IX-LWYS#*ug%%klJV;Z8Q+@vNR=3jB$BdPSLPK1jqvJ#@;U z(wm|RY>$Pow~cQ^Ev`t^wmgg)*-JPW@7naH)67(LL*;Xa5@-`R`!`e1|=;=ycy2a-H7^gpzO)Rq+p0 zPyA{HMT8NEtJ!<>LnrRF~b)*2QyfQXk32P9qi)zqnT&VrOn?N=a z8qD%I4RH+S!TYF1m~6KBg@UZ8?bHGL;&{}y@|$BuC>g5Y(x}~03$tKX%!hMvKAuD0 zi8+^!QoqxSfD#5-N1*0-Jg&i+sGgLZXNI&q<|N)6wa=$w4&0CG$V=>nspgvoO+hWj z#dr*VN0rxi0sFr!fx!fn;V^0+UqJ1Od#HW<3^kzNN1eC@hz-AuIaH$f-0JfYWV_GPd1OA*v|se{^f-B2Si1_N*f2H|nk z;(BT0F;VtAc8HFVx~3jq2Du)Gk?#*>S&(yDtdn8Q@)I_HhXuPkajMhE%If zg}G4;tAc7+OAN!|s5Nm2b@qS4P8ffUsdzAIO-(?3M4N{JxDOc#*ZGTp7GI3D<|9;c zREtxgc0mZLNBK}^eR)*FTA}g{Ks9VEYAr29ogZsZL%$hI;ZfAKj=s)(1}utowEue% zsLh3wI0OUNn|-1U?^Ba;KQ2YBR?#H*NsoT8GMxp>eF!tdwn#jA+t~i z-Xct_{lAfbPP8Maf^MK5tIurwC+Z}Of77I=#@NJjp%!Z~)JRoFjX+aWIjvDAWFOQ> zj6{_)8P$+^=xP-&BcM5Xgz8y_Tc&{Q7?pT&)WfMPs^X@of;yq{_p|ZgsC<)9NA)V} zQPi{H9_qd?s0Kv6&Hh&b@ot+Qq(IGO2&yMJP*1zOHeMZdV{O!ZO|0!u_w_)1TJDPh zI0aSCCe+mIK#kOX48*gy+5Z}%HzcU1KW&DncT7AfYO$n2Rrmr`z`v-5Mf=M%D7`f+ zs+_#2IWB_AUkNob4NwoIUYHffxCGRrEvSrpP;-9@)v&*@EWWhyynlO~=EO^(@-0I> z=XatGrqfs+1Mix((cU@`m2V=dVM|cuyPF7T==P)L<_M~%=TJSofjXi;pc>D$ zQTZyO2g6Y(X>HWwxIb!9PeE0@0yPDZs16^-%zFNxA`nEv2h?1pzHb_o9@T(gR6(Us z2TMIv{^h9Ee+qSi-a%E6{2!AZU=2kb#br?2u?4CDLok{4{}=)ql7*;kvH{hDT^NAp zFg?COH8Al5Q&CD(LFsWbX2sli2eqx^KlC_^ zJvC3cfv5^DqlWAzCg;Z2sGh}mZbl{nYVMMvwqr)r2<1kNNO{zDu8$h288&?nYImGL z<$r{(=Kec@oapz$R1k_f!3v;8qzE?0a##jeVH13T{jthRkMA#=9>a{pE50(%hA!BO z_y$xtiC&whV_MWMX!x4_e~~~J60~|ty)g}#iCSFqP(56Z8kxw3RE3vN z_g%N~zpW2!`cu>{d4n183zo)oAAD2mIxPvzC7~OtrLjJmmZik<#IvD#(hGHc3~EGX zqAFg4Y!YXaP2Yl=y5p$)&rrMJ3##J$|C){rz_{9|g9&I(e?=8I4YgY5pcdaU)X;B2 zJ=G4Pw%;98&z_^shYzT8Bl#!Oz?`UtmqsnlI;eU&p%!Tm^!@q&uLRPO@EdAq_n`_t zhPv@AYUm%JrsOfI0nhFAFQ^8_|7`LHpyK&4n4u|$%HQRS`B*;)b&}3Qw=sdo1S(;< zujV7wR8-IJ<05>G8se$n%nuk5SfBVU)Ke_~cXRT!Ks9hWYO&46intn^;XBln*7{+l zWd0BKzqZ#k5>(+w)S2)7X?l#8v2^3bD=A0Wcs7>PezT{8q})Zf@;7~)JR-G z4gEvwbJW^+`_nZyYJim?Ch92|A4g(pRL>V%m!ekva#a2`sEU3^-FFam#Gc0A@FD8l z809hdEkKpG1PkFZm%s`Fcd(~2`uX|3)%uJYy1HKDV$?`H!|E8%-_JMHO;P)~C90<` zszH-cbG`^QA{#IS58w!VifWkKC5oSK=tg5@5+E}!>9(FMlJ5YP>cN$2I%=8ExNfeGwKK~f@;|>s2kg%=6V3C zhf`1uT7=5C2emdXq0WUjsBIS|hAA&O>i+Dw5KCiPypI{Q|NUb6`4&+S25_MyYN%Ua zAdW^2-6~WME?93^@1ZJuidq}rQ4ROwH`8^pCdRxNhB>eoYSAvmfzVdNdui__knGJcWfZWn4esXUN*td64$66FiSvRJoFvIWB^#usXKFR;csi57aiif@;`3 z>l=IBNovyLpcZH9q^_UuEDj=}3<)K$G>$^;&p&KNZ!$CVaZm?V0BW%nx7I|hkv5nO zr`Y&j%t-tZs$sE{`}v+R$x-*Ga|vkC(U6DHabj2hKfIMXymK6+68#5Y@o^sO?${wf`HTMz{xR=trRM_kU&) z(0*NtI!Lym3b=q8>er|OqGvGiw5aEOemsHo@gkT@}gFM9n?9|5;Y=yP$Mt_vtk6QgZojt;}-h<{Qnt&022Ii`uV=k%YcekMD?@- zYRD#{4w}WNxjuk8`;VhW@G@$MAE6fICsYIe%;m?Ekr725;nQ=Q5nYy>{jVE$lc4>0 z3U$L3R6%!8*I%J-^n{x02~g)j3eqI$j_wfYZXF8m8i>iHkPxVcahwMe?67FQqC;u?n9eiKjyH3>6|tS9y& zJ_wuR8`Lu-yo7N!Rv>;G)v%zFCf)^W65oOKso#lN$~+`mq2_KJ{({?38Kagq52O01 z21Z~2&P6pS(x#uoTg0!TrfO>$^Eu!sYQz$iHBZ$b3?|+heZT)Zk$`TPfy%f7b>i)^ z>1R=kt!(=c0rBQB-A3FfojkJREKY) zwsAtYil0-8Kp9j8V^Bjh3$+LrU<+J@nP_pWs%CrTu4eLAM?D3bqSnGd)b^W#YRCrE zt~!JIobebnl`k+3x*rH!Cg81Z3b>9M>X)bhU%VDx`^8-s0 z)b%x39{)tmal%^WDVN%s6*csQQ73Iz%&+}FhJXs#hZ?Fo)=xG)VQn)-p{Ui|8!O@v z%!wyZ1%5&`JboRsD*`Zpcz)DDR2S8-E~q2EANo_jGoFA7o{TDRHfph)z)*aE`!RW4 zGuPMf0P**zwXv<9DKL3`Q%)9CMR`ya6~o3@9h0zz*4y;M4eb8EOdyC1w{aQzH}v!U z6Kt!o8S&h+0P&L;g5Jh{zCXpvj{S(csE=-+P!*49V%F3gOi9HXP$Th2Q}e9( zyD9ts4haFx{G3Mk6Vqd(=6qP>1{ZZ8?QUTXsMDzP;SNUPXVfa**3zUOw%$Qazuc^;R5DsGQDDCVLHI*Rr26sn-0wkBT=RF9jYhO#qi zN=Bj@ya#m-oWl(G0NZ1XcIMM_Ppm~eS$jrYBixBVLlXYzV1B;O)X~rPH=-7xD$3Kz z%vDJ&L3|i$ZV#aqHXJ33kX{xPuz9 zPgoe!b}={BN8Q*Qb$y^sUyNmmuf{NZg?bF<>}u}oh3d#4)X0uU9ZXYw*V%sy2x$8) zN1ap~PzOmQ7DR71Kc_VoMJ=8ssQg<{Prp5=MR@^r{|n5IUr>uTcXxBW3~EZ6qB=4{ zQopl+fELFN%!hYSM`+?6X0a4Pom@3h>0?j@t+VlS7)bmBszJ$mnnj%*wVUdq&XEDA zsalU3!9(b(;>QGZW4vA_Lnc&D3ZsUqJZjFvQ4gior~{^(bpUDvMxqwwLewhXj>>-) zwN`FeU!wB)^=AL8pcK7Lff-PXCp(5?Jq*Bgs9kaz>*5bo!|U`hJsFI{i7&+}7}VG7 z_nxQ`orXj31gfFs`ydDVgb5hj-<V+=Fb%4M8i_Ti2JAug zg5Co`{ZX5xUz5tRiq0RY1R?X4}n1t%-{m zfKRXx#vJD7Y``+O72ly2*{b2@JEW7SDgA;Q(SL;5hFeinvj??1VvO{Sl)~513?x2yl=%pi)v^i)YSAqjpRsF{)wmtE=KK|Be)MA zV-h|8SB^1rwimU(FQew_A*#nOPz42#HQT5N7Ndb(umNNsmrkf863$O(7Td1K= zGs6^=0lmbtS#zO=G%sq+l(O+~8*h$UbUjcVnt^KI277%wt|WfkwFzBknjsmA>cI@u zkgr0m^3A9Mc3AhLhV(d=!Mmun5j4w8VK`=BO|?dKWZZ1C7$>6|v<=k(_Y48;%Ujlv zIcARgU~JMSVp^PwT9msm5ci-ObO(>(L;Q&A=9-UkOXrynoz8p{Z-S~P5}RZ61-|R9 z(}6%ONcZ=Dsp&J2yr>j5?vFawKXuO+}Tz0bLErIRYB0C#aS?t4s^yqZV0K)PYhKvtnIT zz7d!SBTyr>3$=JJq0Ws*sPiDoYIA=93?p6w&fGf8QM0gtw>yzGF>{ zzs`IXY>C=NYf%TsCRBktZTuXn!B;Vghmk}z?A3acKl%pK@OY?^&WP%05to35qB3fm zH9{3M5H-gWQFC??b;E1aNI4sA!KipV8&8JnSz6STgrKIP3~KkZK&_3AHtr4}po3-v zs)rL%2SWs^VT)1QX)}i62@J=tsI^i3ck^9udn`b_$R=}NPs~YtBx;1WqNeaBYWw~` z%5$CUo6Uu0sBJO=wT%{{dbSqzklBJN;3{g0zFB8qq9U z&HY7DtG_9h)BYbuKtp!IdJ#28cThwB0W~!Vx0%J08#N+zP(AB}8tMpC12)+7GpLdL zfa-{MyIB*lP~~Mr-{1c!O+Z6g7gce0)EtdP^>h|$iq@cdvK6)Xj-l4b9n_-CxWmkG zR#b=bq92B#8c+(gC@Z0MT}$*m|N9cq&`v}R{qLv(_uxQ0j4B{(r|D67R1a$7Anb*i z@eRJfl)KFJ=(|k^f~|$ERjti-v;Woeo+QYL)|J+SsDf`|ZuE~d2T*>@OS}bU!&#{F z;0S7NzgSc6G4bNoW>}T&IUKdt&h2IYEAV`;G5S7ZM$|!3!rIz8-ntRXas3i%ic;-2 z=CGEu*1}#~Z;KkiTc}<34{AFJE zS3)h;9+(LyV`1EeCF${N3?LqQ*!(~ej#@+RU;=8u4Ai1nh?-?FAWZbqmcX4d{6LO=zsv==s^T6`6?jXtBM z!vBP6U$HMeb0pA|cyMzR}fYQ|$NT#0JvH!MW`PW(S?LD-ylebmt# ziEZ%|>R`$Hr+J9fLRH)zwTSwmMq(^#8_&f6+>82TbO$w6?@$fWrc2qK0@g=ED8h8DC>HY;uN^(8D(y7(x8qS+m&2oHHNIrl3~) z3{;2Lqel49IoBjyBw-c_k8Q@G=gpsP&&I~2Uq&4?c`lfSG(%qltuB`0`c%wHhS-rE-w{KC8;YjR`e_>v% zan&3sqcJ=2-?1Uy!O~dxnrYw=R0Bt$*3@)l1o`{F1hnrjqlV-;YTHD+Zk|?wsKr;< zTEV8*K{dQ9>InZ8b>AxMAuLJ!7HaO(-Z0OS{1`yIDMr!$A4)*0b2O@DQ&2tLkJ_gv zZ2T5#kv>3er#Gnm{u$M?pVqiHO*{?idNvymMK!P_24F+<{r^7(5zx?0Lk;l()ExbT zTJ`Ty&uz~wvshE2c0o=XZ-ybnd!t5TA?C+OR72mQM)nJ;0ZDF~j^#w(=l{|Kw1^sE z5VpjtI36cqi#vP;!}fZEaj?(dW=KcgH4U7Px_>olsDDR2oKB!d<`HTnKB5}%4KriX zd+h&U0%7;eK5mO;h;K*T_!Tu0G4I<0#F`P+(;TSPT?w_i8>1T14z)PDqDEkubscI% zx1tv5!Taq0wgl4rW46~QtWJCz_QNO-OiPDgHR3B#4gQF#Anil5eZx^hJ|A`cB8K5t zERRJVnaA-6EJA!A_QEeNfj|OXADbJdqT=UK8Q-CHN6sf^@s&e8jB28K+!wVwhNJGA zf?CX*QRl=SRQ?MXj{n+t<)@}YZZ`tsxv<|_>6zJ9mr--}77K8MeZpwObG`KQ{e|L! zsDo=e`r}X3iRk~zm=v!N&x}P_Ge7YK@gi@`_l+TM{hUqO{}%{ou1CHz+b#mxmCk%j zjH%z7uitZ{dO8dBS#LS&q`Qe4q35V6@_sN!cTH6KWYp2U0=4)qVgY=C=~YvvkLIYX zfZA3at@BYsd>XX~ub~#(V^mMS+Us%t^>a!PPmcAmK57?jK`qi7sB%7{?)Q8$>51{D zdYX%X7E`XzW{6v(_Iqc{fum7Vv<=nc5?{GM#&JWXrq^N>JP(90yS}R3S+piSr zvtUKk6tqQ+*br3yDL4}6{b2uV@dW%dH)KLpR2sEUt61x!3TT5`<^8ZZ&c!dEv^_}rINl?YFP;>nW)r06BuWyKhun_U;r~=2K zhHxHgB(~c0J*YW9V||J`5u^GU)1n%hA5~v{mw;N_0=3#Zq2_29YX8nhEy~T98}DOI zOyV`^Wl;_3gL;Nc#&ozBwM%ZJ%1z|&^{t)EsH3?MYS+2-2&kuRQ5BCu^C@4^_@FWIM9|38)9pF)K!iYUVCC zYB3eH@zU6ccs0~Xwie6aPt?9H6U{Wd32I6Pptjp^>kL%GR$*q`gmJY0ZxGNbeTGdtv%%}sX5-PnfYJ_K? z@A8R7Gj*HNqZ8)~SMCi40|Komn2I2e_08?MA_ zH~@zx_WJ&=_g7Sf9g>)a3_~r-38>)=`JfI%tD`7jlm5T9@3Us0<(YD#+U;d28jULchjiK?jcq#f!Y>WaSq|JPgs z+D1!IBXAIv@eXSBKR}&;@30GcQ+s{?jzhVg{ zobN?V!C@?hw^1XSD!o|)dC*nHS_Hab1JpJP*d4W4Q)Kk| ze$*;~8oA-9$L~1Q_30RnkysAnWipGkPA2w$4-z_)pegtp1Mw$n2m^ymgL0y_T>)%` zt}~ZFs2>GkAlvC;Ub6;1efb z>!7x22h=JbVAH3e8nOaA;u)J>xS$px`>z@SZM)W}1EvdVD6iuae2F?*uNCt8erSA! zS__p6n+6U;t(kq8UinZX`4w|vsv_nYQw8;G>5n;a1BOw*bBBO#Ok32fg_5W#>4i$4 zf?DlcP`l(0)P81W^Z)?;nTChq0*W8|ni_^txVWA@LEo05jD0I@?J<*nq`@{TiB&Zl7=s z@p6s4zF#-+mZGqIue|8oK=s6tb(QwmR@_GzqUW_$I; zcEq=0MNHG&>-%f;Z84H~!4_sj-eVTxNm`l{uLKq(ULWh>G*m~Q*?6i}UcUOF=3WFe z1-Gy=2DUZ_PG{5*?Z(OY5Q|`+HfFJI#^J=zqPAnrw&oMj6s)0iJc@zsy!>Ag`4$Y7 zZ)_t3XXEXHEF@*R%jK&nj z?m{`3xGUQX({>Ky9X@D){Hx?!fGY#4)hKGgkTsFC{x z^*Nw624N#q$3~zUKF;VmGYF`_#i%oX1FFL97>IXmx_7v_9t+jrM3@URpen9queU~x zRA*EJ2BLPuaMVL+;s`UPi+r;G4iJdRg}+e^c!p}wJJggoBaJCgBNK|6`?^>iyP)## zLw(LaiJIGosHfaF)Z$Az$_#l&oIu>gRNDWsMw>+uj6;c+Lp_#{qY6qh#+V1ypo*9n zTcGB$FZzbmUY~)fNZ)`O$v;s~%MbQ?)v=~wZO~Q5p#&HqXFg`e-)x5Cs2<%#<@<&j zq2%MtoCl!Jfh<@7d!U9q61{i`Ro*ew?s$c5Fv)mxk`5Zr{#U^}NvMREP*ag^f|;u< z)?%n_^$Thdc0u)c8fts~hFZ=0P;27?2H-u^lzD$O_hm-yjw+~z*8Y|4q5a;7gnzLk z7Q~hly}sXyosar`p0bm8++yX)UgsItuT0@XChc(KsERpYJ@&wHjT-5n~>!_J2TC4PPpYEUL`N)y!%*8Z(s~%R22NVfq8fG)wF|DG@8AFVi-21C z52|I)tgmhQ2h>o1L+y^Ji_P;q47GdK;Z=-8ZNG>mrlCu*9`U`X4kle{A3mrNuC$c> zuZr7~;K6RF1EUA##d)X-&S6FT%NnxG^rR>1?C*mrXAJ5no`f3ed8m_e18OP{V|u)b zT3cV1x#qx$z1%$QlA+G_(x^FWVC{iw@p#nGtwt@n&G!0L)M9&u8mWL4rr}voYo-ut z==IDH15m4bj*V}&@$;yWxy8KfVR9?e&9&^G6qI&=@MSJ;*PQWcZ&i4k z7J_|sqQ#uN4*#N`(?W&u+G(#hkEe0trM<5Mqz;9oCi8Ek4Ag(jp*lZagYY91+FDLFq^{~&&nZghy~J|U62hcaq# zm46<{3E|38>Re5(1sXP91Guh7gUj7ld?_5`Dv{T7(n7c|2jMB)bAsCVN4A{fr2o!+ zg-O#ZJ!#+UJ^zrFkZb(Ok&{hlVs6ERC*C!=Nw1OQ*-ZY@5eI)wACZe z3nS@YEZ+R!;fx@@8}E{*Iq#kk!zL!`ypYs2>Vk26z{6!Jjfl*cyoi3 zhj>xcp@da9k?Ogjb1gqTn|adW!qQ34h>zy*?sIzQ5I;mHa!%Q;~!h+{44n2_x@e(vnf< zbo~|85_u)ZUR)2SuzjQt<9bTsdQCDo-DyC7?w?LW z50R(2ZJ536EaKjtw!At;$*4m-kj#4V5zT2#+FxXvichJa0tH+%mz`fIa3$f*qyyc65>H@JtmUhBwngm?h= z>b2^BI->Xh+pzECi=<=k$yc1AIYj&k;rSlA@|Hj^JAM@?>^3(BlW8Y6PgN!fnUnRY{ew(~;xYm}io^k1U>$Q)x6y*1#yie*ihVVW}xGU+ybu0}e<82c8N8X%! zzT3=yCcr8RsEs`8oXdpI+nx>}e2*~yBCYRrg!?NI51`OTr0l}~UgcB=`7_hW?=~^L zz3$GifiqlqM5ftTox)zx!qm1h-Sd@v!xZ3kf%G`!S%_;Xya##5^1i{lH}A&ey+po^ zTyKXZ)BsynQEPtEc$xpl!5j+Hj}RS6Y)1ilMIk(&f?i=N8panm&U)Sn$+z6*NoxyB zXVra|d4EuVSAX*H+1u%b3+z2gpF$Zosq>J39!3A(s~QEp;Ju5anzm4V+>9WzK8oa_ zAsHiTL?m**QCt~f|Gj$uPZPRR{BiC`Mp{Yo+#yp8((aO0gZDi<=1=X-!)*M&viQo# zc|-oSBxL1&9)P~rBGU44jhE}JC!*I|-iw&oH&m9JwDL4;m&xSxp|aD2qw*eWD~U$h z9r6so{uG{@Yx?1(ChzRrUxj?_xb}kZO5QE)))>TfzIb)A_~PuFegv+Q5FaPn!R7ac zoCXvcn;ZXo4dmKZ;$?Ubp^>k--jGVtlXolOXq2IsOZ+(D#9Ui!D}79QM)C~hS}xL# zVOz?mrazl2W^Y_grlG{EV-_w>Q5!Y)R@7T6sZVCc?_2+CS!%JI$GVLUu&}M4Gb^iT9r?kCZnnskcjmky( zW#Uh5;kx${`MPs&4DuA=TH^mHSJ(BLOnPebTVM<|8ROYj59eZU;-hVWd&#JmheCn~ zC!*lPHcjdC$g3B>+vYSU&ph5&?e%w**@*BZTlR7q`-5rdVs7ET%zsmE;3sY0kK~29 zxSIF{ZVI*yI7Yk<@l0IPPr*q@zer`3Y@u_xu2)X3e<$3AJb8Ji<({#m>(7t%de8Nt zyjPHZ7WrpIef2x_Yyqz^n;r5cR8W=cMXBr(8MAXkN!uV5wwQM#8W5fLee$m0zMm8v zVJjO)T70fmC2cBU-^+T1^t_bSnrpRV649%VZG^&iZ8#^^r@(#O7{+@V?*Oi+<>sHZ zFV<-m875IeU-GyID?vp*z${ztGquyD4hA93hUZ&?a2+XDL5sKI!War z+#E=OuOhn7PE>3Mv7F@ila$I7Gk_eY$<5EUPHU`*ZMicwd1~3Fr{B^D;Os>1 zVw)P5x|4Aw9rXrL68{9e^MJec+C&L@y)-y|?L9}xKaO`2?u|}~2e>CDc{ADk%W)0& zjN)26-b2V6AN4wB`szCC2$UlsITw>tu>KbEJ2EBW&9C@5*GW6h`=G5fANg9^@Smm- zrx=YcLAqYE@dfX3lyk;b*4V1+6M1LmnqGsWu$|ga$P*%|D0C4SrxL$OxI6C}wu17E z#Apf~%XVC@1eZ=^Da#(|Gml(??H)~$oqr$U`oso zEuzMjq!C5uMR!Y*H3ya7CtEBotyUw5>s6Y!?_YDm=Ugwt^}V)1x*nUndX-Uiy!j^6 z8N&7SbpIF)UWMzq)R1a>lKz-@0$aB3>!2T!vr%ve@3|CkjfL?#+lpe4 z@4weEt}i3+FH{ssdZcaGa(ho(?rBe%6}aIic{7rJ(O#>L$9!e6g7hjzWSc6az#6Dm z3arVy4TTh^k|K zy}5RYybJX}Zb;(azGPMjnI_YdKnX{v{DCcRu5Gl^?~>=WX_)I2A`s5Sf+TuuK^N>?`ja+~_y1|?Ou%D4 zm@vLcDshw|WRYSW6)i%7M4X8VBCb|~s4HYk$R#1vwFpvY)!$jf5p~}|Xq^q;=O$IR z66&VMSClx~?>D=%eRiH_GBfYI^UnM?tw&Dn>F01v9>YE1l*erx(uSA&Ft>lQPwKLY2M{|`_p=|M@BcR1oXnz`2)~b?gm3`?etyTaiA7h47W_5C_o#n& zd7`i3r-K*OBS=ksm|vwFPv-ujK0rN^_yPUvqRe*-V9;=^^1@yE$Mldi;0Hp9~Ph-V*1~oQ_W;|CS>P z7@Vhl;j~ndC*-;GKGk{=f_yW->A&F9z#eb}UxoPBI+G`=PIGuy*daE(KjgtQ%`|tD zcVcN(@^)Mog|9|PY&h{leO06`ls8x*+(wGOpe{h8o6F*N47XLjwoe5_L8vQ1Ui_AyVwTT1hpOVj) zw9*4!3yJ(D!^?z;HDN(8%bI{y!uzpQEFUZmfz#v(%$%^JviIsKiiEl>Q7 zdOF@6MKK?^O^jLDz7_kT4g4jm-?ZKS(f;@=+1Mus**V#MkQg4CxE}X&WCJ~+H;mM1Bfa<;xv)b3TRa=vF z#d0K)84=6iF}D+Q@f?*tB(J!OTsi7^ygDygL*>*^tu4HVW1zcH`_NlTy$^0z&JPkD zK5Tiqy1eZjo$~~bv%~!5NOyQ}OC_{7>P^y~jm|vByy+;~cbJa?I|646`S0{SH*}X3&N}jYMfjS~dn_9X-~lk2BM!6hlCkXDs;a_$`u|NN>Q~b6yihI)SH?H)2CG zqSzyNZ@?qj;tnl9jBR*udUDih+c%| z^T=oOC}P{eg76WjTw>EfW-8LJL;f>bBk_9l#1`v(UyV26IPIwXd_@Hz1J1<Zng7 zmQm$VoPLwqAO2IoIn$|7Yoa8!lh}wDj6xE9FIAsH z^rp8}>xO!M0XkwQsUz9)HMKuc>>wJGs3XW9I_CJE8bsScs7PZ0jc(M3$)_WJfauNZ z;cC<9pN0P$&OgCn|Dyd8e8+-@@6Z9aN-3BIB6Ko238i(9Me~lX-h0NC1rZX4i z0k%hE1^EX?z(%v}El5Ylv?-3&yO21HS5Zl6*-+qHQcPCx5=@Idp??(5M5&B!=^eu8 z$$x_5v>#kFCg{Oubw^S7CNwg^Bjk@APZj)|Cls3sp*aFxI&g!0JlJFUpVPl10@xxI z9!S5L=EvX+Bri}-XQBu72skCk&!E|w`V{kfz`Se}pVF91EKRIQ<01$BhTrCi7BKK5 zxIgtvIAVPm6uU;<9!`k966t#IGWfm757F;J{t>fhILrsEw`#OiuB|P@Cn!RR+aUWW zp`yMT;krx~)W48J5g(d3zEoZop{`n_kS*= zO%$$H8geqCV-ZXe7OOfOX6m4w~6o$I{EUGZ;{j)ASdxM1GW8YzTEU`8N7%(F;c-i}^L+ zh2R&6?}CY))Ti%Ge-yZFii&h$xQ{lMA+igC8@+wxFBv?p2Z>0!&Q#}!vItjY_Kq~L zQ}8b$98O-6+-V({?+MQbzAy7p#3#JWT3m{=_Y zTXMvE@aIs^NBA4CwfZ29z$<`968XI+rgm_9;U%d}aGE*)+L2GQ6uysPu@VqgvhY0h z&x(yB-evLkEIAM7I$j88I)a}1iiDwYK$o9@e@YK61+NYKt=c2C+YovGcY-(@f%|e5 zRt3S8sAN&3GinbnT{X<=relzY6yN%XeX0CyKLQJN9123G}UnB>g1-CD^ zUB-WbQw>b47ds|{IV~0Zf7&}poJV6Q{Nm&Z@>ky*3|wKLI|~*d`bdYnLaYmM9`yw{ z0rYcO?lg;v{zLB(d0Tid6bpwdc7yrzkH#lFSp$TeHWN}c z3Yl5Lo2B%{y6JJvsUPZ+-7FpNGTW4VF1)3>a0hu$xU0cEz#3EUKx>a2VMOKF|LxN& zh=f9F2xujK$Hli97{BagoTvcp66T{eW7ydzdJM{e! zNd6-|Pk4(_?g-~1J`>*tHiOT0@)68Dcf`G1}@xA#p3c$Ec1# zF`Q|!jbM>R$ZlWT6BH)kV^m=WJL>7~yG*~vSL&s&$lXzj)&67M7KGwv^0nZ3x&u!{DT=mh_MCVSq%FJo7k+Uqv_!;UM)Qibm<}BM&x8K6eW;e6N-_kX~8k=Ud zSd)fZQ!Vi+me{zsRBKwAC3aA3e3F0W5wlzF5wm;S0o@`JQeI7q>a6D<8UwmSU2*f8R`CG!1hNoIbTk=*|l9ETHTVqF968vKA`c_Ls RSO3gnquq0hjrItu`+q0*fJ*=X diff --git a/resources/i18n/hu/BambuStudio.mo b/resources/i18n/hu/BambuStudio.mo index c9f36d03c60748e05fb449ffd476b7f170436676..3828cad42f894b418b17160ac87e05e8e075c53d 100644 GIT binary patch delta 46919 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 P%%n*I@}#o;Xvy&WQ@*gOoE#+ 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 DW&&S5 diff --git a/resources/i18n/it/BambuStudio.mo b/resources/i18n/it/BambuStudio.mo index d34930ccc731098ac2a9500f3f9e3feb4492bfbe..0a1a8d574c2877bedd298d68d2f3239680bdb3da 100644 GIT binary patch delta 46919 zcmZ791#}e2!ng5Gf;$9hM|?&2ds<#ZrzlDyHM~AFWi!S+L!4qT@nL zj;paK9>Fpgb%*2R!zvhxBaqvjqu3oUpcj_i={Uu(JeI(*806274i2LIzY zF)%acz7~5M1BYkvcVmw@gDX8DsL?9{& zXD|+4K{enps-Slm8Gl&4cAE;LqS6yulcRd>k9{#Ss^`nCD=`xB)u{W{V=U@-wh~Z9 z2T?6Pg?;cLCd9^j%#Gbp1@^}5*cZp(YOI0z_Bu{A9D|{F3pM0^`^?mZq2hf}BfSgV zLd);#*PqjvRDNffq>7qIiTV@H47_KQ?3ZLypsqcw$t=gHTg5)w;^M7d0{$QTd*r z7U>VvNF_RK%J)OXgIog2m=%4nII7~(m!ihv)g;9Qs=OQ056e+Zws0`&WrJ&t=&+jsaevk14K z8Xo<)HaFWDwWwEMWZa8U@h~#=u5*fjhU^*!<4eqhiB6bpR19^)E>r^#p+@W?mc^%- z26LP=*K4AB-U6%OG}MSbM&0)oRZgT+j#EiZOh_OW3C%DDcCz-xn8b%+G@OLWH_OJC zqt?uNEQ0&7AUdbbZYYGhuPw&Gt{58!p&BqjaShRY0%>s#X25ec{sT3Xsn3{(6~QRP z%b`ZBDn`QQs2;Y#q}UbJ@G+g5o@WSVK`rWSm>mB>O~GYMkI&CD{+hc47fes`pn4F3 zTJ<$B9(KVX9E_p35(nTj)aq|@(Hu}mup9Bmmi(9f`?{h=Vle86 zpX(ABNFd2o)1w(UNbze7C(gu87;)WkI$)U_riYuc3-REa=187}Ly5<|W#UtCF!AWO zS-?0JwHOoJF}o!Nsv&L>0_u4^)JU|)IM@@l*oL9j!dTSEtVS)ay{P+6U=qBAnz~P@ zd~xoYHIW8YUI7~~i#i9wkn&xpB>@dx2UNj-;WiwFTHVF&F$!23H3fH34SkLp(od*{ zM!s(fj)f{G0V-cA8_$3$FAr)YLNL1ae+ipV$&=tXwNVXff@*me)QtmC6%IpHFcme| z3sEDm8FiALL=EkI>o3%ZBz<7+%Zw^NKPIAnryPOR7={|cm=Dbj=}-mbNA<7<>Uw=l zhTTvN9EV!XbF3Rs4LO3U_$F$q-eNF%KjP7inb1u`;5326_znXw+GA5;MpO@TpjL57 z)M~GWnu;*gqHK#9@G@3I=ZV>-)iH$VWYqnqFbZDBNOdkfOv4c*%)ywL?yadPJF15*Q4Q*eDR3pKz{9A5PGBs&Zhd0YKcYs)=bbSI#w8vf znF`klAfT4#MipEQ12G($5Y&_9>)3Y#CdSBFHo`I!tCu*d; zKA7E+7^7Y^`(+xQ@iO?(=vAxn_ia@L{dc+N-D^CcLc_y$aX2T?

  • ZOW;cV0)dibD9?wB;p}&?o zmE8RK*OL<+1nh!HHhEq0uOZB|%zk)$2i`-gXb!U-&H=opE|Jz$MENx)LkxIH^u&0# zvf(hEf_6FjVgoF9!Dt8tctf+e1+a8^yrXpiy$ASPL>I6$POsR9INN6CcXUe79|HF! zi;v;eby;_Cv1=U4jr=Sei*fx2Y(&hzaYN^XE-B8ydxTQ(u3%0o_$P-EOQGL}d1vKc zC!Y%TnEp`ucge*vm=}wp-&*qmI8n0jmXdlA?Wq$Wl_EcmXnX3P7&L)7llKK*L@Yz-sGP!e4LZHf(=lS zPD<{?@KN%1#4T`LwO?89Mu0Apg$>bp{^2$YVzFRm_mY-Cr@B1FvSY;H`wz6x?e0?3qAs1i(6G(#R{wOU&7v zbQ{fPaw5HwK@d{#K&^kYsu17d6&XH2&xdGhGbm1jk496h3I>On)tU#sEZCBJd53A{yt2rNG3F>D7nOp9nrfMS3wjP7_Z%*m+80j+6RU@wKZkIEzmPf|-LK^(=CyhyEooGy5lAd#uruT^yfpQD>eecB zirfX?ji6Xb`Z+8;Lw!xL$;7+xceCUyoNM@NIJ41n);rQ3jlD))ew2YiT~G#M00Vj2 zBQ@Iy@E-8yBXFOkVl@!VA&<>9sT~yJkg<8@a15(_L60~M{@8~d5I|;flK%uNbZ1QVJw~wX0>tPziBU@xP- z7EPSUmP&9P!GEXU0jvu79`Gt~w%}#hWt@)CY7(nmWhj;+31Tx9yhh)LL-hnp0^5M# zC^*v)^u=!~uN@q*46uosPlnrsd>k61$U}+A=oG^j$d568C27Y}F@N%NIyfB672)UF zo2mFLq8(Tw2S13Qzv42#2!3;x-$$oDK2CeZ!4m0>w7F2>_m`(Jt4Y4nC36|Nr$a5k zm+8P|#lA&k982%Q&!_jjerP<&Pt$XPw~S>y;GDDsTYccGJtye8(+d(5H)mUPksd^|Q-{3iVrA6d+EEuf)$13cF;70Pb;D=Ng$j}-7P_THg0_MiT8LwK> zKP(TJ+?>hsZHz0YT}t&Fk~>3=AtgH>vjfv7s&VaE4rX5%iF%NG{FAdzDz8C%+OzaM`scale zz5zU#{0qH=Q0B#|vEwp%9x;x7Ct@qh=>{005l!K;7DJqduV;8WLQ}xRG9cF?_kvfz za8+utM6ev{(Znr?HwQmXJ%@T3xqq?b6FW^OcG?~BF=aioYwlpW@WO7TqbaM%E~KJU z?1C4{%KV<6}s5FHLwuY-S)B%GF6;o-?zPm zVH#R!AL>`ZEEE)A=olHF5aVvHOa;Xp!i%eJy>bo@bf9#3hgprP#tn&ak3FDf$e*-ZVZ`}X@ diff --git a/resources/i18n/hu/BambuStudio.mo b/resources/i18n/hu/BambuStudio.mo index 3828cad42f894b418b17160ac87e05e8e075c53d..c11e1b88420b6083c4a0c98e6ea83acff2a604eb 100644 GIT binary patch delta 84710 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 delta 56377 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 q4~yB&QooU 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 y=Wkn`yQzNuy#2XX6wd$fVD8)^Gu)?mCA6 diff --git a/resources/i18n/ja/BambuStudio.mo b/resources/i18n/ja/BambuStudio.mo index 5eaffdf5725b3e8cc88398f3a5f542a86353a400..7ae9b55adb6e6ed3fc45c50edf7104e5b63ef77c 100644 GIT binary patch delta 47786 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 DnY(eM53 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 diff --git a/resources/i18n/zh_cn/BambuStudio.mo b/resources/i18n/zh_cn/BambuStudio.mo index ac780c8f7bee7161991d22088c15b1e4cc956564..50bd6196248e32769376ab36415132a7b3c8fdfc 100644 GIT binary patch delta 18881 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 From 7efa355ff50e7e2f30da1e2ca429d7cd9632e071 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Thu, 6 Apr 2023 16:57:02 +0800 Subject: [PATCH 266/339] FIX: remove layer menu 1.remove layer menu 2.add dark color adaption of obj_layer Change-Id: I8faf5f69359f0d0fff769887b800f3963884d55d --- src/slic3r/GUI/GUI_ObjectLayers.cpp | 2 +- src/slic3r/GUI/GUI_ObjectList.cpp | 3 +-- src/slic3r/GUI/Plater.cpp | 1 + 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/GUI_ObjectLayers.cpp b/src/slic3r/GUI/GUI_ObjectLayers.cpp index 4dc2a2e77b..d683cd43da 100644 --- a/src/slic3r/GUI/GUI_ObjectLayers.cpp +++ b/src/slic3r/GUI/GUI_ObjectLayers.cpp @@ -289,7 +289,7 @@ void ObjectLayers::sys_color_changed() if (item->IsSizer()) {// case when we have editor with buttons for (size_t btn : {2, 3}) { // del_btn, add_btn wxSizerItem* b_item = item->GetSizer()->GetItem(btn); - if (b_item->IsWindow()) { + if (b_item && b_item->IsWindow()) { auto button = dynamic_cast(b_item->GetWindow()); if (button != nullptr) button->msw_rescale(); diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index d15a60afed..f2c236c3eb 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -1259,12 +1259,11 @@ void ObjectList::show_context_menu(const bool evt_context_menu) if (item) { const ItemType type = m_objects_model->GetItemType(item); - if (!(type & (itPlate | itObject | itVolume | itLayer | itInstance))) + if (!(type & (itPlate | itObject | itVolume | itInstance))) return; menu = type & itPlate ? plater->plate_menu() : type & itInstance ? plater->instance_menu() : - type & itLayer ? plater->layer_menu() : type & itVolume ? plater->part_menu() : printer_technology() == ptFFF ? plater->object_menu() : plater->sla_object_menu(); } diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index fd966c414b..f6259c48ec 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1270,6 +1270,7 @@ void Sidebar::sys_color_changed() // BBS obj_list()->sys_color_changed(); + obj_layers()->sys_color_changed(); // BBS //p->object_manipulation->sys_color_changed(); From 5772b013de43d09bf5a97f31d35740e0140d4d72 Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Mon, 10 Apr 2023 18:01:29 +0800 Subject: [PATCH 267/339] FIX: fix the filename not correct issue under linux Change-Id: Ic720c7734be60197135965f3dcecc84eb9a8eb5d --- .../{Bambu PLA SilK @BBL X1.json => Bambu PLA Silk @BBL X1.json} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename resources/profiles/BBL/filament/{Bambu PLA SilK @BBL X1.json => Bambu PLA Silk @BBL X1.json} (100%) diff --git a/resources/profiles/BBL/filament/Bambu PLA SilK @BBL X1.json b/resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1.json similarity index 100% rename from resources/profiles/BBL/filament/Bambu PLA SilK @BBL X1.json rename to resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1.json From d3d3f41f8c5cf572bd0ab4eae01a4368a27ad759 Mon Sep 17 00:00:00 2001 From: "qing.zhang" Date: Mon, 10 Apr 2023 14:32:07 +0800 Subject: [PATCH 268/339] ENH: update fan nax speed of Bambu PETG Basic Signed-off-by: qing.zhang Change-Id: I7e43702eb3af0e7960ea91ef3dd3a38c496b6f6b --- resources/profiles/BBL.json | 2 +- .../BBL/filament/Bambu PETG Basic @BBL X1C 0.8 nozzle.json | 6 ++++++ resources/profiles/BBL/filament/Bambu PETG Basic @base.json | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index a389017f59..0df289a040 100644 --- a/resources/profiles/BBL.json +++ b/resources/profiles/BBL.json @@ -1,7 +1,7 @@ { "name": "Bambulab", "url": "http://www.bambulab.com/Parameters/vendor/BBL.json", - "version": "01.05.00.24", + "version": "01.06.00.00", "force_update": "0", "description": "the initial version of BBL configurations", "machine_model_list": [ diff --git a/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C 0.8 nozzle.json index 364354608d..02590dc33d 100644 --- a/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C 0.8 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu PETG Basic @BBL X1C 0.8 nozzle.json @@ -8,6 +8,12 @@ "filament_max_volumetric_speed": [ "16" ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "20" + ], "compatible_printers": [ "Bambu Lab X1 Carbon 0.6 nozzle", "Bambu Lab X1 0.6 nozzle", diff --git a/resources/profiles/BBL/filament/Bambu PETG Basic @base.json b/resources/profiles/BBL/filament/Bambu PETG Basic @base.json index e37b48daba..c306561a38 100644 --- a/resources/profiles/BBL/filament/Bambu PETG Basic @base.json +++ b/resources/profiles/BBL/filament/Bambu PETG Basic @base.json @@ -66,7 +66,7 @@ "24.99" ], "filament_density": [ - "1.29" + "1.25" ], "nozzle_temperature_range_low": [ "240" From 6e797e7a996e5475a66786a14957f34f747b2784 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Mon, 10 Apr 2023 10:13:49 +0800 Subject: [PATCH 269/339] FIX: flush volume is error when flush_multiplier is 0. STUDIO-2636 Change-Id: I013a6c974799996744727b3f50426bf806c5b2df --- src/slic3r/GUI/WipeTowerDialog.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/WipeTowerDialog.cpp b/src/slic3r/GUI/WipeTowerDialog.cpp index 39c7992703..fbda4b407b 100644 --- a/src/slic3r/GUI/WipeTowerDialog.cpp +++ b/src/slic3r/GUI/WipeTowerDialog.cpp @@ -613,8 +613,14 @@ std::vector WipingPanel::read_matrix_values() { for (unsigned int i=0;iGetValue().ToDouble(&val); - output.push_back((float)val / get_flush_multiplier()); + float flush_multipler = get_flush_multiplier(); + if (flush_multipler == 0) { + output.push_back(0.); + } + else { + edit_boxes[j][i]->GetValue().ToDouble(&val); + output.push_back((float) val / get_flush_multiplier()); + } } } return output; From 229b173894fd5ddcfc1782a3d1c93fe0e498b3f7 Mon Sep 17 00:00:00 2001 From: manch1n Date: Mon, 10 Apr 2023 20:51:51 +0800 Subject: [PATCH 270/339] FIX: arrangement crash due to mutithread call to transformedShape STUDIO-2653 Change-Id: I82031d3adbd95f8af04cb5f15b39d0621a40c7f3 (cherry picked from commit 065575c4845688ecb6293fa826e5f987f019d9fb) --- src/libnest2d/include/libnest2d/placers/nfpplacer.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp b/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp index 863dcb43cd..15edff5920 100644 --- a/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp +++ b/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp @@ -608,6 +608,7 @@ private: Shapes nfps(stationarys.size()); Item slidingItem(sliding); + slidingItem.transformedShape(); __parallel::enumerate(stationarys.begin(), stationarys.end(), [&nfps, sliding, &slidingItem](const RawShape &stationary, size_t n) { auto subnfp_r = noFitPolygon(stationary, sliding); correctNfpPosition(subnfp_r, stationary, slidingItem); From 29459fe4cb5324ce600f42782576a34f226dd3f2 Mon Sep 17 00:00:00 2001 From: manch1n Date: Mon, 10 Apr 2023 16:03:28 +0800 Subject: [PATCH 271/339] FIX: avoid wipe tower conflict with objects Change-Id: I09f6937a4bb698e4981c094c5694b3ce50efd2b4 (cherry picked from commit 2fc3f05732b8e5c7132b6c8a5f4403d30c516bff) --- src/slic3r/GUI/GLCanvas3D.cpp | 22 +++++++++++++++------- src/slic3r/GUI/GLCanvas3D.hpp | 2 +- src/slic3r/GUI/Jobs/ArrangeJob.cpp | 9 ++++++--- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 50224cdb96..0377bf5a93 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1718,7 +1718,7 @@ bool GLCanvas3D::make_current_for_postinit() { return _set_current(); } -Points GLCanvas3D::estimate_wipe_tower_points(int plate_index) const +Points GLCanvas3D::estimate_wipe_tower_points(int plate_index, bool global) const { PartPlateList & ppl = wxGetApp().plater()->get_partplate_list(); DynamicPrintConfig &proj_cfg = wxGetApp().preset_bundle->project_config; @@ -1734,18 +1734,26 @@ Points GLCanvas3D::estimate_wipe_tower_points(int plate_index) const if (wipe_tower_size(1) == 0) { // when depth is unavailable (no items on this plate), we have to estimate the depth using the extruder number of all plates std::set extruder_ids; - auto pl = ppl.get_plate_list(); - for (const auto& p : pl) { - auto es = p->get_extruders(); + if (global) { + auto objs = wxGetApp().obj_list()->objects(); + for (ModelObject *obj : *objs) { + for (ModelVolume *volume : obj->volumes) { + std::vector es = volume->get_extruders(); + extruder_ids.insert(es.begin(), es.end()); + } + } + } else { + PartPlate* pl = ppl.get_plate(plate_index); + std::vector es = pl->get_extruders(); extruder_ids.insert(es.begin(), es.end()); } - int extruder_size = extruder_ids.size(); + int extruder_size = extruder_ids.size(); wipe_tower_size(1) = extruder_size * print.wipe_tower_data(extruder_size).depth + 2 * print.wipe_tower_data().brim_width; } - Vec3d plate_origin = ppl.get_plate(plate_index)->get_origin(); + Vec3d plate_origin = ppl.get_plate(plate_index)->get_origin(); Point wt_min_corner{scale_(x), scale_(y)}; Point wt_max_corner(scale_(x + wipe_tower_size(0)), scale_(y + wipe_tower_size(1))); - return {wt_min_corner, {wt_max_corner.x(), wt_min_corner.y()}, wt_max_corner, {wt_min_corner.x(),wt_max_corner.y()}}; + return {wt_min_corner, {wt_max_corner.x(), wt_min_corner.y()}, wt_max_corner, {wt_min_corner.x(), wt_max_corner.y()}}; } void GLCanvas3D::render(bool only_init) diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 37f61d0713..8beb998384 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -1059,7 +1059,7 @@ public: bool make_current_for_postinit(); //BBS - Points estimate_wipe_tower_points(int plate_index) const; + Points estimate_wipe_tower_points(int plate_index, bool global = true) const; private: bool _is_shown_on_screen() const; diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index b81b015168..773d257697 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -311,9 +311,12 @@ void ArrangeJob::prepare_wipe_tower() const GLCanvas3D* canvas3D=static_cast(m_plater->canvas3D()); for (int bedid = 0; bedid < MAX_NUM_PLATES; bedid++) { if (!plates_have_wipe_tower[bedid]) { - wipe_tower_ap.translation = {0, 0}; - wipe_tower_ap.poly.contour.points = canvas3D->estimate_wipe_tower_points(bedid); - wipe_tower_ap.bed_idx = bedid; + wipe_tower_ap.translation = {0, 0}; + bool global = true; + int state = m_plater->get_prepare_state(); + if (state == Job::JobPrepareState::PREPARE_STATE_MENU) { global = false; } + wipe_tower_ap.poly.contour.points = canvas3D->estimate_wipe_tower_points(bedid, global); + wipe_tower_ap.bed_idx = bedid; m_unselected.emplace_back(wipe_tower_ap); } } From 9fc29ac13890fd32c9f64dce049975d9abfc19da Mon Sep 17 00:00:00 2001 From: tao wang Date: Mon, 10 Apr 2023 21:44:59 +0800 Subject: [PATCH 272/339] FIX:fixed invalid load when there is no filament in the extruder Change-Id: If10026787367a596a1bad97a8ec06a645bed93f2 --- src/slic3r/GUI/StatusPanel.cpp | 2 +- src/slic3r/GUI/Widgets/AMSControl.cpp | 21 +++++++++++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 0154924e3a..eee5ea66d5 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -2621,7 +2621,7 @@ void StatusPanel::on_ams_load_curr() con_load_dlg->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this](wxCommandEvent& e) {*/ int old_temp = -1; int new_temp = -1; - AmsTray* curr_tray = obj->get_curr_tray(); + AmsTray* curr_tray = &obj->vt_tray; if (!curr_tray) return; diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index 8656ea593c..03c4459f92 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -471,11 +471,11 @@ void AMSextruder::doRender(wxDC& dc) } if (m_has_vams) { - dc.DrawRoundedRectangle(-size.x / 2, FromDIP(8), size.x, size.y, 4); + dc.DrawRoundedRectangle(-size.x / 2, size.y * 0.1, size.x, size.y, 4); if (m_vams_loading) { dc.SetPen(wxPen(m_current_colur, 6, wxSOLID)); - dc.DrawRoundedRectangle(-size.x / 2, FromDIP(8), size.x, size.y, 4); + dc.DrawRoundedRectangle(-size.x / 2, size.y * 0.1, size.x, size.y, 4); } if (m_ams_loading && !m_none_ams_mode) { @@ -564,7 +564,7 @@ void AMSVirtualRoad::doRender(wxDC& dc) dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); - dc.DrawRoundedRectangle(size.x / 2, -FromDIP(9), size.x, FromDIP(18), 4); + dc.DrawRoundedRectangle(size.x / 2, -size.y / 1.1 + FromDIP(1), size.x, size.y, 4); } @@ -2416,6 +2416,8 @@ void AMSControl::msw_rescale() m_button_ams_setting->SetBitmap(m_button_ams_setting_normal.bmp()); m_extruder->msw_rescale(); + m_vams_extra_road->msw_rescale(); + m_button_extrusion_cali->SetMinSize(wxSize(-1, FromDIP(24))); m_button_extruder_feed->SetMinSize(wxSize(-1, FromDIP(24))); m_button_extruder_back->SetMinSize(wxSize(-1, FromDIP(24))); @@ -2860,10 +2862,16 @@ void AMSControl::SetExtruder(bool on_off, bool is_vams, wxColour col) } if (is_vams && on_off) { + m_extruder->OnAmsLoading(false, col); m_vams_extra_road->OnVamsLoading(true, col); m_extruder->OnVamsLoading(true, col); m_vams_road->OnVamsLoading(true, col); } + else { + m_vams_extra_road->OnVamsLoading(false, col); + m_extruder->OnVamsLoading(false, col); + m_vams_road->OnVamsLoading(false, col); + } } void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadType type, AMSPassRoadSTEP step) @@ -2879,16 +2887,17 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy } } - if (notfound) return; - if (cans == nullptr) return; - if (!ams_id.empty() && (ams_id != m_last_ams_id || m_last_tray_id != canid)) { + if (ams_id != m_last_ams_id || m_last_tray_id != canid) { SetAmsStep(m_last_ams_id, m_last_tray_id, AMSPassRoadType::AMS_ROAD_TYPE_UNLOAD, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); m_vams_extra_road->OnVamsLoading(false); m_extruder->OnVamsLoading(false); m_vams_road->OnVamsLoading(false); } + if (notfound) return; + if (cans == nullptr) return; + m_last_ams_id = ams_id; m_last_tray_id = canid; From 639f2a57ae59d0cc81da66218dda9ab1c2b34808 Mon Sep 17 00:00:00 2001 From: tao wang Date: Mon, 10 Apr 2023 15:20:19 +0800 Subject: [PATCH 273/339] ENH:update the layout of the filament backup Change-Id: Ie1d4b29524484a892e8305b891c8a8ba3f397054 --- src/slic3r/GUI/SelectMachine.cpp | 48 +++++++++++++++----------------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 80944acc9f..e4415ad4e7 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -1084,8 +1084,7 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) m_sizer_basic_time->Add(m_stext_weight, 0, wxALL, FromDIP(5)); m_sizer_basic->Add(m_sizer_basic_time, 0, wxALIGN_CENTER, 0); - auto m_sizer_material_area = new wxBoxSizer(wxHORIZONTAL); - + wxBoxSizer* m_sizer_material_area = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer* m_sizer_material_tips = new wxBoxSizer(wxHORIZONTAL); @@ -1117,6 +1116,27 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) m_sizer_material_area->Add(m_sizer_material_tips, 0, wxALIGN_CENTER|wxLEFT, FromDIP(8)); m_sizer_material_area->Add(m_sizer_material, 0, wxLEFT, FromDIP(15)); + auto m_sizer_backup = new wxBoxSizer(wxHORIZONTAL); + auto m_ams_backup_tip = new Label(this, _L("Ams filament backup")); + m_ams_backup_tip->SetFont(::Label::Head_12); + m_ams_backup_tip->SetForegroundColour(wxColour(0x00AE42)); + m_ams_backup_tip->SetBackgroundColour(*wxWHITE); + auto img_ams_backup = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap("automatic_material_renewal", this, 16), wxDefaultPosition, wxSize(FromDIP(16), FromDIP(16)), 0); + img_ams_backup->SetBackgroundColour(*wxWHITE); + + m_sizer_backup->Add(0, 0, 1, wxEXPAND, 0); + m_sizer_backup->Add(img_ams_backup, 0, wxALL, FromDIP(3)); + m_sizer_backup->Add(m_ams_backup_tip, 0, wxTOP, FromDIP(5)); + + m_ams_backup_tip->Bind(wxEVT_ENTER_WINDOW, [this, img_amsmapping_tip](auto& e) {SetCursor(wxCURSOR_HAND); }); + img_ams_backup->Bind(wxEVT_ENTER_WINDOW, [this, img_amsmapping_tip](auto& e) {SetCursor(wxCURSOR_HAND); }); + + m_ams_backup_tip->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); }); + img_ams_backup->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); }); + + m_ams_backup_tip->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {popup_filament_backup(); on_rename_enter(); }); + img_ams_backup->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {popup_filament_backup(); }); + m_statictext_ams_msg = new wxStaticText(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxALIGN_CENTER_HORIZONTAL); m_statictext_ams_msg->SetFont(::Label::Body_13); m_statictext_ams_msg->Hide(); @@ -1202,28 +1222,6 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) m_sizer_prepare->Add(hyperlink_sizer, 0, wxALIGN_CENTER | wxALL, 5); - auto m_sizer_backup = new wxBoxSizer(wxHORIZONTAL); - auto m_ams_backup_tip = new Label(m_panel_prepare, _L("Ams filament backup")); - m_ams_backup_tip->SetFont(::Label::Head_12); - m_ams_backup_tip->SetForegroundColour(wxColour(0x00AE42)); - m_ams_backup_tip->SetBackgroundColour(*wxWHITE); - auto img_ams_backup = new wxStaticBitmap(m_panel_prepare, wxID_ANY, create_scaled_bitmap("automatic_material_renewal", this, 16), wxDefaultPosition, wxSize(FromDIP(16), FromDIP(16)), 0); - img_ams_backup->SetBackgroundColour(*wxWHITE); - - m_sizer_backup->Add(0, 0, 1, wxEXPAND, 0); - m_sizer_backup->Add(img_ams_backup, 0, wxALL, FromDIP(3)); - m_sizer_backup->Add(m_ams_backup_tip, 0, wxTOP, FromDIP(5)); - - m_ams_backup_tip->Bind(wxEVT_ENTER_WINDOW, [this, img_amsmapping_tip](auto& e) {SetCursor(wxCURSOR_HAND); }); - img_ams_backup->Bind(wxEVT_ENTER_WINDOW, [this, img_amsmapping_tip](auto& e) {SetCursor(wxCURSOR_HAND); }); - - m_ams_backup_tip->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); }); - img_ams_backup->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); }); - - m_ams_backup_tip->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {popup_filament_backup(); on_rename_enter(); }); - img_ams_backup->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {popup_filament_backup();}); - - m_button_ensure = new Button(m_panel_prepare, _L("Send")); m_button_ensure->SetBackgroundColor(btn_bg_enable); m_button_ensure->SetBorderColor(btn_bg_enable); @@ -1233,7 +1231,6 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) m_button_ensure->SetCornerRadius(FromDIP(12)); m_button_ensure->Bind(wxEVT_BUTTON, &SelectMachineDialog::on_ok_btn, this); - m_sizer_pcont->Add(m_sizer_backup, 0, wxEXPAND | wxBOTTOM, FromDIP(10)); m_sizer_pcont->Add(0, 0, 1, wxEXPAND, 0); m_sizer_pcont->Add(m_button_ensure, 0, wxEXPAND | wxBOTTOM, FromDIP(10)); @@ -1320,6 +1317,7 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) m_sizer_main->Add(m_line_top, 0, wxEXPAND, 0); m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(22)); m_sizer_main->Add(m_scrollable_view, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_sizer_main->Add(m_sizer_backup, 0, wxALIGN_CENTER_HORIZONTAL, 0); m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(8)); m_sizer_main->Add(m_statictext_ams_msg, 0, wxALIGN_CENTER_HORIZONTAL, 0); m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(8)); From adb6583458a87e84f78013dd3ec5378d23d73e48 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Thu, 9 Feb 2023 18:22:12 +0800 Subject: [PATCH 274/339] FIX:(mac) cannot use copy and paste in imgui input box Change-Id: I4024bfbe178f86a5d456de47ddd82bc028d4788c --- src/slic3r/GUI/MainFrame.cpp | 99 ++++++++++++++++++++++++++++++++---- 1 file changed, 89 insertions(+), 10 deletions(-) diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 9b2cf21069..06a5f3f6e9 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -2148,6 +2148,13 @@ void MainFrame::init_menubar_as_editor() wxString hotkey_delete = "Del"; #endif + auto handle_key_event = [](wxKeyEvent& evt) { + if (wxGetApp().imgui()->update_key_data(evt)) { + wxGetApp().plater()->get_current_canvas3D()->render(); + return true; + } + return false; + }; #ifndef __APPLE__ // BBS undo append_menu_item(editMenu, wxID_ANY, _L("Undo") + "\t" + ctrl + "Z", @@ -2189,39 +2196,96 @@ void MainFrame::init_menubar_as_editor() #else // BBS undo append_menu_item(editMenu, wxID_ANY, _L("Undo") + "\t" + ctrl + "Z", - _L("Undo"), [this](wxCommandEvent&) { m_plater->undo(); }, + _L("Undo"), [this, handle_key_event](wxCommandEvent&) { + wxKeyEvent e; + e.SetEventType(wxEVT_KEY_DOWN); + e.SetControlDown(true); + e.m_keyCode = 'Z'; + if (handle_key_event(e)) { + return; + } + m_plater->undo(); }, "", nullptr, [this](){return m_plater->can_undo(); }, this); // BBS redo append_menu_item(editMenu, wxID_ANY, _L("Redo") + "\t" + ctrl + "Y", - _L("Redo"), [this](wxCommandEvent&) { m_plater->redo(); }, + _L("Redo"), [this, handle_key_event](wxCommandEvent&) { + wxKeyEvent e; + e.SetEventType(wxEVT_KEY_DOWN); + e.SetControlDown(true); + e.m_keyCode = 'Y'; + if (handle_key_event(e)) { + return; + } + m_plater->redo(); }, "", nullptr, [this](){return m_plater->can_redo(); }, this); editMenu->AppendSeparator(); // BBS Cut TODO append_menu_item(editMenu, wxID_ANY, _L("Cut") + "\t" + ctrl + "X", - _L("Cut selection to clipboard"), [this](wxCommandEvent&) {m_plater->cut_selection_to_clipboard(); }, + _L("Cut selection to clipboard"), [this, handle_key_event](wxCommandEvent&) { + wxKeyEvent e; + e.SetEventType(wxEVT_KEY_DOWN); + e.SetControlDown(true); + e.m_keyCode = 'X'; + if (handle_key_event(e)) { + return; + } + m_plater->cut_selection_to_clipboard(); }, "", nullptr, [this]() {return m_plater->can_copy_to_clipboard(); }, this); // BBS Copy append_menu_item(editMenu, wxID_ANY, _L("Copy") + "\t" + ctrl + "C", - _L("Copy selection to clipboard"), [this](wxCommandEvent&) { m_plater->copy_selection_to_clipboard(); }, + _L("Copy selection to clipboard"), [this, handle_key_event](wxCommandEvent&) { + wxKeyEvent e; + e.SetEventType(wxEVT_KEY_DOWN); + e.SetControlDown(true); + e.m_keyCode = 'C'; + if (handle_key_event(e)) { + return; + } + m_plater->copy_selection_to_clipboard(); }, "", nullptr, [this](){return m_plater->can_copy_to_clipboard(); }, this); // BBS Paste append_menu_item(editMenu, wxID_ANY, _L("Paste") + "\t" + ctrl + "V", - _L("Paste clipboard"), [this](wxCommandEvent&) { m_plater->paste_from_clipboard(); }, + _L("Paste clipboard"), [this, handle_key_event](wxCommandEvent&) { + wxKeyEvent e; + e.SetEventType(wxEVT_KEY_DOWN); + e.SetControlDown(true); + e.m_keyCode = 'V'; + if (handle_key_event(e)) { + return; + } + m_plater->paste_from_clipboard(); }, "", nullptr, [this](){return m_plater->can_paste_from_clipboard(); }, this); #if 0 // BBS Delete selected append_menu_item(editMenu, wxID_ANY, _L("Delete selected") + "\tBackSpace", - _L("Deletes the current selection"),[this](wxCommandEvent&) { m_plater->remove_selected(); }, + _L("Deletes the current selection"),[this](wxCommandEvent&) { + m_plater->remove_selected(); + }, "", nullptr, [this](){return can_delete(); }, this); #endif //BBS: delete all append_menu_item(editMenu, wxID_ANY, _L("Delete all") + "\t" + ctrl + "D", - _L("Deletes all objects"),[this](wxCommandEvent&) { m_plater->delete_all_objects_from_model(); }, + _L("Deletes all objects"),[this, handle_key_event](wxCommandEvent&) { + wxKeyEvent e; + e.SetEventType(wxEVT_KEY_DOWN); + e.SetControlDown(true); + e.m_keyCode = 'D'; + if (handle_key_event(e)) { + return; + } + m_plater->delete_all_objects_from_model(); }, "", nullptr, [this](){return can_delete_all(); }, this); editMenu->AppendSeparator(); // BBS Clone Selected append_menu_item(editMenu, wxID_ANY, _L("Clone selected") + "\t" + ctrl + "M", - _L("Clone copies of selections"),[this](wxCommandEvent&) { + _L("Clone copies of selections"),[this, handle_key_event](wxCommandEvent&) { + wxKeyEvent e; + e.SetEventType(wxEVT_KEY_DOWN); + e.SetControlDown(true); + e.m_keyCode = 'M'; + if (handle_key_event(e)) { + return; + } m_plater->clone_selection(); }, "", nullptr, [this](){return can_clone(); }, this); @@ -2230,11 +2294,26 @@ void MainFrame::init_menubar_as_editor() // BBS Select All append_menu_item(editMenu, wxID_ANY, _L("Select all") + "\t" + ctrl + "A", - _L("Selects all objects"), [this](wxCommandEvent&) { m_plater->select_all(); }, + _L("Selects all objects"), [this, handle_key_event](wxCommandEvent&) { + wxKeyEvent e; + e.SetEventType(wxEVT_KEY_DOWN); + e.SetControlDown(true); + e.m_keyCode = 'A'; + if (handle_key_event(e)) { + return; + } + m_plater->select_all(); }, "", nullptr, [this](){return can_select(); }, this); // BBS Deslect All append_menu_item(editMenu, wxID_ANY, _L("Deselect all") + "\tEsc", - _L("Deselects all objects"), [this](wxCommandEvent&) { m_plater->deselect_all(); }, + _L("Deselects all objects"), [this, handle_key_event](wxCommandEvent&) { + wxKeyEvent e; + e.SetEventType(wxEVT_KEY_DOWN); + e.m_keyCode = WXK_ESCAPE; + if (handle_key_event(e)) { + return; + } + m_plater->deselect_all(); }, "", nullptr, [this](){return can_deselect(); }, this); //editMenu->AppendSeparator(); //append_menu_check_item(editMenu, wxID_ANY, _L("Show Model Mesh(TODO)"), From 92266c1edfb556597112d09c25f23674b5e6c7de Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Mon, 10 Apr 2023 15:09:13 +0800 Subject: [PATCH 275/339] ENH: add a tooltip of adding custom gcode Change-Id: I8908dd7cdba6138a90fb9a7de92d9eb346495690 --- src/slic3r/GUI/IMSlider.cpp | 38 ++++++++++++++++++++++----------- src/slic3r/GUI/IMSlider.hpp | 1 + src/slic3r/GUI/ImGuiWrapper.cpp | 9 ++++---- src/slic3r/GUI/ImGuiWrapper.hpp | 2 +- 4 files changed, 33 insertions(+), 17 deletions(-) diff --git a/src/slic3r/GUI/IMSlider.cpp b/src/slic3r/GUI/IMSlider.cpp index ab36613d2f..c435ab8667 100644 --- a/src/slic3r/GUI/IMSlider.cpp +++ b/src/slic3r/GUI/IMSlider.cpp @@ -708,35 +708,39 @@ void IMSlider::draw_ticks(const ImRect& slideable_region) { } } -void IMSlider::show_tooltip(const TickCode& tick){ +void IMSlider::show_tooltip(const std::string tooltip) { ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, { 6 * m_scale, 3 * m_scale }); ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, { 3 * m_scale }); ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BACKGROUND); ImGui::PushStyleColor(ImGuiCol_Border, { 0,0,0,0 }); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.00f, 1.00f, 1.00f, 1.00f)); ImGui::BeginTooltip(); + ImGui::TextUnformatted(tooltip.c_str()); + ImGui::EndTooltip(); + ImGui::PopStyleColor(3); + ImGui::PopStyleVar(2); +} + +void IMSlider::show_tooltip(const TickCode& tick){ switch (tick.type) { case CustomGCode::ColorChange: break; case CustomGCode::PausePrint: - ImGui::TextUnformatted((_u8L("Pause:") + " \"" + gcode(PausePrint) + "\"").c_str()); + show_tooltip(_u8L("Pause:") + " \"" + gcode(PausePrint) + "\""); break; case CustomGCode::ToolChange: - ImGui::TextUnformatted(_u8L("Change Filament").c_str()); + show_tooltip(_u8L("Change Filament")); break; case CustomGCode::Template: - ImGui::TextUnformatted((_u8L("Custom Template:") + " \"" + gcode(Template) + "\"").c_str()); + show_tooltip(_u8L("Custom Template:") + " \"" + gcode(Template) + "\""); break; case CustomGCode::Custom: - ImGui::TextUnformatted((_u8L("Custom G-code:") + " \"" + tick.extra + "\"").c_str()); + show_tooltip(_u8L("Custom G-code:") + " \"" + tick.extra + "\""); break; default: break; } - ImGui::EndTooltip(); - ImGui::PopStyleColor(3); - ImGui::PopStyleVar(2); } bool IMSlider::vertical_slider(const char* str_id, int* higher_value, int* lower_value, std::string& higher_label, std::string& lower_label,int v_min, int v_max, const ImVec2& size, SelectedSlider& selection, bool one_layer_flag, float scale) @@ -1224,18 +1228,26 @@ void IMSlider::render_add_menu() ImGui::OpenPopup("slider_add_menu_popup"); if (ImGui::BeginPopup("slider_add_menu_popup")) { bool menu_item_enable = m_draw_mode != dmSequentialFffPrint; + bool hovered = false; { - if (menu_item_with_icon(_u8L("Add Pause").c_str(), "", ImVec2(0, 0), 0, false, menu_item_enable)) { + if (menu_item_with_icon(_u8L("Add Pause").c_str(), "", ImVec2(0, 0), 0, false, menu_item_enable, &hovered)) { add_code_as_tick(PausePrint); } - if (menu_item_with_icon(_u8L("Add Custom G-code").c_str(), "", ImVec2(0, 0), 0, false, menu_item_enable)) { + if (hovered) { show_tooltip(_u8L("Insert a pause command at the beginning of this layer.")); } + + + if (menu_item_with_icon(_u8L("Add Custom G-code").c_str(), "", ImVec2(0, 0), 0, false, menu_item_enable, &hovered)) { m_show_custom_gcode_window = true; } + if (hovered) { show_tooltip(_u8L("Insert custom G-code at the beginning of this layer.")); } + if (!gcode(Template).empty()) { - if (menu_item_with_icon(_u8L("Add Custom Template").c_str(), "", ImVec2(0, 0), 0, false, menu_item_enable)) { + if (menu_item_with_icon(_u8L("Add Custom Template").c_str(), "", ImVec2(0, 0), 0, false, menu_item_enable, &hovered)) { add_code_as_tick(Template); } } + if (hovered) { show_tooltip(_u8L("Insert template custom G-code at the beginning of this layer.")); } + if (menu_item_with_icon(_u8L("Jump to Layer").c_str(), "")) { m_show_go_to_layer_dialog = true; } @@ -1250,11 +1262,13 @@ void IMSlider::render_add_menu() for (int i = 0; i < extruder_num; i++) { std::array rgba = decode_color_to_float_array(m_extruder_colors[i]); ImU32 icon_clr = IM_COL32(rgba[0] * 255.0f, rgba[1] * 255.0f, rgba[2] * 255.0f, rgba[3] * 255.0f); - if (menu_item_with_icon((_u8L("Filament ") + std::to_string(i + 1)).c_str(), "", ImVec2(14, 14) * m_scale, icon_clr)) add_code_as_tick(ToolChange, i + 1); + if (menu_item_with_icon((_u8L("Filament ") + std::to_string(i + 1)).c_str(), "", ImVec2(14, 14) * m_scale, icon_clr, false, true, &hovered)) add_code_as_tick(ToolChange, i + 1); + if (hovered) { show_tooltip(_u8L("Change filament at the beginning of this layer.")); } } end_menu(); } } + ImGui::EndPopup(); } } diff --git a/src/slic3r/GUI/IMSlider.hpp b/src/slic3r/GUI/IMSlider.hpp index e4126a2148..a2fe6c0798 100644 --- a/src/slic3r/GUI/IMSlider.hpp +++ b/src/slic3r/GUI/IMSlider.hpp @@ -147,6 +147,7 @@ protected: void draw_colored_band(const ImRect& groove, const ImRect& slideable_region); void draw_ticks(const ImRect& slideable_region); void show_tooltip(const TickCode& tick); //menu + void show_tooltip(const std::string tooltip); //menu bool vertical_slider(const char* str_id, int* higher_value, int* lower_value, std::string& higher_label, std::string& lower_label, int v_min, int v_max, const ImVec2& size, diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 7d623e4892..9cc4b70d70 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -1119,7 +1119,7 @@ bool ImGuiWrapper::undo_redo_list(const ImVec2& size, const bool is_undo, bool ( // To do that we push a ColorMarkerHovered symbol at the very beginning of the label // This symbol will be used to a color selection for the highlighted letters. // see imgui_draw.cpp, void ImFont::RenderText() -static bool selectable(const char* label, bool selected, ImGuiSelectableFlags flags = 0, const ImVec2& size_arg = ImVec2(0, 0)) +static bool selectable(const char* label, bool selected, ImGuiSelectableFlags flags = 0, const ImVec2& size_arg = ImVec2(0, 0), bool* out_hovered = nullptr) { ImGuiWindow* window = ImGui::GetCurrentWindow(); if (window->SkipItems) @@ -1265,10 +1265,11 @@ static bool selectable(const char* label, bool selected, ImGuiSelectableFlags fl if (flags & ImGuiSelectableFlags_Disabled) ImGui::PopStyleColor(); if (hovered || selected) ImGui::PopStyleColor(); + if (out_hovered) *out_hovered = hovered; + // Automatically close popups if (pressed && (window->Flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiSelectableFlags_DontClosePopups) && !(g.CurrentItemFlags & ImGuiItemFlags_SelectableDontClosePopup)) ImGui::CloseCurrentPopup(); - IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.LastItemStatusFlags); return pressed; } @@ -1437,7 +1438,7 @@ void end_menu() ImGui::EndMenu(); } -bool menu_item_with_icon(const char *label, const char *shortcut, ImVec2 icon_size /* = ImVec2(0, 0)*/, ImU32 icon_color /* = 0*/, bool selected /* = false*/, bool enabled /* = true*/) +bool menu_item_with_icon(const char *label, const char *shortcut, ImVec2 icon_size /* = ImVec2(0, 0)*/, ImU32 icon_color /* = 0*/, bool selected /* = false*/, bool enabled /* = true*/, bool* hovered/* = nullptr*/) { ImGuiWindow *window = ImGui::GetCurrentWindow(); if (window->SkipItems) return false; @@ -1470,7 +1471,7 @@ bool menu_item_with_icon(const char *label, const char *shortcut, ImVec2 icon_si float shortcut_w = shortcut ? ImGui::CalcTextSize(shortcut, NULL).x : 0.0f; float min_w = window->DC.MenuColumns.DeclColumns(label_size.x, shortcut_w, IM_FLOOR(g.FontSize * 1.20f)); // Feedback for next frame float extra_w = std::max(0.0f, ImGui::GetContentRegionAvail().x - min_w); - pressed = selectable(label, false, flags | ImGuiSelectableFlags_SpanAvailWidth, ImVec2(min_w, 0.0f)); + pressed = selectable(label, false, flags | ImGuiSelectableFlags_SpanAvailWidth, ImVec2(min_w, 0.0f), hovered); if (icon_size.x != 0 && icon_size.y != 0) { float selectable_pos_y = pos.y + -0.5f * style.ItemSpacing.y; diff --git a/src/slic3r/GUI/ImGuiWrapper.hpp b/src/slic3r/GUI/ImGuiWrapper.hpp index acd72dab22..052ea00e5e 100644 --- a/src/slic3r/GUI/ImGuiWrapper.hpp +++ b/src/slic3r/GUI/ImGuiWrapper.hpp @@ -39,7 +39,7 @@ bool button_with_pos(ImTextureID user_texture_id, const ImVec2 &margin = ImVec2(0, 0)); bool begin_menu(const char *label, bool enabled = true); void end_menu(); -bool menu_item_with_icon(const char *label, const char *shortcut, ImVec2 icon_size = ImVec2(0, 0), ImU32 icon_color = 0, bool selected = false, bool enabled = true); +bool menu_item_with_icon(const char *label, const char *shortcut, ImVec2 icon_size = ImVec2(0, 0), ImU32 icon_color = 0, bool selected = false, bool enabled = true, bool* hovered = nullptr); class ImGuiWrapper From 2954a947afee2dd5837b155e72d4605eb82cf40d Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Mon, 10 Apr 2023 11:28:01 +0800 Subject: [PATCH 276/339] FIX: delete plate shouldn't have a shortcut key Change-Id: Icbe920c4ae30c2054cc7e114e00e829b862b04b0 --- src/slic3r/GUI/GUI_Factories.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index 0b8d4973dc..0c87d2a1ef 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -1197,11 +1197,11 @@ void MenuFactory::create_plate_menu() // delete current plate #ifdef __WINDOWS__ - append_menu_item(menu, wxID_ANY, _L("Delete") + "\t" + _L("Del"), _L("Remove the selected plate"), + append_menu_item(menu, wxID_ANY, _L("Delete Plate"), _L("Remove the selected plate"), [](wxCommandEvent&) { plater()->delete_plate(); }, "menu_delete", nullptr, []() { return plater()->can_delete_plate(); }, m_parent); #else - append_menu_item(menu, wxID_ANY, _L("Delete") + "\tBackSpace", _L("Remove the selected plate"), + append_menu_item(menu, wxID_ANY, _L("Delete Plate"), _L("Remove the selected plate"), [](wxCommandEvent&) { plater()->delete_plate(); }, "", nullptr, []() { return plater()->can_delete_plate(); }, m_parent); #endif From 474e3636511729844d142c3715494857c0b2662a Mon Sep 17 00:00:00 2001 From: gerrit Date: Tue, 11 Apr 2023 08:04:14 +0800 Subject: [PATCH 277/339] ci: update build version to 01.06.00.56 Change-Id: I905ebcc5f734aa95a94e2fe4d2649582a11544c9 --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index 277ec8970b..e6d02f0851 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.06.00.55") +set(SLIC3R_VERSION "01.06.00.56") From b7340796975e64ca78d95758a32718bb33aa46d0 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Tue, 11 Apr 2023 09:23:17 +0800 Subject: [PATCH 278/339] NEW: add Client-Name to http header Change-Id: Ib2d4a2fd6262e833a8237d065d705ce6bad4e735 Signed-off-by: Stone Li --- src/slic3r/GUI/GUI_App.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 6ec8a20c4a..b6db9138e1 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -2127,6 +2127,7 @@ std::map GUI_App::get_extra_header() { std::map extra_headers; extra_headers.insert(std::make_pair("X-BBL-Client-Type", "slicer")); + extra_headers.insert(std::make_pair("X-BBL-Client-Name", SLIC3R_APP_NAME)); extra_headers.insert(std::make_pair("X-BBL-Client-Version", VersionInfo::convert_full_version(SLIC3R_VERSION))); #if defined(__WINDOWS__) extra_headers.insert(std::make_pair("X-BBL-OS-Type", "windows")); From 0ea0d7e45618ccd076702bcc14c9e4c6addd49d6 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Mon, 10 Apr 2023 16:25:53 +0800 Subject: [PATCH 279/339] FIX: not report liveview failure on stop Change-Id: I1cce2bde58e3c8ca7a0dbda905552cd37789d203 --- src/slic3r/GUI/MediaPlayCtrl.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp index 797e12be4c..5deca39a0c 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.cpp +++ b/src/slic3r/GUI/MediaPlayCtrl.cpp @@ -192,8 +192,8 @@ void MediaPlayCtrl::Play() m_url = url; if (m_last_state == MEDIASTATE_INITIALIZING) { if (url.empty() || !boost::algorithm::starts_with(url, "bambu:///")) { - Stop(); - SetStatus(wxString::Format(_L("Initialize failed (%s)!"), url.empty() ? _L("Network unreachable") : from_u8(url))); + m_failed_code = 3; + Stop(wxString::Format(_L("Initialize failed (%s)!"), url.empty() ? _L("Network unreachable") : from_u8(url))); } else { m_last_state = MEDIASTATE_LOADING; SetStatus(_L("Loading...")); @@ -215,6 +215,7 @@ void MediaPlayCtrl::Play() void MediaPlayCtrl::Stop(wxString const &msg) { + bool failed = m_last_state != wxMEDIASTATE_PLAYING; if (m_last_state != MEDIASTATE_IDLE) { m_media_ctrl->InvalidateBestSize(); m_button_play->SetIcon("media_play"); @@ -234,14 +235,15 @@ void MediaPlayCtrl::Stop(wxString const &msg) SetStatus(msg, false); } - if (m_failed_code != 0) { + if (failed && m_failed_code != 0) { json j; - j["stage"] = std::to_string(m_last_state); - j["dev_id"] = m_machine; - j["dev_ip"] = m_lan_ip; - j["result"] = "failed"; - j["code"] = m_failed_code; - NetworkAgent* agent = wxGetApp().getAgent(); + j["stage"] = std::to_string(m_last_state); + j["dev_id"] = m_machine; + j["dev_ip"] = m_lan_ip; + j["result"] = "failed"; + j["code"] = m_failed_code; + j["msg"] = into_u8(msg); + NetworkAgent *agent = wxGetApp().getAgent(); if (agent) agent->track_event("start_liveview", j.dump()); } @@ -400,10 +402,9 @@ void MediaPlayCtrl::onStateChanged(wxMediaEvent &event) m_tasks.push_back(""); m_cond.notify_all(); } else if (event.GetId()) { - Stop(); if (m_failed_code == 0) m_failed_code = 2; - SetStatus(_L("Load failed [%d]!")); + Stop(_L("Load failed [%d]!")); } } else { m_last_state = state; From 60dd35b4bf44a0187de68ed05c64632395110ae2 Mon Sep 17 00:00:00 2001 From: "salt.wei" Date: Tue, 11 Apr 2023 10:08:17 +0800 Subject: [PATCH 280/339] ENH: fuzzy skin handling 1 limit the range of setting 2 avoid too dense points when fuzzy skin enabled Signed-off-by: salt.wei Change-Id: I6691fd03d2aa960b055b68100dfb338b640cb4af --- src/libslic3r/PerimeterGenerator.cpp | 7 +++++-- src/libslic3r/PrintConfig.cpp | 3 +++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 9a3a7f759a..093e47dc98 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -834,7 +834,7 @@ void PerimeterGenerator::process_classic() // extra perimeters for each one // BBS: don't simplify too much which influence arc fitting when export gcode if arc_fitting is enabled - double surface_simplify_resolution = (print_config->enable_arc_fitting) ? 0.1 * m_scaled_resolution : m_scaled_resolution; + double surface_simplify_resolution = (print_config->enable_arc_fitting && this->config->fuzzy_skin == FuzzySkinType::None) ? 0.2 * m_scaled_resolution : m_scaled_resolution; for (const Surface &surface : this->slices->surfaces) { // detect how many perimeters must be generated for this island int loop_number = this->config->wall_loops + surface.extra_perimeters - 1; // 0-indexed loops @@ -1276,12 +1276,15 @@ void PerimeterGenerator::process_arachne() m_lower_slices_polygons = offset(*this->lower_slices, float(scale_(+nozzle_diameter / 2))); } + + // BBS: don't simplify too much which influence arc fitting when export gcode if arc_fitting is enabled + double surface_simplify_resolution = (print_config->enable_arc_fitting && this->config->fuzzy_skin == FuzzySkinType::None) ? 0.2 * m_scaled_resolution : m_scaled_resolution; // we need to process each island separately because we might have different // extra perimeters for each one for (const Surface& surface : this->slices->surfaces) { // detect how many perimeters must be generated for this island int loop_number = this->config->wall_loops + surface.extra_perimeters - 1; // 0-indexed loops - ExPolygons last = offset_ex(surface.expolygon.simplify_p(m_scaled_resolution), -float(ext_perimeter_width / 2. - ext_perimeter_spacing / 2.)); + ExPolygons last = offset_ex(surface.expolygon.simplify_p(surface_simplify_resolution), -float(ext_perimeter_width / 2. - ext_perimeter_spacing / 2.)); Polygons last_p = to_polygons(last); double min_nozzle_diameter = *std::min_element(print_config->nozzle_diameter.values.begin(), print_config->nozzle_diameter.values.end()); diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 688444d013..8eb35eb739 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -1443,6 +1443,7 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("The width within which to jitter. It's adversed to be below outer wall line width"); def->sidetext = L("mm"); def->min = 0; + def->max = 1; def->mode = comSimple; def->set_default_value(new ConfigOptionFloat(0.3)); @@ -1451,6 +1452,8 @@ void PrintConfigDef::init_fff_params() def->category = L("Others"); def->tooltip = L("The average diatance between the random points introducded on each line segment"); def->sidetext = L("mm"); + def->min = 0; + def->max = 5; def->mode = comSimple; def->set_default_value(new ConfigOptionFloat(0.8)); From a2386a3c3b1db47ff88bfd05c9410884c31a38b8 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Mon, 10 Apr 2023 09:37:10 +0800 Subject: [PATCH 281/339] FIX: [STUDIO-2617] thread locale when save 3mf model Change-Id: I0b76b70922df8ec4fdeec7e15d824b9acd19a63b --- src/libslic3r/Format/bbs_3mf.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index ad7d8fff68..e0eb8fcb77 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -5974,6 +5974,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) mz_zip_archive archive; mz_zip_zero_struct(&archive); mz_zip_writer_init_heap(&archive, 0, 1024 * 1024); + CNumericLocalesSetter locales_setter; _add_model_file_to_archive(object_paths[i], archive, model, objects_data2, nullptr, project); iter->second = objects_data2.begin()->second; void *ppBuf; size_t pSize; From 874081e8d7ebb16095efc3ac871a98f61c1bbeb9 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Mon, 10 Apr 2023 14:14:53 +0800 Subject: [PATCH 282/339] FIX: open more staffpick Change-Id: I955cf2aa774ddedcc42ac68e367232c106b18988 --- src/slic3r/GUI/GUI_App.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index b6db9138e1..7994f42315 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -3808,6 +3808,12 @@ std::string GUI_App::handle_web_request(std::string cmd) } } } + else if (command_str.compare("common_openurl") == 0) { + boost::optional path = root.get_optional("url"); + if (path.has_value()) { + wxLaunchDefaultBrowser(path.value()); + } + } } } catch (...) { From aa6785bde40faf49a7c037eaecec4a58a78203f6 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Tue, 11 Apr 2023 10:45:16 +0800 Subject: [PATCH 283/339] FIX: magyar display problem Change-Id: I7b202b7f240fb7426529b8e8165621d4ac9664b7 --- src/slic3r/GUI/ImGuiWrapper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 9cc4b70d70..a3ed10cd8b 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -2079,7 +2079,7 @@ void ImGuiWrapper::init_font(bool compress) cfg.OversampleH = cfg.OversampleV = 1; //FIXME replace with io.Fonts->AddFontFromMemoryTTF(buf_decompressed_data, (int)buf_decompressed_size, m_font_size, nullptr, ranges.Data); //https://github.com/ocornut/imgui/issues/220 - default_font = io.Fonts->AddFontFromFileTTF((Slic3r::resources_dir() + "/fonts/" + "HarmonyOS_Sans_SC_Regular.ttf").c_str(), m_font_size, &cfg, ImGui::GetIO().Fonts->GetGlyphRangesChineseFull()); + default_font = io.Fonts->AddFontFromFileTTF((Slic3r::resources_dir() + "/fonts/" + "HarmonyOS_Sans_SC_Regular.ttf").c_str(), m_font_size, &cfg, m_font_cjk ? ImGui::GetIO().Fonts->GetGlyphRangesChineseFull() : ranges.Data); if (default_font == nullptr) { default_font = io.Fonts->AddFontDefault(); if (default_font == nullptr) { From 4174f361f1064c7be2b2e8e327dcb03d192590d9 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Tue, 11 Apr 2023 11:58:11 +0800 Subject: [PATCH 284/339] FIX: fix crash when no sec_link Change-Id: I41aa905b0dcac3d5b162fea5b19a1d2c6aa72b68 Signed-off-by: Stone Li --- src/slic3r/GUI/DeviceManager.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 7db3e4fd40..37b2037540 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -3888,7 +3888,10 @@ void DeviceManager::on_machine_alive(std::string json_str) std::string printer_signal = j["dev_signal"].get(); std::string connect_type = j["connect_type"].get(); std::string bind_state = j["bind_state"].get(); - std::string sec_link = j["sec_link"].get(); + std::string sec_link = ""; + if (j.contains("sec_link")) { + sec_link = j["sec_link"].get(); + } MachineObject* obj; From cb68d4c60b54069e641ea905cb4ccc82c522ce3b Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Tue, 11 Apr 2023 11:20:20 +0800 Subject: [PATCH 285/339] FIX: tooltip display problem Change-Id: I122f9b63a7e458838552c9d9cd0ee20d7bd7bfd5 --- src/slic3r/GUI/IMSlider.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/IMSlider.cpp b/src/slic3r/GUI/IMSlider.cpp index c435ab8667..f1e81e58c9 100644 --- a/src/slic3r/GUI/IMSlider.cpp +++ b/src/slic3r/GUI/IMSlider.cpp @@ -1245,8 +1245,8 @@ void IMSlider::render_add_menu() if (menu_item_with_icon(_u8L("Add Custom Template").c_str(), "", ImVec2(0, 0), 0, false, menu_item_enable, &hovered)) { add_code_as_tick(Template); } + if (hovered) { show_tooltip(_u8L("Insert template custom G-code at the beginning of this layer.")); } } - if (hovered) { show_tooltip(_u8L("Insert template custom G-code at the beginning of this layer.")); } if (menu_item_with_icon(_u8L("Jump to Layer").c_str(), "")) { m_show_go_to_layer_dialog = true; From 9b6a182e8f11c2fcfdea9a41fb1e9c50ff6b10bd Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Tue, 11 Apr 2023 14:20:18 +0800 Subject: [PATCH 286/339] FIX: modify the translation. Change-Id: I94c1dc1a811b063611d43f6bde5e591e381cb4da --- bbl/i18n/BambuStudio.pot | 21 ++++++++++++++++-- bbl/i18n/de/BambuStudio_de.po | 30 +++++++++++++++++++++---- bbl/i18n/en/BambuStudio_en.po | 30 +++++++++++++++++++++---- bbl/i18n/es/BambuStudio_es.po | 30 +++++++++++++++++++++---- bbl/i18n/fr/BambuStudio_fr.po | 30 +++++++++++++++++++++---- bbl/i18n/hu/BambuStudio_hu.po | 30 +++++++++++++++++++++---- bbl/i18n/it/BambuStudio_it.po | 30 +++++++++++++++++++++---- bbl/i18n/ja/BambuStudio_ja.po | 30 +++++++++++++++++++++---- bbl/i18n/nl/BambuStudio_nl.po | 30 +++++++++++++++++++++---- bbl/i18n/sv/BambuStudio_sv.po | 30 +++++++++++++++++++++---- bbl/i18n/zh_cn/BambuStudio_zh_CN.po | 33 ++++++++++++++++++++++------ resources/i18n/de/BambuStudio.mo | Bin 233315 -> 233098 bytes resources/i18n/en/BambuStudio.mo | Bin 213870 -> 213657 bytes resources/i18n/es/BambuStudio.mo | Bin 233338 -> 233131 bytes resources/i18n/fr/BambuStudio.mo | Bin 239290 -> 239079 bytes resources/i18n/hu/BambuStudio.mo | Bin 234293 -> 234090 bytes resources/i18n/it/BambuStudio.mo | Bin 229237 -> 229016 bytes resources/i18n/ja/BambuStudio.mo | Bin 222800 -> 222555 bytes resources/i18n/nl/BambuStudio.mo | Bin 230142 -> 229896 bytes resources/i18n/sv/BambuStudio.mo | Bin 220142 -> 219894 bytes resources/i18n/zh_cn/BambuStudio.mo | Bin 212073 -> 212769 bytes src/libslic3r/PrintConfig.cpp | 3 ++- 22 files changed, 281 insertions(+), 46 deletions(-) diff --git a/bbl/i18n/BambuStudio.pot b/bbl/i18n/BambuStudio.pot index 88bbfe6b0e..ccf4c71022 100644 --- a/bbl/i18n/BambuStudio.pot +++ b/bbl/i18n/BambuStudio.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-10 17:16+0800\n" +"POT-Creation-Date: 2023-04-11 14:18+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1010,6 +1010,9 @@ msgstr "" msgid "auto rotate current plate" msgstr "" +msgid "Delete Plate" +msgstr "" + msgid "Remove the selected plate" msgstr "" @@ -1362,15 +1365,27 @@ msgstr "" msgid "Add Pause" msgstr "" +msgid "Insert a pause command at the beginning of this layer." +msgstr "" + msgid "Add Custom G-code" msgstr "" +msgid "Insert custom G-code at the beginning of this layer." +msgstr "" + msgid "Add Custom Template" msgstr "" +msgid "Insert template custom G-code at the beginning of this layer." +msgstr "" + msgid "Filament " msgstr "" +msgid "Change filament at the beginning of this layer." +msgstr "" + msgid "Delete Pause" msgstr "" @@ -7702,7 +7717,9 @@ msgid "" msgstr "" msgid "" -"Print a tower to prime material in nozzle after switching to a new material." +"The wiping tower can be used to clean up the residue on the nozzle and " +"stabilize the chamber pressure inside the nozzle, in order to avoid " +"appearance defects when printing objects." msgstr "" msgid "Purging volumes" diff --git a/bbl/i18n/de/BambuStudio_de.po b/bbl/i18n/de/BambuStudio_de.po index 53984d3501..27e96888ed 100644 --- a/bbl/i18n/de/BambuStudio_de.po +++ b/bbl/i18n/de/BambuStudio_de.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-10 17:16+0800\n" +"POT-Creation-Date: 2023-04-11 14:18+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1035,6 +1035,9 @@ msgstr "Automatisch rotieren" msgid "auto rotate current plate" msgstr "Aktuelle Druckplatte automatisch rotieren" +msgid "Delete Plate" +msgstr "" + msgid "Remove the selected plate" msgstr "Aktuelle Druckplatte entfernen" @@ -1411,15 +1414,27 @@ msgstr "Bitte geben Sie die Schichtnummer ein." msgid "Add Pause" msgstr "Pause hinzufügen" +msgid "Insert a pause command at the beginning of this layer." +msgstr "" + msgid "Add Custom G-code" msgstr "Benutzerdefinierten G-Code hinzufügen" +msgid "Insert custom G-code at the beginning of this layer." +msgstr "" + msgid "Add Custom Template" msgstr "Benutzerdefinierte Vorlage hinzufügen" +msgid "Insert template custom G-code at the beginning of this layer." +msgstr "" + msgid "Filament " msgstr "Filament" +msgid "Change filament at the beginning of this layer." +msgstr "" + msgid "Delete Pause" msgstr "" @@ -8554,10 +8569,10 @@ msgstr "" "Bahn bewegt." msgid "" -"Print a tower to prime material in nozzle after switching to a new material." +"The wiping tower can be used to clean up the residue on the nozzle and " +"stabilize the chamber pressure inside the nozzle, in order to avoid " +"appearance defects when printing objects." msgstr "" -"Drucken Sie einen Turm, um das Material in der Düse nach dem Wechsel zu " -"einem neuen Material zu entfernen." msgid "Purging volumes" msgstr "Reinigungsvolumen" @@ -9273,6 +9288,13 @@ msgstr "" "Wussten Sie, dass Sie die Festigkeit des Modells durch mehr Wandschleifen " "und eine höhere Dichte der Füllung verbessern können?" +#~ msgid "" +#~ "Print a tower to prime material in nozzle after switching to a new " +#~ "material." +#~ msgstr "" +#~ "Drucken Sie einen Turm, um das Material in der Düse nach dem Wechsel zu " +#~ "einem neuen Material zu entfernen." + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/en/BambuStudio_en.po b/bbl/i18n/en/BambuStudio_en.po index 33fad4b92c..59a3988f03 100644 --- a/bbl/i18n/en/BambuStudio_en.po +++ b/bbl/i18n/en/BambuStudio_en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-10 17:16+0800\n" +"POT-Creation-Date: 2023-04-11 14:18+0800\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1020,6 +1020,9 @@ msgstr "Auto Rotate" msgid "auto rotate current plate" msgstr "Auto rotate current plate" +msgid "Delete Plate" +msgstr "" + msgid "Remove the selected plate" msgstr "Remove the selected plate" @@ -1378,15 +1381,27 @@ msgstr "Please enter the layer number." msgid "Add Pause" msgstr "Add Pause" +msgid "Insert a pause command at the beginning of this layer." +msgstr "" + msgid "Add Custom G-code" msgstr "Add Custom G-code" +msgid "Insert custom G-code at the beginning of this layer." +msgstr "" + msgid "Add Custom Template" msgstr "Add Custom Template" +msgid "Insert template custom G-code at the beginning of this layer." +msgstr "" + msgid "Filament " msgstr "Filament " +msgid "Change filament at the beginning of this layer." +msgstr "" + msgid "Delete Pause" msgstr "" @@ -8344,10 +8359,10 @@ msgstr "" "retracting." msgid "" -"Print a tower to prime material in nozzle after switching to a new material." +"The wiping tower can be used to clean up the residue on the nozzle and " +"stabilize the chamber pressure inside the nozzle, in order to avoid " +"appearance defects when printing objects." msgstr "" -"This option enables printing a tower to prime material in the nozzle after " -"switching to a new material." msgid "Purging volumes" msgstr "Purging volumes" @@ -9044,6 +9059,13 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" +#~ msgid "" +#~ "Print a tower to prime material in nozzle after switching to a new " +#~ "material." +#~ msgstr "" +#~ "This option enables printing a tower to prime material in the nozzle " +#~ "after switching to a new material." + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/es/BambuStudio_es.po b/bbl/i18n/es/BambuStudio_es.po index de8472d9b8..db543380d7 100644 --- a/bbl/i18n/es/BambuStudio_es.po +++ b/bbl/i18n/es/BambuStudio_es.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-10 17:16+0800\n" +"POT-Creation-Date: 2023-04-11 14:18+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1036,6 +1036,9 @@ msgstr "Rotación automática" msgid "auto rotate current plate" msgstr "Auto rotación de la placa actual" +msgid "Delete Plate" +msgstr "" + msgid "Remove the selected plate" msgstr "Retirar la placa seleccionada" @@ -1404,15 +1407,27 @@ msgstr "Por favor, introduzca el número de capa." msgid "Add Pause" msgstr "Añadir pausa" +msgid "Insert a pause command at the beginning of this layer." +msgstr "" + msgid "Add Custom G-code" msgstr "Agregar código G personalizado" +msgid "Insert custom G-code at the beginning of this layer." +msgstr "" + msgid "Add Custom Template" msgstr "Añadir plantilla personalizada" +msgid "Insert template custom G-code at the beginning of this layer." +msgstr "" + msgid "Filament " msgstr "FIlament" +msgid "Change filament at the beginning of this layer." +msgstr "" + msgid "Delete Pause" msgstr "" @@ -8529,10 +8544,10 @@ msgstr "" "trayectoria al retraerse" msgid "" -"Print a tower to prime material in nozzle after switching to a new material." +"The wiping tower can be used to clean up the residue on the nozzle and " +"stabilize the chamber pressure inside the nozzle, in order to avoid " +"appearance defects when printing objects." msgstr "" -"Imprimir una torre para cebar el material en la boquilla después de cambiar " -"a un nuevo material." msgid "Purging volumes" msgstr "Volúmenes de purga" @@ -9238,6 +9253,13 @@ msgstr "" "¿Sabía que puede utilizar más bucles de pared y una densidad de relleno " "dispersa más alta para mejorar la resistencia del modelo?" +#~ msgid "" +#~ "Print a tower to prime material in nozzle after switching to a new " +#~ "material." +#~ msgstr "" +#~ "Imprimir una torre para cebar el material en la boquilla después de " +#~ "cambiar a un nuevo material." + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/fr/BambuStudio_fr.po b/bbl/i18n/fr/BambuStudio_fr.po index eeed0ed721..1fb4980e03 100644 --- a/bbl/i18n/fr/BambuStudio_fr.po +++ b/bbl/i18n/fr/BambuStudio_fr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-10 17:16+0800\n" +"POT-Creation-Date: 2023-04-11 14:18+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1038,6 +1038,9 @@ msgstr "Rotation automatique" msgid "auto rotate current plate" msgstr "rotation automatique de la plaque actuelle" +msgid "Delete Plate" +msgstr "" + msgid "Remove the selected plate" msgstr "Supprimer la plaque sélectionnée" @@ -1406,15 +1409,27 @@ msgstr "Veuillez entrer le numéro de la couche." msgid "Add Pause" msgstr "Ajouter une Pause" +msgid "Insert a pause command at the beginning of this layer." +msgstr "" + msgid "Add Custom G-code" msgstr "Ajouter un G-code personnalisé" +msgid "Insert custom G-code at the beginning of this layer." +msgstr "" + msgid "Add Custom Template" msgstr "Ajouter un Modèle Personnalisé" +msgid "Insert template custom G-code at the beginning of this layer." +msgstr "" + msgid "Filament " msgstr "Filament" +msgid "Change filament at the beginning of this layer." +msgstr "" + msgid "Delete Pause" msgstr "" @@ -8556,10 +8571,10 @@ msgstr "" "de la rétraction" msgid "" -"Print a tower to prime material in nozzle after switching to a new material." +"The wiping tower can be used to clean up the residue on the nozzle and " +"stabilize the chamber pressure inside the nozzle, in order to avoid " +"appearance defects when printing objects." msgstr "" -"Imprimez une tour pour amorcer le matériau dans la buse après être passé à " -"un nouveau matériau." msgid "Purging volumes" msgstr "Volumes de purge" @@ -9279,6 +9294,13 @@ msgstr "" "Saviez-vous que vous pouvez définir un plus grand nombre de mur et une " "densité de remplissage plus élevée pour améliorer la résistance du modèle ?" +#~ msgid "" +#~ "Print a tower to prime material in nozzle after switching to a new " +#~ "material." +#~ msgstr "" +#~ "Imprimez une tour pour amorcer le matériau dans la buse après être passé " +#~ "à un nouveau matériau." + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/hu/BambuStudio_hu.po b/bbl/i18n/hu/BambuStudio_hu.po index bac28fa152..c9cf8c4148 100644 --- a/bbl/i18n/hu/BambuStudio_hu.po +++ b/bbl/i18n/hu/BambuStudio_hu.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-10 17:16+0800\n" +"POT-Creation-Date: 2023-04-11 14:18+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1033,6 +1033,9 @@ msgstr "Automatikus forgatás" msgid "auto rotate current plate" msgstr "aktuális tálca automatikus forgatása" +msgid "Delete Plate" +msgstr "" + msgid "Remove the selected plate" msgstr "Kiválasztott tálca eltávolítása" @@ -1400,15 +1403,27 @@ msgstr "Kérjük, add meg a réteg számát." msgid "Add Pause" msgstr "Szünet hozzáadása" +msgid "Insert a pause command at the beginning of this layer." +msgstr "" + msgid "Add Custom G-code" msgstr "Egyedi G-kód hozzáadása" +msgid "Insert custom G-code at the beginning of this layer." +msgstr "" + msgid "Add Custom Template" msgstr "Egyéni sablon hozzáadása" +msgid "Insert template custom G-code at the beginning of this layer." +msgstr "" + msgid "Filament " msgstr "Filament " +msgid "Change filament at the beginning of this layer." +msgstr "" + msgid "Delete Pause" msgstr "" @@ -8462,10 +8477,10 @@ msgstr "" "útvonalán" msgid "" -"Print a tower to prime material in nozzle after switching to a new material." +"The wiping tower can be used to clean up the residue on the nozzle and " +"stabilize the chamber pressure inside the nozzle, in order to avoid " +"appearance defects when printing objects." msgstr "" -"Egy tornyot nyomtat a fúvókában lévő anyag kiöblítéséhez új anyagra váltás " -"után." msgid "Purging volumes" msgstr "Tisztítási mennyiségek" @@ -9165,6 +9180,13 @@ msgstr "" "Tudtad, hogy több fal vagy nagyobb kitöltés használatával javíthatod a " "modell szilárdságát?" +#~ msgid "" +#~ "Print a tower to prime material in nozzle after switching to a new " +#~ "material." +#~ msgstr "" +#~ "Egy tornyot nyomtat a fúvókában lévő anyag kiöblítéséhez új anyagra " +#~ "váltás után." + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/it/BambuStudio_it.po b/bbl/i18n/it/BambuStudio_it.po index 458a13a873..60eb8740c6 100644 --- a/bbl/i18n/it/BambuStudio_it.po +++ b/bbl/i18n/it/BambuStudio_it.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-10 17:16+0800\n" +"POT-Creation-Date: 2023-04-11 14:18+0800\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1026,6 +1026,9 @@ msgstr "Rotazione automatica" msgid "auto rotate current plate" msgstr "Rotazione automatica piatto corrente" +msgid "Delete Plate" +msgstr "" + msgid "Remove the selected plate" msgstr "Rimuovi il piatto selezionato" @@ -1397,15 +1400,27 @@ msgstr "Inserisci numero del layer" msgid "Add Pause" msgstr "Aggiungi pausa" +msgid "Insert a pause command at the beginning of this layer." +msgstr "" + msgid "Add Custom G-code" msgstr "Aggiungi G-code personalizzato" +msgid "Insert custom G-code at the beginning of this layer." +msgstr "" + msgid "Add Custom Template" msgstr "Aggiungi template personalizzato" +msgid "Insert template custom G-code at the beginning of this layer." +msgstr "" + msgid "Filament " msgstr "Filamento" +msgid "Change filament at the beginning of this layer." +msgstr "" + msgid "Delete Pause" msgstr "" @@ -8501,10 +8516,10 @@ msgstr "" "mentre si ritrae." msgid "" -"Print a tower to prime material in nozzle after switching to a new material." +"The wiping tower can be used to clean up the residue on the nozzle and " +"stabilize the chamber pressure inside the nozzle, in order to avoid " +"appearance defects when printing objects." msgstr "" -"Consente di stampare una Prime Tower per pulire il materiale nel nozzle dopo " -"il passaggio a un nuovo materiale." msgid "Purging volumes" msgstr "Volumi di spurgo" @@ -9214,6 +9229,13 @@ msgstr "" "Sapevate che è possibile utilizzare un maggior numero di anelli a parete e " "una maggiore densità riempimento per migliorare la resistenza del modello?" +#~ msgid "" +#~ "Print a tower to prime material in nozzle after switching to a new " +#~ "material." +#~ msgstr "" +#~ "Consente di stampare una Prime Tower per pulire il materiale nel nozzle " +#~ "dopo il passaggio a un nuovo materiale." + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/ja/BambuStudio_ja.po b/bbl/i18n/ja/BambuStudio_ja.po index cc6e605b3d..1a308a4b5b 100644 --- a/bbl/i18n/ja/BambuStudio_ja.po +++ b/bbl/i18n/ja/BambuStudio_ja.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-10 17:16+0800\n" +"POT-Creation-Date: 2023-04-11 14:18+0800\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1013,6 +1013,9 @@ msgstr "自動回転" msgid "auto rotate current plate" msgstr "現在のプレートを自動回転させる" +msgid "Delete Plate" +msgstr "" + msgid "Remove the selected plate" msgstr "選択したプレートを削除" @@ -1364,15 +1367,27 @@ msgstr "層の番号をご入力ください" msgid "Add Pause" msgstr "一時停止を追加" +msgid "Insert a pause command at the beginning of this layer." +msgstr "" + msgid "Add Custom G-code" msgstr "カスタムG-codeを追加" +msgid "Insert custom G-code at the beginning of this layer." +msgstr "" + msgid "Add Custom Template" msgstr "カスタムテンプレートを追加" +msgid "Insert template custom G-code at the beginning of this layer." +msgstr "" + msgid "Filament " msgstr "フィラメント" +msgid "Change filament at the beginning of this layer." +msgstr "" + msgid "Delete Pause" msgstr "" @@ -8056,10 +8071,10 @@ msgid "" msgstr "リトラクション時にノズルが最後のパスに沿って移動する距離です。" msgid "" -"Print a tower to prime material in nozzle after switching to a new material." +"The wiping tower can be used to clean up the residue on the nozzle and " +"stabilize the chamber pressure inside the nozzle, in order to avoid " +"appearance defects when printing objects." msgstr "" -"フィラメントを入れ替えるために、ノズルに残るフィラメントをフラッシュする特定" -"の造形物です。" msgid "Purging volumes" msgstr "フラッシュ体積" @@ -8712,6 +8727,13 @@ msgstr "" "強度の向上\n" "壁面層数やインフィルの充填密度を増やして造形強度を向上できます。" +#~ msgid "" +#~ "Print a tower to prime material in nozzle after switching to a new " +#~ "material." +#~ msgstr "" +#~ "フィラメントを入れ替えるために、ノズルに残るフィラメントをフラッシュする特" +#~ "定の造形物です。" + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/nl/BambuStudio_nl.po b/bbl/i18n/nl/BambuStudio_nl.po index b744a28ebd..4c2a332159 100644 --- a/bbl/i18n/nl/BambuStudio_nl.po +++ b/bbl/i18n/nl/BambuStudio_nl.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-10 17:16+0800\n" +"POT-Creation-Date: 2023-04-11 14:18+0800\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1028,6 +1028,9 @@ msgstr "Automatisch roteren" msgid "auto rotate current plate" msgstr "Huidig printbed automatisch roteren" +msgid "Delete Plate" +msgstr "" + msgid "Remove the selected plate" msgstr "Verwijder het huidige printbed" @@ -1403,15 +1406,27 @@ msgstr "Voer het laagnummer in." msgid "Add Pause" msgstr "Pauze toevoegen" +msgid "Insert a pause command at the beginning of this layer." +msgstr "" + msgid "Add Custom G-code" msgstr "Aangepaste G-code toevoegen" +msgid "Insert custom G-code at the beginning of this layer." +msgstr "" + msgid "Add Custom Template" msgstr "Aangepaste sjabloon toevoegen" +msgid "Insert template custom G-code at the beginning of this layer." +msgstr "" + msgid "Filament " msgstr "Filament" +msgid "Change filament at the beginning of this layer." +msgstr "" + msgid "Delete Pause" msgstr "" @@ -8548,10 +8563,10 @@ msgstr "" "het terugtrekken (rectracting)." msgid "" -"Print a tower to prime material in nozzle after switching to a new material." +"The wiping tower can be used to clean up the residue on the nozzle and " +"stabilize the chamber pressure inside the nozzle, in order to avoid " +"appearance defects when printing objects." msgstr "" -"Deze optie maakt het mogelijk om een toren te printen om materiaal in de " -"nozzle te primen na het overschakelen naar een nieuw materiaal." msgid "Purging volumes" msgstr "Volumes opschonen" @@ -9259,6 +9274,13 @@ msgstr "" "Wist je dat je meer wandlussen en een hogere dunne invuldichtheid kunt " "gebruiken om de sterkte van het model te verbeteren?" +#~ msgid "" +#~ "Print a tower to prime material in nozzle after switching to a new " +#~ "material." +#~ msgstr "" +#~ "Deze optie maakt het mogelijk om een toren te printen om materiaal in de " +#~ "nozzle te primen na het overschakelen naar een nieuw materiaal." + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/sv/BambuStudio_sv.po b/bbl/i18n/sv/BambuStudio_sv.po index 1e494fe2b9..f04295ffb5 100644 --- a/bbl/i18n/sv/BambuStudio_sv.po +++ b/bbl/i18n/sv/BambuStudio_sv.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-10 17:16+0800\n" +"POT-Creation-Date: 2023-04-11 14:18+0800\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1022,6 +1022,9 @@ msgstr "Auto Rotera" msgid "auto rotate current plate" msgstr "auto rotera plattan" +msgid "Delete Plate" +msgstr "" + msgid "Remove the selected plate" msgstr "Radera den valda plattan" @@ -1387,15 +1390,27 @@ msgstr "Ange lager numret." msgid "Add Pause" msgstr "Lägg till paus" +msgid "Insert a pause command at the beginning of this layer." +msgstr "" + msgid "Add Custom G-code" msgstr "Lägg till anpassad G-kod" +msgid "Insert custom G-code at the beginning of this layer." +msgstr "" + msgid "Add Custom Template" msgstr "Lägg till anpassad mall" +msgid "Insert template custom G-code at the beginning of this layer." +msgstr "" + msgid "Filament " msgstr "Filament " +msgid "Change filament at the beginning of this layer." +msgstr "" + msgid "Delete Pause" msgstr "" @@ -8358,10 +8373,10 @@ msgstr "" "medan den retrakterar" msgid "" -"Print a tower to prime material in nozzle after switching to a new material." +"The wiping tower can be used to clean up the residue on the nozzle and " +"stabilize the chamber pressure inside the nozzle, in order to avoid " +"appearance defects when printing objects." msgstr "" -"Detta alternativ gör det möjligt att skriva ut ett torn för att pressa ut " -"(prime) material i nozzeln efter byte till ett nytt material." msgid "Purging volumes" msgstr "Rensnings volym" @@ -9060,6 +9075,13 @@ msgstr "" "Visste du att du kan använda fler väggslingor och högre gles fyllningstäthet " "för att förbättra modellens styrka?" +#~ msgid "" +#~ "Print a tower to prime material in nozzle after switching to a new " +#~ "material." +#~ msgstr "" +#~ "Detta alternativ gör det möjligt att skriva ut ett torn för att pressa ut " +#~ "(prime) material i nozzeln efter byte till ett nytt material." + #~ msgid "" #~ "\n" #~ "%1% is too close to exclusion area, there will be collisions when " diff --git a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po index d2475680aa..59ec3e8fdb 100644 --- a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po +++ b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-10 17:16+0800\n" +"POT-Creation-Date: 2023-04-11 14:18+0800\n" "PO-Revision-Date: 2023-04-10 17:13+0800\n" "Last-Translator: Jiang Yue \n" "Language-Team: \n" @@ -1017,6 +1017,9 @@ msgstr "自动朝向" msgid "auto rotate current plate" msgstr "在当前盘执行自动朝向" +msgid "Delete Plate" +msgstr "删除盘" + msgid "Remove the selected plate" msgstr "删除所选盘" @@ -1367,15 +1370,27 @@ msgstr "请输入层数" msgid "Add Pause" msgstr "添加暂停打印" +msgid "Insert a pause command at the beginning of this layer." +msgstr "在该层的起始位置插入暂停。" + msgid "Add Custom G-code" msgstr "添加自定义G-code" +msgid "Insert custom G-code at the beginning of this layer." +msgstr "在该层的起始位置插入自定义G-code。" + msgid "Add Custom Template" msgstr "添加自定义模板" +msgid "Insert template custom G-code at the beginning of this layer." +msgstr "在该层的起始位置插入模板自定义G-code。" + msgid "Filament " msgstr "耗材丝" +msgid "Change filament at the beginning of this layer." +msgstr "在该层的起始位置更换耗材丝。" + msgid "Delete Pause" msgstr "删除暂停" @@ -1855,7 +1870,7 @@ msgid "Nozzle Diameter" msgstr "喷嘴直径" msgid "Bed Type" -msgstr "热床类型" +msgstr "构建板类型" msgid "Nozzle temperature" msgstr "喷嘴温度" @@ -3924,7 +3939,7 @@ msgid "Connection" msgstr "连接" msgid "Bed type" -msgstr "热床类型" +msgstr "构建板类型" msgid "Flushing volumes" msgstr "冲刷体积" @@ -4626,7 +4641,7 @@ msgid "Print sequence" msgstr "打印顺序" msgid "Same as Global Bed Type" -msgstr "跟随全局热床类型" +msgstr "跟随全局构建板类型" msgid "Cool Plate" msgstr "低温打印板/PLA打印板" @@ -6386,7 +6401,7 @@ msgid "" msgstr "首层热床温度。0值表示这个耗材丝不支持纹理PEI热床" msgid "Bed types supported by the printer" -msgstr "打印机所支持的热床类型" +msgstr "打印机所支持的构建板类型" msgid "This G-code is inserted at every layer change before lifting z" msgstr "在每次换层抬升z高度之前插入这段G-code" @@ -7955,8 +7970,12 @@ msgid "" msgstr "表示回抽时擦拭的移动距离。" msgid "" -"Print a tower to prime material in nozzle after switching to a new material." -msgstr "切换耗材丝时,打印擦拭塔来让准配好喷嘴里材料。" +"The wiping tower can be used to clean up the residue on the nozzle and " +"stabilize the chamber pressure inside the nozzle, in order to avoid " +"appearance defects when printing objects." +msgstr "" +"擦拭塔可以用来清理喷嘴上的残留料和让喷嘴内部的腔压达到稳定状态,以避免打印物" +"体时出现外观瑕疵。" msgid "Purging volumes" msgstr "冲刷体积" diff --git a/resources/i18n/de/BambuStudio.mo b/resources/i18n/de/BambuStudio.mo index 96dac64f37d145de9b2860fcb27b4714cc50e111..b4c347a11227eb78423534e555bc37fbc4d868f2 100644 GIT binary patch delta 47622 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
    ue{W0#DlvFRVXNYanh}vs#m(7F7`p#9vU? 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
    Zce2RPNQ-b7p{ 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

    Xe7Wc62rNf_M1-&R_k^dh9r@s2P3R}1 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

    yP%VFp8agMB8M=h1 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 delta 47827 zcmZ791#}e2!ng5G26uN!kOX%K4hin=?(VLQF7ED&>$1S&?(XjH&f@+(|E}8i-1E&j zbAMIU)#X(^6SBFh=f(IoKZbidPPl0fuN9FTCmGf+;W*=>I?mkDN_CvGTOB7dp2H+~ z1B>D(EQKN4c%zF&a0_y~^BKFNZ@c68VQ&n@zE})*VmfYfoE?sng@p9z!`c`H>tl9o zg=KLT=EH}W6;teVoWxiWqhV`Iiak&bo`eZ-j&%dlN9P#E!t10C=kPAMr(Fdg&{Ux+*%gZ^UBy4>!W&p#d;0H5x;>d?=D88e&;a(RrDU!;-AVP!;$n2-$uTx&#FSVFHKz?Q4xUGi+#}3{uTVprWWOmdH6|pU4Xa~m)ZEX*T6k|i z1H+H6?A(hrLk^>W^`8JSyKJ)S6k1>d0nPIR{W3Ic2Zkz?j4z zqw;+^;Fd9 zU%|#}x&%~UL-b)+RK-0p1rEaGxB!E27peyju_1oI23YN|xo9ftgA38@l6;B_o4C~xA7~egXAt2 z#&=i%vz<1(p*`xpSr`KsVRT%NYQP@Fsoyz6AT{2?^yqiS#51CXvJ$Fc9Wes-L50(n)jtzc690tVFu^6WhDPHU;+t_KhFvxzasuNKzj~SR*U-Kq zAvS)&xESS%X?Y6N5T-))I4j1)e5koCgPPN-sD?JiIM~I;hoSDDhPrPNY9uzGj`&k9 zfk6aHT{S&Aih~uu<~U#R82*C?t~*Y9>~+KR@F8{~Ui+pwl8@ss;ze$m_(2>(Jl}1{ z8IC(q4Gz0wc1t-_L)?x8)bmlOk(h%qa2aZ`Z9=Vuov4wyfm#D^Q1^Yugc$vRW2&VdO?`K~jKfQD`^s^GtH3vNTLi7xlpLf8{E1+ng%h9*G`Xs0K|$wR|D!#&xI)H=!yxgqrJf zs1bOG@$m<0XyZIEW=4%jY1Do7QRTPB_|)(8A+Q=JpjLl@hvtUrsDfIfdN>qyeKaP< z#i$1ELapYL)_bUid_q+m?U9+P08B?b2QI>T=%ym@i-6`T@G)=9i>k0Ls)tQbtGGLA zwGT#3#RSx%oQ3Hz!V~iWBpVhXJ_PgQe$@RxF#<+;YDP5nQ^sFInt%iuglb40oQM^$ z58g%%UF~P)TxgD3d_yoRPDKsrL3{lYYUJKyc#QGfj95HWhq7Q!41Lb{Hzm-6giLtV z8vcc8P!3ef!%z*Ygz2#*=E8}niVvZBb{Qk#EsThdaV5S+O~uTYra^142JsCpf${_* zy)rGTfw_r~!W_5<^Wndk2Q$4k6*oi0XQJl*3?{>esQdliuoEx@HKpBABQYH{GIKEo zx?Ajp!#IM3lNc4Nzcm##M)hzSszJ+8&xmWN0zaY(`i{{s$~$91RC*fJ$mF!<$C$)J zk*RQ=BR=PV_KYtk?{aV!BZFxuVNXzg?dH=|7+qUP(7P~N?(QQ`B5y1&ru_l z{k_>8B{8D*e|-X}xzHSyVI;=Ic{aWtqZ2=jYRE-o)|@-2IX?Np^!OsiCVmg&;Cobq zB78LW1zIzq?hC;r+W$oqz`CfG_dxY@3Ti}Vq6*%K>F_WH;TtS~2|k&Ts*1X=K5A;3 zpw?C^yoMVw0gnG{re-O+YUxG-@$iVfa1)jB1;#@EFQ(wQsDcxr<}?NViD}UrAq*vc z5q+58tK&4nB&fB~7uC@bHooX9B#yqH&m$BBw_{5u`rl1dMq(3*AvJE3~sA63y%RFB4DbzFca z@B?ZJ_VQI!4LFG!!Hd`zU*a@u<>%*pZU2eNSK8mt`<_r4wY^=es{Ox|KwT2PU}LQ2 z^Yi9*BWl$jz=L=RHHWjqnF9X7zldMM{5T@KN#BpRi9bb6;gJY_-UyyYjpzd$gI_U{ z_W$sRe%_ppx6VgZycX5cy{I{TjOzI}8;=ml&pTj}U;ya_QTZC67H1dKA|8Y)Z#1ew zb5R{xE~($yOF-M|8tTS7sD1nz)#CT4A&wl`G$0Vu6VHrlU@g=l9DpikCTbhbM@{Kn z48SL-21JTtMkFq}I#ALO(5kM0YCr>2f$gy%j=*Mk5VdI1MfG!-EvFNfBHlHcpZ8U3 zJ9Z!*CAz7oH|8Qf6xHCZs6~DswW!}j_jA3WablPuii0V+kOs9qilZ9T3DvWKs6{!< z#%G{b`#kFg)QBCyAiRYdfp9TRzNo1315oKjW4eCcek?_TM&b|5h=1D*H&6|@Z{zP! zyW2_#p$Z&^iE%0>!?mar?*!`p`=~YY7E@q?IA&^dqv~}l6VMH9P&W*+8OEbl z^GXcBU8teHjarQFQ58pxYZ{amwaW9LI#L?7`m3QD+Q6oFu<5;#k#wCQ1k}SZsG**Z zy5TQW0lRGci1i9;1fHNb6;{7^W(1<3rXU#A(3Y432Vxkm#{m3*DYgIO$MwurD6NPFOs#8M%$9 zsXBz-&;PF23$Jhl7k;4@%^yk3zF&jgiN{K6*2HjZPka_?>LMgF4NHtFxDaX^RzmIj z7T6OfV1JB|+>G$h1r<>zV13ja_QF{>1yw=jKvO_* zRQ?*M{of3;U^{z#Hmc#P(T@}JELJ0aK9!&M(JaVKZCca~m9aMl;ym1ldr(u+Jq<%o z0kcu@wQ2pFop=$o1||iWa%Q8}%mP%$mZEmSIvYQV+O`)^i`;!hAQu7uVAGQj)HW<( zwJcnE zGxRA?EzgH4unMZ6=BR>upn5t0m2aqZ4r-hIgPQx3sD@oeJ$&w=cE@Xsp#A@ifC~1@ zUPR$rO~*ni;hg3ZNQV+*-z35miq$)KoS@S3@Uu%c$dyEYtc#lS2B?Ph#i{6K zVgLU{AYNAU!D2s_A|5%LiC4iK#Al+m%?T`vDYG+_l-w58ke)gHoDH}TRdMxPW+Ymp zI?@HT#(JZ+?@ZJP|DB8duWhiK1dYH2R8Q~WaD0cF>t4A{zLBUYnuj_U)?omiL{;<( zN8txlzJYnns-J`^XECaQ8&M;1)Fq%raSGLdYnU9LppMY+A!c;8uw#gCHK0R;a4^b_DgBm&~pBcJ@ zs0Ie1?kk9DNGa6F)I*ii3w4r?LY1=wb--;x?suIl1hl$ep?dfYGh@vBrlLX^LcF|< z4?`6+1$7QALEXQ`x(%lhKa47`egQMGT`)Uw7uDhQ=zag+XEPkLUO^4nBUHw41 zLv62MRFATu8c@z&uZG!(w?r+<8K^nlkGk&&YE7I)?UD!R?f+Kl0m{21!~3pRcgRpEWq$i2c~{E2xnZ4t9b8{#tJJ&Umab#x{#YHlow zT0G^ftxyNlP}EU77t`QgoBjy32!El5I9{mfVRF=B&4{`lh8oG*s0OvL@o}N-fAx4a z2{~~M=El1=LxM0v&X;r=x~`8LHy#sBL)`)qtm{Mfnl6h@-g0 zOb?TyZp?)m!qTXrt%jPK+Ncw&DQarEpeh`Ox^F6~K`T)AuR}eIcAzTWXFZKNA8w!? zPHvRqrh*u#8xx_Djo=5Y zgAq!2BNNAIOyD09dZP-=G^I&ETvvT-QquIX3u-n8TW4DTwjM^UqFboPkyFa7mQ0w5 zXl2ytKLFF=JXHR})@RmerA>O)(k#nwWT;Al`dXokvA(sPwJ&;Sn{|nGkM%l+a{otE zheFC4OId4KTVV~Z_d-qDsj@6f4dw+BG`QDM@rS78^a3@wzH%lW5miA-)c(ne4X_+) zOjn{tV7I+~8?}$Vp++KQc|Yd|hN1EoaVwa|P<7PocSSW|IBFG)MKxr$b%XV|y?!4x zGH+2midxaEg4n3#nhaH5Hq^!qL4Eiuit4aimw<-8IjVqesQu8#rVm7&mE)|lP>+?R zsP%pXmH(o>ehsG)e`K%st7O*3Nb4r+eIx%YQQ7R^f~cNUMYXg8>PYH|YVibAi&vuZ z{e#-sr&0Oupw|CWRKEA9sr!j)pkEb}KLTp#6Jm%ymS!TLp=yqLtn@~0$dyM41vN$aPz@`IIx8!qI@l7u$5KZES|r_2 z74=2+XbP$U3s58QHwNG?RK>S37@wg!5W9w-_iHB&@hR~|I1I?vxo z|5ZVD5>#L)DqbFkVtt$OF6Jcu9>XxWwrNOPR71z08aM+r#7j{lvIR8-@2s)vm@_vk zs>3U&~$VY;1T!jU3r;UF_EwZR}jmfYr@yw{6&qS@Ay{LvgPCP}hs24zO}I zy^6IVs)6lL`39oa+Hj1e{Xda_db-d{;9$XY#1A4ZbY7tv7QL})SbS8EQlJ)HX4JMT zVAETmMzlMsV>4`gHL8K9QTJWMq}u=Y38=@vP(u^3iJ7BhsKpnE12G3`Ev#3%A0NV+ z`ZP@R{s{Jr%_OAA_Xd622@2kQ6rQOH3iL3Ct%wa?0?NgClZQcU#yBdP!-2$ zX}*#aKs{!=p&ED&i{Tqo!*jMW+p#j{Cf*y<;#ySCFQPj14D}T!QERhXDz|pccc9@U z)Z)TFs2ifTF%1YnJ$@^ode8#3m?oflxCph%SEEK~2WkWkp{DK}YNYO?M*2BwO?<`@ z7}afSdQb&(k!Oy9QU9k`zLk)Svj^@7T*2FlT z^t5;dH{ud>$96Jbz_WMu^L`Ux3#z51yO@G%U}fU

    W{`mdEX=9!KnIc1vtj&-0^p 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
    nWDz`fl4srNt(%UZp7GJJy4% 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 F{{ahjA3Xp7 delta 47859 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
    i?% z!YQZ`-h?W5*BAD`Zahqarr-u@Zf>C(a2Iv`HL8ITzM6P^R6HY=WoQbZIx_5=spvOs zKzsw%!|315S4OR{Ch@(f{BhlX{hav(QlW-;FIK|+s1KDfewe3POH>agqZ+sowdl5D z7#_oh80n{FYKS+WhU_q^ z=VxsCE!0T8LCx(C)Kf14htq?J&1`rNDoFm)$XG1`;IEl@%g-O;rMVh(d?)b@fJ42Z2mqz2eAL9641x$8>o>; z9Kq*(XCoVGs7Ij|(>T;fEJF?b4%F&CiQ4zqF$h0kTTB+wjKB!g(K{Pe&l1$!-$(EJ ze{TqAsJ@|Yj2X%2&0!zxN&EupdYQXiA^){-aci02n_7W6Xu8V)?xD;1{aF_1xG#?>C)>qFNj&j+xVxsF4Up zRhShuHAOKi)c7l?e(n~Nc;$@;g77JPzPJ&1U~O)#kDZM_Ww!( z%6K2Oh~8sLjFr$Vx=>VuDxl`JIcCF&HohOVxSpf7S?ok+h$cLKZ!l*S@ z#k-^z$w&?H!(H7#Tghkjn8{Z zuEIIQ%cS*rf7fy!zZ37B&gcES!GG;O(QWmu<>Y^4`d(`3@f|~P@sFQR#s^@!A`A?xb zdK=ZTFQ^kVshimp6pA{-OQMe08mN=6BWj!VLESJMRlqDv<;N!&)Kl`WEI#k==I)}V zpkJt|cro)DmW{uVHHp# z(HJ$?El~M;p{8^gs$;WIBe4lt1Fmz{UU-hm7$KXvF$rps1fiy&1m44@r~*o4HzU^w z(-H51+8wh|+jkMF!kwscFWLB0)b8=+(3G+Nk`mAj1<)IM%tgE-?#IO#g3WT8hKxtW zSEDMtj2elXsQW*o8W<;+=}2ZAPdq;sz+v^<36h(|79=Dr$g)we`V)d0+fbFeU;M(vKM1x<%Stf2+j|5}wf zNjQK-P#J$=6iijf=Y79F1GXc+4fS|UU09#pSY%ikS7R0Yin?B|h)Exh9f;pVOlr;1dZsu~Jd9O@^QvG9EQ#YcVPw!l8Huwd$)BGZi*Rjo5Omfx9sX zV-+_en+G+ug-{(XhuU>DU3;M!Y6?1|p8Gv94Gu(Yr$wm6wFx!EXHcvDIjUi?O4wb4 zS~Ee|1~Z}ZO~aVDwRS^goNHZ<8i|dl3U^{gyk_IR zvZkUyR1Y(v_H`93fvv4;P;251s$n_G84IEJ&r*~o5Uv~XJ+4LdXi<4HN4rpSeF8Pd zw@}yLp|)2*1v5n{QB#-=)$lylBDjfoY1Ev5#hMtoBKceb;RM=a3)EbnNA>7Fs=~;X z%t4bJHBxC&Yoj7+QFTV04+BsQ9f!Jap>+#RCw>z3lx?nk5Sb$q#$M{UIhbj0P3Wij~c<9RoVZk30xu} z7k)&ofsECB=3ffHP~!7Y+we4M4)37~dV%@~7P-1vRC!TDTou)^MyM(2i7K~0D*s5- z;@(!B{jZ8Ik#G{D)G!5I#ID3&pbnOXHOSu+ZD{syq()}(CB$W<7eo!+JycI$qAKuf zY*v3F)cKJSH6;yE`TN@I!%-*UOwYvC)~2YF zZ4_$TjYr+L5Vc#@Vp_a_I>0_+9*o`8e3UDLO7D&u>4{iQ&;Mxzv}o?27TZhIHcHma zERw94k$6Sas_l(BXeOh2whDEAoX5qOrMcP8=TRTg3bioLnDCb72;Pj^RS8B}$+@imwoZ(vajXlo9pil`B+fjaq`q7It2_If{5!-k-y zY%Es7nQhtsD)12r4KYzWGq*ia8AqeO7MzZ1=oZw0a|3hY3)G@a)!sBb7wTD21vLU4 zQTu!(>f~I48o4v5@;>g14DpUw7C)ng zx@cFk{~O^z;*(KpC{{P0_k)UzSef`F)ctp`JhtiXttHplOh6SqLJe)q9%kr+P(7)P zs;CXB;E^`{chpqvMlHI>s5SE%wTr%^7In6s_6WwP#KTY{Rt^KS|7#MMO+pi#g5NL} zPUvMCG#_Vrnd-ahYFuQuXT;_3RBhVQ`1#4p--i@xURISAF!gXsPK z&kX|V$y?M1g=GDF-k+(TLybVc{^kUmhHCi%9FC_^J*+ywJS%FW7TZMBTG)tMGlx<4 zUBl;iA2pI^2eSYB5qL^Ki>dh_b1?KkEuLwpGkuAT??;WmIaI^$pjP=8OpPhnO{Y{}hSWq&QRBhve_fbHf{xNZus28M6|6(N(opmHeHm&M#~o(Q^pvQF zPAxozqcJbm7|zsi|2Qm0Jo!k5n0O=98tFO8I1n{*BSz6u6+DgvwP+@4pPoT2x_hX( z|Ajhg6OJ|`RSWeHYK0o9zIYx-V`i*3#*{M>b$zalueS01sE(g=38(>2QA73tHD|HL znyE;O8sZX|9^0UvauaR(Ce#Uc4b{*OsD=fMGv%g4^)w@D(PguiMIA(L69U>6eNl5W z47H6Wq8c{WUSEM~;6|H%236s8RD<527H_=qrov0&Dho^BUe#FXCeBN(9m7MDHei?O#HOn;f&FICbqx(MU z14+T@>;ej&g;k0FHPgpWQTUp0mYMrBv)TU|>VgC`#AQ%DsEImA`k@xreAGi@7itP_ zpyu`+4!}rrOnexoB0dY%(;b)Dog!4?#v!dpxJSx2* zYD#*c8aTi@2GzhBsC+w72h~N?qI_-BBhEL^mXxT5m%%`6j74$qeD=Tg{Xr5k;U~<8 zX%?6{Yk>KQ&qOus0;&fOQ9XTwnyOd}&7w_&YEW8KLkgirs)oJZ1~rmBQ0L23mw*b| zh+5SbP^Lb?&)S5`M$TXlZs(`AfhIY2;D>01tZd5tnQ4NXpyIG7GP)B@rRK>+{ zA-YWn=;(D8n;U~Mm}o)NkT*wfJEG=vfOR5<5MP9<@D!?HcTk@Nf1su)V2RmHp{NEF zL4AIxg6t00nMFVqT|&+EUDS|0Mh*z)JE{WTQlE1H6QZs^MP2`a+O83nne_OmDGEWA zn+x@ktQaa^9W08iF_E7CD+%a^1E_s_8r6`?s0#i<9Z>gB`5vKq_!c!)KT-K(EH@R# zL){l>k!Zz^ zK;pGfYo?cVDQaz9MD31$P$Lj?l^M~L=xUB~5D3Crs8v1yi{K>G;yZ_0G|#XwMqX`B z#!{%M8H&0-16AP`tb~_QBb8>28M$nzsVj)uj#byN|5ZU767-ZChFWARQIE%6sFApg zf%qJ?I0M$2f^(vd?qaC>DxeOmhNueqp%N{deU!jq_}yS&ylfd?dLAOC}@_#0}K z#$RXFL_^f|R;WeQ34PcfBj6xZLx-W}c(!#JYD71p8hXTf4m%RR?h?@AD*cDKu{>%- zYU2d#it52H%)mn@<$5!hWj2@trn$ABb+UCOY6SLMuUX$%BX2ZEy_<@F7FQ|MBJ6?L zaXxBo{E0dl|3S@d%1y>1)<)Jr*p3D+Kutx|EyiTlEY>hohpHJ}r;AOPgjz&@U@bg@ zIzrQIHRiWgwYJ6{TpxtmZtqds_Zw;o{I{8SEYwMu7&X$_Q4PqANxjei1ay*h#t}Fh z)q_;q%{I%98i`t%4f~*;YOC-a-at*+=^ZBjW7Haow$n5u9cpc4!$2%;ZH=iof1J@a z!%Eb?-iPYZebj1whU&ow)FO4|+A2e$s2dcppu@E+Q38;WYsGhFH%D5YIW3)r2#YIs)t7_v-QM;up>i$Wn zxt@y}x!>*eRj9c>j%x5_R6S2nC#Cy|fC`Rx*o;Iv3@2U=%j0s?cd_2#Y~pc_nhMvT zw%c~p+#W!k?bp%kxsCfD^Eq2dPmIcU4mBc=v67zu367hGPjl4Vj72TJIj9!@fw5`8 zK}=8l;t8{jzMziaBqvQnlH(ZS=~4Hu#~OIp#uJ?~4aXG{l{V)7jEP^-T;YFiCMHE<5p&H&17vo4AfFbT>wi~N^IqInOziQ?#!8KDsFlvOdq8d;L)x$cdZQBFYkP)aJ zPr%eT4})=1XHsZT%`~@oi zKd1)$#Bhvp!~6uL9Tp&d3)$~ZqQ89JUre_|PF~l!OQ0MVBHlE=wNeFh5}$!Z@D%33 zsJG0+r6?99-UJKb@2H;LvFT}VYhUxzG}N5m#w_?9sn7|zW42>ujH&%Uo`BByxu}oH z%TPme(96IF5ey`L6SYSEMXlcGf13i+U>V|NP}^)0s;8@PAbv*8b7g0g*w$3Im-JA4jW6*$-h5=fF}e1!&zVcS@DsCb zZ=lM5hyC$iR73kbW&bxMFol3t@mti8M|fs>S^{;Z*FX(%8_bRCP>b;aX2hR19`f8A zTqRNI-BCyO0@M^7vHpWv)PXP9{~F3HFU*jZKvh@|)$>kR4EtbH+=ZIcEiNfp`gP z;|Gj^72cThp&q6tJ^-~n7odK;wi|B}|Mb=j`NenU{CJ7VAJ6^A^fWhWB*JXG7OFvw zQQNNr>iOOs)v&&(DVvSjcI!}!a}Tz~GpLct^WLn1VyJTJp~`K7y3g%MKtnbF)uPE* z6E|ZAjPk*JDD8=wlG&(pVF{{&HK>BOVF>O;od-`)BljMaKiWsr;JBz~Nf1(>>l7iN z{oVw1bWTHU!xg9&9!4FV7g3*%U!c}NtWRbUWm*b|=A!a#LXF%B zEU5i|i-1n3#GlRCUjwyhMxYkeHq>G{fqG1TLOqTXd@&UWZTHA9&T)q^lp0WDAk^hE8~$>8C=*2F8D9^;#7STaTH z`gj|)>htlbUsDl=s<0C3Y;T0RuQh7QhNBuj$+`@6-)@(HT7J@AxPz+b18SSZ_A@tT zK;Si%{Y?*|qvkdR zs-o z8YqSul5(h_t%GVnBh;cBfH`m^s^vRTBXk)x)Guv%)JR^zPC8VBN}}?2M2*mB)SB3g zIkf*j+6x&X`+L78Qv+L*;Te|3YEk^1K%9kIG&@lhpFnM=yQuB-7&SsKtbS2VzC@@7 zWJQf^dDKDI2)*C`?@B-g55T-Q4)fz-)c*Z}dWSVVguqsP^#b>wf<(f%c_>+k(yakO~;-buC6x*wI{ zDt5uAsDkUoH$Cl$TAV#FCr&|~c*jsD-c{6^c!h28A5_o76PWv3VIc92E&Q%VMOnuwrOA@V+d-FbD&13o^>PYz=@jJEaLd61`R+h&Z($|u0l1)-AO=m zd>Azamr*@0pTyt$nwCL_LnHB=h%vRjWIyL4RRK^h<75eP`5S z9*df~BN&1=FrW6ne+qx^^L-&)%7yNz9wbg_OpDrPp{PZb3)O={xE3p-&W*3A21HI} zc2OwiCf>?A&w3HZkRBya+mro2g@A@;H6FqPs0xRr_V<44bquQIere1iONeSn2|V=vE=)5(2gHy}eLAgDGGL zs^T%I3g)7EvRFIHiy5&} zsD{PtW3fY?063`@VoLzrXiaHH~q%_WvdVYst{5fayW9 zg65M-KGcWNsW=(`#zxq+kU81TqxN^c!luAZsI_nqFW^h8jQfiCJ1a3pn0d%;!@0y` z71epe{#!$!2iv1+F*Aopi~D=uK)8p6$ymRHS!}aVi*q09!{~d=i*ZYuHBcV4NZX(m z;doR7*5f7oiP5R&Vkv*`*M0vk?e8>kNvKeU1YBFz-}!@#iOc(YzvFov%M-6t!EBes zs41yc(ck;uOzp=O#Isg1=f*Va2kcII&C34XzmjtT3lOhX#f;#1RL5SR8%`jks=xQw zYa>w)pG&BQOsr;lTDZFTU=fZwDFjK|LM6U=7S%(~Q_) z)CldU$^IWe;3f&hux>502IgP`;@hzj#;a`>VN=w0+K+qi7e2*3b^N_wPG45nbl?T* zU|U|#?2b>UXG%bQGolG`1o5Wz+5c+!6A~6-!Uq1{pVMu}`o!~xo9#CZ?-E~&4{<_6 zf5(q0>(+=xhdmmbr`p0MNc<$$BH#O_W<<(0^Y^}kvIw<^A7N!I={EQG{+FRsF&Q^@ zY~k;HGigjq&IRHZa1I&ox3ULKYxBWkF6snZgspHLw#N8v?5Aba6pX}3cnS4P_{+xc zqwaT~5zx?lLd}U^TYvr(m#_UWJ4SD3PR1gr?N-k^2~!Y1idv)(Fe-+&HwR5V)B#im zbuiUIeFW=)YS3Uzt^GfWfKIqos1_ZxoD~NZ~^M1+k|T1QPe~1PmH7e|CoSU_65~|2p!E483(m$lcE-3C)7yoLG6O$s3E{&5^rE_hw4~g%#0&36K+QD|Nrqf0k!lEYAC;9MvT_QG$=RfdTG=Y zR6`AAEBt|7Pz~+W)eP+b)CoBim2VU3{ynIU9Y;N+E_Jn^|6h@yq4Do#DhS2`#0#Nr z=#5$n!%#h4h?;`UI0R3kMy^74e`h0xqlP$U4{wnwBKP;=G^HKct|BQOTFh-RWjW-02t*p9*Y7e+*1KeL9Spvp;%Ix*9r z)>P#F{@!od=D?)-S6z-0&_AJYcK|)dkUHAWo5!-Ran zsD?EjYDTUDs^>jX9Tn60y?qkjxwvc9cpM_ z;#rI}+I)Pzjhe%vV@&=E)`qCH(b?L|IuO;7;i#U^MIG7eQB!snT~++iCPW@<7GqY_ z+?7SmX?4_`*R|K%qk29ZbK-PVgHNIkvX`ili!jc7KOidVz$%0q;gYB+X)@04f0qO; zzUinle3OlzMeXzFsDsHFZyFdI)#DIrHdGJuq8e5KeHf0~W{s_VQ5~9!fjE1--T%8t z(Bis`>cL&qf%FBnJ(Eu`J;{x#xD9HAI-}M^U+X|r#Y61%;i!?Ah`MhoYJ1PI=}TN2 zSZOn?vl+Hv2pRXHPOK-WGrhn>f9E2WL-jcMB(oN>VLjr-Q9YiA8nJDtIX{MKz(Z66 zU!V>m_ceh$1mgc@=C}e@Bi;y0;Re)@eL^+hUsTTnCYw1;fQqL;T@OZ0Ssv6jt%zEL zolyBkU=U71rrdS55zr7{vc5zurifF_YR`aL6FE_fr!uO5cBmdsMlIssQTaBbdUy^s zH5X7Las`#|4Qh?}O;w!z7ngt%(jn)GbAY?YYq|2ONq9cvmXmiLN~?l;1>z=#rM@PU z*I?esxmguf=Ra|n^b%alLY|N0oke^n?=q@@R}#wou7LJ`I^NI8RGqiV>tYM7%nchz z^UiJ3^?FOZFmJ7mAk7P}!{ob1ff2b+2aI0Ksh2 z?dAVojcI8c3VlG~dIi`U8&G*{+rVt3y|C%Z!%y41*Jj&GMY7s(OUmIZGX8B5zDOl) zGvSr``^z3&D94QdL-tPcY3c$cx)^{fb_kO?$Aob-I;UqYPUJ8}NT z?HF#Su_-pS$}%?B zP_F6Kp2jT1!*;j_;cen$dGDvtkCaoA@NDw)OAg*wykW#!ao<{dPbb2BOmHsSMx>!Z z?o@k`yv{lj{^aITw&zOIs}-%+D?g2!$Ga|->2G`ax5}L5_F5?ATp-Un+hF}tgI;s( zbv<&+*t&MvJQKA34v?{~ZP6(*6{GSd_GT53oXowckPk}U|J!(#y|x8QaQ$y8=!rTF z_2Oq&P8Aw?h4k{=qvwiV@d@*fB=PeEo_vH|@-*i8<9%}>3KcB2Ee*#>Wctqgjk(w1 zC-F{Bd)+2^-yI!Cf%UkzHibRp!Z4fX66po$NPX^$$@_pE(IQ-5NaYPEdjt9J@%-^# zizq-Z9ie(K>=mSGgdt%?E~))ydM+4%C&4XAQFwa zPMTi5NWaVbzt?20WvA?uw!*IDyFz(g$#5*9J%4`V;y<>f^SN-!hS!sk4@b@_3h9jh zy&{u;3h%QNJRB48{_mC4j?66*4pL4G^8EK&N@E`pPemi@axK38{<<^?pGc@fA;tfv zlJ10Slc@md=_z5nEk&P(^=fGgK1IHnns zy&m_JrcwRLf8S1%9{GB?gSgO%#9CykhJRAv2wO=b;)8jo=FPuH=Je!RYumdLw!*%q z9Phv9xUVyz1LRLbW&G&h$xT`w?w!uPbM3t=xt@>oFZ$m?SK#6$A}>kQs|YvcBYch? zw6iyCA^wbOn<#WY29u{d@6+Td$+bD8@vrhZb0}vL@jax^C7g!0UiY}~7uWygS{oWN zpL_M{;bZ-o1&>BXc>z&$zybywND6GjF{L+Y0g$pUE}7_|fqH zy>jXvD&KAMwIa_tJ2ihv>i1rmXx(iRGH~-+Ztx?_*Aq@4SKAQh+dEEIEXkWMT>kHM z@qfa6>UJ7&{}?LEK}C`A77hE#yASDmY@_*{<7_9~k+)Yrzx?9VC&IrQ=&Z)xRPu=e zt}2aiVbX69AIWGm;O183Z$;sCxUN@H;txrGK)wv*Z>x0jz9+0#1k%g#u0;GNn|CYHc5`ix;US(}~EH_1=kec>F4>Ic&pX&)V0w(Gtq~Us%vX!hRo`%M}CaojBCBBSu{(Fs~ zoY|DI+~$w3&wuT>x`x*3RmS$j#25h^IL(dA$%5uq|y(;R|^uqtIFuKFwCzodR}}_TQ@j zdGz{$wYhhnjVmn~go#@utoR^0l3?j1;Yw=!z~^|KYc!-@Yh0s*$=J_^`E;pc4w zLn-`=Ei5bPS-F1NR-!T^aqS7tu?<>F{(Ri~!REP1dQ+}1pgy-2fdpK*Wh+Zh;!x7~ z-i))Fv>FuFoa?!jnH#eZKZ6Y@G%?|AQ1bND`M;RLwv#xGn-7!u1SX>aBe^*f;j>(;&-HKTF-m3|P_oa+=c$Ksvg!fZMC))^R(l@yRTr#}kosf3}bFcT`Eo2TL za|dDp6kd@6evsCa_eb7S{wMDy3K~fK0_lfoM3`-$elXF5dv8j~!N z+A-3*@g6}QqD}|WhY&taZ}rMVIe$^+HPZCjPyBbT`71N85aJWLzS!G;Ce5izLJThG z)tSOa)8aX{0ZOYvIG(*ei)&ZNuUB3Qeq<|Fd^LI6<6bITOP-zob1gSz@bgF~hb`y- z>esi!c93|)W-dg_qZ98(0huYNJ?R6fv?j)*kOf@-hxB5+uiL^-+Xj`ez1~GU(tj0E zetVn#nlhGB2LBAOR0KsCYL8%_00J z;X$_W{^V*#T2!vZ=Kau?70mtRdFLWNn2szXT$)Gs;DLet!isJz)oQpLmY&P%X#Mcqmw`&hYn%Z=8A|33_$n8=+-}-iX z+ZxW>rsk(<$+`C5Ya{93$(NJ&UarmJeVh{4P{uQRPZ2UlB<%`my$OGz%siA)hInD# zjcpy{$>a8=0KE!v;dcsXL05cS2q66)H=QHgkN0EV8L0HXS6||t?Od!PeBEBiM&Ul* zNo->tQAQq{Z!dM6WldeyO&jiDhksDR&EbrNxX zD(~2Y>yf`a1*Nlvmmt4Jb254Lif234);44(dG&flzHu~S3)a*Zb^}N(#rp;~4B#E# z-nfy1^c}~^8J znQKB~YSxs+Y$59%#n_ovD4bwk77uH}+SM)WC^Cd@*I|k{XxGG+$iSb(Q5@Z zgV<90HRLyT{xll^CLlOmub)cnZah-1OXt!b z#Y_}@FW!N0Tx^(fD^x@NFwqg8&#b8mZ{cndH-H67*a!AEF6OBV(p99a5;pt^_bYrR zyt8^}h;nQ=K&%b;12|Ktli=Bby$h!u__tt%@*j5D0DEW@0bGLYs8`PccLa|Fp9n5C zl4Dj=PsiJkd%-!V@75&pS>zY-M=ae!CJj z+#)~B^4<6^%IT-a2qjAM&k>%b`Bt7ZhQ-5J=%6zyXDFl2rT+r&i<^JOlID8I))s@H z*zfpA-jNCftANd5$p8k2Qa|80Ya6S}E)lojm$eqoa`^rAz&OPt*=c_Msx-PGz7paH z#P>qB#an}A5En3T4g5_8x>+ra<*>)htR>phw^$f+v3NOiE>`$`^7rse_^;9LE5ERd zwb!SAOUXY|_hPsoM84^0$k&S>fWJZB1YGPG$26t?GngBKVyDSxkuM`=!5c<@DY+vq zHVmvESbOukp`U-a4u8ngy0c`8E=Xr+3D^;R>-I1>SaT6;#Q{~}UjXYt-I4r9d>J#R z(QIwSO(0(e#~;mV_^AP); zp4d2|tA0$$8tW40=tF%6$A{y3z%va)q%nf-y6im7wYXR?1bYULKt4%#q!}+7e%ZM}jXxYnA-Q{tp@j6hjf+h&$_*BIKk`*9|O_ zp+VF&_0V^j%VTaAyj;bylrOVl{@`2T^kH^1{E@g=cX{j0#``}C@G^s&AlVW#8JNdl zb@IUwv%z!m9pLToR0dP^$YPaoQo$3<#lz{T2T8jezem5WE^mO=zb2o5fxc}`7(7b7 zoccP;Z{mX>PhhYNtPyozatET=AdW~yxD@XIegfY{&zpL*E?Ev|nI7wh#@BGfKGZ1t z4g6CnLoGZU7nARgcE-0O;>Pd+@=FYN;lMEr)>H8fUJbl! z&GkTFvklRDJUU`8spVN?=*l~_p0v^EZ zdJdXP@4tGeh0|K=rEntPoX5Wa+b+Kri!IirlFyPC><_CY*BJDI^N>a3$QKch$s=I( z!GA?;DEUfa6YzcHuHZkS|AIULY%y~mg6+gDW;#UUxTPX)rx^tCGkg%e>eM4x=1R{< zZ3jM@DE5d0x9S5(eTH6RNia`1jr9RC$d_~2Nn#=&K@Id?;h4!VPM(CpvoyC7XA&QS zy&zUaU>R5jM+7tIOzg&PL`@qZAk06(HL(SmZFz} ze@wqQ_+H`;X8kL5Ooo{xSqQCz6i42S&-pNf0}#K({cuO>J_ueTf1*nlva~+@=H^u# zP96mB5`G-FSO`m-QU^0DR-(t9gg=P?v5>)oh7qxJ8Z|lMC}cOVXSgo|vxyBLHwJel z&gOt-aK8p$K|PAuxg0Ilojihm2s$m`%p;2Z3fA80sQd8DCO`ky(cxW)ML_CC6#ItQ zRC{|7vu9`t*al)QaWV&py@8LUU#fG04ba8+z;DA}!vR;}=P9Q@aTB=t=l@5LcR<|D zU{4xLiSN){p(10!+`ug6LQm`{{Ukl2BZt4wl1(y0zL|KDdOQ9Z577^-DmwyI^E^0a zGMqp_awAKk%@|+(kiV%U7}CHK!R_F+#s5aYoqh}L%ZRtWOOoG!--<Z`|WX3?f2VN8S@|3mVrGQsZ{tEts{P>^EvQnB(kQ*U>K*d7AXMu}l;Opt9(TfJZ zLY%Khn+d!W)BhA7L4Fdy1MjdlebA|ckHEvg!#LtNxoI7QdH}@$y%;`+dvZiGnkQJ2 zkG})v0G3KFb_KrJ58xKdc-eZW zaL3d02HRsIk*@)Z8Fk5P;1i^W;4S)BtqvIjeg&~$u<7I-ICd`aI9MUeKP8{W%vXs1 zgdZdi20KQ78rf?XK=NbxP;ZOK0Y_ajauj$^?_ z4i)QL84PL6EC%lk?g{n*bLrIeslAxnOOBZgUASfoB3}U3g>;$RV!g@jz{Iw}OD8|V zU_Ny+{+t7??Fq$1be_PQ#{oW-OU(ahtN{EC^mba!+>qy=2JsaQTU}(}!oDn9$$-U@ zHNOk*Z@}&J!J)g(=_PPXBe1Skhnpr+ zI6!Kv%Wr9Ok`*bMWw9!p!_!qka2fSec~S&N!}Z|cduXg?(OBYE@CB;bk$!(Pju5@+ zpJ7g|^6PIkO|fST)X=;V;R}sLuHcR;wtz)1RG>4017smyOXqgLUxa6YrGRaKTZfsR z9G$K2m}oCF=j?9-S?nSM7TZbEiQyqEIIqhlQNIK)qqb8l0L%eS5cqlyoGZt&Y$;kj zz`dwrRd^#rqHp1b>Fm2=coOw9o@u5gp-+y+eKn zPB9#@yF@P*-B6t*^7)n{=)1tJiSA1J#qtSdf1F*CqR3tK+_fh6A}G?Dm`61I`2k(X*6 zL+r|eT^#nC)e~KV*V3x4g-$jL{lGqk`zdpM$(JzuI$ST@Nj2wixcT{i11Oayq=rPX zMDl^SKZ0-LYrx!e(I%q&g}@lC$Ee_c;Y2ahj@pAfh5jeRZeU`r9M%%85b(7uA0s+N zT)CK{j((<<)XLWm;LUY77wCJqPl==ODCO5i@B~7A5cg(rPdE>)w1!Y;z%k*Gs#O!L zfPA%l|3}P|<{7}BaIu}#VpBO_1!AcPm(aU~AD~wOwg$h2hzGGu`4^}I@Q*pB2eV?m zsgLVBG=Vx2_dutqG-ZD_Arw+eU7m(mvv+# zt1&Vj3 Il_5L-2ipgHOaK4? diff --git a/resources/i18n/it/BambuStudio.mo b/resources/i18n/it/BambuStudio.mo index a1de4a949747c45a6f0c3be994a8c1625975c9fb..651d8a39b59671f33bb453320def1f0347b800ea 100644 GIT binary patch delta 47622 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%0A5oD=)6sltg=1Orb1?w#V^)mvi}~p{4AtOtY=#@L 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 Dd5kFD delta 47850 zcmZ791#}h1UurkKPwwMBYq8dCI6XRU#7Nn2PX^e}PF@@@XNFWLcKQT5& z*>4(<7*$YOjD#W99H_56nQ76uT%jVkXR#-x7d2?15~4%OoC z*cTHX;EfYdH!ejLxC*o58XSkWu?Ds|=s4AIFBZXAhs=;y!sNs!+V~pONdJRwA_A`o zs7H|xn}#I7Sj1CdJPg4!SO_(zjW9l5MvdHK48<3yAx?h8l$Rcp5YLV^u`Fut=VKkb ze}wVZkmWmS=A;yABx<7yYKoeYcId-Cs0Izd1ULbeZwYG6tVMNX2dbQ-sE(Ys*KcDS z;!jZdJ|1;Vfxcs=0f|rr2B8YbhRT=^+hb`|#hX!6bKLs7^%ZJl0*;$}Nl=S41T|8n zP~}&$@!Bo{71$Vk*bP;2FHDVtF%>SvAl#4Y!6R&p@39fqIAQMFjLNqcwR;|*I*{GJ2rD5;&P&wx-ErD1!pEqF=R4zV zZl^A4QQyQ!_zI)o2W0A9=Q{xnS+uj>f#9UX5aOj!+o&t*hJR2Ee2*HjfO9M;Op58S z8S46QRL`ej6+D3&(ZuJ?eSxTaxv`S=e@Ox{NtlAsaiMh$#vr~OqvByyzB4v{19gzx z!@~Fm3t;vOW;b+1-8UO!;}VR8n^6ros5tdI7YU@tyBLgq7fn0_HI!9Q4eN}Nu`g=G z24etDMfGqNCdDPFhVMl+_#|qsuiEq{sHuI6?iK>+e=|L~jygi0qAK=XG8xlhRpK>J z1usKYxCuMs9@HEMUpCK>qBw?lBh;dPiaLOvqoywM701bh$*(Z}n!Dm8s3)yZJ!p?w z^}{eOE=H~DEm#C^;UG+Q)vW$mn1=XA?2d`AnKd*P#}VIwqp|pPGa_d(A@Q5n8GjA! z3lietXH0<6Z4?2=n;t&GuEgu!F-P(l98SE*T@ycsLy716 z!*NF7K2(E?|7mth1yn=a&IHu+F{qK4i?MM9YO!rct%ZH4k-3dp1Ful`eZ?dg>zz0mDkS3`=HK&iAedbGo65jZXT-O^|%vvqt-;%`)ncXg_?r64@^UoqlPpi zs-byM1s6n>QykTy$~ImPy)}j!iS`&x`@g$Q80aN9&PY^)CZSrs7 z$#5yEf%{Rb`JDAWsv#dy6~}yRrYaCK6VHiDumQU12>c+Rxk~$lH|9lESRd8HW~f!% z1GUCNH|Wy zO4t|wKn-2pXXadJiCTO^F&j=p4e2p^{TgcI-eDw+{kIvhgs2W>#avkIZ^pklfu1CU z;!SI$=cYk9Q7tcyYFHHv#@3h{C!s1nj_TQUjEZ+L3O>Qr_!2c0v;Hv+T8FiWZ*d7! zBoOt5X;CfALwpS8#Dka*-(on1zBCoLK*eXF=Kdn4#7C(6{aúkBDJy0Vt12r=9 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 diff --git a/resources/i18n/ja/BambuStudio.mo b/resources/i18n/ja/BambuStudio.mo index 7ae9b55adb6e6ed3fc45c50edf7104e5b63ef77c..9671c1a29dc2eb2e6af699fc23cead0becf48f89 100644 GIT binary patch delta 47622 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 ffsx~i)~rt?nQ%BiWM#TexIG` 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%0D&t!M{qQqt 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 Xl|{g2wM=-kIAok}Zu*rXF&q8|Kx>P* diff --git a/resources/i18n/sv/BambuStudio.mo b/resources/i18n/sv/BambuStudio.mo index d0323447a6f6b7ee08ea5514084d6c9893a1f039..7367fb9b44d157354da9452dfcf2153b282b2c1a 100644 GIT binary patch delta 47622 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 delta 47897 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 XhZ{1H@%Go*qtD`#*Y!w=oYemTvNu;V diff --git a/resources/i18n/zh_cn/BambuStudio.mo b/resources/i18n/zh_cn/BambuStudio.mo index 50bd6196248e32769376ab36415132a7b3c8fdfc..b06ff398425211ce4752265359c3193f50e3dc89 100644 GIT binary patch delta 50722 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 delta 50092 zcmY)11(a0R+O6T;-MG6;<4)u5?(QzZ-JOjFx8MZV5Zr=GaEIW*o!|sZAVBUrYkm30 zxivy31I_P;p7#k_# z#l<9;98+QeEP)NMJkG`Zcn^zX;zOPn0~=ygY>&OMH`1=}Jta_*gy&cqvmN%ljMxLS z<2-DRColvv9r3&w_eZVNYMg*Cu{I7k;a2ht)+8SDq}zg)s1;s<+PVi8 z|AxMnw8SaTi;rbcGiZbwP&1jsF$(^R(J;zc z*G@u=PCS(vhFXcDXIcLk1R9W_itSJX=!r3LB&wn5s16rf{$^B%hfo7OjVgBqJK_V> zz^a{dTiD9%XHLX8Qz6V{FWM!JV1Xs16!p0qlS| za48nYi&zNbUi7>?SPd8BNaTF`UfN6Up1;6pWF)=puFpEGO?(S#W)ZKbG=oLml9i}y zwimTxhcGIh!Z>&pGvYJMf^o09Ygimreiz16iw6nBCE)^Az{i*x!>+lR)xw;_TVZva zfm*tUsCutZD-is<=T*fxs16QI1UrtcBg$QCLz8Owe-JY2E2^gvahI#gx>MIikJ>Hk#3kA$D#(f5_LPa-|^ik zy-mVU5>niC*JA;uB>oTf!ld`yA)0~{i0{U+SpL3Sne!Nr_$}0)zeTOoSJXgbK5!FA zgIdW9sEOzC325(%p$<7amY~|*jN5S^hQq!ud4It{7+Lo}{wp`ql&B@mjB2P5s^OBThRUO6 zRNLasPz`oOtwcA}p7yu+2#ZfZ4QM9Dz?G_6RBrNfNG^W#!%fvGX%t=p>fn2LB&RENzm4z|T;IN&YouhafL30k@t*clgM zCXD*deUizG#fgu>LU;_-K=6Cla7@&aCcv1O)Xai9Glg*~)!_vs8+9h)esn9A7~>Gnjk&QLw!(p!6>phQ{&EA$j~aM+On`NK z0-9+j%!4yg9iK!k*$vd;x{rF-dXB5{9md54f4c!~LOlt$qqgJ@*2PF%`YPBAHNZ8P zSNWI={rI2V+iwLdNJ2l%hnr9X`orSM|8Zxc4(id|0oBm=SOoW=_WBcQg_3@8E0zj% zri!4_E8`ffiEM%I{Z2p~JwnYq$yYbBESQvdGgQTasD_52mT-zW-_lp3R%{3A4D3g3 z%{fel_fhTri|H`wH@p8O3Fux|MjfJhSP>gza$I5YLzskk^nYD?M%0YUVL5D%@o)pi z$HS;CyN(*jeawy@unnf=w}CW1f$;=XaXo5J4_W*w>UO+94e&EY#_&Nd9uw6;64c72 z#uu2|(nEuT0xOjfW0Rg2HIVYCi8MlA4fi1+hoKsrUrpFl0<}UtmryHkExaET_~r5)393*#f?Kjyr~=(A zJ|1-qXJZCjjGEbT^8#uGZ=xP7Pf+c>!wwi6(XDJ})Zy)o8t8DJfMzxY6X8lMg8MN) ze!+y8Cz4yzDyW%`MRhm@b#~^V+Sy}XPk5DW65hq}@`0n=1L0{Kr0Rhc?8EVhhntMvsCL&S;Qni*`$^CYPnr)<6~CY=L`~?nBo=BWX;2LoL=Ct! zYAb4^u3sn2g#AzhUxK>M$57YqK5F7`5_13bVE9Oa&Om`gZU)6s18adggq<)W4n}pj z0yV&GsD=-tuI(LcjmZ+bLpBU~NP5SxJn1Ks1Oq5MhPe2`=M_sQQsFBA? z=59qH)Bwt(maKu<5mOQ$jG1vh2F?y@W>-*$_@>2Qqi)9sGfHx|l7318>B-28T7f30 zf~`><^tbdmsC&E!wGy{c&x?pDT)o_=0Ti-$Mbw$9fx0aXQCrs1;+>H8e6JUQzyk-% zP~b9ZiIb#s4QEEhbD~zNB<92_sJ$GDn(0Jy5o*OYqv{>P#CQ?)Ip8JgNf{+n^|^nk z2p&EE-@mJY^LxVN` zH#W`W&cp@mO#CrwWol=318j>r3*%Ak&i4sqBCr|z;!PZkwX?XTK99PFk5DrRpVf5~ z6ZK>qh1qZ%rp4{36}@S`K$ZJ~moX@tTfwW?g1G;RfEuoz-4$$zx-QKu-XAsdA*iLB zjCxMYMQzby)NNUh+S3y_7ayUv$`5n(XQ9fkLOl<*VRqgBy;k4_Y6f31h(~7X96^Ea z|I+4k9~S$gW^x2o?j)wd*SHm9=W<(e6nO*mURd1A6Xfk7KRxO!JV3Sc0>kV6|4BeI z`wKO);Jog7L_wveMy*IT)afsed9Vp;M$=H&bCJc@qXx7G^+~8lKG*R=bCtOfqtL&% zlYkD%VblPwqL%y)>ae^)U7O(i?g5n&btZ~oV5?AD&>wZLr=!|igKB3Vs@-#zf7N`A zf#3fl7I0@E6gA__sE=fMQP-ptYR{{o8mxRz6H7ey2s;4PzO^m1ZSa^bROz7uSQkaY3Zj?gTTy%b2sMDAA&kmqfqyDIcf`bqt3ud z^9t(p-^X~Eu&h10QHQlG>MYbpEqy1{N(`{{aTZ^Iqjmq+5y(k_+~wS1X@hFGFKW*x zpdKs>F%);927Cj@;eAxO&gIZ;Z-T%u3^elddx;~LB zxB;Xx^I<6Il~E0LMwJ_e*>Mi)z2F$?^TSKj3Pr2v9?c~&FY#`ul~`eJ!@&JNLO@G* zUI};~HG`L^t@wu8iujf6%?MSlkj2ZQ2G$t0Qr%GPO+Y;t7NFYOfvNBWYQoRaSB0R; z?iwXWEq!LphQ(1GcftHP*y3AJ4IaWmcnNc0%qniBN}vYR5_PNkpswih`1*>MYd2IyeHgWLHrQJwff=Yx65=$)i?tSe@E_DYj#1sMNFrQAJOk=bT|_;|?x1G+2(<-oQCk(R zhN~A7m7fB&LRoxED2^IH70c*{n%M+Y13#lq{WjDJ?6LHdr~zL_4e+|9KST}SHEJb- zc!;QeJXE=)sFm>3Swc2cL-{RU1l4gl)E3ml4A>G2;5gJRIEX9pI_lXzyq2rC9Cfxf zn5R%r&L^n%0sQbT>fR^H!`4%c0s-HcmTXh)Y(7$()fI57Ps`wFAFiJhwKpfQJN{;F{jhO@W04j=l z*X)eyusdpx2U&bHs=cYGvoHs>vTM-SNOls?Opc=}-a;LgC)fgCp*pBu-*r$MwS>*E zA$CWt%t_pW_fhT5YTzce#@ub5GH*2C{%cR3lOTf|Iun~YP=~5KX2FiA!!rxB;x5#i z))UN#5gWPkIn3H-Uvn;oQf?1^##@cJ|5|}-jh#=-k7oEL?!ghy3^Oa4ZLlQuhhgA0 zptkb5`ON%mMrj%p_*y;*YD>HO1hmwBQA;$u(^PDU;LN{j!D>fj*idR@S#_zJb; zRhqdKX^F}oj%jfLY9$Zi7kq>&@856kzPI}ebvWX;a0AMSIwWDJffP0Cnq4e^H0seh z9W|r%s6)6Fb(r^~CU_Bbt*@g#v_3#4?0a7cXbU2?bPXgxU6*92^i-%vY!0&s>Rqe? z>Na#lmG6ftHyBlKEC$|WQ020`{WaW`hd50;;@o!f%U7)pA6)Ib}wkh8rAVc)C^ak2DAyaBEMoNoP!cteGT0p}qblw}9lEnv1ph$odAcqxzaZ)`RW_SoN8(*jD{&1~ z-s|cH77w-3p{QHoXS6_G3?-oyY6V)O3id+n)gV+uqfrB!i&=3Ew!&+udWE~WiBv|d zKrPgt3$(!MI27~XS(om6A>G{aW_QPfCppbq16R7W3CGmqHI z#S>#j;+atcuZ@ANLk)Nk>WMfCwI$P0*K-L5-v3V#&`htRmiiTH#Ibw33JFmUkaVa9 zOQHr?3AIJdQSTAop$0e@hvFpE*@)JM^dNpQ!6U?n^>q^{*N^+J88+zW8g7s3xCbh| zAF87 zp8d-(72ZI-pMS-4*m#he(QqtHd=YBK4=@9IgIz-zQRSPVR%{e%1?HmKKaP3O8{&So z%Zv4i`mG75!fw>a&ZGA7D{7|khq@URM;+2Ks3okAD%Zm7kJ_@Ss9UfYwUR%h&crXM zl|F`A(R0X(``%3gWl4C0npr-!L?f+@dXkMb-=P|8Hq3R@5!K*8yu{%eVe$GSg1ma9 zH^-v*3u^1$qw0S)BaGCSRouTg1g?^?1efE0QGstJycDB@0)J^_IcmgtzjqCl!WzUY zpbq6+tb(ghGk=d6@f)hc3}f6`$&Go5m%?1wU+KF4YY1rOyHNM~D(bpDMcwD{W8EI6 zLp`XPqB@#^I)n>ROS}%X1^ZAda~8AU6)caz_H9ij`;{x z{yCP!kC-0|%;ap)zt^3B9vFjBd$9aM%oT_7J8x%-5Au;&am|57T<|#@C51sb`Q1W z-%taNHpkUZgnAIAL#<>@)RuRi!~NG%O(h`%&O&v#5A|+%3iaT4iJDQ!TsN?IsHMz= z8h9sE$KB1LsCFl!>ivLP$z`bae>S(z<^C(i7X_k3XS0h&s=eON`1- zi`ue6sFkRSdUUrzot5F1{v&Dyx1hH65EjI%z6E0c=rSss%~3P!g<8t~sJ$MA8qg$E zhl?;1Zbx-+4>f>4QD-Xpe0x_#rPoGnK{wQj`{M~{q?=J4oJO7c%jPZAh#z4HenK6# zuc!`_FK|nm4YfjrP*2JVsQg-}j$5IYekiKH37Adye+2ICw zFQH~0dy)G{l?FB7?@$eP!N6ff?fndMp5-q_&3qT?&|k)+y8rJ8XrwV0yCqGD>L@>I zMio(8Q6E*Y31-KEs18@72Jj1NtInfV>?W%G8`KuXSmMq~0aW?Qn2i3tHU#u0G6Hkp z64c&YK;8Gx$WnQcm%87O@}myz_gEe$p;qEDs{Cy{gfA_=X_-`l~ zFVZTvf{9o8?zhrV5;U^zsF@E$?U9eFFc&M}&)5s!p|-5uPwr5CkGY61K@H#%YC_jh zXW%{-MQ^oRkz%N`)yF5$l)y;T1LdCi7ivb)e|8NfLB&I{CT2qo%*RDI6|-WFH9=lu zY>K&YC+aZ1#9|n<)@@}8>_^;hK|t5;8fvLtq8d)T&dn?{W+q-1^I~_Lk1J7!u=IL2 z(@Lm#EwdrcBHjYE#edmLWaUcK4f3SJcWKK^?kxs0Z3VsE(rUuq{PRBs1zz7D2x% zfksx~Co8ZMw~~I!(ueJIr+*r13$Ej@_#CxD>vp+Ac>psJkF(otX%W;Tw==5aF{o=f z7j?Tf?&kh0;Uo!KntK?E-X8l-2-QFZi?>F-nT*E_xDwUyS=1rEi&}vXsF{C7-Kwa2 z-3p~b#jB&w>j;EsrxE?jYBUl_CqRvd({cdj?q27+0V`uD# z8o)!;R=h=hHVi)CCYTPjQssOCx*pw8r*$x@;si^di<;pI)JLrCs2N;Bm3xL7;NPe- z6!TYi_!6O3A`NPbvS2AJhI%dx$NcDTBT$dPORS4!4!ZAd=ArI+;zL2+V*CY{VEx1H zquD3aAxe70{Y}P#IF0x!tcC@Tx+m*coJ9N@j>Wdef&yFo8o8#v7wfotG}c2kFat|s z`V;Q`zddTHc48xZfO^suJL!HG?1b9OET@73|7}NmtU&xec2)Z6Ag@2p!%9K?6^%1) z;LXnJZ(4Ex1{2U;e!{dEcFvvNI;cG#g<7&@sQjy#2ftuG%z55@_0k?s5}%BFu;Fj+ zuVN&)zy}sO?udDC&BY*ZHu-li@dbzOfB(yFNgkjY40k2S8-#_i4sJ(1(V|^-f816J zYZ70JO8R&wE3*CWZqr~?xn)=k-=M#mK-l#lZyx@R`dr@ohC8iu zP={|f>bjl5iueK3WAU4AhHX(RvR-EvFa8G8{QkGb$0hGNd!+<(oa)@}E3 zcsXhXZlm5VpjJxg+9QL9PSGIdW-VWT2C9wB>cRRLWWa5WVGd_dg zVYCPCO!au+yC>O?B&dO=58c;d2_Cr$T~QC5b$A(1;0avxILJGI9i9YvcQNxHZbhO# zb?LcK&xv=aj&nbAf3cw_Y73U5(*N`coFkCqd64%Cy%+B9`M*Y`XL;#P??0#qN$*$g zfinsfABUxJF6u1YLd`hMYx|sl;fVVf9!Fs?jz_&o`I89f!7&GG;S$s{{ynOp@Ne8e zVxms}9n_;X+@J1DBu1r|M5VVyUC%+Nj(Pc7zHQ+`V7du(pM|C*W(&u9|;u}$idM^fk|361SOLGU+ z&?8jCA5o9kXz$!oB|$Zq4z*%AQIFI@SQv+(X1WvA&LPz2giEM*yBnwhd_c7m{GRf< z|1k(CArY!zT1VOA^Bp)_~gokq6U^1)lnJL%GE+`O?}i%Tcc*! z1@%B1iyG*D)EPL3DtFT-5JccH>e2fLCctQ)-62ea8el=x7F0vcydGx6=BO1Li`uFU zr~z$54PY1QFki+h_#9Qfz&~z+escl^N$7#yUPQZySNlB<#bS*yAgw5|`mYO!JMu;m8s_#`DCp z@%&QyH@uC%1_cLxYhD~29Qey9zhMW`vxEc(I-H4G!5=XZ?QBF1;6%7!R*If}BcQ#! zg4&yhs3rRobp|4a4-VY##HgjKi%K7iiEuKi{3;B?y{IjCiF%;DMXk(7)N>*zLU7;^ z7R54}=^_Hn@F5Ps(h-Bb5x5tB#1fH$1CQ97Se$rJgFD^YK^n^2$iUg1TR zixM38yP%g*1Iol-1l6I-j_R)f`kL`<0@}0Xs6E<^5%5>kOplw_Q8Rskx{krof&)*w zWT>-|4K;v@m=c?y4&h)-g|kuRcA~c6ag#Nh8g=s^$~!&S_KTB@?B6{v*DuZg<9 zZ7>-7pgQhvPC%W7g%;nA>gXhDK)<7A{tVS|gqSWrkxw8q2^mlw)IxRK%IttTMBUBa zr~&jxE#V;4fJdV0jkWj`bB3kQMP1v)m=;%KY4pz$&>4smD>(2OFePf_yHF!Nf#vZA zYQ|||yZn5pl_`trxFK@8ycU+;3iUwii)wEk7RJ@6jvpZt@x4rO+@Z>fDp(5DU`^EN zZh#tKYt#yLN4+}^LtWbisF|(7)VLLOn6IJ+_zE@f;JB`z_^3mk1!L>}=Om!hS{l_* zYb=AEQKx+qYRQkGw&EnJeOOg?_GPB~liOfL_Xa%OBe{TnY zoOl!UD2|c9#VcSw;sa4L+Jw5l$5BtX3#f*RBy{=3FqC**i}yus;UrZ1i%=8z4YjhD z(a%KSE`i(_C6TijrXb!EHPUIQ87{Z@R@6X_p-%m8mjBGsKcnh}OYBxKA*y^fGe7ED zmrTt4S4MNo=z!YmUZ@U-nNzVT@x`bae?y&mFNte7JZkG=qGp^3+hS&mPeavPhPrJl zP!m3%g!|u~K)9st(b@%-u?|b(J=Cd9lPoy!6-#r}z$T%#W&vtRFQM-FHPq5RMU{JR zhD+|wOgz*CQ=?Wm%qLKmKsD6JW}sGNzj*@H&_z_a2dFcWDTRx-M%|XxsCpYw9qh97 zW0rmvwI$aq{WP@wh8sY;dj&$e!wc2F`Fyb#~gv*kv_%Z z?@0CVQVd*)j?2UXCzd6G0kLVro!BR70hP^i<)K3%4RLp$}~hZ)WOpGT6_rVI*v!pbOve# zR#|*6YQ@f5`cu^BgntWj|22TvMO?#)P#vYiv6$D=_nD_q9b7|o_#D;n2Qx-d*G>jh zdLFZ?+1B*UISS~}x(U1C71XsVSIph}uBeYn<52_s3AF+n%su7_)PSyFYrKm(Q)P+= z2fht&i+Un%Ft4N9^TU^LfoNu2)CwdqGozNW5O&2H*c|tx29mO*>nJO#!D^TV>!R8j zj#{y4s0Z0{RJj94yS{gffEv1mS@9WG!-S>W%Ctqj3r;{axB*puKkCitH0smsbJUwl z^3txuMi@f8i`fI!aUYz3gE8>^U!*cFBN1weQks>pf+}Dc+=qICg_L#X$85wqp&sFL zQJ)D;eR)C%s#!2LgN374(FeTzRuHTV%V;s_PpfKsBC zJ}>If)j@U8%xr^NkC#tm@vvrxZ`u0`$b2~@qCsPYdi{T*s0B2;zxsZsGvJ^@uMi+T<;Fo&R)a4D+6i{^Fn z9_sgiKk!#fUCnj)5H;iXs87p5)!lE^@lj8_v}QikO86BlP|IwBvB+qP8dyJbJQgRu z05zans1K{_=|7;h z<|j-4-Qtf?9VD#n4rxBriZnnCs6Fa=F$p!`-OAVfKWhoMQ3LrC^`MDZ$Bncw<|1AS zwWNJ4eHv=7=U`xIF|f4eLDT>)TmBCC)#x-_J ze-zIVzlmDXwM|?@zn~g8g#Ga%s-r4RowdzIsF}AkyPAVg10Rc8;dQ9?5BLOhFHfT0 z=Wn8x{xhn>bj@6Yc~KpfGAp7Qs$u!9E#BQ6Y3Z|2^_HQ|*3XuI!1Dcz1k}-8)Fbna zWkhc7mMQ`2&=o+@Giz|865bp-`=3!Eep2_4*WBEQ&A0mL|w0t)^4eDVie-_Ft8=4 ze!8LtGzt^xgZyj)s<;ug61Pz^d4($Y!Qzp=a}C5qtyDVHVJc>}K+Sjrs-uahJzr|+ z$57vf|Awmf0yFFW$7tg^EQso`gvD!{jm(y2dsIi=up|yZE%|QLVg4O8;{lQcc_{DgL*W_>);x$fZF3`m={M{`cCs4)*}58 z7Qg}>-Gq9e&cZ04fKK@$)CeD;mhJ=U?KWN~_g!xt)b9oRPy=~v{)<|{M4g>kP!lPJ zdjGGC`c}QUrFTV@AA~yO{$$ITiGkB<9z!kd3-hDtb#d1!3PvSAKK8;?*aT;yCi2z{ z?&<~<$4rSG$j^%0I^UZ`pfw4Hu^VRW=9YF2>V1DbYQ~YfyK9;n)j;X`31Elk$bZhy8np?XogwLGWb35rl^J!z ze&T6S189P}o*l3YPC%WdPnMpjud7!G^#P_N`q>HeB(NBlpq8pszhLhPHp9eNu79w% z6kDKX7&5>;`=g-ZF;Ghz-{L7z15S?`SU%K5N~0#w5OtV458(c*zzhVfsv;t>bA@-a{yCPhswJ8DHLnH>gk|JCtW5&{D-ccCg? zM9t(es-uq<|B4!T^uf*~W(G5lS<UBUpIR~ItcAeAr4iMNx!bMa=qistjnk!K0`%w4%i1`dP z)0o5DAIm4hz#&7GZ-`T|1ttyRQ#Gz39({y6Q#-MM-v9r!gv=w|Cz)2*mV$G!CVHcS zz5O&$3;!k>=X=+2)G@B3L}p4%Nq&0NjLV@0SkG*2cE?<#55f4l{~Hy+qo|5E%@?Q! zzMz&Y@>pjwRJkzhi^VYvf3ft(sPZ4p$m85KPKHX)hgzYE=#M8*gMd1^fok{ebOF`jebfw}q8j*O z@yJu%`+qW2gBegW%ZX{QIja6hb3Cg4G*tP87XJxn>HUA3B~+Q_9vBT#4Kzi)O@4=} z*bDXHbcn?#qZ*!rD!&4?RckH%l*O;1>i>m$AO-#4%7+ig{flM^aZv@6SUfGNgDj|( zDPZXpPz_Z_m9K5-O)dR9RK50=-Ul_2!Kf{sfLgJ27%osD=z*3-ACL?N#!%$mV7B#>I=@1vT?s=CN7ae|-|UM1uD8i)DDTT?5fkzeL7EHIx!H z;7q6i6h}2!-O`(&I__x>K)r_yv-ky6`QK4n@z^I&jld_=gQdcp;K0A{-x5_I>Rk7U zD218TEM!(d-HLiP5rNR1jmF4O=Eq9#<%tYfxPzTW@46VM?Xf~vSe8MqeJ!A{iSJB|9C z?h0yV&rs#P#V$W0Y9(T$(&MArNoHm;^P#q|H2ONl%?YSNH!IK=l|B*|;dD#Sy~GWu zgjw5cYYsr2or$PxybRUuK~#q)Fg-p(O(@z@?!T5g!BRKUFjR#iW@$^Wgqm4>OK*&U z`;S_oo~X|Uqb>a)s+|j19Dhf3n0T4{T#*J>a?$*axHiTD@`@I62sx)|HtN3OJ}iS@<6EkWIyrKl}B ziDA0`PYIMIA@L5E(HvD_D5~Sh=0Q|PA5qsS)lT>4`lV4FPeJ9cu=sgYM~_hx3%|>) zOf*zHF$VtpFH`{%a+oEoKn>JZ)VK8SEWNj-4?->NSS*f9P&2-VS@A12z|6bdH>o30 z?cGKV;5i2V{O>J+g+bh7%b2s*eQUi4^+z&qQ5CZ8b9GWcU8`BBdaF_8cA^?Q zWS+;B#BW)A)L~a|8fpcWn`?Xms<;{T7Y_GhbG&cqrH;4?)luc@p&rStE#40c6CZ_Y z_yB5P$IPp!0YAayZ1HE*^CQtQ*Pg$RfKKx%R0A(j4~F+vAo#dTk7*`AbNqh!&;W!%IuFCz+_a%KccSV zdh?j&-!)&N+WCxHi72O#{=Ikvl##;BZWcowx@xFX>!S|iDvMu0b^IAqV)WCloouKr zEs7dob5yy`s9WKqCiWu+{{GKW0xGz{++&_Vt;7}7h+m)@`iN>E@)_4*EL8naRC+dx z=dpN6R67+=6K!VcUC-G4??Zwb7=aq$6f3aC+>C*1hWZS52zCEITYko~Ze_wy?KDDl z)DAVEewIGeoM6s5%l%h@6(necYcV_?#He^2)$t|VgSS!Temv*)dXsq))y@M{y=RvG z5jCKg=iPvkq0UHFiG@-mhPw2K3hA;V-xjBAW?N_0yP{Q7e`c)p23e zR@6te(+)Mjfyhew-WbbRU~V)Ip=NLe)zE8H#i$pZiBM-D9qN`evGhr(j^?2TwhlFb zt>$6W7GA<6y8q7z=z4{}bUWemLk4sHIzMu0nk;xE>SYA=Kyh8y5eB8hGq$uANk7 z9@LpCk7}E}@^cMCPJO!u5cQ1z;#+G%3()~I&62jblSH3UYHumg42ir#nM2X;bz`aOUe;AhlU z#CqWNxIDHX-T~FoNlU+q8ptQq%%eSYE0GMMjR7| zV**qMb8tScu>4YwT}KsBhpve^)Ld*H#Qx+zL=C9v6K5Cnb;^ejP=~4ha7&*Ns}Rp+ zao-$=DmNW9pn2vh)FXH+>Q}Qzs1=Cv)OC~`RWBQACG()_S9;3*S4Mpj%3(8XfGe!P zH#6!p*FYlFp-PFGNnx|HkJK2(R3XDxwZ=J^T?{So#;#-ba4z%9Y0D#B2Bj)X@hl zj^W?9zv)=k?277WHtKW#I`dc5FPE3i_oxR_+&^7ORjvt-x{Yj8WgY{QjtpC!;#thS8PGg&N2e%YT4s;F%fn!NrrI%H=gnp;ojyYAc&tyshQ;HAiA3 zz5h=opc&1zj1A@B(aod-Rw2F`^(6d=J+R1M!GV9qXFclr zW&YbeFP5RUF5D;jrGGCC0aYxBtj;vQHHP!pVjHE;#$1I$PC4-rW5)%}IQ``Czhq;GCOt+77w)u{BKe}nmF7kJR1 zwxThg5S8B>)!=DV`g_y>qX&fq{$wN<>d9Ial|Kk|Hf98c_<_JLB&fnQoP}RePr4bw zA%PXh84}`!aG!gaeZqwV{`7l5_>jQ=;aIo`A%Q)gjyjafumxVlz#})Jv!}ThRqk;_ z-vyFH3JE;htD*ilZZwABCDgMzTx2)H@u<_j8P)Iy9FAd8LIQtzZ4+v#Q$=;=N1dIj zs82jCP+L6#bq0R(E#VF7n&gY-22u-k$i|`4kD?CWebf?WiS9ZmgBnmHtcVLR9X>$~ zFnWxTz?)ln)I?6B23RX*NZ^Ur{}=W4IxAL4;Pf9cPh%d^FJdK(6x$7~ zHqIg54d*F6PDtSM!ZOTH{2Xe)5#xpg{;8%=b3Lxq{Vx(PgoDFr$H0Rkeu(!I@zbak z=#wBM@E;g%MxBv2s9O;~pc0I-wrbdr|d%!!39X zwdWI)xq+;~w7UO02q@#0Wqd(>I|I4!1wKeI=OwU%1U*1rSw@1CZluXk1+$)orH7$bu!yBs zN7eJ2TY(N{UvnhprodFxULLmeOW2(FJye4w(>Uv(o}BGap9OzG4e$vjMlWqh;J=hg zf*MeMq`vQ!A)t}ew~Ur%S69Frgc`_XOFw9yGjAeq4c=2siO(%PYC6|ZBGd%Zp;kCA zs=p!_`2Me4Ai%w~0#nV|s0Y$Q)J%7w{+_@Y)FU=^de=b()Vo_my&fe#$@ zaToFPn1m&okSQeaH!W9Y4hj5MHVv|H|94Q}4FN6j>a6aOdkY&7Pm;}b)C)DBfp`ta zVy-Q{;iO`w-K3{`%T#TQ^s;yh1!}tIYI&-RK}SPaTMvrbA|*yydFlCe}Z~9&6bP%uSa6vTyE(`p`HWF z@epo9J)j2Ub~D^y?!gkIpRjn8JZ`HJq6V4`wKaKAdtS_}i8>44nInAyTB@a%uo<;(ky*mk|#&kPH^j zZ&pH8XlnLF4RDI(&$svna}R3kPM`*O2G#B*^P%OxN4`_?y}w<+i=N+&I5m>N|GTa0 zs5WZkEl@M;W$80fTelSTZn+WF(M{9#{A3thQXwVFQ7xr`)?!y;Yf&$s*u3q z$<5T3o&k00v!e!*AM;^DjDb^e1un99*@AB6>Yxr?7u3YIpjPm>^6B5ZOh6sKLXG?b zYQ~>X_di-8S0ObPCLV@*;B-QjpKJLG%%4&1ZAT4kpLqrYD}>t87Z~{aKj90z3h_~= zGa0HtVbnnCSiGG%4AsG0)Jztm-X+&r`eD?4KZUCQ6}9BCinsyCMQvTeBHVvnw{#@P zd}evG0rKGTdTW}z_S5S=5`JgDct&{zGzxnSBfgFOIj0KtN=dmT5otd>e{|0XwpiY4 z(kE!owg0Sw*Okn|6q-+gzNl9Z!UG9wr?j&tL)W5&}H<5W{o~7_Wer8x_y~xW&g{L@=biHDb z7s}5#!n3Fs%1=Z(t4{qhq<5yH>*SrM&U}6jkiOJbN&kvoHp^K z()L^8t!N`Q{awaB`tNTp(ZE_NW+jn-6WD8PqfKIsHD>_rDBPK!-IN(aetjFH8ed2F zIcYP=e?SKzl$rKluaf$Fto*-MQo=1MJCb_eM-0rLFNi6mSEx1IlF`Q_JdHuDwY1Zu z>2;pYIw1c-tC!?|8V+RgKl)=`)f3Lgb1yjEVZGRyDHW@Le_m~;i|CQJ^ zYS*K56ue5wc-HDU>y0npyl2$NuMse+I@C#Fqw7OndGhKLe?|F27@u;hXd?n`RiVcr zs8@9A=@mpgIq7S|2Yz+sYd{hwSc5;1k)LoQD}0m2D$>{<(z9S?;(Cpyvty)Hrd+$} zC3na5mlNAgECHp8Uvd?oDFqSXy_J%jjYj7NO44J`}#?WtdvdhJP%MH#)4 z5!dT6=A+Cse)NULF4~?;+E0|#>y>UG{~oN@ho6EpdfnE}WxM~KO@;W@@IT~VP+1yi zKw3D$3rSnZAbJqLYvq#AVF}Vp(8LMa)t3)pq^0L4gLR%B7x6E!27VKHO(9L{FA^j0 zQ=UjKn+3^%m%f52PI|C)5{3I8p7<;}*K0K$4ySHgiyt8GvIa&w-!K*)rrZ|F-6P(f z!A#YkK&2wE{C_%2O}G*box!DamW7W0A)KAco%p#(d@?`p$Qw%C7Br~WBP>SR9TyG! z??cKJqOCI4elz;h>jULl6SgOSOKb^K$ zRs39{?GMEHlNWCy1JJ89j+=K%QVs$n@}?q4aXts=1p_P}zDmQDqp8w>pAr1%m5FZn zBf-Ec0;PYXnc~*<1InCpS>9jd={1Me`ePi*gtL~PTV7&%{LRwZQMU$Vn$z|I@|V+Y z0zH~XQ=lN3<4M?0xFh2a;&2tF;4s2}k*?PtG#1ywimxM{;D6#xXf&?PUHR!~a}gc# zCoq9mfAYT4{!G&N!_&a4xIUalAmNTx%wVIPOxjKwcu9PgE9*tHS#7YgKae-n@@mpx zH_}&-7K_10#HzHR*GJsMKuP-lUNuOIre99(QaJ}%mFeKARq93BCel9h^N2EfH6(vB z;m34TpUNj0VDtZJ^)=yB)PF>NcD-Fooz~B|myCC%y0g%tC3!h-aaG7wZ4_TFb!V z5~)GDUO8zuF5zEsIBn?v9Mj|fSHi1HLA}oNQ+4VmiUj3g5sLD-#7W31I_Lh=2 zA9?xSZ5nw_XbXuW=(suICoWS3ytt&_AU>24>owZEL1!(9ZzHcbY4JIzji?`s8P1^2 zYJP^0K7#li2B+64!iz2JQl?kk9ry*c6rIb8p*@YF4Ct^t_OK>>1ZwCWYkSTxzU8PkY9?tBb2RZgAOHqDBWg5sMmZ7ccjb)!m0VmMLZ*&>6LGK$>nkVpUB<95ZjUZ z2~*L%UUi8tCce#Dij4P(e@FRf{LH1LS^Ve~-s&j4-dZ1uuNihG%IY-)tCBW|w63%> zl{&Tc9Y+X(pU5ae2X|=j55j-)qt`2@a*V>qi0j+Btb~*EbB6E&>_GajG+2$s7f^qS z)l=P(g!9pMTC7f)bF}^cx;hWAChskbhbUUy8&?(gXx+GRfV-}`Yn`a5IKV0uXM;)w z6kKrt7H7qE9Uu}EQN+FX-h()CwN|TE@9!iheRA)4o|CiQ^Pcnl1Bm&eX$htUzQ|wn z^pM~1MiTsoqzlChfbS{EZ0ufgA~&hGfq;)au}Lub8pQX>cV$RV?Rll-g{a*CGl!bU zZLLRAmpjBwl&7BjF;Yl_IP5wdXzSwP91U_8pfgu1at}-;HqU_##O`O%STvM48LpM! zHxvJiKOFo@d=G|iwRQ84?R24zoAOljFTThE-ttax(Ss+u@5;XK*EQ z6Tq}07mK!{Pviu(mGU(vlAR`z1i-^6Oh*IB{Y@N0elBrk{1C-IXNd&#GfVfyiqyi| z{#F9^Kg0{M;q+|4wx;$c_JLwg3KlL?Z5;B3WQG-Dv$4c`^(591SHWK`R}Cf#>yTRz zuZEz7CMxMwN!W;5B0N9i$Dujt>qhRP@{Xf+2>fMv{)0(+0UG8+FqVzJ5D%pBIrS1W z#0eoJKag*Lt*m4h$(Po}F6t>>*BZ1o=>T42HoZ?-`V>7P9pqP)Q-D9|@JjgZ_~9(z zsky$8uLC@Z+9n-jA?7V~h9!{sfXk30RA~<;H`t*JJwYy0he???DjBBJBjS#xm;f~e zd<}x4Xg`Ym0DV$WJN%sb+hPG4?n7Q$2|F{m0=rEBNQow~g9e zT{0K31$+dtsR9jUC{EKOs!F_w;iWXr4=|D;e0rTtZYlZqY9;xE`f>1Y(1vh5wnJ@? zCis?6-voY!_EaMl*^`s!zcNW*v>DBXu}kbV!zSX2XoL=y^kO#lhj0YBIbh{AnDSbW z#@~zHfV{n)-p^pB(>F{x#f+u45?c~GPM&`exxclB#AwKj9QQaH7n9qhM`mV`kq{R_ z)5&ijUW(s>fnTs+$feM80gg|^ZrBVkB8%}yvh*9U*}+V(r)`h6&(V28G8GTa^;dqw0h3!GS4a<#V!+3Bt(a+ST zq33O%V@i`%hq{s!IZe}g^q%JLXkKc*!ULO6~7QBDMAaxv88e~#*n z?~p>^VhQ@972pjgu7+M zGFp9s77meAPGSr?ffL;$b^Q@*2nKMN?W`no($F8! zdg`4ZJdWQ6e>9k#_&b%Dluh!{S0CII9r6?P=HQm-Mf9Y;58cdAk*R1e;@?o){N8|P zDp&yPAR7&MDgb9OgL{u2W57b}C@@{=8wYN=4$rSW`-q3oJPq7DF#EwqlZ#TE7y0M> zw5*lr*6j>+d8?AhEVKvwOF4vWd>e?2*WE(xq3zM19j}vb0pBsLJIY?>h{RH+AJ}BI zBZcjyzAu|>LPeG_WedI!eipVClh3kQFG%SJanmuj!ME#Qbv$>?P_}@{#4SpI#f0HxNcb2$3R%9}^ zEIcBw)ON@32IeJvjj-R#YYbf=I1bq&iYxF%+-P_QU=X3$lL2B8_`gCL8?7cnbN{1sqVh@`A^tw5{{k1!0zZz_+51H zEI`@tla+i1wM;P0(U#B&Y8FHCMky6Aq%R@2h`_YB;>>!>BM=o%M88lyUg6#^I zh$mVKtjJM${*45+0RE`p3MRxJG~_LDHS|1)gIJL< zPW5suHi^E5)GnbsY0rhXG9mRKrqdoBy;)cWyNhddq9+5}n>w~ikPfUIV zcEd(Px}PnBX}E@MMN@8kk!E&dNMo^kdL@#2%0gGLf07FYZ&C8KuSfCHYlOyWANoAzcCH1MvrjePD1a@V)S(bl@Vz_QS5S&EiGjwh-l~ae;1lNv-U3Sx+n@OPLmwWfDsC^(s&s?K;sw5V_m3SBv%bh z#;-kwy%z*XSX)+b@q5g)xCG_~CZSmt#+l`rqZ0>4qmRib` zM0-`B`Jt=>tSPa`E#f86KSZBV-)>JELhwgZOC&yu-=DfjCG;ekNKV8mJ**?*spoV9 zevzWoYT)OPpK)oBwNsLK3e{~p@~0a9pXey+Wg*&0V;QtAxw|x%CKn0Tn^@#2i%*89 z1jAY>$9*t!>7Pfv9l1#A;WjjXJF#K-8TX#Xyfp2jV8nOT6POCP3FL=0mcByTybsbU zEYS-q(jJ>laY@7`_%6_Y19iwpxbCBm=xd5?hz^pw>Nx?;!HSeu!jEkJ1%N{i>lHo3 zx{}`t?jV>S0qn(|Bklx83G_95cUZuUKP~s_0>z2nQ9GlYdFc`1`uWnM=t02*_#6Ds z@k4d!4shRs$wO^8ehup7@N;WD+?Dyu zY4}XBAca7VFcK>=20ugxNqj>6Jv3jz@54!KlmgNh;&JFX7Obo%CHd}f)F&6Ly>G}3 zCVmCh-?lv0KaU`RA)7`_lbFZ3z3F7)|euTVQpPXaijY>TA8V@lPdc}LPB8zBiaZKNTW)+F~0 zIfp!V@{>s(B@V(KR=^MRRb|jD>^U7)0Dl+*n~*=wLLp$=@D6ZWOGO6PBRQL)4v7X_ zQsV`XbfWP9Bo9!LbaL;=HD-7g_K^;nPMiW)30?A|9d39`eK@#WiYp7|Lw0$E2I);< z4+FhPX4zAQEewh!{}|0pUStIe-N9c(t+qKLy{svTE{AkuWM1@xp5u9}JM{wqt~0ih zt{w~K6in{aCsXf%4Wj0wm%EHyIi@)NX5zvIx51Rr)nDPO*w1e;1z&UsS`lzvU8)^} zjzH9!hT7VEQ)`2Wk27=?L-SE@fo=hNP3sq^S0J~XoK5h%>jmT{QIo!h^0LGv3L=|n zm`L&oemMpYBVLO-OE-e|=oIQ!>~5AV0Hy;R?mB3i4w1gH_~*n?=}O!fy-80&!8LMJ zuoonO#6eb{tMF$?J_hW>o6Aq<_E&!TNdx z_yzxqt!cRx=CZSorQKbZv-Ov?C}zyz(!f%tm@%eIjz_b$WbU40N%u5PcCBg;9wnq^ zu9$1EMwm0Bwp)MOZH)-AF5YI1obf0&RN*6<7#HSTw#diW#4^Cg_^F^}XiwwP#+HbA z#&7Gl$qWy(My+`qvdkK{;9*Lfby@PuJ(0?0jadd("enable_prime_tower", coBool); def->label = L("Enable"); - def->tooltip = L("Print a tower to prime material in nozzle after switching to a new material."); + def->tooltip = L("The wiping tower can be used to clean up the residue on the nozzle and stabilize the chamber pressure inside the nozzle, " + "in order to avoid appearance defects when printing objects."); def->mode = comSimple; def->set_default_value(new ConfigOptionBool(false)); From de3bb7eb4ff52b4ba41d04cb71cc61aef1105c2f Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Tue, 11 Apr 2023 11:07:54 +0800 Subject: [PATCH 287/339] FIX: new project use the app_config flush_multiplier Change-Id: I5b820399a814a043581fcfadb9629cbe15dd1c52 --- src/libslic3r/PresetBundle.cpp | 8 ++++++++ src/slic3r/GUI/Plater.cpp | 1 - 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index da08a08ed5..ac3aa32bd0 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -1322,6 +1322,11 @@ void PresetBundle::load_selections(AppConfig &config, const PresetPreferences& p auto flush_volumes_vector = matrix | boost::adaptors::transformed(boost::lexical_cast); project_config.option("flush_volumes_vector")->values = std::vector(flush_volumes_vector.begin(), flush_volumes_vector.end()); } + if (config.has("app", "flush_multiplier")) { + std::string str_flush_multiplier = config.get("app", "flush_multiplier"); + if (!str_flush_multiplier.empty()) + project_config.option("flush_multiplier")->set(new ConfigOptionFloat(std::stof(str_flush_multiplier))); + } // Update visibility of presets based on their compatibility with the active printer. // Always try to select a compatible print and filament preset to the current printer preset, @@ -1396,6 +1401,9 @@ void PresetBundle::export_selections(AppConfig &config) config.set("presets", "flush_volumes_vector", flush_volumes_vector); config.set("presets", PRESET_PRINTER_NAME, printers.get_selected_preset_name()); + + auto flush_multi_opt = project_config.option("flush_multiplier"); + config.set("flush_multiplier", std::to_string(flush_multi_opt ? flush_multi_opt->getFloat() : 1.0f)); // BBS //config.set("presets", "sla_print", sla_prints.get_selected_preset_name()); //config.set("presets", "sla_material", sla_materials.get_selected_preset_name()); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index f6259c48ec..a01112e6b8 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -758,7 +758,6 @@ Sidebar::Sidebar(Plater *parent) (project_config.option("flush_volumes_vector"))->values = std::vector(extruders.begin(), extruders.end()); (project_config.option("flush_multiplier"))->set(new ConfigOptionFloat(dlg.get_flush_multiplier())); - wxGetApp().app_config->set("flush_multiplier", std::to_string(dlg.get_flush_multiplier())); wxGetApp().preset_bundle->export_selections(*wxGetApp().app_config); wxGetApp().plater()->update_project_dirty_from_presets(); From a344ebcf81679729930a49b248e7a40454316060 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Tue, 11 Apr 2023 10:30:07 +0800 Subject: [PATCH 288/339] NEW: Revert "[STUDIO-2476] design_staffpick" This reverts commit 0063720bbaaa6a680f2d9f395d60cf193d126e11. Change-Id: Ieb19daf19b38f5e25b78967ee225042988d98c7d --- resources/web/data/text.js | 9 +- resources/web/homepage/css/dark.css | 11 - resources/web/homepage/css/home.css | 82 +---- resources/web/homepage/img/t1.svg | 14 - resources/web/homepage/img/t2.svg | 10 - resources/web/homepage/index.html | 71 +--- resources/web/homepage/js/globalapi.js | 340 ++++++++++++++++++ resources/web/homepage/js/home.js | 91 ----- resources/web/homepage/js/jquery-3.6.0.min.js | 2 + resources/web/homepage/js/json2.js | 185 ++++++++++ src/libslic3r/AppConfig.cpp | 4 - src/slic3r/GUI/GUI_App.cpp | 29 -- src/slic3r/GUI/GUI_App.hpp | 1 - src/slic3r/GUI/Preferences.cpp | 13 - src/slic3r/GUI/WebViewDialog.cpp | 17 - src/slic3r/GUI/WebViewDialog.hpp | 4 - src/slic3r/Utils/NetworkAgent.cpp | 30 +- src/slic3r/Utils/NetworkAgent.hpp | 6 - 18 files changed, 556 insertions(+), 363 deletions(-) delete mode 100644 resources/web/homepage/img/t1.svg delete mode 100644 resources/web/homepage/img/t2.svg create mode 100644 resources/web/homepage/js/globalapi.js create mode 100644 resources/web/homepage/js/jquery-3.6.0.min.js create mode 100644 resources/web/homepage/js/json2.js diff --git a/resources/web/data/text.js b/resources/web/data/text.js index 54fbfb0040..6ea1cd37ae 100644 --- a/resources/web/data/text.js +++ b/resources/web/data/text.js @@ -97,8 +97,7 @@ var LangText={ "t103":"Other", "t104":"Profile name", "t105":"Profile Author", - "t106":"Profile description", - "t107":"Staff Pick" + "t106":"Profile description" }, "zh_CN": { "t1": "欢迎使用Bambu Studio", @@ -198,8 +197,7 @@ var LangText={ "t103":"其他", "t104":"配置名称", "t105":"配置作者", - "t106":"配置介绍", - "t107":"人工精选", + "t106":"配置介绍", "wk1": "快速入门指南", "wk2": "本文介绍了Bambu Studio的最基本用法。它指导用户配置软件,创建项目,并逐步完成第一个打印任务。", "wk3": "基于项目的工作流", @@ -315,8 +313,7 @@ var LangText={ "t103":"その他", "t104":"構成名", "t105":"構成著者", - "t106":"構成の概要", - "t107":"スタッフが選ぶ" + "t106":"構成の概要", } }; diff --git a/resources/web/homepage/css/dark.css b/resources/web/homepage/css/dark.css index 362de35d4b..c1f5dfa91e 100644 --- a/resources/web/homepage/css/dark.css +++ b/resources/web/homepage/css/dark.css @@ -83,15 +83,4 @@ body .UG_DESC { color:#818183; -} - -/*---Staff PIck----*/ -#HotModel_Swiper -{ - background-color: #323238; -} - -.HotModel_NameText -{ - background-color: #636368; } \ No newline at end of file diff --git a/resources/web/homepage/css/home.css b/resources/web/homepage/css/home.css index 08392714de..bebb01976c 100644 --- a/resources/web/homepage/css/home.css +++ b/resources/web/homepage/css/home.css @@ -244,13 +244,6 @@ body height: 100%; } -.TitleSmallIcon -{ - width:30px; - height: 30px; - margin-right: 10px; -} - #MenuArea { height: 140px; @@ -309,22 +302,6 @@ body height: 420px; } -#HotModelBlock -{ - display:flex; - align-items: center; - padding: 6px 2px; - border-bottom-width: 0px; - border-bottom-style: solid; -} - -.HotModel_PrevImg -{ - width: 200px; - height: 148px; -} - - #RecentFileArea { margin-top: 10px; @@ -337,7 +314,7 @@ body { display:flex; align-items: center; - padding: 6px 2px; + padding: 6px; border-bottom-width: 1px; border-bottom-style: solid; } @@ -650,53 +627,28 @@ body font-size: 14px; } -/*--Staff Pick--*/ -#HotModelArea +/*------Christmas cabin---*/ +#ChristmasArea { - display: none; -} - -#HotModel_Swiper -{ - background-color: #EEEEEE; - padding: 20px 16px 20px 16px; -} - -.HotModelPiece -{ - width: 200px!important; - display:flex; + margin-top: 10px; + display: flex; flex-direction: column; - cursor: pointer; } -.HotModel_PrevBlock +#ChristmasTitleBlock { - border:2px solid #656568; - height: 148px; + display:flex; + align-items: center; + padding: 6px; + border-bottom-width: 1px; + border-bottom-style: solid; } -.HotModel_PrevImg +#CabinList { - width: 100%; -} + display: flex; + flex-wrap: wrap; + align-content: flex-start; + overflow-y: auto; -.HotModel_NameText -{ - height: 28px; - line-height: 28px; - padding: 0px 8px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - background-color: #cecece; -} - - -.swiper-scrollbar -{ - height: 10px!important; -} - - -} +} \ No newline at end of file diff --git a/resources/web/homepage/img/t1.svg b/resources/web/homepage/img/t1.svg deleted file mode 100644 index 319067548b..0000000000 --- a/resources/web/homepage/img/t1.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/resources/web/homepage/img/t2.svg b/resources/web/homepage/img/t2.svg deleted file mode 100644 index a7864b126c..0000000000 --- a/resources/web/homepage/img/t2.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/resources/web/homepage/index.html b/resources/web/homepage/index.html index 39a5403d62..0c19e78a12 100644 --- a/resources/web/homepage/index.html +++ b/resources/web/homepage/index.html @@ -5,17 +5,12 @@ homepage - - - - - - - - - - - + + + + + + @@ -79,59 +74,9 @@

  • -
    - -
    -
    - -
    Staff pick
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    - - - +
    -
    - +
    recent open
    Clear all
    diff --git a/resources/web/homepage/js/globalapi.js b/resources/web/homepage/js/globalapi.js new file mode 100644 index 0000000000..80bbaa01d5 --- /dev/null +++ b/resources/web/homepage/js/globalapi.js @@ -0,0 +1,340 @@ + +/*------------------ Date Function ------------------------*/ +function GetFullToday( ) +{ + var d=new Date(); + + var nday=d.getDate(); + var nmonth=d.getMonth()+1; + var nyear=d.getFullYear(); + + var strM=nmonth+''; + if( nmonth<10 ) + strM='0'+nmonth; + + var strD=nday+''; + if( nday<10 ) + strD='0'+nday; + + return nyear+'-'+strM+'-'+strD; +} + +function GetFullDate() +{ + var d=new Date(); + + var tDate={}; + + tDate.nyear=d.getFullYear(); + tDate.nmonth=d.getMonth()+1; + tDate.nday=d.getDate(); + + tDate.nhour=d.getHours(); + tDate.nminute=d.getMinutes(); + tDate.nsecond=d.getSeconds(); + + tDate.nweek=d.getDay(); + tDate.ndate=d.getDate(); + + var strM=tDate.nmonth+''; + if( tDate.nmonth<10 ) + strM='0'+tDate.nmonth; + + var strD=tDate.nday+''; + if( tDate.nday<10 ) + strD='0'+tDate.nday; + + var strH=tDate.nhour+''; + if( tDate.nhour<10 ) + strH='0'+tDate.nhour; + + var strMin=tDate.nminute+''; + if( tDate.nminute<10 ) + strMin='0'+tDate.nminute; + + var strS=tDate.nsecond+''; + if( tDate.nsecond<10 ) + strS='0'+tDate.nsecond; + + tDate.strdate=tDate.nyear+'-'+strM+'-'+strD; + tDate.strFulldate=tDate.strdate+' '+strH+':'+strMin+':'+strS; + + return tDate; +} + + +function Unixtimestamp2Date( nSecond ) +{ + var d=new Date(nSecond*1000); + + var tDate={}; + + tDate.nyear=d.getFullYear(); + tDate.nmonth=d.getMonth()+1; + tDate.nday=d.getDate(); + + tDate.nhour=d.getHours(); + tDate.nminute=d.getMinutes(); + tDate.nsecond=d.getSeconds(); + + tDate.nweek=d.getDay(); + tDate.ndate=d.getDate(); + + var strM=tDate.nmonth+''; + if( tDate.nmonth<10 ) + strM='0'+tDate.nmonth; + + var strD=tDate.nday+''; + if( tDate.nday<10 ) + strD='0'+tDate.nday; + + tDate.strdate=tDate.nyear+'-'+strM+'-'+strD; + + return tDate.strdate; +} + + +//------------Array Function------------- +Array.prototype.in_array = function (e) { + let sArray= ',' + this.join(this.S) + ','; + let skey=','+e+','; + + if(sArray.indexOf(skey)>=0) + return true; + else + return false; + } + + + +//------------String Function------------------ +/** +* Delete Left/Right Side Blank +*/ +String.prototype.trim=function() +{ + return this.replace(/(^\s*)|(\s*$)/g, ''); +} +/** +* Delete Left Side Blank +*/ +String.prototype.ltrim=function() +{ + return this.replace(/(^\s*)/g,''); +} +/** +* Delete Right Side Blank +*/ +String.prototype.rtrim=function() +{ + return this.replace(/(\s*$)/g,''); +} + + +//----------------Get Param------------- +function GetQueryString(name) +{ + var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); + var r = window.location.search.substr(1).match(reg); + if (r!=null) + { + return unescape(r[2]); + } + else + { + return null; + } +} + +function GetGetStr() +{ + let strGet=""; + + //获取当前URL + let url = document.location.href; + + //获取?的位置 + let index = url.indexOf("?") + if(index != -1) { + //截取出?后面的字符串 + strGet = url.substr(index + 1); + } + + return strGet; +} + + +/*--------------------JSON Function------------*/ + +/* +功能:检查一个字符串是不是标准的JSON格式 +参数: strJson 被检查的字符串 +返回值: 如果字符串是一个标准的JSON格式,则返回JSON对象 + 如果字符串不是标准JSON格式,则返回null +*/ +function IsJson( strJson ) +{ + var tJson=null; + try + { + tJson=JSON.parse(strJson); + } + catch(exception) + { + return null; + } + + return tJson; +} + +/*-----------------------Ajax Function--------------------*/ +/*对JQuery的Ajax函数的封装,只支持异步 +参数说明: + url 目标地址 + action post/get + data 字符串格式的发送内容 + asyn true---异步模式;false-----同步模式; +*/ +function HttpReq( url,action, data,callbackfunc) +{ + var strAction=action.toLowerCase(); + + if( strAction=="post") + { + $.post(url,data,callbackfunc); + } + else if( strAction=="get") + { + $.get(url,callbackfunc); + } +} + +/*---------------Cookie Function-------------------*/ +function setCookie(name, value, time='',path='') { + if(time && path){ + var strsec = time * 1000; + var exp = new Date(); + exp.setTime(exp.getTime() + strsec * 1); + document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString() + ";path="+path; + }else if(time){ + var strsec = time * 1000; + var exp = new Date(); + exp.setTime(exp.getTime() + strsec * 1); + document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString(); + }else if(path){ + document.cookie = name + "=" + escape(value) + ";path="+path; + }else{ + document.cookie = name + "=" + escape(value); + } +} + +function getCookie(c_name) +{ + if(document.cookie.length > 0) { + c_start = document.cookie.indexOf(c_name + "=");//获取字符串的起点 + if(c_start != -1) { + c_start = c_start + c_name.length + 1;//获取值的起点 + c_end = document.cookie.indexOf(";", c_start);//获取结尾处 + if(c_end == -1) c_end = document.cookie.length;//如果是最后一个,结尾就是cookie字符串的结尾 + return decodeURI(document.cookie.substring(c_start, c_end));//截取字符串返回 + } + } + + return ""; +} + +function checkCookie(c_name) { + username = getCookie(c_name); + console.log(username); + if (username != null && username != "") + { return true; } + else + { return false; } +} + +function clearCookie(name) { + setCookie(name, "", -1); +} + + +/*--------Studio WX Message-------*/ +function IsInSlicer() +{ + let bMatch=navigator.userAgent.match( RegExp('BBL-Slicer','i') ); + + return bMatch; +} + + + +function SendWXMessage( strMsg ) +{ + let bCheck=IsInSlicer(); + + if(bCheck!=null) + { + window.wx.postMessage(strMsg); + } +} + + +/*------CSS Link Control----*/ +function RemoveCssLink( LinkPath ) +{ + let pNow=$("head link[href='"+LinkPath+"']"); + + let nTotal=pNow.length; + for( let n=0;n0) + RemoveCssLink(DarkCssPath); + } + else + { + if(nNow==0) + AddCssLink(DarkCssPath); + } +} + +SwitchDarkMode("css/dark.css"); \ No newline at end of file diff --git a/resources/web/homepage/js/home.js b/resources/web/homepage/js/home.js index 7be05a331f..bfb27fe72c 100644 --- a/resources/web/homepage/js/home.js +++ b/resources/web/homepage/js/home.js @@ -12,9 +12,6 @@ function OnInit() SendMsg_GetLoginInfo(); SendMsg_GetRecentFile(); - SendMsg_GetStaffPick(); - - //InitStaffPick(); } //------最佳打开文件的右键菜单功能---------- @@ -121,10 +118,6 @@ function HandleStudio( pVal ) $("#NoPluginTip").hide(); } } - else if( strCmd=="modelmall_model_advise_get") - { - ShowStaffPick( pVal['hits'] ); - } } function GotoMenu( strMenu ) @@ -405,90 +398,6 @@ function OpenWikiUrl( strUrl ) SendWXMessage( JSON.stringify(tSend) ); } -//--------------Staff Pick------- -var StaffPickSwiper=null; -function InitStaffPick() -{ - if( StaffPickSwiper!=null ) - { - StaffPickSwiper.destroy(true,true); - StaffPickSwiper=null; - } - - StaffPickSwiper = new Swiper('#HotModel_Swiper.swiper', { - slidesPerView : 'auto', - spaceBetween: 16, - navigation: { - nextEl: '.swiper-button-next', - prevEl: '.swiper-button-prev', - }, -// autoplay: { -// delay: 3000, -// stopOnLastSlide: false, -// disableOnInteraction: true, -// disableOnInteraction: false -// }, -// pagination: { -// el: '.swiper-pagination', -// }, - scrollbar: { - el: '.swiper-scrollbar', - draggable: true - } - }); -} - -function SendMsg_GetStaffPick() -{ - var tSend={}; - tSend['sequence_id']=Math.round(new Date() / 1000); - tSend['command']="modelmall_model_advise_get"; - - SendWXMessage( JSON.stringify(tSend) ); -} - -function ShowStaffPick( ModelList ) -{ - let PickTotal=ModelList.length; - if(PickTotal==0) - { - $('#HotModelList').html(''); - $('#HotModelArea').hide(); - - return; - } - - let strPickHtml=''; - for(let a=0;a'+ - '
    '+ - '
    '+ModelName+'
    '+ - '
    '; - } - - $('#HotModelList').html(strPickHtml); - InitStaffPick(); - $('#HotModelArea').show(); -} - -function OpenOneStaffPickModel( ModelID ) -{ - var tSend={}; - tSend['sequence_id']=Math.round(new Date() / 1000); - tSend['command']="modelmall_model_open"; - tSend['data']={}; - tSend['data']['id']=ModelID; - - SendWXMessage( JSON.stringify(tSend) ); -} - //---------------Global----------------- window.postMessage = HandleStudio; diff --git a/resources/web/homepage/js/jquery-3.6.0.min.js b/resources/web/homepage/js/jquery-3.6.0.min.js new file mode 100644 index 0000000000..c4c6022f29 --- /dev/null +++ b/resources/web/homepage/js/jquery-3.6.0.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="
    ",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
    ",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0app_config->get("staff_pick_switch") == "true") { - if (mainframe->m_webview) { - mainframe->m_webview->SendDesignStaffpick(m_agent); - } - } - } - else if (command_str.compare("modelmall_model_open") == 0) { - if (root.get_child_optional("data") != boost::none) { - pt::ptree data_node = root.get_child("data"); - boost::optional id = data_node.get_optional("id"); - if (id.has_value() && m_agent) { - std::string url; - if (m_agent->get_model_mall_detail_url(&url, id.value()) == 0) - wxLaunchDefaultBrowser(url); - } - } - } else if (command_str.compare("homepage_open_recentfile") == 0) { if (root.get_child_optional("data") != boost::none) { pt::ptree data_node = root.get_child("data"); @@ -3808,12 +3790,6 @@ std::string GUI_App::handle_web_request(std::string cmd) } } } - else if (command_str.compare("common_openurl") == 0) { - boost::optional path = root.get_optional("url"); - if (path.has_value()) { - wxLaunchDefaultBrowser(path.value()); - } - } } } catch (...) { @@ -4578,11 +4554,6 @@ void GUI_App::stop_http_server() m_http_server.stop(); } -void GUI_App::switch_staff_pick(bool on) -{ - mainframe->m_webview->SendDesignStaffpick(on ? m_agent : nullptr); -} - bool GUI_App::switch_language() { if (select_language()) { diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index bdf498294d..0a5991589c 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -439,7 +439,6 @@ public: void stop_sync_user_preset(); void start_http_server(); void stop_http_server(); - void switch_staff_pick(bool on); void on_show_check_privacy_dlg(int online_login = 0); void show_check_privacy_dlg(wxCommandEvent& evt); diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 6a9a3e22b4..77314c6e3f 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -604,11 +604,6 @@ wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxWindow *pa app_config->set_bool(param, checkbox->GetValue()); app_config->save(); - if (param == "staff_pick_switch") { - bool pbool = app_config->get("staff_pick_switch") == "true"; - wxGetApp().switch_staff_pick(pbool); - } - // backup if (param == "backup_switch") { bool pbool = app_config->get("backup_switch") == "true" ? true : false; @@ -941,11 +936,6 @@ wxWindow* PreferencesDialog::create_general_page() _L("If enabled, sets BambuStudio as default application to open .step files"), 50, "associate_step"); #endif // _WIN32 - auto title_modelmall = create_item_title(_L("Online Models"), page, _L("Online Models")); - // auto item_backup = create_item_switch(_L("Backup switch"), page, _L("Backup switch"), "units"); - auto item_modelmall = create_item_checkbox(_L("Show online staff-picked models on the home page"), page, _L("Show online staff-picked models on the home page"), 50, "staff_pick_switch"); - - auto title_project = create_item_title(_L("Project"), page, ""); auto item_max_recent_count = create_item_input(_L("Maximum recent projects"), "", page, _L("Maximum count of recent projects"), "max_recent_count", [](wxString value) { long max = 0; @@ -986,9 +976,6 @@ wxWindow* PreferencesDialog::create_general_page() sizer_page->Add(item_associate_stl, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_associate_step, 0, wxTOP, FromDIP(3)); #endif // _WIN32 - sizer_page->Add(title_modelmall, 0, wxTOP | wxEXPAND, FromDIP(20)); - sizer_page->Add(item_modelmall, 0, wxTOP, FromDIP(3)); - sizer_page->Add(title_project, 0, wxTOP| wxEXPAND, FromDIP(20)); sizer_page->Add(item_max_recent_count, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_save_choise, 0, wxTOP, FromDIP(3)); diff --git a/src/slic3r/GUI/WebViewDialog.cpp b/src/slic3r/GUI/WebViewDialog.cpp index 10625ff1ea..a94e86c810 100644 --- a/src/slic3r/GUI/WebViewDialog.cpp +++ b/src/slic3r/GUI/WebViewDialog.cpp @@ -427,23 +427,6 @@ void WebViewPanel::SendRecentList(wxString const &sequence_id) RunScript(wxString::Format("window.postMessage(%s)", oss.str())); } -void WebViewPanel::SendDesignStaffpick(NetworkAgent *agent) -{ - if (agent) { - agent->get_design_staffpick(0, 60, [this](std::string body) { - if (body.empty() || body.front() != '{') { - BOOST_LOG_TRIVIAL(warning) << "get_design_staffpick failed " + body; - return; - } - CallAfter([this, body] { - auto body2 = body; - body2.insert(1, "\"command\": \"modelmall_model_advise_get\", "); - RunScript(wxString::Format("window.postMessage(%s)", body2)); - }); - }); - } -} - void WebViewPanel::SendLoginInfo() { if (wxGetApp().getAgent()) { diff --git a/src/slic3r/GUI/WebViewDialog.hpp b/src/slic3r/GUI/WebViewDialog.hpp index 5fa3a0ede5..1eab6db154 100644 --- a/src/slic3r/GUI/WebViewDialog.hpp +++ b/src/slic3r/GUI/WebViewDialog.hpp @@ -27,9 +27,6 @@ namespace Slic3r { - -class NetworkAgent; - namespace GUI { @@ -94,7 +91,6 @@ public: public: void SendRecentList(wxString const &sequence_id); - void SendDesignStaffpick(NetworkAgent *agent); void SendLoginInfo(); void ShowNetpluginTip(); diff --git a/src/slic3r/Utils/NetworkAgent.cpp b/src/slic3r/Utils/NetworkAgent.cpp index 72559eb9ab..2f4323bbfa 100644 --- a/src/slic3r/Utils/NetworkAgent.cpp +++ b/src/slic3r/Utils/NetworkAgent.cpp @@ -92,12 +92,10 @@ func_get_slice_info NetworkAgent::get_slice_info_ptr = nullptr; func_query_bind_status NetworkAgent::query_bind_status_ptr = nullptr; func_modify_printer_name NetworkAgent::modify_printer_name_ptr = nullptr; func_get_camera_url NetworkAgent::get_camera_url_ptr = nullptr; -func_get_design_staffpick NetworkAgent::get_design_staffpick_ptr = nullptr; func_start_pubilsh NetworkAgent::start_publish_ptr = nullptr; func_get_profile_3mf NetworkAgent::get_profile_3mf_ptr = nullptr; func_get_model_publish_url NetworkAgent::get_model_publish_url_ptr = nullptr; func_get_model_mall_home_url NetworkAgent::get_model_mall_home_url_ptr = nullptr; -func_get_model_mall_detail_url NetworkAgent::get_model_mall_detail_url_ptr = nullptr; func_get_my_profile NetworkAgent::get_my_profile_ptr = nullptr; func_track_enable NetworkAgent::track_enable_ptr = nullptr; func_track_event NetworkAgent::track_event_ptr = nullptr; @@ -240,13 +238,11 @@ int NetworkAgent::initialize_network_module(bool using_backup) get_slice_info_ptr = reinterpret_cast(get_network_function("bambu_network_get_slice_info")); query_bind_status_ptr = reinterpret_cast(get_network_function("bambu_network_query_bind_status")); modify_printer_name_ptr = reinterpret_cast(get_network_function("bambu_network_modify_printer_name")); - get_camera_url_ptr = reinterpret_cast(get_network_function("bambu_network_get_camera_url")); - get_design_staffpick_ptr = reinterpret_cast(get_network_function("bambu_network_get_design_staffpick")); + get_camera_url_ptr = reinterpret_cast(get_network_function("bambu_network_get_camera_url")); start_publish_ptr = reinterpret_cast(get_network_function("bambu_network_start_publish")); get_profile_3mf_ptr = reinterpret_cast(get_network_function("bambu_network_get_profile_3mf")); get_model_publish_url_ptr = reinterpret_cast(get_network_function("bambu_network_get_model_publish_url")); get_model_mall_home_url_ptr = reinterpret_cast(get_network_function("bambu_network_get_model_mall_home_url")); - get_model_mall_detail_url_ptr = reinterpret_cast(get_network_function("bambu_network_get_model_mall_detail_url")); get_my_profile_ptr = reinterpret_cast(get_network_function("bambu_network_get_my_profile")); track_enable_ptr = reinterpret_cast(get_network_function("bambu_network_track_enable")); track_event_ptr = reinterpret_cast(get_network_function("bambu_network_track_event")); @@ -343,12 +339,10 @@ int NetworkAgent::unload_network_module() query_bind_status_ptr = nullptr; modify_printer_name_ptr = nullptr; get_camera_url_ptr = nullptr; - get_design_staffpick_ptr = nullptr; start_publish_ptr = nullptr; get_profile_3mf_ptr = nullptr; get_model_publish_url_ptr = nullptr; get_model_mall_home_url_ptr = nullptr; - get_model_mall_detail_url_ptr = nullptr; get_my_profile_ptr = nullptr; track_enable_ptr = nullptr; track_event_ptr = nullptr; @@ -1094,17 +1088,6 @@ int NetworkAgent::get_camera_url(std::string dev_id, std::function callback) -{ - int ret = 0; - if (network_agent && get_design_staffpick_ptr) { - ret = get_design_staffpick_ptr(network_agent, offset, limit, callback); - if (ret) - BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%")%network_agent %ret; - } - return ret; -} - int NetworkAgent::start_publish(PublishParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, std::string *out) { int ret = 0; @@ -1148,17 +1131,6 @@ int NetworkAgent::get_model_mall_home_url(std::string* url) return ret; } -int NetworkAgent::get_model_mall_detail_url(std::string* url, std::string id) -{ - int ret = 0; - if (network_agent && get_model_publish_url_ptr) { - ret = get_model_mall_detail_url_ptr(network_agent, url, id); - if (ret) - BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%") % network_agent % ret; - } - return ret; -} - int NetworkAgent::get_my_profile(std::string token, unsigned int *http_code, std::string *http_body) { int ret = 0; diff --git a/src/slic3r/Utils/NetworkAgent.hpp b/src/slic3r/Utils/NetworkAgent.hpp index 42012a793e..cf1cea3a2a 100644 --- a/src/slic3r/Utils/NetworkAgent.hpp +++ b/src/slic3r/Utils/NetworkAgent.hpp @@ -72,12 +72,10 @@ typedef int (*func_get_slice_info)(void *agent, std::string project_id, std::str typedef int (*func_query_bind_status)(void *agent, std::vector query_list, unsigned int* http_code, std::string* http_body); typedef int (*func_modify_printer_name)(void *agent, std::string dev_id, std::string dev_name); typedef int (*func_get_camera_url)(void *agent, std::string dev_id, std::function callback); -typedef int (*func_get_design_staffpick)(void *agent, int offset, int limit, std::function callback); typedef int (*func_start_pubilsh)(void *agent, PublishParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, std::string* out); typedef int (*func_get_profile_3mf)(void *agent, BBLProfile* profile); typedef int (*func_get_model_publish_url)(void *agent, std::string* url); typedef int (*func_get_model_mall_home_url)(void *agent, std::string* url); -typedef int (*func_get_model_mall_detail_url)(void *agent, std::string* url, std::string id); typedef int (*func_get_my_profile)(void *agent, std::string token, unsigned int *http_code, std::string *http_body); typedef int (*func_track_enable)(void *agent, bool enable); typedef int (*func_track_event)(void *agent, std::string evt_key, std::string content); @@ -163,12 +161,10 @@ public: int query_bind_status(std::vector query_list, unsigned int* http_code, std::string* http_body); int modify_printer_name(std::string dev_id, std::string dev_name); int get_camera_url(std::string dev_id, std::function callback); - int get_design_staffpick(int offset, int limit, std::function callback); int start_publish(PublishParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, std::string* out); int get_profile_3mf(BBLProfile* profile); int get_model_publish_url(std::string* url); int get_model_mall_home_url(std::string* url); - int get_model_mall_detail_url(std::string* url, std::string id); int get_my_profile(std::string token, unsigned int* http_code, std::string* http_body); int track_enable(bool enable); int track_event(std::string evt_key, std::string content); @@ -243,12 +239,10 @@ private: static func_query_bind_status query_bind_status_ptr; static func_modify_printer_name modify_printer_name_ptr; static func_get_camera_url get_camera_url_ptr; - static func_get_design_staffpick get_design_staffpick_ptr; static func_start_pubilsh start_publish_ptr; static func_get_profile_3mf get_profile_3mf_ptr; static func_get_model_publish_url get_model_publish_url_ptr; static func_get_model_mall_home_url get_model_mall_home_url_ptr; - static func_get_model_mall_detail_url get_model_mall_detail_url_ptr; static func_get_my_profile get_my_profile_ptr; static func_track_enable track_enable_ptr; static func_track_event track_event_ptr; From 07f429744318e3b9aec637b9fe7c10f8e6f1e2c2 Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Mon, 10 Apr 2023 21:06:59 +0800 Subject: [PATCH 289/339] ENH: privacy: refine some text Change-Id: Id5c9c0b0700ce233e46d6ea39bbb7374f87449fa --- resources/web/data/text.js | 2 +- resources/web/guide/3/index.html | 2 +- resources/web/guide/31/index.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/web/data/text.js b/resources/web/data/text.js index 6ea1cd37ae..c887ddb9be 100644 --- a/resources/web/data/text.js +++ b/resources/web/data/text.js @@ -6,7 +6,7 @@ var LangText={ "t4": "Disagree", "t5": "Agree", "t6": "We kindly request your help to improve
    everyone's printing", - "t7": "Allow sending anonymous data", + "t7": "Join our Customer Experience Improvement Program", "t8": "Back", "t9": "Next", "t10": "Printer Selection", diff --git a/resources/web/guide/3/index.html b/resources/web/guide/3/index.html index 5febf0b9ea..0f148a1846 100644 --- a/resources/web/guide/3/index.html +++ b/resources/web/guide/3/index.html @@ -28,7 +28,7 @@
    - Allow sending anonymous data + Join our Customer Experience Improvement Program
    diff --git a/resources/web/guide/31/index.html b/resources/web/guide/31/index.html index c5a386d176..ff97a35035 100644 --- a/resources/web/guide/31/index.html +++ b/resources/web/guide/31/index.html @@ -27,7 +27,7 @@
    - Allow sending anonymous data + Join our Customer Experience Improvement Program
    From 2ce436d773d0f715254a3c76b657124f3e26ae96 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Tue, 11 Apr 2023 16:32:25 +0800 Subject: [PATCH 290/339] FIX: Cut connector tolerance does not take effect Change-Id: I1d0cbc8995eef01e5a0134b930024b46eff9bb2e --- src/libslic3r/Model.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index 0af344e876..03cf424d58 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -2726,7 +2726,7 @@ bool ModelVolume::is_splittable() const void ModelVolume::apply_tolerance() { assert(cut_info.is_connector); - if (cut_info.is_processed) + if (!cut_info.is_processed) return; Vec3d sf = get_scaling_factor(); From 5e6cfb069a767a5025253a3264e05ae9d3c6f23a Mon Sep 17 00:00:00 2001 From: tao wang Date: Tue, 11 Apr 2023 14:54:59 +0800 Subject: [PATCH 291/339] NEW:hide the entrance of filaments backup Change-Id: I383de6ced5efb20a19ca8171f981370bf8fcc3aa --- src/slic3r/GUI/DeviceManager.cpp | 3 +++ src/slic3r/GUI/DeviceManager.hpp | 1 + src/slic3r/GUI/SelectMachine.cpp | 6 ++++++ src/slic3r/GUI/StatusPanel.cpp | 3 +++ src/slic3r/GUI/Widgets/AMSControl.cpp | 29 ++++++++++++++++++--------- src/slic3r/GUI/Widgets/AMSControl.hpp | 1 + 6 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 37b2037540..979121d667 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -2286,6 +2286,9 @@ bool MachineObject::is_function_supported(PrinterFunction func) case FUNC_VIRTUAL_TYAY: func_name = "FUNC_VIRTUAL_TYAY"; break; + case FUNC_FILAMENT_BACKUP: + func_name = "FUNC_FILAMENT_BACKUP"; + break; default: return true; } diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 7756dfcc6c..df13853e73 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -93,6 +93,7 @@ enum PrinterFunction { FUNC_EXTRUSION_CALI, FUNC_VIRTUAL_TYAY, FUNC_PRINT_ALL, + FUNC_FILAMENT_BACKUP, FUNC_MAX }; diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index e4415ad4e7..f10580da0f 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -1116,6 +1116,7 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) m_sizer_material_area->Add(m_sizer_material_tips, 0, wxALIGN_CENTER|wxLEFT, FromDIP(8)); m_sizer_material_area->Add(m_sizer_material, 0, wxLEFT, FromDIP(15)); +#ifdef FILAMENT_BACKUP auto m_sizer_backup = new wxBoxSizer(wxHORIZONTAL); auto m_ams_backup_tip = new Label(this, _L("Ams filament backup")); m_ams_backup_tip->SetFont(::Label::Head_12); @@ -1136,6 +1137,7 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) m_ams_backup_tip->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {popup_filament_backup(); on_rename_enter(); }); img_ams_backup->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {popup_filament_backup(); }); +#endif m_statictext_ams_msg = new wxStaticText(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxALIGN_CENTER_HORIZONTAL); m_statictext_ams_msg->SetFont(::Label::Body_13); @@ -1317,7 +1319,11 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) m_sizer_main->Add(m_line_top, 0, wxEXPAND, 0); m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(22)); m_sizer_main->Add(m_scrollable_view, 0, wxALIGN_CENTER_HORIZONTAL, 0); + +#ifdef FILAMENT_BACKUP m_sizer_main->Add(m_sizer_backup, 0, wxALIGN_CENTER_HORIZONTAL, 0); +#endif + m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(8)); m_sizer_main->Add(m_statictext_ams_msg, 0, wxALIGN_CENTER_HORIZONTAL, 0); m_sizer_main->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(8)); diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index eee5ea66d5..36e6a329a7 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -1935,6 +1935,9 @@ void StatusPanel::update_ams(MachineObject *obj) bool is_support_extrusion_cali = obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI); bool is_support_virtual_tray = obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY); + bool is_support_filament_backup = obj->is_function_supported(PrinterFunction::FUNC_FILAMENT_BACKUP); + + m_ams_control->show_filament_backup(is_support_filament_backup); if (is_support_virtual_tray) { m_ams_control->update_vams_kn_value(obj->vt_tray, obj); diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index 03c4459f92..f6e8741297 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -1817,25 +1817,30 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons //backup tips + +#ifdef FILAMENT_BACKUP auto m_ams_backup_tip = new Label(m_amswin, _L("Ams filament backup")); m_ams_backup_tip->SetFont(::Label::Head_12); m_ams_backup_tip->SetForegroundColour(wxColour(0x00AE42)); m_ams_backup_tip->SetBackgroundColour(*wxWHITE); - auto img_ams_backup = new wxStaticBitmap(m_amswin, wxID_ANY, create_scaled_bitmap("automatic_material_renewal", this, 16), wxDefaultPosition, wxSize(FromDIP(16), FromDIP(16)), 0); - img_ams_backup->SetBackgroundColour(*wxWHITE); + auto m_img_ams_backup = new wxStaticBitmap(m_amswin, wxID_ANY, create_scaled_bitmap("automatic_material_renewal", this, 16), wxDefaultPosition, wxSize(FromDIP(16), FromDIP(16)), 0); + m_img_ams_backup->SetBackgroundColour(*wxWHITE); - m_sizer_ams_tips->Add( 0, 0, 1, wxEXPAND, 0 ); - m_sizer_ams_tips->Add(img_ams_backup, 0, wxALL, FromDIP(3)); + m_sizer_ams_tips->Add(0, 0, 1, wxEXPAND, 0); + m_sizer_ams_tips->Add(m_img_ams_backup, 0, wxALL, FromDIP(3)); m_sizer_ams_tips->Add(m_ams_backup_tip, 0, wxTOP, FromDIP(5)); - m_ams_backup_tip->Bind(wxEVT_ENTER_WINDOW, [this, img_amsmapping_tip](auto& e) {SetCursor(wxCURSOR_HAND);}); - img_ams_backup->Bind(wxEVT_ENTER_WINDOW, [this, img_amsmapping_tip](auto& e) {SetCursor(wxCURSOR_HAND);}); + m_ams_backup_tip->Bind(wxEVT_ENTER_WINDOW, [this, img_amsmapping_tip](auto& e) {SetCursor(wxCURSOR_HAND); }); + m_img_ams_backup->Bind(wxEVT_ENTER_WINDOW, [this, img_amsmapping_tip](auto& e) {SetCursor(wxCURSOR_HAND); }); - m_ams_backup_tip->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW);}); - img_ams_backup->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW);}); + m_ams_backup_tip->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); }); + m_img_ams_backup->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); }); - m_ams_backup_tip->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {post_event(SimpleEvent(EVT_AMS_FILAMENT_BACKUP));}); - img_ams_backup->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {post_event(SimpleEvent(EVT_AMS_FILAMENT_BACKUP));}); + m_ams_backup_tip->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {post_event(SimpleEvent(EVT_AMS_FILAMENT_BACKUP)); }); + m_img_ams_backup->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {post_event(SimpleEvent(EVT_AMS_FILAMENT_BACKUP)); }); +#endif // FILAMENT_BACKUP + + //ams cans @@ -2578,6 +2583,10 @@ void AMSControl::update_vams_kn_value(AmsTray tray, MachineObject* obj) m_vams_lib->Refresh(); } +void AMSControl::show_filament_backup(bool show) +{ +} + void AMSControl::reset_vams() { m_vams_lib->m_info.k = 0; diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index 779c6b28ac..bfed45e39d 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -621,6 +621,7 @@ public: void show_vams(bool show); void show_vams_kn_value(bool show); void update_vams_kn_value(AmsTray tray, MachineObject* obj); + void show_filament_backup(bool show); void reset_vams(); void post_event(wxEvent&& event); From 185235dd93057dd6069beb9cb5973c9f19a29086 Mon Sep 17 00:00:00 2001 From: tao wang Date: Tue, 11 Apr 2023 15:34:59 +0800 Subject: [PATCH 292/339] FIX:add protection when amsmapping popup Change-Id: Ia68e5b14c0286f84133686b45d3d8b851b7ffd82 --- src/slic3r/GUI/SelectMachine.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index f10580da0f..7f125fd8b9 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -3207,7 +3207,11 @@ void SelectMachineDialog::set_default() pos.y += item->GetRect().height; m_mapping_popup.Move(pos); - if (obj_ && obj_->has_ams() && ams_check->GetValue()) { + if (obj_ && + obj_->has_ams() && + ams_check->GetValue() && + obj_->dev_id == m_printer_last_select) + { m_mapping_popup.set_parent_item(item); m_mapping_popup.set_current_filament_id(extruder); m_mapping_popup.set_tag_texture(materials[extruder]); From 9d4a0665c6351333826389eff8ae24d2b0cee102 Mon Sep 17 00:00:00 2001 From: tao wang Date: Tue, 11 Apr 2023 19:28:15 +0800 Subject: [PATCH 293/339] ENH:add chinese translation of 'layer' Change-Id: I2a1a6524ce1e8bbc619d1cf608757699f10b0ac6 --- bbl/i18n/BambuStudio.pot | 15 +++----------- bbl/i18n/de/BambuStudio_de.po | 25 +++++++++++------------- bbl/i18n/en/BambuStudio_en.po | 25 +++++++++++------------- bbl/i18n/es/BambuStudio_es.po | 25 +++++++++++------------- bbl/i18n/fr/BambuStudio_fr.po | 25 +++++++++++------------- bbl/i18n/hu/BambuStudio_hu.po | 25 +++++++++++------------- bbl/i18n/it/BambuStudio_it.po | 25 +++++++++++------------- bbl/i18n/ja/BambuStudio_ja.po | 25 +++++++++++------------- bbl/i18n/nl/BambuStudio_nl.po | 25 +++++++++++------------- bbl/i18n/sv/BambuStudio_sv.po | 29 +++++++++++++--------------- bbl/i18n/zh_cn/BambuStudio_zh_CN.po | 29 +++++++++++++--------------- resources/i18n/de/BambuStudio.mo | Bin 233098 -> 232993 bytes resources/i18n/en/BambuStudio.mo | Bin 213657 -> 213552 bytes resources/i18n/es/BambuStudio.mo | Bin 233131 -> 233024 bytes resources/i18n/fr/BambuStudio.mo | Bin 239079 -> 238974 bytes resources/i18n/hu/BambuStudio.mo | Bin 234090 -> 233985 bytes resources/i18n/it/BambuStudio.mo | Bin 229016 -> 228911 bytes resources/i18n/ja/BambuStudio.mo | Bin 222555 -> 222452 bytes resources/i18n/nl/BambuStudio.mo | Bin 229896 -> 229790 bytes resources/i18n/sv/BambuStudio.mo | Bin 219894 -> 219789 bytes resources/i18n/zh_cn/BambuStudio.mo | Bin 212769 -> 212684 bytes 21 files changed, 117 insertions(+), 156 deletions(-) diff --git a/bbl/i18n/BambuStudio.pot b/bbl/i18n/BambuStudio.pot index ccf4c71022..0010c5f93e 100644 --- a/bbl/i18n/BambuStudio.pot +++ b/bbl/i18n/BambuStudio.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 14:18+0800\n" +"POT-Creation-Date: 2023-04-11 17:50+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1860,13 +1860,13 @@ msgstr "" msgid "Max volumetric speed" msgstr "" -msgid "\\u2103" +msgid "℃" msgstr "" msgid "Bed temperature" msgstr "" -msgid "mm\\u00B3" +msgid "mm³" msgstr "" msgid "Start calibration" @@ -4356,12 +4356,6 @@ msgstr "" msgid "If enabled, sets BambuStudio as default application to open .step files" msgstr "" -msgid "Online Models" -msgstr "" - -msgid "Show online staff-picked models on the home page" -msgstr "" - msgid "Maximum recent projects" msgstr "" @@ -6647,9 +6641,6 @@ msgstr "" msgid "Minimal purge on wipe tower" msgstr "" -msgid "mm³" -msgstr "" - msgid "Filament load time" msgstr "" diff --git a/bbl/i18n/de/BambuStudio_de.po b/bbl/i18n/de/BambuStudio_de.po index 27e96888ed..d49d470db9 100644 --- a/bbl/i18n/de/BambuStudio_de.po +++ b/bbl/i18n/de/BambuStudio_de.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 14:18+0800\n" +"POT-Creation-Date: 2023-04-11 17:50+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1952,14 +1952,14 @@ msgstr "Druckbetttemperatur" msgid "Max volumetric speed" msgstr "Maximale Volumengeschwindigkeit" -msgid "\\u2103" -msgstr "\\u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "Druckbetttemperatur" -msgid "mm\\u00B3" -msgstr "mm\\u00B3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "Starten" @@ -4685,12 +4685,6 @@ msgstr "" "Wenn aktiviert, wird BambuStudio als Standardanwendung zum Öffnen von .step-" "Dateien festgelegt" -msgid "Online Models" -msgstr "" - -msgid "Show online staff-picked models on the home page" -msgstr "" - msgid "Maximum recent projects" msgstr "" @@ -7304,9 +7298,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimale Wischmenge im Wischturm" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "Ladedauer des Filaments" @@ -9288,6 +9279,12 @@ msgstr "" "Wussten Sie, dass Sie die Festigkeit des Modells durch mehr Wandschleifen " "und eine höhere Dichte der Füllung verbessern können?" +#~ msgid "\\u2103" +#~ msgstr "\\u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\u00B3" + #~ msgid "" #~ "Print a tower to prime material in nozzle after switching to a new " #~ "material." diff --git a/bbl/i18n/en/BambuStudio_en.po b/bbl/i18n/en/BambuStudio_en.po index 59a3988f03..e33d00edba 100644 --- a/bbl/i18n/en/BambuStudio_en.po +++ b/bbl/i18n/en/BambuStudio_en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 14:18+0800\n" +"POT-Creation-Date: 2023-04-11 17:50+0800\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1910,14 +1910,14 @@ msgstr "Bed Temperature" msgid "Max volumetric speed" msgstr "Max volumetric speed" -msgid "\\u2103" -msgstr "\\u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "Bed temperature" -msgid "mm\\u00B3" -msgstr "mm\\u00B3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "Start" @@ -4587,12 +4587,6 @@ msgstr "" "If enabled, this sets Bambu Studio as the default application to open .step " "files." -msgid "Online Models" -msgstr "" - -msgid "Show online staff-picked models on the home page" -msgstr "" - msgid "Maximum recent projects" msgstr "" @@ -7128,9 +7122,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimal purge on wipe tower" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "Filament load time" @@ -9059,6 +9050,12 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" +#~ msgid "\\u2103" +#~ msgstr "\\u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\u00B3" + #~ msgid "" #~ "Print a tower to prime material in nozzle after switching to a new " #~ "material." diff --git a/bbl/i18n/es/BambuStudio_es.po b/bbl/i18n/es/BambuStudio_es.po index db543380d7..8583430ba8 100644 --- a/bbl/i18n/es/BambuStudio_es.po +++ b/bbl/i18n/es/BambuStudio_es.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 14:18+0800\n" +"POT-Creation-Date: 2023-04-11 17:50+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1949,14 +1949,14 @@ msgstr "Temperatura de la base" msgid "Max volumetric speed" msgstr "Velocidad volumétrica máxima" -msgid "\\u2103" -msgstr "\\ u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "Temperatura de la base" -msgid "mm\\u00B3" -msgstr "mm\\ u00b3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "Iniciar" @@ -4670,12 +4670,6 @@ msgstr "" "Si se activa, ajusta BambuStudio como aplicación por defecto para abrir " "archivos .step" -msgid "Online Models" -msgstr "" - -msgid "Show online staff-picked models on the home page" -msgstr "" - msgid "Maximum recent projects" msgstr "" @@ -7279,9 +7273,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Purga mínima en la torre de limpieza" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "Tiempo de carga de filamento" @@ -9253,6 +9244,12 @@ msgstr "" "¿Sabía que puede utilizar más bucles de pared y una densidad de relleno " "dispersa más alta para mejorar la resistencia del modelo?" +#~ msgid "\\u2103" +#~ msgstr "\\ u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\ u00b3" + #~ msgid "" #~ "Print a tower to prime material in nozzle after switching to a new " #~ "material." diff --git a/bbl/i18n/fr/BambuStudio_fr.po b/bbl/i18n/fr/BambuStudio_fr.po index 1fb4980e03..c01863fece 100644 --- a/bbl/i18n/fr/BambuStudio_fr.po +++ b/bbl/i18n/fr/BambuStudio_fr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 14:18+0800\n" +"POT-Creation-Date: 2023-04-11 17:50+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1949,14 +1949,14 @@ msgstr "Température du lit" msgid "Max volumetric speed" msgstr "Vitesse volumétrique maximale" -msgid "\\u2103" -msgstr "\\u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "Température du plateau" -msgid "mm\\u00B3" -msgstr "mm\\u00B3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "Démarrer" @@ -4663,12 +4663,6 @@ msgstr "" "Si activé, définit BambuStudio comme application par défaut pour ouvrir les " "fichiers .step" -msgid "Online Models" -msgstr "" - -msgid "Show online staff-picked models on the home page" -msgstr "" - msgid "Maximum recent projects" msgstr "" @@ -7298,9 +7292,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Purge minimale sur la tour de nettoyage" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "Temps de chargement du filament" @@ -9294,6 +9285,12 @@ msgstr "" "Saviez-vous que vous pouvez définir un plus grand nombre de mur et une " "densité de remplissage plus élevée pour améliorer la résistance du modèle ?" +#~ msgid "\\u2103" +#~ msgstr "\\u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\u00B3" + #~ msgid "" #~ "Print a tower to prime material in nozzle after switching to a new " #~ "material." diff --git a/bbl/i18n/hu/BambuStudio_hu.po b/bbl/i18n/hu/BambuStudio_hu.po index c9cf8c4148..ee3f7e32b0 100644 --- a/bbl/i18n/hu/BambuStudio_hu.po +++ b/bbl/i18n/hu/BambuStudio_hu.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 14:18+0800\n" +"POT-Creation-Date: 2023-04-11 17:50+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1943,14 +1943,14 @@ msgstr "Asztalhőmérséklet" msgid "Max volumetric speed" msgstr "Max. volumetrikus sebesség" -msgid "\\u2103" -msgstr "\\u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "Asztalhőmérséklet" -msgid "mm\\u00B3" -msgstr "mm\\u00B3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "Start" @@ -4635,12 +4635,6 @@ msgstr "" "Ha engedélyezve van, a BambuStudio-t állítja be alapértelmezett " "alkalmazásként a .step fájlok megnyitásához" -msgid "Online Models" -msgstr "" - -msgid "Show online staff-picked models on the home page" -msgstr "" - msgid "Maximum recent projects" msgstr "" @@ -7220,9 +7214,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimális tisztítás a törlőtoronyban" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "Filament betöltési idő" @@ -9180,6 +9171,12 @@ msgstr "" "Tudtad, hogy több fal vagy nagyobb kitöltés használatával javíthatod a " "modell szilárdságát?" +#~ msgid "\\u2103" +#~ msgstr "\\u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\u00B3" + #~ msgid "" #~ "Print a tower to prime material in nozzle after switching to a new " #~ "material." diff --git a/bbl/i18n/it/BambuStudio_it.po b/bbl/i18n/it/BambuStudio_it.po index 60eb8740c6..f9aafabd61 100644 --- a/bbl/i18n/it/BambuStudio_it.po +++ b/bbl/i18n/it/BambuStudio_it.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 14:18+0800\n" +"POT-Creation-Date: 2023-04-11 17:50+0800\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1939,14 +1939,14 @@ msgstr "Temperatura piano" msgid "Max volumetric speed" msgstr "Massima velocità volumetrica" -msgid "\\u2103" -msgstr "\\u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "Temperatura piano" -msgid "mm\\u00B3" -msgstr "mm\\u00B3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "Calibra" @@ -4646,12 +4646,6 @@ msgstr "" "Se abilitata, imposta Bambu Studio come applicazione predefinita per aprire " "i file .step." -msgid "Online Models" -msgstr "" - -msgid "Show online staff-picked models on the home page" -msgstr "" - msgid "Maximum recent projects" msgstr "" @@ -7253,9 +7247,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Spurgo minimo sulla torre di pulitura" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "Durata caricamento filamento" @@ -9229,6 +9220,12 @@ msgstr "" "Sapevate che è possibile utilizzare un maggior numero di anelli a parete e " "una maggiore densità riempimento per migliorare la resistenza del modello?" +#~ msgid "\\u2103" +#~ msgstr "\\u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\u00B3" + #~ msgid "" #~ "Print a tower to prime material in nozzle after switching to a new " #~ "material." diff --git a/bbl/i18n/ja/BambuStudio_ja.po b/bbl/i18n/ja/BambuStudio_ja.po index 1a308a4b5b..7e3e550ad7 100644 --- a/bbl/i18n/ja/BambuStudio_ja.po +++ b/bbl/i18n/ja/BambuStudio_ja.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 14:18+0800\n" +"POT-Creation-Date: 2023-04-11 17:50+0800\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1890,14 +1890,14 @@ msgstr "ベッド温度" msgid "Max volumetric speed" msgstr "最大体積速度" -msgid "\\u2103" -msgstr "u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "ベッド温度" -msgid "mm\\u00B3" -msgstr "mmu00B3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "開始" @@ -4491,12 +4491,6 @@ msgstr ".step/.stpファイルをBambu Studioに関連付けます。" msgid "If enabled, sets BambuStudio as default application to open .step files" msgstr "デフォルトで.step/.stpファイルをBambu Studioで開く" -msgid "Online Models" -msgstr "" - -msgid "Show online staff-picked models on the home page" -msgstr "" - msgid "Maximum recent projects" msgstr "" @@ -6916,9 +6910,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "プライムタワー上最小フラッシュ量" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "フィラメントロード時間" @@ -8727,6 +8718,12 @@ msgstr "" "強度の向上\n" "壁面層数やインフィルの充填密度を増やして造形強度を向上できます。" +#~ msgid "\\u2103" +#~ msgstr "u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mmu00B3" + #~ msgid "" #~ "Print a tower to prime material in nozzle after switching to a new " #~ "material." diff --git a/bbl/i18n/nl/BambuStudio_nl.po b/bbl/i18n/nl/BambuStudio_nl.po index 4c2a332159..9db03e873f 100644 --- a/bbl/i18n/nl/BambuStudio_nl.po +++ b/bbl/i18n/nl/BambuStudio_nl.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 14:18+0800\n" +"POT-Creation-Date: 2023-04-11 17:50+0800\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1949,14 +1949,14 @@ msgstr "Bed Temperatuur" msgid "Max volumetric speed" msgstr "Maximale volumetrische snelheid" -msgid "\\u2103" -msgstr "\\ u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "Printbed temperatuur" -msgid "mm\\u00B3" -msgstr "mm\\u00B3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "Start" @@ -4673,12 +4673,6 @@ msgstr "" "Indien ingeschakeld, wordt Bambu Studio ingesteld als de standaardtoepassing " "om .step-bestanden te openen" -msgid "Online Models" -msgstr "" - -msgid "Show online staff-picked models on the home page" -msgstr "" - msgid "Maximum recent projects" msgstr "" @@ -7290,9 +7284,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimale filament reiniging op de wipe tower" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "Filament laadt tijd" @@ -9274,6 +9265,12 @@ msgstr "" "Wist je dat je meer wandlussen en een hogere dunne invuldichtheid kunt " "gebruiken om de sterkte van het model te verbeteren?" +#~ msgid "\\u2103" +#~ msgstr "\\ u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\u00B3" + #~ msgid "" #~ "Print a tower to prime material in nozzle after switching to a new " #~ "material." diff --git a/bbl/i18n/sv/BambuStudio_sv.po b/bbl/i18n/sv/BambuStudio_sv.po index f04295ffb5..b3a9aeef62 100644 --- a/bbl/i18n/sv/BambuStudio_sv.po +++ b/bbl/i18n/sv/BambuStudio_sv.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 14:18+0800\n" +"POT-Creation-Date: 2023-04-11 17:50+0800\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1923,14 +1923,14 @@ msgstr "Byggplattans temperatur" msgid "Max volumetric speed" msgstr "Max volymetrisk hastighet" -msgid "\\u2103" -msgstr "\\u2103" +msgid "℃" +msgstr "" msgid "Bed temperature" msgstr "Byggplattans temperatur" -msgid "mm\\u00B3" -msgstr "mm\\u00B3" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "Starta" @@ -4600,12 +4600,6 @@ msgstr "Associera .step/.stp-filer till BambuStudio" msgid "If enabled, sets BambuStudio as default application to open .step files" msgstr "Om aktiverad, väljs Bambu Studio som standard att öppna .step filer" -msgid "Online Models" -msgstr "" - -msgid "Show online staff-picked models on the home page" -msgstr "" - msgid "Maximum recent projects" msgstr "" @@ -7138,9 +7132,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "Minimal purge på wipe torn" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "Inmatningstid för filament" @@ -8182,8 +8173,8 @@ msgid "" "interface is Concentric" msgstr "" "Linje mönster för support gränssnittsytan .Standardmönstret för olösligt " -"(material) support gränssnittet är Räta medan standardmönstret för lösligt" -"(material) stödgränssnittet är koncentriskt" +"(material) support gränssnittet är Räta medan standardmönstret för " +"lösligt(material) stödgränssnittet är koncentriskt" msgid "Rectilinear Interlaced" msgstr "" @@ -9075,6 +9066,12 @@ msgstr "" "Visste du att du kan använda fler väggslingor och högre gles fyllningstäthet " "för att förbättra modellens styrka?" +#~ msgid "\\u2103" +#~ msgstr "\\u2103" + +#~ msgid "mm\\u00B3" +#~ msgstr "mm\\u00B3" + #~ msgid "" #~ "Print a tower to prime material in nozzle after switching to a new " #~ "material." diff --git a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po index 59ec3e8fdb..70af9fbfe1 100644 --- a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po +++ b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 14:18+0800\n" +"POT-Creation-Date: 2023-04-11 17:50+0800\n" "PO-Revision-Date: 2023-04-10 17:13+0800\n" "Last-Translator: Jiang Yue \n" "Language-Team: \n" @@ -1881,14 +1881,14 @@ msgstr "热床温度" msgid "Max volumetric speed" msgstr "最大体积速度" -msgid "\\u2103" +msgid "℃" msgstr "" msgid "Bed temperature" msgstr "床温" -msgid "mm\\u00B3" -msgstr "" +msgid "mm³" +msgstr "mm³" msgid "Start calibration" msgstr "开始" @@ -3557,7 +3557,7 @@ msgid "0" msgstr "" msgid "Layer: N/A" -msgstr "" +msgstr "层: N/A" msgid "Clear" msgstr "清除" @@ -3632,11 +3632,11 @@ msgstr "前面还有%s个任务在云端切片队列中" #, c-format, boost-format msgid "Layer: %s" -msgstr "" +msgstr "层: %s" #, c-format, boost-format msgid "Layer: %d/%d" -msgstr "" +msgstr "层: %d/%d" msgid "Please heat the nozzle to above 170 degree before loading filament." msgstr "请在进料前把喷嘴升温到170℃" @@ -4471,12 +4471,6 @@ msgstr "使用Bambu Studio打开.step/.stp文件" msgid "If enabled, sets BambuStudio as default application to open .step files" msgstr "开启后,将缺省使用Bambu Studio打开.step文件" -msgid "Online Models" -msgstr "在线模型" - -msgid "Show online staff-picked models on the home page" -msgstr "在主页上显示工作人员挑选的在线模型" - msgid "Maximum recent projects" msgstr "近期项目的最大数量" @@ -6844,9 +6838,6 @@ msgstr "mm³/s" msgid "Minimal purge on wipe tower" msgstr "擦拭塔上的最小清理量" -msgid "mm³" -msgstr "mm³" - msgid "Filament load time" msgstr "加载耗材丝的时间" @@ -8631,6 +8622,12 @@ msgstr "" "提高强度\n" "你知道吗?你可以使用更多的墙层数和更高的疏散填充密度来提高模型的强度。" +#~ msgid "Online Models" +#~ msgstr "在线模型" + +#~ msgid "Show online staff-picked models on the home page" +#~ msgstr "在主页上显示工作人员挑选的在线模型" + #~ msgid "Failed uploading print file. Please enter ip address again." #~ msgstr "上传打印文件失败,请重新输入IP地址。" diff --git a/resources/i18n/de/BambuStudio.mo b/resources/i18n/de/BambuStudio.mo index b4c347a11227eb78423534e555bc37fbc4d868f2..fbffd5bdd51636c4172e4ea10e113518010dd017 100644 GIT binary patch delta 36483 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 Bx9b1^ delta 36582 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 diff --git a/resources/i18n/en/BambuStudio.mo b/resources/i18n/en/BambuStudio.mo index b1e70f3078ba9289dac0c7c9fcb82ade4f129906..0404d22b94ecbb35a1a6b5206709e64d484b42e0 100644 GIT binary patch delta 36510 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 AuK)l5 delta 36621 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 diff --git a/resources/i18n/es/BambuStudio.mo b/resources/i18n/es/BambuStudio.mo index a7c3f64627b6098d26846083ff203e3903f423b0..35dd85eb111006f1d591a8bb4995862e6f8f79c2 100644 GIT binary patch delta 36505 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 delta 36611 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 DI!K%1 delta 36608 zcmXxt1$-4pyT|d}9NgU{!9vgk_W;2?I23m)?zXu5!KFA9YjLNzmjcD1P@DpV;?}-! zfB!Rc-}~w3J2Pi@cIKI9W=|mP{dy+Rle3AuJIP|qarocbIF6G6>sNG~iSZq0$|SWq z&gR{Y6BoB&I^2h4@hVov)O#GKD7M5%oQK@*T*JQj09|an*Kx{WQ;fpJnA34Q=PreO zG{oKKI6f?f@vsy|U}da^gRnRr!~FOa(_+5;j*|eZV0vtT8gMU6g+r{fkU2W*FbQtO z^gQ1=N+C84e_|qhf*QaFR7dUs$BBvYtw~W2Ol|AgthrD#568h+3N`ax);$=5`aV>D zhcE%pcTP~ygD#;)d>aShJ4}Jye=#?XMs+v=!*LQ$#(h{1D<5>6Xk3Jm_yQI3yob!v z^+44pp(6b&dMPPfpr9E&Mh)aGCdB_?QjCAtaWZ2@)S8yYWVjU-x#O4z&!Iy61=XML z2vNc$SRZqu)_xc^!ox?1ze1Mws9BTjr~wo~byOC$BvsLejZp(?hRLxz>bg;=C7X4{vOb3Zk7pBE7m;?3TnW&{%ZQW}< zkBZDg)O8HaCu{jnz zVeXrWx^59__Z&e@;GNYyY3hkkk@V72P!8lpbsUAoupTPOreFy?fQ9fAF2lU19EYOw z8*2N`J#CWkIBMW&&uDYg7b>ZDV@y1cvGEGB^qzB@f_0T zUPeXiAy&apm<7xIYCdm=nt5NWjcZU5{eZg9IcKg*fi*S6Y!njE-W%hgXPt!csn5YU zxEyuedRyOx%9%r01}|bsO!AxA4K+~r4Z=h?3KQZ?)I^r5t`Pl9AuArhFuZ5$@z0x3 z=0^>z7RJIRsED<~7}y6j!-1FvN1+D32sPlfsI}g1+fSgD_ILEQQt(|cGueqcLQkUB z@BxNn&_&0og9T9?k3l_f26o4Vs5OrJyLpEM<3#GEQAvFg)8Sdv5Rlv;b+j=|H{ryn) zjY36Y7V3!K0;hB*JZ*~)C-{ct7_|wQRhGpq<_!pM?s+*it2bO?!pDA?2f)i85^RK?iFgF zUr-^9dEX2)C92~LsD84buFGfZ#ZmoLL`9++#?}6>XB(Oa8XTtsYCt_vBOi&naR%yv zb5IXhjaut1s0bWGouq%DLi@&=@PUa)PSky+Q2kfIlsw;QLSX~;K!q^9W>9+?w18LpsO61^-G?oiNLxsM$u1k<1% zSOPV}a;Pk>kIMGesHNzEO3FbPhL15ClRPoov<;S^z5;dsZH$G_Fb2MULi`od4>ZVF zf0==#!Wq=_;voD56}n0rhovy}KW0hm zqax8C6`7%!2)%jsgEcswhK(2>3%xQADvO$7Kh%K6q23XDP#s=Db#x08;4|w-+aBY! ziA-{9I!w%UA;?mAP6P#wyaKA@)|efKVO(5^@o*C=X?9~(Jb-#f#C~Jy*- zF)8)Km<%tW2J{$ppZngJ0Cit#OsD;ySp_VC8hHcMO#7fBG7#1AY|M#kFbAH;lK24? zsRAF&eWg%KQx26|mGK77##Gq-qgk@C=xL<0DWt%)_JjSX3(sN_ypI~tTU5uNP}%+! zmto9LHbPjA`gZi;2W*L7P`T0cvzcf|RDINE;;-#8orX}Hk2;VJp=R{J`T`ZgkErAf z`eJ5~2s=~HhzjX=RL9d%OSTv_k@c7c52JR)O)QG3|0VvZDb)Vggt8-QW-Cz-TyNch zfq|j2_W>$r-eNjT{hwL$0+^h7MbuI@!8|wsHNaI^1~+0ZeC|=u5~TW{8F`qs2&SYx z3bh1HP?73lKktL;aD;UNYCtnkOSv8O+CGgV@h?_9*3ZIg%{_Wd2nsi%$uPe z)D|_cZdhLz;#s_mT7qT#D5?Q$L`85r4#r<`4pw&Ez>n>>QP<@RasxjngkyHOHb?a{ z5VZ}5qn7j#2IEQ80RBSd!dvuopu~u0B9Ip~fYPWAYhWqth;4BdDrw@xcO6#Csg0GX z*G=FCe$-ls-&22vdQjtpZs0B17Q?8|M{Um|r~#Z$=z4+B+@(PwdV`rUMj|(`J+h$& zR2wz37O13bXX^t{**?rV3l*`om;(=>BJj|D{v6f6li0KeC-&UHehj5Sk?4TAak{-= zA8G(cZ2cl?cU(th^*z)YKehF@Scdw)sPm#k64$AK%~9vZ3e)nPkKi+wQzPD7n|8&LNjLFLE=%!D6MOPey8d9D{uK{r%I z-OvhkL3dQvPsCtcf(rF7sARl^dhm19fMO;$OPC5Zk({W=6hsZQv~90x+Z!X1^qe*n zw5DBAp&pL9VJfPFCAPlSx(oHdlNeYE>pfHio}rc?b_z4lN?3q;3oMT_F&HmnX6^s? z6gtq5GNl{%>NFHJ)2$eaC$Sy=gBoc4RIXDCJ7Og6#D4ez^JBNvW+00(J@q}P30*-g z^&`~8zGC3#|2S#PzD|YuAPZ_q@}ROl%6?uIb;dWa?SoJe@KEYP}DgK-`9 zz-(zv@- zGnj3dAH%3u#QxX=hvH*Ygxh9h|7$-E%xGpXAN8OWs1q=CCfCV}8891GLxr-3)k9r3 z9k1YQROGs3Ht&*=sL0$$CF|d)>th9*NW>5JOvp0OpnVyN+6DPgyPyErEBALLmzGQ8P&$ zYPMl^RJ{;tAmvftWIm!Em@TI6R~%>SZ%`e5vnI@AmLxrDpxLZp)_kbv6htj$ z6nY9(PYUX2B0k1>s0Rk1Hkp6_Za5v`02dDui&SyT)fQnoW48jtqH7|`C zSW}#hE%UMeH&J*;LnU01-+ZBXimFG1o3nc$YTInUYWNM~({r^5GmwS_U1uxpBT)}7 zRLDf43Th(Js2ppI+P(u(5uRR%{jY8C0}YD6Hq=ZH<5;|iTI)uI&2^nnOEe61F3iAS z+=zP6Ih=@>QP;I7VzRy$s-MxQ0nSE6;zy5yl428T0DCYaoi`u7KZT%Q(i#L#1vrQL8dQI!N}9+~p+bJq)*qoB{KmFtEMu;ZKqY4>RE|a2_Gt7p!e$gS zqSmMfbw!PI80y9u_VanD885f>b*THd+4^qO0FR&|cMe1GHWtH}ktRvY;2P=;Bia8t zI{!z5ZVWDKk|(#dGU|Y8i#lqDVm4f6+mEA?@D3`(?@%-RA1YbnmouMdK}E6{YCsij z{rht4f6aI>4Fz!u7RE#Nf)A*UeC5q`>99EUJg7)?uy#kyxIb!1#-Rqb5Vb8gqXuva zm6TUdN&L*Cpc(#)x-mtRi9}9RXbYm2rWh*w%cGVi8uh?-sQdb&1~dT`$r-4Z(IV7? zms@|reAM@$UQXUK3VOgx)Qz7|XST0`=`a@Rfr(I|4M7bgKWZjrQ1{nE6wj`)*-gDuo)4w_9#9^rG*H}+m|F$NsLRx;|f&x{{T=P~nmaU zd=po91Ai};8x_-us0jRk`urEvKDvpD#5ep8v(zxxXZC8E*H9tU>eodLpgk%Jx}gR# z*gDI)-hO@r6`2dD89hg3!E02y{)g%>NiDN+Q=`881*0bHm7t(BtAOgD9%?@{vF$BT zXXW?SL8#ZtSX92RMP0w$e!d6iP(N-z|E{*ljZW4%)+0vG`G1OZ5?p>T79&XcMXm7|sWc zQ9FDhM&eA=Qe4Dp_$O+YU>b>Sf_h?lTD#%^o|QVliGuBZVHK!tcLDkAexOK{Qp z3WKO8Zej+MtO@(SCk<(7(2bL@6fU;)8>pmtZv79tP*2#@%zPkfn=L~PWIHOfhfurY zl=TV*Q@@Xzpzk|#U2>0t)+RlwqwJ`G6vsSR9oyhQ)Qz`LOZ6P}_4N(b#w5+m*Una` z_BogXw_z>3iNP4w+$3K$)BwHO6m&8*L(RamA52CKWWII1b-(@mH`MjFP)qd0e*OhD zkpwNwfP+!zOE?z6NYwW0kDQdAGns;J*nkS%K~#31#B6v0HRJcFrT7mOv4kzn3{s;$ z&xSg{a@+O@YZ=r4tD~-KflA)?m_+-(Ck4%PWT1hA1#?ngg^bWShZ@)m)WF`OX7m-6 zbO~FTZI>R^UJ(`1`lyKwu=UBP0se%#Z#$;f{y#!N9p6EP<_YS6_zyK>x3wGiC5&XK zT$qVTT)u?iaq2PKnoyrb^>YjLpog~o8LHnes0Sx*XFkt}o{}Id1^w6u_@NY zMW_eA#G;tKgL%!?Lk(~X>YzD~8hG-KW;=#sVd{-BJ5EE*d^>7Fr&0ZV!a^9{$umC# zweRExeo@Yky5Tu$08VG~`pt`)K}A$D^+3&V6lz;eMnz~5DgvufOSc6TsUxUJpFu_H z8dk*T9tF)HqKg?(Ez|)s+WHdJVUw=rLGAG}Yu^vmakcMVryrgL=N}egGnJ&bfxC-^4bExdU zfm(vUumEQ2ZQ7$z6K#dsZNrf3JZCxuy&jLFw%a|_8o7PUfl(awz@DfF3`T`^A}aI? zQIS}Wxp6C2#yhB`%+c3eUlO%sHBb|2fJwFg+fvw1LqF623iLA_)3`c!GsDet;mZ$-)L|wN5^#$fICe!}^gF-NC`VStYo@Ahz*#*>q z?qUc!gG@(RP&3bk+D0X8dn9UmRkrQ5Py?!midjv)<=D(Y(JF!uNyrY zlpNzwGn|eJ*-~5o3G-9`#rhKSQqMHZSOc}@gHZ#VY3n;M2lZc319*$t|1pM}rAgya zQ0T)^4=iG>h#E+JYdcid_C=kTqfjrIsi=r;MqR%f^`KLziQTZD-$fU)HXedItRX?mLlf}GsBXo0n|q2LPOL9+n^%d z3rTLz8B9SlScn?H3Jk(+co}!1vUu`HlRPU?1NjlP#@kT2atalJE4KZSt$#t?A8(X7 zfU=+>8Hw?=|7%iE2Tf21NC#A?W}(({6DkrHF%++%uK$MGmI+3ieVq?AfeNUBH9$qG z3o7e3q8_}(dJtpseCHem-FOKVvWKV#Jhy(b?J>ugnI}Mfo*H$aWJ4`s3Dg5>pd!>1 zwIuCP5g3TtMKf%DBL;r{KSn`Wc^UP!`7djhv8KJ5wI^yOV^C{45w(_cPy_e@HK5I? z-Eac+;M*96?@>#Xd7K$Y{&DPoB~Nu4^m6EHKbVPHf=#H9pF(BrE7SwyjW;=y+?pOW zfvo7mqNtOzBmRWN^*FQ4^&L?Y>x+SR1L}O4iQ1kAFp2j6 zDGGtJ8f#O(iyC>j-$bAUDl(C%0X4xY*aiFGHdGFU&Ng4U%A+3K4|TE*L9P90ERD-i z5&086B~_|9=IeDf)czf1osXLNPpA&}+4^COrv4jhK*4ieXDLQt9=wR(;a4n(P3M^; zoQ7qnuR!gld-K@;11Pxj&9)kZ3ehxF$9qvTJBzvSF&4(83tVS0R>r`IiJIwiTYqc) zg31|pq3f*2gs6$^Mn&|Oh3xR z#ESUNeqLgU$&IS0UC{)!joY9i+7~sEksbxjY!_;u-bd}r52zdB{$L)Q9yQZEs9jMI zt70+ijiXRW^&a&AXQ{a^A!<7(LoIa#YCw@zuL=dtAQ~CG(+KZTf49u6(beT9G9R!4 z?b%kCA2>RrB6bKB`j@EP@B#IpSS!uIQ=lf29hHPdu_iV!pL@}c`TtNeOSabRl3-K>ir9KP)H`4>Y8&suNf`S_bNwvT0DnXc>?mf^ z{=Z2f5VU)W@S9{0mMBuRSb^+pr-%#|Bt_qxl1i z`KWE0dXwuc!|k{n8~kLxIeq+z{ja1*`?L9dwxT$b`fAimrs!r9%5gZA`c<5O?Y5Yi zzd&ufL|e_tRv&f$EG&oFwwc#+2ULW1VN<+^+TNwMd*(;3&fCq}h3#+yzX#s|m4tV( zJBICaoq;$XtGOINyG%AW+iiZ)W-w~$K4Lb^yT>GDT~zXoLPcyj>hmjD2)}p~icrYE z*Zhe^2RuW43hu{7`^;a+r`XS*knrG6SP0i0aGiO4e&-kS=LP)_nttx#5Zcomas$6j zIvW+Cr`QDZA2z#ZBC6fHMWF_TkR#>~m%3vy>K9Q<5bvnjE=^F^jX<5@=Wrb+IOaMF zaVP5Aa`bVNoc&PAHXpT{)}s!r-!TVfI1!kb=R{FZQq4n!=q8rML?_LX)JEmV6zqfR zu>fW|WpW@IqpA1C;&==d(XXhtUE$Lv`TF2e>M72cA6T~IZtefu6w30!+_PpET*J83 zAE9RY54OX6znUcS<8JB)uo3n@XRiAVb$%rL&HRp37@ns74G-bz^R9CjCtWZR=z5WM z?f+R6wEyeND^qwz}*Fel5NB71KT$m89QYHRr@-j6waO ztv|&m>Yq_-U-}yRUo#y|K_Q%qy5UcZi4QRdpP|l!7pRxVC)C@}y>1?y43*XQQ72{W z8)nTjpxP^-+B>7R-Eh=%Hr!zUYXF;Rkb6-bA49!VuAsip-$sS@p8foPsDUK9X->S< zs0ZZ0lvongPc$aSHn!d$brO!Z?f#qW{{%Fwr9s)c9d*Q>KtqKp z6zi55NHSCsr^k}m0yUw9sQXu;Uf(-VFQ@&e=U(+FsG|p{8~(BN&!`Jy{$bAQ%+^wv zn)W8B`+A`wF${J8IMf7YphCP1HIdb*m(K=UKY_Z>`;~%jykh+mb>mY^gD)`{W8XF% zMrv2^b!)$#jDtTw4p4aY9;C|2PPC+9ZjvCPd>k3py8!!=W zMLqB^Dl!*QFQw<08^5CN&-JIdt{`gdqfi5Dgv$E%w!Q&dYya<|pbOLAHA$2o>rtBppq@dJu|Shs0ZXkMXm^HX-cAIS{XILXw<>f4K#pa$>*s-HcmbLBjGx*@{@ zGs7s<5!wLtfa$h7SDBg$KjyF&Pc#lfTuc)O;_0a5+?5GKZV=z|6EZ7M(z{wBU z|9a3&8r0DO+=?quCt!m|j1b4;5sdxV{H%8dFHleVm-$x^?qfLh!%xjy?hWbzHJ+J> z)x|V~wj=6!Bc7YcOnB~@wVO(V_TwT{h<-$^`7fybd;t}y1b>_Mf~eh55p{hFRH*x6 zejH@$>re;SPpETaE4Ic1SOGJ8FU${(?QjqcM{yLEerb-*L#TJdBW#D+|1lj+LVeks zgW3hZ<0V~(O5Q!M%zzTUHo27yHNgz1T@{9kkQZ(nilAm(+FBbmv(~8XHUM>!%|xyJ z3e2(oe*Q%5lGpb0SZ_>HCqm^=0VHQUrw#?(*a?HNyRA=0buk_^-_h&#YO+M7j3!=7r2~4c)szo7)h8Cy?wYK&}-8de#)>CZz zYSaUEqXu#k6_M+x0l&js80(#RV1%_8Di2;!fL1o)u0zSKcWUa>%AG^a;!{!8wUQhw0|k+f3Om87>(4|eaD1&c|x_0i&_pzh>rs zTtp5zw!)RDHI4DrEJ+R2Hk*J7 z^%~SWU>j;ezoC}WyF)>t5Bg>fip;3cgrRPTM1`y=Dx_^u1L%k9XdEi^bFGU}xv>Iu z-xk}x7xh*=gk$hmWa1uS2?|7@9xD4ApgL@ddQdCWjlEFYa2Wo8b5Spy!mhcmCMuG3 zu{hSpH8>6X=(?bwz>=&(MJ~2avj3wgC=`pZHXcMDCXNvl*w@KXGtG}0P$X*2>!2di z0>iK;j>d(kfn|yr6o^0(tWG@=6`9G_g&6qz|8*1w@WFBHfTd#vIV*4#>Oqxb2L-ad z0c!hnLVaK8gBrjvRCZ6t%s3B&aTjWrTt^+n&rt(&;+Xr=VBqKfTog3JvZ#}+4(h^g zsN5KX+IGuP9qvGNcnSmC50_GZi~4ETAJ;^5D=LSsVlck8?aAT=IU&@G#N+%^=o-_Y z8H}<{vd%(1a3Lx;Hlb#`6?McO!$SBE=EH3KuDTvr4~JlP?2pe-_q9$C6!_V(4=M-N zB=F1wUeTZj`4Spap*jjf&8Pw@`PyO?9EyeUIF`kKt)&w2AhK{6KB0YjVl%J-NrD3Z z!rmHGa;8XXlCzdaK_}aL)S4zpW|AfqDp@k4LY)tbV3c(*&ZoWw6}f83O+R%}1MQ4$ za1<8AN2q?%rU(lBP@4~1Q1`y4prra0wZ_*_7e2>!=%fq^93bsc+psrkV8g9b?dOYa zeI05dyHQ8+5v+iJU=)U=G7)HxT<1AUDJb;oP$$-Y)Ie@pUt$>bpwvNuA0G3d>P;{k zjz$gaN7PGZJL>*@sGK>E+P0TbN%sgf!PsdODfWK`3VLv1RMyu+o!MRSBJQ;96Ve6+ z{v>0W^%OSc^HV;=0DJ}B_ra1rjKeinT^-x;65tnFmfK#rik z+ug-*%$U*4tQKl}Ho#!)g$nU3EP)%b0Y1U)SUOXX(-PmHlDKZ>puq2d^g`u?6U_c! zjfE(z#G9xCXLyKt&=gdtezYDy4e)nV(!E0M|4*n8C(2?%pBc3z1yS2B5_OJ5qwepH ziu9B$?0joQvL1KS9+f*N@ZVJWFE{)DcN&i6F(aOr*R0h_RI*$^y*}Td zlJpxYBFXZZ2!vv8>iJPK{0_A{2BNn0cnroLFgqT!^+%|Q#`5x;kcFYvs5B~zo1vDX zEh>b)P$3?TO3K-&CFl?yO9ziy77>0KZAOo|BjjQ7Ag||q6VC#fT^cOt$iNU8W%$yNOe#rYG>5_V@$i}tfHXM z9zflA!PfskJ>VZahcOD84t_^<_yQHuScS~Y@?bFaLZ}BcKrKN(3?v&WBCAllW@kW; z2U5@go?!(34}Zb@g@Xb=dc8!gRlXuYfu8}RQK1}&dcX+OKkCE8C zsCm6F!B*5`6bo|d@qDK}1+B>*R4C7&z5!iCon+Un&r#dw8y>}s#e>H&F6 zo0(TYWq%V4$NpFj*V^`{sENfYV{$7YD!0;Lv2bn!l`h4fn;$v>&kbnB{^3zmQZ5o6x=-^^W)#wM~P|2L=ARz6RE%zNEZo-bSxz z&0=p5>VypOv69}IE%5zN-p zS2HuuZY_pN>gpJ*_kT+Y%H9#y8P;W}HQS6i@ekC#j#=GADmyBR^PmRQ2sPursBOFs z%i}Fn|Cwr-2<1Z^aD}jq-v5ylvNPfpsO@#Crn%uU>UH}8HPd9Z%;%w~fmB3otM;fb z8XjsX$6!L7f>&@M>i(X!O{B-7mii&i*ZzM_K_eVf$IN)P^$==}|HhK|9+k}z(dMLV zhzflh)WCb7LOT_;J(uGo+>IJoR9*9&>Zt3!Lr*j5K|yOf9V_8aSRLP^J}+0#Y_ry= zHC~5$%WbnBL52Pz>ZpxX-{edt)cp-mk?LoiZrj(@Xa8%BPSc>7CTL&|n3R~GdP`J? z(@_yxi`o^tFc{CFX8IB}u$T?a8J`%nBq6ANbD;XmkII#nSOAAMWd9$e@G}is>mH4Q zoI^Mn+hC2xro*369UVqJ=!|W@jLoS(#+2kxg(l|urcF)AyI~GK?~AK&5$?jW-pAFpT;_jK*U)5K}cb-`%F8-eQ?rn4}8FbUe5sDiW<)nwQN0yhD8# zHp98C%)8+&mf-qStu!6~o*A`WN~3b20xFxEVRmeX z3h^Y=_kt~07|);{>~t{aL$CEAn|+jKpzR0Z-V^`q^yV zi^`p2SP%cfVDzH;ne1Zq?a$b5mBiV@oX`zR;^FHjHuhMGZ+!KTB~s4Q=cYVV0!g7Fv& zx1hG|Zp@7*Febi1CEq8jJH$jR9xC)HagW~rArzL;a0?aMp+n7@%|V@58&K_MaVfbZoz2k|4cAHDwUgPZu}9oO@BrutR&#TtFSQ*HJm} z+`Vt#J$FAZ`Y z(0(4ZG~1S$NSsDbYjKH!4w^quYZ`yK30(nH$Sb36?1Gxf2;7GAP)kvLg-Nb<82B8s z>vPm@I)FNIpW^}ihfmUOIuC}RI@pAfco4M&0Df);bRsrlA~a1_Mwh z)C|-B7Fsu9G3tjY>wT4SkOR*QVd#w!4Cr@FOZ>Wwslu zqL!#WYPWPnEzN}O?0+TCS{f9RUr{r=j|z3%9cBR8Q0)~^M{HNrk_|%T#7IeCGQM3V^f^%d6~G}_9CiN=kAh}&05yZNI24~@PVBfl$a#S?P@fOqV`i|# zy4iZvdKESEr&ixyQ_pBEit0BSBhVX6K?l%A)Jb?9^I*b#<~%5YTHBu1S=Q~=t5}om z`3aS5l@1u&Sch8|qLzB6^_G$R|HXWe9V>A`HPjl-w63!5vYx@de101h!ny~|HfxI7 z|E*BluO}*p2BWT4sq5A%Rm%@A+;v6y|UXG#E523R4FU*cH51a4txv?BG z?tsCx|9HgwKyn(DLvK+7h=0`NL`u|>gju7k&GotV{{RZwzmriT-HXcBBdC#HM0NNN z>ZS7;wIs2QndHogx;_G9U|DNLRQ6Z1pSMOOdr#E!Mxmz>Z=s+EoVFKS!kg3|p|bkW zar0KZY)yWGuj{newa!3A=r>eyy+iev@uX=FMGd$nY8UlDEyduI?0=1LDGj<|Cu$~# zP%}M`IzsZ z<|T552Ho%{Dv4gALiH83kCU7+Yh4ia(y5PHs?Ml^^}_zx4|V_FsH6Hn)Ijr`HC9E1 zz5{C8&+#Z|WGk^IZb!`^=vUKT3N?_Ls587JYUEu}5u1#P&>YkOvk3LT6{zbEqIT0+ zR6lpH0KP&+*vop({QMt|-_y_oYA{28_8F|L?wPk~y35?BTsVQ-v^O5V6vO(e5oR-W(Vq0kHKppM`p7=|A)FNRz* ze~?%kqo{8{4e%e-06(CTD&}<)!9u8ARS6Z5=BNh`M7^wLp^|R{2LAoOJ@$i>sFB}A zo#p>S-I(@L)9;$mf$fe5=s6rf5egpHPE)G&~`-)U>s^@%TOI}M=jAg%z>Bj8vcvZ@X~Gm z2!`F&#=FB>P`L9<>zXF%&mrExe8u zF!a8;uNx{7Lr_cPO}2$OsF^NBW%oW*cK?Q&$qiI;-bFXG-@Ui*40!C8rhLv$6mcVyd67xSX z-wV282=%+D>x2F>_426e+M#yGG7S9tzq=^tZFCeh#ncW=Kz7RRHoh_)OyMsmX6Y69Pe{ZaZ+D-kfYf+KCj!M1Ji4z+!LK_%xSR7dVd(?J4MduIHGB~dw4@{>uI!8iKy!r;TT+l zF);U6bA34KLA6lZvyrtO>i%A+cL-7YwhFzG=b!p6CwDBm znAA0fp+Z^?^}u$h0e_Fm@&TwNnu6N4Yf(vg03+}v2HyX{LFR)xsI?r4dU-6w%ygXbBJKjc3;3MY7Br$y^r%<_6+16`eGwMyy(+RedLIsQ$ z%XCy5HS*4=B^is_uT!ndPy^eBTGRcu{s@&LFRlEJwUdWkkqnh9k#Wp`JD?`oJC4r_ zjC33gn(6XjfhCA%*19lii8^8> z?2j72fq0%TaDrW=L2DT|zA-0idsN1O*clax`=|#!Lv2SVfr&(F)EWn)t}Bb$c2%qm zP)pbb70I5cWFGBN(1R9XFdjgy;T_b4A5k-nm(UkD*>a*n*&MUu7}V$MQ5~Mbns^th zV!lLXpaW6YO-BuI6Kbiv9TYUulc?=<+4>Q)QcsuIJg^Lwpxz$!pk=5dbvJ5Bo}iX2 zMG|v;Db!Ki);b?GfODvA`W#sj&v{Ql$rK~0*}*|$O1j&qZ2zA%M{09m)kd|CMMdZ*)DeFIyI{sN?0=o@6DYJmKdSx) zmF53K{c=h2w5Fafory#RjK$|IQ3p{6R8q}E?V<&!2<%2(cLkOGf1pmlXV@LTq+|at zrqDUPk8_&u0U3OOzrpZlG@*Zuy76DEjd3%X0W?AFj=rcPc|7X##rE^RQ6Y|<*<^VV zYZhEXdm+@4+{)~k3*OP74r2xT0xEl-O+8n;XSEbvi&~^$n$+jCc zfa|E2QJ$Q>z`wHD5Eat6VLqoUW&Bl^oAwux)>ZI#52L-sh?E_yT{jQ3X{WV(Xi58uh!V>wDxiOFb1IX#X#xptT#5 z&lmX8ISG|i4^dwdKckWpXZn$|)7;0(r zV=JET6rnH*=b_dnU4%)JFw})5F%-+A9^3`h@etJee=KSOGqFGr{a^^Y=}bYB1AiCt z1^(zIQDI-;Z@;QzAFiK|o{q!>Ma&E655vb>jVpNJaB66}h{ZF@vflY|vf zk!prrustf07w{=QLY=JVi}?aSD?Tp9{#P=TFK$LS5S27LFpDlkh4KxCW3m$FWfO&Z zx%9;RxEdqz3hKU;B~30ALoG>HRQq^Tvad%y=TJ%ZzxMM@`$3vgzQDiJkq^7kJ`r_5 zeL&sdFKxEhCRE42qB{Ny8({o0zQErfv_|dswYUJ!qPAuGNE6vHs0q#XC};-9u`<3# zg{X8{U*J!<>Z6vT5o#B7#K6gi%I5K?fvraE^Mk0P_Z%vho}qTrXVg--<$QtvA4;jP zHg#_bg+>(qK&@G!^1i^IWG=Jzl4&eqWPA53ibZ~fZAqR zEBONdU68HVhI+HgrvHPun|kUh=D@pvOu%ynR`msbZEh~=V0n%TS!6X|;CI7rpq3)C zx;bz*qE5Q2SOlxq;AAA*N1(Rh+M2$=uUh_%I^ky4@;T%11FpegwSCSauFqCSM>qTL zP_#Me?x8}`t*%+S{aBXzUDR5K)U*2?wU)y%FD^lS-9C$2%8z&gL+i6WdC*JL_lqwL zeEP34IsF>?oF$mDvCrA5{lBdV`w+V{HQ(Ky;d<)DzViis!SDgLr(Uy}FYrgS+pq)m zkme@oCg69}@1XiA(ZVG4Ueq@Igr%@uOP|vTmt$3o*NW>eP^eE~A7*cD-e&hO7xkbv z=ETd3#i&=p#^|ADdfnFJwDkr4%%?SK2~J~mOw`UCI89LzT8q>15|+fa?b-jz)}`&u z3Ai7%9V0uKZ$!f|n)-e`j)^+@`2Tyz>lbz1@=iYI7XFFKoqe6nE=ksw0FD;<*@vOEEF7z$CcU*1e;;fRS869jR9bn*${N z5c6d-C#t;-YN_U7ecXBJps4wl52fOXWZ<5&oPtig zpD`FuV0L_hI^hxyGe>N0)Qz=Jk?4wgkcT?ce?ZM}JL-$bG1LHWqrP%IKt<}k)i+!N zX1^q*5T6e+VGGQK%JPY*5Z*_H>^W+N|6zKJOYW%S?5F`1MGc@j>iX|68+Jow|4h`b zI)HjN{Dp!4{zrll=0RyOE+1q;b&v-Yy3!a6%VQ3#ikewZ)WG{&N1+Bd4V43nP!C** zA^4kZe`WoIf&c!eGtz8}B&Y|MLv>IW6|$zN0dzv`h90Pw(BM&KO{ZEnVLaN;q3*wq z8qi(TlDx3S8f_wzc{KZ9YhQte+V~ynh7G76xpt%0_7dtX_Y{?UzA+}`jd3#dZm1>s zgvyB&V|~sDEQoq7Z%6eLZ=5k0HJ~EnSc4Q4YSW;#Y=?o6+6zXZI$nedT?c|xpALu#yoEm0x=5q5xl z-SG!@z@UldDD8~ucr{kT!>FZ5Fv%=cYHKdkt}2a6Lhm~Ynz4u4pOaD9yaAQX2Qe7W zqq6xG>c*6lP0|)e4YWLJzgNYN*cgjpohiP+Z^KSR{Tfe!sl08m*fgK>T>Jm%biQQL z@be7wXE!Hj`U1ZJ5r38m(F6>pqZt^%bz4xoHaQTC3V9?dB27_C zxEhrU7cjl{|6>YDhM+lSyQRmx)PqqotA$#E2B=6iL2h%}V-tLYb1`zR&sm9AaU%|% zXHL%0`M$uPrZ>Z$v~NJ|stgNQYIT&0g4U!DreKCMu`l&C3+;dwnOzZV&5IgX2~;G? zq0WQqsNEEenouXyi8&HA^B+)2ej4?XyM=-Ow{$TVn^0#$b(jOS*5RlQ8raW!V>tD} z7>pZG1OF8@pl6r|U)y@7CFbDCj@p)$QMuItgK_W@`~F{K8+Kz6KDdGU!6V5J<^efT zZ?Q_K2USIVUI%p$bwZt#LoftKSXbEgW2k|hw(TEK$(m*<`(Fo3=u-2ba;W5JiN&!W zYM=gW-G$19gVv*{ft^IXE6$(>atSri>$d$*+y0mJh5h`EM?oR~jM^@~W#;`}3N^xY zcnx=>w&RTDX28p^G4;Ku87E(1*0wMPLX8?g2Xyg!)cMf^3*mfJ|K2$YRVn;o&9TzV zs3+=O&fbbJo7>sndU95GrGM=PvW#^MB{I@t2;R z+8yX`F#9`qxqr*-k8aOx>*jQI-8KG{^G3U4{0rudcjx#+=4W;rZYwuGG{|k>@4T?6 zyVSpYVLi9J|NX+zZj^rz|4+si`VTCs=XUZZT^!}M_cvIa)ote=v^do5h1`C$dZ$;=YP7Skvqj-?uUZzOn<*0p1b4xt(S(TUBsx{Dl_c=qIH7s zKfizZ()4aQ|AD2?-NycP%SOAa{dt%7aclUOFCXAe_orQv*=_AFzQS```1h=cbVvC= zuc+rX+g5YsWY?|jzp-kAJJ>&Vb@h~Gc|a=u$-+PU?U}QMeN@Z;X!VA4m1$9~*QB*S z#9k|D)$t_4iv>&|T$U zx2~)EgFof^%-02 zE6kQ2&OZ$(UnR$;`j>C1?N;!=-g3>Y<3GJMv%A>;bnDuLv$%d5lWNI7^ZZM;^>Ih~ zlWtG#&i99H|JPmM&%WcW+t;6VXUnv$xKjUnro)2&>CoFqd98ou&g5ssu`eD$2aE0Tcp|X`mdBx()8lbH2Px#| z!ZY+@+Pxl6e9VYp7>d=fF&4*_SOD)}I!wIJ<4K4)F#|@R23!YIV^eEyWR9K~Oo}rw z1O0neP>92Y1DF_3payUa)zEzm#241Ls185bdaV8Cetgu-lj2~^h?@Bv>pYA_eF3Vy zrI?WZJwH=WM_W-N-j9Ru3Z}$bznK@?q8jXo1+gsF;)N^f6OV$O| zaevfAMxiD$+1_7(NvQvfdTz%N*ED#93mU*xRD(}Y4g6&v{EVHc$3AL0?uA;KG1mFk zji|^RMGf#eDoJ0UA{BVdw4Vr7Pwi6BgPGBbg-{(A!OU0|Ghs^%!C|Nwti%?$4Vz<% z3*T097uG+G@K2KQ7?>2vaVPH7hyR550_%1lk61S zfZD$OPnjfKg&O#0B)Fcmr%h7N#X#yCF%E7=mfrR3r=XCX!kl;u^I+f^vyH+~FZ_y{ z`8HISBCuw6u1{1l0Rs zTpWQ3ae}SSLFLR+ERCD-2YiEhG4DC^USm`ex4}f%3pD^&b%kgug>1M8bKxOde}M{R zlJjO@`7t*2;;4v~#aLJmHN$93i)~N?AA%b2IMiCtwAX(|E$tR`w@`RUK{J_s!5pEh zQ5_$_g7^SyV~UHW;dZDFdt!GSj5@fUVMg>^;+Ta@sH9$v>2V!u365hZ-n>NowRQoQ z%}jEjW{?||_2n@sw#E?bjb(5i{)9JB*<y98f#35A|!92diB*CuDydPd(t8iO57u zNqz1$;;%Jd&xK^T3sc}})X49kLihkRYs584!vUr9B|j{mISDQxcMn)=2cOVXo`uk11j12p>km;Dl!XD$+Z#n-d;?D zXHiS{81>wLm>QGcvqw0pUJP{(L?P|Fo(2>Yx@M?`yWvh8gv#!)`>Zz>K`p@r)Ie{d zLi!jr(7#a)e?_$u@W4Em7*$V)YA*+B>2hN{?f=5|LMi_RkEar9K($ekXpMTYC#u7K zs0PQN)_OWB0xMA`={{6wFIiuqA` z@~HdOFdeo<4R9DLn3YC}l7q}RA0pP&Zv z5vO6IKg~8-j0$<$XXaeUj+#+9EP(YeZ-VsYGpMerr6<7}@@JsP$4Q&C6nO4R#@uq1v$Eot~)rsIaF z$TY*m=nk+q#^N|GOu_`1@{Q>z7&XHNr~!4r3^)%J+U=-@_F_UjZM|-5 z78R+tsNE6!y_Sge&qyH~7qX)ssDdf5xvlrYMAXNk1~L;_Ezc6v8c+IQW>QD271 zaVsj+$5HRyx4uNZ_euA)|G%q%>Hjt(k3h||9x5WysD}HZ_U~8>!HxI>UPDDH`A73! zM%2<|LFHB`-oUs_!#{W z`p5i$F%!L9zlJUGCMq{dd^QuUjH0jcXhC+caCX|&?GaH5KaDsIf`Ui%} z-Xo}-xs2)Y6DpF)zna|1fl9*Sm=_zN1~?i^<0QTV=C&|P)kr8 z6{%|Wemzu!t*jkU1L}!d%9*H-?KL<8PomnX_8*;NQ`D|-|D>Rf3w$>-FNx}?JZfMy zus*iLGq?@41jG4JR0EiVir`EfjKAV640Rm;kL~+W&&3UJ{68loMQ!ggSeO1i?I|?j z!Y*uuDZGws0bXj_s^i(zh|#|lDLk4KgLPo_>a~~n1=^?pk7>nT9W0q zz8SSUcA>KR5NeH2+4^NHP5lqld67P;iy-Y9NC1K@fvDr|3>xeCQWW$$c1{LEb4(; zsI2dV!8i;R>cyyJ+=}Y>3~E4+QA_v{HIcX}Ok`4^2AT*K6*P#vyD|58{Fp(1b^wFFO50}V;(_`kT6#&XnqVK8pPAnpIF6gqI> zZ;ZfZsmx4gU?}y~*bdL51{$8)@zlb~SO#ZfKfHzoutpj)kfE4?`aINxwxdFR3^lPk z=>PfuPYT-CAMK5Rv}Q>XqOv|4>V7WN86RP4PDeygl8x8 zG|&W9@1Dc)?8BL;9HWzLghqmR76UlB2f{Q8x2w0v?FpLxt=i;lmjbKBRh%; z{TqhtD$9?%05_wg2}}&K~N{)CFOHxH4fe@`+B zIv|2kGcBkaSRU0-UDU`MV;AgT>z7as-L<|#EzK9yKx5@K#BA*Fmd(?|Rp+Y(ZbK_jhgGW#U{L9||ii%w9{CrQq^r$t@gc?{0oQY-f zv;WsqxWa`>II@8GLU9UJPgc;J-O;FRGZCxdT}(jBxx>sriWGJ{Te#jD)p5#j6N#Lt ziG-nYtQczhMx!F!Bb@!OZSWHp6agP!8|ciyB~GR3yf`6qFQ`Q3IHVnQ%4g2t9_%?mtiieQ%9h)O4H))nIAV zb9FI4cE%hy5B0f!0K@SP=ED@l%!i#DNkKCnfZ8VGQ2TU-t*=Cld?PA!2T`HBjvC+- z)O%l11Bp}IL?#2Ooua7iTou($JJbQ!4|(79%%Py-O&iO#v@VhjYG9F4Yi9_pnw0br?8F-`%t;iv6MMT`l4nw z7!}HKs8G+d*H@xKzS-7~p*p@~uYW^5pRBY=&WxxW%Z9ohhOS0fl7dDQiR!32`m-FB z)jjR~0jL>|u=Ne2hxc%w-(U&sd}k`(H=rZ7%3VPg#>Z z39O;01FAggsBMPXak#y{3YCPvp+bBGHN)GeWPM@p2Sl1krbP`XhppF)WdCc%O}J1P zyJ7?`wGUiFHS`em+`m{H6P7cPsAR2$nsGzal5{`~Y%prZ(@;zK3o0qMqmuZvOF=XI z1NGtuR3ze-H=#{|TAH+|-H;WvG-0R?E1=%1k6N0JsP}uKK8%K-Iv!!2f;t}-pgx@3 z(-hRfIn;~)L!H?VQ4Kypb@&<;TBm{;ND|acGNaxvjLMZ#*a|D4I#`8jcMU3n+psYn zM%9fXy7n4>t zr++ETNxeDh`LWhD*59pv;lJEZUd2o`QB~4Z!OvLLT*zZBf&R12+Ro})=VK)AZAVS% zlQm8?Q%_?J#Rl9jidwYEs95??v7KLyG}VQbTu?f#Lk0JUt)D=3a2NHl^cObA1l3JU zJE1=RenQ<}jM_(gP?5NcUooJDdHy@3RJz_mwf6?KaX+EH{CR4b8K*}@JUi-rw=e}AHO1|X(x|htrnNEZW2HSR z-^ZbzpK0&U!&%f<+5104ncS#i?PpzXJ&)SJUy+Hpp5(R7Nb{jKY!TFmqfl$q2{q$B zsGU6pHM1qCng4=%ZYyf(_M--P2=)ANRQg}XqWBUOsqA(1slwO9VidF?J7F2@g<6Wu zSPc)Lc1QfW=EW?i2t}YejzkTlI_l%CAu1R8p*H4p)PPo?4uD^<2Cl>S^zZqHg0_{n zo=LV)R3wUG4y=uuaeq`tF6ykDfVuFfz5W`tM4wRui(TJ@Iw@*`A*g}mN99Oi^nXn) zK|wRBhsySrs0j4HU>t_(crk|J8q^FfVtLHm!14TvZE!SJZ)iHWV7-ny>h7T0e~W6* zX~h25g@lb9&nV1@dT=Qg#;sTmpJFiPjy40Wjv8PiREXQ7A~FEA1e>iFP$B;dHRE^K z6F;Ng>)e?AUy{Pm#^%CqRMMQW-onn*U!i6m-NfX;a8$%*qC&eA75ZPS+cB8>Vbla4 zqMmz?TADAYBn)($nvT<9UM}RpHW-b1aW87*XHW;nC5*y17>;F|nd|*9gt`xF;T{ae zc+Jh4=SB^%0A|IKs0p|&?Ts#|kPNg=ur9RsH=thFi&~-+_Wn)OOkSb}>}g>Rn50;Q zY7lDsHAJ11T~NQDUC|Dim3K#qbAzgUuXaIp^%dcqfsMVk6NpW|x) zP_Jui8rqBM=qPFlPNPD86V>rw_Wn0iq`d9SPmM{@RZ``nkRPjKUL1@H`D)ZiH=`o5 z$9fnw)6=M&xPyA`Icgy9Q4#u#T7qotZ4#oEq5zh~67AXlbtw$tf;v8jI-|d!K4uGd zFxfpFblC-1w5vU?IqTZ*YYhF0R z1r6XHrolv=>@V0*$rOc}VH;G4yPzU81QmfXsHK~ZiqvvcsMn$*wG%7i8Po)lbv6Ua z?^4hK)7E+p)nM^1rlX2@g|%;hYB+Z{$I}oCVJVD3h5Q8Sy|dOEIEDISypDalJD!zT zqlfwV`z=nR?hfc_MjE%5X($!e=0*lo@^nSbbTH<`(Ws8rqjtq^jKGsv2>-L!!+M*U zmPKv1=BVd-pmxD3WVgAVLlm?|_fZE%x<01E+NchiphDXT75c%bNKC*yI0Gx=Z>Y78 z-Pb&y0kvd#Q4@(k4WvBo!v^U8HFffSrolp}j!IxCR>xl02ep=uQ60ZSeS`TIl`Bd6 zo9_oXQAt_`_1q}ba}!ZtV3whBX&(l&r04N~_Wzp!W@eiPngi${X5sohR6_xS%>DSN zb0R(JdJt-Rh1%=+Q3EQBid=QnQZ+$6*8vA$H&o6%Mpq$uK|u|FL#=hdVADZDRLE1J zK321%wrhD*HqS<#AGc5){cDXq#6&VVs@-g;FElw(1CO-#s}5oR>p~MQD8y~-jUK2Z z8IIX-p}l?(6~c?C89hR+?F-b}f3_wbY6g(a8jku-SrPSKOH^)j7|Qi=2u4l`@s1U0~3wmu6(sQ-$}rOT-O{|L1-|DZyj^e59_YS$KWpgIn> zRzS_HKI+J9gZkX=hKkrU)bn#u9sPou*=~FPAS&rjqGtXO)y_B6lE-D@de2QyK@I0Y zjjWcnKI(-g7>Vt%D6U4G19wqN5qG$mVFuIy3ZQbK2r8oGP@%4a`gCoAn!sRW0Ip{w zg#a%2@CwdGg{sR4lRTqP0~wE6V;?G4enCZGyS;wQ)^DQTe~vn814f!i2B8L)5A}X= z%%kuBl_)4wy-{m985N1m7>YYlFWg0K%a^Eqop_W9VRqEOB2ba4hRXU$s3n|kU4m+N zJu38DF}C*qQ3~qdjP-xILH#jm<}dB_PpFP#jW%nT9@Rl!)N>_JOHvUPfoRk&>S^nf zP!U^+O3H2M>TB~!3Nm1fxlz(u8#R-5sL*vntz|z{68(f4&@|LfNI#=G-jDkHzl!Sc zJ8B?F#+uy8gIb#UW7+?@(TfXOg2||m|ANZe3#bmCqmt&m^$ThS-f`wqaqZII@mhc`#sTrzKkP__25D-sKYgw509W4e2ZG!WaG`B_=R9?>dUYszC%T# zK#Un^B&xk?sI_inZH{WcEo!2}Py?9jQqYLEp+a{Q)!;4E$X}zD;4A8=btaf^HbJP4 zYM~l#idv$6sK|^!JwFSz6kAcbaU1pg8`KiG@h6(IJrouCN~nF?9TkaTSPR#olJZ}y zjLsx8*5h?ZRp0@G}B;1)EYNKeUIpX`p{WqukS#$cMyx?@BTXbFZOhkT**=UGCeA^ zd2kpOv)6Z^mg+VD2`RI8umdSDv9FEG+(*0qC(mLwM&|!*1j#4!V##596;sNM{JIp0V}I)|;p`zK?716>1`L=bMNw z#sbuLp_2R0`RxDv6jCoRGpUGusrN?B^eHMC|H0!JXQ65E99E=$1$96DB9j}rPzP3V z)HW`MifDb*L|UUJHV3s$54#k!FR!6qc!uiu3o1zxE;c!l0;^I_i@mW8DygobI=F}0 zJ+Dw-)!w1jI@uC4pdf2bR7Ap%v3uO26z+53%2KmNJC>QyT*C@nkG0(Vz)=+yvZbid zpF{12Yp9N%pa%W{HIcv-CJEDEP3jS-`=e0zXPUa}`I&;Ud#8QCv(oV#qMi&DnafxQ zpP&wqVyny=wn62}4AgE}kJ@%8P!YI;!T1eBF!Rsm`HHA|EA; zc^fsecc|UrS#2Va8da}=`V44-Q8))D;8T0Q_b;Zy@u-2VKn-jUmcbhsq5Yq3jXC?H zuq*W+Q5|1Fh4=yLE805@##C!fB#NMtuNCSWR1eg9y-~YhIBG(ZP-p#O)WG+mp1X+t z-~ZpGpk(@pT3ctG34J^)M?E8IU$?}f=);D11{+}3U(GKp2BNmwKb^vujpjop%_bAd4mg?XJ8(Q!*lcEg7PakOqfWN)Esp>F-WW+e z)>iZJTnUvcbFc{>LLF2YxA7wvRz)pcyzQ>z|JOw-Z8u4H5WDNf4#zVP2Vymc0|+(p zlDo`bv}uA7)URW9Otjl1Wg*lWw?Rd01nT~F49APZfn-O~vbxxH8e zox|pLOKvR+#kjB;YvFU$_9%YDJlG0LQ(up3@FmX2*+&&w1>Lud(bE$N$&T3tTnVyP%Tvhim4X*oLvFAGP&USf2U~)Y@mdZYJ6m>rn58 z{y(NZKp{{sq7IVNsPo_~>eK9hsI&V%YC!K$S$+6_=A?XzTJx`{>)CIZ>s3+Pt_5mf z6H$?#W}Sb7{jY{sazO{rcJ$(YRA>*O?%zfYABRfTnK#-0I%0q3f+Da3)zCiF5qTCBi9b*cJwXlR9qMHKfqP#pDQ9n=7tqZ;Udnm|uf zh=-#lG6wbOIMLRBM!okd>b>n&_W%XGcnZ_vISj_9sD|R+HcOKj)lq89f+45~RYA?P zp}pVS*1Mr{r7x<(3U|!=wNL|Vfegs?3^E1JNK``;QENN{)!{N!WHzI|51hd~cn3A3 z_;<~7DNt*l4K=W$SP?7Q`b2C^eIDw$FPKvMKgm6FGG)ig+!%;Tj)T@qsAPMD8rWx4 z2XXJ4$fZUtO$O9VLs2sfLmf;tP!k!2$^jqhxur<{^Gjk1`o+Vqm>MsjKBu3eI{t>* z9myY<8K=jb)U#m-)<7*)AJkF~LJi<2R6Fyq25v+>{}naCY!B_v{}B|_K@Zf80oEAQ zr``h8cHE5$`BhAVcTf@eh}tEAkIV#;Vleek%!*Y|1MGt8rx&W7L64aK778P|5QY(t z84>=7hw&*^a){6q$8&-D+o$GVK{))U`5QsYo|#X%OQ;U=J~t67glT!NGOEK?FHB@Q zqL!{3YAJ@ia7~EDb3rp-jM~qeP@#Hhucvrvc1I3WNK2zaT^|czV_T0w9bi*X5t)HX zx&C$6O%TPat?J)2!(@x^3SA*c@LphCG8)!-IXL%UE( zdfMKn15hPtCV8jeaTA8H`Wty`@}tyfXcJwd(y zH)=`Zyf-sVh}!2VP}?sQ1F$HnpAvq_wwe_5Vk^`M*xo+y6RLyhsDUg+MPxIo!?Tzh z@1hQ__#cePP&ts+ni17;Fe-xCQ2pgW|L^|_+6zUkC3S-bB2n9<3TDSTSRVVM)^-oh z#}lZ5w)xu(tQS_MJ_1N?#tecVsxLoF?8`$eE8R{j(FKP!bAT+qqa12vGbsFBY{ zCFgonM@LXedJ44!4>1V;Muj%jKc?YKsP{rp11^bLk}{|Pl(+Zm{KNb;!XNF00jT<9 z3?ej(P&3*8*>rRon^J#{jj__d<|m=0SfBbQ)blmIIG#n=7!~19SQ9^^zC%|2YCgo4 zxD+&lGpG^1KqcE>sB^&c&HS#WEJjmZjOFkX=D-sFnWbulO5Pr}J|1;M&p~a^ji?A6 zMQzL9Q4w~ZQ_xy`L(M$)cXJ~(Dpa{pYg-icDOVb`MAcAh-2&BcCwspauAn{)HS;Vi zfXs%<`W&dG%#F0?@^^6j1x~jB{|u_&E*@x&`V>p=m=_~Z4VA$BSQ6J_7p#Y=0|NYi zTHYBeQa_9O7M;Qy;EzOIY)HK`D$<8Aojz@jQBWxEqC)=;mHpmW0sj4-97Cw*$4=M) z6@de&qxLeYquZ#p&lnisk4!GqbK$7>s-Tu|3--eVvAIwGo)Hu@(^;qxZ$d4}KGZ;t z+3QzO&)q{EL|;$?PZKA=pY6F(IZzh0=8aLis=K{E29*;FP|s~eS6?=Nr=V^13^ihJ zTw@wkM|p4nR>sVD0JGs8R1yZn3-BLMIWZ6Qniz_MP|3Xvl_Q6&r%<_bF41(;s^M@>4acz>QSf}490Fa1G}UC&blJk19RaJtbnUf=frdCS8L*gCUU_E zUGqR;E@{vAK3dDQ<)sfhsvF*sGRGFM23G&g@V?05f;Rgw*DEFT-j5bZB`8xy85VyHA5XJ zy-{mC0F`tx_WownZaIPK@Bu38zoQ14HjS2${nv$pZbYRu4Rl2RQlQTGgV++&r!(0+ z7`3MJaX43ioXB!3o$0w@cH>eTE&1gcL z1H-5nL9J~^)XBFIW3WjkbN>-eqnCW)CoHob@Hu7?XoQ{1-AXd;$J{ zKQ29L3AUj+K8!k=uc8`!i+cVmYJdUx&GSi6&u7ATSkPWCVRfre&R_1bV{Fk^BQTp*kNM;@_y}Yebj>tT8I0 zt`g zs3j@>gZUI}jFYLi`GNi4nZg?`=;O6%N%P%pG1j8~2&1rYDRX}m>iTi)im6JQB^!x( zssD-!`3-BqG6DWy!;eD^XfJ9Y$59b`QpPpg;wu+Mav^qEGxHeKfEJ-bb`R^}-xz{b zBTZ;~qSm%Qs)JFeZ92tXUx-?QHK-4-jhGd8qIT0wmx7Y(B`U74_Uz>pfH?ULgIsp7#`Tb0Jw} zGk}t)nKwbrupMe&$6$F}W_^rWqFhzX^Ifg|F)r7KV>7*n@9_z0LN}|LCHjCVwEqLD znKe$0dLR#KdsRfOQ8a1|JEKP4(>f5hP#=z3^TO2w{67OmqMnua1v-CNUq%+5naYAtFB4x@771_tA2 zRK(KPGC9#4UESD0K{u|WLYF?uj5wP$0`qabGHM|GP}?mAgK-DyGvhicg6}a4CaP_Y z+ybZ^XonrJ2j<6Xwb}pLhk

    (B>JN&7>0##JnCdSZ1dky+qPgzb6;C)H}uUls-E$v0Zct|#jDr^BT}1zOhw(d7Te-Z)crwe zOnG6PO1?bCrhU&961w3gDuka=4JHpV9m$3oNi)=3wng1H&AJXXvLjd&Z{cE0lh)7o z!>iq>`m?6<^Q^;im;s-m+lWMh^nSkI{b+}3_&utDco|HOGh6eaDk_eenkK0G+Mz-| z%sLenfh9J-5%t^w)V950um8xv{#OMFe=-$hMRlM6YIRpc_4u~UkIU%i8B0Dxu%G7+ zuEOCsI+HOVv!BOHek`gyZ5BV@AK5HKg*+(4&-YWab$Eb$>8$Mkxg@@3H9ek{%`C#@ zsE+MHjr4*ozkxb%UZSQXS$5OmAk^Z`jVdpTdQDfd<;|?UQIVNoo#T?w11nJ@-(d4G z_J(7&{G#;%j_1A)sE!Q}_4EA&o{6aEFQOWFfZEQlQ1u7pF!u+e?#pTOZV3{an`qP= zwzn7hp++t8XkB5;*ZcD9zkMWB z!C@?gzoQmW{5o{%v_5L&olp@QkB4zKMq>SZ<^-IG`aJLy z%hJB5M40LMaMXk2YR(Y2 z{tI1&>@x|?i4$q&JO`@BrEn|u#v&M!-_Q4LYa z>1geanwowE*#G@VjHN&!{)P%|=7N5{pVj8ZQRL5}=DKDf)3L#*Bl;KXBUA@76!tT} z-;a7XY(|avCThfQQ3Fj?#9S{~g#E8iC|xN~52vASm}5PJ>d+(n8DFA$-n^*kNHm*#lSE4rXHg@|Q_@%h)j%~YhIKI*r=zB7 z8>*w%P#t}Ny8kQ2pnoaT@gu0~S5Rx^9_qOd$Qp7zNlKd=b6ZQHDynVsjZh7CMXiAu zsF5B-?S>OJ{}7|dzpzG@G0*i!4QvtWxlO40cjIV%|BoSYor1Du&0MCBG94<3sVJ|7 z`bkDd)EADSsLz1YtQ$}xJdT>GOE&)yE0KSVdKVNg=jZ$5yqc(v#9(Lb|C1!Nog&Jc z&{Vf}K=ph$s^aOW#ktbv&!8&4ZS${D9S*2qMwlK4k})s0va-=jhoUC~rn-P#;WQQpnwx1bj3AyobEP*atml9`g?sC=tR z?0>Do;S{Li{n#FlpgIs**@U(w#v%VRY9xJ8Yhes(L|aiIJ#DXFM%DL^^$CWOe}!r| zZ51=sMXI=do{JPTp+F(YQ`OJ+*GfxcGxEQq%0sJ}jub;xToKig8dwio;1S$~S_}QF zoBKwi8k~gs0J6baq=u>gluJStW~*uTV;GN6t*u&$x%i(l8&JcSy0oqA>j?NJSmu`WR! zG<$6RGirY)uWxoo4%E3(4z(7Bqn_V`y6*x~zw3EKLPzK)RH)K5F!`d^rl`3ch6?$3 zRK(_?I=&Ru@dKy^?xGs}gj&>L4ebC>C+!%lh!fEF&(dA8H~fv7yDzAU<2EuK2|+bn z0o9TEsFAlsRkRY9;{R|RPHyby`^~2UP5gX+e)tKsiwZY2yQl-IoxSLL{~srz2*hn> z8p?^v7e$S%sdWS@bZby=w}Yq=KS4#rzqxrnKB}W>QTKM4r)nNJJUc3p(N-~a!c zguW0wM!h8Bv@qX>3!}D86xP757=Z^-4ZJ{&cO8;70yJBU?b`Px^E3^Yx0FLHRWwkQ#2UW z(0Y6Q6e?10Y5z5{{G0(?|Rme@Xe+5J1RtJyO=o-L**-@M%WU4Q-X@vOw`C0p+f%) z2H;6se$ILq^|pM2sxMAgeSPQsn}I|H3I?GxCJ$` zkZ$JwA*e;V5ViPjqwe=~HwK~VjldeT@2N#%Ixa^YBoRH#Yx5H7!Oy4>ChzIz`{!k{ zp&~H{JK##xTqfvcB3TwS!se(o(+4#bqcITQVQuv9&Hh)#^+{-ZbwcgeQK+6zM1^>h zbvLTw!}j_$)JQ(!Uzoa&ncJ7B`!e-4*9)OKQXlmLiuR~>m-n^r|D6=frQkX0WE$Jg zeAPOE8tHqig#P`_QCbbRkRO5yeXap~>~`ol>hr|Pf#xgRE!6Wp2brG{4@2JotrG{a z|F!sLP@o=dwjQ=OTt?014O^aJu(>Y`RdE!mBQ-HM{;=h_hnVX{tQAlZse_uTPN$p5LS-6iLRrb$5j92QP!+F7J^w4J;`69oaLr!-8`a_0r~&^# zO|6@5n0X+pH8<+UNSiN>Y9QK{H?!rPQQNR5HpDsh`U_MfzoO2E#6(y|p&IOux;_GV zN4TC@CgGWf`U8SRsE^z0Pz}eR9=MDe;Uk-Wj~Z#b;ikh$P`e?6&5uDnHxspsR-^7e zgzCs~pX|T$_QG}419wq#^ad6BoFhy}YU2s=9Z?nK8)>GbAgY0SsK|9gg?O-aE~?`@ zQ1$+ss0co@hz zu19T;tv0{kdIa_0DOAVq+42vlDf*7;P|{f@p9xiOerqw*0L!A*N)61f{oj&A2b_%x z-8Ya*Ww)O|NmbNS8YL+6=yL1k2ZD^VRki0a5`)FQlN^WW#O z|Fwux%r_UpP(7=GIzalM8k~V@=vP#QPf#QIV09Ll1{0vJhoGh;9Mxbs)Ks*w<(*Me zHFSY}iAd@S1v))dZ-R| zKt;wKNqAy+W*otyQfpaTw3_!9@7R>bK0~lUjqV`K%?4uBVzU zXo~7c7n`4MU25H8jlr(mcNR6*MV6b;RzOWjHB@;s)XS{1z3xRtbO9=oyD?1r|1^mi z6nsWiFnNV}a1rXpoJ6H%C>}5j9tRZTTddpN(288&M4%v)9j{zII==<=0X5+(p&%%<8||oGU@- z`~Cl#Bves*RF8kg{W!svms?{-P{rB^RdEMvAJncGfr{8@RDE+%9bJMtFZS5->$d#v z8uq_#_+&36TWfk6gsLbXYD8sG6;`mP25aC*)cu!GFPVp^NTyn6&ir8XZA;X< z#6?ZzCw<7&10m~8PwSyZ)(!Q*VASh&2C9KGw){4#LvK+HeL*hceM@z2U7j&L*=s)1p33=d}6esE%~A_C+-~#9p6` z8qjKceLJfDeW(GtFG;AUu{WEaWJY0A^7FB#!&fiVFQr8PVj5b6>hMa`ZrN;&K{a&F z=5OEx@=t8O&sKA!kG3vHo_9TmNGKG4peneBYT!9G$B(GcHP~iG)*H3hCZpEIG#rm! zdp-Sj^T+W8P|wXkeTdy`y@~_Kf5YJy;rlLKnqMuQ7In?U4u19s~SJcUR)0TVon(|cW`}`ka3(BHK)*KbG;Wobx)zI&# z-EadnWhwTV`?I4Os)V|)owYA&O2=4dqV8L2uOHaQ{?`L%D9|dti3;U?ROtU_^8x!! zgNaesGo$X$ZObE35vX8oirOW;P$OT1y8n#5ehJl)|Ms*0^TT8n!=8xZYqe7bckO^T< zR6|9r(bl@C`&!w2A5?=QP$Qm;S|exBcfwgiel_*gKt;SMYLUBLNhmZu?1lcQ2FBU) z1*ncJM~z^MEq`nMVz2uhHs?fQ)W__$sQWi#HGG3w#AS|{DVdM$efyt;dY<*DpYM0R z8(~@UlTb(VAE-t7165(B-^^5XKpjl0P=CVl343CLV`l13V|DVcP?0Eo+&tF>6|r^b z`)6qnk$NCTzs{h&iS5zeYPni3YphlJh!?8a`<9Zx~uTTe5*OR8fcc?Xy z;FO>5pKwWuiM9Wqoc8nm8>pXAAsYU>nUcRyJ-uUnhd)%o89z^Jj^+es`EfgTJ7-=# z{r@l~IBz<>6xHEhumc`M)faNX97ILYRp=U#(2aXgHylHS`UdKy6nxQKAB@@+<86K` z>b@9Mi2W}a^Pfe~4OJudM->+5aj?bJ_Gb7nUPm4E2R$IO_UY^hE*{!gr{t z`GH!ziLaPnr%Q$UT(Aw*;04t4x2!KwQ{#Wte4rV2)ipOvrXVvHmSS!^YV$8p5lVK= zRM-R6z);kpTx30jU&-Ia>3Hi;)8TG^ne8|lvr@ht)#1M|5bwCQ;2EmNZ*AVWZbljx zgD6ji8gXu0UL19Q1>AylP!;>#Fxx90DxcR{02R67sFSY(Dxz*{656i=uqqxwg)Grc z^FSt4MY&Mr5vYdCqYj$dsEUW%@`sD>J% zDrkW^ySt+*nuXe?8|?MpP*ZT(=HH<@7;wwfm&TeO)!~|`-PH_rF6=_z`#;ug^F!y# zs0JsZ_VX{O9^XS9MBh*igWXPQtK{M1kRua@B|ex|GU(u{U1m| zBM(O1kR8=5kSwD(LyWl{B4wbsF+=4|jI6PYonMY<4Gz7bX7F4SxFpv@n)p0xgfdhRMJ z(hpq{>iHL2kosQ}x;&^GOQS|m6E&g%*2Spjj-u|nZGDbWBF_IzeU(uI z9E=_G`F}2nJ{0^w?S?+jOoLm{7b?`d;keEJhwAVP48~8WKRr+T+*la(!{+)n-^Drs z)$z5cdSfuB_Wv;@@C9nyqwKRYLW&4j#fzHXr)hjI1Oo0(DTKY=-f1AgZC!)|IHE z_b6&0=TZ0HN1X@XU$g(!aK1O@4+c76J@Vmi&4c4m70yD<;SN+q@2&CPnfuaXWy*7) zuJ=K$nQ^Gd%|$i554+)2)RdLeA0p{Kt1;z)zJiBOoKn6>dA|NSO6EJ8%077+(W$so}=a_>sRwlr9SHC z0cTMW$?=V!T4P1)P*lXWqehtZyZNn`YN*9G8MXhnq3XYb8c3=izA5GR|4FE4gRLX2 z6HuX=Ze50o)K+`FA_uJ+tbzKl*&mBzjLmeR9HvJgD80AN5>GTV4y> zX#Y1P(Gd@#Zp<3s?;CkORKulEA*_HpSo)wUnqaRlLJeRgCUuAq_9K5Zw!iPoX^}Yo zzF*tvh~+3>hbDAym)Hq2{`=%@0I{ZW^lLjW_}iq2{u5Jo8*@)b#<_ z1}C8+^8#C8-1z3c&Zz6dcAfB1=Q>PF)EUu6T1Gsw_4&rGvW@|l?!80-+bQSG_0P;-`COG zsK~@iY(^f6nwrYk5(i)jypEcZ)JaTzA*lQe)RZnkMS8VMLZLl?Itl+o9Y{%&`g{B^ zFRHnW~Q^@{HkkQ}wGnqW7m&{7koIXM|lp@$Hs`{t{W)S)omCawU24*r- zSQ!U!-)K}l->@O(%Ixp^ODm)CDfzZpm`d&cnj!wa|Cg3#s73c0bskj9>TfL~sjHIU4C&2vLhtNkqY#rvptOv8Na zf9>lD`TTva&0nw(`B-6QaTP~3JP0@9Y1D_%zTy79?*->ji|GNXd}o9?fD%TU-I5XY z(#eLJ`(~(f<~oi-C%^0O`}R8~zq#=b)FKKfU=~#fE+xMg4`9QB{=V<|DGHf}k{0&& z{Y&Q|SeNU8Mf`oQ=hmo>@5Nder>I#Ajc_OVad-)fyT#0f#Krx6AGJ#04laB}?encA z%t&HT`C~W{FXD7;TGDjn8BQYaDP`UvldW^mpWR|Bwk__yk6SO zdDb%K?N$;iQr-*G;Q`dD{uA}G3Mgxi)WoQ>KNwSCB~sE#kP<$F;hJ%ieI4^V3=UU_4vH5%h- z|F>5HdsqjdMl#yw=UG>v=4_MAU$x$`K1N024XR`DDwwHCWi5w_NH6O^^nLyxP9irK zrlUp{W4(Y19%tQX z^gz6dCK8!ZAAh`O&WcE?e+{0+7upSY44c~4YF#$gj&k2Ws)l9q$_~>xZWN0+yc~nyV1eZ7>Q?41N(uRnlx4I z;zdQEm}?VNP&YKO_C$4L94dq}P#u_un%fxEf%7|-#*Ed>eJ!yR`3|TC)}nsYvd4PK zmOn#v*!@OA4J4^K^Q(x@A&+3PKB`9RcjW35xHv#=B83sD^os9`#q6N3qj zixqHLO@I9pF0SX_TK>Mjsj#=Uzwe7ig*s-gSE5d?qo|5bU>Y8LYRhBQGaZbJ>R?K1 zDC&$aX0NwF9c(>NQ*sb>fW1WDzyJSJeY4&2VJt30VF9d&>cBA6NJnB)oPd3CAvVLL z4a|Ab9W^C;aWDopG@pnjU{~@NusxP&WKPIc*iZZa012(eh{on~dp*<~o<*&JgiVa8 ztic#Sc}`Tv!cbFI2(=iaQLooFs7TC0jrbrcl21@;Epb!!zvehA2~`w<$``Tu3aARJ zp&ICf>exV3h5Jyu;9pcnlQlEt=~4O0sEE}?O;LMPeFIS^>g;Che1Z<4b3v#IbE2lI0%pL<){dxwjYW-oiY?!c8qkI2?0@agyA&u?pHTTs zEzBpGqNoanqaGM%^K-3B(2w%fm;l$II=a(d--mI?AGYPEtmo|YORh~^M}4@wi~8u4 zp`~eX0P2&?c$>eAItgE*UQ&r$nGrWcg}5JT025FhUx92I&w5m(Hey*kiJEFRerwY} zYHN2?C{Ln7b_R9hOH_s5Pz}XuV@z$$iHcwe)cx&H4faB9yQwyR6cx$aM%VM4L}3cP zqZ%mG){L+uYLPX=j5rB(eWP_dYK`neO~Fl6$8V$7#(mW1iZ|B4b|#Z$M|RjPb^sn%!x(BYbLi$C>3_KJ7PW;Es0F2m3qAy!X6KoYvkFvr;<) zy!B=^ah7|x&HCW<*s*?g7spxSO*wazGuk_U?l@<*H`Ba~PW>Ha=4JPD>UldYDC8{l zE?-c`DeHZ=V3ZT(9mxO5*aC0N!a7bzZ_-6kPCIYCMOmD--hqpCEuut3(d(c99-9{_J{;!r!6#nP+ zE?=6?DdUY<`qXLYUB7IUv)Y?yd2gqxclq-E&NOe(ii}PxZ;=(Q)7-mnMJZ>b_tT0x zPSYLLR!(x98s6)xHadg6V^&v5S(*k?@n2^C}u3z89 zS>jE(A*1uNx4?!rPHpde(i6P?M(OX+gQk{vg6gpD90)9EwDMtsp}oM zxsKD#dv5a{r-^sWmNw3u9gnv}Isp}EzL7W6)*8-4Z_lk~oW z#((ulUt^6;@h;z1!zt%|we3%*ruX#rjLstO=^d)5z>9yV&yOTTZy{mU;cZPb;?H-k3 zJa>-bzc+S%9?*wwq|?zxZ|~20&ZHd2RWHvE=fCyL=uQGX%v)`5#-JfwS<3xgaVz}} zmNi-?vr)rmhQ({k^dQ MOjRvg_|FRXKYT*3N&o-= diff --git a/resources/i18n/nl/BambuStudio.mo b/resources/i18n/nl/BambuStudio.mo index be75178805ce263bfd97c47c6f041a9b17913313..054ecee0102fbae879b4f676ca28e5a3ab053984 100644 GIT binary patch delta 36505 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

    n_yxyo|y49*baxb!KTJQA;`v3!=M~g3j;y2lu zH>`i6*8HXR!cYMkS&1i}@im9ZsZP8P$FPHS?$F|M!1WZ89&NFw_HDVR2?W4YfwcH=74N zN997QEoMM@Q3EQ9dT=FcOX~ns&P>N3T!fm?0aVT$!=&2(7bxhUxrdtRQ`C~YMa?Yv zR@SMCuCg@}^HXnvdfs@{5&a`-8!p8E;W~8nLG(8BgT_+pb!+17 zro9p>X@+BNT#oAS9BM7Epx%zJP#q@SVZLajN99Ci)b(vq5$lE;$gmyke=mi}G-yWC zQ8Sv2dK<39Qg{%xD?VcxOtjNHs0LQ2-U9W&HP{q)pmHP0F0*90P@n%`t!8b!i~X;W zccei_?<7=5YfvNJhZ^81~(2TbPO<_kqADgu2_+i@}~^s7*7e+kv`0}RJEr~wz* zV-Gl&f-ab98)8s1UyYiS>5u@3d7sL1|| z%CYmP0p396z%#6?_y0c>^3qWKkhx(1YNqp1ORyBD;W|`q6gzA>sEVq`pa!%aHPC%H z7B68KHacRKW*TZBYf;bLj*0dC{{V%AH2jMCQh5V4LeEh%kYuPE)1f-Zi8=>LV{xpD zqj557APJ6{2xh?S)U#o8tc+!GIqCp`&D8`-ED8 zOef6DbE5`Q%GM*TZBY}7LftfC6B`j)&1m7H5oyXL~HG!&uXGiqi9 z&X}wYL(RM@Drwr;_U@>YZltYG!qwCl;&iNdmOtTSdtJmA)C>J;B9rmFnLsG2pVBS` zEkOk8CDITTk)EitekdwbqfkroBWj>)QOR^0i(-ZgW`K22OVJe7K}Xa;d!m+R5Go?m zQ2n@zDQITvu>fvIb^Oq_KSw?AFD!@Ou``zW&3q|cg-Y71*c}sHG!q$uRjJQHMeru( z!4FsxGym@Yg5r9bP|zBW!rT~*TB`$C7{8)!D0nHr(+0bs*6zV zw*vhCLBB_+0nfW_9<&n2Q~w#&Ug(Z_UKvybtD$B*9F;khpq|5 z|7g$*ia#sC|7M)lrf^O-Jcb9pyo7vm&UYyNb0PmY_ZY zHISXC>rSIOyp8JTIWlqA^Ob^g~d=8R7XXoC2AWDM|C^}wg010*ZpigfJ&~5 z);KTBFCxlfDDAybZ^304g1gbb|DRLPOr4kJfhAERu8CQ(4Qk|L?B_GA%TP1ijvCNO zR0p?F1AUKq@H;Ak!LQ79g;Cd4#dzBPt!+bBEJS@2=Ep6lqw_9mE&oAfZR*!%z{ODS zj$WwTa8U!9fE{rWYV8Bwm?UqEx_%{U;5*ROb~{BuGyDye3%5}1&rvgYi&}#8Z_W0} zjT~^E@~A%v4Mz>I_FrZoJy6$2p>kt1DoGcimTWyLvIqZS|7#@oY0ymHSrfi9OOOjS zqf)4Ipbly++n^#b8}$o|t*8ONK}GHps-qn5%{Qmw)|RNH9g8}s=DlbCSD>(;2JO>- zQ5|_dm`J2Ro#{cSb08P0qjIPjRY9$FBh(tVL4~+Gs-xkk$jn3~`7fvg=q&2GhpugS zZ!bvj(R?!rM$ND~Dp|UrmS!|o#~D}$Z=hzH_ir=6GUy)=Y9ei{eNY{bLPdJM)!j;= z01dxlDg1(ZVAv-!fU2k?w+rUQS*Vk7zy16MDn~w}zH(*%$3(0OYQVKHE;d6&usv#k z!?B?D{{#wJ;~l76IENbP9aM-uqB@NI*&MOiQP)SH-W|wV z2Q&@qQh$U>%CN5*Ap5Tl1$EpKl>@y|+o?Y)^utgipN$ILdei_Rq!B-MbVn+J;U4nSFU26^W;)fxJNNf;1klKLVMo z#ZhZn7xlpAsEPE!);JDl<74c^IWfrb`VXYL0bc*}ig>-|`+rHV*Z+sgl~FTZi3-&r z)QEq@%6JQPP-P4B`e#-U)nORwz^R4{u(54_hf3zyvAq5WrNjQz^P--=B$n&-@8=CP z1ktb^f55A#j*`VTH)cX*aY5{W#Zfa~gnH0w)IQ&a8qn|91)tzStR2Ve-$jYydi@7h zG1SsTxfGN%Ls3aG9_!%_tcG#pdHqRP4~J0iiki_Q)O~-WBILw315AqA_v!Ee=0WAg zGu(&&pia!~3B2Y{$N!>GlZJ^2z5cbnf>G2xiM;-!wm(KwU2W?>BsSOg#6q<1#j^MU zt6<(FUjNSt{cr{Kt*FQ~N@^n38a4B-$VuvY`cP1)2jgQLhniW}WM2P)(jSXcpO4z- z7i~R$a#OE}GiV=<+O7#wm}Ja`SEv_9C2zu%CZfqv5o>||zyH^rg4S{vDpcc9YdRN8 z;0nx(w^92(PAac||7JlwxCH9HvZ$FwqIORsjKt=srCX0$nw+V<{&ztb26Fy*>Qd0b z(g>BseNZ7AiF(;gM0NBdu4Nm|!H?9-ruF*Ii=yeg{+|Jxp?1lS*bJ{>9t=%yp3@vP z(DtY#?T`Nd{@*0qumE%N!7r#Jyn?zRID^-JLYA;r$A+}Gu=TBYpZamsOKVj|um7*t zoxnoWD`fKezn=F)O>`CNTsf49{jdH0f(D)Cu``=(mVdB@CC1BPW|$e(o)49@l~FlT2bG*nurv0-TKET6!(2Jdk=zH{QNM`e(Jhk8L|_k| zrJ-Z6IXDXCHX(kExoJ<4$Ls&w?xpcI^}RR{=jHYK|4wJ(d|v-wk%73L|0s0igLVbY0dgAKQ%@RVLf;?HQD2NYn!6S9dgkM5?26?= zz5f5`%sNzi<-%UiD0ay`RF=0X>h=Fer}|?>>Mv1WR6@ekAN#L9g^V;T#Fn@lLoszR zum7)BR<%yY+O%K7i-hkSEvCDb=e=WBuYAu(b*6tN5i|ds4dfMPdEP#nC znD)|Go_Y*k$D6nuw^lSu+A!R_tcIei{Wzb3X1o$2A{5%rK7=0q%m8bCPerS&5gMsH1X_7}s!)DzS)yI>q@_gp|d_s?3c zSO1^dp1rlb{@>G0k7Qr6c0=lT{Xa+yuj}PsOl99=TU=hxL@2PnIR`pmUD`LIj^6)J z&#T;kj(ASGhGxx+HnPvfXg(j_*lg!yZWHse$c#ETvZIo)FlvowVmy3>dQE>qy<8%i zng~=w)gw`nX@Gjkv_qYE{V*v5nSuGKFKK2@#$Qpp$$dycA7pNBKB$2TX+ex7tH2hfJ&`pZYCzSjjWI3tj;JLViM*~|PYeZ(cr$7n9!Aah4(cR) zhFs|RZ0ku|nvSwzY}(7C237?X!6v8ycSgMvqEHhVh1z9PQQPERbwOj)nzcebs5}0KLr}?At(({X9}*vmU#KVO z?)3~HM6r7iava{1kmHZN%nu$hz0K?R8ZrUbQ@fA(Zr2F&>IPJjt?6q*v>7#kov7`3 z4E5dbH`KsCU@?r_&&;?SYNl0q@0|%R| zOoR$?8dP%RL@hx+RQ47|&A1XO>6)Sro`I-cv;ehBenwq)29+asP!WBCio|PFvIY)e zV%iSrD1=~k)V8RPy08Z-WMeQ4C!z*)0QF__IO@9Fs3m%b3jKe!J@rsi&yU(g;i!SN zLJhRvQ1-u*+K~!=*LS6SB^Wnd!rOG?X45YHP z4eF#Dii+q~RI=_wCEaCPe~v_|x+m6X(_wPd*`5^@`f{iTR78cYGAd*(P$BMP>mzJ^ zmT&TuaHpH^{FH4@7vJcq*_~y+Ra2iioqW@$6>;kLj!X-82KZu4&l0Z{0qD&W8u_=T23$G^!3e}?u*rxPsaN4%m{W`Y^yt?x8uzA9r^K?GiclRnZvx!VxJS;+-d7; z8J)%%=o>(JiSPI5PfqV`XXbQwoRz+?d1IY1zCH6MIzC^8`B|KX+uF_#4saUyCNC)N z{Ny{bpuSVVmulfyr=l;0|DUk=zB>!+JDq)@i^81_z5$D}JMDcji-Mg#z9WlLI8A+5 z7iDp3`aUkI;f(ZE`0120!WVCGV`qx5?cyTNkG?tlx2neZMlT6Y7sIIAD=F;%>MBwA z-z?veB^jLZzB@}^IE{U0mX38+_-ZYSa%%XFEF0uZ_my0p#cAVfy4-bI`fe;Q=Zx~D zTT$O>zOCnqsg6_I_j%=dXRvS8sv3&ECpDd9;~##j>e<4UsO5{bdVTuJw3Oh}TD113 zT$s&K63M5tt1~;*e1ERa;#Bd)TeHbo>f5vCg)_~!YHe?)o-frp*Qx58v#yA<+;?VO zcW03=?B^^_4`0Kd+dFlAdnixz-S~N`)6Um%eUvl9cVm5Vr~0;J8^RqY!q;$PxKrO3 zv$4L@)AwrQE~lAq)i3Rx=xy;f6>(x!qWdPk3Y#OHNxoT|&p8WyEw|K2H-y$H3@(h# zFp_^7QocrdP4ykw66u8dl5M^2MEd^Rn#Eb*i??k}qM2MjgGsgKpE`dWw^qtrl>td>?-&exDeds`#)24 zzI#s2ud1!8-g>KgW?8rkhQ%H|Jhpc$ex&IR|63W&aZ+IIa*i`5hU1JMtD}yyX_wODQ4uzZ?h`!fx zd{_{F!J?QOD_~{pi-qtg=E5JC40HbBI5DvzCdWFc4*!mcvA=aHGDc@L#>Fj|oc5g~ z6rytAHpa%ss1AHUJ;>eXIFT`iH6E(LB(|R3niVzj5bTFVQ6t}J-Hnl`??pZDAjYJ9 z=Qss5bP?6#o7flMVM6S(-`qG1^}x{>f@5(U?!|DdaKLfGa4wd>7pRcuIB2G>E2=&g z73s6+C8F>b1&!ztsv~bP7JkQg7~_!Rq{ft}IW30qaSJMP$1ppdLxuPY>UqAyLZ2 ziW-J^@mLu5VP5=%i!jGY$D!!_iCVrh zPMIV;hU$2-(^}j-3zgKnFfyLUsCXHfde6B@K_PpJneiKD!whH4G73Z8a2D0UOQ?uF zz>4?@(_*Q!=6q|^$Rn@@u0Tcf1L{8KoVhL`R#O+#Q;5m&?)VFO*0C6a`gDwji&59D zvGtv(oH>Za@d6gXxPO|}P!)AwUyO}IF&0ii4P>F}3eiRi>2M!r!MnB|y>= zV-#$Fidb`uggsCr?1M>hD5~RgQ5{~1n(J-$_;J+K{*B%i3ckP0NOqvM&=aURypJIm zbir|IVkqjt!%+=R#x6JqHOJBaHt&#N97DYrDydK4uXqME1&=Tje)*gDYwprsG$Sd8 z8bM`L*0;jAI0Q4|R4jqJaS(n+Wq+SbW`nwdJ*a=cY}oO#*&%1(XzFRNn24;!gw%Ik zA^r;OIS$0bYnT9^p?dxU6~dsaX2fwY4)tWHxy^!_(>$n-mc;lNX6vm{_xD8IHxw0# zsi-Y}y+>g%g-qAXh*sec)vq%;T#Z|C=?%x}jP?F8BRq<~Q!n_h*^<}baO$aVn))&v zN)X9(CV8m;_&- zrY`awb6qM-Og#_kd6jIvK58H6iag(QdQwp62B0210e9kTRCb5mrHpk^N%soX(J!cw zM!sh{nh5pa6sYH6NL`_92 z)cKB>42PjQI3JbG>#T=R9l3&hepKiRJ~jJ7S=5MHVlIq8g>;!cza161ix?SSq9XPVHK5qf*vv4^GveQp zLLCld$6eNks1C({ZhD>;6`@?11Oj1xGoJc6`qruf_h#S_23qm0S97qT#CQodQ{Tv!b-Rg^^S=8#?&*QM%EQ|d@L%N zS7CWPjfzyfw`O%@#Hd>TMJc4?L|N1Y?J)rkwDl<%i~0&wN46oep!&$SQypwI;fHMKt-ev>cP`6Gp@jlcpi)32UMi; zd@%PFMNLg9RBlzk>o^S)W0#L+%0{54o=&5X5Len0f1oZrgK_a5szYy45B`M8_8+(i zBY(0H!cx??p$|V`GyH{8`444i0)fophEZ&m7GCe z%m`v*2kI$NAsvN!@Fdif%|i`j4JO4ys8w+T3t*D3#6Jmz8edH)+o49b6xHAw>vjxu z43)k2Q91J#f5jx<%$(=J1k}r+rm_KM$KI$8F2mxu4zuEOkAkKk@psenEY|#(h~s5Y zQ_uhvsgCx157Yw(TSuchG#NFO+fc9VQ#b^lpq|t52OsINKWbHY(SDkSYoJEn7}ZcK zRL44FZC!|G@DgeY7V%Y79ax8o;5O`sXK^}KaNWSy_M52dG6%VV?+GE8fqFBnrS(68 zLPHK*!{!+3a|0X7G*s3v#iO_#HHZBonFsiBJ@wsK7~4fQ$CuzO>L*cCxH5_x82J`d zM33M&ypGYd{@X-#19RHNItbP9L{v`~q2}~BYUDR;{Sj(|`GUciBAU6b7-~lhLnU!@ z)bl!`Iy3+^kWrHMokbKP<8IWA2T;rHPgIXDqC)%>)d4rU8+ZxDLUphJDhZpQp3?`l z3w=oR8&tfzaIHfI{>JQ)8sqZeV$&M|G$M zYGh4ON!i-gd!w>_pmi!LVkscY73+45v^byN9{) z1!@ON9nXw7hqWXsbm6E6w#H-_fhlkzYR6lPy8kdLNB+W8_yIMwiQ=1fy$}kzp%Utb z=BNw0pt61p2IG8GsQ06i@gl0>=co=vPGF`mF=`;0QIQEnb+nj0Ud{@+t* z%Yj6R+`vbt0jQB~!Ay7pTjPJIj@C}>I@PfqmcSj@6F*=s?3~1OWF97`z8f{5%c!Y- zh#J@r41E8Omej24#HbT#QB#r~mGx!p`AVogzK%WK7Zm{yb>C=I=%=FgiTT(MS7TR9 zpUgyV8fvvI$H343cG?r?a1#zLZSONO8#a}SlQ|3h6LCD=qFMzCi>mVyIXmzhwjASY@S6h+NpJ)Dg_Pz}UN zV;+zmb$ve6eozK;VikM7AFAWy&}GNmgyGb;q;&%y&7yeeOpn4*7uLr#I1sntLex~$ zPEY80KtEJ{Vg}dw1Gk}a;P;H?IsH&Md_*;vKC>~0H9xAs5~!T0jEYDT)N*Zu%8g#AWjY$!kUVEO1?9j| zRL>ruLjMER^JH1f19PJuR2KE%I;fF0L0#9%+8?#d{HVEKhw9i4)XV1(YIXdHQMCSV zP|$<#q8|Ll`UREkL0MgAA|^&9&vMlDYfxFg7q!>lMs+ACo5`hU=%XITngG>s5>#Z< zVQkuWa#K)NmqdlGrcPihR8n?F^}H{3!jZQA2KAty)>zrilq5%WG`%&8H7BZ_P}EeG zK~JITMnMl6gO6|~s^LL7Oeja7Zd`y0=?2V-yD%HxM|ChxPIEp5DsmYy2n(a;ycnuu z4RIPa%gOp*PvIR0%Hxt;<^#o3R6Tcy*}MComd#qMj6X33Pp+KXbfj*m>ullp5LCl? z^O{IhL=7Yim1Ff$%eN0I!jtl{{rf4y!!dXXbzRf^ChLDkJ!crIgVRuvSmjYrQmjXHU^k}36R1xz4^i3u71hxM1&o<7 zn0hhP1Dm3*>yFxh#$pECje76j#=Q6gb6{ve^Rn|=P|%2HqL#@@)H>Z_>qk*NKaUFC z9aQK(qBdrWfqGuiA||q7n45Yt)PSd8;QRk#d%B+Vb(>JD=m-YZ|2Yb4Iq)wk z7e*H|8_6`($mXCzxe_%+yY2C#sE}W<^@pg2-`L|Ri<|3nqmr{ID#yy$<6-Ejhm9$y zM=ekdbwc%YAnL}+_WVrLh!@-XYSjH(ZG9K2gNIR(JBOL@CKklVB}|eQ#}(A;mSFvB z>-^3E-56ZbBu_SL1=I%B3boY^!1TDt9zTXk!ds{izeA1iJ1SXYlrrbjq9R!k)uD2> z{#z;5zee1T1EDw`^Wi~z!3WfXe5K8GzhWWk*-?>bYwdy>aWB-Aj6`*84r*C$LUrII zDk(3clK7cNK_mQ%x-nrH6N${I(1xO>rXVW&OQWVH4Ao$3)O``C4vj`dax&^=G#AzI zV(SLXNqsNs<>Wo1pax!|Zv2GWvwdaF1EZiCjExFy8dOJep+-_1b$>W2SDIjRY>jH* z80xvFP?5fb4e${XnfOl0a&F*HIO?Mw7}MV(IDx0Jl`3z>7>1gJ7S=x2N!AspEZT>9 z9o<1?OUw%9Jr{!7{hMHB9EiGph4qy6f7Un^Ny{%>kf)*LwQlNUklZNHmEGs0F+d;TygGJl~)^ciTW={BE31{g^%9sD{an_SWgv!$!~fkAhZkikfC5c~DzSHPnKw zi|TP#RFB7?M(jte>YV5_R20)YRQXb?`3g`bVg#`iKSeu{36w2~}AP;Y5AZ z3Lk?da0+TFE?{N6jansHYnl5>p(0cV)o=?`M>?TiZ@o~tFdelpH={aq1cPYbIZ2@^ zoX#F#xhvEj_W+Zp*S2n)iuw5W&Mas z_8)aw|7sv!J@ddcsCsrBhDA{q9>h?*h@~-VebbT3sE&3*b+9)o#3N7@U~SPjj{`=FNDB2-7Vp+b8QwK`5( zFJmzEd#C~W8ky@7coZ}@$x#o=fa*vg%#KyCCH6tx_z!BTo})g#zQGz8x3T%y*&KCz zI%dSJSRHR*FlK3DlCLtVgI)~^+L;=oM&Q{K<4_%$WnE+a!=C>Wb^Sl6DSB+re?bi- zW>eGQVATE+g88uoYWej-c1q6~M?p8NMTPDFD!Wf$di)DD;`gYj_=bvDtY&5eNl@q0 zqc*T?_IPe7jED)v*_-j=e{X=m#q4 zVl_9*E;;IWIaEYzqXyR7*2kebxB+$FHcYPdf0%+EdYB)}7b3P?{N`iD0^tCYrl|0ojCw4+5 z;T%-RPoNsOfQrZs>pj#+pP_Q%2kN?C+L(qCU>54hP*YF_HNeVkSpS-f8XPEz4Y3x^ zMK$~q3t;lL<~19R>fmP7Mspt3@dWM6aty(I)azpgoQN9vHq?Mlp`P~%^I}MQ&wK}J z)7}mIqMRRf!*f&zoDSyon*%k1a;RkLiW=ci)Uq6hiqKqC1eT+wZZj%Uhf$F}jf&J& zEQilM3K~J~j;2S|Q5(!K>r2!F8+0-awZTiweNWVbEC1#?b+Hx}!_}y{e~h~Ch4nK| zq#n78>s-ZYxD36{UCkHpc-`Ep^>_@m-0q_0$n9Y^j6$deyP+EBhYIZ&ROsiR zBC!Uu;TEibw@_1=F~VG51T|$6;Vmr4AsGF|HA{+ z2d6}ZJ}qhl*-;JWMZH$bqLynbR5tHGEzfVLhJNjD%!rC)9@KNopgw0*?9ckwgIm}O zI-u(PP$3>_k55A7$RbRKf7s)9P|NW(YDAF+n7NICn)_tdoTv_zvDQX?rff5S^{*Q} z4k$TBqDD9g6|#l4z5#Pl-*0`1IjE-^Xsn8w^M0rfPOpP{ zOG!cNF*EAM!l(yVL3ON)H3D@*KP-hKP|NfLY9IKCnu^SW%?OL2I#2_Z3w2QgY>A5W z??`fcPCp77!5mZvmS7NW#Y?yYmBr(RnB-ZC>c}e89B)PC%1KlNF5BY|ZT$=C{$GZg z4Ja)tk|i*P)_*k$dO!oz2GSN4s;Q{CT#t&x1rf4EwjRL9wC|jwpc^luLiPaFz;o*-dpz=RGxC_I^GQ$}N_x~37DhEt6&0a| zs3~cKia;OKDw=HT>oD;B|0o4z6s2u8qbi{MIQBY{+pgOY1x(9XP zCDa42qek=uo8dbgjWu@3d%$>w>zP;)#0^W#X=OJ|=wegy;T{|<#hocLeh z03R5pnB>ZXT9$=Tp{;@gvA#Wi1vOQVZT%xQr5HDX8VS594b6 zpQI4jtFZ?4JE)$A_)P=~qasrR)u9Gh5j$cJ+=|MfOw-IquF|N6d!lyM{;0VhhQ)9( zDk8VhQ&J_KZa!Y8N3GwX)>){LZ$Le8udN@#FzSDzIuty^brxc7%#IhZ5&pnXY&g>- z;Y2J>eF`9=r!NvNMH`{gQVFe8An5dCHxAnKy zFQ}Yx=eW)qjD;G=E>uMK&td)NqHv7^%I;`$&2q|*8c7?Bz^SMXMV)7oF)1FWo(c89 zmsk$p+4F_xo7|{`S``gY%eW;fq7kTp4Dl#vWIIvo^d4$men8z2eSv8>IclWYQL7>p zD`7$GjzdvN^&ZuLv(Q`@3$>i%qoz7HszW8LUPTHTK^W3`ryky={%(<(qbrL|WIkY7 zj;CK@zHoFvMeHCd^e<7X;RC9nC`(Pp6QTx^0hNRWuo~7e=RIesyHg*Ej|WQ&xdTKPF>VaIT-Z`Y7*+csi;-3 z2sNN}sJHEY4E$QkKNNJ~YgEsEqLL}`S~It4P@&I)rLib#U3*vnw_;sufNeoIY+~{VOSwZ8X2nRsg3^Uygdo6xd`!IT9yOzk;K&^=32j z7pP?ydyCoGYNPI-ils39R`Yspi;B=rY>0PJ%e&|{&wS4%!SkC+~F>^4bR3zd9BQ4w2=I)54S;unuXehRtv zn4eg*#naTs;~!XWulWP{gn#f85*lugd2#hV*O|%rTl>w=3wj+e&$)~JIiB>O8~AO~ zX{ZQ2#Riz`kXb!rP{+N0C{(48=CJwUQWq>p{Q_zVemP>6O9Rw(gHe0=R~6YM^ptJodmf zm^@OL*7nW_fOY8q8g_4|@amK8Is~Da7 zL)1wB!`7JdtVtq2?xMaA>tU~R=DI&o`$w!l&F@HM!BfW7= zTYrjWsDDPyeX*;oe~ok)1%+?|>W14G86RK}K11yXFHkR!PpG${d(AW)AC=YjP&;MR z>t@bVppKVC9q)izc7ssuti8_qR|ht6K<+_3_$cb7avAk`{w6B4ckTJ_sE)+GVRpPE zs0K1(A}oS>P8cS@mbTstwG)oA$Ne{0|1mkRk^{=tZKy5wI4S~HP!IYSwL`u@MdB;! zK~erO9f^-h;^bHao1z9Z2X+54)a!dY>gDtYs@*Fd1wH6K>W2Sp{WI#q$p4zXI<>VZ zCgFGk)P29BA~6tk|47sTCZj^U2sM!9sF%-LTR)Dv&pS&&H(s{hM&0-nlj2JZ#;7;V zgEFJ0CMT+){FnyIqaxHEHPT-8{6JfufJ)wJsPZSA?v*8ca{aJ6D>q1d;Uk25&dZ?^#W9w_Nh1UOW3c4`)9g{@4Fr0c> ztbnsnxpBw(29<1)?wXDzLp6{Y6}kMVsVRaQX$8~(!%!PjXVgHJV&Jc(Z>69M4m^8BhZV!Cv1kBM5|D9z8|%o|3XD7=Ksv`P}J%uhq}HgD%25} z3;WvoYSad{0kv;z!4|j=%VKKph56Fh8vAnK2oA+!FU{6@5cO_&h^;Zhf964BQ6Dy^ zqgKJ+cv07(l6Utj)1g?eO>V_U4KM|2Rb@d%$P2Lt@}ovv%vu9AvKFZ2)*H2xO+n55 z5>&(cQ6as6df;``b8e$n$!mK)${Ul^u~9jc2gw=FsYyXMw#Q)XV(XJo51Ni@XeBDS z_Mkd)%6h~4-1-f5U97j}{uHRG$%z_yC~CPE#yHBZ>J)-F&=l2B3u^@G#!;xb9&e8? zM>Vhu)sYjZh+IQ;_#I}&DDO;zxvd3JxlqDd1_OWoUx9)`SQ*t|EmTkIp;kpxd%T^s zvpxU2J>Lh@bKMXugDX&T{S4>eM^uNWzBe6Qj1{PF#lT-n`$|C<#QtDHlM>Z|+{mhN z3fkj^Q5#cr)b-s_t78bN;eDt`x*yH?NT{hzfO=js)G7!@buimU*1xvGf*jB{l8UIU zv<+(HJuoc}Ky4%oQFFHgHC3lkNqQ62&|6fpenw42f=}j4Yz9<>%b}iI4Rv4LPpp6S zxHAVdH(gO3=wUAyg6iN*TVHAG`!FM+Ifoj_yU*q==zcLjNlAybI6efc<0Y(t>AsrC z^uP$}Lp=%#@kiW=pYb+s{$|$kl<(%JT@O(mEce5Vyb_k8-WWUJ0@OYc?Wfs*DxxCM z2Lp4DirivUhqt4W);ml=p}mC)(Rg6^b)qxo}2G<}1_xLswC^-31*H4f>W>uYFS1OGWVrI zO=UVPj2Y37EwCQGN8MM=7Zms+avN)D{bz|36v*lUSeFYHp+fx;_1gT3TIY!)n~`Kf zjW9QAhbxXbFdX~f5LCy$pgNu)N>Jbrqf=ub2~o$Zq4{g+6nb%>D^|lts0ZbZY8qOP zdcE#Jh4gP!=x?H?;t?vuA5e4ZL<hw@^9s3WG7uFF}E~Xb9?fy6yjbS zP)Md&=c7it8r8ryR8E{hW%C8hh<7kMM&)-5IK_!0H|J~4v=Z_VMT z)p97NXOhf~WsGA@iE1btDiVcJb6y?8u@RQVji}^$hZV7E>>y_cPR9$X#|a92hfEbW zDDbNrO)wqD528Bwz@wm0w2o)ya2P5{CZHOej+(nAm>0KWE_{Z4@z?m~x@oA9FGfXl z3u<3Dhq|vo0&~7I7NiN)3e#XU)CSZR%iuH|kJqpjwn=I3JB1^tzr<1)k%}ZNPhkgz!T22& z`a!8phsL8emL;gUUWW?hKGYmvLnY~5)O{~eQ})fCj~Q(CfkYU{1q|dCDk8OlS^s)K z7Y=AE?T^|(CgV(8k8`nH8dJZEJ*f9h%k?f(fjg-Or8fiEgL=6X$zVo$40}iB8Yh;E}I z@fCGn^sFX#QlKK27j=IP)CSkWqo9y=MkU_>R5nk;NH`DGz+zMfcHm(=V9yWD7UV3a zJ_^;L9NEp36hK9?Eb4hJP&;S`R4#QzZE#+H3Yvnk_JWzH9?nP2*+$e2M^GI&kLu7h zRJOlBbu>y2GvXMik)=XCCktwWD}stpLsTSsnd6=_g@Qu033cNUR7Cznb>J4R#y6-N z=jAjV*olhRS=73JfI9yi)ligNrUPkF9nOoozLK>CCf54zYY$Auf?Ti)72>;?8<&Nc zT)2W-j_**RPM+IzFaxT?g;1-c5-MU1aUizEJoo^cV3IsRd}`v4=dg^{|KAjpG>Jpa zgVUqtDkmxec~POPi27*O5LaOY4#AXp&HW28HTCtVsX2#*@Db`c!TEv$KPSkG8b}lL z)X;DW>iJkyF3d&kfU8i;=Phbu>6kw#@PmU57|3!|5=AdyLYow`Q4hiV*w`NTqo!yr zDp$6ka%pD)*8edI2RWd*8(Gj?xEPyJUxh6(S|Rh^?u2@Kt-^Bn7^`BA!sdP64=YgL zgN-n#h}rX-T8Cmd$5&uA{8EJVpP53%q9*x%M`h~(OpJ3;%V!Jj!ab;w_b6r}G6WU5 zV^|EYppq|PaWjP>sN~L%%85#->+4wCdK5GTy-`Uu5H)wBP;)>?^##|*$L~5d@%8Q^-iNYdOk~~8#mmjF*n4pw-*`z{s zth%)wYNUfvIWrG+{c6m@*1Qchpj)NQbDyA=-#65A5|#qlWrT!6RH z4Kq`B7d4ZrMDiFa`XDx~ci zn)BUJp&yCL=Gmx_uC?`lQP;mjUH2J-F=nHnz%MA}Kbjk%=Ul`_cnt%;|C6@~ zI~E5@qSkvyREPRuKAeW?`DyDd)Pvt(6%1|~6!=+AXKX_KF8)G@OEfcIu_`w=#}{Hx z&VNURzDEo0*ZLn!p(vh3bs&066NzM~Im>3Ph3TmGMZJ#aqdImMwX?lPjr1F8q)A(u zh@`aULnUK1ERCHp@c!ROLCLfowdI~h?P!m&6uv;sb*|PXBF#|^&Ooh>`L@0ewLfe{ zW&Z)xNKc`5yen7}Z((-K)rR%2kTq^&M!W}=L}yWvxQgn~W7OP7YHNBPAC>KOP&v{T zHTNEBSz|_=_VFrAN!5E{Rnd0p2SpPXWP@V(2peO2rxu{V6feQIQs0M#xCXCzO zJfI+IifW-c&==L=DX1LTfJ*9rQB(C2HNc<_CPJ}13L0q=)QL>iJg6)$X3v*Lg}Sb- zw?T!tr>*Nb>fj{Q@>_(uf2;KmOhf$`R>a4c4ZV<#<|9>O)Uue1S@9!kRiy1?vbHKJ zNe`nU_7k;5=jS7x1ftj`b7gA7&PNG70 z0~M-|sF23!YU=5%1yDV&f=a^PsH7W&nzFH| zmbjP4_Vgl;;j3L~hm(5ZRsGj%yR}>M_c`<4Qv5wm8?T`{45 zy~H#aeYnYiY^dYmsFzb0493x@)w3Ga;k~E_pGB>L%c$%BK~3>{Yr+wxLtdyYl(N>a zHbKoxi<+7Yt>bU&l&ttOa{>u0eO^@J0H0>6Mf7};%| z+o+dNwJAZ)A?%MzzG73&6xKvfS>KR?-g0eF5g3E&&~|(LEUL$^P*W4h9~Ag?yhNzn zSc=+M_M#fNhI*SmM7zR>3Az#P*}+`hTbh{6saFVxAd52Gl-L4%LAgm=hae2#!TID9_nT zLF@4ls)6ISehD?A>!_r8is^Cfd~^L@s2sVBy6z6D!B^HVsK`cIV6IDsC8?)JO-&mN ztp7n2v{jBqjbNg6rait0wZW`FHMG@w1hoNOwC8W2?thGdj-Uqi#nykKIvjnWiEu(J zto5IcLKkd`8sRxSgKw}B?q6hXjJDX!SpwAZ$z$u)F&FjUP$8a=S`BAWIrI$GF?We+ z_!rdu$<+CShp?1C&sJZo{vUvq6H};^C?LX91WnXI6d0|wjn`3S4iE8jPDzX<* z9l4I$FJ7T`%xKG4|5+)dTV@_u9d%)2)VrVuDk39L>v|39!GEHr z<)%XkP|wMX3VmVJz{;VXQ-8TRc@w#r=h zyLE(hwsk!!f`?FZe9ijK8h5pMPIk=1d9NykPzn*Kxm|_YyC0&GDaIPJhZnXswhpo` z!Wu5$3s3`zzs{J}n#WoiHRrXgzZpGev^}sCYjMGT)cTCK-k8-|#@ZNv<9tt4a@|LT z_9-g#Z&9I*w82CoCTgzJp*F7Us3dHN+4cFqJB3jkSZGgV+Gs{z0u}Num>DOc9Atc}JtNe*)^dh1OM=o%&`B{QmDP3fiNepdR!NpJC8e zbNmJ7r~cU*vdz@nSr?#k<}xZ$Ur`OF-)^Qb2kPxu9yNdtm<@YuXZ_LtA z2&yBO(1-U>BYK1y(R0+>@H-a9Bs*m6N1Y6e5ffXh8j>?)Uu4Q_2H-; zbtSn#^$JzwnKHKA8Lo3f@*Lc?#Feg z>pJZ>`^+G$Nqq|vS~ zMC}uPdwzpGza7=FqxSqYR0Q5)Y5aleV5yVl_;0A3>4WKT$VtzHYB>kAaqL8WOn#3_ zwiu_(g*j1g$y%t9jYMVjMAXO^qaM819zTlO>8{%PU0gx^9ZtZxr}+a;R#z79Opx=O z17psb(DXcKdO8->&~#L?%}2dNHlQMQ92K#Ps7PH$P015fN8LY7F6G0#)FV(GT#cHF zEvV;v`zffW$5F}h7b$x-rsu^Y)8{YPbmMcq!BaD`N?)i|ud*=E5JSq|N!4 z`I6ceHITotqSpU23JPK91@pt9YFLPRZ_I?7QFDA9Gvf=?R3-k~{G7iw>iSXG91o$U zFzrRNZxlq`-wL&b_qO#J82D!?*HF;M!^@EKtN($W1p028<6}_Ioq=8+3QH(x#FtUY zbO)>AfA~8Vy=6we0dr74gvycsP*dXGHWA5cEsvVIme#ST=Wjv1eD+!I-DdskK-4=X z8?$46>Upsec0w(~?Wp9uhRWI(s1dwJZK>|vpuk_pjfd*cHPk-h-ZLGKh8k#c9E;Ua z_g}x~nFl`PfO6mkDm!D`H*=N_6^Sya5llv1Hy8EIX*ViIu3!n)^MCk=daj2iLWv)l z{Ub95bG#~Qwf%<5rQRL|eX<#gO0r3)p3k$#m!h(E6)FNJP@(@9HG-G89>1XOTlLuN zlp9eUK8>2v%czDQpzeQ(8i?mSG2huzVQUWbKs9&`)xbwo$9zvskK>~1=}_xB1l3S` zR6{*b4Gl#tyYZ;4dy#c77NmX!=?K67{mfjL2Gw9bRA@?}I#L_;dhUUG;3Ru~sXe~~ zV{!a4s^R;n_5T9(9N%+eVpMKru{OsLE!3G5a&zJ&>Mi&MwR6S$pPAcIsF5~AJ#Z?j zBg-)j?nZU|AAA0>^$RN0v0j)CrA9qJAF88OF^e{ex)c<`!Kj{(LtVHSb>S{sKa3&N zuVZ%n<)zs<3!vsQ3{zuQREH;_-W?}Uxp58k{M*S(JwuQU&Y6w+lhApn4z7G{I&utk{n^*{^ZyMFD0$wa zLLBLh32hQoM+%|d5ml^hP*dQcM&w8B1FKO}xf>OU=cq5WG2WViR76FtCaRr*Z(08t zC`{&n+<|)Vzo?Dr6_&z8@60l-hia%XDiWPBGWJF710HIFnuQwBBGeRaL{0H-RD_SB z+PSP76q=`~ERXu$gfJcI!Xma_6?MKfYDXN58sSn@t{g#i=mu8C$5<2dd@v&&hU(x9 z40H%J5O23FoI=grbyTQdTVs4QdwvGgSFLbV=q92%uo$)F9>T2n47D>R`ee@MLFGs- z)JLuXsE92>I_xNAsg1R2|h|GYrN7sO#sW zBDEFu`QQp>!?<6}@uE0F>%SR=x}123VOaF5*|8>~Lb@82gga1M^-0unI)@7VB~-_s zqaqjSo9SRGR7dioa-k|J2O6OU*cJnS|GygrZ8(!q4IV%}@GNTCJwzqTYgCd({%%H+ z4Yjq_L+zB^ZGDQZue0?ts7O7+>i7{GWBDJfe~n}*g@(8W)zip7&C4bs-lCqx)}!%V zS36!xR3u8ELRuCzr`=Ey=w+RZ8tEF;%WE5IAg8by-qi0uPo+@I^*L?XDE>liNCkZ6 zf#XpTnTkztA!@|m?eV0Me1Q&U!15f=i;7r()WAle8k~sQaF*a4++>eeiR}3T+1xC$ zFA$>c7{LX@Pz`@Vt>?&5e1YVOh581R6V*^hRA_sll6VyAEjk%B^7p9c{6sDDm{CoK zvSNGc#XSo9DXc^-qqfm}fgNiSY6NFdNplgEBe$>?#*Xd_d_ro0O2W0+7Z0PBXVG8G zeKk;1+7Q*j4ybkC9rvL(l!8W3GKSCDi(#lOGgeGr;18QCV^!*RP;;FlmM`!t*bPuy z?Kzx=KW%+lY;*l_4B>c!IKIG_+Ok-I`Y7>T_`-UPeW#bpn%&{qd64|6~fv-ZlwMNIRiI zwjC9!qo|HuLPhEpYEJ*dg7^)!^W{tA3v5iyQOmav>bX-;_sv8NY!zztY{VM0?`)%> zxr>z8G&l&g*H1)UxCWEqMpPD`Le1q>RD|xJ8hV1OSVb@KJ@uJMeS!UALNZ_AJK$C< zuj^3DJ=d>3$IC)tECoGi8>**&pq9-!)XsO;*56_V>QR%MB+P-jelY5~Db}S}hx&F~ zkCDRX+@YQlQ{xZpkEv3!{zE9tN$CrGK0kvR=?_%0B~4}4ds)<8-VB3rC}zZ^s7Reg zb?gzQ!I-Iif!B9V)Xo@=nzHVwfqAH{*`M0;1wIt6=71h_2embR!!Fn$*cbSJ3^<9} zcp}o6h9{vK+JTDTHPprxl-3vc3Re$Ee-J_t9&c^(B43#|J zP#>WZr8gl?idqF(P@&F;dSC@ih%Heg>}`(^M;$WAbriUsQSbw|o`U3w5)j2H94dwEgjb${d z!F8Ad-(eGsm*4DsU9l|n#nwkyoqDzczQA8j?}w3Ts7gW8k+4EO{xTy!Bf<*!v#`%u zr1f8+s4wt4+fPsrtW(VAY{xm+6l)eY%V{GvpdPt|S$@s19Q7@zx%`BRSoxABiC1HD z>QPGh0$Xq`nEOpj+OohH5yBdKavLZ_2a&wLVK%@CE+W+ZL!1okfi(enoR( zbKFFI6Q05rmCSyTt+EMqQ>@SNTvf~tIT|BVpMmPYJnVr_Fb_7as=c32Tva_^;E&r{ zS2L^NCTdw_s%{=!8vmxApoTB-W4cEe#N7Q|(--(6aXHNAeByjiEtBP6QLCs)xY-Bx zVHou&wawOBAN9P2_$$xp?$t4KKB2CCFzR)Bxt>|i9qXHSKyTDbX#gq-$D!u(DQcaU zZ(v@#HBs-3`KSmivGrA`cgK3vOKmS|!}HEih)Yi%V|EUFYG}5`42{fkDuO!R8?|LF zLxpq?>NOmtvDuj7q22{4QMr@T)~ljkR!!{jw$|ZDhdgJADL9)@JKuiP6kJ8Uuiv10 z9KDHIhRIMP&X3v&OQNo;W$PVK9q5lya5k!Ai%=2Vj4|*a#?<;hOF<*Kj&<+>Y8@AD zYI;5fb>mdjjf*i2u17U|-X4F1>ew4w|AyK(qBS%7Ne0vaD_L7&G_C*sD&TNbM<$?p zJPS3Kt5I{g0Tr2TsF9yXHF($7pWFI(REMKBHy^YM_#}7V72G2sNNqs1K(Rm>Ng5Wc{nB zD>YOdB;k6>Er|6*1AiF#nwwq{CNp{^f<1c+ZiHmhbfDhH0E zI(*;y2^Ha3UOQ7ri24+p+!~IW^KqzVh`4Rf_O5o(0$;BTnV@3F@Z zTQ8xO@godI?;8be3@JO95oJTwOQU*N6ZMg)9%jT&sO2@)p5KI;vYn{=j^cUz8$)nO zM_=II6~BmIsJHIqb9xe@W}S(+{&knjzY%f{Jn3S-c)aOqUdOq*nGvkS4BWU8vvS>K zR79NaCPL9s9f*Tko+&UrW=3_q8s^6q7>u(}Q@1-H+4C0#h2$}6xqU}{kO=Bw>cugL zdKpv$<*_r?LT$kZP)V2~!WZ~UtMhOc^}IdJK5-7qQ~wVeVg6obnNP(Qx^X^*O!yN| zVW!@`!0+?DMvb&dACr`AQ6cVzn%hCB92tq4s`02K_M=9=0+oDwFdbe+E$^?W)e@sG z9oL0fDd>U4Q4N+yMWhBQYulh!ML*O=G8~od+fdh?Lq+aB=EEnb4yEd6K6GY4T~`b> zRpF>9Xx@+YuM@rPfeEM`ZW*d$2T(n|h(3ISdhiF-+v_{(Q*E;TW{Ps7=02~r0cuAb zgt~r=J-!^(k<m+-AnnyuBnTv&R6_&?)sK{g)XnsCW0@bk}s1e5>B8o}SF3$CI@@C23puTdfWZqG*> zY+g3WP#wvPO0sIG>zbf8sP?ESn1<@eCZp$^rl6hg0V=d9hM24kMkQY{Td#$RR9DnH zV*qL+8i$&K)u{W|p(3{l6|v)}`)=6!V_W}9_VxV`-k$ES|oj39L7G4=ehCggIv`io5nb-Vk2pWu(&kuxLw(I;kd zn{3TJv8(G&^Dmxs#O=Ga&E)<*cai_DzmeP0Uu;?uw~xQhv_|e?|K@2Q-ELb~Pw(Wq zEBuLO4s(b5XU`nvPWPvomD;VlwbZOkL2ey?hdBk@h5p5J!rjvT_j881W&C~lKN*|j z-#0hhZSRjauZ-KqUuRxAx3$0TyiD%z{>AeWxDEZ==cRV5`7h6_;tuwwnSa9d{7>iC zbI1EjEeLg|_W2H@ukzeV{+_Et-DUpOt2?<1{E612c7OBdThq#|<)2M? zjDPo%-)d%b8-X6=ueK|7vH_e~$n~9Z6a5b1zO&TF4I8m*=ZIbI@Pbhq z_so+!By?xA*KTefm5`9qp*!=xa~DR+T(d^)9A&z`aZrN|Npeq1AJcO{{yi4(y#yk diff --git a/resources/i18n/sv/BambuStudio.mo b/resources/i18n/sv/BambuStudio.mo index 7367fb9b44d157354da9452dfcf2153b282b2c1a..fd695d41125f848b32c00b1fc0384067d9576635 100644 GIT binary patch delta 36491 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 delta 36592 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

    h8JB5pDd(1ni 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 Y^r}0HqVLa)y1ORwe3+3xa)&Kwi From 3fff9b5c7f4a23f3e44d432ab88d2f624af64b1c Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Tue, 11 Apr 2023 18:36:31 +0800 Subject: [PATCH 294/339] FIX: [STUDIO-2563] snapshot dirty load 3mf on post_init Change-Id: I769eae7924ef3f1fefb4a9ce1a8280f477a7d49e --- src/slic3r/GUI/GUI_App.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index e0b0b52764..b465f0b678 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -61,6 +61,7 @@ #include "../Utils/Process.hpp" #include "../Utils/MacDarkMode.hpp" #include "../Utils/Http.hpp" +#include "../Utils/UndoRedo.hpp" #include "slic3r/Config/Snapshot.hpp" #include "Preferences.hpp" #include "Tab.hpp" @@ -1030,11 +1031,14 @@ void GUI_App::post_init() else { mainframe->select_tab(size_t(MainFrame::tp3DEditor)); plater_->select_view_3D("3D"); + Plater::TakeSnapshot snapshot(this->plater(), "Load Project", UndoRedo::SnapshotType::ProjectSeparator); const std::vector res = this->plater()->load_files(this->init_params->input_files); if (!res.empty()) { if (this->init_params->input_files.size() == 1) { // Update application titlebar when opening a project file const std::string& filename = this->init_params->input_files.front(); + this->plater()->up_to_date(true, false); + this->plater()->up_to_date(true, true); //BBS: remove amf logic as project if (boost::algorithm::iends_with(filename, ".3mf")) this->plater()->set_project_filename(from_u8(filename)); From 362c3656792fa542e7a853c930e4d0884151b58b Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Tue, 11 Apr 2023 20:34:46 +0800 Subject: [PATCH 295/339] FIX:changed name is out of sync with printer, when send to sdcard Change-Id: I357c0f6e53f1413af57e26e68ab44c6e76ef0ce1 --- src/slic3r/GUI/SendToPrinter.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/slic3r/GUI/SendToPrinter.cpp b/src/slic3r/GUI/SendToPrinter.cpp index b279ee1098..3e64351da6 100644 --- a/src/slic3r/GUI/SendToPrinter.cpp +++ b/src/slic3r/GUI/SendToPrinter.cpp @@ -363,6 +363,11 @@ SendToPrinterDialog::SendToPrinterDialog(Plater *plater) m_rename_input->SetMinSize(wxSize(FromDIP(380), FromDIP(24))); m_rename_input->SetMaxSize(wxSize(FromDIP(380), FromDIP(24))); m_rename_input->Bind(wxEVT_TEXT_ENTER, [this](auto& e) {on_rename_enter();}); + m_rename_input->Bind(wxEVT_KILL_FOCUS, [this](auto& e) { + if (!m_rename_input->HasFocus() && !m_rename_text->HasFocus()) + on_rename_enter(); + else + e.Skip(); }); rename_edit_sizer_v->Add(m_rename_input, 1, wxALIGN_CENTER, 0); From 415fb2989d00ca40530657b8d5d2b2cffc3dcae0 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Tue, 11 Apr 2023 21:13:44 +0800 Subject: [PATCH 296/339] ENH: modify Support W/G display name Change-Id: I8fbdea4411073a74df804cbcc466027b1c3e941f Signed-off-by: Stone Li --- src/libslic3r/PrintConfig.cpp | 22 ++++++++++++++++------ src/slic3r/GUI/DeviceManager.cpp | 10 +++++++--- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 4049efa914..43a35eeca9 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -4264,24 +4264,34 @@ std::string DynamicPrintConfig::get_filament_type(std::string &displayed_filamen if (is_support) { if (filament_id) { if (filament_id->get_at(id) == "GFS00") { - displayed_filament_type = "Support W"; + displayed_filament_type = "Sup.PLA"; return "PLA-S"; } else if (filament_id->get_at(id) == "GFS01") { - displayed_filament_type = "Support G"; + displayed_filament_type = "Sup.PA"; return "PA-S"; } else { - displayed_filament_type = filament_type->get_at(id); - return filament_type->get_at(id); + if (filament_type->get_at(id) == "PLA") { + displayed_filament_type = "Sup.PLA"; + return "PLA-S"; + } + else if (filament_type->get_at(id) == "PA") { + displayed_filament_type = "Sup.PA"; + return "PA-S"; + } + else { + displayed_filament_type = filament_type->get_at(id); + return filament_type->get_at(id); + } } } else { if (filament_type->get_at(id) == "PLA") { - displayed_filament_type = "Support W"; + displayed_filament_type = "Sup.PLA"; return "PLA-S"; } else if (filament_type->get_at(id) == "PA") { - displayed_filament_type = "Support G"; + displayed_filament_type = "Sup.PA"; return "PA-S"; } else { displayed_filament_type = filament_type->get_at(id); diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 979121d667..4ac30cdbcc 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -186,9 +186,9 @@ bool AmsTray::is_unset_third_filament() std::string AmsTray::get_display_filament_type() { if (type == "PLA-S") - return "Support W"; + return "Sup.PLA"; else if (type == "PA-S") - return "Support G"; + return "Sup.PA"; else return type; return type; @@ -196,7 +196,11 @@ std::string AmsTray::get_display_filament_type() std::string AmsTray::get_filament_type() { - if (type == "Support W") { + if (type == "Sup.PLA") { + return "PLA-S"; + } else if (type == "Sup.PA") { + return "PA-S"; + } else if (type == "Support W") { return "PLA-S"; } else if (type == "Support G") { return "PA-S"; From c51d9c994f3f31c42a0b88a7166657b69f643dcf Mon Sep 17 00:00:00 2001 From: gerrit Date: Wed, 12 Apr 2023 07:53:24 +0800 Subject: [PATCH 297/339] ci: update build version to 01.06.00.57 Change-Id: I4dae551184bbb2b296723dbf5b58dee25c69610f --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index e6d02f0851..4fd19976e8 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.06.00.56") +set(SLIC3R_VERSION "01.06.00.57") From bc0fe0c8bc6e34d9cd6832b0309656880f9fa03f Mon Sep 17 00:00:00 2001 From: Stone Li Date: Wed, 12 Apr 2023 11:01:30 +0800 Subject: [PATCH 298/339] ENH: compatible with filament unload of new firmware Change-Id: I0b01a549929e716f0ac05176ba5dc05c360c081b Signed-off-by: Stone Li --- src/slic3r/GUI/DeviceManager.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 4ac30cdbcc..bc74be42fd 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -1892,8 +1892,8 @@ int MachineObject::command_start_calibration(bool vibration, bool bed_leveling, int MachineObject::command_unload_filament() { - if (printer_type == "BL-P001" - || printer_type == "BL-P002") { + if ((printer_type == "BL-P001" || printer_type == "BL-P002") + && !this->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY)) { // fixed gcode file json j; j["print"]["command"] = "gcode_file"; @@ -1901,7 +1901,10 @@ int MachineObject::command_unload_filament() j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); return this->publish_json(j.dump()); } - else if (printer_type == "C11") { + else if (printer_type == "C11" + || ((printer_type == "BL-P001" || printer_type == "BL-P002") + && this->is_function_supported(PrinterFunction::FUNC_VIRTUAL_TYAY)) + ) { std::string gcode = DeviceManager::load_gcode(printer_type, "ams_unload.gcode"); if (gcode.empty()) { return -1; From 87abd65ea40056ad2bee34f68940e0c4fea7bd6d Mon Sep 17 00:00:00 2001 From: Arthur Date: Thu, 6 Apr 2023 20:48:58 +0800 Subject: [PATCH 299/339] FIX: do not allow support thresh angle to be 90 degrees tan(90\degrees) is too large and will make detect_overhangs very slow. Jira: STUDIO-2620 Change-Id: I55901a6bc1b56216549f66e1a7e77c0da680997b (cherry picked from commit e58cc8a4665808580e84107f54661447000d64f3) --- src/libslic3r/SupportMaterial.cpp | 12 ++++-------- src/libslic3r/TreeSupport.cpp | 7 +++++-- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/libslic3r/SupportMaterial.cpp b/src/libslic3r/SupportMaterial.cpp index 32f5f8391b..38b3a9d514 100644 --- a/src/libslic3r/SupportMaterial.cpp +++ b/src/libslic3r/SupportMaterial.cpp @@ -1549,9 +1549,10 @@ static inline ExPolygons detect_overhangs( const bool buildplate_only = ! annotations.buildplate_covered.empty(); // If user specified a custom angle threshold, convert it to radians. // Zero means automatic overhang detection. - const double threshold_rad = (object_config.support_threshold_angle.value > 0) ? - M_PI * double(object_config.support_threshold_angle.value + 1) / 180. : // +1 makes the threshold inclusive - 0.; + // +1 makes the threshold inclusive + double thresh_angle = object_config.support_threshold_angle.value > 0 ? object_config.support_threshold_angle.value + 1 : 0; + thresh_angle = std::min(thresh_angle, 89.); // BBS should be smaller than 90 + const double threshold_rad = Geometry::deg2rad(thresh_angle); const coordf_t max_bridge_length = scale_(object_config.max_bridge_length.value); const bool bridge_no_support = object_config.bridge_no_support.value; const coordf_t xy_expansion = scale_(object_config.support_expansion.value); @@ -1731,11 +1732,6 @@ static inline std::tuple detect_contacts( // BBS. const bool auto_normal_support = object_config.support_type.value == stNormalAuto; const bool buildplate_only = !annotations.buildplate_covered.empty(); - // If user specified a custom angle threshold, convert it to radians. - // Zero means automatic overhang detection. - const double threshold_rad = (object_config.support_threshold_angle.value > 0) ? - M_PI * double(object_config.support_threshold_angle.value + 1) / 180. : // +1 makes the threshold inclusive - 0.; float no_interface_offset = 0.f; if (layer_id == 0) diff --git a/src/libslic3r/TreeSupport.cpp b/src/libslic3r/TreeSupport.cpp index 8c07dc37e9..2b7c2cbfb4 100644 --- a/src/libslic3r/TreeSupport.cpp +++ b/src/libslic3r/TreeSupport.cpp @@ -752,7 +752,10 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) // a region is considered well supported if the number of layers below it exceeds this threshold const int thresh_layers_below = 10 / config.layer_height; double obj_height = m_object->size().z(); - double threshold_rad = (config.support_threshold_angle.value < EPSILON ? 30 : config.support_threshold_angle.value + 1) * M_PI / 180.; + // +1 makes the threshold inclusive + double thresh_angle = config.support_threshold_angle.value > EPSILON ? config.support_threshold_angle.value + 1 : 30; + thresh_angle = std::min(thresh_angle, 89.); // should be smaller than 90 + const double threshold_rad = Geometry::deg2rad(thresh_angle); // for small overhang removal struct OverhangCluster { @@ -3289,7 +3292,7 @@ void TreeSupport::generate_contact_points(std::vector 0) support_roof_layers += 1; // BBS: add a normal support layer below interface (if we have interface) - coordf_t thresh_angle = config.support_threshold_angle.value < EPSILON ? 30.f : config.support_threshold_angle.value; + coordf_t thresh_angle = std::min(89.f, config.support_threshold_angle.value < EPSILON ? 30.f : config.support_threshold_angle.value); coordf_t half_overhang_distance = scale_(tan(thresh_angle * M_PI / 180.0) * layer_height / 2); // fix bug of generating support for very thin objects From fd787adf6ba3910710d1c594cd89fd71aba55a3d Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Wed, 12 Apr 2023 11:15:58 +0800 Subject: [PATCH 300/339] FIX: unload default user presets Change-Id: I55e289708603f06263a64d4cfbfd1db596fdc864 --- src/libslic3r/PresetBundle.cpp | 2 +- src/slic3r/GUI/GUI_App.cpp | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index ac3aa32bd0..ad9cd1e669 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -866,7 +866,7 @@ void PresetBundle::remove_users_preset(AppConfig &config, std::mapis_user() && !it->user_id.empty() && it->user_id.compare(preset_folder_user_id) == 0 && check_removed(*it)) { + if (it->is_user() && it->user_id.compare(preset_folder_user_id) == 0 && check_removed(*it)) { BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(":printers erase %1%, type %2%, user_id %3%") % it->name % Preset::get_type_string(it->type) % it->user_id; if (it->name == printer_selected_preset_name) need_reset_printer_preset = true; diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index b465f0b678..5efdc62c7c 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -3962,15 +3962,15 @@ void GUI_App::on_user_login_handle(wxCommandEvent &evt) wxQueueEvent(this, evt); }); - if (app_config->get("sync_user_preset") == "true") { + + + if (online_login) + GUI::wxGetApp().mainframe->show_sync_dialog(); + else if (app_config->get("sync_user_preset") == "true") { enable_user_preset_folder(true); } else { enable_user_preset_folder(false); } - - if (online_login) - GUI::wxGetApp().mainframe->show_sync_dialog(); - //show publish button if (m_agent->is_user_login() && mainframe) { int identifier; From 9b1865667bcfef3748a9dbe8644f1622cea6ee4f Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Tue, 11 Apr 2023 20:10:57 +0800 Subject: [PATCH 301/339] FIX: lack of german translation Change-Id: I45f8711d56180bd226f14552d1e1363722b2c345 --- bbl/i18n/BambuStudio.pot | 2 +- bbl/i18n/de/BambuStudio_de.po | 22 +++++++++++----------- bbl/i18n/en/BambuStudio_en.po | 2 +- bbl/i18n/es/BambuStudio_es.po | 2 +- bbl/i18n/fr/BambuStudio_fr.po | 2 +- bbl/i18n/hu/BambuStudio_hu.po | 2 +- bbl/i18n/it/BambuStudio_it.po | 2 +- bbl/i18n/ja/BambuStudio_ja.po | 2 +- bbl/i18n/nl/BambuStudio_nl.po | 2 +- bbl/i18n/sv/BambuStudio_sv.po | 2 +- bbl/i18n/zh_cn/BambuStudio_zh_CN.po | 2 +- resources/i18n/de/BambuStudio.mo | Bin 232993 -> 233252 bytes 12 files changed, 21 insertions(+), 21 deletions(-) diff --git a/bbl/i18n/BambuStudio.pot b/bbl/i18n/BambuStudio.pot index 0010c5f93e..3a411bdec3 100644 --- a/bbl/i18n/BambuStudio.pot +++ b/bbl/i18n/BambuStudio.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 17:50+0800\n" +"POT-Creation-Date: 2023-04-11 20:18+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/bbl/i18n/de/BambuStudio_de.po b/bbl/i18n/de/BambuStudio_de.po index d49d470db9..d4331b30e9 100644 --- a/bbl/i18n/de/BambuStudio_de.po +++ b/bbl/i18n/de/BambuStudio_de.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 17:50+0800\n" +"POT-Creation-Date: 2023-04-11 20:18+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -525,7 +525,7 @@ msgid "Horizontal text" msgstr "" msgid "Ctrl+" -msgstr "" +msgstr "Strg+" msgid "Notice" msgstr "Hinweis" @@ -829,7 +829,7 @@ msgid "Show" msgstr "Anzeigen" msgid "Del" -msgstr "" +msgstr "Entf" msgid "Delete the selected object" msgstr "Ausgewähltes Objekt löschen" @@ -3247,7 +3247,7 @@ msgid "Save Project as" msgstr "Projekt speichern als" msgid "Shift+" -msgstr "" +msgstr "Umschalt+" msgid "Save current project as" msgstr "Aktuelles Projekt speichern als" @@ -5840,7 +5840,7 @@ msgid "⌘+Shift+G" msgstr "" msgid "Ctrl+Shift+G" -msgstr "" +msgstr "Strg+Umschalt+G" msgid "Copy to clipboard" msgstr "In Zwischenablage kopieren" @@ -5870,10 +5870,10 @@ msgid "Zoom View" msgstr "Ansicht zoomen" msgid "Shift+A" -msgstr "" +msgstr "Umschalt+A" msgid "Shift+R" -msgstr "" +msgstr "Umschalt+R" msgid "" "Auto orientates selected objects or all objects.If there are selected " @@ -5886,7 +5886,7 @@ msgstr "" "ausgerichtet." msgid "Shift+Tab" -msgstr "" +msgstr "Umschalt+Tab" msgid "Collapse/Expand the sidebar" msgstr "Seitenleiste zu-/aufklappen" @@ -5919,7 +5919,7 @@ msgid "Ctrl+Left mouse button" msgstr "Strg + Linke Maustaste" msgid "Shift+Left mouse button" -msgstr "Umschalttaste + Linke Maustaste" +msgstr "Umschalt+Linke Maustaste" msgid "Select objects by rectangle" msgstr "Objekte per Rechteck auswählen" @@ -5949,7 +5949,7 @@ msgid "Move selection 10 mm in positive X direction" msgstr "Auswahl 10 mm in positiver X-Richtung verschieben" msgid "Shift+Any arrow" -msgstr "Umschalttaste + beliebige Pfeiltaste" +msgstr "Umschalt+beliebige Pfeiltaste" msgid "Movement step set to 1 mm" msgstr "Bewegungsschritt auf 1 mm eingestellt" @@ -6074,7 +6074,7 @@ msgid "Move slider 5x faster" msgstr "Schieberegler 5x schneller bewegen" msgid "Shift+Mouse wheel" -msgstr "Umschalttaste + Mausrad" +msgstr "Umschalt+Mausrad" msgid "Release Note" msgstr "Hinweis zur Veröffentlichung" diff --git a/bbl/i18n/en/BambuStudio_en.po b/bbl/i18n/en/BambuStudio_en.po index e33d00edba..e6118bade0 100644 --- a/bbl/i18n/en/BambuStudio_en.po +++ b/bbl/i18n/en/BambuStudio_en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 17:50+0800\n" +"POT-Creation-Date: 2023-04-11 20:18+0800\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/bbl/i18n/es/BambuStudio_es.po b/bbl/i18n/es/BambuStudio_es.po index 8583430ba8..ad4bd76f4f 100644 --- a/bbl/i18n/es/BambuStudio_es.po +++ b/bbl/i18n/es/BambuStudio_es.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 17:50+0800\n" +"POT-Creation-Date: 2023-04-11 20:18+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" diff --git a/bbl/i18n/fr/BambuStudio_fr.po b/bbl/i18n/fr/BambuStudio_fr.po index c01863fece..ce32a28330 100644 --- a/bbl/i18n/fr/BambuStudio_fr.po +++ b/bbl/i18n/fr/BambuStudio_fr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 17:50+0800\n" +"POT-Creation-Date: 2023-04-11 20:18+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" diff --git a/bbl/i18n/hu/BambuStudio_hu.po b/bbl/i18n/hu/BambuStudio_hu.po index ee3f7e32b0..075f65e301 100644 --- a/bbl/i18n/hu/BambuStudio_hu.po +++ b/bbl/i18n/hu/BambuStudio_hu.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 17:50+0800\n" +"POT-Creation-Date: 2023-04-11 20:18+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" diff --git a/bbl/i18n/it/BambuStudio_it.po b/bbl/i18n/it/BambuStudio_it.po index f9aafabd61..c603b1e922 100644 --- a/bbl/i18n/it/BambuStudio_it.po +++ b/bbl/i18n/it/BambuStudio_it.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 17:50+0800\n" +"POT-Creation-Date: 2023-04-11 20:18+0800\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/bbl/i18n/ja/BambuStudio_ja.po b/bbl/i18n/ja/BambuStudio_ja.po index 7e3e550ad7..fafcdaf8d2 100644 --- a/bbl/i18n/ja/BambuStudio_ja.po +++ b/bbl/i18n/ja/BambuStudio_ja.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 17:50+0800\n" +"POT-Creation-Date: 2023-04-11 20:18+0800\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/bbl/i18n/nl/BambuStudio_nl.po b/bbl/i18n/nl/BambuStudio_nl.po index 9db03e873f..ca79c9f8c0 100644 --- a/bbl/i18n/nl/BambuStudio_nl.po +++ b/bbl/i18n/nl/BambuStudio_nl.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 17:50+0800\n" +"POT-Creation-Date: 2023-04-11 20:18+0800\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/bbl/i18n/sv/BambuStudio_sv.po b/bbl/i18n/sv/BambuStudio_sv.po index b3a9aeef62..d55af87cc5 100644 --- a/bbl/i18n/sv/BambuStudio_sv.po +++ b/bbl/i18n/sv/BambuStudio_sv.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 17:50+0800\n" +"POT-Creation-Date: 2023-04-11 20:18+0800\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po index 70af9fbfe1..4beb6a27d5 100644 --- a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po +++ b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 17:50+0800\n" +"POT-Creation-Date: 2023-04-11 20:18+0800\n" "PO-Revision-Date: 2023-04-10 17:13+0800\n" "Last-Translator: Jiang Yue \n" "Language-Team: \n" diff --git a/resources/i18n/de/BambuStudio.mo b/resources/i18n/de/BambuStudio.mo index fbffd5bdd51636c4172e4ea10e113518010dd017..6be26adb1e004756efb342ebe751852ddc5b699c 100644 GIT binary patch delta 47911 zcmZ791#}h1!-wI`4G@BBagyL365JsW+}#Q8?oe3V-MzRMin~K`cX!vK#lQD=XZW9< z@1Aq}%*@V?&+LtmE|?Q*@w`~>t$2~9I=og#b)4k*d${9Fj_x=&Mk&>CGHi1kf6RzU zF$WgKidYKAV;;PWMKJbu$KiIT5_ZFS=!0jl7@ou8m|zEGJC5trCXkJUf#{2WVKm%` zA-D(2;y;)V3+{BBVC;cOa4E*Xy_gJ7q8j`Zf5UgyXuBMTJ~}}d2Qy(Z>URnd@FSrX z#==IZ26R9b)Egt?VCzU!h2w2}j&&ib=gYAVZbbDwc(*YGBN5MmDlad_pnj(?0aa8E z)#4i18{1(5e1y93E2=^5EQ_&nXYpfd|yyg=6ldo91B%WGE_&>qORw_ z*jO0Vz={W5Q(!$3v?$u63ha+6V7SdV5!(=-hpO2BkeQkk)=+CH)X3CFOTL&CSQEi?#Ykp zX*+9g>oC+vx|0cL4J<(o%?`|q$5D$c(h&;5T$mF(;e1?zWN}I!HQP7VF|!B@p&C9B z8C>Tt)S}LQ+^qUi=tsN)GWD)ggMfytF=oJSm>K7yw$V}44JA&P29`&SSbZ#woiG({ zv)6B+dj0|{Vak(cWICYk>xJs*7_6Ws&LI$kgl8BHKUqDe%zloEQAtmN%9qN~D;MXHg?| z1tZ~e)ZD+p#P|iHWBfCw!2zhb&VouWjM=d)y6Xw_B@hR*oi#^j5md$XP#ODRWn6_S z;2WyKsOLB(F&=7;2V!!Zfg^DfYEc(CZw{d1s3~ZO>9Nas#$R(civ;y#7pe#QQLFws zs$rio9Y(ugPPP#2PrNf~^}oRYta#CJx?%^+jQ4Of#=69`;4IV>roL>pZ}!WKzlJuP zgt%B4<6{$4%X^@1=!5FA1%Q5@}xIpWj0 z1O|}s2dYPbR~bgd@iPWpbDRyB>^gfGPosKR@CLodzpxvoy6HGWa5^fU{FdVk!ihK( z6Wlfpo`o9mMW}|je-lv8@1jQH9cs1yKrObIcg$KyfEt+`s5MXubze11gw0V?*AJC% z8fs0fM3uMC#?N46;*XK?UFRhM4c&WG!IAGe&K8V|S`$ZcCZ0k~L92VFpd;afUx(f`hMKzl=&${M+$LP~COFP5RD+(NTK*YzW7PYm!kDNEQlREK zBWeT+qE6E4sG)6R9f}%}`KbFgqRQWk38~*XOJEf~Mh)TQ2j+&=sDk#QdUzdm{T?R4 zuc!tld}vm48f!jOLn@*wZibqwUYG$#;X>SiZYlybADOx8jX}gGpekIC>ftujDn5Z) z?N?D#@ffuz|G|vd@Ui&-G6IVbzlQlS=@WB*4U9s(2}Z)!PZ)pAVFwaqf7GHGhZArK z_Qu>#&CvaYIu~}LdUOqg@dau~lRq=pv!X_>97e_#s1a+2>d-LEfis^m{!Iv+Bq0lC ze{O7mYS1WD&u5_;whS}kZp?{KP!*?mVS1JgqY}@Bepnb+U`f)or7X692@Ggd8qF3fqZ&}Pud^J5@N*qo?8jOysQ59{)IQSCPpdYA@*&+X!`zoLcs)jMJiM69m{~a~wqpg!L zHu0IrRJhIx0(xldL=}7$)8Ys8$7FBKK2D2TG}*BX=0dFn*T(0fdiL0+d)}Fz2VzOm z!%!nN616+#p`Z5uMgplx*l9D|!T7{K*tq|Dv+7e~G}5ym)9BMuq*F8T>d9kgDPz?&e1XvtXVr?9VZchR#=rfMNXg|$%nU1RX z7HV#vqbhofYS>q-j&vXQU{ z)8Z?viV1vuoVwT&BXB=zj#EeS@$QCDJV?9*YA*dFoBLDYpTtXJe*9?DL!$UNw}{t5 zO<`_7A3E-`LJ4R{tKw*Eh3e^h)SP~|#*AtzPJwD@FltU~pnBfg#=E1A+>scFt8DrS zR0r;$7V~S2Oa0Dg0%}oof76rStih=5RT_0;Mbx%yfNF3P)DZVVHDCf}#5t%2{*79M zFHq(9Me}irVNBGNRzf$BKurQ_Ku^?K7=#&cGHL{Nq8e}lRp50jh##>j=7{d&Jz}RL zv*+BxQl#IF;p6=hEMrU`r#2eJmgEVyl8`Ktt4t*U>r<1Bg$? zOt=Bnpj)V(y+kd_cQzg+wvTtU$FK&WMl3h#V_+*8(!P%-%+bRaeTA7v!D)^3aG`{1XXb#RD-6Vrg90YBU?}-vma@w>zuF` zZrBTtQA7C;s)t`tLme}L=~;4A0a7lAJx$NSP?&B5e!e{<8;TN7>r+04auC? z$NN|>jj^fUX+}Up-VN2Wv8W-Rj@s8tZ2CIXlT8&Y7MMLmAe}=;)Uew{~iQ>knlTpPhp1mEoutCWct5jEMK$Oi zs)vs;2xFx2aW-N$)KuI@Hi+Y&*2Gh!^Ko{PUL3Uxob;v~f7F_Zh3Z%W)GlxXY(gH? zz70d|=lYlvJEMBC6txXE+V}xfL(XCr9G1aUxWT&9dI(kFDby~xiW-p@$Vj=)djeV< zku#d@kqC7lFMGgH}RLhs63fzkt^7E*IAE0{r0+sKrHCiUK%Tl3sMFEVa z{U1(1pL8mtwnqchoVP|5+zD0iKm1ZtScz)r z2J2RIm9UF|D%y{l%X6p$=_jh7#94iuN0<&(am;MydIHpaSy4k;2s2?R%#2-7BRkJt zUxgaEP3Xa++1UR&5>JqzhCIb7_zM5T!NKN(MM!q@fua|dBz-T2qF;#FHTkhD@o^ZP zlCPo~@-T;wvmWE*G!-8}jl^YCNABcg|7(#wCP4>;UoJEBDN(y1D{2J7P(7`TLooui zHXfn!eL_u9jNIm22*5z%1yB{$$C20+mG32L(K~J)Q&2qA(4|cc^ka1p8EuBSuwIJ=GKMcp4}t4Yfy2&0tgq z$DkJLEPH)jG1m;`VG`7$3#g&}hU&3@n2-0{a>+0k@k*%cLs11yLgib5`EUnnBtBTb zqk0^JsI_tyH8poo z6~05==Uc)wC=u%Z0Mx@M6RKV}yA2e=Y$TLLJ)L@^D(Hv0aX9MCo`mY*R8)m?QA7I| zsv)~k9XW}*{~l_My}$^3hbq5%xVKz>{!c(d*c9tvchu0F#trxwRp9KBre}Xy_gc?b z@1UmSjn%J|iKn#YLanLtsE1QWOs)Mtn?M#4_Mn~xFE9hfC~a=YWvy-PYn_K*$hQyG z^POdk$F0|_Pf_Q>zt;F=O+1^_{x3tI7&b%A-BRmj>)+N(ScB`2P;*$YoEh3M)KHhP z@oK0Mtcx1zE;il+RsJ~CZkmT~0|MI#XowS+HzSZ0m7xNr!Pcmu8;9R;9V-8t3g)47 z0JRqGqUQQNYE67aHN?N7G02(^b-hYO_P>Uv5ee#1AJk$SfLgtyQ3d{i+Q&;#p9R;V zdVCZ$^yg9c-$U(=CpP^h>g4=pjatb(V-lcNf9^``f89`=1Z6CZQ?a_u@C>y!K3UUL zHt{Of{;2)D3e}N)sD|D^ZQqBe2LC`cIB^w|FBNK=7jg;chKi`3*Ft4%f||Q_s0MaI z-OwF1^usU@&PI*YdDKJZF=~4zu4=vr4MYuf1eV1Ps9mxRb)S2NfO`G_Rq-2CL%yJ% zc9E-@wU7q2O^c!$R26j|)WY&u7j@qBpzW}{E6yt+Unl?u9J;`j?R3T z5xbfT&RoD4h7q5J zfp`_8YyW>CpcY1{V}>{ZYDChZrXa%VqK14PszD2|6D~(hO_I9i+j5yv@m8oc)5kg* z+Yq0F>Cvwq`(KM7n1F_?IBIAsp@zPewHXEy?~Lm4BvihIsHs_rDrY0A;v<*^uVEAP zt8eaWgKBsm)Q8!D_1XWG2>d}pPJC@Iq-kKjPZx$2NpFpTxD_?$S5XbTg{km4sspha zn)IZohNQRVvzD{h8=&&HX~_Q99QCjnMxuH$8`aabr~_sX=EhT~?H9R`IVqE(^5;j5 zNJZ4@u8C=|5vs>SP*X7)HDYs69a!qx3>#1<*miqiuk|FVf!9z4y+kdx_oxDYqIw!9 z!o*Wy2I4tT53~BHhW(Ce*br2Q#-i4oJBNU_-Aa4m0%}O_qk0ylv56-|HLwus#^R`F zL={xQ?NKAs12sjXQ4O4c{c!I)DNW5#*KKABYJ;k%D{2aQqY560 zs(7Bgz8W=z>rr1r?m;c88<-8hpcY}q=4Qxiq8b{38j;ps*?*l0sHeSAi()J)<4jaT z7NSOIIcf^dp?49Yrs5VB#iv*mGqo@k_d^}gD^X9`d#DB$ZE4P#hL~LYe<6YNxCe9L zV@!)FTA7{~NA;*Ss=(o>-LeO>;(M%xsal)-eNa6gkBM+6ssk5LYv~87gK^ui|24!( z320SjLXAL9)Z7(C4OJD?P}f0?R0|BpKB%GJi)zqK)BzK(t+5}fyeFu7-s1)4K2keV z?$!3}|C(I5+up}1gn2udA@6~@@ptP897lW#UdGfNeVoPk6^G*dPCnk>7f9FHG;|AU z>JDOMJce33$-0=1X2cA{b98Y{MfFM0wrGW#f}R+Pf7<X!M7j<7s)EWs!eKIO%(>r23?f(G; z)bq)xxt)cY`{mYMsDjQ}@1s6czDL~`tDjjL2~j;vi5jtNHeLvWiC3`pL!BFcqN~7l z0-AIG{-%Y2sCWrXhxJem7=+sYlTlN%3^nw7P!%4sUO+YEzV#idW4`P*otSY^&zR&c z`(Hy?gaqAC3RO`pRL@$Wu6IN&x}K<>PeK*68a3xzQ1=~06?_fVuft}AZRiX%tJ@#dz>KH{grEn*@B)UTMk?tb zvvxvJ4bOv`;xLzhj@DYJ5ol&FbhGi1r~+o94xn|Yp*)3Z*bUVEPcSonK#f$;U^A5k zQ6mw7>9GYW|2WjPbY~OL{@;b_!Fg269-xNmGiucr7-A|eYORPWxIXH>Ca4kXimITG zb+}ERg6jEfo4ypO*L5}!&>S8`_3Sz-<5Sd>yhn|I-%zuS0#NY+s1d7%nzE*-Pt858 z>umaS>rYfi;tw+;ml&gJ|ED3K24qEzL=n{LuYszl9qREp1XbZ0)PCNLT07TJQ{y|_ zqz9s=pdf0lcBAI#1nQ&GSp9pVyD14g2HGy@yq zVjO~z#`6;oAFg8!;%6q90@F=2Yak2eCOtRmq14`{4?~qV0rTM;8^45_ntP~i>pml( zq5X>eFzO_8VHj%errY>3Y)E`7Du1HMrXguiJ6NZ`=c6k2LHgjm<0z;_i^gs8q9&wW|&1-7z-1x zirQ`yu_vxWZM%#!%?K4nmD>ir-~a1NAQK7GFc)Tp3X+a7g<-L=6D^h z#9gS4w3=;3v;zhcAAvdtwxV{^BUDEc&SC#|BM?SFE!u)wj7RWqyo@Sv-dytuX))^h zGt}DnjM^3c^US`EhgutHP#p#1}6xQ#5R$Yldd&Li77L z7qBK7k}NXmolx6l9;(MnQ59`QHT)o|Cl^tR@G(}v$cxSOYN+eYY`h1SCO+K8&$tBk zk#H9^G>ev)#kU!CfJ9wt<}ehs3!0#IOFz`Mn~oZRH5iB|F&(}_*OJziWj4Xcs=Sf+{!KRFCST z&iW3hhK)w$TYzfVT8xH&qxbiJ&l1qkU&Szdf!f!>tIdbRrl>VB8*AWO?2o1YG~4tr z&L`e%jgPYcBd;|dt(KwI#8GUIk8vW__{%(F9%CiWA1C)ZA7?BM!x5NZz3KT}3@5%D zb+Sd;UYZA^>5?eKAqVL{x9 zemmL!)d(Ei$+u9bIPorS#5%iuoav;G+he|wkZ!LjXd?C{{Rmda68p>u&BQvyZ(|kA zx8J0X#`46^ViQbxz{mUZ#(`Lo`1S+re{C24gC=8kEKIx~uE3o*3tJpAAE$l(Hj6VY zYO$3@ZKt}Z18Wefyc4L7y+f_3Qish5jl!bDcVj{P=@QUT7d&E~c6Bk7_$drTpQENn zsW2b$Zm1z$gIW_0aXzL#W*$-pF$3{t$9?2kG?cHu?5ibrwnX&+}V_CDj|+`;^3%?KnrXVSw^```DxDW^Dw z5Fdn0jq7Z*7kn=GIH$Q#6klPSi$308!TyO#FL22$(&(4XIWYwF447i$Gg05LSb^F# zFHt?sam9>aAyoeH7#XLaN6-IR1au(GMLj&0qt5nqsEYTaR`sN-=A_($n)4H=^!GMB z$u+a>vY{%fhiX8CwGFD=Zs>jYNjbjMth@6WWiB+hAHlrG{AGL~)V*!kH z!}P2y>i+5&1)HNDPVG#5qNpLRjOs}Z)YGn>jrTy^_dDvoq1N%J`(~m(Ezi5j{tqOug#;CJ1vNLfP!&DG zApD3Lp~SaLPt&2UXSMM{c$#<#RD}s{o9ii24aM^Ob{K@Hs_)SNy?_4E^}hd%er!IT`;z-p*9&=i%g6Z&8u)OW#tM;^znGoOG~ z^%hjcCs9*y57pymm;v9Rj@IP&%~TafHK+`#0Tof@v_=jV$3^8ofm;3VP$y{Q2d4ZY z7+3qhlsCXb2Xz#;MQz8Cs0J)SEy^{h5&0XnOD-ZkaPD9re!^6k_@QZF0aQndp~@+P z>#-{81dRNM?Wg^phroW^f+ZQFK97BzGsO2jG5=y=(o^%Z-OkUT=jBip zwnPnOA5?*ZPz8-Z4f!m4eJyG=Z$Yh{>!`Kz8FgRWcV=xQLdEl<$|;Phr?N{xi>fK= zDD7e$Y@K3Vg37lURlp(C>c5QY=?&CAzmM8}pU{JT?@dL~tSM0UWk*f1o6BCPh^nA5 zsv(_FBQg+G;atpwYf%+mv))CmfhX1%sEXg9M(`b~!mp_NoDU}MXLOwy1au)TYMUfR zEsh{8jwMlZI|^svbW}q_KbnRW!&1bnp@wue>iQbgi0nd@e-_y!&J~+}4ZXkr^NN6O zi1*1n-GWdRH$e4d0qXi<)EsU=6}SzxSofkDcpNqKS5ObLC#dZg`Crqq_?U`#a@4s| z1mkP}*Ce2pw?VDWeyEBjqn-sbQB$x11Mm=PXdj|R>?P{HkEjO6_-v*mHmU*fQP+b| z4a{TXrO^BHzXk*X7@PK}o{arsJ`2u5jl@B$gHgYlhfEVJN_;u0VNY>7enk!OQ*-q3@pRis; z4ec#lgfCD%pTGpjNvKsn1vQm3QTP9W>hN;Z8rk3ym`dObYOY)Om>UP63L1*Va5!$p zqc{==cs$;JoD$8~<9*t7#&V?Z#z2e~$>TkWGoyxjENZ_`L`~UBREOQ21T^P=qfV~# zm=T|2Z%i23G;BO-$W~x}+=}YaJDdIu)q&_yJWfYUi_LK=&cLszshi^G@hp8){CAqIy)_rng5O%`R#;O|jRPS@)vW$WVbl~fMI97laWF2%p_n0t8KE^8LVP>w1bl%SnVd0=rLFZ* zi?tK#9O!T3Q_w9=!a@T1@DZw@z*rvdcd=UGGvb>uIjeC&Y>)T*0K4OOyk9)NM>RA@ zT#tAEH$aWp2h`e#6VFU-64crWLNy>e>WkNs@jR~gn@mGU*g(R1)Qv6Tn>p-=x?vDD z!xd1AHnW0RMlZb|*7U>}@fzNOo1}8TM%~RCSzQjQMf;!5RrSN!< z_}Zuu9*gWA*O@^;88@M}$0f{zuP_|brSv$1upKtS*Qg#=3h;QpOWp9Z=QK z`}==Q323qPMD?s6>fl+3T728A$5B1Hi9z@UHD$@Onjy}KTICf`LtG#Iu%}ITQHymP zYFjSK%KpDWU^5Atg2~xD&RU#{y0JpAnX?+GqcsBccphLKZm*9+P1#J;6fHyVl-cWt zP;23g^#&^clVJA0R{2K~bjHWaZf*=gwXiVi#ws@605t-gP(2)rYS?nr5FbI!{Ug+U zUr-|$CB)=Uj1P$C_!W0U&5-0k4QXjq58I&jcV|>ZqfrGdwehX?`gv4?UZNTjEr*$k zOqic|aXg0ou^5)gY3dn`I!WC>325kVqE`Q7)Z+M#8p@ctOixncJmQ(KG#c|>%ofZUUa-koN!bEvZg$q$5um*MG5iEh% zP(vJ$&n(s)n1y(4)FK{=8j;bc`<7!Z+>XCvy!@u2CY=mfhy=JYRFz=L9ANBjL3M@cD;j|s-Kt^Q-piGzvW&W zy$20y$`+xv<2KY|_Yi7i-iNdQwY?IQG#@sDQ4Oex>S0q%<3o$ldq9;ki)t=vj@P0p z+K(#mvc3Mv>R;Ndfn=zYH4SP_mBB#lzYTTv^mf zH3C)OSky>Nvo1j`){UrLaud~~SExmpq>8C94{Fg>M6LE_m=6b{rfdfm#r;aBe#f_} zxv>zc<<(I`-^8YOLCx7n)QBvyu0a*J4K+o3F$9mG8uSHq9we^jan52TRKtR*dz_P) z2i>j&BG)h#_C^&r5;fElP;)&8Ti_bhSEUJSni2S|mRWr1F&)=Ka1GYR2k2MZP?Ysg=bprQGOS}gG*%&y3U!Ng0V z7E=#Y{;{ZnW~0``R_k5V&_`=*MkoVnd*(xRq&R9#)kfXl(zSshsG(ngYVmT^TyI4k zEC*1#<34IiqBJqPCNbtBULLhZ2B8-59BhOOQ04eEHBZSHs0QRieI4MICXkgtW7LT@ z9(5ipM6K@K*Z`m6SS;1dt}Hc=5J{#K8z)ZpF{0} zM6FB%svz~bP6PoBZCC3kOiz3PR>GsGp-a-*ETU|v{CQ9#RuOf*hP4f9XkE;Mb5OhE z0_vc;f$G>NZ#w%gRU7lr$b{Lr&>i&!#bQ(iH&OfjfsKDaP0=^hs*cgtm=JaHrNmm8 z84KZHtd09nYbDK5gUs5wv6+vEMcz;K*O`~Yey>h$q=|5{di)QR~SvtZo5rr^TX>Zo$s;1ZmH z+pzHO-jU?r{}WJ#c>T;#Srms8FN^B=IV_J?P#>Mr_BTDNi5jUUs2=ymls^1QCF%%X z#MBPPeW;qy-4Qj?BTx^snWNeNI;nP&pdq@0 znmfNSW>=)eVB$ql+olt0&L^M>UWV%FI@C$I1%vPys-hRDk@;?oJl5=%n5g@I8_VL* z86QZ3TAUtrq7^~y^H$bDc$WAa)DU(UXGW+uW+OfpH8ML<1wTcV`wo5ai}eR;TYAQu zk&ERL&>~5J8p2>yPm0*|s;C||L-nW)*2KOxe$ILyb>Dkb#eNgaeX&ptPJodx0M)TH zm>=E31T+`DF(%Hz%q+5%s2eU#G+%06$3Ws=Pz5HN1Wq;a0a%Un+t>_qOfz5g&cMc${2BFB zt2fi*{S}PisE1gsS*9WFP($7wwbllrrg#Z@|Nj3e0veKMs2d~AHba>NXAsYV>e(UG z^-HKJdybm(@2CPZ%`p{L!^6buqgH*Ixh8)h)QD6MNbqsKxmlb$%rM!+f{AG=>u&jc#cIX9=iB zN#~oP%7W@?UR1*>pc+sQ1F<*iGvX}NuGx$+@RYrN-TDnxPKpKQ{!r8+uZ)_Chz0C_ z6)=PZ4e=aQ5C24cF!>v`sy|}^jIq!(v@|MzU5tutQ4Q#ZISXMNn)@-Rg0`W0b_7e}70iPHOUyQ` zh1!-4P$Sw5wF|nq1axB`yo{qzQ_*Cp$)Xm0+pl+CoYRDWLUx6y%FY9Jh1v^ps{zf(U zJZf=1L@m0g%T2>7;y&&FP6PtE5W2!Npc-nZo1xD9!Km%B2s7bsRL`EG7Gd<2W{T3I z8c+T6C#Ui?;ykp;ZyJ)|#Wr>7;b+{~-jl&u61rya`qCS=0^JP>bv# zYKq>Y3XJ@xi6=+Jv!Z%f0yPrVQROs5O-V~s!@6NQ9E+}2;YI@9xkFX>H|oqjiz?s( zY6Nbg8t@iXk?$H)aeUPMnNa2B#12@{##f>4+koomL2Qb**0BF`69`-DaUNrD)SNf| z%S_2Y>m2JA>p4_GFRgy-OgzY105fpC28LjN8~@A3ucE%-iN2owpO!#|_2xvXXzgO1 zX5Eg3d}uMMC&@P&vsw#VE1?!!gw?gqv+lz3T)%-@a~a)DCQ!oK$l3>+lVK`q`+c=~ zHk&E&x5h)wX)@FYjhv_v%!@j*Yhxhxz|lAzl|S_sbKNaSAUz3nF*^=Ioy{9C8a=*@ z8mfC+%}D)3t=_cTOhfXa)I>lk}|1*$>YP#wCAtTorUML>(|DQfZjK&{p& z+f7U3qn_VcP}?aldiOW#14Kv-LwwRY5(sfpb94M zFpK36>shPsPLrMsb&|EjtT+l)@K)6J+lN|9S5OW4f!fYdcbSH#K{YH7ssTmN`}aR8 z642b$MfIp5sz*&xi=-!p;Uv@na}kT+V^jmu?>66h$&M;`Cf38{s1b;?$Lx*_r~@qw zwaqJ|tAu(40L-8Q0L7!0d zMA>H^;|Z`V@yh$y|C;OBBq-x@RK_i+{e1|vxNf87{57gUAMEvSsQZ4~Z?LT6ECNQSn1|k)if`71Yo-LCtM98}E-B zh)+P}EAh8Ic(4-j{-_Z-g}Uzrs+^Cg5svB}HlJ>jp|)X1)c&20I)b;Ldb}OAfA^to ztZ>A9qap%T@p@EG4_MFRK;ri?BQ`&3Msz%CgjS#yqr1r_>_WBdC}zX!HXiMm$(S6q zXwsnOJ{Yxai(@XVjgxR3szE`=O~XSmhT25QcolO{bjsv!Z^oTyJkW$g7vsQex6_5P@}HQ5_y|NluqJ=%}j$Cof1 zU!n@iamswwD}&n4Jy6?j5^7FoqlS11YG_ZR?z@f}v42pD`Wq^LwA1GP1Q?6@ofHH# zWLYo+7P1*ypbF@SItTio8ZZ^L2G*fg^+C*nA5jfRea2K2j5_P{p+=x8=ETOR5u1i? zDgvtrsOP6p1wBM@wapQ(2CtP6<-s7 zaNbmW;er`~rx)1&8j`mpsDf{(he*PUriY=ZhJ>R=s2mo=`lyD_!~(bz^Wnd!5evO! zhP)7J4V6PpSv6F{>!U`n>m~NTw%0Hc)U&ae9cSA3F;oLDp$fi(eegM|hb=Cf20X-) z#DlJw-8AP7 zN($7$)Cr5?1niAxt>tc+p*@7E@CGLLu$FAxbJyej6VB05NACb+YF+-nK4$S;u-?b* zWO$2yES^8_d7Kl(H{JJm|0e992OjS~PR;(%H1rc{jrc!eHDhd4&&H$n`CQC~TTt8l z5o#@c!F;+S`eTpxw^YMXi();d#Y3or=Q*l?uNa7#o*2tvR^sifvrs)hf-2`M>i!4T z_o&4f>8U9%1~yfT3lPu^f1nPI^{9+TP;+$#W8iiC7oVWE>D^~0U##b5Tm6PQh%)0S ztbv-!JE-#BqSn9{)Y^&nf)Uep2qsVpOQMEm9O|h312fQ^ zjEx$RTc`#-MHS@v$Bdvqs)FRG@-m_tkPo%!YG74dgxW11|6%{DzyxoN0jMd+gxU>7 zQJ-weqZUi$?Y&v$fvEfQV+dBoP#l6<6I(D7-bLk$@xdHOZW;n= zc{$WU)C$$ZnW&7bQ773!)CfFBt(niL2E_Sj;^|QN3!%=F8mI>MLXF^HRF9XV?%Rgs zcb(G&l<_fYNZ(>0enl;&Vbq+KLd|_GRKq)=_vl8gg_)=h%*Qsk0qbMRf6b5O z`l1?g9=+fHe?UMtenj2)-5Te!S+%J#J?WWIBTx-B0*#Ra&gq3Q*cE+I4Ic5u%<)Q8 zMH^9z@DOTB@1jQF9R_Is`+qeBX2byEMNvZ*fqG64MHMs)Rlq9L({2~)p!#IvDZZJC zYhe!38>2>QDrySXpw`+&R0H0itJNFjyV)LTP|x!&sGjyjZKt8A5t@YFwSn5tt5J(_ zqxAr4D$k*&>LzM2zeF9yK0izYlA*5W{=xoN&q|V@#Z${>=!hDLQK-eV5;YPhQ8(Vh za`+Z2VBw!;gvOxCnTu-hCR7J@T92Zp?hT9oTiBe@%O(49av@EqzKc;*twO5i}^hK;X79XO{^;!LcG&G8M^R6LTo?*2(YEj)`_6t_`p z-~(z1zo4eVC$g^-h(V~HhoO2*)c!r0Begnn7UafqI$drwTO43 zI&>D>P(S}Lz?Xjz!VdvvHNd5;Uw6WiBuHJ6JCXwG({hUhZx!I!AT_h%f_vpuLOIfB{^k5Ks& z#x-jqGpfRHY=-4gYh)d2q;{YhegHMHx8nM`-c|XQgjpoij%T*lJ1jyxFuoaq2vh+r zP^-EFYBf(neT@DWHS`4&_&O07jvBG0*7c|<-Hkdwj-%Gh^#rc3_YViYB|$A4oY2?% zVRIga6L0&QulHB4*I`NGr4yOOH6CjdUyo@qdSYK^5r$w8UPLYCPpHKjlEl~hIBtO2 zrV}t254i;P5%_@GE?bfsk6>itS5ZB`jhfTPco*NIhWbJ>U+?FG>!^aiU?>JBH}NK@ z_;j3&$53mfMG8}o+nc~m5=NmaY?ad2`ws>>poVHIY7UQ}hWH$6?yjST^fea1Zy17k z1I$RaL9LCUs1D3V4f!He!?&As*V#uPf`p?u3^N6qmaRiov>$aKUBW=Tj(X^PLp3aV zkf|UcDqjlZ->W&PFgm74ZI0xOX?(q3dR4|^CC=whHBtIjKB#t{tsRx?xZ&(dkO1Ozw?NIPQYRr%$&7D zRkQ&0*>5N61H^SyzE7wVE>%Wf?}yEB3?$wGv*38t{X0=7;AKjnijJd({uR!^WI27k|6Fe)HYMIRm#@IW;tUx?w zUUMSW!?wgfVm)k<&*a~YD)f39bX^5!-++S_bcG*{f6dltV+CLL0|8$<*ma7 z#0wXqeDb?@2a*CS{L@VLzbR^ya+w$*EolD`q-d_j`E9L9`{rqnjM*iNV%_opxVvD*Sm5Z{gk@F!|97pP($QUg)j_YjW2 zHyEb<-@B@*XeYKJeiKV#$!ey6u~?n>dAx)fs{49>)8QxTF?_m)ulJkKKd>S3^)<}_ z6t|W+(gRUzDjjyiZm5UTQ*_S|NL}04`X?1H10N8-iki#abvbI8yVdo4 zo%h5y);CA$iUvFjNWYDBNPp4L%yr2|rlN(Y#d`ybW8Mf~@4uAzJ%atOGrCe^bD>@n zU;PiOoIh|F84ou#`?q2Zy1J)v&9m3Z9`p z1Aat33*xsj9Y}@Ah^I##T*X}iy0MP6jm^*(b%swzExz@rijP|FqAL1quSafe&iLf0 z{Mk_X!%-v9098*jRD-&s?sta}h(Tb2O_+{ZY+r^xGHK$>!MoP6n(J^>iOOS(_>%M zeT%GXtvgV2dl=QQv#8bn5VK-HJ9E8)SN2~m0`a)e7_(zH)Qw9}4cTVhkLuBJ)Gwo7 zLJjSM_U38$95o`*I+zNwqNXAbDqlq#uVHP6-oO7nn1Cvrk7aNpY6yRzhAMhT^VrRZ zdX9%-1Xj24O*oeLVO0Jaoy<|)6ZD8F#WcJzYO!`l<(q&Ekh20qaTTV-IKB?EXINR}z->HILgpzx#Us`sKf<#nY~zX;@c`PrmV}3K#V^6|O?9 znT@E1??ZidJdK*dS6CWnWYdzHBYmDk~AJlFbg=)ZZn|=;+6TgSa_54pV%=9R?H4HU0 z6;VUj6g8)VFb9stAl!pmgm+O>?ENY{)1Y*;iG(=U04k@*KtRi7N^3h#6wXdFch_BW~1hQEvlhMkWJ#8L9Kyvm$p~wPPF3sDDJz?{cT9sOItV>*DI2@ zAnVWj>O{g3GBhAjueZcMQb1oCGLZuO2{$7gLAqWy2$v_lAr;5tp0&I)QOQ@z_`tPJ zTvOIC>_wh*-n;m`M|>;cALL1*47Pr!0~L%W@h`QS3%x0@f~{n3mr@(Q9BaTtai`3jP!Q55Q5 zXM0zdAzJmHUa4aK@|v@R>w~#AlkhBiy*zfIH;=GA=^PJEAB;)C)k$BYyteV(3F~m$ zP2OIlh1mL3ekPZTrFduJ#_hCdlC7YX9jdt8FoSD)CH~KiUAf+eYX`Wu7L8kPdu(!= z|MC+$$HTiY`2u+VwD+$eoPc)(+1v|M*qq2f3OQj5*J)#TTUf3D*?e30>eRO&}he!a%hkl#qZWN(;DL5XS1 zKr-~PjXXz%kqOu0S|!`yEadM>+7sMnE5AX$%f!REcQyHjbA1c%9yDS*KYwx-639rV zL}cOz+Rh!@iVURlJaUGRu2-OK^=9ICcn=_L9*rJgD_0)YcBp?{l*M>|x0U}lozIj`C0oz~dfA$S18lxGwwx=ZMzSA zzieZ^ST9od|Mp+4|5Wrh8ESD89}ApPR5YK$Zqvxt6yA@Ue!WJJzMZ#Tb7{nJ!sW?7 zl{|cJ!TTfoP24x!Hnteyq`Z@mF9X-7>hCW%AaiyS|NClBVHrrz$U75n9^1|>3gI^> zoE(I^*k0<3j_X`cM!YZgq$fNb{~`XJYb^;Uv6WxOMWn5yt}xr^-+%SL92d`V^ByuJ zB*PSLtW9`6X*Y=%=K2pts5+Gw;hmXlfy9^NZ1U)J^FJfFg0!NP@zh>h#r1qNDwXcH zjSrK*#y>AD%3?FCFnyi3g3NmTL;71XA0u3r#+0GpWaKZ$^`Cxk=NS=P)tL8sVVH#=8$+L-a{@;u5|4?B9d-F*$rXW0#cV@zR z9p|Q|#HUeNf0N|2B;Ja+UMG2f<(-sr^x3ck75#eg)t0l|#?x|7apH5x$4}~=B#cZ$ z{{EczRf$L*E(ZO&6BCd&oy>YIu$7q@`EId$@SlD zXHpRkvH6w#o9eGY%Tkc>0RGF3D@ps!-cW{gy{3@7Ii)13VL1<(Jz_%$NeDMkT4WL(C(3>Qz> zA?FKXCn4{%y!BJjY7{(zyxAz|5_!(?zD-(t-mfWgKZWbBC?z8Q9m3UYIR$Mao^!8W z9e8IXk6z>T|6hJXX1xYb&@wW$wHX5_j9*;vez$rSg}fu(!;PPLci^59R8Ww2Tdtk5 zBQS|@Zmu;X{UGlv++P+ua!+ymtcLN0>^6(Ditrx$#<$dL{4LV1x zCD$f!{|cM-jPP2@(d)1^3t|29+h4CMgcJKQ|IbO8L7}P0m<(%B>21>1)6&njQMzda z*V>X+m>aKC;R@24kasU>eE-?$WE&Ptd^gwi1*%>lFaI2Lxh*>^PgV& z^Ll#i!nDi^m=P`K?;J{r=RcQoEVNzXzd9Z;|GR34XbRGW7K9pRTE`J0hEBe>q3 zvNjNZNItzz<3-yDcL4<^un}F{U<>_dGZ(g2#%L7u>vhl$Ybx&l(}q`)XFT!e!p+0z4Zm;b{cD%Xyq)VWxc<`? zx*lgonOtl`qREvv__;^9Z6O^VM_a0L+jwlQ?4%E(_%oyh5pIJ2;0mtAqKbK3(`yIC z#U@>^e3a9S@I=B{Nxw^Y5NQo;)ygw~v=&&Oa;isS9oM76o3=1z7*9pNUc3L3{*ruk zxj8*I>h+ZOIl?XR6zO_J!alg0ylJ^sfXW+EMi0VuX~Y}bkj11w^WMQaE=1;u^eB|~ zF2b+4$hW4P`P{UXIDcK*na#D%`0Mq?1}>3@-zIhPa=jUOJ5`eC7Uby!ARm z!53(Fkd3b-{=|k&4j!-s3QkV-Vke9zo>}2KIT$}cRa6!sx&wY*m z(+FK&p>u2?7e`Uq3khT(-n(r`W9siI*^KcM`-?kz5d|hGBOvSkT$mR!(1Ov5Ayz}G0OjnctHxiVjK2| zJTrJNrHt;R>w99qQOQSJ_zK$qMT1E1LEh%%byIR7C51#MQLlR>rY6k)N5d(?wG%X8 zEt!wvIr2@j`MS{i|GuW%_y-cB(6}A{SJs(;^_(zq{NH8SByz5mTaHM`QLX!^&7GoL zsa&abBzOFgV{^2TBq6zX$+2bKN|eRA)_vdiTF;AjbM1OR(|`W->^sjhX68HJ`Of@) zt(LMD?kjTnjape|YopPH`Utr*xth_Ch+q`UycyU*;|rE%lZ)9Q>PkM1zI=5~tQ!J# z@pSM`crZP&Xgwf}-pfKyyM%rk{b$4u1x#K$M}?7Z<)6P#b{|ko{_DL+4*7skU+UEe zPXtS+9!@ly{FM@7dGzgA_?DRwJj`PvRKr&sS56N(O!R|S62DEe2ebQ$4dnIA1T0VS zo`GxRKaj7)r{eO>6E`@C49p~677=18+yOUR4!GD!u%qPs-$nkonmk%Q|94_R1B#>g6Y}m1J%;c*LS~C***yf^IU=hNF8vx{cfnrb z8RTLISt!OIb2pR&JB~M#8jV%jJHx)?@^#F=RL}uHEE)1?h|4)f>;}GBdx7-iTL66# zxeiBcHODqV!&Y_H!{y84h7-(hpzo->f!dduMEYVEh1dha99`zCrt`YbX}wtw zTMJL@E3GBJ%hCb(PUR+R^w)nj_OSFC{CIFrurTTv=DbuRUOxY~q!~$L5er7^pe+|i z;bPtCuh-@MSSD7DI-mYPycoytzzdrdGZ*QNV9|4WFKOE7(mmAa^uVOX#uP;kn{s`EV=33Bs3A`!lnIco)8y zCwg0%dw_?+eTy4curP&W8-#2KFBlg4k$fb1fIdlQL{h*bsb>-8&nB&AK@_zey>?(d zsKt_rUBDl*$N?Q2@|pNFT&%wCAT@pd-3&>rGfy%eU#3rV4WR`pS^~~=79F5x{?-4_ z95D;L9PR@ui$_R^u7SQO?*dfw&omjSN69CDGK2?bBEYPiBk|1JAwEE z;wjz^uroBy_l;?*_ys1c@9_;VsDl&#>K+X90)FURDK^j5^_(jNgywR z=ssN>S ze^Z28K)7eZ3ch<=4B;s(`jVd6=8`+%qrt^0Au`aE8alA>I6jO1H5MMj#pI7Er4q{! zJEFNjdh9w$98`q;9wcT*KekI>P?+#BYR+HFXa~I~V zSTI75>`c8DzS**R#goL?}-#}#}4 z+wG^=!?hZo`rT%y(1%f2bG1If~vea2wSXZgKDyXg86sV|nR7 zAV411SAblT*iXfql22xMJ^hMcG5R#I)VVsFL@xG(USm^Q@E2@;psvGgO|Vqrc(l#t zL@!Q07B^YoLbEbr@0IYKE_sGFB?7M3%z_E!%h(55sL?N(glklhq9yyxY!%K8nxJddiii)=&_g3m_+T1 zZwD)hMprab-XotG4k{O38c9y-W}2wA%gKgWijkUXt^G;A8~J8)R5(k z=qz`V zzwTpge5BXO(|#*IsFjA9%G5y=(wMkPT%$({3us)RFMlWYD(2S9@B8}E2qA97AL4Bwh=t%C zG`|Nvg}M}j!w?iZCVhA$5IRJ*LKm4^MX8@6WR3R%tO4&1i^V+2`{H5?@J9G6>IQJL$;~z!{zeYi%FaXb zdA|qOx$AX{Xl!OlE7&Jh_yQuQAm7Br2I>;Ym%Q?LT1;14QF-n+Kes+7Hm>ehN- z4!GD)dPpXCd;0f?DJ&}sej2T&a6I7JEAM-12M!W*1$#@J0&k9d{6i54;+h(GKK=$j z59ua^5QOK^7kkHo^29LuCG?OZ^v}|tqfh#rz9ap=nXiOzL*qBmbeGF*}~w8xqyYSa3Oh9X8$BMW_B1Z_756knH>kOq0TSW z1Ep_AZ-L^*D=fRN*Ht4Iiziy(Ipizp1u=X@mlqKD;nKhAb1K-GBYeyx;@{}pD8vnf z7lGa#6UX%Nk73Cu8n0DEdIKPBV6YYfM|dK$)nvg;eNr>_kiIpTgBc)hlo{NQ`AUi} z;K|LF$u4L4_%GF^F%T^nsHpWFYOyR1*@cfHZ-DpF<^JTAG@sAhuXrnc(vS3Z@=%^& zebBjurV|=s?Kr}XxnJ-+`S^>SF$F_CNcrST!S6%3ByWa%8o3McJ^kAB6A*DBFA3fa zj@Sj3G=bAr7iH2bL$3wB>Ez!L+Tq{;mV?|;No}h2S4_-?a z`|85q!6T^0P$#k=mRxKGxtP1^yeCegw@dMb`i2ei>%LbiUJbB6xurJkSXLQ7fp|ZY zo?)FX-VLt=yyf5rRCFp!>VeJ01ND%1@Y>*$wRR+aP5lx78LeOC?+-nLz%gFiEWqL{ z3_{=yF18rFCiz(MdAj^DJh3S73G~G#Y8=kI+0qm<*AjQKs{%*#=h&6_eIsJwB)P;q z2z4Oj;qv_eCj<`RFX=hzauMlG{*pzznX8Z3DzGKGtT}Tx;qRvZi0Gpa;teO8x*7Zo zdaa0JolJqR=a7U$5G#f7VFbM)RYCAI3(tay^;W@MaQ&#u;eD;-7o)}=PgLDtYc<}_G_>xQ1glO`WLYI8LY?r zm$^{*KkCEnga1@Ml}uykypsI^Cy^he_92!go+O$rirkH2k#$Dg?$WIjQu5txqaq`mdkqg88s+Sj@q2!zRmRNsE#itA zOi%NcWL2K)dBcq1yO6zWUIkTLz;ZwKm=QL@CwUwj0bCHJuWevjqeix*+K!)sX-$4P-DOF7P%=#JB2tWq6k(hkRoijy%J z&c&j*9n0Vs%!^?=d1G(ncIOZ5frrr#^X+n+Vpsr6-~i0%IIeSmKz0(Iqdz9u?Ksge z1%_Y{mdARSAD3b<-ovCAYmei^z>Jt2bE6tu4HIE~Yd55i&KQh?Q!qL8J4*;eCSgCu z!sDn0TtgM~03+f{>w8p%Uu-HRo+63LH*8h0;*^W zs>OS;FJ8d}Sb3khu{o;1Hkbq3;W(U&H85yDy~h3+hG$Vj9`k^ix+XV zjRe%AW2lB)#+Y~)!=m8dM15V`WsnW~eD^kE*yAsw2Zt9hqRS z&&Alpm!tA+KkS+U50jtm^Y=uZdM~Bx*#jq3-(=RnAAOq$Wlv6(7bN_!m~i z_!mvVEl?G9!A{r@b#Oh$6zE*yn1z(6MZE%(;TqHw9K#^Ib&2uU-1#n>o}@?hATw&! zm%upK6f84cuCa#wNUppLybf?)Db_y zB`}ykm{2;1(Qqi>-)xZ<`)2#jeDY+%ZS;SR79LmyHj<>o`M+f5j0v z;GSu)@4neB(NPU?vlCFy%b`Z1KE}dUsKwS3wH5}TMrJN*acw}|w;L1VS=7`$M&M~ZsrnN$;s;!e$saTRX$b5ipt*T~sqr6Fg~^_n9;QaE;!xBH zRtz;2RZxqv9%jO0SPkD{7#4qOo*hF`_wU6>cnTxn#ixwFhV&W<@(HRTpK%h#d}g-E zeAJL9d2Y^ybf_K`$6&098q(qR`gGJ3Y{7_l4mDy|P*e5>bD`f0#=jYX+%L?TJKepX3T@HP!*?rW8!sDbN?Ia=v|7s{~#8^FQ_REeQPSNjT)H-7z^Fr z_QFUUMZ$QDjtSnGiULtRtc7Y&D@=~FQA4{8RnTsXfv2q3ZTchB$oy^nhOvqJz4xZV zb>b3G%hRC>E{5r`Ax6bv7!4<&7R@Xyhx1U+h^ICl@q_7E6;ygVRL@6aX)QXn6u@MkOv`hldRhZDB6U#(_dxC6k(dEDU_rcw8mV}n&3!3QQ`sElhc4jw`^=rXF{8>l(GhYRsBdL#6Y`2u4a z`jdVQ8{;k1+9>eVbhHdA-s~&mukF&AgdpsLI*=BkdUV)&7Bz&|QH%30)S`QXZSf~+ zNLzn11$Ra@XaK4sV=)OXLhXuOm>0i%WBd~n2>xz{vJ9$c!%!8DwN6K`VW`!67`0|D zV>0}L8p(J+%-TthT7>yAE7n0Za5xsh@t7G;y99LOXVj2H{b@{u35lmgO+kLtNR_wO zYoH2jVr_$JP#4rxPD4GmSK$ymfhwo`zf_L(QM? zxD_=8gZWZa4H%Ca!D-kJ*Wz>x^7He)Y~PE@7sco2eVq^owY|fzI`um(351id1Djxc ze?M<-d!SbRFg$|OQF9m`!4%LP*AbtM1+Yv+lRgyh5nqX#!cmd@yq-@%jpz~_hdVKf z_J66!e%_o`wl+dl+zHjv!5ANxqk6u}#*d*6m|GZ#KWuu+D5e7;s6|{9RbF{igBqYZ z(ppl#Gnjz3)oj$NUVz$e>rpM(iiNNYHpk(pMe_`qEhjj-pZ7hWoH6{oFSYt% zN3NejRg^ELpZBmTfogCc)LL7NYQTn=ew_aV4v-)(VE{hD%orh-X;3h#XGKtpvZRgI zL9Obyu6$ImH=g;66s6jkmN8=vhG&|+AH8nQzef@e`D*e_I% zW5zWGqJ}OPs=$(%6l-D%?1Vb;#-Z+Cj9McbF%@1zP36U%=7vnD8;YVbR7S1( zwit*5QA0f+wHUXcDn5;B&|}mTenxd9N_;ai@lg#;iAv9A)AJ!C={m&;sD~9$L){2< zLr2um4z%%6)|sdZSD-f))`O@KIE9*mr>KTzNZ{vva4CYtiFd_7+=>C(|5pjLBHnpBcSGeLi2ZO3cE$)v&B*mY zP1OkWzW+DVURZ~txUdhkXi6tD`@RGAAbtV0CQ2puGoSlWBXSJYu$!oYf1=b6- zr^jBztKa}UhFVJ{QnLTGAM2(xJ?Mj~XejCg{DRr=2d2Z!smxGTu{K8K>x@^i2Ws_~ z4=~S?rl^rQgj%d;Q2C#r*3ioU*9_SY60|QP2bx_F3$+VUpyn_y&c+(33SOfMh>+Uk zPl!4X(qeYZg1R1#YIu9}tx~QoLO~=qv zKsYMiDZQVw2dAOdK(!2}oN&~dX^dJ6Em6Cmi;a&)jl@*c6u9dMgc3M}+W%ir+c08~ zi6=lcBn@W8>!=DNWHiRKCPGyhfLaroQ6o|qH4>#zYoj)5o3=p?B-a^1Kx<$rs%1w| zLw^s|@~@}@<7P4ir9%~*8`aaosC*@?^-fMpR<|trl^V&gqo4a zi0ViPYK`SXZQr`65$+ty{?|4bM1n?ODypZ8a0G5bt&P07O}?_IDQbv17rI~|jz?9r z4#(hDRK6m4%&M=3DyKQBfjv+oG1?`dMKJ-@fZ3Q5SD=p2qo~z=8`aRitx@utic_Kr zEP~2c9kXLQOpmis&;9)viuW)Z#?NOSc5X2O>Tz$>HW`K5r&DZvDXQfgP(ybBHFVce z4Sa&S?+2Y(O$DC)jZsB$KucF_{__WwEpYe?9GS_^Fon}ehW zs%QOBLpcgH)U$2+Qq+)dvhky+iZ9vppQ!wCiYJ8Dyo3q zDo3sAF7|qFRF8+)_!!jvQ*C?}s^G<_kz0pBxEJ%`W7Hx|73SwG$2?)|e;u87Nzjc> zQL}iWTZ2#sR0-5k+W^zyV4J=SwFvj2hWHAqhj&qn^`*V;D`rMA393QqZM;%3_P=@@ zPC_p1fVpv@&2SA>&_h(dZc)?#k%&^l3~hYW)FeUehBTU@}s zdN{eK2&jT{s2gvf&g_S%0-vBNe1jTVzmldQu~9uqg}Of%YONH;CRh?x!7^02t574j z73<+KWMo_?u#}(o6OMeS0$-te=2zMn*P7ZIf|`JrF%9@_XEN4t%&0;Np-brU|VRfx@uo&fRLv`?r z)bl@bd6SUX8ich-&x@MF38((j)IR=#`Yh;FHa$*;TK(xz1>`~8 zi!BH>5_vH_Rz>x=7kU+;PR_BI36Gd`*Lg!gQ}7klvPd<}P{%>_FaxR~*->jG7pkHH zs2s197j5}2x%pYu%nzZrqyBvhzvD!5?1jyn17p(=Qf zD$uWviO0ZU#8aU1EyP^71&iZT48+WJO+zc78dwK4!Ywhs_J3~znu1N%3#cJ~i|X+Q z?1EoWH@2&1zAZNZ72khV?7RNO(0*lSb=zS!##8k++wIx0P` zYXhlJEzE){s0eDYl|mI*71h(GHr^dG5+9Cg;5t;p&Y~K26?J0XLoK@3sBQP%rl)UW zM$`=@pq|yS3GGow>_pU!(@^KaVpPHVP$P33wJqrMU@TpNu~m3#eS$EUx8}q zCe(=RvK~Tp^b~4M+(YmC|1Sur$A6=S=qqXp(zdjV5H%ISSQHCjb?lF-_#Enp{*HRg z=4xdcI2m=&Y(RbW`!@z*oYv+uW{ojdzdOi)+qgAK^Z(u0KX=A=3Dus23cSq$v zjcUN3m>6TWwcl<-t)(ick!Xe*;r6Hz>W>W-Ybh=yB$PL(F4?Zk+i$1uqvv8aMZ}QMGbvF)JTlQEI0+r z;69gt<}y+bb3<~}oMlDzBsZ!dC2$YcLNy>>Pg7t{R7C|a2rFP$?2eks$Eb=wpgzES zL#>rKz0BtWHzNV9(lAuUVW^DbP@iBHp%&8~3}jBv<9_1rdYhhY>|+{q08^9xC#oD@ zUvoVg>YPZ1N)JHot{{`{I@t-RMY&KzR{=Fw;i!zQus3!@Et-Y zF;GLE0QFQ&huW?sP>Xp6>ioEa(e?cQ<^`C7{$?oSp$blm`k;{!)$(HYdN~^pM-6c^ zo8B3K#kxKnWGYN# zO^<3wsI?@jXEjkLW;4`dyCZ4@C!zAsLe;Z!5c^*}+i5c#KrOlxsGdJW74#D|=TX?M zx-l85;4G+y>0`XCiOL_2#jqvj#TBS?;67?9q6{`2Og@+dH6WM-ExJ6YAuWy?>T0O% z7LMvcKU4#Tq7SFy6`X+@srEz6+8Ksw$Y|8mPDQPim8cQeX48+lHsKbkfETEv);H7) zWdN#S*-!=KM;#!gQ6tq2HJ1}mBd`gB@DEh}`>1XC3bn0c4Kp1`hiaIcn}CL@JZjaC zN6q16>jG54>rg%4f*P?Ss0vP7Z`kz5sGh&F>0eM4M;LCVFd3@+tVllBDL_DTQVKN! zby3@>i;a&*4cSuEqTGu5LgIwgH^QVBvQ|ZPqy=i^+M=eiCu$81LN#a-Cer?2PCym! zMLqwoqAL7_YDnynX7OY}O-)TydRNpGOh66!O4OpgfU58XYR&v@{f_E@|0we%Ut$c< z{!dOo6&6GdX$8~})kU3bt?czK=p8Vqe7~bAT!q>2Flw>BN6l^A(dOrW8L%qxMOX+w zphhBi4EtX#Ek-~EmPgHX9cx2W1o?YX zun9obQyEom{jv7>-;)Fl%@EWL(@|5g1+_NrqHcJHnu2KK%-J4<8v4?xZQBVo5(BX^ zu0bu$g)W`&&^5@60SRT9MRMZ-ZJk5OKN`s6jzyC`>+oV2f?wey_9D*8={isFt z85?4R>1O{nv-UytWFl&c=GyootVVo2szJ^SKW72N#jLmq>udktBan-P0yE7b?1V*# z4@GUKgV-A%pte=LS!RSfp$eXZ>e(91jK?rHzQ^A&Xtq5uQ5`*P#=VLJO9jMj)46|dRxuz$jum|yOs0KYnEyjQF7)Jixly?qG5x;`Eo@^fb zUyCCX0i6T+QTw;!n(gsg|1?N}=LSP)G16 z48kR-hMh(&&bz3deLy|soE2sS5~1QHQO|&I)HZf!5*SP1sm;)BrKxZf_i+^&y~r z`UMx_v~_;YBFw$sd~~{wI+(s@ zY@wUY{oSyb_J4#e=J{M2wOD3iI37fuR4KNaFS*L0<}T_sKkpxpltwMW1K3IF+x?tA z*ayq|aR8wjUTBB;wVQC%)LqAP7;`84KbSyH0-EDys39AI%CHSX@fPO6*t^X4c1zBR!gSF3^eCtu?$7{TbZq##r&Pf9I@c^zm@8|r9?Jk%RsBqDwcSG&}T$fBi z-7$ptX4KR?vgsk0{haf}yWkrvdd1KCCH3H|CcQmskruq>ofEFJl|Td%j+g}JB$gn4 z6E*iKubZAW$7;koqVn&@h&<%4^KE)vI{~rW& zA>B=Lp&V-4H9}Q14mH%1taDHWFGU?Z+t45PqK5XMy?z(fkT)0$zo3rjNVm*^mK@_~ z|A!EWkHwXMwNWQwYn$F3V-O#OTCCGhN9=Oc2y92)w+D4Xo<)tsZB#i=P!0KjIvKxX zK`e5c{jZ+&BcK9?Vvyl1XgMm4MvszH6NLs12dL(TCNRC$X~BeMzh zdEhi=!F#Ctqun?8;=2Si_i0fr%ZsJ3l#P$Wro?BX@_k1wqS$|$gDD-BA>IeIHV#-X zq4GUKHS8;@{3s91$R$Eejhmc+dK!f4VF>DEs)*{zFw`2DipsYT{cttv8xLzS5nez& zrk|oJ{)yTh@%}PBPKFtYr^O6d5t%C2=}tg%*%#G-L8yXeV@2G6y5R?^hiM<0BQ!Uv zg3hS)-qtawr`}xDcHD^?@~fB_@1aKIGe*9^cgst%qKE=`u(ds9D&IRJ{pPGM=aOj!&(e0w=<{@_pBkIPiFU*kT#3bBU z2328`mu6(zpysY4YAX7pMrbsu=krnfc_V71UfJ~cugva9kIG*JHPSUP80(?;`#)m{ z=meXHIyk0aQ=Eq-@fSA2lCRANk0m&ic*-~C4??1|b1oAI*p zVGW%9?!V9f@66)*fa>87)X+zLZ?;!#R8JFGGopG_0JY7kq7JZjs5$SCs&FQ1Bv+%# z+l(q_2WpX?dhePH_es!deu`Q=(Lb2Qk_mNVF$}~qHr@tRP$yJHgHelWDykuity`=| ztXEO_o}ljkl~DIJL7jjtZTcWo1(Q(?S%?~u zO{fabVrIOLI=I|uA59=GY7Hc@ra)C3h#JDQs0y>7Zp>lhd98(PdNI^4DU0c_8kWFb zsHxqBbMQFQP}gbp$+WC1mf^xMR8LQ%dU6jnBCk;u`+YVCP!v>pG}P3kLgg=x+6~oE z6;D8Qc$MH78gQINf@dDCG7QTs0OyS@!mE* z0RuQc=Ak;W_pA9VcnUQVAF&?h`(~aoQ_w9+!VLmyS<>(3^LiGf9R8J?`M_`#I}nfZ z!#u@$Vm{)FPz}6=8o_%QiqEkLruu32zl&Lk??Elb=ctEI#DCfUN{IWfS*_Vn&wwJR zRb3DD(CLO6;sKZ%C!rSQX4IVTLN(wdD*qMKTDfO^j2f|5s44tmjrfcGuc3|g%gU_FFd^+!;1c@kB?c~pfrP@jAr;&kL2_ugF3K;5?yRo*r%hJWC8{EB0A-SzW% z|M;YU&*weu7GVW0yum;$;P3N};`*qe-isQUgQzLHh3fGu)SQ1tJ>~o(_`I(rlVe}v zrBI7-KWfBoVgYoY5m1lPMl=_)qB0i5&R7du;!&K1St9woxjTYd?H5q@KSWK*E7VYb zM9p!8$Ug6(6vvtu)$m5hl)6qA0_xFldtn~xY~FyX;E26`-TDr-MxsVB_oYLfbcInp zuZ-$IE1ZUdQTY=_^?6_9=CD@5)Ov7tBA_{(ggX1zq4wu#R8L-_8u%SG#0jFAic+KI zI6o@A2ifjR+G#PEj3X<_YS9gkY9 z3sL99dK*82C5T_b{Fo@FDW@t{B0dXW;1f*2YP=ZB=Y1dGO>Cdz>Wjy8aZF2_<4occ zP(zkJu9@4SsJShNT0GTI4QPUeu@`2;t+)mMLam7z@yrx1K;_?zE${>eW48D{*PG*p z@qOM`CS9;S7q*}Z2uNUV%!pbGMesMQhFV+?P(%OP#=qHkq=Y_id&WnNSSo8))LJQk z6|q7>*9_Gx64aAFQ3a<;WHM$(#S5YqRTG)2vA7tD@xFe9GCwDf`Ki4raW6&#LQ^*vBSKL)j!mfGvbu^jOS_ztrqF^e)qQd4nmRK<<3G!Dg9 zcoKEO=168nvLa3)-VC)!-A@Ec5=fTZ=j_DB=#NQLn4wLHfy6VTKFd`=o$;elC*WSx z?m2;h_!zYfBc=3t-*!udrHI$Yq4+yC#(-2_2VKV{@H+{MF&~Bn_`L6E^g(TtKTtzf zIMDRC9IE1GsFCW3+P0%nC*g9`V%vzC`(vnQ#}(9Cd4^g8pD>;Ff27oAF0-Hts)Z_` zJL<+Us2q-%j% z9ejeCg2UN-&IUY-x^G~1Gi4(%fcPZT<9TCt_P+vu*bMtnJv)h-qwDC+nZ5oAwHBOU zV+>UOB&b!M0aIad)O}4+4eW%vZ-|XgK#jn{VD`UyxR(UA>;`Ix|3M9Dq8#SN%%~yE zgUVkPA7S(V;vr^4nxjUv52|BxP}_SE>b~8ma<19-(0tuX?2MD?JXbvSB~&A{2X4##4dyr#lSs1dk_y6+#S6x{6VPJGjT*w@cnK?_3JNG>&hnhtfOtV{hO@8?en*X1iNfY_I~}VNe`w=*iuk-A zzYoXuq+i8sSS-xvdTDL$NCEFTwuTevMPo%vCU^CteB5V|Vlp8q}O!Mz#Do z>aqI?H8SZ+ne9~)GZ1f#YQRWT2d82>KN^hQ0ae_;#W}n{R^tc@yasSSOqKNFjNCCxde1j+()(S32La` z;Sa1)&K%8E%bNzZK^@KgP(wckHMdJp+i<_Vehqc>KDNF_?V?Y33L{rA4RkLN(6)Mw zYEh|*<}+Y*)QG&m%=imcLFP(kB#NPWR36piL8!T3gc|YNJAr`>NZ^LGsG

    Y#cd#V!r>I?!wY6zLD^!I&QA0c0x&VWSZ^tTl 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 From 56f1a492322775d87719c418dba62fa3a154ca96 Mon Sep 17 00:00:00 2001 From: gerrit Date: Thu, 13 Apr 2023 08:29:54 +0800 Subject: [PATCH 302/339] ci: update build version to 01.06.00.58 Change-Id: Ifb88521f67f1442eb9aaccd766fa5091a134b5d4 --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index 4fd19976e8..44f4bfa84e 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.06.00.57") +set(SLIC3R_VERSION "01.06.00.58") From f49c1516114a153bb2a6494a73f46ba9ab7d219e Mon Sep 17 00:00:00 2001 From: manch1n Date: Tue, 11 Apr 2023 16:49:02 +0800 Subject: [PATCH 303/339] FIX: avoid arrange to nonprefered region Previously we assume the NFP of exclude regions are rectangle, which was not always right. Now we calculate the NFP and find a best new position to shift. Change-Id: I02c075603cf71dd3c9146d7ac7a6706c0f850669 (cherry picked from commit 713ebd666c90d5dcfaf89914c37d211e9a470e99) --- .../include/libnest2d/placers/nfpplacer.hpp | 67 ++++++++++--------- src/libslic3r/ExPolygon.cpp | 19 ++++++ src/libslic3r/ExPolygon.hpp | 2 + src/libslic3r/TreeSupport.cpp | 27 +------- src/slic3r/GUI/Jobs/ArrangeJob.cpp | 13 ++-- 5 files changed, 63 insertions(+), 65 deletions(-) diff --git a/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp b/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp index 15edff5920..ae0fcb36ec 100644 --- a/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp +++ b/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp @@ -1099,42 +1099,43 @@ private: auto d = cb - ci; // BBS make sure the item won't clash with excluded regions - if(1) - { - // do we have wipe tower after arranging? - std::set extruders; - for (const Item& item : items_) { - if (!item.is_virt_object) { extruders.insert(item.extrude_ids.begin(), item.extrude_ids.end()); } - } - bool need_wipe_tower = extruders.size() > 1; + // do we have wipe tower after arranging? + std::set extruders; + for (const Item& item : items_) { + if (!item.is_virt_object) { extruders.insert(item.extrude_ids.begin(), item.extrude_ids.end()); } + } + bool need_wipe_tower = extruders.size() > 1; - std::vector objs,excludes; - for (const Item &item : items_) { - if (item.isFixed()) continue; - objs.push_back(item.transformedShape()); - } + std::vector objs,excludes; + for (const Item &item : items_) { + if (item.isFixed()) continue; + objs.push_back(item.transformedShape()); + } + if (objs.empty()) + return; + { // find a best position inside NFP of fixed items (excluded regions), so the center of pile is cloest to bed center RawShape objs_convex_hull = sl::convexHull(objs); - if (objs.size() != 0) { - for (const Item &item : config_.m_excluded_regions) { excludes.push_back(item.transformedShape()); } - for (const Item &item : items_) { - if (item.isFixed()) { - if (!(item.is_wipe_tower && !need_wipe_tower)) - excludes.push_back(item.transformedShape()); - } + for (const Item &item : config_.m_excluded_regions) { excludes.push_back(item.transformedShape()); } + for (const Item &item : items_) { + if (item.isFixed()) { + if (!(item.is_wipe_tower && !need_wipe_tower)) + excludes.push_back(item.transformedShape()); } - Box binbb = sl::boundingBox(bin_); - auto allowShifts = calcnfp(objs_convex_hull, excludes, binbb, Lvl()); - int maxAllowShiftX = 0; - int maxAllowShiftY = 0; - for (const auto &shiftShape : allowShifts) { - auto shiftBox = sl::boundingBox(shiftShape); // assume that the exclude region is box so that the nfp is box. - maxAllowShiftX = shiftBox.width(); - maxAllowShiftY = shiftBox.height(); - } - int finalShiftX = std::min(std::abs(maxAllowShiftX), std::abs(d.x())); - int finalShiftY = std::min(std::abs(maxAllowShiftY), std::abs(d.y())); - d.x() = d.x() > 0 ? finalShiftX : -finalShiftX; - d.y() = d.y() > 0 ? finalShiftY : -finalShiftY; + } + + auto nfps = calcnfp(objs_convex_hull, excludes, bbin, Lvl()); + if (nfps.empty()) { + return; + } + Item objs_convex_hull_item(objs_convex_hull); + Vertex objs_convex_hull_ref = objs_convex_hull_item.referenceVertex(); + Vertex diff = objs_convex_hull_ref - sl::boundingBox(objs_convex_hull).center(); + Vertex ref_aligned = cb + diff; // reference point when pile center aligned with bed center + bool ref_aligned_is_ok = std::any_of(nfps.begin(), nfps.end(), [&ref_aligned](auto& nfp) {return sl::isInside(ref_aligned, nfp); }); + if (!ref_aligned_is_ok) { + // ref_aligned is not good, then find a nearest point on nfp boundary + Vertex ref_projected = projection_onto(nfps, ref_aligned); + d += (ref_projected - ref_aligned); } } for(Item& item : items_) diff --git a/src/libslic3r/ExPolygon.cpp b/src/libslic3r/ExPolygon.cpp index 53b4414cf6..a1b5691ff1 100644 --- a/src/libslic3r/ExPolygon.cpp +++ b/src/libslic3r/ExPolygon.cpp @@ -183,6 +183,25 @@ bool overlaps(const ExPolygons& expolys1, const ExPolygons& expolys2) } } return false; +} + +Point projection_onto(const ExPolygons& polygons, const Point& from) +{ + Point projected_pt; + double min_dist = std::numeric_limits::max(); + + for (const auto& poly : polygons) { + for (int i = 0; i < poly.num_contours(); i++) { + Point p = from.projection_onto(poly.contour_or_hole(i)); + double dist = (from - p).cast().squaredNorm(); + if (dist < min_dist) { + projected_pt = p; + min_dist = dist; + } + } + } + + return projected_pt; } void ExPolygon::simplify_p(double tolerance, Polygons* polygons) const diff --git a/src/libslic3r/ExPolygon.hpp b/src/libslic3r/ExPolygon.hpp index 72bfc7865d..d213d991f4 100644 --- a/src/libslic3r/ExPolygon.hpp +++ b/src/libslic3r/ExPolygon.hpp @@ -453,6 +453,8 @@ bool expolygons_match(const ExPolygon &l, const ExPolygon &r); bool overlaps(const ExPolygons& expolys1, const ExPolygons& expolys2); +Point projection_onto(const ExPolygons& expolys, const Point& pt); + BoundingBox get_extents(const ExPolygon &expolygon); BoundingBox get_extents(const ExPolygons &expolygons); BoundingBox get_extents_rotated(const ExPolygon &poly, double angle); diff --git a/src/libslic3r/TreeSupport.cpp b/src/libslic3r/TreeSupport.cpp index 2b7c2cbfb4..8e941ad017 100644 --- a/src/libslic3r/TreeSupport.cpp +++ b/src/libslic3r/TreeSupport.cpp @@ -625,32 +625,11 @@ static bool is_inside_ex(const ExPolygons &polygons, const Point &pt) return false; } -Point projection_onto_ex(const ExPolygons& polygons, Point from) -{ - profiler.tic(); - Point projected_pt; - double min_dist = std::numeric_limits::max(); - - for (auto poly : polygons) { - for (int i = 0; i < poly.num_contours(); i++) { - Point p = from.projection_onto(poly.contour_or_hole(i)); - double dist = (from - p).cast().squaredNorm(); - if (dist < min_dist) { - projected_pt = p; - min_dist = dist; - } - } - } - - profiler.stage_add(STAGE_projection_onto_ex, true); - return projected_pt; -} - static bool move_out_expolys(const ExPolygons& polygons, Point& from, double distance, double max_move_distance) { Point from0 = from; ExPolygons polys_dilated = union_ex(offset_ex(polygons, scale_(distance))); - Point pt = projection_onto_ex(polys_dilated, from);// find_closest_ex(from, polys_dilated); + Point pt = projection_onto(polys_dilated, from);// find_closest_ex(from, polys_dilated); Point outward_dir = pt - from; Point pt_max = from + normal(outward_dir, scale_(max_move_distance)); double dist2 = vsize2_with_unscale(outward_dir); @@ -2790,7 +2769,7 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) if (group_index > 0 && is_inside_ex(m_ts_data->get_collision(m_ts_data->m_xy_distance, layer_nr), node.position)) { const coordf_t branch_radius_node = calc_branch_radius(branch_radius, node.dist_mm_to_top, diameter_angle_scale_factor); - Point to_outside = projection_onto_ex(m_ts_data->get_collision(m_ts_data->m_xy_distance, layer_nr), node.position); + Point to_outside = projection_onto(m_ts_data->get_collision(m_ts_data->m_xy_distance, layer_nr), node.position); double dist2_to_outside = vsize2_with_unscale(node.position - to_outside); if (dist2_to_outside >= branch_radius_node * branch_radius_node) //Too far inside. { @@ -2871,7 +2850,7 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) #endif auto avoid_layer = m_ts_data->get_avoidance(branch_radius_node, layer_nr_next); - Point to_outside = projection_onto_ex(avoid_layer, node.position); + Point to_outside = projection_onto(avoid_layer, node.position); Point direction_to_outer = to_outside - node.position; double dist2_to_outer = vsize2_with_unscale(direction_to_outer); // don't move if diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index 773d257697..da55f3eae1 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -301,21 +301,18 @@ void ArrangeJob::prepare_wipe_tower() } // if wipe tower is not init yet (no wipe tower in any plate before arrangement) - if (wipe_tower_ap.poly.empty()) { - auto &print = wxGetApp().plater()->get_partplate_list().get_current_fff_print(); - wipe_tower_ap.poly.contour.points = print.first_layer_wipe_tower_corners(false); + //if (wipe_tower_ap.poly.empty()) { + // auto &print = wxGetApp().plater()->get_partplate_list().get_current_fff_print(); + // wipe_tower_ap.poly.contour.points = print.first_layer_wipe_tower_corners(false); wipe_tower_ap.name = "WipeTower"; wipe_tower_ap.is_virt_object = true; wipe_tower_ap.is_wipe_tower = true; - } + //} const GLCanvas3D* canvas3D=static_cast(m_plater->canvas3D()); for (int bedid = 0; bedid < MAX_NUM_PLATES; bedid++) { if (!plates_have_wipe_tower[bedid]) { wipe_tower_ap.translation = {0, 0}; - bool global = true; - int state = m_plater->get_prepare_state(); - if (state == Job::JobPrepareState::PREPARE_STATE_MENU) { global = false; } - wipe_tower_ap.poly.contour.points = canvas3D->estimate_wipe_tower_points(bedid, global); + wipe_tower_ap.poly.contour.points = canvas3D->estimate_wipe_tower_points(bedid, !only_on_partplate); wipe_tower_ap.bed_idx = bedid; m_unselected.emplace_back(wipe_tower_ap); } From c8f1b7698eef0e58c2c226334658376c8b426ccd Mon Sep 17 00:00:00 2001 From: tao wang Date: Wed, 12 Apr 2023 16:33:50 +0800 Subject: [PATCH 304/339] ENH:optimize the display effect of white filaments Change-Id: I690b521d641a91b7f50534ab86b5199f3dd84526 --- src/slic3r/GUI/Widgets/AMSControl.cpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index f6e8741297..e3d04c062d 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -476,17 +476,35 @@ void AMSextruder::doRender(wxDC& dc) if (m_vams_loading) { dc.SetPen(wxPen(m_current_colur, 6, wxSOLID)); dc.DrawRoundedRectangle(-size.x / 2, size.y * 0.1, size.x, size.y, 4); + + if (m_current_colur == *wxWHITE && !wxGetApp().dark_mode()) { + dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxSOLID)); + dc.DrawRoundedRectangle(-size.x / 2 - FromDIP(3), size.y * 0.1 + FromDIP(3), size.x, size.y, 3); + dc.DrawRoundedRectangle(-size.x / 2 + FromDIP(3), size.y * 0.1 - FromDIP(3), size.x, size.y, 5); + } } if (m_ams_loading && !m_none_ams_mode) { dc.SetPen(wxPen(m_current_colur, 6, wxSOLID)); dc.DrawLine(size.x / 2, -1, size.x / 2, size.y * 0.6 - 1); + + if (m_current_colur == *wxWHITE && !wxGetApp().dark_mode()) { + dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxSOLID)); + dc.DrawLine(size.x / 2 - FromDIP(4), -1, size.x / 2 - FromDIP(3), size.y * 0.6 - 1); + dc.DrawLine(size.x / 2 + FromDIP(3), -1, size.x / 2 + FromDIP(3), size.y * 0.6 - 1); + } } } else { if (m_ams_loading) { dc.SetPen(wxPen(m_current_colur, 6, wxSOLID)); dc.DrawLine(size.x / 2, -1, size.x / 2, size.y * 0.6 - 1); + + if (m_current_colur == *wxWHITE && !wxGetApp().dark_mode()) { + dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxSOLID)); + dc.DrawLine(size.x / 2 - FromDIP(4), -1, size.x / 2 - FromDIP(3), size.y * 0.6 - 1); + dc.DrawLine(size.x / 2 + FromDIP(3), -1, size.x / 2 + FromDIP(3), size.y * 0.6 - 1); + } } } @@ -563,8 +581,13 @@ void AMSVirtualRoad::doRender(wxDC& dc) } dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); - dc.DrawRoundedRectangle(size.x / 2, -size.y / 1.1 + FromDIP(1), size.x, size.y, 4); + + if (m_current_color == *wxWHITE && !wxGetApp().dark_mode()) { + dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxSOLID)); + dc.DrawRoundedRectangle(size.x / 2 - FromDIP(3), -size.y / 1.1 + FromDIP(4), size.x, size.y, 5); + dc.DrawRoundedRectangle(size.x / 2 + FromDIP(3), -size.y / 1.1 - FromDIP(2), size.x, size.y, 3); + } } From 40068156fe0d97e0c74184425cfce5c118424e25 Mon Sep 17 00:00:00 2001 From: manch1n Date: Wed, 12 Apr 2023 19:01:22 +0800 Subject: [PATCH 305/339] FIX: correct the translation of conflict check Change-Id: Idbc9114926a8ad7baad38bf8e2709f2a5442b5b4 (cherry picked from commit 9688a514d37fd3ff7152378463d10683acd58cb9) --- src/slic3r/GUI/GLCanvas3D.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 0377bf5a93..13cd6fc9e8 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -8888,7 +8888,7 @@ void GLCanvas3D::_set_warning_notification(EWarning warning, bool state) case EWarning::GCodeConflict: { std::string objName1 = m_gcode_viewer.m_conflict_result.obj1Name; std::string objName2 = m_gcode_viewer.m_conflict_result.obj2Name; - text = (boost::format(L("Conflicts of gcode paths have been found. Please separate the conflicted objects farther (%s <-> %s).")) % objName1 % objName2).str(); + text = (boost::format(_u8L("Conflicts of gcode paths have been found. Please separate the conflicted objects farther (%s <-> %s).")) % objName1 % objName2).str(); error = ErrorType::SLICING_ERROR; break; } From d57931eacd8541a212aeeb3fb8ff5ddbbdb57d2c Mon Sep 17 00:00:00 2001 From: tao wang Date: Wed, 12 Apr 2023 17:37:21 +0800 Subject: [PATCH 306/339] FIX:fixed the invisibility of the cancel button when sending fails Change-Id: I32e9cf0c5846565a3bc9155c57289be9df148bde --- src/slic3r/GUI/BBLStatusBar.cpp | 2 +- src/slic3r/GUI/BBLStatusBar.hpp | 2 +- src/slic3r/GUI/BBLStatusBarBind.cpp | 2 +- src/slic3r/GUI/BBLStatusBarBind.hpp | 2 +- src/slic3r/GUI/BBLStatusBarSend.cpp | 33 ++++++++++++++----- src/slic3r/GUI/BBLStatusBarSend.hpp | 4 +-- src/slic3r/GUI/Jobs/Job.cpp | 4 +-- src/slic3r/GUI/Jobs/Job.hpp | 2 +- .../Jobs/NotificationProgressIndicator.cpp | 2 +- .../Jobs/NotificationProgressIndicator.hpp | 2 +- src/slic3r/GUI/Jobs/PrintJob.cpp | 11 +++++-- src/slic3r/GUI/Jobs/ProgressIndicator.hpp | 2 +- 12 files changed, 46 insertions(+), 22 deletions(-) diff --git a/src/slic3r/GUI/BBLStatusBar.cpp b/src/slic3r/GUI/BBLStatusBar.cpp index 612fb887c4..fcf5205e85 100644 --- a/src/slic3r/GUI/BBLStatusBar.cpp +++ b/src/slic3r/GUI/BBLStatusBar.cpp @@ -128,7 +128,7 @@ void BBLStatusBar::clear_percent() } -void BBLStatusBar::show_networking_test() +void BBLStatusBar::show_networking_test(wxString msg) { } diff --git a/src/slic3r/GUI/BBLStatusBar.hpp b/src/slic3r/GUI/BBLStatusBar.hpp index 04168b8963..20cd96699f 100644 --- a/src/slic3r/GUI/BBLStatusBar.hpp +++ b/src/slic3r/GUI/BBLStatusBar.hpp @@ -45,7 +45,7 @@ public: int get_range() const override; void set_range(int = 100) override; void clear_percent() override; - void show_networking_test() override; + void show_networking_test(wxString msg) override; void show_progress(bool); void start_busy(int = 100); void stop_busy(); diff --git a/src/slic3r/GUI/BBLStatusBarBind.cpp b/src/slic3r/GUI/BBLStatusBarBind.cpp index f2e1cbf460..76eafce693 100644 --- a/src/slic3r/GUI/BBLStatusBarBind.cpp +++ b/src/slic3r/GUI/BBLStatusBarBind.cpp @@ -97,7 +97,7 @@ void BBLStatusBarBind::clear_percent() } -void BBLStatusBarBind::show_networking_test() +void BBLStatusBarBind::show_networking_test(wxString msg) { } diff --git a/src/slic3r/GUI/BBLStatusBarBind.hpp b/src/slic3r/GUI/BBLStatusBarBind.hpp index 17f5564f1b..2752a7bd45 100644 --- a/src/slic3r/GUI/BBLStatusBarBind.hpp +++ b/src/slic3r/GUI/BBLStatusBarBind.hpp @@ -48,7 +48,7 @@ public: int get_range() const override; void set_range(int = 100) override; void clear_percent() override; - void show_networking_test() override; + void show_networking_test(wxString msg) override; void show_progress(bool); void start_busy(int = 100); void stop_busy(); diff --git a/src/slic3r/GUI/BBLStatusBarSend.cpp b/src/slic3r/GUI/BBLStatusBarSend.cpp index 0f3d6efb48..b162412ac0 100644 --- a/src/slic3r/GUI/BBLStatusBarSend.cpp +++ b/src/slic3r/GUI/BBLStatusBarSend.cpp @@ -40,6 +40,7 @@ BBLStatusBarSend::BBLStatusBarSend(wxWindow *parent, int id) m_cancelbutton = new Button(m_self, _L("Cancel")); m_cancelbutton->SetMinSize(wxSize(m_self->FromDIP(58), m_self->FromDIP(22))); + m_cancelbutton->SetMaxSize(wxSize(m_self->FromDIP(58), m_self->FromDIP(22))); m_cancelbutton->SetBackgroundColor(wxColour(255, 255, 255)); m_cancelbutton->SetBorderColor(btn_bd_white); m_cancelbutton->SetCornerRadius(m_self->FromDIP(12)); @@ -55,7 +56,8 @@ BBLStatusBarSend::BBLStatusBarSend(wxWindow *parent, int id) m_stext_percent->SetFont(::Label::Body_13); m_stext_percent->Wrap(-1); - m_hyperlink = new wxHyperlinkCtrl(m_self, wxID_ANY, _L("Check the status of current system services"), wxT("https://status.bambulab.com/"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE); + m_hyperlink = new Label(m_self, _L("Check the status of current system services")); + m_hyperlink->SetForegroundColour(0x00AE42); m_hyperlink->SetFont(::Label::Body_12); m_hyperlink->Hide(); m_sizer_bottom->Add(m_prog, 1, wxALIGN_CENTER, 0); @@ -65,7 +67,7 @@ BBLStatusBarSend::BBLStatusBarSend(wxWindow *parent, int id) m_sizer_bottom->Add(m_cancelbutton, 0, wxALIGN_CENTER, 0); - m_sizer_body->Add(m_status_text, 0, 0, 0); + m_sizer_body->Add(m_status_text, 0, wxALL, 0); m_sizer_body->Add(0, 0, 0, wxTOP, 1); m_sizer_body->Add(m_sizer_bottom, 1, wxEXPAND, 0); @@ -124,12 +126,8 @@ void BBLStatusBarSend::clear_percent() m_cancelbutton->Hide(); } -void BBLStatusBarSend::show_networking_test() +void BBLStatusBarSend::show_networking_test(wxString msg) { - m_prog->Hide(); - m_stext_percent->Hide(); - m_hyperlink->Show(); - std::string url; std::string country_code = Slic3r::GUI::wxGetApp().app_config->get_country_code(); @@ -153,7 +151,26 @@ void BBLStatusBarSend::show_networking_test() url = "https://status.bambu-lab.com"; } - m_hyperlink->SetURL(url); + + m_hyperlink->Bind(wxEVT_LEFT_DOWN, [this, url](auto& e) { + wxLaunchDefaultBrowser(url); + }); + + m_hyperlink->Bind(wxEVT_ENTER_WINDOW, [this, url](auto& e) { + m_hyperlink->SetCursor(wxCURSOR_HAND); + }); + + m_hyperlink->Bind(wxEVT_LEAVE_WINDOW, [this, url](auto& e) { + m_hyperlink->SetCursor(wxCURSOR_ARROW); + }); + + set_status_text(msg); + m_prog->Hide(); + m_stext_percent->Hide(); + m_hyperlink->Show(); + m_cancelbutton->Show(); + m_self->Layout(); + m_sizer->Layout(); } void BBLStatusBarSend::show_progress(bool show) diff --git a/src/slic3r/GUI/BBLStatusBarSend.hpp b/src/slic3r/GUI/BBLStatusBarSend.hpp index 10159f436a..190e56e5e8 100644 --- a/src/slic3r/GUI/BBLStatusBarSend.hpp +++ b/src/slic3r/GUI/BBLStatusBarSend.hpp @@ -30,7 +30,7 @@ class BBLStatusBarSend : public ProgressIndicator { wxPanel * m_self; // we cheat! It should be the base class but: perl! wxGauge * m_prog; - wxHyperlinkCtrl * m_hyperlink; + Label * m_hyperlink; Button * m_cancelbutton; wxStaticText *m_status_text; wxStaticText *m_stext_percent; @@ -51,7 +51,7 @@ public: int get_range() const override; void set_range(int = 100) override; void clear_percent() override; - void show_networking_test() override; + void show_networking_test(wxString msg) override; void show_progress(bool); void start_busy(int = 100); void stop_busy(); diff --git a/src/slic3r/GUI/Jobs/Job.cpp b/src/slic3r/GUI/Jobs/Job.cpp index bb8ec8c460..3cc0ae5aa7 100644 --- a/src/slic3r/GUI/Jobs/Job.cpp +++ b/src/slic3r/GUI/Jobs/Job.cpp @@ -35,9 +35,9 @@ void GUI::Job::update_percent_finish() m_progress->clear_percent(); } -void GUI::Job::show_networking_test() +void GUI::Job::show_networking_test(wxString msg) { - m_progress->show_networking_test(); + m_progress->show_networking_test(msg); } GUI::Job::Job(std::shared_ptr pri) diff --git a/src/slic3r/GUI/Jobs/Job.hpp b/src/slic3r/GUI/Jobs/Job.hpp index 97926ba59e..5c41bc7178 100644 --- a/src/slic3r/GUI/Jobs/Job.hpp +++ b/src/slic3r/GUI/Jobs/Job.hpp @@ -47,7 +47,7 @@ protected: void update_percent_finish(); - void show_networking_test(); + void show_networking_test(wxString msg); bool was_canceled() const { return m_canceled.load(); } diff --git a/src/slic3r/GUI/Jobs/NotificationProgressIndicator.cpp b/src/slic3r/GUI/Jobs/NotificationProgressIndicator.cpp index 197347490e..d6b4c2aca0 100644 --- a/src/slic3r/GUI/Jobs/NotificationProgressIndicator.cpp +++ b/src/slic3r/GUI/Jobs/NotificationProgressIndicator.cpp @@ -10,7 +10,7 @@ void NotificationProgressIndicator::clear_percent() } -void NotificationProgressIndicator::show_networking_test() +void NotificationProgressIndicator::show_networking_test(wxString msg) { } diff --git a/src/slic3r/GUI/Jobs/NotificationProgressIndicator.hpp b/src/slic3r/GUI/Jobs/NotificationProgressIndicator.hpp index 03f88136ae..f41659e3da 100644 --- a/src/slic3r/GUI/Jobs/NotificationProgressIndicator.hpp +++ b/src/slic3r/GUI/Jobs/NotificationProgressIndicator.hpp @@ -15,7 +15,7 @@ public: explicit NotificationProgressIndicator(NotificationManager *nm); void clear_percent() override; - void show_networking_test() override; + void show_networking_test(wxString msg) override; void set_range(int range) override; void set_cancel_callback(CancelFn = CancelFn()) override; void set_progress(int pr) override; diff --git a/src/slic3r/GUI/Jobs/PrintJob.cpp b/src/slic3r/GUI/Jobs/PrintJob.cpp index 7210957d76..11a0c3631d 100644 --- a/src/slic3r/GUI/Jobs/PrintJob.cpp +++ b/src/slic3r/GUI/Jobs/PrintJob.cpp @@ -401,7 +401,6 @@ void PrintJob::process() msg_text = timeout_to_upload_str; } else if (result == BAMBU_NETWORK_ERR_INVALID_RESULT) { msg_text = _L("Failed to send the print job. Please try again."); - this->show_networking_test(); } else if (result == BAMBU_NETWORK_ERR_FTP_UPLOAD_FAILED) { msg_text = _L("Failed to send the print job. Please try again."); } else { @@ -411,7 +410,15 @@ void PrintJob::process() curr_percent = 0; msg_text += wxString::Format("[%d][%s]", result, error_text); } - update_status(curr_percent, msg_text); + + + if (result == BAMBU_NETWORK_ERR_INVALID_RESULT) { + this->show_networking_test(msg_text); + } + else { + update_status(curr_percent, msg_text); + } + BOOST_LOG_TRIVIAL(error) << "print_job: failed, result = " << result; } else { BOOST_LOG_TRIVIAL(error) << "print_job: send ok."; diff --git a/src/slic3r/GUI/Jobs/ProgressIndicator.hpp b/src/slic3r/GUI/Jobs/ProgressIndicator.hpp index 66a6db3c0a..cee6985966 100644 --- a/src/slic3r/GUI/Jobs/ProgressIndicator.hpp +++ b/src/slic3r/GUI/Jobs/ProgressIndicator.hpp @@ -18,7 +18,7 @@ public: virtual ~ProgressIndicator() = default; virtual void clear_percent() = 0; - virtual void show_networking_test() = 0; + virtual void show_networking_test(wxString msg) = 0; virtual void set_range(int range) = 0; virtual void set_cancel_callback(CancelFn = CancelFn()) = 0; virtual void set_progress(int pr) = 0; From 1a99760457f1e5365e55f906859eba2bc9c9112f Mon Sep 17 00:00:00 2001 From: tao wang Date: Tue, 11 Apr 2023 22:15:57 +0800 Subject: [PATCH 307/339] FIX:fixed object cannot be selected printable on object table Change-Id: If42027d8f51242d6f719aa371856d438fbcc7233 --- src/slic3r/GUI/GUI_ObjectTable.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/slic3r/GUI/GUI_ObjectTable.cpp b/src/slic3r/GUI/GUI_ObjectTable.cpp index 9c843e74ca..697a4bbd79 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.cpp +++ b/src/slic3r/GUI/GUI_ObjectTable.cpp @@ -2937,11 +2937,11 @@ void ObjectTablePanel::load_data() m_object_grid->SetCellRenderer(row, col, new GridCellIconRenderer()); m_object_grid->SetReadOnly(row, col); } - else if (grid_col->b_for_object && (grid_row->row_type == ObjectGridTable::row_volume)) { - m_object_grid->SetReadOnly(row, col); - m_object_grid->SetCellEditor(row, col, new wxGridCellAutoWrapStringEditor()); - m_object_grid->SetCellRenderer(row, col, new wxGridCellAutoWrapStringRenderer()); - } + //else if (grid_col->b_for_object && (grid_row->row_type == ObjectGridTable::row_volume)) { + // /*m_object_grid->SetReadOnly(row, col); + // m_object_grid->SetCellEditor(row, col, new wxGridCellAutoWrapStringEditor()); + // m_object_grid->SetCellRenderer(row, col, new wxGridCellAutoWrapStringRenderer());*/ + //} else { if (!grid_col->b_editable) m_object_grid->SetReadOnly(row, col); From e2e1357ff7cdbbf3c8a64d47b8398861a61c11c6 Mon Sep 17 00:00:00 2001 From: gerrit Date: Thu, 13 Apr 2023 09:43:05 +0800 Subject: [PATCH 308/339] ci: update build version to 01.06.00.59 Change-Id: Icc76f0be665274630da56bdf756dc3d98196f99e --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index 44f4bfa84e..cb16803c24 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.06.00.58") +set(SLIC3R_VERSION "01.06.00.59") From 1d4a25ed20a5ca20a4596d89b5d44567341eaf51 Mon Sep 17 00:00:00 2001 From: Arthur Date: Wed, 12 Apr 2023 20:23:00 +0800 Subject: [PATCH 309/339] FIX: bring back Tree Strong style Tree Strong is too similar to Tree Slim and people don't like it. Jira: STUDIO-2660 Github: #1579 Change-Id: I52d7e8e674f0fc332e4ab2813261ffbc4b4cfb7a (cherry picked from commit 9eb209b4c1737d2f10b9b8bd78c9f876f3d32bce) --- src/libslic3r/TreeSupport.cpp | 7 ++++--- src/libslic3r/TreeSupport.hpp | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/TreeSupport.cpp b/src/libslic3r/TreeSupport.cpp index 8e941ad017..865120f6a1 100644 --- a/src/libslic3r/TreeSupport.cpp +++ b/src/libslic3r/TreeSupport.cpp @@ -688,6 +688,7 @@ TreeSupport::TreeSupport(PrintObject& object, const SlicingParameters &slicing_p (m_support_params.interface_density > 0.95 ? ipRectilinear : ipSupportBase); m_support_params.support_extrusion_width = m_object_config->support_line_width.value > 0 ? m_object_config->support_line_width : m_object_config->line_width; is_slim = is_tree_slim(support_type, support_style); + is_strong = is_tree(support_type) && support_style == smsTreeStrong; MAX_BRANCH_RADIUS = 10.0; tree_support_branch_diameter_angle = 5.0;//is_slim ? 10.0 : 5.0; // by default tree support needs no infill, unless it's tree hybrid which contains normal nodes. @@ -2824,13 +2825,13 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) if (is_line_cut_by_contour(node.position, neighbour)) continue; - if (/*is_slim*/1) + if (!is_strong) sum_direction += direction * (1 / dist2_to_neighbor); else sum_direction += direction; } - if (/*is_slim*/1) + if (!is_strong) move_to_neighbor_center = sum_direction; else { if (vsize2_with_unscale(sum_direction) <= max_move_distance2) { @@ -2872,7 +2873,7 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) } // move to the averaged direction of neighbor center and contour edge if they are roughly same direction Point movement; - if (/*is_slim*/1) + if (!is_strong) movement = move_to_neighbor_center*2 + (dist2_to_outer > EPSILON ? direction_to_outer * (1 / dist2_to_outer) : Point(0, 0)); else { if (movement.dot(move_to_neighbor_center) >= 0.2 || move_to_neighbor_center == Point(0, 0)) diff --git a/src/libslic3r/TreeSupport.hpp b/src/libslic3r/TreeSupport.hpp index 639b671a7c..c3611a1b30 100644 --- a/src/libslic3r/TreeSupport.hpp +++ b/src/libslic3r/TreeSupport.hpp @@ -407,6 +407,7 @@ private: coordf_t MAX_BRANCH_RADIUS = 10.0; coordf_t MIN_BRANCH_RADIUS = 0.5; float tree_support_branch_diameter_angle = 5.0; + bool is_strong = false; bool is_slim = false; bool with_infill = false; From fbbfb06f6b9f3c8328b195435cc0ec19e9797e6d Mon Sep 17 00:00:00 2001 From: Arthur Date: Thu, 13 Apr 2023 10:22:46 +0800 Subject: [PATCH 310/339] ENH: make tree support much smoother We increase the smooth iterations from 1 to 50. Change-Id: Iba883fd67d7a9a71c92b364dcc9b76e00fc45820 (cherry picked from commit 945fba20a5629148bfd8cee47f492d42c50f9824) --- src/libslic3r/TreeSupport.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/TreeSupport.cpp b/src/libslic3r/TreeSupport.cpp index 865120f6a1..c37b638798 100644 --- a/src/libslic3r/TreeSupport.cpp +++ b/src/libslic3r/TreeSupport.cpp @@ -2719,6 +2719,10 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) next_node->is_merged = true; contact_nodes[layer_nr_next].push_back(next_node); + // make sure the trees are all connected + if (node.parent) node.parent->child = next_node; + if (neighbour->parent) neighbour->parent->child = next_node; + // Make sure the next pass doesn't drop down either of these (since that already happened). node.merged_neighbours.push_front(neighbour); to_delete.insert(neighbour); @@ -3018,7 +3022,7 @@ void TreeSupport::smooth_nodes(std::vector> &contact_nodes) std::vector pts1 = pts; // TODO here we assume layer height gap is constant. If not true, need to consider height jump // TODO it seems the smooth iterations can't be larger than 1, otherwise some nodes will fly away - for (size_t k = 0; k < 1; k++) { + for (size_t k = 0; k < 50; k++) { for (size_t i = 1; i < pts.size() - 1; i++) { size_t i2 = i >= 2 ? i - 2 : 0; size_t i3 = i < pts.size() - 2 ? i + 2 : pts.size() - 1; @@ -3029,8 +3033,7 @@ void TreeSupport::smooth_nodes(std::vector> &contact_nodes) } for (size_t i = 1; i < pts.size() - 1; i++) { if (!is_processed[branch[i]]) { - // do not move if the new position is too far away - if (vsize2_with_unscale(branch[i]->position - pts[i]) < SQ(m_support_params.support_extrusion_width * 2)) { branch[i]->position = pts[i]; } + branch[i]->position = pts[i]; branch[i]->movement = branch[i]->parent ? (branch[i]->position - branch[i]->parent->position) : Point(0, 0); is_processed[branch[i]] = true; } From 60c444f62791a9b81d398f39d4ee09e456983528 Mon Sep 17 00:00:00 2001 From: "qing.zhang" Date: Thu, 13 Apr 2023 14:14:44 +0800 Subject: [PATCH 311/339] FIX: crash while using MontionLine pattern Signed-off-by: qing.zhang Change-Id: I75232db2902a3d255336fecae7e5e628dc5ac3ba --- src/libslic3r/Fill/Fill.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp index 6ee2b09655..0556a45b8b 100644 --- a/src/libslic3r/Fill/Fill.cpp +++ b/src/libslic3r/Fill/Fill.cpp @@ -475,7 +475,7 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive: LayerRegion* layerm = this->m_regions[surface_fill.region_id]; for (ExPolygon& expoly : surface_fill.expolygons) { - f->no_overlap_expolygons = intersection_ex(surface_fill.no_overlap_expolygons, ExPolygons() = {expoly}); + f->no_overlap_expolygons = intersection_ex(surface_fill.no_overlap_expolygons, ExPolygons() = {expoly}, ApplySafetyOffset::Yes); // Spacing is modified by the filler to indicate adjustments. Reset it for each expolygon. f->spacing = surface_fill.params.spacing; surface_fill.surface.expolygon = std::move(expoly); From b5b7264e99ea0872d39455bf61af56209cb4cd39 Mon Sep 17 00:00:00 2001 From: manch1n Date: Tue, 11 Apr 2023 19:36:04 +0800 Subject: [PATCH 312/339] ENH: add wipe tower into conflict check Change-Id: I9684ec17ccbfdea39deae6e5089b74ce3124d57b (cherry picked from commit f6ee82b4ecf8bf9de91d0043b514cdabb7284b7e) --- src/libslic3r/GCode/ConflictChecker.cpp | 32 ++++++++++--- src/libslic3r/GCode/ConflictChecker.hpp | 45 ++++++++++-------- src/libslic3r/GCode/WipeTower.hpp | 2 + src/libslic3r/Print.cpp | 18 ++++--- src/libslic3r/Print.hpp | 63 +++++++++++++++++++++++-- 5 files changed, 123 insertions(+), 37 deletions(-) diff --git a/src/libslic3r/GCode/ConflictChecker.cpp b/src/libslic3r/GCode/ConflictChecker.cpp index 8f36d65d96..a6a25fe6b3 100644 --- a/src/libslic3r/GCode/ConflictChecker.cpp +++ b/src/libslic3r/GCode/ConflictChecker.cpp @@ -89,10 +89,11 @@ inline Grids line_rasterization(const Line &line, int64_t xdist = RasteXDistance } } // namespace RasterizationImpl -void LinesBucketQueue::emplace_back_bucket(std::vector &&paths, PrintObject *objPtr, Point offset) +void LinesBucketQueue::emplace_back_bucket(std::vector &&paths, const void *objPtr, Point offset) { auto oldSize = _buckets.capacity(); - _buckets.emplace_back(std::move(paths), objPtr, offset); + _buckets.emplace_back(std::move(paths), _objsPtrToId.size(), offset); + _objsPtrToId.push_back(objPtr); _pq.push(&_buckets.back()); auto newSize = _buckets.capacity(); if (oldSize != newSize) { // pointers change @@ -199,10 +200,15 @@ ConflictRet ConflictChecker::find_inter_of_lines(const LineWithIDs &lines) return {}; } -ConflictRet ConflictChecker::find_inter_of_lines_in_diff_objs(PrintObjectPtrs objs) // find the first intersection point of lines in different objects +ConflictObjName ConflictChecker::find_inter_of_lines_in_diff_objs(PrintObjectPtrs objs, + std::optional wtdptr) // find the first intersection point of lines in different objects { if (objs.size() <= 1) { return {}; } LinesBucketQueue conflictQueue; + if (wtdptr.has_value()) { // wipe tower at 0 by default + auto wtpaths = wtdptr.value()->getFakeExtrusionPathsFromWipeTower(); + conflictQueue.emplace_back_bucket(std::move(wtpaths), wtdptr.value(), {wtdptr.value()->plate_origin.x(),wtdptr.value()->plate_origin.y()}); + } for (PrintObject *obj : objs) { auto layers = getAllLayersExtrusionPathsFromObject(obj); conflictQueue.emplace_back_bucket(std::move(layers.first), obj, obj->instances().front().shift); @@ -219,7 +225,7 @@ ConflictRet ConflictChecker::find_inter_of_lines_in_diff_objs(PrintObjectPtrs ob bool find = false; tbb::concurrent_vector conflict; - tbb::parallel_for(tbb::blocked_range( 0, layersLines.size()), [&](tbb::blocked_range range) { + tbb::parallel_for(tbb::blocked_range(0, layersLines.size()), [&](tbb::blocked_range range) { for (size_t i = range.begin(); i < range.end(); i++) { auto interRes = find_inter_of_lines(layersLines[i]); if (interRes.has_value()) { @@ -231,21 +237,33 @@ ConflictRet ConflictChecker::find_inter_of_lines_in_diff_objs(PrintObjectPtrs ob }); if (find) { - return {conflict[0]}; + const void *ptr1 = conflictQueue.idToObjsPtr(conflict[0]._obj1); + const void *ptr2 = conflictQueue.idToObjsPtr(conflict[0]._obj2); + if (wtdptr.has_value()) { + const FakeWipeTower *wtdp = wtdptr.value(); + if (ptr1 == wtdp || ptr2 == wtdp) { + if (ptr2 == wtdp) { std::swap(ptr1, ptr2); } + const PrintObject *obj2 = reinterpret_cast(ptr2); + return {std::make_pair("WipeTower", obj2->model_object()->name)}; + } + } + const PrintObject *obj1 = reinterpret_cast(ptr1); + const PrintObject *obj2 = reinterpret_cast(ptr2); + return {std::make_pair(obj1->model_object()->name, obj2->model_object()->name)}; } else return {}; } ConflictRet ConflictChecker::line_intersect(const LineWithID &l1, const LineWithID &l2) { - if (l1._objPtr == l2._objPtr) { return {}; } // return true if lines are from same object + if (l1._id == l2._id) { return {}; } // return true if lines are from same object Point inter; bool intersect = l1._line.intersection(l2._line, &inter); if (intersect) { auto dist1 = std::min(unscale(Point(l1._line.a - inter)).norm(), unscale(Point(l1._line.b - inter)).norm()); auto dist2 = std::min(unscale(Point(l2._line.a - inter)).norm(), unscale(Point(l2._line.b - inter)).norm()); auto dist = std::min(dist1, dist2); - if (dist > 0.01) { return std::make_optional(l1._objPtr, l2._objPtr); } // the two lines intersects if dist>0.01mm + if (dist > 0.01) { return std::make_optional(l1._id, l2._id); } // the two lines intersects if dist>0.01mm } return {}; } diff --git a/src/libslic3r/GCode/ConflictChecker.hpp b/src/libslic3r/GCode/ConflictChecker.hpp index 0a0242e30f..c0cd4d214d 100644 --- a/src/libslic3r/GCode/ConflictChecker.hpp +++ b/src/libslic3r/GCode/ConflictChecker.hpp @@ -14,11 +14,11 @@ namespace Slic3r { struct LineWithID { - Line _line; - PrintObject *_objPtr; - int _role; + Line _line; + int _id; + int _role; - LineWithID(const Line &line, PrintObject *objPtr, int role) : _line(line), _objPtr(objPtr), _role(role) {} + LineWithID(const Line &line, int id, int role) : _line(line), _id(id), _role(role) {} }; using LineWithIDs = std::vector; @@ -30,11 +30,11 @@ private: unsigned _curPileIdx = 0; std::vector _piles; - PrintObject * _objPtr; + int _id; Point _offset; public: - LinesBucket(std::vector &&paths, PrintObject *objPtr, Point offset) : _piles(paths), _objPtr(objPtr), _offset(offset) {} + LinesBucket(std::vector &&paths, int id, Point offset) : _piles(paths), _id(id), _offset(offset) {} LinesBucket(LinesBucket &&) = default; bool valid() const { return _curPileIdx < _piles.size(); } @@ -52,9 +52,9 @@ public: for (const ExtrusionPath &path : _piles[_curPileIdx]) { if (path.is_force_no_extrusion() == false) { Polyline check_polyline = path.polyline; - if (path.role() != ExtrusionRole::erBrim) { check_polyline.translate(_offset); } + check_polyline.translate(_offset); Lines tmpLines = check_polyline.lines(); - for (const Line &line : tmpLines) { lines.emplace_back(line, _objPtr, path.role()); } + for (const Line &line : tmpLines) { lines.emplace_back(line, _id, path.role()); } } } return lines; @@ -75,11 +75,18 @@ class LinesBucketQueue private: std::vector _buckets; std::priority_queue, LinesBucketPtrComp> _pq; + std::vector _objsPtrToId; public: - void emplace_back_bucket(std::vector &&paths, PrintObject *objPtr, Point offset); - bool valid() const { return _pq.empty() == false; } - + void emplace_back_bucket(std::vector &&paths, const void *objPtr, Point offset); + bool valid() const { return _pq.empty() == false; } + const void *idToObjsPtr(int id) + { + if (id >= 0 && id < _objsPtrToId.size()) { + return _objsPtrToId[id]; + } else + return nullptr; + } void removeLowests(); LineWithIDs getCurLines() const; }; @@ -94,21 +101,21 @@ std::pair, std::vector> getAllLayers struct ConflictResult { - PrintObject *_obj1; - PrintObject *_obj2; - ConflictResult(PrintObject *obj1, PrintObject *obj2) : _obj1(obj1), _obj2(obj2) {} + int _obj1; + int _obj2; + ConflictResult(int obj1, int obj2) : _obj1(obj1), _obj2(obj2) {} ConflictResult() = default; }; -static_assert(std::is_trivial::value, "atomic value requires to be trival."); - using ConflictRet = std::optional; +using ConflictObjName = std::optional>; + struct ConflictChecker { - static ConflictRet find_inter_of_lines_in_diff_objs(PrintObjectPtrs objs); - static ConflictRet find_inter_of_lines(const LineWithIDs &lines); - static ConflictRet line_intersect(const LineWithID &l1, const LineWithID &l2); + static ConflictObjName find_inter_of_lines_in_diff_objs(PrintObjectPtrs objs, std::optional wtdptr); + static ConflictRet find_inter_of_lines(const LineWithIDs &lines); + static ConflictRet line_intersect(const LineWithID &l1, const LineWithID &l2); }; } // namespace Slic3r diff --git a/src/libslic3r/GCode/WipeTower.hpp b/src/libslic3r/GCode/WipeTower.hpp index 0c4175cc6b..dec8887019 100644 --- a/src/libslic3r/GCode/WipeTower.hpp +++ b/src/libslic3r/GCode/WipeTower.hpp @@ -156,6 +156,8 @@ public: float get_depth() const { return m_wipe_tower_depth; } float get_brim_width() const { return m_wipe_tower_brim_width_real; } + float get_height() const { return m_wipe_tower_height; } + float get_layer_height() const { return m_layer_height; } void set_last_layer_extruder_fill(bool extruder_fill) { if (!m_plan.empty()) { diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 5a327ee3ba..dc1f4d4fe0 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1679,15 +1679,18 @@ void Print::process(bool use_cache) { using Clock = std::chrono::high_resolution_clock; auto startTime = Clock::now(); - auto conflictRes = ConflictChecker::find_inter_of_lines_in_diff_objs(m_objects); + std::optional wipe_tower_opt = {}; + if (this->has_wipe_tower()) { + m_fake_wipe_tower.set_pos({m_config.wipe_tower_x.get_at(m_plate_index), m_config.wipe_tower_y.get_at(m_plate_index)}); + wipe_tower_opt = std::make_optional(&m_fake_wipe_tower); + } + auto conflictRes = ConflictChecker::find_inter_of_lines_in_diff_objs(m_objects, wipe_tower_opt); auto endTime = Clock::now(); volatile double seconds = std::chrono::duration_cast(endTime - startTime).count() / (double) 1000; BOOST_LOG_TRIVIAL(info) << "gcode path conflicts check takes " << seconds << " secs."; if (conflictRes.has_value()) { - m_conflict_result.set(conflictRes.value()._obj1, conflictRes.value()._obj2); - auto objName1 = conflictRes.value()._obj1->m_model_object->name; - auto objName2 = conflictRes.value()._obj2->m_model_object->name; + m_conflict_result.set(conflictRes.value().first, conflictRes.value().second); } else { m_conflict_result.reset(); } @@ -1723,7 +1726,7 @@ std::string Print::export_gcode(const std::string& path_template, GCodeProcessor gcode.do_export(this, path.c_str(), result, thumbnail_cb); //BBS if (m_conflict_result.conflicted) { - result->conflict_result.set(m_conflict_result.obj1->m_model_object->name, m_conflict_result.obj2->m_model_object->name); + result->conflict_result.set(m_conflict_result.obj1, m_conflict_result.obj2); } else { result->conflict_result.reset(); } @@ -2152,8 +2155,11 @@ void Print::_make_wipe_tower() m_wipe_tower_data.final_purge = Slic3r::make_unique( wipe_tower.tool_change((unsigned int)(-1))); - m_wipe_tower_data.used_filament = wipe_tower.get_used_filament(); + m_wipe_tower_data.used_filament = wipe_tower.get_used_filament(); m_wipe_tower_data.number_of_toolchanges = wipe_tower.get_number_of_toolchanges(); + const Vec3d origin = this->get_plate_origin(); + m_fake_wipe_tower.set_fake_extrusion_data(wipe_tower.position(), wipe_tower.width(), wipe_tower.get_height(), wipe_tower.get_layer_height(), m_wipe_tower_data.depth, + m_wipe_tower_data.brim_width, {scale_(origin.x()), scale_(origin.y())}); } // Generate a recommended G-code output file name based on the format template, default extension, and template parameters diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index ef43affa10..0e5e9c368b 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -510,6 +510,58 @@ private: static bool infill_only_where_needed; }; +struct FakeWipeTower +{ + // generate fake extrusion + Vec2f pos; + float width; + float height; + float layer_height; + float depth; + float brim_width; + Vec2d plate_origin; + + void set_fake_extrusion_data(Vec2f p, float w, float h, float lh, float d, float bd, Vec2d o) + { + pos = p; + width = w; + height = h; + layer_height = lh; + depth = d; + brim_width = bd; + plate_origin = o; + } + + void set_pos(Vec2f p) { pos = p; } + + std::vector getFakeExtrusionPathsFromWipeTower() const + { + float h = height; + float lh = layer_height; + int d = scale_(depth); + int w = scale_(width); + int bd = scale_(brim_width); + Point minCorner = {scale_(pos.x()), scale_(pos.y())}; + Point maxCorner = {minCorner.x() + w, minCorner.y() + d}; + + std::vector paths; + for (float hh = 0.f; hh < h; hh += lh) { + ExtrusionPath path(ExtrusionRole::erWipeTower, 0.0, 0.0, lh); + path.polyline = {minCorner, {maxCorner.x(), minCorner.y()}, maxCorner, {minCorner.x(), maxCorner.y()}, minCorner}; + paths.push_back({path}); + + if (hh == 0.f) { // add brim + ExtrusionPath fakeBrim(ExtrusionRole::erBrim, 0.0, 0.0, lh); + Point wtbminCorner = {minCorner - Point{bd, bd}}; + Point wtbmaxCorner = {maxCorner + Point{bd, bd}}; + fakeBrim.polyline = {wtbminCorner, {wtbmaxCorner.x(), wtbminCorner.y()}, wtbmaxCorner, {wtbminCorner.x(), wtbmaxCorner.y()}, wtbminCorner}; + paths.back().push_back(fakeBrim); + } + } + return paths; + } +}; + struct WipeTowerData { // Following section will be consumed by the GCodeGenerator. @@ -779,12 +831,12 @@ private: struct ConflictResult { bool conflicted; - PrintObject *obj1; - PrintObject *obj2; + std::string obj1; + std::string obj2; //TODO //the actual loaction - void set(PrintObject *o1, PrintObject *o2) + void set(const std::string& o1, const std::string& o2) { conflicted = true; obj1 = o1; @@ -793,10 +845,11 @@ private: void reset() { conflicted = false; - obj1 = nullptr; - obj2 = nullptr; + obj1.clear(); + obj2.clear(); } }m_conflict_result; + FakeWipeTower m_fake_wipe_tower; // To allow GCode to set the Print's GCodeExport step status. friend class GCode; From b2fbd6b09aeaee8adf8b008547cf95ce07d49602 Mon Sep 17 00:00:00 2001 From: "qing.zhang" Date: Thu, 13 Apr 2023 15:22:19 +0800 Subject: [PATCH 313/339] ENH: Cool Plate -> Cool Plate/PLA Plate Signed-off-by: qing.zhang Change-Id: Iaee7fb0df3a515b3fa726e16d7363e7c56ded7c2 --- bbl/i18n/BambuStudio.pot | 2 +- bbl/i18n/de/BambuStudio_de.po | 2 +- bbl/i18n/en/BambuStudio_en.po | 6 ++-- bbl/i18n/es/BambuStudio_es.po | 2 +- bbl/i18n/fr/BambuStudio_fr.po | 2 +- bbl/i18n/hu/BambuStudio_hu.po | 2 +- bbl/i18n/it/BambuStudio_it.po | 2 +- bbl/i18n/ja/BambuStudio_ja.po | 2 +- bbl/i18n/nl/BambuStudio_nl.po | 2 +- bbl/i18n/sv/BambuStudio_sv.po | 2 +- bbl/i18n/zh_cn/BambuStudio_zh_CN.po | 50 ++++++++++++++-------------- resources/i18n/en/BambuStudio.mo | Bin 213552 -> 213564 bytes resources/i18n/zh_cn/BambuStudio.mo | Bin 212684 -> 212713 bytes 13 files changed, 37 insertions(+), 37 deletions(-) diff --git a/bbl/i18n/BambuStudio.pot b/bbl/i18n/BambuStudio.pot index 3a411bdec3..baf5637647 100644 --- a/bbl/i18n/BambuStudio.pot +++ b/bbl/i18n/BambuStudio.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 20:18+0800\n" +"POT-Creation-Date: 2023-04-13 15:16+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/bbl/i18n/de/BambuStudio_de.po b/bbl/i18n/de/BambuStudio_de.po index d4331b30e9..0f5a7a1de1 100644 --- a/bbl/i18n/de/BambuStudio_de.po +++ b/bbl/i18n/de/BambuStudio_de.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 20:18+0800\n" +"POT-Creation-Date: 2023-04-13 15:16+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" diff --git a/bbl/i18n/en/BambuStudio_en.po b/bbl/i18n/en/BambuStudio_en.po index e6118bade0..6441acca64 100644 --- a/bbl/i18n/en/BambuStudio_en.po +++ b/bbl/i18n/en/BambuStudio_en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 20:18+0800\n" +"POT-Creation-Date: 2023-04-13 15:16+0800\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -4754,7 +4754,7 @@ msgid "Same as Global Bed Type" msgstr "Same as Global Plate Type" msgid "Cool Plate" -msgstr "Cool Plate/PLA Plate" +msgstr "Cool Plate / PLA Plate" msgid "Engineering Plate" msgstr "Engineering Plate" @@ -5288,7 +5288,7 @@ msgid "Nozzle temperature when printing" msgstr "Nozzle temperature when printing" msgid "Cool plate" -msgstr "Cool plate" +msgstr "Cool Plate / PLA Plate" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " diff --git a/bbl/i18n/es/BambuStudio_es.po b/bbl/i18n/es/BambuStudio_es.po index ad4bd76f4f..374bcf82b3 100644 --- a/bbl/i18n/es/BambuStudio_es.po +++ b/bbl/i18n/es/BambuStudio_es.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 20:18+0800\n" +"POT-Creation-Date: 2023-04-13 15:16+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" diff --git a/bbl/i18n/fr/BambuStudio_fr.po b/bbl/i18n/fr/BambuStudio_fr.po index ce32a28330..b3df47071c 100644 --- a/bbl/i18n/fr/BambuStudio_fr.po +++ b/bbl/i18n/fr/BambuStudio_fr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 20:18+0800\n" +"POT-Creation-Date: 2023-04-13 15:16+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" diff --git a/bbl/i18n/hu/BambuStudio_hu.po b/bbl/i18n/hu/BambuStudio_hu.po index 075f65e301..7435b3bdeb 100644 --- a/bbl/i18n/hu/BambuStudio_hu.po +++ b/bbl/i18n/hu/BambuStudio_hu.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 20:18+0800\n" +"POT-Creation-Date: 2023-04-13 15:16+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" diff --git a/bbl/i18n/it/BambuStudio_it.po b/bbl/i18n/it/BambuStudio_it.po index c603b1e922..4d935251ce 100644 --- a/bbl/i18n/it/BambuStudio_it.po +++ b/bbl/i18n/it/BambuStudio_it.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 20:18+0800\n" +"POT-Creation-Date: 2023-04-13 15:16+0800\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/bbl/i18n/ja/BambuStudio_ja.po b/bbl/i18n/ja/BambuStudio_ja.po index fafcdaf8d2..1ba994e549 100644 --- a/bbl/i18n/ja/BambuStudio_ja.po +++ b/bbl/i18n/ja/BambuStudio_ja.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 20:18+0800\n" +"POT-Creation-Date: 2023-04-13 15:16+0800\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/bbl/i18n/nl/BambuStudio_nl.po b/bbl/i18n/nl/BambuStudio_nl.po index ca79c9f8c0..3f850235e0 100644 --- a/bbl/i18n/nl/BambuStudio_nl.po +++ b/bbl/i18n/nl/BambuStudio_nl.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 20:18+0800\n" +"POT-Creation-Date: 2023-04-13 15:16+0800\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/bbl/i18n/sv/BambuStudio_sv.po b/bbl/i18n/sv/BambuStudio_sv.po index d55af87cc5..b4858ea15f 100644 --- a/bbl/i18n/sv/BambuStudio_sv.po +++ b/bbl/i18n/sv/BambuStudio_sv.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 20:18+0800\n" +"POT-Creation-Date: 2023-04-13 15:16+0800\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po index 4beb6a27d5..37cbcc99b1 100644 --- a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po +++ b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-11 20:18+0800\n" +"POT-Creation-Date: 2023-04-13 15:16+0800\n" "PO-Revision-Date: 2023-04-10 17:13+0800\n" "Last-Translator: Jiang Yue \n" "Language-Team: \n" @@ -1870,7 +1870,7 @@ msgid "Nozzle Diameter" msgstr "喷嘴直径" msgid "Bed Type" -msgstr "构建板类型" +msgstr "打印板类型" msgid "Nozzle temperature" msgstr "喷嘴温度" @@ -2418,7 +2418,7 @@ msgid "Inspecting first layer" msgstr "扫描首层" msgid "Identifying build plate type" -msgstr "识别构建板类型" +msgstr "识别打印板类型" msgid "Calibrating Micro Lidar" msgstr "标定轮廓仪外参" @@ -2874,8 +2874,8 @@ msgid "" "Please solve the problem by moving it totally on or off the plate, and " "confirming that the height is within the build volume." msgstr "" -"对象被放置在构建板的边界上或超过高度限制。\n" -"请通过将其完全移动到构建板内或构建板外,并确认高度在构建空间以内来解决问题。" +"对象被放置在打印板的边界上或超过高度限制。\n" +"请通过将其完全移动到打印板内或打印板外,并确认高度在构建空间以内来解决问题。" msgid "Calibration" msgstr "校准" @@ -3870,12 +3870,12 @@ msgid "Sensitivity of pausing is" msgstr "暂停的灵敏度为" msgid "Enable detection of build plate position" -msgstr "启用构建板位置检测" +msgstr "启用打印板位置检测" msgid "" "The localization tag of build plate is detected, and printing is paused if " "the tag is not in predefined range." -msgstr "检测构建板的定位标记,如果标记不在预定义范围内时暂停打印。" +msgstr "检测打印板的定位标记,如果标记不在预定义范围内时暂停打印。" msgid "First Layer Inspection" msgstr "首层扫描" @@ -3939,7 +3939,7 @@ msgid "Connection" msgstr "连接" msgid "Bed type" -msgstr "构建板类型" +msgstr "打印板类型" msgid "Flushing volumes" msgstr "冲刷体积" @@ -4635,10 +4635,10 @@ msgid "Print sequence" msgstr "打印顺序" msgid "Same as Global Bed Type" -msgstr "跟随全局构建板类型" +msgstr "跟随全局打印板类型" msgid "Cool Plate" -msgstr "低温打印板/PLA打印板" +msgstr "低温打印板 / PLA打印板" msgid "Engineering Plate" msgstr "工程材料打印板" @@ -4794,13 +4794,13 @@ msgid "Busy" msgstr "忙碌" msgid "Bambu Cool Plate" -msgstr "低温打印热床" +msgstr "低温打印板 / PLA打印板" msgid "Bamabu Engineering Plate" -msgstr "工程打印热床" +msgstr "工程材料打印板" msgid "Bamabu High Temperature Plate" -msgstr "高温打印热床" +msgstr "高温打印板" msgid "Send print job to" msgstr "发送打印任务至" @@ -5041,7 +5041,7 @@ msgid "" "\"->\"Timelapse Wipe Tower\"." msgstr "" "在录制无工具头延时摄影视频时,建议添加“延时摄影擦料塔”\n" -"右键单击构建板的空白位置,选择“添加标准模型”->“延时摄影擦料塔”。" +"右键单击打印板的空白位置,选择“添加标准模型”->“延时摄影擦料塔”。" msgid "Line width" msgstr "线宽" @@ -5149,7 +5149,7 @@ msgid "Nozzle temperature when printing" msgstr "打印时的喷嘴温度" msgid "Cool plate" -msgstr "低温打印热床" +msgstr "低温打印板 / PLA打印板" msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " @@ -5157,7 +5157,7 @@ msgid "" msgstr "安装低温打印热床时的热床温度。0值表示这个耗材丝不支持低温打印热床" msgid "Engineering plate" -msgstr "工程材料热床" +msgstr "工程材料打印板" msgid "" "Bed temperature when engineering plate is installed. Value 0 means the " @@ -6395,7 +6395,7 @@ msgid "" msgstr "首层热床温度。0值表示这个耗材丝不支持纹理PEI热床" msgid "Bed types supported by the printer" -msgstr "打印机所支持的构建板类型" +msgstr "打印机所支持的打印板类型" msgid "This G-code is inserted at every layer change before lifting z" msgstr "在每次换层抬升z高度之前插入这段G-code" @@ -6963,7 +6963,7 @@ msgstr "外墙加速度。使用较小的值可以提高质量。" msgid "" "Acceleration of initial layer. Using a lower value can improve build plate " "adhensive" -msgstr "首层加速度。使用较低值可以改善和构建板的粘接。" +msgstr "首层加速度。使用较低值可以改善和打印板的粘接。" msgid "Line width of initial layer" msgstr "首层的线宽" @@ -7686,7 +7686,7 @@ msgid "Use this setting to rotate the support pattern on the horizontal plane." msgstr "设置支撑图案在水平面的旋转角度。" msgid "On build plate only" -msgstr "仅在构建板生成" +msgstr "仅在打印板生成" msgid "Don't create support on model surface, only on build plate" msgstr "不在模型表面上生成支撑,只在热床上生成。" @@ -7889,7 +7889,7 @@ msgid "" "may cause the model broken free from build plate" msgstr "" "不建议其它层热床温度比首层的热床温度低于这个值。太低的其它层热床温度可能导致" -"打印过程中模型从构建板脱落。" +"打印过程中模型从打印板脱落。" msgid "Detect thin wall" msgstr "检查薄壁" @@ -8856,7 +8856,7 @@ msgstr "" #~ "Primitive\"->\"Timelapse Wipe Tower\".\n" #~ msgstr "" #~ "在录制无工具头延时摄影视频时,建议添加“延时摄影擦料塔”\n" -#~ "右键单击构建板的空白位置,选择“添加标准模型”->“延时摄影擦料塔”。\n" +#~ "右键单击打印板的空白位置,选择“添加标准模型”->“延时摄影擦料塔”。\n" #~ msgid " is too close to others, there may be collisions when printing.\n" #~ msgstr "到其他对象的距离太近了,可能在打印过程中发生碰撞。\n" @@ -8891,7 +8891,7 @@ msgstr "" #~ "layer may cause the model broken free from build plate" #~ msgstr "" #~ "不建议其它层热床温度比首层的热床温度低于这个值。太低的其它层热床温度可能导" -#~ "致打印过程中模型从构建板脱落" +#~ "致打印过程中模型从打印板脱落" #~ msgid "" #~ "normal(auto) and tree(auto) is used to generate support automatically. If " @@ -10030,7 +10030,7 @@ msgstr "" #~ msgstr "全局" #~ msgid "Build plate" -#~ msgstr "构建板" +#~ msgstr "打印板" #~ msgid "Object list" #~ msgstr "对象列表" @@ -10575,7 +10575,7 @@ msgstr "" #~ "Please check the bed temperature and make sure whether to use the value" #~ msgstr "" #~ "其它层热床温度比首层热床温度低太多。\n" -#~ "这可能导致打印中模型从构建板脱落。\n" +#~ "这可能导致打印中模型从打印板脱落。\n" #~ "请检查热床温度并确认是否用相应数值" #~ msgid "Nozzle temperature range" @@ -11387,7 +11387,7 @@ msgstr "" #~ msgstr "重新切片" #~ msgid "Select Plater Tab" -#~ msgstr "选择 构建板 选项卡" +#~ msgstr "选择 打印板 选项卡" #~ msgid "Select Print Settings Tab" #~ msgstr "选择 打印设置 选项卡" diff --git a/resources/i18n/en/BambuStudio.mo b/resources/i18n/en/BambuStudio.mo index 0404d22b94ecbb35a1a6b5206709e64d484b42e0..a740139b2b6c7b46925e1da5c7270205973ed178 100644 GIT binary patch delta 14484 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 delta 14476 zcmXZj3Aj$x{=o5l-ZvGQA|yjc+tlqAWk4N^$~ zT#x7BHoOFPMZd#xNzxctzt>QW#rfG0V{o-X6=xqW4Y1qPPUD_;s}6H}PD27Z>6tEQGf;NhR0f zJ($KdH~`;nl1U{6Nt9_CMqCBWx5V?Y6V||+@G_i?j_Bp+Dl~Fy@dDg}4q!Lli-*yO z_HGvH9f)>l1Uith84?$hn2p!qGOUg#uoRZQDwSM~bn9(9gn%>AHyQJ94q2F zbPE5AM)D6VjzzByQ&|ZeSf&LDdpH7b!O_?d_oELMzb5p&a5drlEEYl{hes2Uqd_a1NOz1ty0NAT!_wX zx^?JqG2BhQ5;}#y;pJGYO)6Q0jj$zthE=hA+f?!;wne9~>h(mB_LD0~7@Ai2JoZ6H zn$s@KX@Te^Xr!v44K+jObRatNdt-h)Rv`Z*=HkC&`95?2C(uQF7Bg0OZu`)qi_wu( zj5fo33=RMHAFw~;W!%g`RJjrsS{5$r}ob^`0*Y4ilE)-8;T8NG91&!UG|vdsr;FXv0l054)icJczkC6~@n@%k9F!pX6GF&crF(E46OBm6d6-zKzUANOJZk08;ZZwTF5bgupnozpL4`6+yu z{CWLSNo|~t58!$nh0XehHSrn_CI10Bb#(`%l3Lgbt#=e!?__L@^9N*7$^9huQZNoX z{Vj$Voq{9i2+p}VG*lQp0ViNhoPt$wH5$n;qTi$U{e^q*oPlBWe};b}e-f>?OXij^ zCwY#Jq4hztJ(v5^Kp8@Fh7>dsMeQ3oQwBi}jdFV(M;#2rK zI#nHqhx@yspIn2`kJd-f4lPCNU5ROY6Eh~(lCa?oXsEZNq27i?l5{XLc!8WAcg zi*~#s4#(OtzW}XgY4k00Eo?zMx-+_W1pD8D{S?^Hm*`ynfR3=-$WT!o{EGZF=m;*q zGla4R`dlkCq}{O^4#4U-746{aczq*U?{?%%Avts>``K z@4Le{;ZijJ7rHn*k4hys;Y76jbG(q6Yu^(((qeR2q{GmLE8Q0&(Fh&LwHXpFvbN~{ zy&Vm`RYGiR{ zk}pX#q9FZX_`qm}4apBjNBjc1e^;XwZix9^XvaTCBlkTTxpT*cd$Ud(ho*1YHX=9tsD^d~{@s(NO*i4fTdt{t+7T zeKCImtCRmdmRBAh?r$=l{qO2*MSY)+79_>&Ubg}k~*N10F7|My5hfl=(o9H6hg!OPg*2f}~!~Lz$ zin^eY8H|nb0W=bCMAxEI`2jj5yV1pc41GCe{v=@sNh z(KEXg|4yEk617JuN(<( zTH(m4VPun{bE3~j-$1A2gXn?iPtgL8hSzZgbT?dw72W?MNz}mEcqwkcDtHJvB9j8s zf;FR^qIY8{KE0kqBe49j;M(X%(f#PT@V{uj$3s3BGhS#)q6hXs=WbbaZFGC|Aok|^ z33LwIP7k5I5e;?sm>+;f@K!X`<6?e1TK`k%ZhB=p`+qQrO%xd7+A~4~TA?=#LbugJ zXe3_1v-lxqcgGXqw^{qqweTA{*9B*Wle0M5kqXhq(a!Pu;F;`yBQTl*M>G>%Z1d37 zy9BLp4Z4rlq5FO_I^siU=)Xmu{~g^O$*fSG4?Q_AisoWv@-@(1*EK`J2mTgs7=*8p zzY}e+;_R?kYD9ZQCq`GG`}qJmkRQ?K3e5@Iw`BARw8L%D`?{dpJTr`h4~#=c{xEvu zOmyz%qa9p`KJYvm`qkI~x1o_rJsD2SlIZqqgDtTm`VyOk?QjvgOO7MYWs>yV5Ta6O z!xhnv)I@*j+z4F@J7uunT=y~u6-hk84#kCJB;x{p0XkLg!IlP?m2IzqMVs`%z zBH__F5-r_LlZP5;PzzWzK z9l(RJd3j6u(ldFa44qaptpt^ZFnBImtAJMRA?Bphi8bWv1A zZ>;YPcr{kV>(D6}j*jpibSlPRbDV@daTD5b`B%daDDANy`3dOH4~OtNOqR0$?RhH_ z&ecHlBXcUcc-EsM{~8_98Ek^pmW9vfLFoNYp$-2By}!!xu$!(zU%x}p0Zc$6whSHM zTg%!1E}o4P7@|FB1inBQ*SBb>&Y};V^RE!83-NmLm!kt1fmh-*yaP8xYpe+M%|#=& z1a~v{FQN60UCI9U%V*NcP~ibI2-bf|SkUxZW zG_yL?GYz|tpNX!Wuh4=1gjMhlZ*;_!*Mx0R7kzDBi_Y1kSbi9*k^d2mSh;_P{1xc? zyf-?x_n;Nej;=);{2B}64`^inLKkErXZ6{B;jjy8oF2(qaO%wp^?~$&Q*zb z!hPk?k=8>GrY`7y9)$0Z|Hs-eva8mG4s}3}=wWC*)6tR7#dF;MFUAW?(e3qm_5#1H zMmw|~4c({cR2@a{`w5-%-_bQQ@7)lQXVJyB0uB8eXv6QK4R1yV@Co*E|DPh!8au8J z2gs9XL$62IV>Xm%#Rt(3jsKz*pNZGg8$$jfbP<+CpR0#h*fbB+TgZWzCV_qMniqsN1=nQ(J2^+hI}l# z2A;?45sohEEtoO!9}Q%vJ=baDNFHdu6f2x%@Fp_=H)))c+o3XM#6H1v0(4UWT_ zI1jCF6FRkDdQg=NsWt`e<PVJ=_08r=;A@a4=nqMxqn;#Bu0i-J2oNhQvX1ZZ7{gJWvZalD{hEb9RL_Q4}3P z9@>!_Xk>bz9qAjr7rk!=dNR&I2lN~cz!f+VGevjv^5OM42fI^nU{9#9?%puRjj$o* zEzl8afbUpL&8N=^t13U z6xGp?_D4tZ_gFp@ovH=c9FL-ls>=RUaw|4Kx9>C2Rp>xIMC;od^9OJS`EM}$_djC} zgkL&8iVe8X?qK+9m50y>V+<*<@gUgfPUfh`y%Y347v#4LD$HByaMxm z8J??;Pm{j|GluRj5{~rTLm`xfqb1NeE{p513ObUb=wds8R(#%nL&Xiz-82Ym;A|X) z8_>`Nef$I((k0jkSD=yk2HmCw zzY0foE?RFrwBg3+K--~fqBGuzJ-*7MlDkMePl1c-;;%yk710}OqoJ&i&UH7mLj$8j z(1u3ge0I?oJVd_Kv2f!3hE7%KZ^Bn~8|*=T8d`ohL&DHs_`fjX(r80f(VjO%N8T1a zfO=yGyboP$o8t8Y=>6YeJNzr=+kKl#HjwXweqWS39)2LHjjoN%1QO2SGISRlMCbN2 z`VuO3B1E7n=8|uVm2oh7|BRS_6+MDK#ytEE?NG_@!Wzm$2UZX5__av8nWSedco>^; z;Ti0RpW!sD_I-F@4cg##v}4E6srd`9!SX+ZgQ!1xUd+RxxB_js+{qB(>gbwjin;Fp z{v@hVkUIF82G4{qJHLN8&2{2xnn|-@_t#7Wh=|;oDusOb$FP;6T*z|e) z{lgG$eEPg}c7*4hpU(b0P;+#y-ohKPNd9#8PpkT)`8C)Q&n=M7{_3_J4kSMpjpXm> zeT^YceF3koX?`V3<`XxCUKp`_b)m0^4JW!s+bxyBRx? zpMqAr53RUzkjOJ{#zX;3_bcmOu%dfAK8+1=6)^OGNfZp(Yn2)}_II2B5yvwybJ9{aohQzgTV zH=_s0BHV*(aXZc`l}^^<%@?PW&+)R-Ap$v~-wtDuYXH2R@Zr%XEgujzx)$UKck z<{0k6yt3)!2RwsK-2cbRrL#XO<&{q-_i^DY7QuTiO=sT$lhFKB?2J!gS3Hi6w0UkQ zZ->4!=A-X~Md&&5B6=RYg1$T6Ku^YXxWoOwgTxiMph7zPdAtMbl0Sl$m%1#Jw?Pk% zzGy?U&<@OtE=DU}iXJ>`F^wOfk^L}U{|fEMDa;fm@fQid%L`XbXHT?>Xhn^&IJS%V z{&)fT5wZM%SUw$HtP9b4R-zHu9ItOjPtwoPNE}D&`L!bZ-=3r^rIQv|5SwC0bYzdB z9hrl^zh6LKPRp<$ZbmEGjo$xd%>NI)?-Y7c7QH-J6MZ+dL!TRXc_xHnI0aTP8lCHh z&=5a?j^s)7Z%uSVbX#-}`rH?IF&@EO`~$70eC04TmC$x-WJq{JGjuBYp(7m{ zy*oMvcToNi+JVk_p@KeW$A+MhoE)8w)-w;ScLCbqax^mQ(3eu?Qxerle2Z34s!F&q z7oF4E=-jnH&x1}e|2W=Eem=TJ{zT`#Sk-WH=Aj48gJ?bPNB5%l9YZ>nN&X;V0|l#v z&|QMg&86r_tD_^VkM*z+QIwLhBD~XJ&Y@H1{$fBwb&Hp#B2gRH*G(t4;YqZCo9cxI2jIm#I38{A=_^BImY`Gj5;_&D z(FkosN4^iQ!Eez>Rj(h)yP&({@AcXLJ}{Po?1_e+1M^~jKYD_Fi5?tB(3jQs*a|x| zNN0bVorPn_|AZ58c*At|C!!zGm)b>*(%HZLxDl=Ab?lDsHe&zVff9|w%b_}UCjS@O zq0UXh;_4Co8ycBA(Csx69qH)kBWQh3qucB?^Z?t2&iMg!+nq)uc|oRWsIWL%QE7CQ zR!47Wj(OM?%i~CNtxQKd@*?KqvY7urw4U8)Ltmq7>Nm6_=Qj(Mj%KRGL{s#}8_){+ zpb;2`j`S{cpWlyezsE3z&!7!0jIKhT+l0>Xwpe}yt^ZfFBj;X~jYuXbMZyN_VKr=p z+0aHuqibMXbUfPdWHdsLpbb8OKKEqIKNDRX%U?uy$#QhNufdk?k1t8MdMjO>&i+_j z2kq&0v||VGI{XeDX}xR0_15TIcSjo@f^3rHE;Lf3(5ah(?vfSQ71v=KEY_TXxIcT7 zu)%)loDRio$kEk$Kia{GXy~6n-)f7{ir1kd`v@nD8l;M>`r+paIS=zc1FkvQFx|eu{{uLjPWAu* diff --git a/resources/i18n/zh_cn/BambuStudio.mo b/resources/i18n/zh_cn/BambuStudio.mo index 851069bade6d66eee08efb1ef36d6ba31204129a..011fc73065ed4a45cb184c5ebfb86b6c558e67d2 100644 GIT binary patch delta 17367 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 G&3^$8X<66+ delta 17336 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 BJR|@B From 4c41f4616385680d0b956ecb5c9cde1500425663 Mon Sep 17 00:00:00 2001 From: "qing.zhang" Date: Wed, 12 Apr 2023 18:13:57 +0800 Subject: [PATCH 314/339] ENH: add filament_is_support to all files Signed-off-by: qing.zhang Change-Id: I439ef9a2902563874d748be9aa9fe067e99588e6 --- resources/profiles/BBL/filament/Bambu PLA Silk @base.json | 2 +- resources/profiles/BBL/filament/Bambu PLA-CF @base.json | 6 ++++++ resources/profiles/BBL/filament/Generic PETG-CF @base.json | 3 +++ resources/profiles/BBL/filament/Generic PLA-CF @base.json | 6 ++++++ resources/profiles/BBL/filament/fdm_filament_common.json | 3 +++ resources/profiles/BBL/filament/fdm_filament_pla.json | 4 ++-- 6 files changed, 21 insertions(+), 3 deletions(-) diff --git a/resources/profiles/BBL/filament/Bambu PLA Silk @base.json b/resources/profiles/BBL/filament/Bambu PLA Silk @base.json index 30870a0d06..888799234a 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Silk @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Silk @base.json @@ -12,7 +12,7 @@ "3" ], "filament_flow_ratio": [ - "0.95" + "0.98" ], "filament_density": [ "1.32" diff --git a/resources/profiles/BBL/filament/Bambu PLA-CF @base.json b/resources/profiles/BBL/filament/Bambu PLA-CF @base.json index c9d8349c4d..533e5d6117 100644 --- a/resources/profiles/BBL/filament/Bambu PLA-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA-CF @base.json @@ -8,6 +8,12 @@ "filament_vendor": [ "Bambu Lab" ], + "cool_plate_temp" : [ + "45" + ], + "cool_plate_temp_initial_layer" : [ + "45" + ], "filament_cost": [ "34.99" ], diff --git a/resources/profiles/BBL/filament/Generic PETG-CF @base.json b/resources/profiles/BBL/filament/Generic PETG-CF @base.json index 69538b3ae9..949c11f5e2 100644 --- a/resources/profiles/BBL/filament/Generic PETG-CF @base.json +++ b/resources/profiles/BBL/filament/Generic PETG-CF @base.json @@ -5,6 +5,9 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_pet", + "filament_flow_ratio": [ + "0.95" + ], "temperature_vitrification": [ "75" ], diff --git a/resources/profiles/BBL/filament/Generic PLA-CF @base.json b/resources/profiles/BBL/filament/Generic PLA-CF @base.json index df8db5d345..aebf40321e 100644 --- a/resources/profiles/BBL/filament/Generic PLA-CF @base.json +++ b/resources/profiles/BBL/filament/Generic PLA-CF @base.json @@ -8,6 +8,12 @@ "required_nozzle_HRC": [ "40" ], + "cool_plate_temp" : [ + "45" + ], + "cool_plate_temp_initial_layer" : [ + "45" + ], "filament_flow_ratio": [ "0.95" ], diff --git a/resources/profiles/BBL/filament/fdm_filament_common.json b/resources/profiles/BBL/filament/fdm_filament_common.json index 58998e42e0..646ec19711 100644 --- a/resources/profiles/BBL/filament/fdm_filament_common.json +++ b/resources/profiles/BBL/filament/fdm_filament_common.json @@ -3,6 +3,9 @@ "name": "fdm_filament_common", "from": "system", "instantiation": "false", + "filament_is_support": [ + "0" + ], "required_nozzle_HRC": [ "3" ], diff --git a/resources/profiles/BBL/filament/fdm_filament_pla.json b/resources/profiles/BBL/filament/fdm_filament_pla.json index 02a8f8705c..b90eebee88 100644 --- a/resources/profiles/BBL/filament/fdm_filament_pla.json +++ b/resources/profiles/BBL/filament/fdm_filament_pla.json @@ -20,7 +20,7 @@ "20" ], "cool_plate_temp" : [ - "45" + "35" ], "eng_plate_temp" : [ "0" @@ -32,7 +32,7 @@ "55" ], "cool_plate_temp_initial_layer" : [ - "45" + "35" ], "eng_plate_temp_initial_layer" : [ "0" From 7e5ddccabe786cba0524510916a0c214d56ca900 Mon Sep 17 00:00:00 2001 From: tao wang Date: Thu, 13 Apr 2023 16:46:21 +0800 Subject: [PATCH 315/339] FIX:fixed incorrect english words Change-Id: Ic1b581d9fbba8cd8be09a9c068a160c1bec6369a --- src/slic3r/GUI/AMSMaterialsSetting.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index 8899de08a7..2adea267c9 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -569,7 +569,7 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) if (ams_filament_id.empty() || nozzle_temp_min.empty() || nozzle_temp_max.empty() || m_filament_type.empty()) { BOOST_LOG_TRIVIAL(trace) << "Invalid Setting id"; - MessageDialog msg_dlg(nullptr, _L("You need to select the material type and color firet."), wxEmptyString, wxICON_WARNING | wxOK); + MessageDialog msg_dlg(nullptr, _L("You need to select the material type and color first."), wxEmptyString, wxICON_WARNING | wxOK); msg_dlg.ShowModal(); return; } From a8a057e51455f389978a8cc921491fdaee459645 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Thu, 13 Apr 2023 19:36:09 +0800 Subject: [PATCH 316/339] FIX: compible with old firmware Change-Id: I66803f95c73ffb82f539c2bfb509266ba9fdb846 --- src/slic3r/GUI/DeviceManager.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index bc74be42fd..e0a272f082 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -2291,6 +2291,8 @@ bool MachineObject::is_function_supported(PrinterFunction func) func_name = "FUNC_PRINT_ALL"; break; case FUNC_VIRTUAL_TYAY: + if (!ams_support_virtual_tray) + return false; func_name = "FUNC_VIRTUAL_TYAY"; break; case FUNC_FILAMENT_BACKUP: From 9ca85936049d45f7f88051ce87640f9287bcf8ac Mon Sep 17 00:00:00 2001 From: tao wang Date: Thu, 13 Apr 2023 17:50:05 +0800 Subject: [PATCH 317/339] FIX:update the confirm content before sending for print Change-Id: I9f6d8060c0c142ee966042a49a4158cb5697c5af --- src/slic3r/GUI/SelectMachine.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 7f125fd8b9..2bb9d1d879 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -2074,13 +2074,13 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) std::vector confirm_text; - confirm_text.push_back(_L("Please check the following infomation and click Confirm to continue sending print:") + "\n"); + confirm_text.push_back(_L("Please check the following:") + "\n\n"); #if 1 //Check Printer Model Id bool is_same_printer_type = is_same_printer_model(); if (!is_same_printer_type) - confirm_text.push_back(_L("The printer type used to generate G-code is not the same type as the currently selected physical printer. It is recommend to re-slice by selecting the same printer type.") + "\n"); + confirm_text.push_back(_L("The printer type selected when generating G-Code is not consistent with the currently selected printer. It is recommended that you use the same printer type for slicing.") + "\n"); #else bool is_same_printer_type = true; #endif @@ -2169,14 +2169,19 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) confirm_dlg.on_hide(); this->on_ok(); }); + + confirm_text.push_back(_L("Please click the confirm button if you still want to proceed with printing.") + "\n"); wxString info_msg = wxEmptyString; for (auto i = 0; i < confirm_text.size(); i++) { if (i == 0) { info_msg += confirm_text[i]; } + else if (i == confirm_text.size() - 1) { + info_msg += confirm_text[i]; + } else { - info_msg += wxString::Format("%d:%s\n",i, confirm_text[i]); + info_msg += wxString::Format("%d. %s\n",i, confirm_text[i]); } } From 4d234b97853fe07d99b89639dc7526cdce7ef87c Mon Sep 17 00:00:00 2001 From: "maosheng.wei" Date: Thu, 13 Apr 2023 17:44:01 +0800 Subject: [PATCH 318/339] FIX: Cancel sequence number Jira: STUDIO-2688 Change-Id: I29d992354713dcc8caaa8fc2ab98506f1b4e0735 (cherry picked from commit f7a69618813648b0c611c9dfbff3a0ad1d7a18d6) --- src/slic3r/GUI/Plater.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index a01112e6b8..61fead6eed 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -465,7 +465,7 @@ static struct DynamicFilamentList : DynamicList wxString str; std::string type; wxGetApp().preset_bundle->filaments.find_preset(presets[i])->get_filament_type(type); - str << (i + 1) << " - " << type; + str << type; items.push_back({str, icons[i]}); } DynamicList::update(); From 307ade3cd124dd590bf2463454e88321d3112bbb Mon Sep 17 00:00:00 2001 From: tao wang Date: Thu, 13 Apr 2023 15:17:22 +0800 Subject: [PATCH 319/339] ENH:start checking printer connection status after clicking Send Change-Id: Ibdd8a12b66b649b54b400433f4b3754fc1da478d --- src/slic3r/GUI/SendToPrinter.cpp | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/slic3r/GUI/SendToPrinter.cpp b/src/slic3r/GUI/SendToPrinter.cpp index 3e64351da6..fd6aabb35c 100644 --- a/src/slic3r/GUI/SendToPrinter.cpp +++ b/src/slic3r/GUI/SendToPrinter.cpp @@ -879,17 +879,6 @@ void SendToPrinterDialog::on_selection_changed(wxCommandEvent &event) return; } - //check ip address - if (obj->is_function_supported(PrinterFunction::FUNC_SEND_TO_SDCARD)) { - if (obj->dev_ip.empty() || obj->get_access_code().empty()) { - BOOST_LOG_TRIVIAL(info) << "MachineObject IP is empty "; - std::string app_config_dev_ip = Slic3r::GUI::wxGetApp().app_config->get("ip_address", obj->dev_id); - if (app_config_dev_ip.empty() || obj->get_access_code().empty()) { - wxGetApp().show_ip_address_enter_dialog(); - } - } - } - update_show_status(); } From f90974cea704b6ae655225cd77d76076d964a2e8 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Thu, 13 Apr 2023 15:58:27 +0800 Subject: [PATCH 320/339] FIX: only send error log for user triggered live view Change-Id: Ie2ff3b95d17bb060e203a51dce30c662e63320b6 --- src/slic3r/GUI/MediaPlayCtrl.cpp | 10 ++++++++-- src/slic3r/GUI/MediaPlayCtrl.h | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp index 5deca39a0c..f639d6e647 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.cpp +++ b/src/slic3r/GUI/MediaPlayCtrl.cpp @@ -215,7 +215,8 @@ void MediaPlayCtrl::Play() void MediaPlayCtrl::Stop(wxString const &msg) { - bool failed = m_last_state != wxMEDIASTATE_PLAYING; + bool init_failed = m_last_state != wxMEDIASTATE_PLAYING; + if (m_last_state != MEDIASTATE_IDLE) { m_media_ctrl->InvalidateBestSize(); m_button_play->SetIcon("media_play"); @@ -233,9 +234,11 @@ void MediaPlayCtrl::Stop(wxString const &msg) m_next_retry = wxDateTime(); } else if (!msg.IsEmpty()) { SetStatus(msg, false); + } else { + m_failed_code = 0; } - if (failed && m_failed_code != 0) { + if (init_failed && m_failed_code != 0 && m_last_failed_code != m_failed_code) { json j; j["stage"] = std::to_string(m_last_state); j["dev_id"] = m_machine; @@ -247,6 +250,7 @@ void MediaPlayCtrl::Stop(wxString const &msg) if (agent) agent->track_event("start_liveview", j.dump()); } + m_last_failed_code = m_failed_code; ++m_failed_retry; if (m_failed_code != 0 && !m_tutk_support && (m_failed_retry > 1 || m_user_triggered)) { @@ -254,6 +258,7 @@ void MediaPlayCtrl::Stop(wxString const &msg) if (wxGetApp().show_modal_ip_address_enter_dialog(_L("LAN Connection Failed (Failed to start liveview)"))) { m_failed_retry = 0; m_user_triggered = true; + m_last_failed_code = 0; m_next_retry = wxDateTime::Now(); return; } @@ -271,6 +276,7 @@ void MediaPlayCtrl::TogglePlay() } else { m_failed_retry = 0; m_user_triggered = true; + m_last_failed_code = 0; m_next_retry = wxDateTime::Now(); Play(); } diff --git a/src/slic3r/GUI/MediaPlayCtrl.h b/src/slic3r/GUI/MediaPlayCtrl.h index f3ab91f161..05bc6d9ef0 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.h +++ b/src/slic3r/GUI/MediaPlayCtrl.h @@ -86,6 +86,7 @@ private: bool m_user_triggered = false; int m_failed_retry = 0; int m_failed_code = 0; + int m_last_failed_code = 0; wxDateTime m_next_retry; ::Button *m_button_play; From 763cf8ebfcefcb6525cc3c38a43e2b8f39b80c9d Mon Sep 17 00:00:00 2001 From: gerrit Date: Fri, 14 Apr 2023 09:26:02 +0800 Subject: [PATCH 321/339] ci: update build version to 01.06.00.60 Change-Id: Iea950e408c28ece068fbb93bd02f141be16026c6 --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index cb16803c24..dfde671a4c 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.06.00.59") +set(SLIC3R_VERSION "01.06.00.60") From 719f273fa2c49412e4cf1eda5cebe03afc70d9aa Mon Sep 17 00:00:00 2001 From: Arthur Date: Thu, 13 Apr 2023 20:38:41 +0800 Subject: [PATCH 322/339] ENH: improve smoothness of tree supports 1. Instead of smoothing top-down, now we smooth tree branches bottom-up, and do not stop at merged nodes. 2. Fix a bug where some nodes don't have child. This is critical for bottom-up smoothing. Change-Id: Iac0fecd81dac541ca390bcf5cbdfe7fd66cfd3a2 (cherry picked from commit 536a8a4f0ef76fa0358f4b4b181c4c7e7fff8bc7) --- src/libslic3r/TreeSupport.cpp | 85 ++++++++++++++++++++++++----------- src/libslic3r/TreeSupport.hpp | 18 ++++---- 2 files changed, 69 insertions(+), 34 deletions(-) diff --git a/src/libslic3r/TreeSupport.cpp b/src/libslic3r/TreeSupport.cpp index c37b638798..335af79f60 100644 --- a/src/libslic3r/TreeSupport.cpp +++ b/src/libslic3r/TreeSupport.cpp @@ -27,6 +27,9 @@ // #define SUPPORT_TREE_DEBUG_TO_SVG +#if SUPPORT_TREE_DEBUG_TO_SVG +#include "nlohmann/json.hpp" +#endif namespace Slic3r { #define unscale_(val) ((val) * SCALING_FACTOR) @@ -2983,64 +2986,94 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) void TreeSupport::smooth_nodes(std::vector> &contact_nodes) { - std::map is_processed; for (int layer_nr = 0; layer_nr < contact_nodes.size(); layer_nr++) { std::vector &curr_layer_nodes = contact_nodes[layer_nr]; if (curr_layer_nodes.empty()) continue; for (Node *node : curr_layer_nodes) { - is_processed.emplace(node, false); + node->is_processed = false; if (layer_nr == 0) node->is_merged = true; // nodes on plate are also merged nodes } } - for (int layer_nr = contact_nodes.size()-1; layer_nr >=0 ; layer_nr--) { + for (int layer_nr = 0; layer_nr< contact_nodes.size(); layer_nr++) { std::vector &curr_layer_nodes = contact_nodes[layer_nr]; if (curr_layer_nodes.empty()) continue; for (Node *node : curr_layer_nodes) { - if (!is_processed[node]) { + if (!node->is_processed) { std::vector pts; std::vector branch; Node * p_node = node; - // add head for second path from the merged node if there are multiple ones - if (!node->is_merged && node->parent) { - pts.push_back(p_node->parent->position); - branch.push_back(p_node->parent); + // add a fixed head + if (node->child) { + pts.push_back(p_node->child->position); + branch.push_back(p_node->child); } do { pts.push_back(p_node->position); - //is_processed[p_node] = true; branch.push_back(p_node); - p_node = p_node->child; - } while (p_node && !p_node->is_merged && !is_processed[p_node]); - // TODO is it necessary to add tail also? - if (p_node && p_node->is_merged) { - pts.push_back(p_node->position); - branch.push_back(p_node); - } + p_node = p_node->parent; + } while (p_node && !p_node->is_processed); if (pts.size() < 3) continue; std::vector pts1 = pts; // TODO here we assume layer height gap is constant. If not true, need to consider height jump - // TODO it seems the smooth iterations can't be larger than 1, otherwise some nodes will fly away - for (size_t k = 0; k < 50; k++) { + const int iterations = 100; + for (size_t k = 0; k < iterations; k++) { for (size_t i = 1; i < pts.size() - 1; i++) { size_t i2 = i >= 2 ? i - 2 : 0; size_t i3 = i < pts.size() - 2 ? i + 2 : pts.size() - 1; Point pt = (pts[i2] + pts[i - 1] + pts[i] + pts[i + 1] + pts[i3]) / 5; pts1[i] = pt; + if (k == iterations - 1) { + branch[i]->position = pt; + branch[i]->movement = (pts[i + 1] - pts[i - 1]) / 2; + branch[i]->is_processed = true; + } } - std::swap(pts, pts1); - } - for (size_t i = 1; i < pts.size() - 1; i++) { - if (!is_processed[branch[i]]) { - branch[i]->position = pts[i]; - branch[i]->movement = branch[i]->parent ? (branch[i]->position - branch[i]->parent->position) : Point(0, 0); - is_processed[branch[i]] = true; - } + if (k < iterations - 1) + std::swap(pts, pts1); } } } } +#if SUPPORT_TREE_DEBUG_TO_SVG + // save tree structure for viewing in python + struct TreeNode { + Vec3f pos; + std::vector children; // index of children in the storing vector + TreeNode(Point pt, float z) { + pos = { float(unscale_(pt.x())),float(unscale_(pt.y())),z }; + } + }; + std::vector tree_nodes; + std::map ptr2idx; + std::map idx2ptr; + for (int layer_nr = 0; layer_nr < contact_nodes.size(); layer_nr++) { + std::vector& curr_layer_nodes = contact_nodes[layer_nr]; + for (Node* node : curr_layer_nodes) { + ptr2idx.emplace(node, tree_nodes.size()); + idx2ptr.emplace(tree_nodes.size(), node); + tree_nodes.emplace_back(node->position, node->print_z); + } + } + for (size_t i = 0; i < tree_nodes.size(); i++) { + TreeNode& tree_node = tree_nodes[i]; + Node* p_node = idx2ptr[i]; + if (p_node->child) + tree_node.children.push_back(ptr2idx[p_node->child]); + } + nlohmann::json jj; + for (size_t i = 0; i < tree_nodes.size(); i++) { + nlohmann::json j; + j["pos"] = tree_nodes[i].pos; + j["children"] = tree_nodes[i].children; + jj.push_back(j); + } + + std::ofstream ofs("tree_nodes.json"); + ofs << jj.dump(); + ofs.close(); +#endif } void TreeSupport::adjust_layer_heights(std::vector>& contact_nodes) diff --git a/src/libslic3r/TreeSupport.hpp b/src/libslic3r/TreeSupport.hpp index c3611a1b30..169236ee7d 100644 --- a/src/libslic3r/TreeSupport.hpp +++ b/src/libslic3r/TreeSupport.hpp @@ -259,6 +259,8 @@ public: if (dist_mm_to_top==0) dist_mm_to_top = parent->dist_mm_to_top + parent->height; parent->child = this; + for (auto& neighbor : parent->merged_neighbours) + neighbor->child = this; } } @@ -280,15 +282,15 @@ public: /*! * \brief The position of this node on the layer. */ - Point position; - - Point movement; // movement towards neighbor center or outline - mutable double radius = 0.0; - mutable double max_move_dist = 0.0; - NodeType type = eCircle; - bool is_merged = false; // this node is generated by merging upper nodes + Point position; + Point movement; // movement towards neighbor center or outline + mutable double radius = 0.0; + mutable double max_move_dist = 0.0; + NodeType type = eCircle; + bool is_merged = false; // this node is generated by merging upper nodes bool is_corner = false; - const ExPolygon* overhang = nullptr; // when type==ePolygon, set this value to get original overhang area + bool is_processed = false; + const ExPolygon *overhang = nullptr; // when type==ePolygon, set this value to get original overhang area /*! * \brief The direction of the skin lines above the tip of the branch. From 64e203e05c2457d05ddb73b447c7ecd2016258f2 Mon Sep 17 00:00:00 2001 From: tao wang Date: Thu, 13 Apr 2023 12:02:20 +0800 Subject: [PATCH 323/339] FIX:fixed some icons cant display when change dark mode Change-Id: I0984aab97e1a1c151e9173d96c8f012935c48fcb --- resources/images/monitor_recording_off.svg | 8 ++-- .../images/monitor_recording_off_dark.svg | 6 +++ resources/images/monitor_recording_on.svg | 8 ++-- .../images/monitor_recording_on_dark.svg | 7 ++++ resources/images/monitor_state_off.svg | 10 ----- resources/images/monitor_state_on.svg | 10 ----- resources/images/monitor_timelapse_off.svg | 12 +++--- .../images/monitor_timelapse_off_dark.svg | 8 ++++ resources/images/monitor_timelapse_on.svg | 12 +++--- .../images/monitor_timelapse_on_dark.svg | 9 +++++ resources/images/monitor_vcamera_off.svg | 10 ++--- resources/images/monitor_vcamera_off_dark.svg | 7 ++++ resources/images/monitor_vcamera_on.svg | 10 ++--- resources/images/monitor_vcamera_on_dark.svg | 8 ++++ resources/images/sdcard_state_abnormal.svg | 12 +++--- .../images/sdcard_state_abnormal_dark.svg | 9 +++++ resources/images/sdcard_state_no.svg | 16 ++++---- resources/images/sdcard_state_no_dark.svg | 10 +++++ resources/images/sdcard_state_normal.svg | 10 ++--- resources/images/sdcard_state_normal_dark.svg | 9 +++++ src/slic3r/GUI/StatusPanel.cpp | 40 ++++++++++--------- src/slic3r/GUI/wxExtensions.cpp | 2 +- 22 files changed, 145 insertions(+), 88 deletions(-) create mode 100644 resources/images/monitor_recording_off_dark.svg create mode 100644 resources/images/monitor_recording_on_dark.svg delete mode 100644 resources/images/monitor_state_off.svg delete mode 100644 resources/images/monitor_state_on.svg create mode 100644 resources/images/monitor_timelapse_off_dark.svg create mode 100644 resources/images/monitor_timelapse_on_dark.svg create mode 100644 resources/images/monitor_vcamera_off_dark.svg create mode 100644 resources/images/monitor_vcamera_on_dark.svg create mode 100644 resources/images/sdcard_state_abnormal_dark.svg create mode 100644 resources/images/sdcard_state_no_dark.svg create mode 100644 resources/images/sdcard_state_normal_dark.svg diff --git a/resources/images/monitor_recording_off.svg b/resources/images/monitor_recording_off.svg index fa08204bd5..c45f93e9a6 100644 --- a/resources/images/monitor_recording_off.svg +++ b/resources/images/monitor_recording_off.svg @@ -1,6 +1,6 @@ - - - - + + + + diff --git a/resources/images/monitor_recording_off_dark.svg b/resources/images/monitor_recording_off_dark.svg new file mode 100644 index 0000000000..520dd1bdb1 --- /dev/null +++ b/resources/images/monitor_recording_off_dark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/images/monitor_recording_on.svg b/resources/images/monitor_recording_on.svg index 33c348eb25..4bccded8bd 100644 --- a/resources/images/monitor_recording_on.svg +++ b/resources/images/monitor_recording_on.svg @@ -1,7 +1,7 @@ - + - - - + + + diff --git a/resources/images/monitor_recording_on_dark.svg b/resources/images/monitor_recording_on_dark.svg new file mode 100644 index 0000000000..cc0b3ec16f --- /dev/null +++ b/resources/images/monitor_recording_on_dark.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/resources/images/monitor_state_off.svg b/resources/images/monitor_state_off.svg deleted file mode 100644 index 9a6de7d082..0000000000 --- a/resources/images/monitor_state_off.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - Layer 1 - - - - - - \ No newline at end of file diff --git a/resources/images/monitor_state_on.svg b/resources/images/monitor_state_on.svg deleted file mode 100644 index c39cf9be9a..0000000000 --- a/resources/images/monitor_state_on.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - Layer 1 - - - - - - \ No newline at end of file diff --git a/resources/images/monitor_timelapse_off.svg b/resources/images/monitor_timelapse_off.svg index 21d9fd69e6..103a97f3fc 100644 --- a/resources/images/monitor_timelapse_off.svg +++ b/resources/images/monitor_timelapse_off.svg @@ -1,11 +1,11 @@ - - - - - - + + + + + + diff --git a/resources/images/monitor_timelapse_off_dark.svg b/resources/images/monitor_timelapse_off_dark.svg new file mode 100644 index 0000000000..19785321b1 --- /dev/null +++ b/resources/images/monitor_timelapse_off_dark.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resources/images/monitor_timelapse_on.svg b/resources/images/monitor_timelapse_on.svg index c82e3ca0a5..ca46179f76 100644 --- a/resources/images/monitor_timelapse_on.svg +++ b/resources/images/monitor_timelapse_on.svg @@ -1,12 +1,12 @@ - - + + - - - - + + + + diff --git a/resources/images/monitor_timelapse_on_dark.svg b/resources/images/monitor_timelapse_on_dark.svg new file mode 100644 index 0000000000..63ab2297c2 --- /dev/null +++ b/resources/images/monitor_timelapse_on_dark.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resources/images/monitor_vcamera_off.svg b/resources/images/monitor_vcamera_off.svg index 51609adc4a..edbcc92370 100644 --- a/resources/images/monitor_vcamera_off.svg +++ b/resources/images/monitor_vcamera_off.svg @@ -1,7 +1,7 @@ - - - - - + + + + + diff --git a/resources/images/monitor_vcamera_off_dark.svg b/resources/images/monitor_vcamera_off_dark.svg new file mode 100644 index 0000000000..8ed58c9da9 --- /dev/null +++ b/resources/images/monitor_vcamera_off_dark.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/resources/images/monitor_vcamera_on.svg b/resources/images/monitor_vcamera_on.svg index 5e741389eb..b26c3f10cf 100644 --- a/resources/images/monitor_vcamera_on.svg +++ b/resources/images/monitor_vcamera_on.svg @@ -1,8 +1,8 @@ - - - + + + - - + + diff --git a/resources/images/monitor_vcamera_on_dark.svg b/resources/images/monitor_vcamera_on_dark.svg new file mode 100644 index 0000000000..1c829d6554 --- /dev/null +++ b/resources/images/monitor_vcamera_on_dark.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resources/images/sdcard_state_abnormal.svg b/resources/images/sdcard_state_abnormal.svg index b2ac57f52a..a88e8df175 100644 --- a/resources/images/sdcard_state_abnormal.svg +++ b/resources/images/sdcard_state_abnormal.svg @@ -1,9 +1,9 @@ - - - - - + + + + + - + diff --git a/resources/images/sdcard_state_abnormal_dark.svg b/resources/images/sdcard_state_abnormal_dark.svg new file mode 100644 index 0000000000..b2ac57f52a --- /dev/null +++ b/resources/images/sdcard_state_abnormal_dark.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resources/images/sdcard_state_no.svg b/resources/images/sdcard_state_no.svg index 6b17701408..ae45a0c3b5 100644 --- a/resources/images/sdcard_state_no.svg +++ b/resources/images/sdcard_state_no.svg @@ -1,10 +1,10 @@ - - - - - - - - + + + + + + + + diff --git a/resources/images/sdcard_state_no_dark.svg b/resources/images/sdcard_state_no_dark.svg new file mode 100644 index 0000000000..6b17701408 --- /dev/null +++ b/resources/images/sdcard_state_no_dark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/resources/images/sdcard_state_normal.svg b/resources/images/sdcard_state_normal.svg index e0ae5db617..2c55e87010 100644 --- a/resources/images/sdcard_state_normal.svg +++ b/resources/images/sdcard_state_normal.svg @@ -1,9 +1,9 @@ - - - - - + + + + + diff --git a/resources/images/sdcard_state_normal_dark.svg b/resources/images/sdcard_state_normal_dark.svg new file mode 100644 index 0000000000..09217c6d67 --- /dev/null +++ b/resources/images/sdcard_state_normal_dark.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 36e6a329a7..287f858335 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -190,15 +190,16 @@ void StatusBasePanel::init_bitmaps() m_bitmap_extruder_filled_load = *cache.load_png("monitor_extruder_filled_load", FromDIP(28), FromDIP(70), false, false); m_bitmap_extruder_empty_unload = *cache.load_png("monitor_extruder_empty_unload", FromDIP(28), FromDIP(70), false, false); m_bitmap_extruder_filled_unload = *cache.load_png("monitor_extruder_filled_unload", FromDIP(28), FromDIP(70), false, false); - m_bitmap_sdcard_state_abnormal = ScalableBitmap(this, "sdcard_state_abnormal", 20); - m_bitmap_sdcard_state_normal = ScalableBitmap(this, "sdcard_state_normal", 20); - m_bitmap_sdcard_state_no = ScalableBitmap(this, "sdcard_state_no", 20); - m_bitmap_recording_on = ScalableBitmap(this, "monitor_recording_on", 20); - m_bitmap_recording_off = ScalableBitmap(this, "monitor_recording_off", 20); - m_bitmap_timelapse_on = ScalableBitmap(this, "monitor_timelapse_on", 20); - m_bitmap_timelapse_off = ScalableBitmap(this, "monitor_timelapse_off", 20); - m_bitmap_vcamera_on = ScalableBitmap(this, "monitor_vcamera_on", 20); - m_bitmap_vcamera_off = ScalableBitmap(this, "monitor_vcamera_off", 20); + + m_bitmap_sdcard_state_abnormal = ScalableBitmap(this, wxGetApp().dark_mode() ? "sdcard_state_abnormal_dark" : "sdcard_state_abnormal", 20); + m_bitmap_sdcard_state_normal = ScalableBitmap(this, wxGetApp().dark_mode() ? "sdcard_state_normal_dark" : "sdcard_state_normal", 20); + m_bitmap_sdcard_state_no = ScalableBitmap(this, wxGetApp().dark_mode() ? "sdcard_state_no_dark" : "sdcard_state_no", 20); + m_bitmap_recording_on = ScalableBitmap(this, wxGetApp().dark_mode() ? "monitor_recording_on_dark" : "monitor_recording_on", 20); + m_bitmap_recording_off = ScalableBitmap(this, wxGetApp().dark_mode() ? "monitor_recording_off_dark" : "monitor_recording_off", 20); + m_bitmap_timelapse_on = ScalableBitmap(this, wxGetApp().dark_mode() ? "monitor_timelapse_on_dark" : "monitor_timelapse_on", 20); + m_bitmap_timelapse_off = ScalableBitmap(this, wxGetApp().dark_mode() ? "monitor_timelapse_off_dark" : "monitor_timelapse_off", 20); + m_bitmap_vcamera_on = ScalableBitmap(this, wxGetApp().dark_mode() ? "monitor_vcamera_on_dark" : "monitor_vcamera_on", 20); + m_bitmap_vcamera_off = ScalableBitmap(this, wxGetApp().dark_mode() ? "monitor_vcamera_off_dark" : "monitor_vcamera_off", 20); } @@ -3379,8 +3380,17 @@ void StatusPanel::rescale_camera_icons() { m_setting_button->msw_rescale(); - m_bitmap_vcamera_on.msw_rescale(); - m_bitmap_vcamera_off.msw_rescale(); + + m_bitmap_sdcard_state_abnormal = ScalableBitmap(this, wxGetApp().dark_mode()?"sdcard_state_abnormal_dark":"sdcard_state_abnormal", 20); + m_bitmap_sdcard_state_normal = ScalableBitmap(this, wxGetApp().dark_mode()?"sdcard_state_normal_dark":"sdcard_state_normal", 20); + m_bitmap_sdcard_state_no = ScalableBitmap(this, wxGetApp().dark_mode()?"sdcard_state_no_dark":"sdcard_state_no", 20); + m_bitmap_recording_on = ScalableBitmap(this, wxGetApp().dark_mode()?"monitor_recording_on_dark":"monitor_recording_on", 20); + m_bitmap_recording_off = ScalableBitmap(this, wxGetApp().dark_mode()?"monitor_recording_off_dark":"monitor_recording_off", 20); + m_bitmap_timelapse_on = ScalableBitmap(this, wxGetApp().dark_mode()?"monitor_timelapse_on_dark":"monitor_timelapse_on", 20); + m_bitmap_timelapse_off = ScalableBitmap(this, wxGetApp().dark_mode()?"monitor_timelapse_off_dark":"monitor_timelapse_off", 20); + m_bitmap_vcamera_on = ScalableBitmap(this, wxGetApp().dark_mode()?"monitor_vcamera_on_dark":"monitor_vcamera_on", 20); + m_bitmap_vcamera_off = ScalableBitmap(this, wxGetApp().dark_mode()?"monitor_vcamera_off_dark":"monitor_vcamera_off", 20); + if (m_media_play_ctrl->IsStreaming()) { m_bitmap_vcamera_img->SetBitmap(m_bitmap_vcamera_on.bmp()); } @@ -3389,9 +3399,7 @@ void StatusPanel::rescale_camera_icons() } if (!obj) return; - m_bitmap_sdcard_state_no.msw_rescale(); - m_bitmap_sdcard_state_abnormal.msw_rescale(); - m_bitmap_sdcard_state_normal.msw_rescale(); + if (obj->get_sdcard_state() == MachineObject::SdcardState::NO_SDCARD) { m_bitmap_sdcard_img->SetBitmap(m_bitmap_sdcard_state_no.bmp()); } else if (obj->get_sdcard_state() == MachineObject::SdcardState::HAS_SDCARD_NORMAL) { @@ -3402,16 +3410,12 @@ void StatusPanel::rescale_camera_icons() m_bitmap_sdcard_img->SetBitmap(m_bitmap_sdcard_state_normal.bmp()); } - m_bitmap_recording_on.msw_rescale(); - m_bitmap_recording_off.msw_rescale(); if (obj->is_recording()) { m_bitmap_recording_img->SetBitmap(m_bitmap_recording_on.bmp()); } else { m_bitmap_recording_img->SetBitmap(m_bitmap_recording_off.bmp()); } - m_bitmap_timelapse_on.msw_rescale(); - m_bitmap_timelapse_off.msw_rescale(); if (obj->is_timelapse()) { m_bitmap_timelapse_img->SetBitmap(m_bitmap_timelapse_on.bmp()); } else { diff --git a/src/slic3r/GUI/wxExtensions.cpp b/src/slic3r/GUI/wxExtensions.cpp index d93c2840a6..b17a58ef4a 100644 --- a/src/slic3r/GUI/wxExtensions.cpp +++ b/src/slic3r/GUI/wxExtensions.cpp @@ -446,7 +446,7 @@ wxBitmap create_scaled_bitmap( const std::string& bmp_name_in, #ifdef _WIN32 menu_bitmap ? Slic3r::GUI::check_dark_mode() : #endif - Slic3r::GUI::wxGetApp().dark_mode(); + Slic3r::GUI::wxGetApp().dark_mode(); // Try loading an SVG first, then PNG if SVG is not found: wxBitmap *bmp = cache.load_svg(bmp_name, width, height, grayscale, dark_mode, new_color, resize ? em_unit(win) * 0.1f : 0.f); From 975aa7065102f729e206ec8ae7f1469b92bd5d82 Mon Sep 17 00:00:00 2001 From: gerrit Date: Fri, 14 Apr 2023 10:48:52 +0800 Subject: [PATCH 324/339] ci: update build version to 01.06.00.61 Change-Id: I6fcbbf51e3550b0f9b163d3fbe061aaa0f51fdab --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index dfde671a4c..083fa6fc7b 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.06.00.60") +set(SLIC3R_VERSION "01.06.00.61") From ef6827a6f80f2a6ae499f083e55b281f981ff8f5 Mon Sep 17 00:00:00 2001 From: tao wang Date: Fri, 14 Apr 2023 10:40:11 +0800 Subject: [PATCH 325/339] FIX:fixed gradient filament color display on MacOS Change-Id: I57f3243f5013b8d26ace3fae2cc41e807494af6b --- resources/images/color_picker_border.svg | 2 +- src/slic3r/GUI/AMSMaterialsSetting.cpp | 14 +++++++++++++- src/slic3r/GUI/AMSMaterialsSetting.hpp | 3 ++- src/slic3r/GUI/StatusPanel.cpp | 1 + src/slic3r/GUI/Widgets/AMSControl.cpp | 16 +++++++--------- 5 files changed, 24 insertions(+), 12 deletions(-) diff --git a/resources/images/color_picker_border.svg b/resources/images/color_picker_border.svg index e9af4f91ef..1f0d10a858 100644 --- a/resources/images/color_picker_border.svg +++ b/resources/images/color_picker_border.svg @@ -1,3 +1,3 @@ - + diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index 2adea267c9..820cac35d8 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -728,6 +728,7 @@ bool AMSMaterialsSetting::Show(bool show) } Layout(); Fit(); + wxGetApp().UpdateDarkUI(this); } return DPIDialog::Show(show); } @@ -870,6 +871,11 @@ void AMSMaterialsSetting::post_select_event() { wxPostEvent(m_comboBox_filament, event); } +void AMSMaterialsSetting::msw_rescale() +{ + m_clr_picker->msw_rescale(); +} + void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt) { m_filament_type = ""; @@ -939,6 +945,12 @@ ColorPicker::ColorPicker(wxWindow* parent, wxWindowID id, const wxPoint& pos /*= ColorPicker::~ColorPicker(){} +void ColorPicker::msw_rescale() +{ + m_bitmap_border = create_scaled_bitmap("color_picker_border", nullptr, 25); + Refresh(); +} + void ColorPicker::set_color(wxColour col) { m_colour = col; @@ -1088,7 +1100,7 @@ ColorPickerPopup::ColorPickerPopup(wxWindow* parent) auto cp = new ColorPicker(m_def_color_box, wxID_ANY, wxDefaultPosition, wxDefaultSize); cp->set_color(col); cp->set_selected(false); - cp->SetBackgroundColour(wxColour(238, 238, 238)); + cp->SetBackgroundColour(StateColor::darkModeColorFor(wxColour(238,238,238))); m_color_pickers.push_back(cp); fg_sizer->Add(cp, 0, wxALL, FromDIP(3)); cp->Bind(wxEVT_LEFT_DOWN, [this, cp](auto& e) { diff --git a/src/slic3r/GUI/AMSMaterialsSetting.hpp b/src/slic3r/GUI/AMSMaterialsSetting.hpp index 972bb26847..6c0b38e408 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.hpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.hpp @@ -40,6 +40,7 @@ public: ColorPicker(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); ~ColorPicker(); + void msw_rescale(); void set_color(wxColour col); void set_colors(std::vector cols); void set_selected(bool sel) {m_selected = sel;Refresh();}; @@ -93,7 +94,7 @@ public: wxString k = wxEmptyString, wxString n = wxEmptyString); void post_select_event(); - + void msw_rescale(); void set_color(wxColour color); void set_colors(std::vector colors); diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 287f858335..058ef5fbef 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -3430,6 +3430,7 @@ void StatusPanel::on_sys_color_changed() m_bitmap_speed_active.msw_rescale(); m_switch_speed->SetImages(m_bitmap_speed, m_bitmap_speed); m_ams_control->msw_rescale(); + if (m_filament_setting_dlg) {m_filament_setting_dlg->msw_rescale();} rescale_camera_icons(); } diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index e3d04c062d..2a7f43c6ef 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -887,9 +887,7 @@ void AMSLib::doRender(wxDC &dc) int top = height - curr_height; if (curr_height >= FromDIP(6)) { -#ifdef __APPLE__ - dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4) + top, size.x - FromDIP(8), curr_height, m_radius); -#else + //gradient if (m_info.material_cols.size() > 1) { int left = FromDIP(4); @@ -898,22 +896,22 @@ void AMSLib::doRender(wxDC &dc) for (int i = 0; i < m_info.material_cols.size() - 1; i++) { - if ( (left + gwidth) > (size.x - FromDIP(8)) ) { + if ((left + gwidth) > (size.x - FromDIP(8))) { gwidth = (size.x - FromDIP(4)) - left; } auto rect = wxRect(left, height - curr_height + FromDIP(4), gwidth, curr_height); - dc.GradientFillLinear(rect, m_info.material_cols[i], m_info.material_cols[i+1], wxEAST); + dc.GradientFillLinear(rect, m_info.material_cols[i], m_info.material_cols[i + 1], wxEAST); left += gwidth; } } else { +#ifdef __APPLE__ + dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4) + top, size.x - FromDIP(8), curr_height, m_radius); +#else dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4) + top, size.x - FromDIP(8), curr_height, m_radius - 1); - } - #endif - - + } } if (top > 2) { From 3af80a8252936452a3deddf3b5132ff7e8508d88 Mon Sep 17 00:00:00 2001 From: gerrit Date: Fri, 14 Apr 2023 14:45:50 +0800 Subject: [PATCH 326/339] ci: update build version to 01.06.00.62 Change-Id: I07c035585188c7a244c7f6c703bfce4b70483785 --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index 083fa6fc7b..3a8b752fac 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.06.00.61") +set(SLIC3R_VERSION "01.06.00.62") From d93066710316353bb0cbb77294671818e3b7a646 Mon Sep 17 00:00:00 2001 From: tao wang Date: Fri, 14 Apr 2023 16:34:56 +0800 Subject: [PATCH 327/339] FIX:fixed sending print to LAN printer will crash Change-Id: I067724e8ebef3425a84f6a230685c48fe48ed055 --- src/slic3r/GUI/DeviceManager.cpp | 5 +++-- src/slic3r/GUI/GUI_App.cpp | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index e0a272f082..6f619ec8eb 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -4110,7 +4110,8 @@ bool DeviceManager::set_selected_machine(std::string dev_id, bool need_disconnec if (last_selected->second->connection_type() == "lan") { if (last_selected->second->is_connecting() && !need_disconnect) return false; - m_agent->disconnect_printer(); + + if (!need_disconnect) {m_agent->disconnect_printer();} } } @@ -4124,7 +4125,7 @@ bool DeviceManager::set_selected_machine(std::string dev_id, bool need_disconnec } else { // lan mode printer reconnect printer if (m_agent) { - m_agent->disconnect_printer(); + if (!need_disconnect) {m_agent->disconnect_printer();} it->second->reset(); it->second->connect(); it->second->set_lan_mode_connection_state(true); diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 5efdc62c7c..7ec78315e9 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1876,7 +1876,7 @@ void GUI_App::init_networking_callbacks() } else if (state == ConnectStatus::ConnectStatusFailed) { obj->set_access_code(""); obj->set_user_access_code(""); - m_device_manager->set_selected_machine(""); + m_device_manager->set_selected_machine("", true); wxString text; if (msg == "5") { text = wxString::Format(_L("Incorrect password")); @@ -1887,7 +1887,7 @@ void GUI_App::init_networking_callbacks() } event.SetInt(0); } else if (state == ConnectStatus::ConnectStatusLost) { - m_device_manager->set_selected_machine(""); + m_device_manager->set_selected_machine("", true); event.SetInt(0); BOOST_LOG_TRIVIAL(info) << "set_on_local_connect_fn: state = lost"; } else { From 63c9b81127977b088b36dc34ceb2c7957ab5aceb Mon Sep 17 00:00:00 2001 From: "qing.zhang" Date: Fri, 14 Apr 2023 17:30:48 +0800 Subject: [PATCH 328/339] ENH: update the temp of high plate of PLA Silk Signed-off-by: qing.zhang Change-Id: I1154af98d966aa7a0f384538944d569c190ffd41 --- resources/profiles/BBL.json | 10 +++++- .../BBL/filament/Bambu PLA Silk @BBL X1.json | 5 +-- .../Bambu PLA Silk @BBL X1C 0.2 nozzle.json | 3 +- .../Bambu PLA Silk @BBL P1P 0.2 nozzle.json | 26 ++++++++++++++++ .../filament/P1P/Bambu PLA Silk @BBL P1P.json | 31 +++++++++++++++++++ 5 files changed, 68 insertions(+), 7 deletions(-) create mode 100644 resources/profiles/BBL/filament/P1P/Bambu PLA Silk @BBL P1P 0.2 nozzle.json create mode 100644 resources/profiles/BBL/filament/P1P/Bambu PLA Silk @BBL P1P.json diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index 0df289a040..2c94e639cd 100644 --- a/resources/profiles/BBL.json +++ b/resources/profiles/BBL.json @@ -1,7 +1,7 @@ { "name": "Bambulab", "url": "http://www.bambulab.com/Parameters/vendor/BBL.json", - "version": "01.06.00.00", + "version": "01.06.00.01", "force_update": "0", "description": "the initial version of BBL configurations", "machine_model_list": [ @@ -561,6 +561,14 @@ "name": "Bambu PLA Silk @BBL X1C", "sub_path": "filament/Bambu PLA Silk @BBL X1C.json" }, + { + "name": "Bambu PLA Silk @BBL P1P", + "sub_path": "filament/P1P/Bambu PLA Silk @BBL P1P.json" + }, + { + "name": "Bambu PLA Silk @BBL P1P 0.2 nozzle", + "sub_path": "filament/P1P/Bambu PLA Silk @BBL P1P 0.2 nozzle.json" + }, { "name": "Bambu PETG Basic @BBL X1C", "sub_path": "filament/Bambu PETG Basic @BBL X1C.json" diff --git a/resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1.json b/resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1.json index 3066814ecf..47e74d129a 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1.json +++ b/resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1.json @@ -14,9 +14,6 @@ "compatible_printers": [ "Bambu Lab X1 0.4 nozzle", "Bambu Lab X1 0.6 nozzle", - "Bambu Lab X1 0.8 nozzle", - "Bambu Lab P1P 0.4 nozzle", - "Bambu Lab P1P 0.6 nozzle", - "Bambu Lab P1P 0.8 nozzle" + "Bambu Lab X1 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1C 0.2 nozzle.json index 86a717635c..4a79c4245f 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/filament/Bambu PLA Silk @BBL X1C 0.2 nozzle.json @@ -10,7 +10,6 @@ ], "compatible_printers": [ "Bambu Lab X1 Carbon 0.2 nozzle", - "Bambu Lab X1 0.2 nozzle", - "Bambu Lab P1P 0.2 nozzle" + "Bambu Lab X1 0.2 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/BBL/filament/P1P/Bambu PLA Silk @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/P1P/Bambu PLA Silk @BBL P1P 0.2 nozzle.json new file mode 100644 index 0000000000..a2c70f94de --- /dev/null +++ b/resources/profiles/BBL/filament/P1P/Bambu PLA Silk @BBL P1P 0.2 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "setting_id": "GFSA05_11", + "name": "Bambu PLA Silk @BBL P1P 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PLA Silk @base", + "filament_max_volumetric_speed": [ + "2" + ], + "hot_plate_temp" : [ + "65" + ], + "hot_plate_temp_initial_layer" : [ + "65" + ], + "textured_plate_temp" : [ + "65" + ], + "textured_plate_temp_initial_layer" : [ + "65" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/P1P/Bambu PLA Silk @BBL P1P.json b/resources/profiles/BBL/filament/P1P/Bambu PLA Silk @BBL P1P.json new file mode 100644 index 0000000000..a1ed799c9e --- /dev/null +++ b/resources/profiles/BBL/filament/P1P/Bambu PLA Silk @BBL P1P.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "setting_id": "GFSA05_10", + "name": "Bambu PLA Silk @BBL P1P", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PLA Silk @base", + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "8" + ], + "hot_plate_temp" : [ + "65" + ], + "hot_plate_temp_initial_layer" : [ + "65" + ], + "textured_plate_temp" : [ + "65" + ], + "textured_plate_temp_initial_layer" : [ + "65" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle" + ] +} \ No newline at end of file From 06da64939130da2d14d1f22d4626dc925233fcb2 Mon Sep 17 00:00:00 2001 From: tao wang Date: Fri, 14 Apr 2023 15:11:40 +0800 Subject: [PATCH 329/339] NEW:add chinese translation for confirmation before sending Change-Id: I4f2c07e7dfdbdf64b419cc1e119c1d622642ddad --- bbl/i18n/BambuStudio.pot | 18 ++++++----- bbl/i18n/de/BambuStudio_de.po | 39 ++++++++++++++++-------- bbl/i18n/en/BambuStudio_en.po | 39 ++++++++++++++++-------- bbl/i18n/es/BambuStudio_es.po | 40 +++++++++++++++++-------- bbl/i18n/fr/BambuStudio_fr.po | 39 ++++++++++++++++-------- bbl/i18n/hu/BambuStudio_hu.po | 39 ++++++++++++++++-------- bbl/i18n/it/BambuStudio_it.po | 39 ++++++++++++++++-------- bbl/i18n/ja/BambuStudio_ja.po | 35 +++++++++++++++------- bbl/i18n/nl/BambuStudio_nl.po | 39 ++++++++++++++++-------- bbl/i18n/sv/BambuStudio_sv.po | 39 ++++++++++++++++-------- bbl/i18n/zh_cn/BambuStudio_zh_CN.po | 45 ++++++++++++++++++---------- resources/i18n/de/BambuStudio.mo | Bin 233252 -> 232617 bytes resources/i18n/en/BambuStudio.mo | Bin 213564 -> 213017 bytes resources/i18n/es/BambuStudio.mo | Bin 233024 -> 232404 bytes resources/i18n/fr/BambuStudio.mo | Bin 238974 -> 238376 bytes resources/i18n/hu/BambuStudio.mo | Bin 233985 -> 233399 bytes resources/i18n/it/BambuStudio.mo | Bin 228911 -> 228330 bytes resources/i18n/ja/BambuStudio.mo | Bin 222452 -> 221928 bytes resources/i18n/nl/BambuStudio.mo | Bin 229790 -> 229185 bytes resources/i18n/sv/BambuStudio.mo | Bin 219789 -> 219214 bytes resources/i18n/zh_cn/BambuStudio.mo | Bin 212713 -> 213054 bytes 21 files changed, 273 insertions(+), 138 deletions(-) diff --git a/bbl/i18n/BambuStudio.pot b/bbl/i18n/BambuStudio.pot index baf5637647..264fb9fd69 100644 --- a/bbl/i18n/BambuStudio.pot +++ b/bbl/i18n/BambuStudio.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-13 15:16+0800\n" +"POT-Creation-Date: 2023-04-14 17:28+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1830,7 +1830,7 @@ msgstr "" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "" -msgid "You need to select the material type and color firet." +msgid "You need to select the material type and color first." msgstr "" msgid "Other color" @@ -4781,15 +4781,13 @@ msgstr "" msgid "Errors" msgstr "" -msgid "" -"Please check the following infomation and click Confirm to continue sending " -"print:" +msgid "Please check the following:" msgstr "" msgid "" -"The printer type used to generate G-code is not the same type as the " -"currently selected physical printer. It is recommend to re-slice by " -"selecting the same printer type." +"The printer type selected when generating G-Code is not consistent with the " +"currently selected printer. It is recommended that you use the same printer " +"type for slicing." msgstr "" #, possible-c-format, possible-boost-format @@ -4802,6 +4800,10 @@ msgid "" "start printing." msgstr "" +msgid "" +"Please click the confirm button if you still want to proceed with printing." +msgstr "" + msgid "Preparing print job" msgstr "" diff --git a/bbl/i18n/de/BambuStudio_de.po b/bbl/i18n/de/BambuStudio_de.po index 0f5a7a1de1..b8cdc2a7b2 100644 --- a/bbl/i18n/de/BambuStudio_de.po +++ b/bbl/i18n/de/BambuStudio_de.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-13 15:16+0800\n" +"POT-Creation-Date: 2023-04-14 17:28+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1918,7 +1918,7 @@ msgstr "Bitte geben Sie einen gültigen Wert ein (K in 0~0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Bitte geben Sie einen gültigen Wert ein (K in 0~0.5, N in 0.6~2.0)" -msgid "You need to select the material type and color firet." +msgid "You need to select the material type and color first." msgstr "" msgid "Other color" @@ -5139,21 +5139,14 @@ msgstr "Dieser Drucker unterstützt nicht den Druck aller Platten" msgid "Errors" msgstr "Fehler" -msgid "" -"Please check the following infomation and click Confirm to continue sending " -"print:" +msgid "Please check the following:" msgstr "" -"Bitte überprüfen Sie die folgenden Informationen und klicken Sie auf " -"Bestätigen, um mit dem Senden des Drucks fortzufahren:" msgid "" -"The printer type used to generate G-code is not the same type as the " -"currently selected physical printer. It is recommend to re-slice by " -"selecting the same printer type." +"The printer type selected when generating G-Code is not consistent with the " +"currently selected printer. It is recommended that you use the same printer " +"type for slicing." msgstr "" -"Der zur Erzeugung des G-Codes verwendete Druckertyp ist nicht derselbe wie " -"der aktuell ausgewählte physische Drucker. Es wird empfohlen, nach der " -"Auswahl des richtigen Druckertyps erneut zu slicen." #, c-format, boost-format msgid "%s is not supported by AMS." @@ -5168,6 +5161,10 @@ msgstr "" "Sie, ob es sich um die erforderlichen Filamente handelt. Wenn diese in " "Ordnung sind, klicken Sie auf \"Bestätigen\", um den Druck zu starten." +msgid "" +"Please click the confirm button if you still want to proceed with printing." +msgstr "" + msgid "Preparing print job" msgstr "Druckauftrag vorbereiten" @@ -9279,6 +9276,22 @@ msgstr "" "Wussten Sie, dass Sie die Festigkeit des Modells durch mehr Wandschleifen " "und eine höhere Dichte der Füllung verbessern können?" +#~ msgid "" +#~ "Please check the following infomation and click Confirm to continue " +#~ "sending print:" +#~ msgstr "" +#~ "Bitte überprüfen Sie die folgenden Informationen und klicken Sie auf " +#~ "Bestätigen, um mit dem Senden des Drucks fortzufahren:" + +#~ msgid "" +#~ "The printer type used to generate G-code is not the same type as the " +#~ "currently selected physical printer. It is recommend to re-slice by " +#~ "selecting the same printer type." +#~ msgstr "" +#~ "Der zur Erzeugung des G-Codes verwendete Druckertyp ist nicht derselbe " +#~ "wie der aktuell ausgewählte physische Drucker. Es wird empfohlen, nach " +#~ "der Auswahl des richtigen Druckertyps erneut zu slicen." + #~ msgid "\\u2103" #~ msgstr "\\u2103" diff --git a/bbl/i18n/en/BambuStudio_en.po b/bbl/i18n/en/BambuStudio_en.po index 6441acca64..8b0044db92 100644 --- a/bbl/i18n/en/BambuStudio_en.po +++ b/bbl/i18n/en/BambuStudio_en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-13 15:16+0800\n" +"POT-Creation-Date: 2023-04-14 17:28+0800\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1877,7 +1877,7 @@ msgstr "Please input a valid value (K in 0~0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" -msgid "You need to select the material type and color firet." +msgid "You need to select the material type and color first." msgstr "" msgid "Other color" @@ -5028,21 +5028,14 @@ msgstr "This printer does not support printing all plates" msgid "Errors" msgstr "Errors" -msgid "" -"Please check the following infomation and click Confirm to continue sending " -"print:" +msgid "Please check the following:" msgstr "" -"Please check the following information and click Confirm to continue sending " -"the print:" msgid "" -"The printer type used to generate G-code is not the same type as the " -"currently selected physical printer. It is recommend to re-slice by " -"selecting the same printer type." +"The printer type selected when generating G-Code is not consistent with the " +"currently selected printer. It is recommended that you use the same printer " +"type for slicing." msgstr "" -"The printer type used to generate G-code is not the same type as the " -"currently selected physical printer. It is recommend to re-slice after " -"selecting the correct printer type." #, c-format, boost-format msgid "%s is not supported by AMS." @@ -5057,6 +5050,10 @@ msgstr "" "they are the required filaments. If they are okay, click \"Confirm\" to " "start printing." +msgid "" +"Please click the confirm button if you still want to proceed with printing." +msgstr "" + msgid "Preparing print job" msgstr "Preparing print job" @@ -9050,6 +9047,22 @@ msgstr "" "Did you know that you can use more wall loops and higher sparse infill " "density to improve the strength of the model?" +#~ msgid "" +#~ "Please check the following infomation and click Confirm to continue " +#~ "sending print:" +#~ msgstr "" +#~ "Please check the following information and click Confirm to continue " +#~ "sending the print:" + +#~ msgid "" +#~ "The printer type used to generate G-code is not the same type as the " +#~ "currently selected physical printer. It is recommend to re-slice by " +#~ "selecting the same printer type." +#~ msgstr "" +#~ "The printer type used to generate G-code is not the same type as the " +#~ "currently selected physical printer. It is recommend to re-slice after " +#~ "selecting the correct printer type." + #~ msgid "\\u2103" #~ msgstr "\\u2103" diff --git a/bbl/i18n/es/BambuStudio_es.po b/bbl/i18n/es/BambuStudio_es.po index 374bcf82b3..100d6a62df 100644 --- a/bbl/i18n/es/BambuStudio_es.po +++ b/bbl/i18n/es/BambuStudio_es.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-13 15:16+0800\n" +"POT-Creation-Date: 2023-04-14 17:28+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1915,7 +1915,7 @@ msgstr "Introduzca un valor válido (K en 0~0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Introduzca un valor válido (K en 0~0.5, N en 0.6~2.0)" -msgid "You need to select the material type and color firet." +msgid "You need to select the material type and color first." msgstr "" msgid "Other color" @@ -5121,21 +5121,14 @@ msgstr "Esta impresora no admite la impresión de todas las planchas" msgid "Errors" msgstr "Errores" -msgid "" -"Please check the following infomation and click Confirm to continue sending " -"print:" +msgid "Please check the following:" msgstr "" -"Compruebe la siguiente información y haga clic en Confirmar para continuar " -"con el envío de la impresión:" msgid "" -"The printer type used to generate G-code is not the same type as the " -"currently selected physical printer. It is recommend to re-slice by " -"selecting the same printer type." +"The printer type selected when generating G-Code is not consistent with the " +"currently selected printer. It is recommended that you use the same printer " +"type for slicing." msgstr "" -"El tipo de impresora que se utiliza para generar el g-code no es el mismo " -"que el de la impresora física actualmente seleccionada. Se recomienda volver " -"a generar el g-code después de seleccionar el tipo de impresora correcto." #, c-format, boost-format msgid "%s is not supported by AMS." @@ -5150,6 +5143,10 @@ msgstr "" "los filamentos necesarios. Si están bien, haga clic en «Confirmar» para " "empezar a imprimir." +msgid "" +"Please click the confirm button if you still want to proceed with printing." +msgstr "" + msgid "Preparing print job" msgstr "Preparando el trabajo de impresión" @@ -9244,6 +9241,23 @@ msgstr "" "¿Sabía que puede utilizar más bucles de pared y una densidad de relleno " "dispersa más alta para mejorar la resistencia del modelo?" +#~ msgid "" +#~ "Please check the following infomation and click Confirm to continue " +#~ "sending print:" +#~ msgstr "" +#~ "Compruebe la siguiente información y haga clic en Confirmar para " +#~ "continuar con el envío de la impresión:" + +#~ msgid "" +#~ "The printer type used to generate G-code is not the same type as the " +#~ "currently selected physical printer. It is recommend to re-slice by " +#~ "selecting the same printer type." +#~ msgstr "" +#~ "El tipo de impresora que se utiliza para generar el g-code no es el mismo " +#~ "que el de la impresora física actualmente seleccionada. Se recomienda " +#~ "volver a generar el g-code después de seleccionar el tipo de impresora " +#~ "correcto." + #~ msgid "\\u2103" #~ msgstr "\\ u2103" diff --git a/bbl/i18n/fr/BambuStudio_fr.po b/bbl/i18n/fr/BambuStudio_fr.po index b3df47071c..4e4664e260 100644 --- a/bbl/i18n/fr/BambuStudio_fr.po +++ b/bbl/i18n/fr/BambuStudio_fr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-13 15:16+0800\n" +"POT-Creation-Date: 2023-04-14 17:28+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1915,7 +1915,7 @@ msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "" "Veuillez saisir une valeur valide (K entre 0 et 0,5, N entre 0,6 et 2,0)" -msgid "You need to select the material type and color firet." +msgid "You need to select the material type and color first." msgstr "" msgid "Other color" @@ -5122,21 +5122,14 @@ msgstr "" msgid "Errors" msgstr "Erreurs" -msgid "" -"Please check the following infomation and click Confirm to continue sending " -"print:" +msgid "Please check the following:" msgstr "" -"Vérifiez les informations suivantes et cliquez sur Confirmer pour continuer " -"à envoyer l'impression :" msgid "" -"The printer type used to generate G-code is not the same type as the " -"currently selected physical printer. It is recommend to re-slice by " -"selecting the same printer type." +"The printer type selected when generating G-Code is not consistent with the " +"currently selected printer. It is recommended that you use the same printer " +"type for slicing." msgstr "" -"Le type d'imprimante utilisé pour générer le G-code n'est pas le même que " -"l'imprimante physique actuellement sélectionnée. Il est recommandé de re-" -"trancher en sélectionnant le même type d'imprimante." #, c-format, boost-format msgid "%s is not supported by AMS." @@ -5151,6 +5144,10 @@ msgstr "" "vérifier s'il s'agit des filaments nécessaires. S'ils sont corrects, cliquez " "sur \"Confirmer\" pour lancer l'impression." +msgid "" +"Please click the confirm button if you still want to proceed with printing." +msgstr "" + msgid "Preparing print job" msgstr "Préparation du travail d'impression" @@ -9285,6 +9282,22 @@ msgstr "" "Saviez-vous que vous pouvez définir un plus grand nombre de mur et une " "densité de remplissage plus élevée pour améliorer la résistance du modèle ?" +#~ msgid "" +#~ "Please check the following infomation and click Confirm to continue " +#~ "sending print:" +#~ msgstr "" +#~ "Vérifiez les informations suivantes et cliquez sur Confirmer pour " +#~ "continuer à envoyer l'impression :" + +#~ msgid "" +#~ "The printer type used to generate G-code is not the same type as the " +#~ "currently selected physical printer. It is recommend to re-slice by " +#~ "selecting the same printer type." +#~ msgstr "" +#~ "Le type d'imprimante utilisé pour générer le G-code n'est pas le même que " +#~ "l'imprimante physique actuellement sélectionnée. Il est recommandé de re-" +#~ "trancher en sélectionnant le même type d'imprimante." + #~ msgid "\\u2103" #~ msgstr "\\u2103" diff --git a/bbl/i18n/hu/BambuStudio_hu.po b/bbl/i18n/hu/BambuStudio_hu.po index 7435b3bdeb..51994f8c98 100644 --- a/bbl/i18n/hu/BambuStudio_hu.po +++ b/bbl/i18n/hu/BambuStudio_hu.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-13 15:16+0800\n" +"POT-Creation-Date: 2023-04-14 17:28+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1909,7 +1909,7 @@ msgstr "Adj meg egy érvényes értéket (K 0-0,5 között)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Adj meg egy érvényes értéket (K 0-0,5, N 0,6-2,0 között)" -msgid "You need to select the material type and color firet." +msgid "You need to select the material type and color first." msgstr "" msgid "Other color" @@ -5081,21 +5081,14 @@ msgstr "Ez a nyomtató nem támogatja az összes tálcára való nyomtatást" msgid "Errors" msgstr "Hibák" -msgid "" -"Please check the following infomation and click Confirm to continue sending " -"print:" +msgid "Please check the following:" msgstr "" -"Kérjük, ellenőrizd a következő adatokat, majd kattints a Megerősítés gombra " -"a nyomtatás folytatásához:" msgid "" -"The printer type used to generate G-code is not the same type as the " -"currently selected physical printer. It is recommend to re-slice by " -"selecting the same printer type." +"The printer type selected when generating G-Code is not consistent with the " +"currently selected printer. It is recommended that you use the same printer " +"type for slicing." msgstr "" -"A G-kód generálásához használt nyomtatótípus nem azonos a jelenleg " -"kiválasztott fizikai nyomtatóval. Javasoljuk, hogy szeleteld újra a " -"megfelelő nyomtatótípust kiválasztva." #, c-format, boost-format msgid "%s is not supported by AMS." @@ -5110,6 +5103,10 @@ msgstr "" "ezek a szükséges filamentek. Ha igen, kattints a „Megerősítés” gombra a " "nyomtatás megkezdéséhez." +msgid "" +"Please click the confirm button if you still want to proceed with printing." +msgstr "" + msgid "Preparing print job" msgstr "Nyomtatási feladat előkészítése" @@ -9171,6 +9168,22 @@ msgstr "" "Tudtad, hogy több fal vagy nagyobb kitöltés használatával javíthatod a " "modell szilárdságát?" +#~ msgid "" +#~ "Please check the following infomation and click Confirm to continue " +#~ "sending print:" +#~ msgstr "" +#~ "Kérjük, ellenőrizd a következő adatokat, majd kattints a Megerősítés " +#~ "gombra a nyomtatás folytatásához:" + +#~ msgid "" +#~ "The printer type used to generate G-code is not the same type as the " +#~ "currently selected physical printer. It is recommend to re-slice by " +#~ "selecting the same printer type." +#~ msgstr "" +#~ "A G-kód generálásához használt nyomtatótípus nem azonos a jelenleg " +#~ "kiválasztott fizikai nyomtatóval. Javasoljuk, hogy szeleteld újra a " +#~ "megfelelő nyomtatótípust kiválasztva." + #~ msgid "\\u2103" #~ msgstr "\\u2103" diff --git a/bbl/i18n/it/BambuStudio_it.po b/bbl/i18n/it/BambuStudio_it.po index 4d935251ce..f969019143 100644 --- a/bbl/i18n/it/BambuStudio_it.po +++ b/bbl/i18n/it/BambuStudio_it.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-13 15:16+0800\n" +"POT-Creation-Date: 2023-04-14 17:28+0800\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1905,7 +1905,7 @@ msgstr "Inserisci un valore valido (K in 0~0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Inserisci un valore valido (K in 0~0.5, N in 0.6~2.0)" -msgid "You need to select the material type and color firet." +msgid "You need to select the material type and color first." msgstr "" msgid "Other color" @@ -5094,21 +5094,14 @@ msgstr "Questa stampante non supporta la stampa di piatti multipla" msgid "Errors" msgstr "Errori" -msgid "" -"Please check the following infomation and click Confirm to continue sending " -"print:" +msgid "Please check the following:" msgstr "" -"Controlla le seguenti informazioni e fai clic su Conferma per continuare a " -"inviare la stampa:" msgid "" -"The printer type used to generate G-code is not the same type as the " -"currently selected physical printer. It is recommend to re-slice by " -"selecting the same printer type." +"The printer type selected when generating G-Code is not consistent with the " +"currently selected printer. It is recommended that you use the same printer " +"type for slicing." msgstr "" -"Il tipo di stampante utilizzato per generare il G-code non è dello stesso " -"tipo della stampante attualmente selezionata. Si consiglia di rielaborare " -"dopo aver selezionato il tipo di stampante corretto." #, c-format, boost-format msgid "%s is not supported by AMS." @@ -5123,6 +5116,10 @@ msgstr "" "verificare se sono i filamenti necessari. Se sono a posto, fai clic su " "«Conferma» per iniziare a stampare." +msgid "" +"Please click the confirm button if you still want to proceed with printing." +msgstr "" + msgid "Preparing print job" msgstr "Preparazione lavoro di stampa" @@ -9220,6 +9217,22 @@ msgstr "" "Sapevate che è possibile utilizzare un maggior numero di anelli a parete e " "una maggiore densità riempimento per migliorare la resistenza del modello?" +#~ msgid "" +#~ "Please check the following infomation and click Confirm to continue " +#~ "sending print:" +#~ msgstr "" +#~ "Controlla le seguenti informazioni e fai clic su Conferma per continuare " +#~ "a inviare la stampa:" + +#~ msgid "" +#~ "The printer type used to generate G-code is not the same type as the " +#~ "currently selected physical printer. It is recommend to re-slice by " +#~ "selecting the same printer type." +#~ msgstr "" +#~ "Il tipo di stampante utilizzato per generare il G-code non è dello stesso " +#~ "tipo della stampante attualmente selezionata. Si consiglia di rielaborare " +#~ "dopo aver selezionato il tipo di stampante corretto." + #~ msgid "\\u2103" #~ msgstr "\\u2103" diff --git a/bbl/i18n/ja/BambuStudio_ja.po b/bbl/i18n/ja/BambuStudio_ja.po index 1ba994e549..8276151a8e 100644 --- a/bbl/i18n/ja/BambuStudio_ja.po +++ b/bbl/i18n/ja/BambuStudio_ja.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-13 15:16+0800\n" +"POT-Creation-Date: 2023-04-14 17:28+0800\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1860,7 +1860,7 @@ msgstr "有効な値を入力してください (0 ~ 0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "有効な値を入力してください (K: 0 ~ 0.5, N: 0.6 ~ 2.0)" -msgid "You need to select the material type and color firet." +msgid "You need to select the material type and color first." msgstr "" msgid "Other color" @@ -4917,18 +4917,14 @@ msgstr "プリンターが全てのプレートを造形することができま msgid "Errors" msgstr "エラー" -msgid "" -"Please check the following infomation and click Confirm to continue sending " -"print:" -msgstr "次の情報をご確認の上、「確認」で送信してください" +msgid "Please check the following:" +msgstr "" msgid "" -"The printer type used to generate G-code is not the same type as the " -"currently selected physical printer. It is recommend to re-slice by " -"selecting the same printer type." +"The printer type selected when generating G-Code is not consistent with the " +"currently selected printer. It is recommended that you use the same printer " +"type for slicing." msgstr "" -"G-code中の機種は現在選択したプリンターではありません、プリンターを選択し直す" -"か、一致機種でスライスしてください。" #, c-format, boost-format msgid "%s is not supported by AMS." @@ -4942,6 +4938,10 @@ msgstr "" "不明なフィラメントがあります、造形に必要かどうかご確認ください。引き続き造形" "する場合は、「確認」を押してください。" +msgid "" +"Please click the confirm button if you still want to proceed with printing." +msgstr "" + msgid "Preparing print job" msgstr "造形タスクを準備" @@ -8718,6 +8718,19 @@ msgstr "" "強度の向上\n" "壁面層数やインフィルの充填密度を増やして造形強度を向上できます。" +#~ msgid "" +#~ "Please check the following infomation and click Confirm to continue " +#~ "sending print:" +#~ msgstr "次の情報をご確認の上、「確認」で送信してください" + +#~ msgid "" +#~ "The printer type used to generate G-code is not the same type as the " +#~ "currently selected physical printer. It is recommend to re-slice by " +#~ "selecting the same printer type." +#~ msgstr "" +#~ "G-code中の機種は現在選択したプリンターではありません、プリンターを選択し直" +#~ "すか、一致機種でスライスしてください。" + #~ msgid "\\u2103" #~ msgstr "u2103" diff --git a/bbl/i18n/nl/BambuStudio_nl.po b/bbl/i18n/nl/BambuStudio_nl.po index 3f850235e0..140d756335 100644 --- a/bbl/i18n/nl/BambuStudio_nl.po +++ b/bbl/i18n/nl/BambuStudio_nl.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-13 15:16+0800\n" +"POT-Creation-Date: 2023-04-14 17:28+0800\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1915,7 +1915,7 @@ msgstr "Voer een geldige waarde in (K in 0 ~ 0,5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Voer een geldige waarde in (K in 0 ~ 0,5, N in 0,6 ~ 2,0)" -msgid "You need to select the material type and color firet." +msgid "You need to select the material type and color first." msgstr "" msgid "Other color" @@ -5128,21 +5128,14 @@ msgstr "" msgid "Errors" msgstr "Fouten" -msgid "" -"Please check the following infomation and click Confirm to continue sending " -"print:" +msgid "Please check the following:" msgstr "" -"Controleer de volgende informatie en klik op Bevestigen om door te gaan met " -"het verzenden van de print:" msgid "" -"The printer type used to generate G-code is not the same type as the " -"currently selected physical printer. It is recommend to re-slice by " -"selecting the same printer type." +"The printer type selected when generating G-Code is not consistent with the " +"currently selected printer. It is recommended that you use the same printer " +"type for slicing." msgstr "" -"Het printertype dat wordt gebruikt voor het genereren van G-code is niet " -"hetzelfde type als de momenteel geselecteerde fysieke printer. Het is " -"raadzaam opnieuw te slicen nadat het juiste printertype is geselecteerd." #, c-format, boost-format msgid "%s is not supported by AMS." @@ -5157,6 +5150,10 @@ msgstr "" "vereiste filamenten zijn. Als ze in orde zijn, klikt u op \"Bevestigen\" om " "het afdrukken te starten." +msgid "" +"Please click the confirm button if you still want to proceed with printing." +msgstr "" + msgid "Preparing print job" msgstr "Print opdracht voorbereiden" @@ -9265,6 +9262,22 @@ msgstr "" "Wist je dat je meer wandlussen en een hogere dunne invuldichtheid kunt " "gebruiken om de sterkte van het model te verbeteren?" +#~ msgid "" +#~ "Please check the following infomation and click Confirm to continue " +#~ "sending print:" +#~ msgstr "" +#~ "Controleer de volgende informatie en klik op Bevestigen om door te gaan " +#~ "met het verzenden van de print:" + +#~ msgid "" +#~ "The printer type used to generate G-code is not the same type as the " +#~ "currently selected physical printer. It is recommend to re-slice by " +#~ "selecting the same printer type." +#~ msgstr "" +#~ "Het printertype dat wordt gebruikt voor het genereren van G-code is niet " +#~ "hetzelfde type als de momenteel geselecteerde fysieke printer. Het is " +#~ "raadzaam opnieuw te slicen nadat het juiste printertype is geselecteerd." + #~ msgid "\\u2103" #~ msgstr "\\ u2103" diff --git a/bbl/i18n/sv/BambuStudio_sv.po b/bbl/i18n/sv/BambuStudio_sv.po index b4858ea15f..b02921c3a8 100644 --- a/bbl/i18n/sv/BambuStudio_sv.po +++ b/bbl/i18n/sv/BambuStudio_sv.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-13 15:16+0800\n" +"POT-Creation-Date: 2023-04-14 17:28+0800\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1890,7 +1890,7 @@ msgstr "Ange ett giltigt värde (K i 0 ~ 0,5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "Ange ett giltigt värde (K i 0 ~ 0,5, N i 0,6 ~ 2,0)" -msgid "You need to select the material type and color firet." +msgid "You need to select the material type and color first." msgstr "" msgid "Other color" @@ -5047,21 +5047,14 @@ msgstr "Den här skrivaren stöder inte utskrift av alla byggplattor" msgid "Errors" msgstr "Fel" -msgid "" -"Please check the following infomation and click Confirm to continue sending " -"print:" +msgid "Please check the following:" msgstr "" -"Kontrollera följande information och klicka på Bekräfta för att fortsätta " -"skicka utskriften:" msgid "" -"The printer type used to generate G-code is not the same type as the " -"currently selected physical printer. It is recommend to re-slice by " -"selecting the same printer type." +"The printer type selected when generating G-Code is not consistent with the " +"currently selected printer. It is recommended that you use the same printer " +"type for slicing." msgstr "" -"Skrivar typen som används för att generera G-kod är inte samma typ som den " -"för närvarande valda fysiska skrivaren. Det rekommenderas att du bereder om " -"efter att ha valt rätt skrivartyp." #, c-format, boost-format msgid "%s is not supported by AMS." @@ -5076,6 +5069,10 @@ msgstr "" "filament som krävs. Om de är okej, klicka du på \"Confirm\" för att börja " "skriva ut." +msgid "" +"Please click the confirm button if you still want to proceed with printing." +msgstr "" + msgid "Preparing print job" msgstr "Förbereder utskriftsjobb" @@ -9066,6 +9063,22 @@ msgstr "" "Visste du att du kan använda fler väggslingor och högre gles fyllningstäthet " "för att förbättra modellens styrka?" +#~ msgid "" +#~ "Please check the following infomation and click Confirm to continue " +#~ "sending print:" +#~ msgstr "" +#~ "Kontrollera följande information och klicka på Bekräfta för att fortsätta " +#~ "skicka utskriften:" + +#~ msgid "" +#~ "The printer type used to generate G-code is not the same type as the " +#~ "currently selected physical printer. It is recommend to re-slice by " +#~ "selecting the same printer type." +#~ msgstr "" +#~ "Skrivar typen som används för att generera G-kod är inte samma typ som " +#~ "den för närvarande valda fysiska skrivaren. Det rekommenderas att du " +#~ "bereder om efter att ha valt rätt skrivartyp." + #~ msgid "\\u2103" #~ msgstr "\\u2103" diff --git a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po index 37cbcc99b1..b04d6059a8 100644 --- a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po +++ b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-13 15:16+0800\n" +"POT-Creation-Date: 2023-04-14 17:28+0800\n" "PO-Revision-Date: 2023-04-10 17:13+0800\n" "Last-Translator: Jiang Yue \n" "Language-Team: \n" @@ -1841,7 +1841,7 @@ msgid "Setting Virtual slot information while printing is not supported" msgstr "不支持在打印时设置虚拟槽位信息" msgid "Are you sure you want to clear the filament information?" -msgstr "" +msgstr "您确定要清除耗材丝信息吗?" msgid "Please input a valid value (K in 0~0.5)" msgstr "请输入有效的数值 (K的范围为0~0.5)" @@ -1849,8 +1849,8 @@ msgstr "请输入有效的数值 (K的范围为0~0.5)" msgid "Please input a valid value (K in 0~0.5, N in 0.6~2.0)" msgstr "请输入有效的数值 (K的范围为0~0.5, N的范围为0.6~2.0)" -msgid "You need to select the material type and color firet." -msgstr "" +msgid "You need to select the material type and color first." +msgstr "您需要先选择材料类型和颜色。" msgid "Other color" msgstr "其他颜色" @@ -1980,10 +1980,10 @@ msgid "" msgstr "配置当前打印任务应使用哪个AMS槽位" msgid "Filament used in this print job" -msgstr "当前打印使用的料丝" +msgstr "当前打印使用的耗材丝" msgid "AMS slot used for this filament" -msgstr "当前料丝对应的AMS槽位" +msgstr "当前耗材丝对应的AMS槽位" msgid "Click to select AMS slot manually" msgstr "点击以手动选择AMS槽位" @@ -4903,18 +4903,16 @@ msgstr "该打印机不支持打印所有盘" msgid "Errors" msgstr "错误" -msgid "" -"Please check the following infomation and click Confirm to continue sending " -"print:" -msgstr "请检查以下信息,点击确认后继续发送打印:" +msgid "Please check the following:" +msgstr "请检查以下内容:" msgid "" -"The printer type used to generate G-code is not the same type as the " -"currently selected physical printer. It is recommend to re-slice by " -"selecting the same printer type." +"The printer type selected when generating G-Code is not consistent with the " +"currently selected printer. It is recommended that you use the same printer " +"type for slicing." msgstr "" -"生成该G-code的打印机类型与当前选中的打印机类型不同。建议选择相同的打印机类型" -"后重新切片。" +"生成G代码时选择的打印机类型与当前选择的打印机不一致。建议您使用相同的打印机类" +"型进行切片。" #, c-format, boost-format msgid "%s is not supported by AMS." @@ -4928,6 +4926,10 @@ msgstr "" "AMS映射中存在一些未知的耗材。请检查它们是否符合预期。如果符合,按“确定”以开始" "打印任务。" +msgid "" +"Please click the confirm button if you still want to proceed with printing." +msgstr "如果您仍然想继续打印,请单击“确定”按钮。" + msgid "Preparing print job" msgstr "正在准备打印任务" @@ -8622,6 +8624,19 @@ msgstr "" "提高强度\n" "你知道吗?你可以使用更多的墙层数和更高的疏散填充密度来提高模型的强度。" +#~ msgid "" +#~ "Please check the following infomation and click Confirm to continue " +#~ "sending print:" +#~ msgstr "请检查以下信息,点击确认后继续发送打印:" + +#~ msgid "" +#~ "The printer type used to generate G-code is not the same type as the " +#~ "currently selected physical printer. It is recommend to re-slice by " +#~ "selecting the same printer type." +#~ msgstr "" +#~ "生成该G-code的打印机类型与当前选中的打印机类型不同。建议选择相同的打印机类" +#~ "型后重新切片。" + #~ msgid "Online Models" #~ msgstr "在线模型" diff --git a/resources/i18n/de/BambuStudio.mo b/resources/i18n/de/BambuStudio.mo index 6be26adb1e004756efb342ebe751852ddc5b699c..d50812e8f56359ad3ade4a236e967270c02d32da 100644 GIT binary patch delta 47713 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 PJfh0#scnl*y!d|sy;&nZ delta 48256 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

    Pb&7`JH%|I<5HX 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 delta 44448 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 XZMA#-x3Ke;mvS4zn(y}RJ~Zy%Zs#5d diff --git a/resources/i18n/es/BambuStudio.mo b/resources/i18n/es/BambuStudio.mo index 35dd85eb111006f1d591a8bb4995862e6f8f79c2..dd0c2d90dc63da85461b33552274b0adfc780fdb 100644 GIT binary patch delta 43935 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 KC!t$N^#1|kMChmh delta 44550 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 diff --git a/resources/i18n/fr/BambuStudio.mo b/resources/i18n/fr/BambuStudio.mo index 18ecf7d926a86e0b718db724f4b0ee39a0f1a777..20e6309c33561b04b0763fd50e86f1b8c509b4f0 100644 GIT binary patch delta 43940 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%0AjW?MQO~WYi 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 HrosOMP@8~E diff --git a/resources/i18n/hu/BambuStudio.mo b/resources/i18n/hu/BambuStudio.mo index 487926607e6a5c6c1012ede6da1097958dda1a5b..468772f80f1ad41ff87e7c442be119aa21841bf7 100644 GIT binary patch delta 43940 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®zm7UKxai}TR? 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 W4pVbE%UI40W|`jF|AEdM9RCCPV{F*~ diff --git a/resources/i18n/it/BambuStudio.mo b/resources/i18n/it/BambuStudio.mo index 527f0e663df423f57ff523f59110f78b9e45d58c..a3abae19cd33f070603041167cb6ededf421c53f 100644 GIT binary patch delta 43935 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

    M-p8+FWv+&8;<32Lp^qV~ce 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 diff --git a/resources/i18n/ja/BambuStudio.mo b/resources/i18n/ja/BambuStudio.mo index 479ee57b7bd0c2ef7ec12dbdf693e5a5cc4ef38e..c8693c4c7fc6573ebc70e20b07ffa6dcebce8e54 100644 GIT binary patch delta 43931 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 AZU6uP delta 44474 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 diff --git a/resources/i18n/sv/BambuStudio.mo b/resources/i18n/sv/BambuStudio.mo index fd695d41125f848b32c00b1fc0384067d9576635..2f5621c7b8a4222b8faba4f760ad5125696e0f88 100644 GIT binary patch delta 43931 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 OPp`D5x%N)BsQ&@uxVpLk delta 44421 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�M=klyJh zBcKeqPz@G9b)Xb##MLd{AC+&kImw)khe@A{D%UcDn~83yk&ZysI}dezsim(+mcZx# z_0?Utgqp(p?t=Fhs$kTN?s|MP)Xa{$Qx-<8Wp_&-jxC5!M%DMk{DQiJ#?2HGcqeR$ zNp$|F6G+O1RhR+~pn7@>Rl##qM}jiD^yp?1)b$Lgjuf=?uI3J2Jp9(O$vY5*zCEU1AM$YbZf0tvZEsEgVQ<1E7>i?2r=v!j>} zZ=psSF|RW!sv|Km8z#W|SPJ!2or_wU>!=r&y!o8dd;)s>K0-YO6XXvGyv@!-72Jt> zyatE68%`C}6gEQL4+i0WoP@ejRWIO1I>wxiB}xC@;x|xB_7v4&Ke(VIWF9RU^WY8NJ;Ixh;@^FD6i5 zE}bxMqdNTF;_-{PhBBi%o*y;Bik99P^{g0xdTNeEwX*@)|J=I?r~?Phe)h5xQ>LO@)tGhq4IY}HQWz%j7M4eyb``U_lro-NKT`s{2r>u z4^eCP6m{JGHlvqx@f2ou)IENEME-}*h`|5Sah#wFd@7j=SEKS)ifjENvsm+4*iY&z zAN}ib(+MB8%1T7$s~CD!gr8enOUzFwX-g>=8EauBRL7rFE(-y@0qdjA|NALRo@V6L zCe-HNjbOX1~67rm(qlc_xN>0u7uV^$6;enLfOt=?D z!+$@;C^w8U&uIJsiSLnrR#zY2Z~jlC%Fvno|9j+bsnVrJu(H>2r*%?S z__u-ihrQ`pO>3|t31z7GJZV$u-DWB%Yn6{Dts(i&@pFNnc;x$RR#844M&hTb)t!fqjixg_Y*xa^6Be2I|BZqdsH8L*@{_1fb}~)k zXOuce+DNY7<%d7m4tyfv7p`aH`U@MtL>eo|)#~IMO;{iPJy@?jKNa|iKzc&TtaO*$ z|ITc-BeMQ+=l^|Ny#-tkCq99^&zO=^xQ6=p zQqt=|{1VqI5Kcwep2TNTzJRrHnS8bNe{OJ!3zOD-9%|@Nm3ABNa%~Cj=|fp&DG{O(*avLWK><*Odke{ii{_r|HA@0D;eItD`CT zgUOo^7ixM(*oECx?2&m64eIj->vJtOX;Jx!PFfD~U!jr8q<^ddHE&+)l6-a^;y2JfZ&Pvx7q zps$-J(t#DEFQvc?DossXAAaHY_(!$9kHkmN!J}N?LYefKlAm2Jn^%ysF*p+X{LBx3 z(%|vuD&9NFFS5@0asD&H3nb2^f-Yp*Nw_Wz{7mK?q^-k#e;OknrD+zBvDpLTf2JgKOK#yo>My zexkcV-Zm?+hkUn4pFLNl5V@$lHDz~_Hw!-zDHlZAbkdR% zj!FIqG_;?%K78X4_(eLcMnKwFDyTw%0mNHV!4T_64$J?Qsj_Ko zAXCUQo_Ku9=`)f#2mhy|eEH}0-w#y&@23h4{QGG^rCsb=LMq+GwIa;a6Dq7j<-R3@{vrP2_2@AN0wo+`GJNGQPF;WHj%cK ziq`Vehce^vJfjVwfr{iiOP-;0G^vgJq8Vt!{$~PpG}XhsGl6g_h(=+3icnE}7xeg> z1>Ol7m_P+JsF=Tf>Qy1G&uqdm2~WeT#N$%O7#bc!JR0HCgm0ogS!v@H^`@|R0`j~h z{$msy|23D-OUVU&dRvdAP>l8A_*~k~WC6_k>?*{ddt=RvOZ04&Eh0Yip<{;eS7I2p6?@um7Zw z6J04=nd|kfU>J2?NR^n;$b)#KN0%|!%+IfEd{d`CG7mJUj^lX}sZOwm$Nhzn#5XwHnyR@_v zQ&Z*=uI2hZ%RhxQeINOZpTN?UA#jzDeX8 z&rf$U6sC@umT?Dl>YK8H%L3f_f4YOqO_50j!HHp z>*^sv&`6@GAdWcV3@X%>5E7JDi%J~D8@FT=yc!fmssCqoXW#!mo#&a%%y+)?o%tfDHR)`KGPGp9!FBraq z!zVZmH}PyZVs7xolBg%xQ^Q&G#QtG6h+TW|jnwHb{QBQOMC=TpCqn^vTg6I(-DODZ zs0zm*_DZoU^j}lo<^VAl;(B`hbzZPR+LN3g$zw?7_@?-H_AHWjU9VN_Ta9JF_~|7! zyUg3mdVOCfA^D2RI(U40m|-JF^sv(npRt%9KqUXt-%t}jLOqP$81nthdoYs>b^$CC zkNiq6O{JNq3(B!@6#1tNi4A8+EE%iF%y4Dp2X9L&7j_-i*K{+EO;7qG|L+)ryHDO3HULtcky=6h2NF(ehnQI2Y_b(St$2In+KJ!Q5Ry)bb33_4$6nUieOWbJ-!*kbU>? zL-?QaN0-(#{%h|UDnJzT13RF(9pTT=9P@8`!J=b;JK!cUlT7`JIQ?JT&T#&A(pye` zz;-0B|7)64^kP}CQ(yL6NLH@TMXV=2gNr?R(m%m^!n*{oDfKrjbheY=r@_YP!kyZD z0(UVzccNGwUcqVd-+x;revj~M&EJCb6-%eG^eNNeyMRAY-bH$D)OF;O zB9TcbEWt-})TeTlaUQ*9CkIs-y55FKQVxk4q|7!SfO8#G(f*KBkYc82%Gx#rAPXD?FFJ zSQPj|X2edR^%J;}d>XMd$B6B>9mMadW(-;>+N)T7YB3Lu(^>SAybHb@JRQN;V7)nH z2TP*y$JD#&?`FYvybXGTh%xZX({F|LMtlqP4clTKNTR$~X^xBag-{IndxYyVe2!eK zvkttbUmI*M%UaVHYYg@QE;f_H#JVg06LhX})DdDM@ZXqABL1$k!i|jO&DWA)n;~D+ z=Ev0D2#r;7=~tn*7qRVl4PM3!0kKvr&P3dxi;WzaOKB1eYXM&@A6_0B6`8$H-b=pX z`vu7&T{@7#bC7?ez5_lMU#p@Y5#OPIha<&IPKVhMo)rFScpdZ$kyJv@~-1Kt?=VLIoby(|tL zLGFk4FT{@YyMqPtF#BY`iN-%P>Zs0cZm7M zdRTSxEC@ZR7sLOZeyr+#N?r%|#Up!ig;)Zyi(V`>KSj=vsRL5arME%3Qa>k;1`B1u zXSfyaeY_u{VztTV!l{8D=a>cH3*nUmF9e%LoM`)B`P=!1|Il<;d7kJd10ev33k;6XsediZIgC-p$5SLi77V_0|?nUp&g}3oZ zXnf2OL-25Vxo~z6N78G;oY%!f0Z z1q~SNhd*a&FOF>j?J2d`Pk4Fo!En3M>!Z4z zhOuO?9ulGgyTM8zVxeA5-k-P8CXr8%5WciFXDS}v6)T_+&O4D z8qf5=p3Js}catbqOm88*y6F9E`;H&L99=GivMTCDEXIFw>ec0-R9vi37o0`-FY1N} zihT(Ff`h&$MlfGqap~0r+eEL0V)8FuY(Ls{EDbMxia%J`TCbI%7A#yq?Vkg~Yd;Pz2A~j(smIcQkbpxNELn8RKz7nAf z-`6FAkH$MYG~h3V*M}#6gU%=9yKpxiXc(BojPP9W$PT>OL9+p(j}S>?=s5LO@{hvv|2)B)sGa5dZSKSMgzZ3Z4A z)&io#W;x~E85&Q&8iK*(h4iwOcvGXh@}U{ZzN`SD7#|F}@B9A5C!iA?06MIa40)H304ZaEdD)mr3;wUkgS5K@S^WE&}|K6U1 z>&Hw2v-Ma$NxA!|BRfDltc&~+>W08Z2=l-^@K30#!*ONsXXX7tJxq=v&cYLzo1srM zj#(eLEx^rSCt1FkdImb1$;EDgUqY)f|Ki2)NUu48;71U{Ar=tDz5;uK?`EJhSXuHb zD)I#0&n#|)P=By*=r5+fow+^qa_Aib%b~8LJG`lD!%5KE_Wo}?M2C4osLOk>3Sg(n ztK(visq1sZcIp}|yN8IF{H0Lr3`e{`R6a>q3ipJw2yO}TarDk9zayNr%=n|V7fz)} zy(AjK5E`+NuP_)(Q|y@z+AI6p9C|b1T!ouR-V8A@SMurL?WhN%yNdoj?X5sNg8nW$ z)ldn%mK-egY$<4pdE<@A&0HR-%P&&DL^vAk0saI0a$qg=`0K>Zx~Mxmv1DeK!?{mg zl|vj>8(x2k9O3}^^Pl}a03Tccx+3nde3C}gwGof!`gV91U9t|W1H#MT3;|n1Ue0NW zLnDQmMI15({wbZUMYEm~#>sYXn%_b6fzSn^edNDEXux0=SRDQ1U}rhzwJwPydhv9d z>1~n-FJ46-GM5K`4V*_{ec;@{)6tFqdqFQ6+(KL^|NXb1Q4`=LBqJ`?hGrWUHYBe~ zzX*H~`FMOO3my_5t*+6_cI-cMmcs#ujxWBTfwQ3)vK1rSh zFB*KR&P!mywGd z)MfXnU&0ZKP|Slvx3WjMJpCg0*}>N$YO86TQQsh|1?KrFmn}b zK0+V!04en5<7L6b8sORVMiJY=?Z=E8yb$tO@Sfz6y?7I>7u|JQxL*{oRd@)TAVj~! z`{@%^(3t>)8qu%C>`>bTe{Cn8(<92lD+MQoEuM0ZwfEN*~aKu&gCli;TRfe6Tz%R=0|1_tk z79p|qh@4TucosI)WqZhXBjkp_U`Zc^@Ch@KgFe;H43)Pwh&*kEeSZYzMj6 z7(4<$g_nX?mBY5;t;j2(Q<^#3fB%XCfQ=`vVtHjd%^=_LXxI-Z_KMgX z;Y>Y7upWAZw2LFLn~Mo;dJpE27g1S2;WQZIUFxE{PASO*TOA<*Pgk4ezwy%?HIFTjbnjox$cG=#gMBlasko7n_? zMLy+_miR(j*ZyWXM~HnZ?~@(o!;qCmU4(qVuT!_9{zDJAOk7T{i(a2WeVxVeCHI(* z4X#nbFT~`VlzZHzTB-0*UrTV9IdRG*ucWk7F7A7>E^XY9zT!)lMlO9qg8e2LEkP!u zUzj-{I6TxiajL}KQd#6U2lGfz8c$7B=goPU;xDuuGy?HJTTDCFE30z}eXgi(< zG=&HIh8Qg~C!37EW`EX%Fvt@{SX!p%mT^5(-MuI($+|irJ*A%Orn2>|b5aXa(hAa6 z7Hytw&6sz0#YTHOKVx-%c8YcO&h#GdxEcp1?J~PoPoEs&I(qEL`|uqZ7}4mg}$xFof3RYpNVoHM!bhs=UCu|?Udic;dzSCn^q pr%98$$x%FQ!Mtzm(!3bfWh?Bwg2i!n*C!Xn?3UxQ+PO6=_kXK=9;5&O delta 50513 zcmY)11$b1~-v8}Mg1fr}cXxLW1h?SsPJtpDcZzF^6!#V@?ogz-ySo>6{-5uxU!V89 zb6s=pwbouPdv+!%XV>89kH1CpZo~;U-N!3gWZw9-qR*Eun$LG_vQmA%Zu@+`0PK!r z@%6+cI1p3fEG&szumXO<0$6Il&sPHbVGP`gQSmVL!gENyp0CmYGLujR%isjeh^H|- ze#WMl>7dUSgkvxYPQY9^3oGMMEQIm@_W5#PC?-Y^8INx^CdH+wf$YNswC_9S5BPj{ zF%lO(V=N3h;UrR6~6+JdQw(cpUzWGf^`c=djNg4&z}o z+V>?UpbFAs0?dj1umZ-zy{Lj0FehF@%~a$gRE|}#7G6fpWVWL|Uk&VvT7tc(^nicd z(v?BQo1mvDT|gi{E=G-D8>&NxFfN|P=y)Gv;~Pwg;g7ksOov&C&%sD|2&3UCOo-R9 zHoil3yz+6MuO9w#ocWJH-~kCy@i}VhKcPAh<%Fv+9%|~7qdJ@w)sdX24wgnWTo<(@ zO;H`_fU2htM#mxMMARmpdxH6oL0}6BDtHLhfioBr@1iPtgKE%s(p`^(YA_9|fvl)} z`LP3*L3L~`Y6)2P52a zn?B(!&+XFUBn;xhAZ(1^FeQfFX5(Og)Fyg~<1pzRpKmlSL(NRiyY8G9LrrZ>)J!!- zb+ju6;V@MGQK*4W^9X3|=AqVhEox0Sqk4J}wVN+k{4uJ6&!}<{@3|RCi2aD?#=*E6 zHK1(wx$7y8pD_CamKQTV^!YlWca4BXSm_a;@wgLvVUEW>-*8-vif4M_^9{v$I092W zbsb)Yn)*L637$ob`~_+ze9zowjf&c9NiYSbLT1MEl_U_AgxaWr%`hSMK&{DPxvMu0ZYG`r!{G&-jaM-;?fZJaa6R=>{3)tK?=S{NcmWJaxZe$)(9 zLfvAUqo%fxIR!N%Yf$C(q8d1k%6|h_;ak)UE_mhgZ$;H}95uj4=qbZX0*NuwzpjU= zF&^<;W_eV_VW@_?V{9CO8F3~q#676J(DJogs*#wA_*_(jyD<*_jnVM(Yvw;Xfd?dL z>fT}}{EnHh;~V!RGaXA1e~5)K!&_HD3sl8jQA_a?#>D>SIMkl`6?5QvoP>8!r={mR z=3i6z{GGc&d_s*Z;d@sg6UHLm0CfZDfSSV5sJ*cWHFGO44(`W1cmZ2rln?IK-PxRj z>fj;N3|#aGBp`4PHR3Or7t?)o4L3xMup?@d^+0`k^~V)B4C7+9Pp(6yPE4D~@xY~kg@nr_%tD=p9^nK0 zn`I2Dr?V`+3Uz%OYNV%89l3+5@F8mLpQC2%Eo##RMsWFKV=3aPF$h~l@Z1R7kEY6gB-JW0d=|1r#f8A#8G8d-g_1!^Wcp*D3NRDHv+Jx)Q*>{nF%;k-z$ zr?F8ZONogvKNiJMEP&%NAs#?Y={3|y6Ge6nrbKPJ%&2-wm~~MNbvA!Sb#N4Fb9z$< z=!US|GF(HQ|HqgG(?kjI-_t`;$EgQuvkpbw7nY)C=qhTd-lH~e!Ui@3^gOeF$K=X zA-DxqPvPhRzVSN$RS4+ZUP4uvGKQPltf+?apgL9*Yhx(>gNsoe?-tW_U;t`~hU3rp z8&1cBu>$;GP^>|9^dsv0`(g+9(&_x?AW#$QU_)Gv%`hmA+dQpM$EznEz!9iDQaLUa zU`t$sW3Vt5i09IK;0@xlP;1^Nz8m>a)Y?x)ZybRY1ayq@C2+^6Flyu_QEOhwY=G)W zdsM^yQEUA>Y9=;Wd@t&bcpiiCgQX`*=mwM(b!v(vQlbF=r)xY^$BUyjZL36_f88iN5_AKZfVx3U zMIEp67>w6Y9s7pbJdqN+J6&Q_gQZa&tcj|)IqLWhz?Qfbwa1bt3Gi{V^|itZ#M^pF z1N=W!{(+rI_BB}%TP&4+#Y{{u^6%uISAREJuj2G$cb zWBn{X9(6jrDHd3Un#vuR9?zg=;FDeVrEm?zN2TXOo#UdYdwze+f{X3?DO3k8TKoZO zPd!JSg7?UhdA{$K5GkdrFc#_|G8D^V57ZQIMm2oM;wMlubpvzZW7JY64R#~VWEMru zSSYHVW|$beVKSZnu>^F>T!yM(7iyCnL)|!Dqt-NbDz_=KqVktRe-WZHqFeP5bHuwqiVY9SugflP$ z@m1Ig&!Re7FkOKEJEJOCg7_TljaM)SR!`6QS5F3~cMlSCQ6t)lI{!ydBfEo|>Sw6) z{MphYWN=Fn3$@ELpsr^_eFhXlEoEc7J`6PzV^H-@$>6!E{*43`T!ug62JDL2GrB39 zhg!2gP^VXyl!_ZirW_-E9f=$bje|AWmi)Xcm>buh@w;wsL7s<;ql z!chDP`{4k5h1yJ=v$~}iiWB{Fp z@_W9r1aw2FiP^ECWf+4R!5j?Wmbn{i5#O6D!2iq`Key{(3skAO)gaul^B_b@MhLd`(- z{O))bMa8S2I@AEOVvGWA6Bdy=|79(qDyreSs7=xw)q!59b36dG2`8XV&3x1iY6t3g zUPb>>p_U+iLD%t|sQN0R>Ip;D+X+35tQP?}9(C*%qxQf~REG|sK77ugPRUKwnm-aTA1lQ9*S-D~3F=|o!fpxDqZ-JHL6`@1$18x^ z&E-+~>soqyRQ|rGj(XS;$6Nd(>U4!K;+7<-nW+fpUu#r=1l<_Qp?X>kHKJM;4>Oyg zI?x)mmc3Ckwh&d%c6@+GP#yZSsJp%yRqhmOW^Z9;eBu$vLLh!Im!TBqBwhox#zRpZ znvc_PG1g!=7b@_b)z=x9n@ZUi<+TG<=sFN zAnBejy(JXJ5oD;0x$qQfvjkRf6~{%bc}CQYr3eONJ@l_Vjv?-$@$d>E}VGokZeS^=zyI&LjcQ`gzz9_A-L7FE$+EQaqEx>hMC;4E}|l8ahKjH;j9z3V&cKj1}T4%8e>e5p}#;p=P8zYD6PZ4R6E( zxZmPmQ1wNr>V7auiaCkb#b6v&mGiG2Ehj<8Z3n7>1LkR*PW%R{!CuweQjJ0Fk(pQ< zkDz8SMX0MMJ8DVun`Kc;Q4^J~J8BOM3FZ82vy3D`=YKY8CKjSPv=epxAgbq=Q0F#s zbyq=NRJlT^e5Fz6yAEnbn&K+#f;u%xIJ^3cNsk(6R*!&|pb%=Us-OziwG6FMGt|T4 zBT*fgYU#UBBRhjC|1YZIuc(ehuIbX_qE1N))Xb!_bT1D9O+|53fiiZXDyn1kQ6uYs zs$d{0-*D6n{bKPMsCpJydFZIu{vXtm+(wP`3F-#+(XPj=<7OxwX3+W1Z3zugBW{a% zupjE2uCeQPQ5C&H<%?L?eN&PcH50YWFw}@!qL!{Fs$-*2_mjD(CEA4XbpH1d&@s7) z8sQ^U!GL;hCgP)}HW<}VI@BJ?hFY4Us0Kq(<(i`M^+e5Nf7GTMiE4PfIUBv~BrGMM zkJI0>M^dAXXD(E^@~FL19h+f2RQ+2}_3uE<;Gz1Q z{{{pulc1@|(;&eA+o>w33V)zR7O$Z*t(n&>i&~P}W=C_VIUBX7{zQGso<;4QAD9)> zgmL~;5~v>Lev0jeDlpsJVcs+Y8@W4II{Zw&@~9ao)!13xY-)Bv-A@LZv&;?V36DT2 zGCW4jK$a$Mq-D%nW=pdt)*;_8)S6yKP4!LG)IYHJD^z_SP*WeXsf))&&1e?XE!`_Z zpfQ1Zs43rsnvtWH;R))PMQG+`CJTNgUJaGMN^|$A*$lNe2BA7M8Fl<-p*phE++|*H z*FE100-B<)s1YS>;WkNf)Nam*s<0^PT$e#T<%Xa}+y=D--B9H{)M*)E>0?p1-r437 z)Q8(TjHdH{mVgS}vJCf875RCrr2YRDETn3{y%Y4+i-Hz(WapYOjcLqc7JgQvk zw(gi^Lv6Mis2OOE>F{UNKo_*-{HwqU61w6>EQD#>xu1fYpstTb-MOY>FfKrKbT8`G z`VVTvw^1E?jM_6VPz}FB4KPM~*P$e+8OhwEaP6O~OJ9#`~zAM(FH%7zZ`w z!Kj(ZjargU<~Y<6tVE4?4R*tgsB-DLxJ_38ixRJaTJm2|*S&=Vw3#-V2eAY33#geW z)zuYfkLuV!)Krf_Ey-ka9tIO%g_?n5sC?H@OLY&`@C#JKf!+M4$@9e{(1L_gsDg`8 zBiV?09N&(icp39zrtU7i38p7L0IT65493@}JrK8tyJ00lb-W0w!xc~+sO^{Y*Txe1 zT86QxHJWMZD^We)f$HEX)cxTW=Es+)W0=0DyK@#nS)AXuEHd!j-*0$G(Tz+mPajd4b;e6SiBc{ z8A%vHASJFv_4ov;#}`l|y@@(5FEA5+weSC~ zK`qg?-kg7ZIP4}tJ-mp6@DXZHwEcqfW%Rq=jQ!^bTB4630! zsE&NF>*4#k8IFqj={iwA&cD_o9|_uQMKL=z#H=_5wKRXB8rp-Jp(EyL)LLIgEzNUO zzE7y74E))3EGBB^;-hA?1pbcIJOb*#E7X*HK&{zVEQt~OyWb5}M0My_%!h|j_x$ge z3iA(eALI2g9r3?V1G!+J&MzRL5+NzYya=Y~Pg8P?fTrXcX2E+{0b`AIYg`{ypfhR>2cbqV3e|z>xC57=I?!sI`&b^1I+k-# z^)Eoxvm7(v)^W^#cLKLb&{WkL?=m(+eXh4dZI(f(Czctg-Mj`>;lHSSpHPonF(R7YhrJYfOhd=)On3D*)@>WEQlI;S=7{pp*q?L z^<>i>)xcQ0KE>jTP&2y9(zjq5;zun09Ca+c?*w$5Voz}+N{4DFD{3u^q1L!DYR$W% z@()Cv|H}didOYgDUU|OJTSf z?mU-AZN5R65yzs|a06<@f1^5d1(okMYQ)bi{uQ+Zk!HH3jg6jqoQr^ZR0spHGM>Y# zs3}Z6%UKw;No%4uVK-Dqd!zQkVAQ6Yj+&{3mcHKNhfwuhMBTt%&f@%Q%A?J8Jx+qE zAU*0vlm|7HO;Kz9Gis*hVFp}`%6|;?DR>!mKlp+gQ0zIbW2sRySpe1XeyDZ_>C;Jp z@g%6?IjDjQP*b@M)xZ|>prxNdjr_8u-$OP0FKUe={_5&YjLMe*bv-v~$tt2|BFrP8 zdv{ONW|?RgR-mSEFKTU1qn`ion<;;D=?%=zsF4jpt^G*UT2DcB=vP#OYfvB02T}EV zFA1mvKTw-0>0GxqWl`zPQA;ooHRZEV9o>U!;0kIF-8G-0I{XHMFycJ7*`lHv%z~QH zBFM~pzKR5NtE_7onxPu*hRQe|)!=N*h8s{frrW4Z7ck%b$~FO3Cq5aA;vLk;Q!a2% zQn^qa?t!YWKl*?EpH4t)ztCK68P=jkei*gu@1i;u@VgsHa@3S&Lp4+mwU_FlmZCMP zTnEgKqfrCejOxGvjH>g0gMg;&397(%)EXsQ=r&7vRDlMlW78A$Auif8*-!-wm}O9#EfjT3 z>!BKMhXb*dnb=)?gX6h(v#P3n3B;s24i;2{jk9bx54Tqs-F!&EQ&85xx<{-Wbwac$!c8t8vji?~@BHkL+u`8%e_!R%fzL zu6G?cgyr=8-w6WB7;l5yG-*)BBoFFb7e!5RHPpz$Ff&d@&DajqJ^d6a|6TNd>4X|- zjE!!u#K%g+lVA^Qh5o<)xkx|_+(8|?m#9ti7Ij03yUBGZm6;hel03*=+gAv06Tk46 zTe2;i-3(pAvZP1Y;(oBHf||L7s6BTI{m=iG2&kb)=wDORNFr`^n=&z0C0+n^eFWYwco;Q9W4F6aITv+bdAXhQuQg4)!)>BUsES*mp7nl09j^%% zUxu2QT^NklF+F}qZNhXrUA!dfR^1je;4oCZt5BPGCu#=H?Bx7wqVE>Z zy32i-lt!I@569w3RQ`s$UBlf_9Uh13;6f~cdr^BPV2@kc0;tc7qSy&*dj!;hy%-Zu zq8>VLVlW2obyJlFbvmk|HfsY^xptQR6KaG*QJ)dhP#s){%6ACW!Skri{S0-Z^WG8A zRQUF}HHw6#i6%we7n)!JoPu@nDAvJL``uSHeNgB8Jubkh2i!Lsc@MfrvJ0pi+ehq- z3H}c7|7U)~v6?>r6C83=+Zrd3VH1wVGKT~FGjI&c5r2-lGv+zsD(H@-hzA{YpZn!d zn`#Cʢ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.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 OO; Date: Fri, 14 Apr 2023 19:24:26 +0800 Subject: [PATCH 330/339] ci: update build version to 01.06.00.63 Change-Id: Ic7f9b55de7683565e44fcc7e5969d09b0947e14b --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index 3a8b752fac..f0461f3dae 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.06.00.62") +set(SLIC3R_VERSION "01.06.00.63") From 1a7b12fa383621121ed4c6b4e320be8bb7874ffd Mon Sep 17 00:00:00 2001 From: Arthur Date: Fri, 14 Apr 2023 15:37:43 +0800 Subject: [PATCH 331/339] FIX: auto-arranging result may fail clearance check We add 0.001mm tolerance. Change-Id: I630cc680db0a3a65a6a44e177de686fbac1e1f15 (cherry picked from commit 170f9c2a89d03060f9a9aa43952c0759ffbe7c1f) --- src/libslic3r/TreeSupport.cpp | 4 ++-- src/slic3r/GUI/Jobs/ArrangeJob.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/TreeSupport.cpp b/src/libslic3r/TreeSupport.cpp index 335af79f60..c96171ac62 100644 --- a/src/libslic3r/TreeSupport.cpp +++ b/src/libslic3r/TreeSupport.cpp @@ -27,7 +27,7 @@ // #define SUPPORT_TREE_DEBUG_TO_SVG -#if SUPPORT_TREE_DEBUG_TO_SVG +#ifdef SUPPORT_TREE_DEBUG_TO_SVG #include "nlohmann/json.hpp" #endif namespace Slic3r @@ -3036,7 +3036,7 @@ void TreeSupport::smooth_nodes(std::vector> &contact_nodes) } } } -#if SUPPORT_TREE_DEBUG_TO_SVG +#ifdef SUPPORT_TREE_DEBUG_TO_SVG // save tree structure for viewing in python struct TreeNode { Vec3f pos; diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index da55f3eae1..9e3edaa248 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -511,7 +511,7 @@ void ArrangeJob::process() auto& print = wxGetApp().plater()->get_partplate_list().get_current_fff_print(); if (params.is_seq_print) - params.min_obj_distance = std::max(params.min_obj_distance, scaled(params.cleareance_radius)); + params.min_obj_distance = std::max(params.min_obj_distance, scaled(params.cleareance_radius + 0.001)); // +0.001mm to avoid clearance check fail due to rounding error if (params.avoid_extrusion_cali_region && print.full_print_config().opt_bool("scan_first_layer")) partplate_list.preprocess_nonprefered_areas(m_unselected, MAX_NUM_PLATES); From 98f3aaa4bf4728647b49d66853ee71561f03589c Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Fri, 14 Apr 2023 15:21:11 +0800 Subject: [PATCH 332/339] ENH: CLI: add the gcode path check logic for cli Change-Id: I424a93d9ca945598da861a1905da07ae14663157 --- src/BambuStudio.cpp | 5 +++++ src/libslic3r/Print.cpp | 1 + src/libslic3r/Print.hpp | 9 +++++++++ src/libslic3r/Utils.hpp | 3 ++- 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/BambuStudio.cpp b/src/BambuStudio.cpp index a56d650aa3..a5c10d5148 100644 --- a/src/BambuStudio.cpp +++ b/src/BambuStudio.cpp @@ -2065,6 +2065,11 @@ int CLI::run(int argc, char **argv) print->process(); } if (printer_technology == ptFFF) { + std::string conflict_result = dynamic_cast(print)->get_conflict_string(); + if (!conflict_result.empty()) { + BOOST_LOG_TRIVIAL(error) << "plate "<< index+1<< ": found slicing result conflict!"<< std::endl; + flush_and_exit(CLI_GCODE_PATH_CONFLICTS); + } // The outfile is processed by a PlaceholderParser. //outfile = part_plate->get_tmp_gcode_path(); if (outfile_dir.empty()) { diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index dc1f4d4fe0..c065889775 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1691,6 +1691,7 @@ void Print::process(bool use_cache) if (conflictRes.has_value()) { m_conflict_result.set(conflictRes.value().first, conflictRes.value().second); + BOOST_LOG_TRIVIAL(error) << boost::format("gcode path conflicts found between %1% and %2%")%conflictRes.value().first %conflictRes.value().second; } else { m_conflict_result.reset(); } diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index 0e5e9c368b..ae19bce850 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -772,6 +772,15 @@ public: bool is_support_used() const {return m_support_used;} bool is_BBL_Printer() const { return m_isBBLPrinter;} void set_BBL_Printer(const bool isBBL) { m_isBBLPrinter = isBBL;} + std::string get_conflict_string() const + { + std::string result; + if (m_conflict_result.conflicted) { + result = "Found gcode path conflicts between object " + m_conflict_result.obj1 + " and " + m_conflict_result.obj2; + } + + return result; + } //BBS static StringObjectException sequential_print_clearance_valid(const Print &print, Polygons *polygons = nullptr, std::vector>* height_polygons = nullptr); diff --git a/src/libslic3r/Utils.hpp b/src/libslic3r/Utils.hpp index 98b8e33fc1..120db2ff9d 100644 --- a/src/libslic3r/Utils.hpp +++ b/src/libslic3r/Utils.hpp @@ -50,7 +50,8 @@ #define CLI_TRIANGLE_COUNT_EXCEEDS_LIMIT -59 #define CLI_NO_SUITABLE_OBJECTS_AFTER_SKIP -60 -#define CLI_SLICING_ERROR -100 +#define CLI_SLICING_ERROR -100 +#define CLI_GCODE_PATH_CONFLICTS -101 namespace boost { namespace filesystem { class directory_entry; }} From 87eb0f366560b895cb7219a2eb6820027aaf69d3 Mon Sep 17 00:00:00 2001 From: manch1n Date: Fri, 14 Apr 2023 20:23:46 +0800 Subject: [PATCH 333/339] ENH: show the layer and height of conflict position Change-Id: If80e81b5556f5afc3228a00edc2593bd8cfe63e4 (cherry picked from commit 895e0f2ecf8e259cfdb7c27081b767bfbaa3ffb6) --- src/libslic3r/GCode/ConflictChecker.cpp | 39 ++++++++++++++---------- src/libslic3r/GCode/ConflictChecker.hpp | 26 ++++++++-------- src/libslic3r/GCode/GCodeProcessor.hpp | 40 +++++++++++-------------- src/libslic3r/Print.cpp | 12 ++------ src/libslic3r/Print.hpp | 29 ++++-------------- src/slic3r/GUI/GCodeViewer.cpp | 1 + src/slic3r/GUI/GCodeViewer.hpp | 7 ++++- src/slic3r/GUI/GLCanvas3D.cpp | 33 +++++++++++++++++--- src/slic3r/GUI/PartPlate.hpp | 2 +- 9 files changed, 99 insertions(+), 90 deletions(-) diff --git a/src/libslic3r/GCode/ConflictChecker.cpp b/src/libslic3r/GCode/ConflictChecker.cpp index a6a25fe6b3..dd3d00d752 100644 --- a/src/libslic3r/GCode/ConflictChecker.cpp +++ b/src/libslic3r/GCode/ConflictChecker.cpp @@ -92,8 +92,11 @@ inline Grids line_rasterization(const Line &line, int64_t xdist = RasteXDistance void LinesBucketQueue::emplace_back_bucket(std::vector &&paths, const void *objPtr, Point offset) { auto oldSize = _buckets.capacity(); - _buckets.emplace_back(std::move(paths), _objsPtrToId.size(), offset); - _objsPtrToId.push_back(objPtr); + if (_objsPtrToId.find(objPtr) == _objsPtrToId.end()) { + _objsPtrToId.insert({objPtr, _objsPtrToId.size()}); + _idToObjsPtr.insert({_objsPtrToId.size() - 1, objPtr}); + } + _buckets.emplace_back(std::move(paths), _objsPtrToId[objPtr], offset); _pq.push(&_buckets.back()); auto newSize = _buckets.capacity(); if (oldSize != newSize) { // pointers change @@ -103,11 +106,11 @@ void LinesBucketQueue::emplace_back_bucket(std::vector &&paths, } } -void LinesBucketQueue::removeLowests() +double LinesBucketQueue::removeLowests() { auto lowest = _pq.top(); _pq.pop(); - + double curHeight = lowest->curHeight(); std::vector lowests; lowests.push_back(lowest); @@ -120,6 +123,7 @@ void LinesBucketQueue::removeLowests() bp->raise(); if (bp->valid()) { _pq.push(bp); } } + return curHeight; } LineWithIDs LinesBucketQueue::getCurLines() const @@ -180,7 +184,7 @@ std::pair, std::vector> getAllLayers return {std::move(objPaths), std::move(supportPaths)}; } -ConflictRet ConflictChecker::find_inter_of_lines(const LineWithIDs &lines) +ConflictComputeOpt ConflictChecker::find_inter_of_lines(const LineWithIDs &lines) { using namespace RasterizationImpl; std::map> indexToLine; @@ -200,7 +204,7 @@ ConflictRet ConflictChecker::find_inter_of_lines(const LineWithIDs &lines) return {}; } -ConflictObjName ConflictChecker::find_inter_of_lines_in_diff_objs(PrintObjectPtrs objs, +ConflictResultOpt ConflictChecker::find_inter_of_lines_in_diff_objs(PrintObjectPtrs objs, std::optional wtdptr) // find the first intersection point of lines in different objects { if (objs.size() <= 1) { return {}; } @@ -216,45 +220,48 @@ ConflictObjName ConflictChecker::find_inter_of_lines_in_diff_objs(PrintObjectPtr } std::vector layersLines; + std::vector heights; while (conflictQueue.valid()) { - LineWithIDs lines = conflictQueue.getCurLines(); - conflictQueue.removeLowests(); + LineWithIDs lines = conflictQueue.getCurLines(); + double curHeight = conflictQueue.removeLowests(); + heights.push_back(curHeight); layersLines.push_back(std::move(lines)); } bool find = false; - tbb::concurrent_vector conflict; + tbb::concurrent_vector> conflict; tbb::parallel_for(tbb::blocked_range(0, layersLines.size()), [&](tbb::blocked_range range) { for (size_t i = range.begin(); i < range.end(); i++) { auto interRes = find_inter_of_lines(layersLines[i]); if (interRes.has_value()) { find = true; - conflict.emplace_back(interRes.value()); + conflict.emplace_back(interRes.value(),heights[i]); break; } } }); if (find) { - const void *ptr1 = conflictQueue.idToObjsPtr(conflict[0]._obj1); - const void *ptr2 = conflictQueue.idToObjsPtr(conflict[0]._obj2); + const void *ptr1 = conflictQueue.idToObjsPtr(conflict[0].first._obj1); + const void *ptr2 = conflictQueue.idToObjsPtr(conflict[0].first._obj2); + double conflictHeight = conflict[0].second; if (wtdptr.has_value()) { const FakeWipeTower *wtdp = wtdptr.value(); if (ptr1 == wtdp || ptr2 == wtdp) { if (ptr2 == wtdp) { std::swap(ptr1, ptr2); } const PrintObject *obj2 = reinterpret_cast(ptr2); - return {std::make_pair("WipeTower", obj2->model_object()->name)}; + return std::make_optional("WipeTower", obj2->model_object()->name, conflictHeight, nullptr, ptr2); } } const PrintObject *obj1 = reinterpret_cast(ptr1); const PrintObject *obj2 = reinterpret_cast(ptr2); - return {std::make_pair(obj1->model_object()->name, obj2->model_object()->name)}; + return std::make_optional(obj1->model_object()->name, obj2->model_object()->name, conflictHeight, ptr1, ptr2); } else return {}; } -ConflictRet ConflictChecker::line_intersect(const LineWithID &l1, const LineWithID &l2) +ConflictComputeOpt ConflictChecker::line_intersect(const LineWithID &l1, const LineWithID &l2) { if (l1._id == l2._id) { return {}; } // return true if lines are from same object Point inter; @@ -263,7 +270,7 @@ ConflictRet ConflictChecker::line_intersect(const LineWithID &l1, const LineWith auto dist1 = std::min(unscale(Point(l1._line.a - inter)).norm(), unscale(Point(l1._line.b - inter)).norm()); auto dist2 = std::min(unscale(Point(l2._line.a - inter)).norm(), unscale(Point(l2._line.b - inter)).norm()); auto dist = std::min(dist1, dist2); - if (dist > 0.01) { return std::make_optional(l1._id, l2._id); } // the two lines intersects if dist>0.01mm + if (dist > 0.01) { return std::make_optional(l1._id, l2._id); } // the two lines intersects if dist>0.01mm } return {}; } diff --git a/src/libslic3r/GCode/ConflictChecker.hpp b/src/libslic3r/GCode/ConflictChecker.hpp index c0cd4d214d..a9a6e85f29 100644 --- a/src/libslic3r/GCode/ConflictChecker.hpp +++ b/src/libslic3r/GCode/ConflictChecker.hpp @@ -75,19 +75,20 @@ class LinesBucketQueue private: std::vector _buckets; std::priority_queue, LinesBucketPtrComp> _pq; - std::vector _objsPtrToId; + std::map _idToObjsPtr; + std::map _objsPtrToId; public: void emplace_back_bucket(std::vector &&paths, const void *objPtr, Point offset); bool valid() const { return _pq.empty() == false; } const void *idToObjsPtr(int id) { - if (id >= 0 && id < _objsPtrToId.size()) { - return _objsPtrToId[id]; - } else + if (_idToObjsPtr.find(id) != _idToObjsPtr.end()) + return _idToObjsPtr[id]; + else return nullptr; } - void removeLowests(); + double removeLowests(); LineWithIDs getCurLines() const; }; @@ -99,23 +100,24 @@ ExtrusionPaths getExtrusionPathsFromSupportLayer(SupportLayer *supportLayer); std::pair, std::vector> getAllLayersExtrusionPathsFromObject(PrintObject *obj); -struct ConflictResult +struct ConflictComputeResult { int _obj1; int _obj2; - ConflictResult(int obj1, int obj2) : _obj1(obj1), _obj2(obj2) {} - ConflictResult() = default; + + ConflictComputeResult(int o1, int o2) : _obj1(o1), _obj2(o2) {} + ConflictComputeResult() = default; }; -using ConflictRet = std::optional; +using ConflictComputeOpt = std::optional; using ConflictObjName = std::optional>; struct ConflictChecker { - static ConflictObjName find_inter_of_lines_in_diff_objs(PrintObjectPtrs objs, std::optional wtdptr); - static ConflictRet find_inter_of_lines(const LineWithIDs &lines); - static ConflictRet line_intersect(const LineWithID &l1, const LineWithID &l2); + static ConflictResultOpt find_inter_of_lines_in_diff_objs(PrintObjectPtrs objs, std::optional wtdptr); + static ConflictComputeOpt find_inter_of_lines(const LineWithIDs &lines); + static ConflictComputeOpt line_intersect(const LineWithID &l1, const LineWithID &l2); }; } // namespace Slic3r diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index 0801e2f66f..de1a946577 100644 --- a/src/libslic3r/GCode/GCodeProcessor.hpp +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -93,31 +93,25 @@ namespace Slic3r { } }; + struct ConflictResult + { + std::string _objName1; + std::string _objName2; + double _height; + const void *_obj1; // nullptr means wipe tower + const void *_obj2; + int layer = -1; + ConflictResult(const std::string &objName1, const std::string &objName2, double height, const void *obj1, const void *obj2) + : _objName1(objName1), _objName2(objName2), _height(height), _obj1(obj1), _obj2(obj2) + {} + ConflictResult() = default; + }; + + using ConflictResultOpt = std::optional; + struct GCodeProcessorResult { - //BBS - struct ConflictResult - { - bool conflicted; - std::string obj1Name; - std::string obj2Name; - - void set(const std::string &o1, const std::string &o2) - { - conflicted = true; - obj1Name = o1; - obj2Name = o2; - } - - void reset() { - conflicted = false; - obj1Name.clear(); - obj2Name.clear(); - } - - ConflictResult() = default; - ConflictResult(const ConflictResult &) = default; - }conflict_result; + ConflictResultOpt conflict_result; struct SettingsIds { diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index c065889775..12ab102120 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1689,11 +1689,9 @@ void Print::process(bool use_cache) volatile double seconds = std::chrono::duration_cast(endTime - startTime).count() / (double) 1000; BOOST_LOG_TRIVIAL(info) << "gcode path conflicts check takes " << seconds << " secs."; + m_conflict_result = conflictRes; if (conflictRes.has_value()) { - m_conflict_result.set(conflictRes.value().first, conflictRes.value().second); - BOOST_LOG_TRIVIAL(error) << boost::format("gcode path conflicts found between %1% and %2%")%conflictRes.value().first %conflictRes.value().second; - } else { - m_conflict_result.reset(); + BOOST_LOG_TRIVIAL(error) << boost::format("gcode path conflicts found between %1% and %2%")%conflictRes.value()._objName1 %conflictRes.value()._objName2; } } @@ -1726,11 +1724,7 @@ std::string Print::export_gcode(const std::string& path_template, GCodeProcessor gcode.set_gcode_offset(origin(0), origin(1)); gcode.do_export(this, path.c_str(), result, thumbnail_cb); //BBS - if (m_conflict_result.conflicted) { - result->conflict_result.set(m_conflict_result.obj1, m_conflict_result.obj2); - } else { - result->conflict_result.reset(); - } + result->conflict_result = m_conflict_result; return path.c_str(); } diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index ae19bce850..dc60566f2a 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -775,14 +775,15 @@ public: std::string get_conflict_string() const { std::string result; - if (m_conflict_result.conflicted) { - result = "Found gcode path conflicts between object " + m_conflict_result.obj1 + " and " + m_conflict_result.obj2; + if (m_conflict_result) { + result = "Found gcode path conflicts between object " + m_conflict_result.value()._objName1 + " and " + m_conflict_result.value()._objName2; } return result; } //BBS static StringObjectException sequential_print_clearance_valid(const Print &print, Polygons *polygons = nullptr, std::vector>* height_polygons = nullptr); + ConflictResultOpt get_conflict_result() const { return m_conflict_result; } // Return 4 wipe tower corners in the world coordinates (shifted and rotated), including the wipe tower brim. std::vector first_layer_wipe_tower_corners(bool check_wipe_tower_existance=true) const; @@ -837,28 +838,8 @@ private: //BBS: modified_count int m_modified_count {0}; //BBS - struct ConflictResult - { - bool conflicted; - std::string obj1; - std::string obj2; - //TODO - //the actual loaction - - void set(const std::string& o1, const std::string& o2) - { - conflicted = true; - obj1 = o1; - obj2 = o2; - } - void reset() - { - conflicted = false; - obj1.clear(); - obj2.clear(); - } - }m_conflict_result; - FakeWipeTower m_fake_wipe_tower; + ConflictResultOpt m_conflict_result; + FakeWipeTower m_fake_wipe_tower; // To allow GCode to set the Print's GCodeExport step status. friend class GCode; diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index d2854940c4..c0a9ff9c9f 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -1095,6 +1095,7 @@ void GCodeViewer::load(const GCodeProcessorResult& gcode_result, const Print& pr //BBS m_conflict_result = gcode_result.conflict_result; + if (m_conflict_result) { m_conflict_result.value().layer = m_layers.get_l_at(m_conflict_result.value()._height); } //BBS: add mutex for protection of gcode result gcode_result.unlock(); diff --git a/src/slic3r/GUI/GCodeViewer.hpp b/src/slic3r/GUI/GCodeViewer.hpp index 7bb19d6fed..fc3651b5be 100644 --- a/src/slic3r/GUI/GCodeViewer.hpp +++ b/src/slic3r/GUI/GCodeViewer.hpp @@ -490,6 +490,11 @@ class GCodeViewer std::vector& get_endpoints() { return m_endpoints; } double get_z_at(unsigned int id) const { return (id < m_zs.size()) ? m_zs[id] : 0.0; } Endpoints get_endpoints_at(unsigned int id) const { return (id < m_endpoints.size()) ? m_endpoints[id] : Endpoints(); } + int get_l_at(double z) const + { + auto iter = std::upper_bound(m_zs.begin(), m_zs.end(), z); + return std::distance(m_zs.begin(), iter); + } bool operator != (const Layers& other) const { if (m_zs != other.m_zs) @@ -728,7 +733,7 @@ public: }; //BBS - GCodeProcessorResult::ConflictResult m_conflict_result; + ConflictResultOpt m_conflict_result; private: std::vector m_plater_extruder; diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 13cd6fc9e8..4598d26ed7 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -8846,7 +8846,7 @@ void GLCanvas3D::_set_warning_notification_if_needed(EWarning warning) if (warning == EWarning::ToolpathOutside) show = m_gcode_viewer.has_data() && !m_gcode_viewer.is_contained_in_bed(); else if (warning==EWarning::GCodeConflict) - show = m_gcode_viewer.has_data() && m_gcode_viewer.is_contained_in_bed() && m_gcode_viewer.m_conflict_result.conflicted; + show = m_gcode_viewer.has_data() && m_gcode_viewer.is_contained_in_bed() && m_gcode_viewer.m_conflict_result.has_value(); } } @@ -8886,9 +8886,14 @@ void GLCanvas3D::_set_warning_notification(EWarning warning, bool state) ErrorType error = ErrorType::PLATER_WARNING; switch (warning) { case EWarning::GCodeConflict: { - std::string objName1 = m_gcode_viewer.m_conflict_result.obj1Name; - std::string objName2 = m_gcode_viewer.m_conflict_result.obj2Name; - text = (boost::format(_u8L("Conflicts of gcode paths have been found. Please separate the conflicted objects farther (%s <-> %s).")) % objName1 % objName2).str(); + if (!m_gcode_viewer.m_conflict_result) { break; } + std::string objName1 = m_gcode_viewer.m_conflict_result.value()._objName1; + std::string objName2 = m_gcode_viewer.m_conflict_result.value()._objName2; + double height = m_gcode_viewer.m_conflict_result.value()._height; + int layer = m_gcode_viewer.m_conflict_result.value().layer; + text = (boost::format(_u8L("Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please separate the conflicted objects farther (%s <-> %s).")) % layer % + height % objName1 % objName2) + .str(); error = ErrorType::SLICING_ERROR; break; } @@ -8907,6 +8912,26 @@ void GLCanvas3D::_set_warning_notification(EWarning warning, bool state) if (!wxGetApp().plater()) return; auto& notification_manager = *wxGetApp().plater()->get_notification_manager(); + + if (warning == EWarning::GCodeConflict && m_gcode_viewer.m_conflict_result) { + const PrintObject *obj2 = reinterpret_cast(m_gcode_viewer.m_conflict_result.value()._obj2); + auto mo = obj2->model_object(); + ObjectID id = mo->id(); + auto action_fn = [id](wxEvtHandler *) { + auto &objects = wxGetApp().model().objects; + auto iter = id.id ? std::find_if(objects.begin(), objects.end(), [id](auto o) { return o->id() == id; }) : objects.end(); + if (iter != objects.end()) { + wxGetApp().mainframe->select_tab(MainFrame::tp3DEditor); + wxGetApp().obj_list()->select_items({{*iter, nullptr}}); + } + return false; + }; + auto hypertext = _u8L("Jump to"); + hypertext += std::string(" [") + mo->name + "]"; + notification_manager.push_notification(NotificationType::PlaterError, NotificationManager::NotificationLevel::ErrorNotificationLevel, _u8L("ERROR:") + "\n" + text, + hypertext, action_fn); + return; + } switch (error) { case PLATER_WARNING: diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index cfb19d00aa..47c9cfd9f1 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -381,7 +381,7 @@ public: { bool result = m_slice_result_valid; if (result) - result = m_gcode_result ? (!m_gcode_result->toolpath_outside && !m_gcode_result->conflict_result.conflicted) : false; + result = m_gcode_result ? (!m_gcode_result->toolpath_outside && !m_gcode_result->conflict_result.has_value()) : false; return result; } From 0f61902c8e2fe7935e9db653758f39515f55dd33 Mon Sep 17 00:00:00 2001 From: Arthur Date: Sun, 16 Apr 2023 12:41:10 +0800 Subject: [PATCH 334/339] ENH: add cn translation for conflict check Change-Id: Id2c034567dbbf8878a601af1af16f1c8d24d1033 --- bbl/i18n/BambuStudio.pot | 19 ++++++------ bbl/i18n/de/BambuStudio_de.po | 23 ++++++++------- bbl/i18n/en/BambuStudio_en.po | 23 ++++++++------- bbl/i18n/es/BambuStudio_es.po | 19 ++++++------ bbl/i18n/fr/BambuStudio_fr.po | 37 +++++++++++++----------- bbl/i18n/hu/BambuStudio_hu.po | 19 ++++++------ bbl/i18n/it/BambuStudio_it.po | 27 +++++++++-------- bbl/i18n/ja/BambuStudio_ja.po | 19 ++++++------ bbl/i18n/nl/BambuStudio_nl.po | 19 ++++++------ bbl/i18n/sv/BambuStudio_sv.po | 25 +++++++++------- bbl/i18n/zh_cn/BambuStudio_zh_CN.po | 43 +++++++++++++++++----------- resources/i18n/zh_cn/BambuStudio.mo | Bin 213054 -> 213684 bytes 12 files changed, 156 insertions(+), 117 deletions(-) diff --git a/bbl/i18n/BambuStudio.pot b/bbl/i18n/BambuStudio.pot index 264fb9fd69..271c8bf766 100644 --- a/bbl/i18n/BambuStudio.pot +++ b/bbl/i18n/BambuStudio.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 17:28+0800\n" +"POT-Creation-Date: 2023-04-16 12:36+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -2772,8 +2772,8 @@ msgstr "" #, possible-c-format, possible-boost-format msgid "" -"Conflicts of gcode paths have been found. Please separate the conflicted " -"objects farther (%s <-> %s)." +"Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " +"separate the conflicted objects farther (%s <-> %s)." msgstr "" msgid "An object is layed over the boundary of plate." @@ -2791,6 +2791,12 @@ msgid "" "confirming that the height is within the build volume." msgstr "" +msgid "Jump to" +msgstr "" + +msgid "ERROR:" +msgstr "" + msgid "Calibration" msgstr "" @@ -3696,9 +3702,6 @@ msgstr "" msgid "Slice ok." msgstr "" -msgid "Jump to" -msgstr "" - msgid "Error:" msgstr "" @@ -4901,8 +4904,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add Primitive" -"\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add " +"Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" msgid "Line width" diff --git a/bbl/i18n/de/BambuStudio_de.po b/bbl/i18n/de/BambuStudio_de.po index b8cdc2a7b2..03a5be417a 100644 --- a/bbl/i18n/de/BambuStudio_de.po +++ b/bbl/i18n/de/BambuStudio_de.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 17:28+0800\n" +"POT-Creation-Date: 2023-04-16 12:36+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -2990,8 +2990,8 @@ msgstr "Größe:" #, c-format, boost-format msgid "" -"Conflicts of gcode paths have been found. Please separate the conflicted " -"objects farther (%s <-> %s)." +"Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " +"separate the conflicted objects farther (%s <-> %s)." msgstr "" msgid "An object is layed over the boundary of plate." @@ -3014,6 +3014,12 @@ msgstr "" "oder von der Druckplatte wegbewegen und stellen Sie sicher, dass die Höhe " "innerhalb des Bauvolumens liegt." +msgid "Jump to" +msgstr "Wechsle zu" + +msgid "ERROR:" +msgstr "" + msgid "Calibration" msgstr "Kalibration" @@ -3949,9 +3955,6 @@ msgstr "Upload abbrechen" msgid "Slice ok." msgstr "Slice abgeschlossen" -msgid "Jump to" -msgstr "Wechsle zu" - msgid "Error:" msgstr "Fehler:" @@ -5288,13 +5291,13 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add Primitive" -"\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add " +"Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" "Wenn Sie einen Zeitraffer ohne Werkzeugkopf aufnehmen, wird empfohlen, einen " "\"Timelapse Wischturm\" hinzuzufügen, indem Sie mit der rechten Maustaste " -"auf die leere Position der Bauplatte klicken und \"Primitiv hinzufügen\"->" -"\"Timelapse Wischturm\" wählen." +"auf die leere Position der Bauplatte klicken und \"Primitiv hinzufügen\"-" +">\"Timelapse Wischturm\" wählen." msgid "Line width" msgstr "Breite der Linie" diff --git a/bbl/i18n/en/BambuStudio_en.po b/bbl/i18n/en/BambuStudio_en.po index 8b0044db92..a1cedf3284 100644 --- a/bbl/i18n/en/BambuStudio_en.po +++ b/bbl/i18n/en/BambuStudio_en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 17:28+0800\n" +"POT-Creation-Date: 2023-04-16 12:36+0800\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2924,8 +2924,8 @@ msgstr "Size:" #, c-format, boost-format msgid "" -"Conflicts of gcode paths have been found. Please separate the conflicted " -"objects farther (%s <-> %s)." +"Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " +"separate the conflicted objects farther (%s <-> %s)." msgstr "" msgid "An object is layed over the boundary of plate." @@ -2947,6 +2947,12 @@ msgstr "" "Please solve the problem by moving it totally on or off the plate, and " "confirming that the height is within the build volume." +msgid "Jump to" +msgstr "Jump to" + +msgid "ERROR:" +msgstr "" + msgid "Calibration" msgstr "Calibration" @@ -3874,9 +3880,6 @@ msgstr "Cancel upload" msgid "Slice ok." msgstr "Slice complete" -msgid "Jump to" -msgstr "Jump to" - msgid "Error:" msgstr "Error:" @@ -5165,13 +5168,13 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add Primitive" -"\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add " +"Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" "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\"." msgid "Line width" msgstr "Line width" diff --git a/bbl/i18n/es/BambuStudio_es.po b/bbl/i18n/es/BambuStudio_es.po index 100d6a62df..a387cf2d66 100644 --- a/bbl/i18n/es/BambuStudio_es.po +++ b/bbl/i18n/es/BambuStudio_es.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 17:28+0800\n" +"POT-Creation-Date: 2023-04-16 12:36+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -2982,8 +2982,8 @@ msgstr "Tamaño:" #, c-format, boost-format msgid "" -"Conflicts of gcode paths have been found. Please separate the conflicted " -"objects farther (%s <-> %s)." +"Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " +"separate the conflicted objects farther (%s <-> %s)." msgstr "" msgid "An object is layed over the boundary of plate." @@ -3005,6 +3005,12 @@ msgstr "" "Resuelva el problema colocándolo totalmente dentro de la placa y confirmando " "que la altura esté dentro del limite de altura." +msgid "Jump to" +msgstr "Ir a" + +msgid "ERROR:" +msgstr "" + msgid "Calibration" msgstr "Calibración" @@ -3936,9 +3942,6 @@ msgstr "Cancelar envío" msgid "Slice ok." msgstr "Rebanado correcto." -msgid "Jump to" -msgstr "Ir a" - msgid "Error:" msgstr "Error:" @@ -5265,8 +5268,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add Primitive" -"\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add " +"Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" "Al grabar timelapse sin el cabezal de la herramienta, se recomienda añadir " "una «Torre de purga para el timelapse» \n" diff --git a/bbl/i18n/fr/BambuStudio_fr.po b/bbl/i18n/fr/BambuStudio_fr.po index 4e4664e260..9b380eaca2 100644 --- a/bbl/i18n/fr/BambuStudio_fr.po +++ b/bbl/i18n/fr/BambuStudio_fr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 17:28+0800\n" +"POT-Creation-Date: 2023-04-16 12:36+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1529,8 +1529,8 @@ msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " "load or unload filiament." msgstr "" -"Choisissez un slot AMS puis appuyez sur le bouton \"charger\" ou\"Décharger" -"\" pour charger ou décharger automatiquement le filament." +"Choisissez un slot AMS puis appuyez sur le bouton \"charger\" " +"ou\"Décharger\" pour charger ou décharger automatiquement le filament." msgid "Edit" msgstr "Éditer" @@ -2969,8 +2969,8 @@ msgstr "Taille:" #, c-format, boost-format msgid "" -"Conflicts of gcode paths have been found. Please separate the conflicted " -"objects farther (%s <-> %s)." +"Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " +"separate the conflicted objects farther (%s <-> %s)." msgstr "" msgid "An object is layed over the boundary of plate." @@ -2992,6 +2992,12 @@ msgstr "" "Veuillez résoudre le problème en le déplaçant totalement sur ou hors du " "plateau, et en confirmant que la hauteur entre dans le volume d'impression." +msgid "Jump to" +msgstr "Sauter à" + +msgid "ERROR:" +msgstr "" + msgid "Calibration" msgstr "Calibration" @@ -3927,9 +3933,6 @@ msgstr "Annuler le téléversement" msgid "Slice ok." msgstr "Tranchage terminé" -msgid "Jump to" -msgstr "Sauter à" - msgid "Error:" msgstr "Erreur:" @@ -5269,8 +5272,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add Primitive" -"\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add " +"Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" "Lorsque vous enregistrez un timelapse sans tête d’outil, il est recommandé " "d’ajouter une \"Tour de nettoyage timelapse\".\n" @@ -5398,9 +5401,9 @@ msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " "does not support to print on the Cool Plate" msgstr "" -"Il s'agit de la température du plateau lorsque le plateau froid (\"Cool plate" -"\") est installé. Une valeur à 0 signifie que ce filament ne peut pas être " -"imprimé sur le plateau froid." +"Il s'agit de la température du plateau lorsque le plateau froid (\"Cool " +"plate\") est installé. Une valeur à 0 signifie que ce filament ne peut pas " +"être imprimé sur le plateau froid." msgid "Engineering plate" msgstr "Plaque d'ingénierie" @@ -6489,8 +6492,8 @@ msgstr "" msgid "The prime tower is not supported in \"By object\" print." msgstr "" -"La tour de nettoyage n'est pas prise en charge dans l'impression \"Par objet" -"\"." +"La tour de nettoyage n'est pas prise en charge dans l'impression \"Par " +"objet\"." msgid "" "The prime tower is not supported when adaptive layer height is on. It " @@ -7075,8 +7078,8 @@ msgid "" "thickness (top+bottom solid layers)" msgstr "" "Ajoutez du remplissage solide à proximité des surfaces inclinées pour " -"garantir l'épaisseur verticale de la coque (couches solides supérieure" -"+inférieure)." +"garantir l'épaisseur verticale de la coque (couches solides " +"supérieure+inférieure)." msgid "Internal bridge support thickness" msgstr "Épaisseur du support interne du pont" diff --git a/bbl/i18n/hu/BambuStudio_hu.po b/bbl/i18n/hu/BambuStudio_hu.po index 51994f8c98..b1731d7ab3 100644 --- a/bbl/i18n/hu/BambuStudio_hu.po +++ b/bbl/i18n/hu/BambuStudio_hu.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 17:28+0800\n" +"POT-Creation-Date: 2023-04-16 12:36+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -2960,8 +2960,8 @@ msgstr "Méret:" #, c-format, boost-format msgid "" -"Conflicts of gcode paths have been found. Please separate the conflicted " -"objects farther (%s <-> %s)." +"Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " +"separate the conflicted objects farther (%s <-> %s)." msgstr "" msgid "An object is layed over the boundary of plate." @@ -2983,6 +2983,12 @@ msgstr "" "Kérjük, orvosold a problémát azzal, hogy teljesen a lemezre helyezed és " "győződj meg, hogy a magassága belefér a nyomtatótérbe." +msgid "Jump to" +msgstr "Ugrás ide:" + +msgid "ERROR:" +msgstr "" + msgid "Calibration" msgstr "Kalibrálás" @@ -3912,9 +3918,6 @@ msgstr "Feltöltés megszakítása" msgid "Slice ok." msgstr "Szeletelés kész." -msgid "Jump to" -msgstr "Ugrás ide:" - msgid "Error:" msgstr "Hiba:" @@ -5222,8 +5225,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add Primitive" -"\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add " +"Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" "Ha a nyomtatófej nélküli timelapse engedélyezve van, javasoljuk, hogy " "helyezz el a tálcán egy „Timelapse törlőtornyot“. Ehhez kattints jobb " diff --git a/bbl/i18n/it/BambuStudio_it.po b/bbl/i18n/it/BambuStudio_it.po index f969019143..016d0effa9 100644 --- a/bbl/i18n/it/BambuStudio_it.po +++ b/bbl/i18n/it/BambuStudio_it.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 17:28+0800\n" +"POT-Creation-Date: 2023-04-16 12:36+0800\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2967,8 +2967,8 @@ msgstr "Dimensioni:" #, c-format, boost-format msgid "" -"Conflicts of gcode paths have been found. Please separate the conflicted " -"objects farther (%s <-> %s)." +"Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " +"separate the conflicted objects farther (%s <-> %s)." msgstr "" msgid "An object is layed over the boundary of plate." @@ -2990,6 +2990,12 @@ msgstr "" "Risolvi il problema spostando l'oggetto completamente dentro o fuori il " "piatto verificando che l'altezza rientri nel volume di costruzione." +msgid "Jump to" +msgstr "Vai a" + +msgid "ERROR:" +msgstr "" + msgid "Calibration" msgstr "Calibrazione" @@ -3920,9 +3926,6 @@ msgstr "Annulla caricamento" msgid "Slice ok." msgstr "Slice completo" -msgid "Jump to" -msgstr "Vai a" - msgid "Error:" msgstr "Errore:" @@ -5235,8 +5238,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add Primitive" -"\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add " +"Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" "Quando si registra un timelapse senza testa di satmpa, si consiglia di " "aggiungere un \"Timelapse Torre di pulizia\"\n" @@ -6119,8 +6122,8 @@ msgid "" msgstr "" "È stato rilevato un aggiornamento importante che deve essere eseguito prima " "che la stampa possa continuare. Si desidera aggiornare ora? È possibile " -"effettuare l'aggiornamento anche in un secondo momento da \"Aggiorna firmware" -"\"." +"effettuare l'aggiornamento anche in un secondo momento da \"Aggiorna " +"firmware\"." msgid "" "The firmware version is abnormal. Repairing and updating are required before " @@ -10233,8 +10236,8 @@ msgstr "" #~ "Quando si registra un timelapse senza testa di satmpa, si consiglia di " #~ "aggiungere un \"Timelapse Torre di pulizia\"\n" #~ "facendo clic con il pulsante destro del mouse sulla posizione vuota del " -#~ "piatto e scegli \"Aggiungi primitiva\" ->\"Timelapse Torre di pulizia" -#~ "\"».\n" +#~ "piatto e scegli \"Aggiungi primitiva\" ->\"Timelapse Torre di " +#~ "pulizia\"».\n" #~ msgid "" #~ "When sparse infill density is low, the internal solid infill or internal " diff --git a/bbl/i18n/ja/BambuStudio_ja.po b/bbl/i18n/ja/BambuStudio_ja.po index 8276151a8e..0f55d662ea 100644 --- a/bbl/i18n/ja/BambuStudio_ja.po +++ b/bbl/i18n/ja/BambuStudio_ja.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 17:28+0800\n" +"POT-Creation-Date: 2023-04-16 12:36+0800\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2861,8 +2861,8 @@ msgstr "サイズ:" #, c-format, boost-format msgid "" -"Conflicts of gcode paths have been found. Please separate the conflicted " -"objects farther (%s <-> %s)." +"Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " +"separate the conflicted objects farther (%s <-> %s)." msgstr "" msgid "An object is layed over the boundary of plate." @@ -2882,6 +2882,12 @@ msgstr "" "プレートの境界を越えるか、高さ制限を超えるオブジェクトがあります、ご確認くだ" "さい" +msgid "Jump to" +msgstr "確認" + +msgid "ERROR:" +msgstr "" + msgid "Calibration" msgstr "キャリブレーション" @@ -3797,9 +3803,6 @@ msgstr "アップロードを取消し" msgid "Slice ok." msgstr "スライス完了" -msgid "Jump to" -msgstr "確認" - msgid "Error:" msgstr "エラー:" @@ -5049,8 +5052,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add Primitive" -"\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add " +"Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" "ヘッド無しのタイムラプスビデオを録画する時に、「タイムラプスプライムタワー」" "を追加してください。プレートで右クリックして、「プリミティブを追加」→「タイム" diff --git a/bbl/i18n/nl/BambuStudio_nl.po b/bbl/i18n/nl/BambuStudio_nl.po index 140d756335..727401cb61 100644 --- a/bbl/i18n/nl/BambuStudio_nl.po +++ b/bbl/i18n/nl/BambuStudio_nl.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 17:28+0800\n" +"POT-Creation-Date: 2023-04-16 12:36+0800\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2974,8 +2974,8 @@ msgstr "Maat:" #, c-format, boost-format msgid "" -"Conflicts of gcode paths have been found. Please separate the conflicted " -"objects farther (%s <-> %s)." +"Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " +"separate the conflicted objects farther (%s <-> %s)." msgstr "" msgid "An object is layed over the boundary of plate." @@ -2997,6 +2997,12 @@ msgstr "" "Los het probleem op door het geheel op of van de plaat te verplaatsen, en " "controleer of de hoogte binnen het bouwvolume valt." +msgid "Jump to" +msgstr "Ga naar" + +msgid "ERROR:" +msgstr "" + msgid "Calibration" msgstr "Kalibratie" @@ -3935,9 +3941,6 @@ msgstr "Upload annuleren" msgid "Slice ok." msgstr "Slice gelukt" -msgid "Jump to" -msgstr "Ga naar" - msgid "Error:" msgstr "Fout:" @@ -5273,8 +5276,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add Primitive" -"\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add " +"Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" "Bij het opnemen van timelapse zonder toolhead is het aan te raden om een " "„Timelapse Wipe Tower” toe te voegen \n" diff --git a/bbl/i18n/sv/BambuStudio_sv.po b/bbl/i18n/sv/BambuStudio_sv.po index b02921c3a8..517d67e315 100644 --- a/bbl/i18n/sv/BambuStudio_sv.po +++ b/bbl/i18n/sv/BambuStudio_sv.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 17:28+0800\n" +"POT-Creation-Date: 2023-04-16 12:36+0800\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2939,8 +2939,8 @@ msgstr "Storlek:" #, c-format, boost-format msgid "" -"Conflicts of gcode paths have been found. Please separate the conflicted " -"objects farther (%s <-> %s)." +"Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " +"separate the conflicted objects farther (%s <-> %s)." msgstr "" msgid "An object is layed over the boundary of plate." @@ -2961,6 +2961,12 @@ msgstr "" "Lös problemet genom att flytta det helt på eller av plattan, och bekräfta " "att höjden ligger inom byggvolymen." +msgid "Jump to" +msgstr "Hoppa till" + +msgid "ERROR:" +msgstr "" + msgid "Calibration" msgstr "Kalibrering" @@ -3889,9 +3895,6 @@ msgstr "Avbryt uppladdning" msgid "Slice ok." msgstr "Beredning klar." -msgid "Jump to" -msgstr "Hoppa till" - msgid "Error:" msgstr "Fel:" @@ -5186,8 +5189,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add Primitive" -"\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add " +"Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" "När du spelar in timelapse utan verktygshuvud rekommenderas att du lägger " "till ett \"Timelapse Wipe Tower\".\n" @@ -6830,9 +6833,9 @@ msgid "" "quality for needle and small details" msgstr "" "Aktivera detta val för att sänka utskifts hastigheten för att göra den sista " -"lager tiden inte kortare än lager tidströskeln \"Max fläkthastighets tröskel" -"\", detta så att lager kan kylas under en längre tid. Detta kan förbättra " -"kylnings kvaliteten för små detaljer" +"lager tiden inte kortare än lager tidströskeln \"Max fläkthastighets " +"tröskel\", detta så att lager kan kylas under en längre tid. Detta kan " +"förbättra kylnings kvaliteten för små detaljer" msgid "Normal printing" msgstr "Normal utskrift" diff --git a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po index b04d6059a8..0887cd488f 100644 --- a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po +++ b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-14 17:28+0800\n" -"PO-Revision-Date: 2023-04-10 17:13+0800\n" +"POT-Creation-Date: 2023-04-16 12:36+0800\n" +"PO-Revision-Date: 2023-04-16 12:40+0800\n" "Last-Translator: Jiang Yue \n" "Language-Team: \n" "Language: zh_CN\n" @@ -1992,7 +1992,7 @@ msgid "Do not Enable AMS" msgstr "不启用AMS" msgid "Print using materials mounted on the back of the case" -msgstr "" +msgstr "使用安装在机箱背面的材料进行打印" msgid "Print with filaments in ams" msgstr "采用AMS里的材料打印" @@ -2856,9 +2856,11 @@ msgstr "尺寸:" #, c-format, boost-format msgid "" -"Conflicts of gcode paths have been found. Please separate the conflicted " -"objects farther (%s <-> %s)." -msgstr "发现gcode路径的冲突。请将有冲突的对象分离得更远(%s <-> %s)。" +"Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " +"separate the conflicted objects farther (%s <-> %s)." +msgstr "" +"发现gcode路径在层%d,高为%.2lf mm处的冲突。请将有冲突的对象分离得更远(%s <-> " +"%s)。" msgid "An object is layed over the boundary of plate." msgstr "检测到有对象放在盘的边界上。" @@ -2877,6 +2879,12 @@ msgstr "" "对象被放置在打印板的边界上或超过高度限制。\n" "请通过将其完全移动到打印板内或打印板外,并确认高度在构建空间以内来解决问题。" +msgid "Jump to" +msgstr "跳转到" + +msgid "ERROR:" +msgstr "错误:" + msgid "Calibration" msgstr "校准" @@ -3793,9 +3801,6 @@ msgstr "取消上传" msgid "Slice ok." msgstr "切片完成." -msgid "Jump to" -msgstr "跳转到" - msgid "Error:" msgstr "错误:" @@ -5039,8 +5044,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add Primitive" -"\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add " +"Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" "在录制无工具头延时摄影视频时,建议添加“延时摄影擦料塔”\n" "右键单击打印板的空白位置,选择“添加标准模型”->“延时摄影擦料塔”。" @@ -6512,6 +6517,7 @@ msgid "" "This controls the generation of the brim at outer and/or inner side of " "models. Auto means the brim width is analysed and calculated automatically." msgstr "" +"该参数控制在模型的外侧和/或内侧生成brim。自动是指自动分析和计算边框的宽度。" msgid "Outer brim only" msgstr "仅外侧" @@ -8208,7 +8214,7 @@ msgid "No check" msgstr "" msgid "Do not run any validity checks, such as gcode path conflicts check." -msgstr "" +msgstr "不要运行任何有效性检查,如gcode路径冲突检查。" msgid "Normative check" msgstr "" @@ -8624,6 +8630,12 @@ msgstr "" "提高强度\n" "你知道吗?你可以使用更多的墙层数和更高的疏散填充密度来提高模型的强度。" +#, c-format, boost-format +#~ msgid "" +#~ "Conflicts of gcode paths have been found. Please separate the conflicted " +#~ "objects farther (%s <-> %s)." +#~ msgstr "发现gcode路径的冲突。请将有冲突的对象分离得更远(%s <-> %s)。" + #~ msgid "" #~ "Please check the following infomation and click Confirm to continue " #~ "sending print:" @@ -11024,9 +11036,6 @@ msgstr "" #~ msgid "Slicing finished." #~ msgstr "切片完成。" -#~ msgid "ERROR:" -#~ msgstr "错误:" - #~ msgid "Exporting finished." #~ msgstr "导出完成。" @@ -12392,8 +12401,8 @@ msgstr "" #~ msgstr "正在准备设置页" #~ msgid "" -#~ "You have the following presets with saved options for \"Print Host upload" -#~ "\"" +#~ "You have the following presets with saved options for \"Print Host " +#~ "upload\"" #~ msgstr "您的以下预设中包含未保存的选项“打印主机上传”" #~ msgid "" diff --git a/resources/i18n/zh_cn/BambuStudio.mo b/resources/i18n/zh_cn/BambuStudio.mo index 788f4bfc250c4d4d41e50e0c5ba9764468adde51..0ccce69efa01ab5c80c03bfa00d063f580b159e9 100644 GIT binary patch delta 50341 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 AE&u=k delta 49737 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 From 0dfbc7e719f6c1ee970db5c59960a06a30c4f90b Mon Sep 17 00:00:00 2001 From: "qing.zhang" Date: Sat, 15 Apr 2023 09:43:31 +0800 Subject: [PATCH 335/339] FIX: conflict of setting-id Signed-off-by: qing.zhang Change-Id: I8eb290e4c1f86635b8d1cbafa80a221ab8ea967c --- .../profiles/BBL/filament/P1P/Bambu PLA Silk @BBL P1P.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/profiles/BBL/filament/P1P/Bambu PLA Silk @BBL P1P.json b/resources/profiles/BBL/filament/P1P/Bambu PLA Silk @BBL P1P.json index a1ed799c9e..7e473c2f08 100644 --- a/resources/profiles/BBL/filament/P1P/Bambu PLA Silk @BBL P1P.json +++ b/resources/profiles/BBL/filament/P1P/Bambu PLA Silk @BBL P1P.json @@ -1,6 +1,6 @@ { "type": "filament", - "setting_id": "GFSA05_10", + "setting_id": "GFSA05_12", "name": "Bambu PLA Silk @BBL P1P", "from": "system", "instantiation": "true", From e31b12f5d7a4ca7b34efdd13fa720c1e6cb7c08f Mon Sep 17 00:00:00 2001 From: gerrit Date: Mon, 17 Apr 2023 09:45:35 +0800 Subject: [PATCH 336/339] ci: update build version to 01.06.00.64 Change-Id: I5d13d3bb5e75745159db7e406c02e3b84c433bba --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index f0461f3dae..91a0e9939d 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.06.00.63") +set(SLIC3R_VERSION "01.06.00.64") From b2d82e7bbb4b2f66384ddbbe6d59eb141cd7dace Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Fri, 14 Apr 2023 16:57:14 +0800 Subject: [PATCH 337/339] ENH: thumbnail: regenerate thumbnail for old 3mfs in cli Change-Id: Ia420b4c6aee072eb2a542dff574260c40de47f7d --- src/BambuStudio.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/BambuStudio.cpp b/src/BambuStudio.cpp index a5c10d5148..878b0091c6 100644 --- a/src/BambuStudio.cpp +++ b/src/BambuStudio.cpp @@ -413,7 +413,7 @@ int CLI::run(int argc, char **argv) boost::algorithm::iends_with(boost::filesystem::path(argv[0]).filename().string(), "gcodeviewer"); #endif // _WIN32*/ - bool translate_old = false; + bool translate_old = false, regenerate_thumbnails = false; int current_width, current_depth, current_height; const std::vector &load_configs = m_config.option("load_settings", true)->values; //BBS: always use ForwardCompatibilitySubstitutionRule::Enable @@ -577,11 +577,15 @@ int CLI::run(int argc, char **argv) BOOST_LOG_TRIVIAL(info) << "object "<name <<", id :" << o->id().id << ", from bbl 3mf\n"; } - Semver old_version(1, 5, 9); + Semver old_version(1, 5, 9), old_version2(1, 5, 9); if ((file_version < old_version) && !config.empty()) { translate_old = true; BOOST_LOG_TRIVIAL(info) << boost::format("old 3mf version %1%, need to translate")%file_version.to_string(); } + if ((file_version < old_version2) && !config.empty()) { + regenerate_thumbnails = true; + BOOST_LOG_TRIVIAL(info) << boost::format("old 3mf version %1%, need to regenerate_thumbnails for all")%file_version.to_string(); + } if (normative_check) { ConfigOptionStrings* postprocess_scripts = config.option("post_process"); @@ -2202,8 +2206,8 @@ int CLI::run(int argc, char **argv) } #endif - bool need_regenerate_thumbnail = oriented_or_arranged; - bool need_regenerate_top_thumbnail = oriented_or_arranged; + bool need_regenerate_thumbnail = oriented_or_arranged || regenerate_thumbnails; + bool need_regenerate_top_thumbnail = oriented_or_arranged || regenerate_thumbnails; bool need_create_thumbnail_group = false, need_create_top_group = false; // get type and color for platedata @@ -2223,7 +2227,7 @@ int CLI::run(int argc, char **argv) } if (!plate_data->plate_thumbnail.is_valid()) { - if (!oriented_or_arranged && plate_data_src.size() > i) + if (!oriented_or_arranged && !regenerate_thumbnails && plate_data_src.size() > i) plate_data->thumbnail_file = plate_data_src[i]->thumbnail_file; BOOST_LOG_TRIVIAL(info) << boost::format("thumbnails stage: plate %1%'s thumbnail data is invalid, check the file %2% exist or not")%(i+1) %plate_data->thumbnail_file; if (plate_data->thumbnail_file.empty() || (!boost::filesystem::exists(plate_data->thumbnail_file))) { @@ -2238,13 +2242,16 @@ int CLI::run(int argc, char **argv) } } else { + if (regenerate_thumbnails) + plate_data->plate_thumbnail.reset(); + if (!skip_this_plate) { need_create_thumbnail_group = true; } } if (plate_data->top_file.empty() || plate_data->pick_file.empty()) { - if (plate_data_src.size() > i) { + if (!regenerate_thumbnails && (plate_data_src.size() > i)) { plate_data->top_file = plate_data_src[i]->top_file; plate_data->pick_file = plate_data_src[i]->pick_file; } From aaf513b356e276d1a10162eddc9efbbfc23c21e1 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Mon, 17 Apr 2023 12:58:37 +0800 Subject: [PATCH 338/339] FIX: modify the cut picture Change-Id: I58588d03c4e265d6f7b42ae3339769e1c918b2f8 --- resources/images/cut_.svg | 28 +++------------------------- resources/images/cut_connectors.svg | 22 +++------------------- 2 files changed, 6 insertions(+), 44 deletions(-) diff --git a/resources/images/cut_.svg b/resources/images/cut_.svg index 0919e39522..0c238ef449 100644 --- a/resources/images/cut_.svg +++ b/resources/images/cut_.svg @@ -1,26 +1,4 @@ - - - - - - - - - - + + + diff --git a/resources/images/cut_connectors.svg b/resources/images/cut_connectors.svg index 504df0a419..61c3436c0d 100644 --- a/resources/images/cut_connectors.svg +++ b/resources/images/cut_connectors.svg @@ -1,20 +1,4 @@ - - - - - - - - + + + From 1f155868bc37558d0a29f163f2f980900beb3077 Mon Sep 17 00:00:00 2001 From: gerrit Date: Mon, 17 Apr 2023 14:17:33 +0800 Subject: [PATCH 339/339] ci: update build version to 01.06.00.65 Change-Id: Ic02997afaf94adb5294e3e041df79ccab3a16a1b --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index 91a0e9939d..809e88c8a0 100644 --- a/version.inc +++ b/version.inc @@ -10,4 +10,4 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SLIC3R_VERSION "01.06.00.64") +set(SLIC3R_VERSION "01.06.00.65")

    8fHK>lmqn@EE1Jey-*>ZfSTD{)RJsOHM|}5{6W-* z%Nq>GM0ErFe!T z0~4v97)pH*uE1q@3M)1Y@c*2jq>&luk64`R-LNRG#+rE7r7(d)zUTnYRNRGH!zzu< zh+APYw%Z_7q$V~oC*CqVLj4Rz;?$<*`b8|k^IuRCD$?9+-?FIPR2x@eKUC!03@yw| zLr@+3fXe&s0r0Yz26ygU_Ybl zSwKN2+aXlP$5AidK#lkbX2S%n%n4Qii%_qId2ociz8;kmC$TD?L*-1`)+X6PP|4c> zl_Q-nxAy;73d-8esF9vQ&FmrS0Eyowz_T2GMD6GJZP`|YxIZ?eKD(Vcf?uJI+Nky> zr+z_wFW8Mr#t*3Wb9FEiiNs{|?`ft2cE?;e982R`)RH_yZOiYdEROr5iC7lYj6$p> zQ2V_WDstUX5%HnU{&|=ix7q7=(bc|wOd$+YbPVv6#flgk$D%?w8Fiv9K<$?kU$FQVED>J;Gri$--&OS=*E++ozug6BK2|25LrTu=m3bT*&YIZ!8EW7NpI zqduHsP!U*-TEl~=lk+wzaZDqLT8h)C0pG){7}(7WG$(3crBD%TXl;i&!h2%^9AWE|QIT8dQqUT%vNv|4 zLVOanU2dQv^9YrsA5je^?QR+jvgSd}s3=yzhNy`wz+!j|qwzmf#2WQ5N$w7(5W|Jl zSOvp+noti$?fIny$`eM|l=Pp#kUr@=H zVvw0gZrnn>0j|TigUx%}Fpu{CISLy2zc?BLhnN{oz@pTrp_1(+Di>a$a^@TAy<|fJ zJkK#BDw1)A1^EB-G+9x(v{zdJcEN! z9aLo3XaKEHYuOhykSVAonrE+{L!G35;s8#}B*V?8;-*gi?0>CQjgjU|k47ck zR6LD`Q4yFtilw1}V;D)j;TS?peJ(0THjXv!MCHZ-RJ+Ge1G_;8F zCsFTTwfEio6g0vY_D1Z9ro-f@0p&tvZ%tH(o=G;8_yg4pr~{@Es-tPB&yEG?#pTwY zQ5~;EMQ#T&AlGw@f@W|D6{6>;Wc&{`gT#}~^|aWAdR|+fidxeZsL1R>4d9IR8tVP~ zsDZygwfh!JqBBLw&HgJ*K_hB~AtY4~R8q~JYPQK@)DrDM9XR)}1U^GWAp114EnA^N z+#8i#E(YLiRD|cD+TDg{a3B7y{Xc$sfd6kg{WK%M|CdkSS%37IUq;_To!uE{nlB{% zFp`!pVQsFboD<;ri0x5p-)yc4bwAXAMxZ7z1$B;WL*>?WboHU}fr6GG#XJ+zJUEnk zSzF(a%Gyh)1Lz$Vz*zH5j)bE^AB``uEovaO7nqrMLM_o~)b%;2CE2uq{jU-3;DS7Y z8sP=|;Cs|bm2ja6X--rFWl$e3(Wrrsz+jw*WpNK`-+#e8Sa6X^(q^b7n}x;k;v)9H zMwVc)nL%dMOmm^uswygL>!3Prj#}IPsN|b$?=MG1as%p%%2`x9FHlLHV2R1GAk;Um z{HUC0=2FlA2A~?4fW>f)z5W2pQ2!g%P{dL*kgBL;Y=b(ux}Z89ic4@l>gX-8%)Hkc zL#g*eMS2lxV(wZBTGJiYlbDP8O;m@mmYad4MSZg=idv$IsO{7dHGqLw1!GXV;}WW) zL@Uf%r$>q_%LQB((|Q7_g)C0Sck!`)F|$%dewn~r61 z87e0ppq~F16{)~gW*~`C14xNp?f(oE^k5KbhPhGaK`~U8Rz`JL6ZK*fTW@XecSnV? zFDeqlQ3IQfO48L>4KLX18Gbe&Zef_8{ykqQXzlW>HruHxW})5S^#a+YxSI5~Xl)^~V(deQY+K0M-0oCDa ztci)&nn*Q6MXobyiTa^JKLORja@42XepHSNp&gq_t2vG3Qs;Jg}4tTH{|Z z0Jmc-+=UwHe$*OYw%$dB^aX05|5@X%H-9jh9QElp9QEF4R79rXWL$@uKyh~iN#d|( zsFQBQMsvU{vTn1Uu|7aW;IlQ^CR5L4jYOUGjWIvEs3hEgVR#*t8}T-qlhMsfL2Dar z9cZ0v-G!YQ;QvrdQGTnjf%Ql0Ak>T|TGv`np>pU?Y=E)1nF%&Cx}HAv!UXFw?8}3@ zP}?ovcC%LDs8E)&^{S{Nxh^WyT~Gt)feQ5$)Iqie$KYku1RC!!yQ~Xl)&8GKp&&Q5 zU;%uHZ!yJA(@@|p^FlBxi7KE5(gKwmoiP}PTbH3Cdf487fchr&4{AagcbjC*hW`Id zZGH;M(#oiYqfj$xYU_hhBOi-uU@q!lT4L|7Lhb*}s3bmw;dlkO#h zDHTBff2KNeZ-D=Av)8vyupYF2M9nDgK9e*xPy-%_O2*-s59gw`;c-;xFWUQGPywJ#nN2R0n-7suScPlVm4}k%W*jVj2d9*L9@L|p>m=t zYQSSrC+H&7`!`WDeS)>{Z;ZeShs=NnyA(9D3HHJQ)OJ~iYTy)Vt*@d&{)fH)5Vh9M zVKd;wsE)FrCQ=a9ZcS7qT3|CAh59hMhx#R!o9Br6F}eCt)8S*((fAg%w*R8e_ToQnA|?rF1|ilTC+A*$VWm`wY>8wI`SVs7-I zM)(^l^33XB~K@EJD zt)D~JKO+ii;5*jAjOR@fcE>{0C)xS|R77s0LiiZ-;A>PeroUiw1XVAE`cSKeibw}* zH&n9ry}jRSY_1xC{!d`pptJ8 zhG7gUGJ8==aQ>oe9(>0IWox2KrlD}ugC$YPSsN9~{-^=Ppk}lbHSpEA91r49YnYKGHM`*s6rMh8$cI)Pd68iwLOSOtTxo8R|! zLPc@|DtGoF{d!KImg*ELqL)zZ-a$>kePRo*upk#c*m{otnHTb+22c!}VP))vE3pKo zzG3!z9UM%33F^Q}f7ARLz6@5P9)pGP0+z;DfB1jp<9fsUFFzqdK zy*X-MFGih^X>OYjod{HiZBg5CJZiwlQD^*BR1)4rMdpjWAN!8BEBh}M1tm!l)b^-^ zYOonr#u2D(b_#3aLmY--cgvJV-k z_J1`Murcn(j`$iw9+_W0rFv|BG5G`+aDBiNa}cF?YC6b+L%3c9HP9`nU*dO z2K{M{?gFUDRzNp`LJS2Z;Q`EzH*G!enLX1{*P~FoVKC;yrPgz(Z2pRhV7%wXAk=3? z1Zu|BFcRxyYn=U@{jatBhYQ+9sb82G6+oSIB~T62zz^6Om81<{noy5JZO3V-0j@G}&7dfefg67-~R2ptfBV)W>?1OF<)RfLgPDs9cCat=U}cgukGY zDfv6I_L)!(MW7lkiF&UpDq_*70d>RrI2F6%Bh;7CI`7TE+fktn3f+0s^G{F%evSGJ3HV?-Opn^GWPqn3}oH%8#KSK@d6RN|6pUoGG9H=C!fU&R|DpFAxjZLvSZo{(Z`PVE# zBr3ORqpR#}ML{9#Z2bv!eFlc$LevXKP@%t!9B`iJ7?)k~3N`SLUrcTUeKi9KMa{S{ zDgsfcC2ocK0cXfp_P^F}J{Ppsn@}BIMa}pt>VC3srh!n5q+Sfw;b7ExumY7_S5TiF z4{bg8KXZT;K<$PWsHGZ?8rY)$*#Au^?B;^9KIM0_6d6z>&V~B;EP;BlJZf!Qp$68) zIs&zXb5H|cWv}l+b#wu>OJ3URvG}P%&+&g#yJndRAdXI22cW(ThYjOOV`tef<`_I6{1b3 zP@lBdAEO%f1eyT_qn@vdicmXLPE198S-ohl$BOOs|LvFp_#@YkVI|BL$Lk5kzL;41 ze-;IGyb`sY_Mx`ZVN{4tSZ|}Adyg7Gg19EMA*hqC1S&UbqLMKhi{g)19G9TB?+w(a z=sVTv-;*|;8BrK2o9kj#9EFwd05Jgxgqmt?| zDvRHs1{9sfgt`Z6pkq)2nuS{9C8#CXgqnFsTCe|$OEIiMJ!Lwt{|6PfIfdF>xQY5= zkSD#@|97;aP)WA~yWwqA)>qG9vbh851Y3%^a61;myI2I%X7u|1gM(4134E}ANA0rs znfy7$zyCo&Gf0cSVouaidKEQ*hp257KeN~WtCMopfz}Ne!~I8?2D=BD$c)9q)EA;U zY#HqJ|4S_GQ3Jn?$+iFAQBZaVX7T#JN+m)KAU&$%oTwAB6)N;IP)WE3)$l%h{V-}x zZ=l+HfGzPk_Qh&h%|s8NmgGDJ(!b|E1#PRRsD{1S%m7lOzT0I-H5i8X*+#`NHfG3S zc1zX}6Y?skUE*RxJa4augqru8qdIPnn&1HR|Mx$}P*6w~VjkR#N}k)O{ai1nIg&e} z1~e9x-9A*ZeZ(yoCzq-3LFLRD49DWRz5cIe-BCyTT2!u`$j$!Ohr$akXy3=nW6tyf zn4fwR%!)CX4}V2He-m}`{ey~Fmb_+Q;iwKGQOVi@^%Kw_RBr6Tws-*tV0b?E|4a(M z<}(jO<~JQQMlHzz3`QSnmuy4r-@pQ1|BvAnaW?gC7>uzBnh4}TMY0GgiQ8Z~j6n_L zcMQNsE(NX0Q`Eun8MPE~!^})Fq0aUas9jPYb-x|z`9Y|p8;^>_bnJ~QQ73AeLgxEI z3+zOF7dFSNh0RIn4ySO03z@^c{{P$Q2e_O1+6XhFc16rujX}+H4eE$3Th#0SeZU>8 zOZ|spUe8{fg4)K_ikk_1!Y0&Hmhk$&jP}6k)c0Zweg4<{!JKTrVuT(nX&S7C`g~u6 z7x5(4!uh4Vo?q}8M&pdqUjI+UFK{LGab?(U?2f!;%@Qt)^!k5qupditzeqWgYke_X z`+q(KeH%TG+V8JXNfuJx%)A0B2|J<&FcB}~O-x8f8!CAHe=l%vMX#q7_0USxaeQU3 zX9LfDsN(hi)y@@Fz5ZXl7OrM?%TL%z`#-F@*Z+SbwE){uPf)`g96hZUun*S@*7W-S zYd9;h1oeEi{2}yoM9u63Hp9Ruum4|KYlC~JZ$u5Gb8R!xbal-4iel*h?|(&8D98id zu{AEi{OHs*2T4J!L46$R)A0({!?^WK#G0WZG!uv7PK?Cx`X&eZV^iurtcibNb1c<> z{jcq`pn=!_U%&YS|D-;*q1XSH(nmBhGdO`d*+xd2?7xKiPQjrorT>Pq7Rbgk`KPQ4w%a zpN?}-1NsFM;WpGn4x|6?|6ik^j&EZwd~6>`(%n3m4HI*{sI?MmW(_bewn2T^OhrX* zFKVD?Z2cPMrv3yqpkzJF{jBKf!z3RC&9EGP!y2fOR_kfMY@$xc9;oN0pgNd~n%N4} zhtx(?Bu}9ta~IXVx0gAv(xRTPhsuSPz1aT>#Skv&#i=*~SD{84+S}{djKxqPevV4A z_TUdZrbs;Q8P<6&`cm7YRRghB3d66f%d2za{EwFXojN> z3?GK#4h+OQsHA#?YUl&%#QYDHR1XJv{eQhS@nE(qp;?AiaNiJSj)B97Fed)V>nY3g z`o^ULt~-(ouIDO+EL^ycMS0LW+>Gpp5hiq1P-|ERHG>YQB^!Xso!M9t*J3VwiaIxv zjWm(Si#i{wU@UBjwXq$N|NP`)Z|p{O@EZ=m^Qa}LJj#3It;JEvQQcY>HG{^e8TUjT z)uT~MwH(#qX;@LX zJE*KqHo=589cn2eP}{dYYS(l|Ex|ZjUvBRoK;_a^)Bqk&VE=2T|8YSEPBb%2h+2wZ z48Snd_6oPwLd~cn24i=7eJbjJS%aFucGN+17S-Wf)I{P>GX0gBMA9j%D{#S!wXAhf z9XCYXZ;XmWThu^1+IkObUweHJ>ceI@Dj8$2E^b8~;jt%sJ(n;QYAOG8DQNA!Vq;7^ z#muxLDpVs;Ydr(i@g~&3cA^fRJy-Zdr`S@*4FRX`kU##2@}dWoqcB~Y;`*NMoi4+ zEc30J_|)m(n>?woQ`>iFQhBGJFK}{DycR4`51MG`%Qv}z)7{s6a$%>JZ~A0kU?=X3 z^5vQm>NMM0XG#ypnc+J$^@uZI>zHXnyv|~uGqb7F+Shz$8mGUnALS*!i!(ntJ+_{j z)x~jE`Xc6xaz^@g&l%_Ve35g5oCaH4&kYT5>ic5m7j+i-4$ZIUMEX)K80D1n&Ex+l zY_9M2f_l!6zOaSmop!!{3$rrkwa%%YgURd4v$rrikgfq++ zZ*e1Mg0J=B!p>CREdFCvqkSWmgr=LvsM~UM{{R2#XvO*8bl;&R8Jx1d+e=dFUCYC6fvKm1{WXEUi&(--*jy7ZN}QjEJbx!RX@r1u9b*lJgttsp*_nlhP#aZZ!SR3SY^)*=A)~Vy$ zO?jN}#@dNa8(;f%eVi%28|#WX)wU-4wY=k0@HJRp-l^xCx4xd!&G%~kPN#`))rPjt z%&qY@7Ip$F(tWfqa#NHu-Zy>I8E1j7`R3~B261%)gNtAr|HMBHC|@JLCi)I-j&jQT zl5M%}MERa=33BH9;%!}>Xd2H?VNxymXO?gO);^Bw3)_~)neD5(?Ta(VS8@A$r;o4r zj+W_K`lrj66CDuzPuuZV%By^vccgII`;P4hb%yv}?HHA5EKiQ$pZ9is9x;aQlrzvr zZ{OsdXHt#fu8;SJ^UoSqbQ^&l>g%>EDBWQ0EaCYsxQTHWUcZ?+yR$RTJTrR&Y2Q(6k~~|J#JiIs)?A1Gt&it8nXq9c$C;GSai&gI ztK)pX&vD}8cFceWu{_?uDwuY^;}pX-SPthSw>!UJ3_d^?n;vkS3fLT@a0%vi9M8E+ zAwLcA4?2zyi(>*TjRmm^R>#3u0#9NA{EF!@{~^aogjF#kHbM=!FQ&nv*4fA$osF0b zcVI@I@0_3zmxezu2|h**;617%_psx{#)Q`7s0XIC^&HkbsF_FL5G;+F`CjXOj79w* zs=uR{i03<}DCj{~Q6s*MgYhkSy zKi_epgvqcW=0>gkaBPCdjuU@{Ed2?yCOJ_9D2nQ+JZed*p%0s)2GkN$VlUKnqftvX z1@+*0sD4(XCbHFjeh`yVKZUyP#tF}K_<#l_#XD4oaZZ{JlAcO*6OS9H` zz!tf-WqJKCF)#d1K6i-(Y6cb-8dUY6d5 z(Yb)yzVptSB>WLI@bo`vbJG_psrO-Qyohn}IMeHF~#gCW`EBtIe?|_^86QF0Ej0vgF z#dx?9b=@Xg-;2tbqgWO%V<}8_!R&^bsQU(E5*&?*aTaPK%T-s1zN3&G4`UeKv-N}* zO(+YX238y6U^7(2zQI`74>iLu| zQET`BBQWT)b{+5Pz** zwyS0)l~6ONj>`J>m<&f@E}V_!a6gW~e^J>#=$bj8ZeTy^?=dfSyKYX%c{q`Jwi_lQ zn=uvjeK&}|LVKQu==Fp@&(uVzLYaFpsdnH_G#ow)jz9_~f1{Qz_FZ#b7ED9E5URgww%!zV4)jL)_niI|6uM!kj;G;XT!_lH%v}YrP#6fs?3{^mkNfUt1GDFcHa(y00{<|Eidp=R3_PY{uTG5N3R6ZYYfE zs48kH+M_=2hUsw(YJf{o*}TPi3^kA&s3rRgwN%cZ=7ddwtEiSjFB^qB6tq_EBgYBB zbf^cGM9r`QDvKMUvb`;8DSD%laxjMBBdmwX9-D324ogyBg}VPX#=&P83tv4Z{tD@P z8f2U&W*}*BCiQR}j7LzREB@4+3(=?br zk~Ty|VgM>K!!QYY^X&)gZ~_fmFd-IxX&zJ_HN*a>0gXq!Ble>@ypHPVH%x@jtRHN9 ztXC#7DXkeWDc6M{OW`>MDQM);sE*rWP8^Q$aWy8ut*E5ght=>f>KzgHwW;Ss&8#=7 zeKIPUH(+J_2^Fd2Z_Mtkk2OH;_s2hpetx?oBiZtJr!G4*w*f$Tz7%lQGd##`Q+ zneW2n)Q@2byowsoBh-EFJ7Xf$eQ7a+_J39tuq0~ajZib~hlYv4V6P8m$;P3lk;-8j6ozEteol!Geje6iF z>uwAT43)hPP&xAkGho^;X3Yy>O6rwROW6$b;Xu>?*I-%Pf_d<{M?p)F=07v?Fl$jv zO?wn-37VlI)y;n157psF>qOLmW}=pI7wWZr7DwR|R6pIm@|7NkqIQKB?|J ziF#0b)WCXRLtTjH@EU3fR`8>!2CxMc!Cg26f5y33#dQNew%w^HAaC9!jC)4mGtP(OoO!u4_7 zz|41`B6?*?8%iBSVAhDyR# zsD1{aw&4iWk{-oiJdGN_6I3p|K~D!ttOO(O%uC;w`6+^qrL#OJ&&UXa51s#1wwO|28HM~X2n=Z+`#t8 zff`U9)XZ9=lCp!X4@71AaO-ST#MWajJdBFKL;Lx2RR2y=(;l4Ea|8P^lmA+!&y|w z?qfmx8+C$ZO>Sl!ZY_@rT?15y9WXt{U?!Z7I`KB6?mv#okxQ5b-=mf`bqe!bFM@(@ zsD`@X8`K58P+30-gK;S;)JIUscop^F=cob2PHC1f4Qe8}QIUy64YZ7HuVvetB9Zi* zb`-Rx-BF<)fx2NDs)MDrzTUbQ^}y2@SPJVsR0N)(mLP5_GtkOdhcK{1O9^=Xu~wFQyV*DIoyN&@jVv69%;=$mS9He`%x3R zj#}zJQ4{-$fuH~5r8E0F4eEnzs3pmV%K9k#c{S7--^jKPMn%9w-8T^x`q`*+Vkr*6 zjo2G=q&Jb9gW7FtG4SVqd+i73aRMLQK_yM63})X?#Te=@Q902uqieqRqayMMHL!nC z9cRvDwqXGbqh1LIU~e3Tk5CbApPBuy{WvJInZW|ogI1wVz_eLhCmb_j4y=v}WpAs8 zx^4zu$2q9Tb<1krC8JQ0xsOWLzfjl52{w^P80?vlWuig*G8DB7@}qV^Y1A4v!G+il z^?<}7rh^=)>x-bygDA|8HSFg@Py?TWE+^*q*ns+uY;NGISsX9B8Bqh&g-tO8hvP0> zj#`R_IS4%+3_;bW=X9MzxC@m7eRG+9hM;oBL*>Fa)OMX|>l;v!*oj&K?>vRV6z-#D zk~Y+A!qQ1#|Ks_)=ZezH$DC&XbP&rW@6_Hk`?b;EQ8v{_=bRu#fdCpo2 z%7K%pkv&9({wr$a>BCHi1yLPEqdIPcnrSQ4b?vP~QQORqTKg@if$c%Pe2$@Z#|4a| z{eO#sI=+YM__g&DD%*qdxXyG;gG!#YsOvYOvi>0Itp5WwprE`am*Sz1dQxjj)PvKa zBAXqP@O-Br1!Z-4ROssJ18k2<%5PC4AB^2`ysf`Rb@V@L;(TUFGNJ~W!y0DIk9tld zYAK`8Q>gk-P)C#S5za?Fctp4fw;RM;iz+A zCI;gc)Pv6BB)o>Yu60q9^?gzOj6n@>4k{8GJPJyRt*8O)$IN&d^-bnaRCa$x4K!sj zV{QzlUIx`+Yt(h$q7I2W7+KuB?7X%VG~@ZGZL%JsZwNQ>_beF7A^@-6D*i(A^vC>d%1c~PH7Vgy!3?T&${HC~0fZ$0X|?@_zx1P1p1c?z3p z_#KrC6U&%`WDaU(i%_9lk6NPrw*4e3mF?`FzxjSK9hU)creceIIIo$5D|xkD+)Qi(~9^CP~ZUI_izf zvHx{+{zrpu3@&eyC$F^%>VRsGI%o&|!{UGY)6jEP}$6}9%>QVS_fHYSl6Ml z=rHPabQhH^iK>|QTmX&1eT#bKZ4pvw@{JzAAZ4XHO=)|y;|lqR2a4T^-%-ph{}Q< zsDTWz&bDr{pC3m><`QZ~&rw1r>=Vm=pV;W;_pd{c_Y0pn&@54U)WC9~A{~L6 zU}X%vmTFT_k~Ba)s5xpz{ZIq&P!X7c!MGIl;3F7{XHgS)g;7|xk?TCc(Kr^nH#Ysh zw0=M(``5n7_V`}qab^}nH(=&}9$ z6KW!fTAKj}qt2HIEQ;k&+iw7JQhLr53c6u4Ds(@fvimgVz)PqZze6p>7gWR&w=pwF zi~2kV>Hy1Y+Y4IDq6Sz4bzN&z@^-{z+W&nhXr`kA4IC_(oBA4LgwA=?!2U)J>>X-G zUr|Yy_#3nBGNRfmp(5H4HL-!VJ_R+vZK(TpVMgu$;}q2K9aLx@qYj8Ks2RI$-M}wl zq(J4uEKKI|B@BP09=p8>^*K~Ozo8!V(6&EA_4^6+;G`YQ=b6z{5@e^K9~&c3$x{pS zV|P>%E<%O;H0lADQ4zUiy^osdGgMA|MO~Mmqj^wD45OYNwFFV930CjO{?}U6p`koB z$NIP!_23s+3^R5zuh|Bu0d7YfG#60=PubaQ#|SJ!y(#9z>8P3SLQUu_s=tp|7$drP z=4YUeUEIJg%K1?@JVy<{>1tlT;iwr@LM2mg)C@SmGHSoK{F`W&5Wov>VO$zeSzw*S$FfGj(Cl=?~m%ZdQaDBjP8J?SrCth^JX29KU4*%D4eCMX zQQ3bJwFFPF5N7$-wAVvT^c&P}8;)G(IWs8e_4p%dyWK;rk=xH47$r~-?1Os15L9R< zp+dh16^Tul7k6M4yn|ZGTruYQQm7@XiJC|wOs@Ukp28s-`lAL=sK4p3KI%cuF%-LF zU-Y9Q6nlWVE(PkfngP>d1nT=iRaBC;K@D&<>blLSFEGb2h4%mN6oOgPfA9zD$p)F3 zT|y1$E{32p*mRT)HS;{EZB){>mqTr@Dz?2gYCsK8k?W3Hsv)TB#-lfo!ZZp>n%G0k z+9X7EoEa7RY^WLJLp``K>a`k;+OF+U*}Mm}J-?tHlwqhb7b=p4Q2j=szGqY&%Klf! zZS4hJQS~9H5RbO)Gf+9Q0<+^G+kO|d9bchl6l<7S+k~jKPjAhS8bFk_A?iD2$6@S$ z-RRMv$@=*^`B7#c!S#iu|}As zN#{{e=p#@MENZQU8c0KH2UOO^pia!usF%z%RK&hVUB3_Ypfjk6-L#+IMJ3%6)XaTM zT>W^NDQG|DM%`Ev)o~5fzLP0ZFgc`sq48omw4fmk3c*-b~JgZRy*??N(ov2(ngNnd)+y1Ame?r}# zV6-`avY{eb4ijqs*P@^fnxPJmPN-1LMy=&mR3t8ADE@-F{(q=#nP`mJ*ZENsh(-;p z5h_yMP+7kP_2BK+A22r0cg|DLjaN}2dx(0#bL&Uj9($~rc_P&3X;BAC4%8BsL_MG; zDniXsOVSY)fkCKUG}G3%VBqKflN6Md*HB-ZpIEbvGwm&{eNZzQi(1o3sI{Dn8o)Bt zfWAlVhEu2q-^MU}hgzbn0f#wxU9Q29>ohQ4dTo!Q@Oz zYev)rvZD`+p-#?Hs0X${MXWn2LW58T+xQ7&tuB~JL*Rh17al@A@GOSo15}5}Cz`b_ zh(oAX#=3Y6OJj;jCK7c}18s|Xa5q#A4YUqN^*_d=pqVa34PYN?K-W;Adx#3{7u3j; zOg2l933b$lV16uzdQdM^$3sy|G#3?_m8k1?qn6?-DmT3UDCmY{Q_K?NL7nYYP@(UH z+PBkDkywhg@f<2yGfXwF+Yr=@yP~fD7Ej7S889l)^_!h@v!|D7LhRf&JhrBH$o z{t7hkg<+OSu0p77SrQf68aN!A+V&f$rFv}ZAFws`c(cv*olz5u!N9u#b-v6(ZO_A) zO#A-~g}_;jb*SG(jXc6{B2W?)nR2KBHN&dd4g29vR1SsCF<-eVq8{8Ib+Qgct^F7* zgDX)H`2#&ARhqfx>vay){vB;yfSUO>REGy`{TSAxegQS0;CZgI91CJTyo@dID@J1T z`6dacV_E8}P`l~geD?o93hn~4tp=k)G#%CP0o2USVIF*hMKJk7*I9y9FmPg`X8PRL z-&jAPa>iZcI-4*tY9jkk5k0bq{a=8>uQVvT<1IGZsVHhD9We%HqXrariAlzEc#3)` zs>2sp3E$e!OD;9JQ4O^#nxVFFJ5)qtP!k#DQP9lxqW0;1)V_R=x*`5D^WcoAndU?7 zib$-6#qnDljY_I_s0TR9&2@=U+c^blsSBb8RL<&ErJxzqLk90O!F$x-t}ttKW2K4A zdyJ+%$13v!M^{wDj-o>U0<|07qaGAzwHbIS)I@TklCT)o!bawE&sl9R*ku}=Q>g6z z#nyw@xXv-^1yPZCgG#5EFTNKLSzo?`rvC*9Uy|D-N38)9ZMTIzMllh940)wd+L5@OLE&0ol;I>eul@Zc_37&jhvo%wuz=ZN|9f&o96e(vE=+S46% z1HVl=2Nj{G*bECCGrMOJs@?mILQM)G$ITxu^}^!RFQb+q!3ncnnxU>6i8{m2<3>z$ z(sdT$9@MwxdOw=v?2k&e1*qM$33Xsy!CaW>RA6GB6GcHuH6InCTUZ{GoHk2R2bCjJ zu^(>2LYU=@$$@%UkNUS*0#BkM`W5xID{|H(Uq4(`AQCtorV z=zf`Y?f=;nwEr7iF&+7_AoVM#kjJ`e+Uwy(>ND{Lesj$Y{91aQ>!y7QDoI=1Fz3WI zj79yStv|&m>i?qFzRWM|f6a6Z1%+@L>V`isHa^54e1g99@_1qgC1$FcQb;Ccl{x9mn*uR^z zI;*ubrlq|Z>b}0HNDN2aKOQxKnWzx2Kuu&V>gBW9)=#1C^M0nF8?RgcK;8Hh)8PvY z#<;glN4Zf;lOOekp-23LinNdqn2sPu9m>Z)o7xqA{xgRy4g{T26L-n&Cb*@}Q zPd8+GU}hMFIzk(v9x%hU&$n(w9mNMx+wmr90Pj#q`4zQPX&#zgk`pz72n@z5m<_w2 z1~}y*`(F>5MT0t8h&yl<>I7``CnLlOcpT$CGC%A6gqNr%e`5X>g!>pl{n%6UmV1qQ zK+R_+V)Zc{q3w)%-pJ=BG83PBX6>fYp#8WQ6`~EOH9vyd&zDe7S8e*Qr1l2`WgIIm4oCqd;b&21Y`!k`ICO>NCk*Mun5|b*sYEuZJp*8A3ZLKk=8z-RF zda7+-i+aF5)Id(7BJwM0z;7`R#(8TVSkPJ=l?&ypQ5g99|0)y|!s@68)<=!B32Ilg zw(Xs*J?!Uw?dO9q2iJ|lC|rkH>u0zKKcEIY`<)r!N~}VCCkFntw9gcDL6Y|-G?`HY zD2VJDr?_n|i8`2SqptrJwL3KJQiwcQ=T;ROpY}&ws+z)NddY=gO|}v6cqT|^AlK!dM;lOU+>xfJt!y?n^9|Z0+kCHVg&_~DGMqR z#ZjTJfeL9$)V}YIxo`q@#cikvq>CLCc&+C{{Txvgl`H*Gkr|CCdA>7^f^J-iTEm2K zf&%}ZO9xa(w@@>Efr?1{xIuv>NsSsv7F2sU>berBfi*-8ybmhd$Dks(5Vhnx(9^a$ zZ7;Zkio{#gg^A(?1-4~Q)V8XK8c<7XAJl`!;y_%1`e`>^{Gh-&Q4DiZZ-IdW3iDE5 zhoN{SKIfmZ`x6aHk_-uq*-#>O+g=$J!rGV}TVQVVFb{4(P2ei_#OK%xoAEpB ziqIJh!)q9gUlV#kfrBC{k+G4rGb(h0ZG9?gAj?qO?mH}r|6onblQ<}_?FQlz>Id)v z4o(sj_&L8-(xAY3FdH@CzicDmUXDKKsiN>RnXBFyQa16DU zcTj8l9wRU$jj7j1CD(A&x98QU$ZbVMY&YsWIfr@|TtX$?efxQWw2BD(FPMTJSPGT( zO;IE5i(12zwtYi7)4?$eECuR}PoF->X@mVx$$S+x@HaRT6J{{=si+C8!CiPAeLUZp zoY5R0(=nL(ZY+v7urMah6cjjOE228Ch8l2NRH#Q_L7ahF+he#1<7EyC{5ujmQJMIZ^eBA?$xWpcM_eu@{Em7@UV|QLo9;*@6P!WNzUc>ix3^IiE2> zj-bH5vK%L8P~h)^&Y>n$HiSlwnf5_VYzpcG-HPhxm`6d| z=NHrw`v`UNIr+>sONhE5EvkdOnAPPQ4C*b}Gd#%r`*NryNSxn1I3sFTiYNv%#x--O)M`e z5|vOn^o?ovoZ%F-_VZCUZm}2aM=ik(yoYa59o&d8p?ifnsK+g6k})4@`$nQ3SQFK6 zCtDwi+C6ho+jJ|Y)BZniFL;E7`M@a@6!%Qn#*)~qusM?FU~}qku(9@k?IPxewWt$p2P&ioP`UAg^#UqsZsRZb29?d{ zikg|XDQ4acgHTJl5=-DN)O{~dCuywW#scVRO`B5)tO+V)!?8Nf#({Vnqp?wmpunHu zE<&ySLsZs(L`5iRNpr%5V;SnLQK4Rfn$RKZF;r5XD#`voO5w7-aCRy47Tkf;Xg`SE zuv%&JdfkPUsDHrPSf)%+;ICSyqQ3S1j%v?ZHYo5nC%sTh_#5WK*yYSuyh7GV<=Fp` zd~lZrjVM)lGvchMkd;I2ibgmZ+n{ECAN9cZsEC!QV7_G5#$41_p(1-0l?xY9{r`^I zc8_iQJCA}c4610>J|1SHo(#2}B2mdz2^HctsH`838rUk-1Gb<-ydS&Z5!7{|Q9*$} zaHxq|ifyR&3s?xfHx!yu$Q5m}*F)vPB2@D2MTPtnY5<8UnU_=^)WB+>PRNd^0rkgl z4k!;b3ErE!0}KK&^3a)QrcXw%0P$ z5^YB<;R)2h&ss0z4(c~iYd*C`P~d04MX2lk!S34sA1J7!_BG9n`lBAW2zAhWhx*R9 z2bCLtpw>L7mRX{tsDWld-B-w31?N(4iF(VvMn%e3+blsw^pq5ZCk3fa4A8NqEtkW@^`U=!QE}*vCeGJB=bX~iW8nuQos3Ug->MPhHR8swf3h@I}a=k(=Nxb@|-z2E()1#8R8tS>7>a+jP zQdmrbI_lWKeCr*7b*R5Yg|2)|0Dm;qaRd3HxONcLGW9t8OFh_9Zj%HVFK;@L%iKWo~PeDQ1SPK=2 z(Wsd$LM78~>uJ;)-o&!#>ui>!B5GSUMdd_WRK$j$CgfTDsO`QU6}i(Gc>n)JK@WV5 znsMSTCRD{y`?@R^#2#24m!S@(KTvD=2z8>pMa}Gs{XB73Gq6;sCCiMpFb}G~L0#GZ zttf1wK}i*_o4GI}>Sw{+sF7AdMWP2r;t16C+kqPRY1F&oJ}LrEce8})Q730nROH&A z`kRDG#%$OA>Zopw z8t5q0z~-SM_MP>xM?tUIbC?is+4>{Yn!ZD=;aA(9qL&GA2x_+!LPe$wDoN|0`s<47 zZ;*8?Dxxzn8oxtL#CuDjIE5^|O?Eaxh3tD&mfyrl==2E+{6@rNRH(0__Wvs!jyd|8 zrC5a>s2|4KnC)A0e_yOl{WEIqEBCYS|3MTK+LfqK??=t#9_m4#QEQw&#*C^C3nvOdAPoN@r7USa;RK$KqMdmRs)c$`%VKxoZ`kRw5cz_vD1S(0YVp42_ zGqE@7i-t2WDDbOS(dehT7d7x2gMtFTgwhdJ|A2a{CLe72ZHVf(2jv!Fvy3%w zyYI#kV(PC@ITCMzF&Qdy=}QPY0CZIyL3bhn_P$9m7Iq@^oZ;vZU5br~!tduB(YUs5+uT zI?A>$K)uAaqXvEpgYh+%$COLWLDX<5`#&!YlV~W8yHRWQ0!v_?WoBRw3|=^+JhR%MO367+0Q?tA{lqNIbU+2`ib@^D62c5l57y_E7t^6WOk#n_Y$gu z2dIGttuXDSP&rT=)z5U)KvtpNeg{zp*GbgDb{&`F8`R0``B$174`3(_7f@OH9s}EP zm08oI)({Ni^GMVKTcHNl7xm3%CTfY6p?1?T)BrAHRlJYd9eGy=p5r;4C}^$wp+Yto zbwEr)LLEd@mi&z zP_;%4q%&#&J&_a2i9vNd2sOhosHK{Px_$-ff$LEB?X>j+_Vd%INS;SU;wEZf&oDR7 z=T7t0C=B&M4E}_ZF+Vn1Z`N)sYCEk$9ZaV%7@weWCjJIvG0aN6BWibyLq%XEDx%v_ zOY|cKe*fnQ1tnS1jpl8a4V8RtQAsll%ito^$@nX(qtu(s=V7P^R>4}>85ODBsK}i_ zEzt#3=pUf^|GbI)ueV&9%_hl8puepc#WVYO91VK#G*p(ZN9Dvz)IR?gwZ`sN&TLGAu`oGmplMKR zoX=Vu713zaK$}?GVo&PbQMq-~qo5maqeAi&r(vvZW(Kn{x67KL*7DYO=74!`P5iy7 z=dhMS&A7g`n{~8x5$5Fc9jM&$ex;C`Lfq}F|XX~p_C*fvPs86B>a0V6W#~7ylAG9YZ@Sh;dhnm3-)HXYbio_F)z=V6vTdg#{ zqTU15QR{u?`oX9iT8bLTUQ}+Jz+k*-{e+5W#{GQG^PN%@^uT(k1EfDHTZf@$Faec> zD^MM8K+R;AtzShA{14RquTTfmNBj9#)c#L!z$9@7EKEHV1ONU{OA5-;Zm4}7gZe|I ziKr}IbTBCJ+wEJe53K1Anf5xU8I42b%v#idFQbz2CWhlH)WotLHt&!;huQzSpdk&~ z*F8`-4nghH(WteXh1za&Q6XJ~%8~D}0-i=4t?`eTw_^rWe+{rXwnatY5O%?zQRhyP zAK3p|!{$Gj(Dt{ELPca6hT?qG0rLYYBEO@S;vduiKjTRJA8LRjkDBc@50w)?q6Yj2 z>I8j{xR93gYf27`#f8+@oHP$C`=i-z)lo~=0Cl!^$H2^O zeID+neKYF1wx>))24gMi8!#8ocivObOf#Q0$rp|qaRp4q02-oBtd3{QHkyJug14ad z{dYJC_o0%v;#u=oF^y66O{jq#vGr>>i24)Eul?WlC$pVqqLSu2RL6%=+v*gmqhB!( z{)HM~+H)r4c~JKiLd~>1>VZvBZ_Qpf6}Mn8miXCh)8-iX_kY?_=)(siQD^ci)WH*c z-W)hl*o1mNjKXuMZItwa8At}qM?D-h;O4fy2P*kI)S53uCHo%Kgf3&?_y7K+po8Wk zYUIf;ntCV(W`ydXDb~aOs3bd$h44>XPj|^gq$nzaWl`rr6;v|zL-jw>*5_Sf|Ld)` zng*R*KUhzpvh_SFw7;VU_{@IpyKIs%0cu;NK@Bh*bzgPNjm=O49gW%@E9~bRP?6Ys z*)z#^g@%GO+((5b)fKY@xltF^K(f{8gz9J->bkk8ztLD#$ z)8jCzhp;8dUBbI&j@o(G&Dw3aVIFV*6|&=~0bE4Q@EK~~#{I=ymku@KU<|i>>jmJ@ujQgv}oz%$l9WR)I)+!t7M9PbrVKLMU%2_L81oc|BJ_2?9IMe`UVM|H%^{4rR$#Rc^oW-e z74_F@FY!0(d0(1P$9-kajS$rJRZ$b|hKfXtXB#G?Ml=Vt?N*}R>l;u5+lD%DE}(Ma zK5EHcVOMlto5*xWt^EL0KhshD&PCm~3Kg;Kr~!GWC^V$-1bbkaH|EReCe%nTpd$1u zD)e_z9Y4n~e2qE>GQBmC%Z<9e9BRN-Py=d#dSE})HlK@}n4WW%g0|o9s1bfd9hq_8 znSlhOav&O&bnQ@~8;;tBe$)W=Sx=&t@Dl2}$Ebn)hovz2dvh?=!h+iW6DcTZ4xp0i zIVxHHLw(K8`@y`1tD{0U1cPyg^?THjd>J*7`_`|hiDdX_awHN}uZxOgSInXPA45SM zEJSs%3AIm8VIbtF^KtNn}0iERIx_KK*1)kQs^BWmCyP&u>|W8rF4q&8qv+=X5Z z3W-0NBeWT62^OJ}Ya=QL_M<|0!upGCe~!6me}}q0(`OUUkL}5Iazw1E_yv`Ss z8-q{-8TrM&|EJQR2y8&D@qW|{uA$cO4Qj39|7RYUA2s7fsL#8h?jMO2a2D!;S1|&= zpe7dn)x0}Oqw0gdvj6i_m`H=Nb1!N?-$X6Ndu)y={%5kjCu%8TP!Al9I@A5A`<9@V zY(HvXC#|ctxy;CLuLO&)PUAuK0J|`2vy6j2dup)CBnbBVS-`>!Tjj3H9KysDUg*eKYzFE8;!-c@Cd1 z5aJS8oc4C8^I$P*seVN5qGwnJ)5Y=ylD0AGd>DX4#B)Ya(19`)H2^;<>9(W3TpmQ_ z#0yk};>Y#{LLGu?FN@j@%}{GT*tV}iMd&apC!V1C%M-`6x5BxB{ZFAYA7qK^3w#k7 zkHOT>qmtwW>cRh^wo~eOzQA_Mh>B3KwJ7Skny7(wK>icEsUGc z7uf%e(9>FMqtF8Pppqg*BJ<$v=yUmD($>o-HXSuXEm=QQNQa>M*@{Zi-PX&frTiNe zi4UlVB~0QA{0j~tNql_&qhUS`oq141QeWUFodwB!fdk?tDjC0EWlWyjM5ZY!q$5xr z&%!#m*0#Sx9We1yn2Dr99qr+`6w9IB5w}x#rtsEYkT9h$@S|8}RL9d%GhKyB&W#v} zr%@-~XH-WCQ<2_TH=q`AHDeLOlUm(jfPoR6?>-l z1-`xR!MfBVGx!|+A=Oyygd0!;N}ACZ_!G^dsH|UuO6DI>OZP8^VUkSdoG6Y(srSV- z+W#9UXa==18=IoGS$kAcbw$mfFK)q6$id;{&te8p8jDeHk412?^|Cc?R$t)H2g;zf z=V?@A{=nnf|L-X1f%}4ef!}sLf*N_z5R+szPy=a=`YP24HGqDo2aiIXko!@ge~wDd zpltTMK(%K?9leE6{guKt+W%1$VsJHTrs=YqCCQB%SV`2jDv#>8C29b@Q3D!|>TojN zV;9ZFI2e=D?3SUqOvqPa9j^No8)NQJ_P^G`qo5Au^sA6pNM*G@5F3)AHy+rK68B}>Ljd(ir5g;z^0-4UxZ55z4<&};P3aZ(4gc< z9`1A6V;By^X*dUC=Qp1(LJepKYDq3(F#d(wC5a1|?b{kdsV~EMcnX8DRfLJa2vj6z zcoeja4x(PK_fZ4MSDM}5>%v_;Ki0P1Y_qjG1f{roWM`YWiUyN8Oz zGyE3+!^-IODP+Dd>_wei$s>J%U&$JZIx27C2^?717x=%SE>*XJK3miE7syDlh-7&7bmXQ7T zse&)?2M1{?nr|vIP|0>4m7H%-Uq*9Bnf+b`l>;7X=1WmYcnoXfL%fQS(Ig!Yid)GS z_`SeXm3_`P)JI}>yjR8NY}5X)Rm~Up-Oevqo%+=3X1n}?T9U~%e1ZR4skhjHdWV`E z9C+3mR?8Ro{eVe0k@o+vB#y6bB6tkTP!FzSmZUY-q<#=Ry?o-;Wh8h4HPdhFnJ*Tz zQ2Tp3M&M~|iytvRHm`3El1Zoz@1ow0;SGF&f90|*>V({liqPLU43jl9U&*F5WdAFR zFVfHg|H4{WwUJ4}d03A6TRen?8~XzPVewa3iTbT3=It5W)SPU;p>{{!X69W|9u?6V zI1cBb2A-+8&sm}N=IsAb6#k;2IreH{w%=L2OZ^@`#N#b}j?0>@Z$;AK#@6PocC8Ik z|B8*cE_YiKkr5b8{W`YB4DC#A491((&tOLGTjjO)1^y7}NCyrE8sc>H1^!K^w4Llh zgR!{b66yrIj(YvxN9~Ggo$a?}46G@}p*>y~bEGFl)zhNx&w>dsFKS7=q7)ueXodx` zLRWJ%_QN97r&~{=vi=h)r0Keu2e-#0)O(^1pkb&bor?Mjwh=Xe-57$0PzT%{WI+7+ zzbQDr?&e5MhT4AlP-|Hq^%Clgx^V>RLGw^&_&U@Hc?|WH?JDY|dyM+V^9gl-tRCjN zjHrQyVlTc2bF}YQK5Q;+67-QE~e;dUM?9>4~jxPs4?pLZ&3YpN1YEb zm=zaT_n{{8D+d1ie=jL$L~bwh+D(j_Nk&xY3ZNcb6vMEr{k)5H7-|V-T9>2NdK>1$ zgP0eepdy#5w;5;-4E*;$3sA_z2jx)j=Wh0bp{OMokDB3P{14Znz8|daV?w(fb#9zN zUH2FRkwZ=F3+g2mudj(@HdJJa_htX<0WE3JiPaZ%!xq%*bss7c*HBCF1V`al)Idjm z>vOi_EL4c2`k5qakKL({L%l0rp#~5gV{DB|(m^roe+^(R4O+`hsF@u`4d5JVW{**! zjMLxj>qrcAfZ7#vQ3KeC>|*CC>cqT`O6E8N%!Bixex$36TGBQi1tm*o)EV6e%i=cF z+W&2Ri|X(*=Ei&j&573twN2NeCh{BV;CYE!f+B-VdwFXk)Wo`>Cg6>ypfy{K3h7o< z1dgDR=x0=9ZlVs1zc3V&4mMv-i=mRL462`6s1vgZDyK>h@dbXnwliiRG@nra<%HD3 zn7IDyF0F?XVj4P+@HyqVVLVIH2~VSPA^%9TrX{f$*R@0qY|bbXxs|AyZ$eGr2h@^X zLgmgsSQ>q!&F(3WIybsu;Qc?2f)0q4sH1it*2TlVz9< zosG(kHP+469jJ-yN6q{aDmfpbmMmzJ=_e1WUK#`cw{#sSXzhk$Y@C2v^J%DTU4feU zevHJQPy_yoI>|yNn+TP_Le$Hmvb!%T*#@JQWG-qO??NTtPm|gIT8qcFA!v%ZAS)`V zil7Ei2{q%^){dwd_CO76BnIIu)IOhM-G-Xb84Sh?w*4PeZpEKUl4%C1r1UV$2BQw5>{t}5VG8s{Qm9A4 zkCpIGRLJtqGy^Dznt6HDnpU^<`u6jds5R}5Avg+^gsV~a9l%_861C>fQ4x+eE1>6u zP*5_JM4eczP&v^Bl{{lm9V|!9@Dyq{+(2FT1hoXd*=A|tpdyk0bzKfrjuf@^Dz@GX zUB};Ra#^>#f9vF(ZdZTXDcRlC{&74a?Y@ZkqTL zPb=W|_LrF!>3-|)JIx=v8=s8x$DbbRw%S>6dT-aA<6k-Bggba=$C*QY?h5}se+##r zzs#Jp?jV1oIW63k{_S%!M=ra{tOj4cv!o}rKerb|8!{+cdEa_vPgH9zyGr5?s$LO<)P^pGwSvnr~m)I zdRlb;=l8E%p3$w~KfL_8+tj~t#Ta+3KYV3Bx2AvP%7N|-fBIEf-M0P`t30>0fB&j- z?r8tNs~Wg1ch*`x#dYiWZ?4(w4)Kp$TO)OO9*~BAvhfdp(co++dusdtT)R0#6x`8Tc0;#T*cU6<9Z>VLZKJ9m|T;ri$9bpN;wz1;@>cN;vnn!o?X zNOz5Y2xgBAeQ~_5BMePx9~IG{tT2ue79F8`+LBu+ulLW|lhWJMcM<3j{#yI8rXR*9 z%elS>e$TigxbJ7`Q^t(jw|Cq=cWm)EE&CTL7!kQQ-Yd7Dk4i*D#mK!y-?}Sf3};Sq(y3l{;<3wUnjKaZ~-Emy!AcZ_!c#b|y z^_%0w!E_jgAy^3;Vi8=9dGQXW#sqsECmv?Uv>1UJa7|2sjjg?qIXdGo5l+Lj^zSUA z5R(fBFaaJ%4d4o@q5BveUs&IwI{a+w(e|19aZoc)gaa`hYUZ=7b1)k9d8qalV?6qI zR#H$$TTvt4hd<*bOor9=n-^Q78tj1iuoF(ec~~1m4lrvRgeCC|D&+AGnx(6bs&_&~ zdL6pSDQu#k8686ns;$bRAi2z z26z>fq%TmBihk6zA0Jgu;Zo3p8PJFMQ5_e=3|I=&V{^=gLr^nVj?HizHpQgJ%zHgi z&kaKDo~5XnUb5b|{*8*H`;CHfApUXFaAqt_y#Ol7x?oXUfZ=!z7i0Vr>=fL9+P?ix znj~C-8u%9^xK655CaGs*bm|*1CT>TT-gWj-P{>YVcD#k582z-_Mq#KI)}dy;4HdB? zSOKqLCd~MUxnBk~^Ey}^e?dj`3hKRksCGVJRShxP855#f7>66pt(`C~^}ZMjhhsb( zZ|k#AIkOl`;AZ>@-(W7xb=JJs5S7HOFh2G~4Zu}hA^IPM%(wt^;2~RofeK~9Kh41M zU<~R-P!TJI(XcjZh7B+kwn7bj5Ng0B3_g*m(nSjZt&%Q$Z zwdU)&kQjGiQaptk`5jaUAE0LZ8WZ9dR8GXcYSuIfYM{ZG1jB5-4C?*5sP|f-BGC(V z#7}Z545JY9nwim99IpCxI>B+c6-VA+D`KIWW`@hLC-qdf%#l1EM^XRJ)<@lToDtN& z;Ak9t#|+qe*X)+KsDZe7C}`#tQITkj39ub1+4`b#VK6E(^H9mP5%u10m=e#RmhLg? zxqmSQCb?&ia8$i8>Kv$!wC_4~DJXPJPz`s*o%k~k`yJcA(n%1GQB5Fgw1(rI_|H@y|qIKLxGLeawjepgK(R#LO@wDvQHW zCs-tEDXOEAvLWWcV^|a4U`Z_f)O>b~K)t^YW8f)_hUcFWe}(i47vvMvKtACVjQ`AR zlZB{|r+RMAg)FEUmBzeS2Nlv$_Wlgi5^Tljcor40OQdLd0L@%${vM ziW<;6)X2Rr%)k<24(i!39BZID9*vsWOjL3$z?ira*Wd=!QZ#sJ2Gj-XQt#zbs6ycc zYDCFjF&M0f`O(E9xCIO1OH{|1|2FjosI~te>gZjLdjAj>!_TNC4S#Jqu7`?D6HI_^ ze|zH>9K(f)7#EYhF&zb?W>^8eAI($F%kZb8qh^l!`D!2dIuNdV+=&-AM*po zbo6ok3O2_ZsN5*}#Z0t3s^01g@z-|g&V>*hfI5&Cqh@s2dIlB3tEl9BfJ(Z*u_OLK zg|z)w({OjxfCi%`G9FXm64b8PgN5+(SK^F9O zh-vUMDw0XQo7~BYO2Q(T3+tl>I0{SPM9hh&T?%^f6DlOJe;89>a_X5;OHc$AsY>>K zZB&CTtQ}AT>VaCy>8OwGH8>nkpxUYQFP&p!)UI%!QBcQu|1&c$hUzE^HLxmJ2b<$* z+=g0$Vf-kn0Zc?ia5@gebvOeU?3-|hAEvCIU*P)S@0)m|mkfSRBt z(q7WPGmL_^)f`k-FG6j%4X6=sMTPhzY5?~!2fjiLFlB5{API}3+G&81*bJ4-i!m5i zp$2dQl?xZq)q(Peg0eb(95aCQsI1O~#jrfK#!;xGd4{Z(lQ*s>@H?RV@jQVawFY8W z?w>++R5-pT@L?5&8t?#At}R6kU}Jm_=RbvmT#y$q2p?fijF!L*C@*SeB~VFO#@6ej zvc0Lb7b;?7FdHsFMc|0Ne;U>PJ$v0r=z0SCF=j$f;Aky}p*+wX_2N9#k}S3L&8Xe6 z3zgM}P-}eB)-PfS>Nip6MVdq&rwkTHMR)|N-D$Qy$EBcTSc3}L?-+(>P$$@bs2Rsk zYz#()t^lgRGMF0cU^?uEI`Jl;-d~E!kxiHZub`IpBdT9FQ4;e)4%7>!P!Ci?Wqn5s z#v!OsFGMBdR#eBQQ3HC6TEb7LiNs23B9jy~(DbP5x$X7BNF-gSGzHDDGAh)~P%m^v zg?5OokFm}|b+`%xOJO~Piohw<5G+Q!H;EPKMEKR*92IDpi(*D0pp&b`KVgxox zZe}_SL#VI9HuxuMpy4SzPBko#C2=P9#VeQ>tE4mo8H{PE&p}OSJ1XQyQ4_m^fuH}M zQP95rWN&y=nI(yb%KFTx`#Df&e1yH;5EX&us0KTrLfi}W{16<7E#_anp*oXQ#R8Evl>oMQ^Q4u+Y8rXGI!#_~lFkw2g@3Ue* z>eX>D9z*3)RC@Nm_G5$eW(EUL9gRSpfS)lpe#b1BGlL0bb!&6fbKUVW_CaNTr6BWJ z(h?P!-%-i>2kQAJs2q9`?=aZw( zgUpx*Ls9n|p$6U=J)D?Rur~E+nLL57W=~uS8c~7F=E1_4k$O|yhAwI;!m|*18fb*7 zcgyN=_TqF@4%EzM+G&K!ndYcmXp7nfJ#2j}DiVIw61eLrgj4t(wf{e(wqf)TQ%{B( zNG8mMS5X~C%WjNsO@Zn#2$d5#Q4uMQibPpdZq!3<(+iJ7YUrzkq7!uJsjaX}+Nb8ZDPGwlx8&pQNaz%#5x=RfB>W>WELU zKdR$qxlJhBqFx+|3h89biL)^j52FV7+TQ<;id>95d{4kMs5MWI8dy=BjwSQ3|JPHv z#D#J=BCq*EaS~NeoX?!y4N%)=0#?Gi7?+lFhM9pBEZ}jraJ?m}<7D9`64_A`2}9*r zVbu0*fQoSUaQ45p!B8$J0)Es?m*8mJjLMBd5$3rHs3mHOIv09iFiu2uv>wOdHq>(^ z3Yx61iE5`cYJh!Ekr?YzP*O}n4PXwY$5p5!^e8I3Z=weJ-Wscr={P;A!4jzFYGEGi zgjsP8>T~}9hT|Q~jY$ie4?8!Kf@a(wwN1vL_USZRUyd62MpWnyqC$5SHNYpR_r9YB z60?YjOj=Ysg;3kMBC4G>r~|Gq^1kcLqM+nikDB2g)Cm7Xb@T%ZVZ5TIUIx`rZPa#c zgL=P<^=F(x{TEbw>3%Yi4Z|?%B~cUZiGiR0hua6nS!ba_wgUCw5!6~cm(RbF{pN?pmxzR4DA2)6xMQKFDe&06gLM+AJohSqCznNion(A5ZwQP7AYQ5{vrK$fGjx`(~r zA2s9QwmuH^zTehoqZ(d{irjh(!F^a5AES~qLrIUb5(}1O|Lf?y%>}*alrqT^*BXL4 zprTMmZ4=Cb!|e4Hs3hEv3h^b>3~!^7^@Y9fjWm%=g&I&+Tdx|){@08faiIWq!3bPz zAGm^Q=ppL4uUG`*l{S$mXRU^saXr+Mv_lPSAZo@_P)oTQm6Y32Nqowspc&poz4!qY ziC9r4v`JA*lM1yPGNG0x4Ao&7)O&SMOVa`Meh<`#(I8aE!>yB1=fgbIhm(7Xf;u>h zdhr_S%zlV!@CmBJzfqy}lraNIh?+?T)cXZcxl$ZkU>Q^gD^TsOK}B#IHpF8{WHLFy zWj%pE;V6u1@Fi+yo^r;-{+hu_T`fW+S7ZZgck3^xELwp2I68>RmY0|d6O}ioe{sxC zy(#MXU#x4ae^_7RSMDdNV5Skf#gj$PY;B2$DvAWi|7|DCvQB(SCjakXm zQ(8l?F82$e7HtwLmVQ)h=T;(3bzwOdlum0=!98s2$59>JMSU#2#-n&7!Z%`ZeGwREqQ_ajc4JzVUQ1811DCnpuVsDf{ot0Is4N)H}ZBh9?2KD@O zdw&kjpuWQ1|EapkjSAMj)}_`zQ5*O>G7;BFQp1ciH)_KcM2)yQYK=OgX51UKvnQiw zwg@%z)u`vTqLywSYJi7O&mTjj|5Yr6FHw=oQd6HQd`&D&K^w9omc*W@rPz#>@BnIe z#HnRo%!rCm1ghgm)IchuKHln~a-lD3V@^d4Xc_7NSdCS1EykgL=N}5%R=(OM*+Ni} zD1=$D25QFrP#w9bvvNG4<}f*M$iIwsVKP!r6C8b}^gjugPa*VLjEG^5(6 zY;TT=Kz9trA*hZQVhFB5&EPynVTQUM=NY!bQCPX2>EN98D(a}agKGaRsy$DA_P;K~ ztM73}Vmj1=i?IN1#nSi`gE40VGtkPY0oF%_xGgFo{ZUJ>*?JBY^4F*tzr!B*1@&I1 zhV1`h6b3gm7j~nP=Ct(|cB1|YHS-3IOb!e~MQl1Mw2M)pUv1rv!PI|8P4FS=x%a50 z`G!iu=x$@vaca!Pg-~pT4Nx!sh8p>4)WLB9tK%CC$5Ktq^}d*mx*x0I9t_6VP0gC; zL=7-6X2N2q3AoMejn1f$46u&3&bRkBpkDY5wM575{Try6yhIJyX=V=kMTpY8o<&CLlG7j-?cH3MpZp{RCB zppvaDs=XShiM9;X*?+w$Waq*t)Ckw3*6IvuV3$!x<{ebhy+UofZ}xiD7AB8NvIDXQK5m`wZsI0fy?Tc{D<$D#NRl?y#va^1t1Fg!~AaVrz*wXID< zzo9xhf?9%8sF2@4b^O}i|AC5>uZ{VsF%h~-s@xRvU}emO15qJgg&OH*R7Cbze@D&q z6e=g~pq~2+HIVnH2z@~50T8awwuc%1v#IkrAHG#yP%z*N^6m-C} zww^^bSfsP*s4QM$?dzf%&e_%D)WiH(9LJ$TejN4Q8S8bNO#Lxl#Xj9U&T_2M-TeIh z7N<~m`}Z&-jn&gMlpJetBP}X&yKz)H(g36`67|fFXi3ha*-}E;#+cdx&KnF1+*YBYk^8Re@$3dMFX;9aL zP}?iSUeALXPytlrDx;RF5$d^i*dM#1a^^9*3dsu!YWN3gt-S+H2k}rLPlozf&4Svl zQK)R5i8?=Sp*s3%jWNhXG6|~P%&0Fk*--yDv zWVS+mZg)jRYzpf6*{F_Iqh_|--am*+x)Z3GKSZ_j1GVI_n7H0^(@;>up{S8nv(`bq z&3Ef&I6sB_>hYAIq3Gc!z!8bDrDE)+yXv@|NzHBq0gjZhO9hz!7WMo{o_!H<`4 zCMr~&hnwUXi5kdQ)EfIyxw0A+f$jGCQCq)(djBufQR^LHA{m4lSZ>t&MKDy~|I1NO zsCuE+auO;Mn=u4;qF%U*+LkX-`#Ql$6T&R0fkmJqRSA{#6H!Yz)w&4P?s`<{w_*(K z|05LC!D;I?-Jt#$HS?GD`e#(f(MFjyOoQqm7wWm9s3j?jia-O@F6v?H6HyUcj!MdH z=;~|p2@29X+T18+t$~_J8&v2zqSmr6Dv5@o1~dir6Vggl$NNy9|Cdo6{)ZY!!e318 zgrb(F&M)kL-RQ{$Ex{yI$XBDX_8h9izfei@-uewS1K$|)Gha$na-~Ie_!BCkl~ECD zfI8UP+50^(aK4Noi}m1qE~vvbm>UnH8hndd+r(qdpZI0N8q}9yF?@%LMBZ^`ppmHd zDxuc8zO^Z;{nn_74nYlIwo5@H-i8X@5mbY>P$T~vwFKW$N3CbP`DPP@>Zls3;l`*X z>WhlZaMbfNP)o5Dl^eHF&%Z$}fg5LnIom@}p)ZHpx7|>Y7=qPsEh;I$VtMpTG&8P< zdcGDO#+J68b&|=6aMT1UqXtp~6`6s^KwM{-DL8Xc4{k#>xEnR26WAOt;V2BB%pYNR zxQ}(IJ5x-9^-ycv1ob_l9qL18fxW&1)!soYf`0_+?7tXOO>!kc?aMT%(1zj=ENrju zKrPjATfd6Us6RtJUw)byNFCH}XoR8I6SX}TpxR%JfukC$)4y|&f<~UmZz7NewMIdx z7m8p7tc1PMk4mDL)6G||OsJ67MeUNtsI_m6#c?<)A_q`8^$D9|v>EJw?cY`uauG)UIkcoBgj4 zb(?J(o{O5amLU#l;)6=$o(Ru^5#`p18e1)3G?71eQ3o$SCU8v-K zHkbXMheC>ZW+r8^5A|NCnLb4&<3D%|W6n1Xp2f1%FQM+ISzvM_2kO8og4)KVQ4y_! znn+93#Aczk>F+KD?aM2u7oMX!{)S4DcneKVB*lu(Q2)A2=$aLbezc`m?Cra0S)T z6V$*zpe7Q1nMuNwSe1GN>i$U7{pqIeIx8tCyLZ|LoaG+p5cR~U$Xvvl_yl!;6kcK0 zuoWs-rlEGrdepW%j*7q?48|Xr4Ku7X&zD8jTVUW{QyW7egbT}1BRh@C&fBP&y+iE| zXO)RS3RJxe>NB7bR>xU59-rF#y;hqJ$D#(d3^lMlSQ4*eg!X^xHRkNEj$Np?M|FG& z72*e|uW0Wu7?b~MB2f^Pd@WGlpt_^p>xJ3{!%!2Nh&t;Rq6YpO>bdh6`2GJ~3QDF= zsI~R1HKC7nazpgXs%) z#grS_|5GW9-e^8#Qf@M#Y=@J$z5~Z%nayVAXHeVjZ`8>azQq%GzZXVQkG9o(JeNb| z$}DVzhfoJqx^4W(g%wdt7kj(w3H<9K<+ht7Jc!+NV~58XfCI3ShXV*T@?yKpU$kk2 z5!A0@7L32!BxQco8n;44Y&h!vb_~ZGsG~UH9`g%}axR5aTZ7vgSh?=*1xCUS1T%38td|M7XYLc@qD%l30cGGy&fwcwI-gm5x znU9&A>W@Uob@osw#f`sFYm)c433V6jO?^D($A2*x!%mnP)k1xaFGq#+4k{;-pESu= z8y8XkfZ1{SDUY)Y_hBjQcUrrE{kM}sY%Ux{&Gb)fg9-jHNz@zl;sUIX_0E{*HlV)4 zy~4{F`>e+~iFffJuKCmB+`~@iOav;QH`jY%Nv;>TKs)sB^rjGoTTpBBNH;L-qR06Y zd*I(#>XIk$*V6M|HrG3&lJuu5=A77u(WoD>^^+Jy{W@yx(_b|cZH+alcg4UTQy-uZ zT`!^zl2fSj;0)^1>>BFqzKAI`KZEj_4RS%!!s3^;{Sx#nQH34|Ni@x7T}P zJnCam$vXW8`(H=wN-ih@J5UYnMIDi6P?5NaYUl}SAn#Bo<2U>XOWZUw8;E*;6vn_A zs1K+4sE&7_+BuAh#GkIca2@sFV@!wtS<~GzpAAJ&FV;j2ped?>cBl#TK!tc1Y9gai zpNb*T5YTipW`^x{cOg=aAspQ0Lyb=xdW0#rvSFe7F|MW_O5ruFRorncS{ zl`DNv9hSLc-miulSTkfmuJf}gI3rLEO+c;jG*pL6P?6b;`aWH+R z?9?-3HmrhLs@|xj{24WXp{RD|U=`emdj30Vf|(!MpZ_B$sDtjP8~v^0P@j79P}^}g zD&&_jCEh_r>xx>6 zK`&erqOn}i%on2e^CncNUfSzPUz**K6&2DFs8H9zyx7pz$Dt0e$*71-LnYk;EQ9}H zGc5DUeD7H1QW(L7^naV9b1{~reiYka^w*}LPN+}EzNlTW1uyD3tc`Qtm;t>)CD%LD z48Nly6Z@^%T?tVWO<{GjQ_zfxqPAHL)CtxJwdR9R9nM09@>f)YTTl({LM7=bd;cyf znV+I^C+<6wD>+c_MPe|PH+9$PKtT<4Lv=I^l~jJzK$cp!T8~&Sqn>+$djBJ8Nn*Y? zGmVGZ=Sfl9F9f|<2-Q!~fMi=$3VN{x>I7_S9~g@2U@B@Li%}8TjOy?V=ES?GgDcJl zV`5Yeq_U<%bsUU}U}jW*p&0o6Up{-GkhPd@@IWMLn^eFoSQDeLA8Kv);9NY88fdGJ zW?((BJoS;NnVv@7zk`a%D^&ZQPwX~!i4%*0Zp1;YT?W((rBS<~CaU8}sF|F%_b;K= z^dYLj=cufIgBsvBROn-UHXmxKP}?s8HLx)IN^+)oj;x*ns*<)Xe`weO-_DjWZsXV;$YcM)(bLU_JM{3GFb{2#=sb zcmfsri>L!6;SY0w^u+wscc5ne9Mxg$e@*04pgxRpq9R)m70HIEbD;}rg8fj*?EXSQ zp<8Ni{E7&d7WSEJT)J^x=3*o5oxA@;zj9&g}ZS@e3nfu9SyU^%X@ zL`C8iHpWCgZy?fLFpWNKdQi~*o`72G`KSo2Kqc8$%#KH~H~x(pXsc-6z`zG!De5Cp zp+16o|0?Qae2l~KE4ISH(Y=8mOzvW0`ghzI=EbR~HCm1u$OhC}?X>mdn1T8^493@} zjuOQ*6UcxXSYFijEsGjZ9cz2k$M!(fbJNh(h1K@PLDY-aP#r%-J@^?HVEkC#zzMk) z^#$XI^{(|Rs=ef~&Hdcg3aAOSwst{Hv~O&$8wioh1trCFRC3M5Y`6-8@hs-S*Qfzy zh~o|X3pnA{ji>?Vdxu*4AE*;C zehSk;Zqxx*8r4oc)SCA}eL7CWQ`-NR?2Sb!%|LddLV5!$VDwbpz*n(q7&s45GdhaB z@ET^t%Bj6hM(m0ILqBSOnbUX!e|Aitp=}bmlzl|DDlMJTa_ULMjex@LQK@Gr< z+K%f`Gu?t(f}^Mbok!)uLtB4~`k~bqWDG{VR~)reHBj%h$ISRM`f))J`+qKluwbt< z4gWx8ee;ZLBM%=oc$#{O%-+E710UcF>OHb}1OKXVjI7?kzkoLl)u1<b-8r^ZfZgh5cNZYc4nq^O%|SM14aUiyFXk zRPwAvZL>d74ZTI3h|%+!4uen=D2%#Z+t$0HcEwoSjr*~n_Wyu@qyK@lcd3!);_7?ndqP$%pNRQoHi67EB{9fep0 z%~z)GScv)>R0sD_N%9VrRR3Z&OkBu(1uKk-P-j%chM{IU7L{z%@EOiSJvXYbxjqNg z@6y8T|C$tH7tvZUVl0c(tk^$bPLncWl1P~VN!@L$yStNN2S@cVC$c28m0yX1w#m#rR?5H*Gh#KG!R0G>k?_EGe>N@H~ z{LA`}y&j{4c`l_j1FGY!sE8DDDd@wa3Th_3Fb_^cZO22X0sVnm%WGHzZ(|Y6Q__47 z=z#iecoMZl&oBojEM=0i2r38Wp!(U1S|axr1%>D_s(}=dX4^%e>NQbG(*re-u~?9! zc{*yXPnR|);$>8%9;0UX1@(U1C^M0q)(F%ARtg!A>r|(p5%)s9FbDPFvkMjK{iud- zp=SIBLosI=Z{WA&^-u$ufqHL|t*^j7)HmXL%u?3ul2ql)0P}_yr^?^m|ZiegHLtV|WiQqfW{l<;@Qmf1sYrUcr1!=S59m6KY!?L4C$N!C3U~ ze4x*#;^&P0^%2zU>uZ`NSZ7~=Jpe8g2%i~T| zB>zKK$xx)S*)|PP`*;~Do7Y-*qmuMEY9_BxOW>(u8qSRxU}a2=E$#I|sEN%%CEF!z zi?>ndOjK3&zg`$r)qFV2Kqb#o3~V!0!xvDy;TdYF-lNt!RyEUb0#vrAL@i+?hGPRf zfRj+|RIP5#{?^!?diol!d0|ow6T;=Fk#0iGbT?|dox!`9p{7~;e^JlHuVr@)PNp7# zJMjoM#KE;qM6X~u>UXd(X02mBBbvDsl%+dx2!_@*Yrh5+iQV`LPovg;cRiCMr*J*> zR~Uu!>YKCwF6Lr;Mr&Xu6xPtRQydk6>bM`m^0z>d6D)h-3oBN@tZCMKSFn$ghB*f#Nrsct?8gVY9`fey$R|&Tx(PVJy2^rz}81#W$NQm+wTgh z{kZK+$XlY`8-V&u8P<;duTanCg4SjqDpV&?N9=c0GRAFhk}3!lx^P=BhdMDEV=xXy zMPw0bDfeSe{1cU|Us2Cz=wOyOvIF~H2S+S!9uj=Ek2 zHNf7eT`>j~q4}r@tg+X3p?1$1)I_hLBKOFppppJ<{m+`HlX)N`s)JBe2PIJhsblYV zvG&6tt`9>k!D7^R#g|wRV|VsCO|TSd;0sWZaF0;Xuf?8XIgILJLOC9DQD2K~@EWSY z;$6)bjz(CA`foS^6Lm9R!RDhPdKN?RAJhc0bT{o5MlE4OWV^dgXA0UD!|jdfn4S7c zRPz0an)z*1uDnC-^OQYIgwk6>P@xS&EkSXdhLvy_-bQ`wHtT7Yx?4c@-)IWDF&~%X zI@HK(_A(!@LvSMX1iek@=b?`3t*D5E_3;M&W>hs)4h^>YQM>6^+=S2YAkOJ)KHM7h zY$l!@9#oI>JTc)uc9LO7wW^!=Z-Qn&S9;BnsIm3 zgY!|@za7=UDOAU|QM=#?>NDXb24k$zrk(?}3(BH)MJ;PHYbVrE?DnIeBpHed*)&un zmZBQojGOTc2448ZgmMgOm&~yqMGfdJ>bcM8!~d+lF=ik!QISoGJ} zYQ{}b4fR6Jd?0qmNw)q271~5&%}leQB2xf0kYcu88kJ*}Q8`cpBd`?)zW>jrplscY zg-NpCQQ7=$oLNinc(bpwq0aE)SOF_wIh=}W_!=tt{z66c19~ym1oN2^7d60wxC=|- zP3`}GC^W!J6U~>#+>=aw43^^hJ#2;^KaS18Yzt-EX~&I=Nn=4yb4|O~aW{ z^&(gn8(|nS?qsxbd(Fq`WvW7JV(tm`fSs1a#WBa#%ZVttVTudJZb_DQO|uvoey#6n0E5I6x2~ARLB}(LF|oM%U@AHLhVO2 z_yx5a;?6Z|oB?$`JF0`Ccn~XNdW<*Ew38EcfR#W!*9Emp+#wXS1S73eFdy{=r~#bC zjQGIbk2c>VQ({!M=SM}b82*GcQAs%owZ;cA1|CIq{0C|m+(stuI!`EE=fWpchvycU zkv&2k6n~*+{0}Ne;x04;PKkOx3+lPTsH40bYCxk=&(B58bR}xQ>#RF4@SmwXNI`3V z67}LW)LOqny%2Me8F6CNc1nY~o(a`(F4Vb@AGMUlQSDSkEoCe0fOAl};a%(v{C6}% zv7+{WoF(SPI+&As8w|q#VHVto%Hm5Hg1)8ZdMGMcYoG?u1r_T4sI?!8`hqeaHNo8& zjwevb`U72Uo21LkuhsHnDeC=EGueg8-V@flsBbi%Pz{DJHzAHfJy#v`Vms6>nTeXn zX4KlBx7Qz_BJ^W9`(GnWvcilwFRJ0HsF^fDtzm0a1Km*#4nu9f#i;Dxg<6_ZsGPWf zTAC-Q+<9sJ56e(bveMkIztS~p*^~D+s2OI^^ z)$kV7Qd~#nOzdCH{tv^f)SIJn${kHX`+J-9iuE6Bnzj54=V5=NmS);I;}Yv8>jBgZ z&sv{ao%QB=YOKNi{HO_zH1eORvKQ7`4`4qYxQJTAN*jzdP@%4e3Uv!qhaFH$GaNOu zv8d$RVCyGwB=y%AjJ-FS?L8ec=;!|p6cnN}sO|R=lQHAqO(xkQHk*B07Zv)UsN9%| zO3Fp{`X=iM>pgq_A5_xD-eLxx1C={r82HcBmY|>p>)RVGQ2VzlDk&$RI+}?(QdglO zvktZGwxE{gBr4mlp}yg~u=R{vO@zWx&;5kYu@bs!IDDH)hO*W^)@9ZUsK|J>n_S6- zT8e6@PqPLXjDt}FUVu7RR-*=V95ulkr~y1g?V@+v+5h^I=-pvv76Wx7F6w|tiz!%KiaZ0Z*b1t|aar6QV4r z&=o?ByfiAy+gQ6;`=F9(Fsgz1sF`g*&1@fP|DUq;x2S>si;Xb%Z)PB4F%wDdUZ*gP z8{hYu0sL>DnfYAQ+ATpX$u`sgkJ$R3IEVUO)N?=YH#ss9D^lNy+0k>r3@|5Zz(r6w zR~f78^S=p&yj)m^df^r-QUR1}i4w+B0w5X*C!~bCg48?1x zC5raDiBJ$KvbivU_J4Swz;8ZKp{<2VzFw%T9fKPA6jUUZ+WHpM7mg#?34Mpnd)-h6 z(nwTJjmPG=1`A;9Bj$(L;*$QI_7vLUR4j_0QTsgqQ4_jCsK}H3guMHjjK_+O#~t@i$3sO|dgglitmaMEnM{HTWNppvEu zYUce>4bMjnU_ELkhf&-0B%Z|=s3qNVii3#lRrIts@V_=Q`498{*fS<_b5Q*(bt!0s zzoHu6g9_a_R0p?h{UK_J-dN+GHMx=#wM1=Ek@TYmy2#cyp_Xbds{Ny={%+dq?h6Xa z)(@Byzo9zL_NPh0T&MwsVQnmdO>r9PV0nYZFzB55+i^`$kvoS?@CE8KqQZG|ba%lB z>eG?;UFQ@9t??Js_DFKUd`ByX;nXLf_VGb%gD+9JQS+i1a0}F0PrwjdgqrDb)Q8k< zR8l@g9bjLr(J$%SGmDjof*#C;daxks|BRCGv;Wcb@-Ro??0yn(QLVSQ5arjNM zhGDl%Ly_2z>lILuIe=QSvlxaqQ8^L+wwYiC)Ih?}ZBN0apzZY(74m;kktlG-WPdr- z5_LxXz%dH7ri-mdP@#Q>8o+zh{`THA9VbIYA}ea`^I~OedzbwmL}4=*G=TG{WPFAi z@oUuDI`_PR|9);V)OP!Z%Ifs@&01$eC2uiQMBAeV@D%mj7gSPuADE>|kE%yJaLw;< zYH&dh&ceXVP}}VYYUcN`3j6shKBiv&kr`m_$0j*Tpa#|n)y_oJ(L4inl>dr~z(&*r zciZa+T?z{6QPfQDqeA%+bwD^z^taUbltW#=h+3LEw*D3ssqd&9ivQHiJT>aWClu>r zC2WC9F)R9>nH+I*P*B4KQ4L3;Mpy@R@-;@yXc+3?7-#EqP#rHtg?cOM!{sPu!`t?L zwC84tlA|URih8dA5?R+NLqTib6xC24>o2HnI2$#99o7S={e1!z;yb8;zsE3)@t64p zMqz75%**w;s0g1zJ$DB)2KN68b0I(Kfi|dy2cVL35^C+%+v__~&;4QR_pBeSabB9G z2tq|76cyoGsDU>{z26%HfBrwlJ}?E9eDhEdIbg3}K@I3WD#V{qYnb4b328WL$%>)& zeH6CD8mJ?93pT`rf15~kL=9jtx;n9@P*C#Bv@S)>cmrw%yHIO)7nK7~QD4zM<4638 ziqxCe<^)Xi#(V)uf!bzSQ0GEPRL9lq^;U1#|GF@Q3)*f|Q4MWC4d^UtMmJCmJVmYD zC)9J<-i%*j|1^9R4C_MFfL7W2>roLrhIzFA&r(o_KTx4h z^4Vl*7K~555Nd{HQ905CbtM06>(j6x^^Hh_&J$G9CI83#+>j4zP(O^-G1(XMejALZ z{Xc|)Iv9@{=@Qg-T7~Lx11e;vQ6YYgN~Y*vO-Jcbxl$N4kt(S7TVhV^fclE&M@{e$ z>a*e^2LArvM+#~%#y7LCGhjaIWl$aV#bBIj?{C2n>eo;WJKs&R zs0h5X^{5{v!qw1??O~+$Lg#Ewy#Si;Bh~{{Ff%o2feCFT({lbN^+=%1#1tL)c6HxDf%HsZ53P+*#?@?3| z-9&}-q4gs!q#n~}uCGLG!(FJ)h?6)1Z=u?49?kUyvb9SzUto>4mtR$PQ>WB3AV{u>sfejC+Z8aJjd5Za7bm!7r$Nzbu~5iNfDeyCOz>Utrs1!IIQ#qs{|AF2S9s zNHt7gY=g>~?#L3lPG1UI>mhg#C!#{rHK8xC{rX@o>QgZ%?zi>lww@x9FYxaRMWS-y z6eTqRZU*IpDtwZ(q2m|~7Jq4|ylf)O;$FWfjq{rfz8$+-&DkuD?b737a z1Lq`a`<_R2^c?k_?=@Dz4>%AblllS&+FsNEPGNMH!gUHtp1Y{E`-<9bag&*lr9?HH z3Hi6I_*X4_P6`Z3VUnsuN;9(-sPFZ&u{l1m*UP0c6C8?~*cj_94E*>1R#8yscB2lQ z(^wmyqE5!2Qk$f!g-WLO*cpeQ2K*fF;#bsX$&EBVNBjQ+D%l#O^#wkbr(qEF^VYX% z+5eh(;&i^i&v>~|p>BX$>tVLO77I|nh#Fwb^yazDr~y<)?TRM0-V@dC2n@#ssDWL; zruY(jVWkZ0|9KSlWiV^nFvzTNKh(_shiYggmcm1*ZR!m++5Z#jKxt^}w=l4Tn3d~s zGx`F5VId3)QE!Y|dp~+{sY^j09xG65z8kd^M^W4BDr)2(Q72ZyOy+tz)Td)nR1#J| zodY#cp>K^P@VGTbW?$g1T$e@t6ul0Yp_@31kAJm}g97(qv#h?r51r|8$h4XAg+n|K^w;G31^qjpC=d$%cP-3})?*{;Ns9Xd z-|@Plw&Pyxiit}20)O#fC@Q2!QCXh3q`BSzi&9^NC-DaE#O0;T#F|8!r5%p0l5Y(K zt?@prgwIi5EW%5h&+ArLjrv|Jg>j>NfiIy|up;%@sE|HDZL8>Ie1Wgs126;iwb%tu zVJR$B)*Ms=%Ci5};V~|3!Nlc!&JH|+8o;3PzQF$$`Wh@py=Mip3wEK7?4wv2&*Df- zQ_;+PA+Dr;9hIcRD)|Dxc7KN2RbiEVfxkagy|QZxC93!wA8VGos?T|<2dbG*ztq)z z&S&bSQ3EYn!!$G+72>m~q>5eBXa4jXA5fo!RcWtBE%Rx)zc%}wy0?xm@IQYOy{U%p83iQ73B@R>0~QiL){AKT~sqf@bmn_24^H2mfMnOy9(Wx&Z2aq^(y)J=Yk6 zaiDdcbua4q+o+{^j*8R=RDb_sH0}QcO-&9Y#mv-Gqh2U(tzfN#guptwOjr{Ep>qw=J~2E*#8<~Yc6Q*24ZO(hYHaj*cWf1a-vpC z^J06{$u|U}@FwaY3unvjal;It}R4ib{?pR+D5&wGS0%> z_z=}_;5B~%nT2sPO{V1Td1Xag<6uh-A%(8FqnF6)ROc;CE+AgF096A zcmVU_kwBgO_kjXqcfO!z_yb#G>>l>x7yDD+i(@gor!VjalKW5tsnN?MZ8vOBeKTqT zse7AGxh$vw^}>5N0UKkNK6d|~pr9AdSg)Zz6CR?L;5jP0-=Jm^t*=?*w5VJugxY>h zFeCOt?Uw1N99e^EZ!;<)J5lXiKvy$ByN9`W5K8;D~=jKjsEO^FNOA8P)D6mGwo>~9F4j^8#S#eW|_5P^-HVf7Y;?`z*^K=A4MhML(GO>P$3Q;VxA8{wOa?3wC#|jujEXipa*B7l4k)b z^t(_?@*Aq*1E}u-mr)J9Lq#UqP*YFuA2&YA)5(8k{8mo~|L_T!Jxly6COq}D^G}*s zz*ED2XkwJ7uRr>vpxDg_WOv@I=g&PUucw>8>7)Xlp8lzm{LwpdXQV&J>O{b^y^z-+nyvTok`e#q~ttV%6_IQ^2BW8{C zjPUQCHOAxjN6rrN)ZN;0c8J$g$3JdvA#`{|? zEa3T{e+K`ps!{&oi$YS*Vbra)$oBtgYP0iyQ~ie)rS+8Z-(K{>Q{R7b@kq}yf7KqnP4IZC`M)e*>lxr*v7)k~ z@1&rUO#H(yKb_5FP*s2Qm21yU{4>@R@GSM8T+`Vz-yiX7kf)2k?ys#qHT}COkMUps zb%LjrzwO%Ip2_~}YYTZQZB4u`%Ht{Hue(0VQ`6z)Txb2%~mcQ)w_nzMVB0HL= zZXTE}->!5%@P7sQXC37g{>?j*dfNJr?g;S=^1s?KGW{<+Ih=pq+x2#m^G1G%$^=R4yj#+{G%{-8c?&lhik!8@b+`u_Fptn{<5TJ-+|zBRm! delta 36611 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 delta 36609 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