diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index b36d1990dbf..dc24e2aa63d 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -60,21 +60,21 @@ jobs: arch: ${{ matrix.arch }} build-deps-only: ${{ inputs.build-deps-only || false }} secrets: inherit - flatpak: - name: "Flatpak" - runs-on: ubuntu-latest - container: - image: bilelmoussaoui/flatpak-github-actions:gnome-45 - options: --privileged - steps: - # maybe i'm too dumb and fucked up to do CI. OH WELL :D -ppd - - name: "Remove unneeded stuff to free disk space" - run: - sudo rm -rf /usr/share/dotnet /opt/ghc "/usr/local/share/boost" "$AGENT_TOOLSDIRECTORY" - - uses: actions/checkout@v4 - - uses: flatpak/flatpak-github-actions/flatpak-builder@v6 - with: - bundle: orcaslicer.flatpak - manifest-path: flatpak/io.github.softfever.OrcaSlicer.yml - cache-key: flatpak-builder-${{ github.sha }} - cache: false \ No newline at end of file + # flatpak: + # name: "Flatpak" + # runs-on: ubuntu-latest + # container: + # image: bilelmoussaoui/flatpak-github-actions:gnome-45 + # options: --privileged + # steps: + # # maybe i'm too dumb and fucked up to do CI. OH WELL :D -ppd + # - name: "Remove unneeded stuff to free disk space" + # run: + # sudo rm -rf /usr/share/dotnet /opt/ghc "/usr/local/share/boost" "$AGENT_TOOLSDIRECTORY" + # - uses: actions/checkout@v4 + # - uses: flatpak/flatpak-github-actions/flatpak-builder@v6 + # with: + # bundle: orcaslicer.flatpak + # manifest-path: flatpak/io.github.softfever.OrcaSlicer.yml + # cache-key: flatpak-builder-${{ github.sha }} + # cache: false \ No newline at end of file diff --git a/.github/workflows/update-translation.yml b/.github/workflows/update-translation.yml new file mode 100644 index 00000000000..af97e606e6c --- /dev/null +++ b/.github/workflows/update-translation.yml @@ -0,0 +1,38 @@ +name: Update Translation Catalog +on: + # schedule: + # - cron: 0 0 * * 1 + workflow_dispatch: + +jobs: + update_translation: + name: Update translation + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.12' + + - name: Install gettext + run: | + sudo apt-get update + sudo apt-get install -y gettext + + - name: Update translation catalog + run: | + ./run_gettext.sh --full + git add localization/i18n/* + + - name: Commit translation catalog updates + uses: qoomon/actions--create-commit@v1 + id: commit + with: + message: Update translation catalog + skip-empty: true + + - name: Push changes + run: git push diff --git a/.gitignore b/.gitignore index df5239095e7..8ba5bbc4ffa 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,4 @@ src/OrcaSlicer-doc/ /deps/DL_CACHE **/.flatpak-builder/ resources/profiles/user/default +OrcaSlicer.code-workspace diff --git a/CMakeLists.txt b/CMakeLists.txt index 8854ab903de..b062604fba6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -121,6 +121,9 @@ if (MSVC) # C4244: 'conversion' conversion from 'type1' to 'type2', possible loss of data. An integer type is converted to a smaller integer type. # C4267: The compiler detected a conversion from size_t to a smaller type. add_compile_options(/wd4244 /wd4267) + # Disable warnings on comparison of unsigned and signed + # C4018: signed/unsigned mismatch + add_compile_options(/wd4018) endif () if (${CMAKE_CXX_COMPILER_ID} STREQUAL "AppleClang" AND ${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER 15) @@ -249,6 +252,22 @@ if (NOT MSVC AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMP # On GCC and Clang, no return from a non-void function is a warning only. Here, we make it an error. add_compile_options(-Werror=return-type) + # Since some portions of code are just commented out or put under conditional compilation, there are + # a bunch of warning related to unused functions and variables. Suppress those warnings to not pollute + # compilers diagnostics output with warnings we not going to look at + add_compile_options(-Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-label -Wno-unused-local-typedefs) + + # Ignore signed/unsigned comparison warnings + add_compile_options(-Wno-sign-compare) + + # The mismatch of tabs and spaces throughout the project can sometimes + # cause this warning to appear even though the indentation is fine. + # Some includes also cause the warning + add_compile_options(-Wno-misleading-indentation) + + # Disable warning if enum value does not have a corresponding case in switch statement + add_compile_options(-Wno-switch) + # removes LOTS of extraneous Eigen warnings (GCC only supports it since 6.1) # https://eigen.tuxfamily.org/bz/show_bug.cgi?id=1221 if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" OR CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 6.0) diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index 4eb026e1834..db3174b0e48 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-30 15:44+0200\n" +"POT-Creation-Date: 2024-07-30 10:20+0900\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -78,9 +78,6 @@ msgstr "" msgid "On overhangs only" msgstr "" -msgid "Auto support threshold angle: " -msgstr "" - msgid "Circle" msgstr "" @@ -100,6 +97,9 @@ msgstr "" msgid "Highlight faces according to overhang angle." msgstr "" +msgid "Auto support threshold angle: " +msgstr "" + msgid "No auto support" msgstr "" @@ -3857,15 +3857,6 @@ msgstr "" msgid "Total cost" msgstr "" -msgid "up to" -msgstr "" - -msgid "above" -msgstr "" - -msgid "from" -msgstr "" - msgid "Color Scheme" msgstr "" @@ -3929,10 +3920,10 @@ msgstr "" msgid "Cost" msgstr "" -msgid "Color change" +msgid "Print" msgstr "" -msgid "Print" +msgid "Color change" msgstr "" msgid "Printer" @@ -5730,13 +5721,18 @@ msgid "The file does not contain any geometry data." msgstr "" msgid "" -"Your object appears to be too large, Do you want to scale it down to fit the " -"heat bed automatically?" +"Your object appears to be too large. It will be scaled down to fit the heat " +"bed automatically." msgstr "" msgid "Object too large" msgstr "" +msgid "" +"Your object appears to be too large, Do you want to scale it down to fit the " +"heat bed automatically?" +msgstr "" + msgid "Export STL file:" msgstr "" @@ -6078,9 +6074,6 @@ msgstr "" msgid "Language selection" msgstr "" -msgid "Switching application language while some presets are modified." -msgstr "" - msgid "Changing application language" msgstr "" @@ -6255,6 +6248,12 @@ msgid "" "same time and manage multiple devices." msgstr "" +msgid "Auto arrange plate after cloning" +msgstr "" + +msgid "Auto arrange plate after object cloning" +msgstr "" + msgid "Network" msgstr "" @@ -7136,12 +7135,21 @@ msgstr "" msgid "Tree supports" msgstr "" -msgid "Skirt" +msgid "Multimaterial" msgstr "" msgid "Prime tower" msgstr "" +msgid "Filament for Features" +msgstr "" + +msgid "Ooze prevention" +msgstr "" + +msgid "Skirt" +msgstr "" + msgid "Special mode" msgstr "" @@ -7187,6 +7195,9 @@ msgstr "" msgid "Recommended nozzle temperature range of this filament. 0 means no set" msgstr "" +msgid "Flow ratio and Pressure Advance" +msgstr "" + msgid "Print chamber temperature" msgstr "" @@ -7280,9 +7291,6 @@ msgstr "" msgid "Filament end G-code" msgstr "" -msgid "Multimaterial" -msgstr "" - msgid "Wipe tower parameters" msgstr "" @@ -7372,12 +7380,30 @@ msgstr "" msgid "Single extruder multimaterial setup" msgstr "" +msgid "Number of extruders of the printer." +msgstr "" + +msgid "" +"Single Extruder Multi Material is selected, \n" +"and all extruders must have the same diameter.\n" +"Do you want to change the diameter for all extruders to first extruder " +"nozzle diameter value?" +msgstr "" + +msgid "Nozzle diameter" +msgstr "" + msgid "Wipe tower" msgstr "" msgid "Single extruder multimaterial parameters" msgstr "" +msgid "" +"This is a single extruder multimaterial printer, diameters of all extruders " +"will be set to the new value. Do you want to proceed?" +msgstr "" + msgid "Layer height limits" msgstr "" @@ -7823,10 +7849,7 @@ msgstr "" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "" -msgid "⌘+Shift+G" -msgstr "" - -msgid "Ctrl+Shift+G" +msgid "Shift+G" msgstr "" msgid "Paste from clipboard" @@ -7874,33 +7897,18 @@ msgstr "" msgid "Collapse/Expand the sidebar" msgstr "" -msgid "⌘+Any arrow" +msgid "Any arrow" msgstr "" msgid "Movement in camera space" msgstr "" -msgid "⌥+Left mouse button" -msgstr "" - msgid "Select a part" msgstr "" -msgid "⌘+Left mouse button" -msgstr "" - msgid "Select multiple objects" msgstr "" -msgid "Ctrl+Any arrow" -msgstr "" - -msgid "Alt+Left mouse button" -msgstr "" - -msgid "Ctrl+Left mouse button" -msgstr "" - msgid "Shift+Left mouse button" msgstr "" @@ -8003,24 +8011,12 @@ msgstr "" msgid "Move: press to snap by 1mm" msgstr "" -msgid "⌘+Mouse wheel" -msgstr "" - msgid "Support/Color Painting: adjust pen radius" msgstr "" -msgid "⌥+Mouse wheel" -msgstr "" - msgid "Support/Color Painting: adjust section position" msgstr "" -msgid "Ctrl+Mouse wheel" -msgstr "" - -msgid "Alt+Mouse wheel" -msgstr "" - msgid "Gizmo" msgstr "" @@ -8308,6 +8304,11 @@ msgstr "" msgid "No object can be printed. Maybe too small" msgstr "" +msgid "" +"Your print is very close to the priming regions. Make sure there is no " +"collision." +msgstr "" + msgid "" "Failed to generate gcode for invalid custom G-code.\n" "\n" @@ -8529,8 +8530,9 @@ msgid "Variable layer height is not supported with Organic supports." msgstr "" msgid "" -"Different nozzle diameters and different filament diameters is not allowed " -"when prime tower is enabled." +"Different nozzle diameters and different filament diameters may not work " +"well when the prime tower is enabled. It's very experimental, so please " +"proceed with caution." msgstr "" msgid "" @@ -8539,7 +8541,8 @@ msgid "" msgstr "" msgid "" -"Ooze prevention is currently not supported with the prime tower enabled." +"Ooze prevention is only supported with the wipe tower when " +"'single_extruder_multi_material' is off." msgstr "" msgid "" @@ -9659,6 +9662,86 @@ msgstr "" msgid "Pressure advance(Klipper) AKA Linear advance factor(Marlin)" msgstr "" +msgid "Enable adaptive pressure advance (beta)" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "" +"With increasing print speeds (and hence increasing volumetric flow through " +"the nozzle) and increasing accelerations, it has been observed that the " +"effective PA value typically decreases. This means that a single PA value is " +"not always 100% optimal for all features and a compromise value is usually " +"used that does not cause too much bulging on features with lower flow speed " +"and accelerations while also not causing gaps on faster features.\n" +"\n" +"This feature aims to address this limitation by modeling the response of " +"your printer's extrusion system depending on the volumetric flow speed and " +"acceleration it is printing at. Internally, it generates a fitted model that " +"can extrapolate the needed pressure advance for any given volumetric flow " +"speed and acceleration, which is then emmited to the printer depending on " +"the current print conditions.\n" +"\n" +"When enabled, the pressure advance value above is overriden. However, a " +"reasonable default value above is strongly recomended to act as a fallback " +"and for when tool changing.\n" +"\n" +msgstr "" + +msgid "Adaptive pressure advance measurements (beta)" +msgstr "" + +msgid "" +"Add sets of pressure advance (PA) values, the volumetric flow speeds and " +"accelerations they were measured at, separated by a comma. One set of values " +"per line. For example\n" +"0.04,3.96,3000\n" +"0.033,3.96,10000\n" +"0.029,7.91,3000\n" +"0.026,7.91,10000\n" +"\n" +"How to calibrate:\n" +"1. Run the pressure advance test for at least 3 speeds per acceleration " +"value. It is recommended that the test is run for at least the speed of the " +"external perimeters, the speed of the internal perimeters and the fastest " +"feature print speed in your profile (usually its the sparse or solid " +"infill). Then run them for the same speeds for the slowest and fastest print " +"accelerations,and no faster than the recommended maximum acceleration as " +"given by the klipper input shaper.\n" +"2. Take note of the optimal PA value for each volumetric flow speed and " +"acceleration. You can find the flow number by selecting flow from the color " +"scheme drop down and move the horizontal slider over the PA pattern lines. " +"The number should be visible at the bottom of the page. The ideal PA value " +"should be decreasing the higher the volumetric flow is. If it is not, " +"confirm that your extruder is functioning correctly.The slower and with less " +"acceleration you print, the larger the range of acceptable PA values. If no " +"difference is visible, use the PA value from the faster test.3. Enter the " +"triplets of PA values, Flow and Accelerations in the text box here and save " +"your filament profile\n" +"\n" +msgstr "" + +msgid "Enable adaptive pressure advance for overhangs (beta)" +msgstr "" + +msgid "" +"Enable adaptive PA for overhangs as well as when flow changes within the " +"same feature. This is an experimental option, as if the PA profile is not " +"set accurately, it will cause uniformity issues on the external surfaces " +"before and after overhangs.\n" +msgstr "" + +msgid "Pressure advance for bridges" +msgstr "" + +msgid "" +"Pressure advance value for bridges. Set to 0 to disable. \n" +"\n" +" A lower PA value when printing bridges helps reduce the appearance of " +"slight under extrusion immediately after bridges. This is caused by the " +"pressure drop in the nozzle when printing in the air and a lower PA helps " +"counteract this." +msgstr "" + msgid "" "Default line width if other line widths are set to 0. If expressed as a %, " "it will be computed over the nozzle diameter." @@ -9812,6 +9895,21 @@ msgid "" "Specify desired number of these moves." msgstr "" +msgid "Stamping loading speed" +msgstr "" + +msgid "Speed used for stamping." +msgstr "" + +msgid "Stamping distance measured from the center of the cooling tube" +msgstr "" + +msgid "" +"If set to nonzero value, filament is moved toward the nozzle between the " +"individual cooling moves (\"stamping\"). This option configures how long " +"this movement should be before the filament is retracted again." +msgstr "" + msgid "Speed of the first cooling move" msgstr "" @@ -10487,7 +10585,11 @@ msgstr "" msgid "Interlocking depth of a segmented region" msgstr "" -msgid "Interlocking depth of a segmented region. Zero disables this feature." +msgid "" +"Interlocking depth of a segmented region. It will be ignored if " +"\"mmu_segmented_region_max_width\" is zero or if " +"\"mmu_segmented_region_interlocking_depth\"is bigger then " +"\"mmu_segmented_region_max_width\". Zero disables this feature." msgstr "" msgid "Use beam interlocking" @@ -10827,9 +10929,6 @@ msgid "" "cooling is enabled." msgstr "" -msgid "Nozzle diameter" -msgstr "" - msgid "Diameter of nozzle" msgstr "" @@ -10909,6 +11008,11 @@ msgid "" "model and save printing time, but make slicing and G-code generating slower" msgstr "" +msgid "" +"This option will drop the temperature of the inactive extruders to prevent " +"oozing." +msgstr "" + msgid "Filename format" msgstr "" @@ -11485,6 +11589,31 @@ msgstr "" msgid "Temperature variation" msgstr "" +#. TRN PrintSettings : "Ooze prevention" > "Temperature variation" +msgid "" +"Temperature difference to be applied when an extruder is not active. The " +"value is not used when 'idle_temperature' in filament settings is set to non " +"zero value." +msgstr "" + +msgid "Preheat time" +msgstr "" + +msgid "" +"To reduce the waiting time after tool change, Orca can preheat the next tool " +"while the current tool is still in use. This setting specifies the time in " +"seconds to preheat the next tool. Orca will insert a M104 command to preheat " +"the tool in advance." +msgstr "" + +msgid "Preheat steps" +msgstr "" + +msgid "" +"Insert multiple preheat commands(e.g. M104.1). Only useful for Prusa XL. For " +"other printers, please set it to 1." +msgstr "" + msgid "Start G-code" msgstr "" @@ -12035,12 +12164,6 @@ msgid "" "Larger angle means wider base." msgstr "" -msgid "Wipe tower purge lines spacing" -msgstr "" - -msgid "Spacing of purge lines on the wipe tower." -msgstr "" - msgid "Maximum wipe tower print speed" msgstr "" @@ -12066,9 +12189,6 @@ msgid "" "regardless of this setting." msgstr "" -msgid "Wipe tower extruder" -msgstr "" - msgid "" "The extruder to use when printing perimeter of the wipe tower. Set to 0 to " "use the one that is available (non-soluble would be preferred)." @@ -12108,6 +12228,30 @@ msgstr "" msgid "Maximal distance between supports on sparse infill sections." msgstr "" +msgid "Wipe tower purge lines spacing" +msgstr "" + +msgid "Spacing of purge lines on the wipe tower." +msgstr "" + +msgid "Extra flow for purging" +msgstr "" + +msgid "" +"Extra flow used for the purging lines on the wipe tower. This makes the " +"purging lines thicker or narrower than they normally would be. The spacing " +"is adjusted automatically." +msgstr "" + +msgid "Idle temperature" +msgstr "" + +msgid "" +"Nozzle temperature when the tool is currently not used in multi-tool setups." +"This is only used when 'Ooze prevention' is active in Print Settings. Set to " +"0 to disable." +msgstr "" + msgid "X-Y hole compensation" msgstr "" @@ -12371,6 +12515,14 @@ msgstr "" msgid "Currently planned extra extruder priming after deretraction." msgstr "" +msgid "Absolute E position" +msgstr "" + +msgid "" +"Current position of the extruder axis. Only used with absolute extruder " +"addressing." +msgstr "" + msgid "Current extruder" msgstr "" @@ -12413,6 +12565,12 @@ msgstr "" msgid "Vector of bools stating whether a given extruder is used in the print." msgstr "" +msgid "Has single extruder MM priming" +msgstr "" + +msgid "Are the extra multi-material priming regions used in this print?" +msgstr "" + msgid "Volume per extruder" msgstr "" @@ -12557,6 +12715,14 @@ msgstr "" msgid "Name of the physical printer used for slicing." msgstr "" +msgid "Number of extruders" +msgstr "" + +msgid "" +"Total number of extruders, regardless of whether they are used in the " +"current print." +msgstr "" + msgid "Layer number" msgstr "" diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index 20650d3d015..e27d124ecc3 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-21 20:03+0800\n" +"POT-Creation-Date: 2024-07-30 10:20+0900\n" "PO-Revision-Date: \n" "Last-Translator: Carlos Fco. Caruncho Serrano \n" "Language-Team: \n" @@ -57,7 +57,7 @@ msgid "Highlight overhang areas" msgstr "Resaltar las zonas de voladizos" msgid "Gap fill" -msgstr "Rellenar hueco" +msgstr "Rellenar huecos" msgid "Perform" msgstr "Realizar" @@ -72,10 +72,7 @@ msgid "Smart fill angle" msgstr "Ángulo de relleno en puente" msgid "On overhangs only" -msgstr "Solo voladizos" - -msgid "Auto support threshold angle: " -msgstr "Ángulo del umbral de soporte automático: " +msgstr "Solo en voladizos" msgid "Circle" msgstr "Círculo" @@ -87,7 +84,7 @@ msgid "Fill" msgstr "Llenar" msgid "Gap Fill" -msgstr "Rellenar hueco" +msgstr "Rellenar huecos" #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" @@ -96,6 +93,9 @@ msgstr "Permite pintar solo las facetas seleccionadas por: \"%1%\"" msgid "Highlight faces according to overhang angle." msgstr "Resalte las caras según el ángulo del voladizo." +msgid "Auto support threshold angle: " +msgstr "Ángulo del umbral de soporte automático: " + msgid "No auto support" msgstr "No auto soportes" @@ -486,7 +486,7 @@ msgid "After cut" msgstr "Después del corte" msgid "Cut to parts" -msgstr "Separar en piezas" +msgstr "Cortar en piezas" msgid "Perform cut" msgstr "Realizar corte" @@ -529,8 +529,8 @@ msgstr "Corte en Plano" msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" msgstr "" -"Los bordes con pliegues pueden ser causa de la herramienta de corte, " -"¿quieres arreglarlo ahora?" +"Los bordes no plegados son causados por la herramienta de corte, ¿quieres " +"arreglarlo ahora?" msgid "Repairing model object" msgstr "Reparación de un objeto modelo" @@ -598,7 +598,7 @@ msgstr "Mostrar estructura de alambre" msgid "%1%" msgstr "%1%" -msgid "Can't apply when proccess preview." +msgid "Can't apply when process preview." msgstr "No se puede aplicar cuando la vista previa del proceso." msgid "Operation already cancelling. Please wait few seconds." @@ -667,7 +667,7 @@ msgstr "Superficie" msgid "Horizontal text" msgstr "Texto horizontal" -msgid "Shift + Mouse move up or dowm" +msgid "Shift + Mouse move up or down" msgstr "Shift + Mover ratón arriba u abajo" msgid "Rotate text" @@ -1016,7 +1016,7 @@ msgstr "Orienta el texto hacia la cámara." #, boost-format msgid "" -"Can't load exactly same font(\"%1%\"). Aplication selected a similar " +"Can't load exactly same font(\"%1%\"). Application selected a similar " "one(\"%2%\"). You have to specify font for enable edit text." msgstr "" "No se puede cargar exactamente la misma fuente(\"%1%\"). La aplicación " @@ -1676,7 +1676,7 @@ msgstr "Ancho de Extrusión" msgid "Wipe options" msgstr "Opciones de limpieza" -msgid "Bed adhension" +msgid "Bed adhesion" msgstr "Adhesión a la cama" msgid "Add part" @@ -1848,7 +1848,7 @@ msgid "Scale an object to fit the build volume" msgstr "Escalar un objeto para que se ajuste al volumen de impresión" msgid "Flush Options" -msgstr "Opciones de Caudal" +msgstr "Opciones de Flujo" msgid "Flush into objects' infill" msgstr "Purgar en el relleno de objetos" @@ -1929,7 +1929,7 @@ msgid "Add Primitive" msgstr "Añadir Primitivo" msgid "Add Handy models" -msgstr "Añadir modelos prácticos" +msgstr "Añadir Modelos Prácticos" msgid "Add Models" msgstr "Añadir Modelos" @@ -1962,12 +1962,6 @@ msgid "Auto orient the object to improve print quality." 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" - -msgid "Split the selected object into mutiple parts" -msgstr "Dividir el objeto seleccionado en múltiples piezas" - msgid "Select All" msgstr "Seleccionar Todo" @@ -1984,7 +1978,7 @@ msgid "Arrange" msgstr "Organizar" msgid "arrange current plate" -msgstr "Posicionar la bandeja actual" +msgstr "Ordenar la bandeja actual" msgid "Reload All" msgstr "Recargar todo" @@ -2238,8 +2232,8 @@ msgid_plural "Following model objects have been repaired" msgstr[0] "Se ha reparado el siguiente modelo de objeto" msgstr[1] "Se han reparado los siguientes objetos del modelo" -msgid "Failed to repair folowing model object" -msgid_plural "Failed to repair folowing model objects" +msgid "Failed to repair following model object" +msgid_plural "Failed to repair following model objects" msgstr[0] "No se ha podido reparar el siguiente objeto modelo" msgstr[1] "No se han podido reparar los siguientes objetos del modelo" @@ -2460,7 +2454,7 @@ msgid "AMS not connected" msgstr "AMS no conectado" msgid "Load" -msgstr "Carga" +msgstr "Cargar" msgid "Unload" msgstr "Descarga" @@ -2703,7 +2697,7 @@ msgstr "Tarea de envío de impresión fallida." msgid "Service Unavailable" msgstr "Servicio No Disponible" -msgid "Unkown Error." +msgid "Unknown Error." msgstr "Error Desconocido." msgid "Sending print configuration" @@ -2878,7 +2872,7 @@ msgstr "" "Ajustes de información de ranura AMS mientras la impresión no tenga soportes" msgid "Factors of Flow Dynamics Calibration" -msgstr "Factores de Calibración de Dinámicas de Caudal" +msgstr "Factores de Calibración de Dinámicas de Flujo" msgid "PA Profile" msgstr "Perfil de Avance de Presión Lineal" @@ -2902,7 +2896,7 @@ msgstr "Necesitas seleccionar el tipo y el color del material primero." #, c-format, boost-format msgid "Please input a valid value (K in %.1f~%.1f)" -msgstr "Por favor, introduzca un valor válido (K en %.1f~%.1f)" +msgstr "Por favor, introduzca un valor válido (K in %.1f~%.1f)" #, c-format, boost-format msgid "Please input a valid value (K in %.1f~%.1f, N in %.1f~%.1f)" @@ -2987,7 +2981,7 @@ msgid "%s does not support %s" msgstr "%s no soporta %s" msgid "Dynamic flow Calibration" -msgstr "Calibración Dinámica de Caudal" +msgstr "Calibración Dinámica de Flujo" msgid "Step" msgstr "Paso" @@ -3014,7 +3008,7 @@ msgid "Print with the filament mounted on the back of chassis" msgstr "Imprimir con el filamento montado en la parte posterior del chasis" msgid "Current Cabin humidity" -msgstr "Humedad actual de la cabina" +msgstr "Humedad de cabina actual" msgid "" "Please change the desiccant when it is too wet. The indicator may not " @@ -3023,9 +3017,9 @@ msgid "" "temperatures also slow down the process." msgstr "" "Cambie el desecante cuando esté demasiado húmedo. El indicador puede no ser " -"preciso en los siguientes casos: cuando la tapa está abierta o se cambia el " -"paquete de desecante, tarda horas en absorber la humedad, las bajas " -"temperaturas también ralentizan el proceso." +"preciso en los siguientes casos: cuando la tapa está abierta o al paquete de " +"desecante. Este tarda horas en absorber la humedad, y las bajas temperaturas " +"también ralentizan el proceso." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -3162,13 +3156,13 @@ msgstr "" "automáticamente cuando el filamento se termine" msgid "Air Printing Detection" -msgstr "Detección de Aire de Impresión" +msgstr "Detección de Aire en Impresión" msgid "" "Detects clogging and filament grinding, halting printing immediately to " "conserve time and filament." msgstr "" -"Detecta los atascos y el triturado de filamento, deteniendo la impresión " +"Detecta los atascos y el rascado de filamento, deteniendo la impresión " "inmediatamente para ahorrar tiempo y filamento." msgid "File" @@ -3260,7 +3254,7 @@ msgid "" "Error message: %1%" msgstr "" "Error al copiar el G-Code temporal en el G-Code de salida. ¿Quizás la " -"tarjeta SD está bloqueada contra escritura?\n" +"tarjeta SD está protegida contra escritura?\n" "Mensaje de error: %1%" #, boost-format @@ -3496,10 +3490,10 @@ msgid "Bed Leveling" msgstr "Nivelación de la cama" msgid "Timelapse" -msgstr "Intervalo" +msgstr "Timelapse" msgid "Flow Dynamic Calibration" -msgstr "Calibración Dinámica de Caudal" +msgstr "Calibración Dinámica de Flujo" msgid "Send Options" msgstr "Opciones de envío" @@ -3711,7 +3705,7 @@ msgstr "" "El valor se restablecerá a 0." msgid "" -"Too large elefant foot compensation is unreasonable.\n" +"Too large elephant foot compensation is unreasonable.\n" "If really have serious elephant foot effect, please check other settings.\n" "For example, whether bed temperature is too high.\n" "\n" @@ -3792,18 +3786,21 @@ msgid "" "Reset to 0." msgstr "" "seam_slope_start_height debe ser menor que layer_height.\n" -"Restablecer a 0." +"Reiniciar a 0." msgid "" "Spiral mode only works when wall loops is 1, support is disabled, top shell " "layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "" "El modo espiral sólo funciona cuando los bucles de perímetro son 1, el " -"soporte está desactivado, las capas superiores de la cubierta son 0, el " -"relleno de baja densidad es 0 y el tipo de timelapse es el tradicional." +"soporte está desactivado, las capas superiores de cubierta son 0, la " +"cantidad de relleno de baja densidad es 0 y el tipo de timelapse es " +"tradicional." msgid " But machines with I3 structure will not generate timelapse videos." -msgstr " Las máquina con estructura I3 no generarán videos de timelapse." +msgstr "" +"Cuando imprima por objeto, las máquinas con estructura I3 no generará videos " +"timelapse." msgid "" "Change these settings automatically? \n" @@ -4028,7 +4025,7 @@ msgstr "" "añadirlo al G-Code)" msgid "Search gcode placeholders" -msgstr "Buscar marcadores de posición gcode" +msgstr "Buscar marcadores de posición G-Code" msgid "Add selected placeholder to G-code" msgstr "Añadir el marcador de posición seleccionado al G-Code" @@ -4209,15 +4206,6 @@ msgstr "Tiempo total" msgid "Total cost" msgstr "Costo total" -msgid "up to" -msgstr "hasta" - -msgid "above" -msgstr "sobre" - -msgid "from" -msgstr "desde" - msgid "Color Scheme" msgstr "Esquema de colores" @@ -4281,12 +4269,12 @@ msgstr "Tiempos de cambio de filamento" msgid "Cost" msgstr "Coste" -msgid "Color change" -msgstr "Cambio de color" - msgid "Print" msgstr "Imprimir" +msgid "Color change" +msgstr "Cambio de color" + msgid "Printer" msgstr "Impresora" @@ -4309,7 +4297,7 @@ msgid "Model Filament" msgstr "Modelo Filamento" msgid "Prepare time" -msgstr "Planificar tiempo" +msgstr "Tiempo estimado" msgid "Model printing time" msgstr "Tiempo de impresión del modelo" @@ -4528,7 +4516,7 @@ msgstr "" "Mantiene el dispositivo con un rendimiento óptimo." msgid "Calibration Flow" -msgstr "Calibración del Caudal" +msgstr "Calibración del Flujo" msgid "Start Calibration" msgstr "Iniciar Calibración" @@ -4634,10 +4622,10 @@ msgid "Export G-code file" msgstr "Exportar archivo G-Code" msgid "Export plate sliced file" -msgstr "Explorar archivo laminado de bandeja" +msgstr "Exportar los objetos laminados de la bandeja a un archivo" msgid "Export all sliced file" -msgstr "Exportar todos los archivos laminados" +msgstr "Exportar todos los objetos laminados a un archivo" msgid "Print all" msgstr "Imprimir todo" @@ -4781,10 +4769,10 @@ msgid "Export 3mf file without using some 3mf-extensions" msgstr "Exporte el archivo 3mf sin usar algunas de las extensiones" msgid "Export current sliced file" -msgstr "Exportar archivo laminado actual" +msgstr "Exportar la bandeja activa laminada a un archivo" msgid "Export all plate sliced file" -msgstr "Exportar todo el archivo de bandeja laminada" +msgstr "Exportar todas las bandejas laminadas a un archivo" msgid "Export G-code" msgstr "Exportar G-Code" @@ -4802,7 +4790,7 @@ msgid "Export" msgstr "Exportar" msgid "Quit" -msgstr "Quitar" +msgstr "Salir del programa" msgid "Undo" msgstr "Deshacer" @@ -4811,7 +4799,7 @@ msgid "Redo" msgstr "Rehacer" msgid "Cut selection to clipboard" -msgstr "Cortar la selección al portapapeles" +msgstr "Cortar selección al portapapeles" msgid "Copy" msgstr "Copiar" @@ -4904,16 +4892,16 @@ msgid "Pass 1" msgstr "Paso 1" msgid "Flow rate test - Pass 1" -msgstr "Test de Caudal - Paso 1" +msgstr "Test de Flujo - Paso 1" msgid "Pass 2" msgstr "Paso 2" msgid "Flow rate test - Pass 2" -msgstr "Test de Caudal - Paso 2" +msgstr "Test de Flujo - Paso 2" msgid "Flow rate" -msgstr "Test de Caudal" +msgstr "Test de Flujo" msgid "Pressure advance" msgstr "Avance de Presión Lineal" @@ -4925,7 +4913,7 @@ msgid "Orca Tolerance Test" msgstr "Test de Tolerancia Orca" msgid "Max flowrate" -msgstr "Test de Caudal Máximo" +msgstr "Test de Flujo Máximo" msgid "VFA" msgstr "VFA" @@ -5058,7 +5046,7 @@ msgid "" "2. The Filament presets\n" "3. The Printer presets" msgstr "" -"¿Quieres sincronizar tus datos personales desde la Bambú Cloud? \n" +"¿Quiere sincronizar sus datos personales desde Bambú Cloud? \n" "Esta contiene la siguiente información:\n" "1. Los Perfiles de Proceso\n" "2. Los Perfiles de Filamento\n" @@ -5069,7 +5057,7 @@ msgstr "Sincronización" msgid "The device cannot handle more conversations. Please retry later." msgstr "" -"El dispositivo no puede gestionar más conversaciones. Inténtalo más tarde." +"El dispositivo no puede gestionar más conversaciones. Inténtelo más tarde." msgid "Player is malfunctioning. Please reinstall the system player." msgstr "" @@ -5500,8 +5488,7 @@ msgid "" "unload the filament and try again." msgstr "" "No se puede leer la información del filamento: el filamento está cargado en " -"el cabezal de la herramienta, por favor, descargue el filamento y vuelva a " -"intentarlo." +"el cabezal, por favor, descargue el filamento y vuelva a intentarlo." msgid "This only takes effect during printing" msgstr "Esto solo tendrá efecto durante la impresión" @@ -5874,7 +5861,7 @@ msgid "" "the tag is not in predefined range." msgstr "" "Se detecta la etiqueta de localización de la bandeja y se detiene la " -"impresión si la etiqueta no se encuentra dentro del intervalo predefinido." +"impresión si la etiqueta no se encuentra dentro del rango predefinido." msgid "First Layer Inspection" msgstr "Inspección de Primera Capa" @@ -5919,11 +5906,14 @@ msgid "Advance" msgstr "Avanzado" msgid "Compare presets" -msgstr "Comparar ajustes" +msgstr "Comparar perfiles" msgid "View all object's settings" msgstr "Ver todos los ajustes del objeto" +msgid "Material settings" +msgstr "Configuración de Material" + msgid "Remove current plate (if not last one)" msgstr "Quitar bandeja actual (si no es la última)" @@ -6000,6 +5990,9 @@ msgstr "Elegir filamentos para usar" msgid "Search plate, object and part." msgstr "Buscar bandeja, objeto y parte." +msgid "Pellets" +msgstr "Pellets" + msgid "" "No AMS filaments. Please select a printer in 'Device' page to load AMS info." msgstr "" @@ -6217,6 +6210,16 @@ msgstr "Se ha detectado un objeto con varias piezas" msgid "The file does not contain any geometry data." msgstr "El archivo no contiene ninguna información geométrica." +msgid "" +"Your object appears to be too large. It will be scaled down to fit the heat " +"bed automatically." +msgstr "" +"Su objeto parece demasiado grande, ¿Desea disminuirlo para que quepa en la " +"cama caliente automáticamente?." + +msgid "Object too large" +msgstr "Objeto demasiado grande" + msgid "" "Your object appears to be too large, Do you want to scale it down to fit the " "heat bed automatically?" @@ -6224,9 +6227,6 @@ msgstr "" "Tu objeto parece demasiado grande, ¿Deseas disminuirlo para que quepa en la " "cama caliente automáticamente?" -msgid "Object too large" -msgstr "Objeto demasiado grande" - msgid "Export STL file:" msgstr "Exportar archivo STL:" @@ -6247,7 +6247,7 @@ msgstr "" "El archivo %s ya existe\n" "¿Desea reemplazarlo?" -msgid "Comfirm Save As" +msgid "Confirm Save As" msgstr "Confirmar Guardar como" msgid "Delete object which is a part of cut object" @@ -6472,7 +6472,7 @@ msgstr "" msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " -"will be kept. You may fix the meshes and try agian." +"will be kept. You may fix the meshes and try again." msgstr "" "No se pueden realizar operaciones booleanas en las mallas del modelo. Sólo " "se conservarán las partes positivas. Puede arreglar las mallas e intentarlo " @@ -6607,10 +6607,6 @@ msgstr "¿Quieres continuar?" msgid "Language selection" msgstr "Selección de idiomas" -msgid "Switching application language while some presets are modified." -msgstr "" -"Cambiando idioma de la aplicación mientras se modifican algunos preajustes." - msgid "Changing application language" msgstr "Cambiar el idioma de la aplicación" @@ -6629,6 +6625,21 @@ msgstr "Explorar" msgid "Choose Download Directory" msgstr "Elegir Directorio de Descarga" +msgid "Associate" +msgstr "Asociar" + +msgid "with OrcaSlicer so that Orca can open models from" +msgstr "porque OrcaSlicer así que no puede abrir modelos desde" + +msgid "Current Association: " +msgstr "Asociación actual:" + +msgid "Current Instance" +msgstr "Instancia actual" + +msgid "Current Instance Path: " +msgstr "Ruta de Instancia Actual:" + msgid "General Settings" msgstr "Configuración General" @@ -6794,6 +6805,12 @@ msgstr "" "Con esta opción activada, puede enviar una tarea a varios dispositivos al " "mismo tiempo y gestionar varios dispositivos." +msgid "Auto arrange plate after cloning" +msgstr "Disposición automática de la placa tras la clonación" + +msgid "Auto arrange plate after object cloning" +msgstr "Disposición automática de la placa tras la clonación de objetos" + msgid "Network" msgstr "Red" @@ -6847,42 +6864,6 @@ msgstr "Asociar enlaces web a OrcaSlicer" msgid "Associate URLs to OrcaSlicer" msgstr "Asociar URLs a OrcaSlicer" -msgid "Current association: " -msgstr "Asociación actual:" - -msgid "Associate prusaslicer://" -msgstr "Asociar prusaslicer://" - -msgid "Not associated to any application" -msgstr "No asociado a ninguna aplicación" - -msgid "" -"Associate OrcaSlicer with prusaslicer:// links so that Orca can open models " -"from Printable.com" -msgstr "" -"Asociar OrcaSlicer con prusaslicer:// enlaces para que Orca puede abrir " -"modelos de Printables.com" - -msgid "Associate bambustudio://" -msgstr "Asociar bambustudio://" - -msgid "" -"Associate OrcaSlicer with bambustudio:// links so that Orca can open models " -"from makerworld.com" -msgstr "" -"Asociar OrcaSlicer con bambustudio:// enlaces para que Orca puede abrir " -"modelos de makerworld.com" - -msgid "Associate cura://" -msgstr "Asociar cura://" - -msgid "" -"Associate OrcaSlicer with cura:// links so that Orca can open models from " -"thingiverse.com" -msgstr "" -"Asociar OrcaSlicer con enlaces cura:// para que Orca pueda abrir modelos " -"desde thingiverse.com" - msgid "Maximum recent projects" msgstr "Máximos proyectos recientes" @@ -7016,13 +6997,13 @@ msgid "Switch cloud environment, Please login again!" msgstr "¡Cambiado a entorno de nube, Por favor vuelva a autenticarse!" msgid "System presets" -msgstr "Ajustes del sistema" +msgstr "Perfiles del sistema" msgid "User presets" -msgstr "Ajustes de usuario" +msgstr "Perfiles de usuario" msgid "Incompatible presets" -msgstr "Ajustes incompatibles" +msgstr "Perfiles incompatibles" msgid "AMS filaments" msgstr "Filamentos AMS" @@ -7091,7 +7072,7 @@ msgid "First layer filament sequence" msgstr "Secuencia de primera capa de filamento" msgid "Same as Global Plate Type" -msgstr "Igual que el tipo de placa global" +msgstr "Igual que el Tipo de Bandeja Global" msgid "Same as Global Bed Type" msgstr "Lo mismo que el Tipo de Cama Global" @@ -7238,19 +7219,19 @@ msgid "Bambu Engineering Plate" msgstr "Bandeja de Ingeniería Bambú" msgid "Bambu Smooth PEI Plate" -msgstr "Placa PEI Lisa Bambu" +msgstr "Bandeja PEI Lisa Bambu" msgid "High temperature Plate" msgstr "Bandeja de Alta Temperatura" msgid "Bambu Textured PEI Plate" -msgstr "Placa PEI Texturizada Bambu" +msgstr "Bandeja PEI Texturizada Bambu" msgid "Send print job to" msgstr "Enviar el trabajo de impresión a" msgid "Flow Dynamics Calibration" -msgstr "Calibración de Dinámicas de Flujo" +msgstr "Calibración de Dinámica de Flujo" msgid "Click here if you can't connect to the printer" msgstr "Presione aquí si no puede conectar a la impresora" @@ -7331,7 +7312,7 @@ msgid "" "firmware to support AMS slot assignment." msgstr "" "El %s del filamento excede el número de ranuras AMS. Por favor actualice el " -"firmwareimpresora para que soporte la asignación de ranuras AMS." +"firmware de la impresora para que soporte la asignación de ranuras AMS." msgid "" "The printer firmware only supports sequential mapping of filament => AMS " @@ -7402,11 +7383,13 @@ msgid "" msgstr "" "Hay algunos filamentos desconocidos en los mapeados AMS. Por favor, " "compruebe si son los filamentos requeridos. Si lo son, presione " -"\"Confirmar\" para empezar a imprimir." +"\"Confirmar\" para empezar a imprimir. Por favor, compruebe si son los " +"filamentos requeridos. Si lo son, presione \"Confirmar\" para empezar a " +"imprimir." #, c-format, boost-format msgid "nozzle in preset: %s %s" -msgstr "Boquilla preestablecida: %s %s" +msgstr "Boquilla en perfil: %s %s" #, c-format, boost-format msgid "nozzle memorized: %.2f %s" @@ -7452,7 +7435,7 @@ msgstr "" "fallar debido a la superficie dispersa." msgid "Automatic flow calibration using Micro Lidar" -msgstr "Calibración automática de flujo usando Micro Lidar" +msgstr "Calibración Automática de Flujo usando Micro Lidar" msgid "Modifying the device name" msgstr "Modificar el nombre del dispositivo" @@ -7470,7 +7453,7 @@ msgstr "" msgid "The selected printer is incompatible with the chosen printer presets." msgstr "" -"La impresora seleccionada es incompatible con los ajustes seleccionados." +"La impresora seleccionada es incompatible con los perfiles seleccionados." msgid "An SD card needs to be inserted before send to printer SD card." msgstr "" @@ -7482,7 +7465,7 @@ msgstr "" "Es necesaria que la impresora esté en la misma red local que Orca Slicer." msgid "The printer does not support sending to printer SD card." -msgstr "La impresora no soporta el envio directo a la tarjeta SD." +msgstr "La impresora no soporta el envío directo a la tarjeta SD." msgid "Slice ok." msgstr "Laminado correcto." @@ -7636,14 +7619,14 @@ msgid "Save current %s" msgstr "Guardar %s actuales" msgid "Delete this preset" -msgstr "Borra este ajuste" +msgstr "Borra este perfil" msgid "Search in preset" -msgstr "Buscar en los ajustes por defecto" +msgstr "Buscar en el perfil" msgid "Click to reset all settings to the last saved preset." msgstr "" -"Presionar para reiniciar todos los ajustes a los últimos ajustes por defecto." +"Presionar para reiniciar todos los ajustes al perfil guardado por defecto." msgid "" "Prime tower is required for smooth timeplase. There may be flaws on the " @@ -7668,8 +7651,8 @@ msgid "" "support volume but weaker strength.\n" "We recommend using it with: 0 interface layers, 0 top distance, 2 walls." msgstr "" -"Hemos añadido al estilo esperimental \"Árboles Delgados\" que presenta " -"volumenes de soportemás pequeños con menos fuerza.\n" +"Hemos añadido el ajuste experimental \"Árboles Delgados\" que presenta " +"volúmenes de soporte más pequeños con menos fuerza.\n" "Recomendamos usarlo con: 0 capas de interfaz, 0 distancia superior, 2 " "perímetros." @@ -7678,8 +7661,8 @@ msgid "" "Yes - Change these settings automatically\n" "No - Do not change these settings for me" msgstr "" -"Cambiar estos ajustes automaticamente? \n" -"Sí - Cambiar estos ajustes automaticamente\n" +"Cambiar estos ajustes automáticamente? \n" +"Sí - Cambiar estos ajustes automáticamente\n" "No - No cambiar estos ajustes" msgid "" @@ -7708,7 +7691,7 @@ msgid "" "whether this change in geometry impacts the functionality of your print." msgstr "" "Al activar esta opción modificará la forma del modelo. Si la impresión " -"requiere dimensiones precisas o forma parte de un ensamblaje, es importante " +"requiere dimensiones precisas o forma parte de un ensamblado, es importante " "comprobar si este cambio en la geometría afecta a la funcionalidad de la " "impresión." @@ -7721,8 +7704,6 @@ msgid "" msgstr "" "La altura de la capa es demasiado pequeña.\n" "Se establecerá en min_layer_height\n" -"La altura de la capa es demasiado pequeña.\n" -"Se establecerá en min_layer_height\n" msgid "" "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " @@ -7761,8 +7742,8 @@ msgstr "" "Característica experimental: Retraer y cortar el filamento a mayor distancia " "durante los cambios de filamento para minimizar el flujo. Aunque puede " "reducir notablemente el flujo, también puede elevar el riesgo de atascos de " -"la boquilla u otras complicaciones de impresión. Utilizar con el último " -"firmware de la impresora." +"boquilla u otras complicaciones de impresión. Por favor, utilícelo con el " +"último firmware de la impresora." msgid "" "When recording timelapse without toolhead, it is recommended to add a " @@ -7770,10 +7751,10 @@ msgid "" "by right-click the empty position of build plate and choose \"Add " "Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" -"Cuando grabamos timelapse sin cabezal de impresión, es recomendable añadir " -"un \"Torre de Purga de Intervalo\" \n" -"presionando con el botón derecho la posición vacía de la bandeja de " -"construcción y elegir \"Añadir Primitivo\"->\"Intervalo de Torre de Purga\"." +"Cuando se graba un timelapse sin cabezal, se recomienda añadir una \"Torre " +"de Purga de Timelapse\" haciendo clic con el botón derecho del ratón en la " +"posición vacía de la bandeja de impresión y seleccionando \"Añadir " +"Primitivo\"->Torre de Purga de Timelapse\"." msgid "Line width" msgstr "Ancho de extrusión" @@ -7845,12 +7826,21 @@ msgstr "Filamento de soporte" msgid "Tree supports" msgstr "Soportes de árbol" -msgid "Skirt" -msgstr "Falda" +msgid "Multimaterial" +msgstr "Multimaterial" msgid "Prime tower" msgstr "Torre de Purga" +msgid "Filament for Features" +msgstr "Filamento para Características" + +msgid "Ooze prevention" +msgstr "Optimizar rezumado" + +msgid "Skirt" +msgstr "Falda" + msgid "Special mode" msgstr "Ajustes especiales" @@ -7904,6 +7894,9 @@ msgstr "" "Rango de temperatura de boquilla recomendado para este filamento. 0 " "significa que no se ajusta" +msgid "Flow ratio and Pressure Advance" +msgstr "Ratio de flujo y Avance de Presión Lineal" + msgid "Print chamber temperature" msgstr "Temperatura de la cámara" @@ -7948,7 +7941,7 @@ msgid "" msgstr "" "Temperatura de la cama cuando está instalada la bandeja PEI lisa/ Bandeja de " "Alta Temperatura. El valor 0 significa que el filamento no admite la " -"impresión en la placa PEI lisa/placa de alta temperatura" +"impresión en la bandeja PEI lisa/bandeja de alta temperatura" msgid "Textured PEI Plate" msgstr "Bandeja PEI Texturizada" @@ -8017,21 +8010,18 @@ msgstr "G-Code de inicio de filamento" msgid "Filament end G-code" msgstr "Final del G-Code de filamento" -msgid "Multimaterial" -msgstr "Multimaterial" - msgid "Wipe tower parameters" msgstr "Parámetros de torre de purga" msgid "Toolchange parameters with single extruder MM printers" -msgstr "Parámetros de cambio de herramienta para impresoras de 1 extrusor MM" +msgstr "Parámetros de cambio de cabezal para impresoras de 1 extrusor MM" msgid "Ramming settings" msgstr "Parámetros de Moldeado de Extremo" msgid "Toolchange parameters with multi extruder MM printers" msgstr "" -"Parámetros de cambio de herramienta para impresoras de varios extrusores MM" +"Parámetros de cambio de cabezal para impresoras de varios extrusores MM" msgid "Printable space" msgstr "Espacio imprimible" @@ -8078,7 +8068,7 @@ msgid "Layer change G-code" msgstr "Cambiar el G-Code tras el cambio de capa" msgid "Time lapse G-code" -msgstr "Timelapse G-code" +msgstr "Timelapse G-Code" msgid "Change filament G-code" msgstr "G-Code para el cambio de filamento" @@ -8110,12 +8100,36 @@ msgstr "Limitación de Jerk" msgid "Single extruder multimaterial setup" msgstr "Configuración de extrusor único multimaterial" +msgid "Number of extruders of the printer." +msgstr "Número de extrusores de la impresora." + +msgid "" +"Single Extruder Multi Material is selected, \n" +"and all extruders must have the same diameter.\n" +"Do you want to change the diameter for all extruders to first extruder " +"nozzle diameter value?" +msgstr "" +"Seleccionado Extrusor Único Multi Material, \n" +"y todos los extrusores deben tener el mismo diámetro. \n" +"¿Desea cambiar el diámetro de todos los extrusores al valor del diámetro de " +"la boquilla del primer extrusor?" + +msgid "Nozzle diameter" +msgstr "Diámetro de boquilla" + msgid "Wipe tower" msgstr "Torre de purga" msgid "Single extruder multimaterial parameters" msgstr "Parámetros de extrusor único multimaterial" +msgid "" +"This is a single extruder multimaterial printer, diameters of all extruders " +"will be set to the new value. Do you want to proceed?" +msgstr "" +"Esta es una impresora multimaterial de un solo extrusor, los diámetros de " +"todos los extrusores se ajustarán al nuevo valor. ¿Desea continuar?" + msgid "Layer height limits" msgstr "Límites de altura de la capa" @@ -8147,7 +8161,7 @@ msgid "" "presets would be deleted if the printer is deleted." msgstr "" "El perfil de Filamento %d y el perfil de Proceso %d están adjuntos a esta " -"impresora." +"impresora. Esos perfiles se borrarían si se elimina la impresora." msgid "Presets inherited by other presets can not be deleted!" msgstr "¡Los perfiles heredados de otros perfiles no pueden borrarse!" @@ -8278,14 +8292,14 @@ msgstr "" #, boost-format msgid "You have changed some settings of preset \"%1%\". " -msgstr "Ha cambiado algunos ajustes del preajuste \"%1%\"." +msgstr "Ha cambiado algunos ajustes del perfil \"%1%\"." msgid "" "\n" "You can save or discard the preset values you have modified." msgstr "" "\n" -"Puede guardar o descartar los valores perfils que haya modificado." +"Puede guardar o descartar los perfiles que haya modificado." msgid "" "\n" @@ -8293,7 +8307,7 @@ msgid "" "transfer the values you have modified to the new preset." msgstr "" "\n" -"Puede guardar o descartar los valores perfils que ha modificado, o elegir " +"Puede guardar o descartar los valores perfiles que ha modificado, o elegir " "transferir los valores que ha modificado al nuevo perfil." msgid "You have previously modified your settings." @@ -8305,8 +8319,8 @@ msgid "" "the modified values to the new project" msgstr "" "\n" -"Puede descartar los valores perfils que haya modificado, o elegir transferir " -"los valores modificados al nuevo proyecto" +"Puede descartar los valores perfiles que haya modificado, o elegir " +"transferir los valores modificados al nuevo proyecto" msgid "Extruders count" msgstr "Contador de extrusores" @@ -8333,8 +8347,8 @@ msgid "" "Note: New modified presets will be selected in settings tabs after close " "this dialog." msgstr "" -"Transfiera las opciones seleccionadas del preajuste izquierdo al derecho. \n" -"Nota: Los nuevos preajustes modificados se seleccionarán en las pestañas de " +"Transfiera las opciones seleccionadas del perfil izquierdo al derecho. \n" +"Nota: Los nuevos perfiles modificados se seleccionarán en las pestañas de " "configuración después de cerrar este cuadro de diálogo." msgid "Transfer values from left to right" @@ -8345,7 +8359,7 @@ msgid "" "to right preset." msgstr "" "Si se activa, este cuadro de diálogo se puede utilizar para convertir los " -"valores seleccionados de izquierda a derecha perfils." +"valores seleccionados de izquierda a derecha perfiles." msgid "Add File" msgstr "Añadir archivo" @@ -8450,7 +8464,7 @@ msgid "Approximate color matching." msgstr "Coincidencia de color aproximada." msgid "Append" -msgstr "Añada" +msgstr "Añadir" msgid "Add consumable extruder after existing extruders." msgstr "Añadir extrusora consumible después de las extrusoras existentes." @@ -8459,7 +8473,7 @@ msgid "Reset mapped extruders." msgstr "Restablecer extrusoras mapeadas." msgid "Cluster colors" -msgstr "Colores de los grupos" +msgstr "Colores de grupos" msgid "Map Filament" msgstr "Mapear Filamento" @@ -8468,15 +8482,17 @@ msgid "" "Note:The color has been selected, you can choose OK \n" " to continue or manually adjust it." msgstr "" -"Nota: Una vez seleccionado el color, puede seleccionar OK \n" -" para continuar o ajustarlo manualmente." +"Nota: Una vez seleccionado el color, puede elegir OK\n" +"para continuar o ajustarlo manualmente." msgid "" "Waring:The count of newly added and \n" " current extruders exceeds 16." msgstr "" -"Advertencia: El número de extrusoras añadidas y \n" -"actuales supera los 16." +"Advertencia: El recuento de extrusores recién añadidos y \n" +"actuales es superior a 16.Advertencia: El recuento de extrusores recién " +"añadidos y \n" +"actuales es superior a 16." msgid "Ramming customization" msgstr "Personalización de Moldeado de Extremo" @@ -8493,8 +8509,8 @@ msgid "" "jams, extruder wheel grinding into filament etc." msgstr "" "El moldeado de extremo se refiere a una extrusión rápida justo antes del " -"cambio de herramienta en la impresora MM de extrusor único. Su propósito es " -"dar una forma adecuada al final del filamento descargado para no impedir la " +"cambio de cabezal en la impresora MM de extrusor único. Su propósito es dar " +"una forma adecuada al final del filamento descargado para no impedir la " "inserción del nuevo filamento, y que pueda ser reinsertada por si misma " "posteriormente." @@ -8535,7 +8551,7 @@ msgstr "Volumen de limpieza (mm³) para cada par de filamentos." #, c-format, boost-format msgid "Suggestion: Flushing Volume in range [%d, %d]" -msgstr "Sugerencias: Volumen de Flujo en rango [%d, %d]" +msgstr "Sugerencias: Volumen de Flujo en rango [%d, %d]" #, c-format, boost-format msgid "The multiplier should be in range [%.2f, %.2f]." @@ -8621,11 +8637,8 @@ msgstr "Lista de objetos" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "Importar datos de geometría de los archivos STL/STEP/3MF/OBJ/AMF" -msgid "⌘+Shift+G" -msgstr "⌘+Shift+G" - -msgid "Ctrl+Shift+G" -msgstr "Ctrl+Shift+G" +msgid "Shift+G" +msgstr "Shift+G" msgid "Paste from clipboard" msgstr "Pegar desde el portapapeles" @@ -8665,9 +8678,9 @@ msgid "" "objects, it just orientates the selected ones.Otherwise, it will orientates " "all objects in the current disk." msgstr "" -"Orienta automáticamente los objetos seleccionados o todos los objetos.Si hay " -"objetos seleccionados, sólo orienta los seleccionados.En caso contrario, " -"orientará todos los objetos del disco actual." +"Orienta automáticamente los objetos seleccionados o todos los objetos. Si " +"hay objetos seleccionados, sólo orienta los seleccionados. En caso " +"contrario, orientará todos los objetos actuales." msgid "Shift+Tab" msgstr "Shift+Tab" @@ -8675,33 +8688,18 @@ msgstr "Shift+Tab" msgid "Collapse/Expand the sidebar" msgstr "Ocultar/Expandir barra lateral" -msgid "⌘+Any arrow" -msgstr "⌘+Cualquier tecla" +msgid "Any arrow" +msgstr "⌘+Cualquier flecha" msgid "Movement in camera space" msgstr "Movimiento en el espacio de la cámara" -msgid "⌥+Left mouse button" -msgstr "Botón de ratón ⌥+Left" - msgid "Select a part" msgstr "Seleccionar una pieza" -msgid "⌘+Left mouse button" -msgstr "⌘+botón izquierdo de ratón" - msgid "Select multiple objects" msgstr "Seleccionar varios objetos" -msgid "Ctrl+Any arrow" -msgstr "Ctrl+Cualquier flecha" - -msgid "Alt+Left mouse button" -msgstr "Alt+Botón izquierdo de ratón" - -msgid "Ctrl+Left mouse button" -msgstr "Ctrl+Botón izquierdo de ratón" - msgid "Shift+Left mouse button" msgstr "Shift+Left+Botón izquierdo de ratón" @@ -8804,24 +8802,12 @@ msgstr "Bandeja" msgid "Move: press to snap by 1mm" msgstr "Mover: pulsar para ajustar 1mm" -msgid "⌘+Mouse wheel" -msgstr "⌘+Rueda del ratón" - msgid "Support/Color Painting: adjust pen radius" msgstr "Soporte/Pintado en color: ajuste del radio de la pluma" -msgid "⌥+Mouse wheel" -msgstr "⌥+Rueda del ratón" - msgid "Support/Color Painting: adjust section position" msgstr "Soporte/Pintado de color: ajuste de la posición de la sección" -msgid "Ctrl+Mouse wheel" -msgstr "Ctrl+Rueda del ratón" - -msgid "Alt+Mouse wheel" -msgstr "Alt+Rueda del ratón" - msgid "Gizmo" msgstr "Artilugio" @@ -9046,7 +9032,7 @@ msgstr "" "siguiente arranque de la impresora o cuando arranque Orca Slicer." msgid "Extension Board" -msgstr "Placa de ampliación" +msgstr "Placa de Ampliación" msgid "Saving objects into the 3mf failed." msgstr "El guardado de objetos en el 3mf no ha funcionado." @@ -9139,6 +9125,13 @@ msgstr "" msgid "No object can be printed. Maybe too small" msgstr "No se puede imprimir ningún objeto. Tal vez sea demasiado pequeño" +msgid "" +"Your print is very close to the priming regions. Make sure there is no " +"collision." +msgstr "" +"Su huella está muy cerca de las regiones de imprimación. Asegúrese de que no " +"hay colisión." + msgid "" "Failed to generate gcode for invalid custom G-code.\n" "\n" @@ -9388,11 +9381,13 @@ msgstr "" "La altura de capa variable no es compatible con los soportes orgánicos." msgid "" -"Different nozzle diameters and different filament diameters is not allowed " -"when prime tower is enabled." +"Different nozzle diameters and different filament diameters may not work " +"well when the prime tower is enabled. It's very experimental, so please " +"proceed with caution." msgstr "" -"Diámetros de boquillas diferentes y diámetros de filamento diferentes no " -"están permitidos cuando la torre de purga está activada." +"Diámetros de boquillas y diámetros de filamento diferentes pueden no " +"funcionar correctamente cuando la torre de purga está activada. Esta función " +"es experimental, así que proceda con cautela." msgid "" "The Wipe Tower is currently only supported with the relative extruder " @@ -9402,9 +9397,11 @@ msgstr "" "relativo del extrusor (use_relative_e_distances=1)." msgid "" -"Ooze prevention is currently not supported with the prime tower enabled." +"Ooze prevention is only supported with the wipe tower when " +"'single_extruder_multi_material' is off." msgstr "" -"Actualmente no se puede evitar el rezume con la torre principal activada." +"La prevención de rezumado sólo es compatible con la torre de limpieza cuando " +"'single_extruder_multi_material' está desactivado." msgid "" "The prime tower is currently only supported for the Marlin, RepRap/Sprinter, " @@ -9763,9 +9760,9 @@ msgid "" "either as an absolute value or as percentage (for example 50%) of a direct " "travel path. Zero to disable" msgstr "" -"Distancia de desvio máximo para evitar cruzar el perímetro. No lo evite si " +"Distancia de desvío máximo para evitar cruzar el perímetro. No lo evite si " "la distancia de desvío es más alta que este valor. La distancia de desvío " -"podría tanto como un valor absoluto como pocentaje (por ejemplo 50%) de una " +"podría tanto como un valor absoluto como porcentaje (por ejemplo 50%) de una " "trayectoria de viaje directa. Cero para deshabilitar" msgid "mm or %" @@ -9881,7 +9878,7 @@ msgstr "" "incrementarán" msgid "Bottom shell thickness" -msgstr "Espesor de la cubierta inferior" +msgstr "Espesor mínimo de la cubierta inferior" msgid "" "The number of bottom solid layers is increased when slicing if the thickness " @@ -10141,7 +10138,7 @@ msgstr "" "Esta configuración reduce en gran medida las tensiones de la pieza, ya que " "ahora se distribuyen en direcciones alternas. Esto debería reducir " "deformaciones de la pieza mientras se mantiene la calidad de el perímetro " -"externa. Esta característica puede ser muy útil para materiales propensos a " +"externo. Esta característica puede ser muy útil para materiales propensos a " "deformarse, como ABS/ASA, y también para filamentos elásticos, como TPU y " "Silk PLA. También puede ayudar a reducir deformaciones en regiones flotantes " "en soportes.\n" @@ -10252,7 +10249,7 @@ msgid "" msgstr "" "Esto controla la generación del borde de adherencia en el lado exterior y/o " "interior de los modelos. Auto significa que el ancho de borde de adherencia " -"es analizado y calculado automaticamente." +"es analizado y calculado automáticamente." msgid "Brim-object gap" msgstr "Espacio borde de adherencia-objeto" @@ -10694,7 +10691,7 @@ msgstr "" "superficie exterior y precisión dimensional, ya que el perímetro exterior se " "imprime sin perturbaciones desde un perímetro interior. Sin embargo, el " "rendimiento del voladizo se reducirá al no haber un perímetro interno contra " -"el que imprimir el perímetro externa. Esta opción requiere un mínimo de 3 " +"el que imprimir el perímetro externo. Esta opción requiere un mínimo de 3 " "perímetros para ser efectiva, ya que imprime primero los perímetros " "interiores a partir del 3er perímetro, después el perímetro exterior y, " "finalmente, el primer perímetro interior. En la mayoría de los casos, se " @@ -10729,14 +10726,16 @@ msgid "" "external surface finish. It can also cause the infill to shine through the " "external surfaces of the part." msgstr "" -"Orden de las paredes/relleno. Cuando la casilla no está marcada, los muros " -"se imprimen primero, lo que funciona mejor en la mayoría de los casos.\n" +"Orden de los perímetros/relleno. Cuando la casilla no está marcada, los " +"muros se imprimen primero, lo que funciona mejor en la mayoría de los " +"casos.\n" "\n" "Imprimir primero el relleno puede ayudar con voladizos extremos ya que los " "muros tienen el relleno vecino al que adherirse. Sin embargo, el relleno " -"empujará ligeramente hacia fuera las paredes impresas donde se une a ellos, " -"lo que resulta en un peor acabado de la superficie exterior. También puede " -"hacer que el relleno brille a través de las superficies externas de la pieza." +"empujará ligeramente hacia fuera los perímetros impresos donde se une a " +"ellos, lo que resulta en un peor acabado de la superficie exterior. También " +"puede hacer que el relleno brille a través de las superficies externas de la " +"pieza." msgid "Wall loop direction" msgstr "Dirección del bucle de perímetro" @@ -10909,6 +10908,143 @@ msgstr "" msgid "Pressure advance(Klipper) AKA Linear advance factor(Marlin)" msgstr "Pressure Advance(Klipper) AKA Factor de avance lineal(Marlin)" +msgid "Enable adaptive pressure advance (beta)" +msgstr "Activar Avance de Presión Lineal" + +#, c-format, boost-format +msgid "" +"With increasing print speeds (and hence increasing volumetric flow through " +"the nozzle) and increasing accelerations, it has been observed that the " +"effective PA value typically decreases. This means that a single PA value is " +"not always 100% optimal for all features and a compromise value is usually " +"used that does not cause too much bulging on features with lower flow speed " +"and accelerations while also not causing gaps on faster features.\n" +"\n" +"This feature aims to address this limitation by modeling the response of " +"your printer's extrusion system depending on the volumetric flow speed and " +"acceleration it is printing at. Internally, it generates a fitted model that " +"can extrapolate the needed pressure advance for any given volumetric flow " +"speed and acceleration, which is then emmited to the printer depending on " +"the current print conditions.\n" +"\n" +"When enabled, the pressure advance value above is overriden. However, a " +"reasonable default value above is strongly recomended to act as a fallback " +"and for when tool changing.\n" +"\n" +msgstr "" +"Al aumentar la velocidad de impresión (y, por tanto, el flujo volumétrico a " +"través de la boquilla) y las aceleraciones, se ha observado que el valor PA " +"efectivo suele disminuir. Esto significa que un único valor de PA no siempre " +"es óptimo al 100% opara todas las características y que se suele utilizar un " +"valor de compromiso que no provoque demasiado abombamiento en los perfiles " +"con velocidades de flujo y aceleraciones más bajas y que, al mismo tiempo, " +"no provoque fallos en los perfiles más rápidos.\n" +"\n" +"Esta función pretende abordar esta limitación modelando la respuesta del " +"sistema de extrusión de su impresora en función de la velocidad de flujo " +"volumétrico y la aceleración a la que está imprimiendo. Internamente, genera " +"un modelo ajustado que puede extrapolar el avance de presión necesario para " +"cualquier velocidad de flujo volumétrico y aceleración, que luego se emite a " +"la impresora en función de las condiciones de impresión actuales.\n" +"\n" +"Cuando se activa, el valor de avance de presión anterior se anula. Sin " +"embargo, se recomienda encarecidamente un valor predeterminado razonable que " +"actúe como un alternativa y para los cambios de cabezal.\n" +"\n" + +msgid "Adaptive pressure advance measurements (beta)" +msgstr "Medidas adaptativas de avance presión (beta)" + +msgid "" +"Add sets of pressure advance (PA) values, the volumetric flow speeds and " +"accelerations they were measured at, separated by a comma. One set of values " +"per line. For example\n" +"0.04,3.96,3000\n" +"0.033,3.96,10000\n" +"0.029,7.91,3000\n" +"0.026,7.91,10000\n" +"\n" +"How to calibrate:\n" +"1. Run the pressure advance test for at least 3 speeds per acceleration " +"value. It is recommended that the test is run for at least the speed of the " +"external perimeters, the speed of the internal perimeters and the fastest " +"feature print speed in your profile (usually its the sparse or solid " +"infill). Then run them for the same speeds for the slowest and fastest print " +"accelerations,and no faster than the recommended maximum acceleration as " +"given by the klipper input shaper.\n" +"2. Take note of the optimal PA value for each volumetric flow speed and " +"acceleration. You can find the flow number by selecting flow from the color " +"scheme drop down and move the horizontal slider over the PA pattern lines. " +"The number should be visible at the bottom of the page. The ideal PA value " +"should be decreasing the higher the volumetric flow is. If it is not, " +"confirm that your extruder is functioning correctly.The slower and with less " +"acceleration you print, the larger the range of acceptable PA values. If no " +"difference is visible, use the PA value from the faster test.3. Enter the " +"triplets of PA values, Flow and Accelerations in the text box here and save " +"your filament profile\n" +"\n" +msgstr "" +"Añada conjuntos de valores de avance de presión (PA), las velocidades de " +"flujo volumétrico y las aceleraciones a las que se midieron, separados por " +"una coma. Un conjunto de valores por línea. Por ejemplo \n" +"0,04,3,96,3000 \n" +"0,033,3,96,10000 \n" +"0,029,7,91,3000 \n" +"0,026,7,91,10000\n" +"\n" +"Cómo calibrar: \n" +"Ejecute la prueba de avance de presión durante al menos 3 velocidades por " +"valor de aceleración. Se recomienda que la prueba se ejecute para al menos " +"la velocidad de los perímetros externos, la velocidad de los perímetros " +"internos y la velocidad de impresión de características más rápida en su " +"perfil (por lo general es el relleno de baja densidad o sólido). A " +"continuación, ejecútelos para las mismas velocidades para las aceleraciones " +"de impresión más lentas y más rápidas, y no más rápido que la aceleración " +"máxima recomendada según lo dado por el \"input shaper\" de Klipper. 2. Tome " +"nota del valor óptimo de PA para el perfil. Tome nota del valor óptimo de PA " +"para cada velocidad de flujo volumétrico y aceleración. Puede encontrar el " +"número de flujo seleccionando flujo en el desplegable del esquema de colores " +"y moviendo el deslizador horizontal sobre las líneas del patrón PA. El " +"número debería ser visible en la parte inferior de la página. El valor ideal " +"de PA debería disminuir cuanto mayor sea el caudal volumétrico. Si no es " +"así, confirme que su extrusor funciona correctamente. Cuanto más lento y con " +"menos aceleración imprimas, mayor será el rango de valores PA aceptables. Si " +"no se aprecia ninguna diferencia, utilice el valor PA de la prueba más " +"rápida. Introduzca los trios de valores PA, Flujo y Aceleraciones en el " +"cuadro de texto que aparece aquí y guarde su perfil de filamento.\n" + +msgid "Enable adaptive pressure advance for overhangs (beta)" +msgstr "Activación del Avance de Presión Adaptativo para Voladizos (beta)" + +msgid "" +"Enable adaptive PA for overhangs as well as when flow changes within the " +"same feature. This is an experimental option, as if the PA profile is not " +"set accurately, it will cause uniformity issues on the external surfaces " +"before and after overhangs.\n" +msgstr "" +"Habilitar PA adaptable para voladizos, así como cuando el flujo cambia " +"dentro de la misma característica. Se trata de una opción experimental, ya " +"que si el perfil PA no se ajusta con precisión, causará problemas de " +"uniformidad en las superficies externas antes y después de los voladizos.\n" + +msgid "Pressure advance for bridges" +msgstr "Avance de Presión Lineal para puentes" + +msgid "" +"Pressure advance value for bridges. Set to 0 to disable. \n" +"\n" +" A lower PA value when printing bridges helps reduce the appearance of " +"slight under extrusion immediately after bridges. This is caused by the " +"pressure drop in the nozzle when printing in the air and a lower PA helps " +"counteract this." +msgstr "" +"Valor de Avance de Presión para puentes. Establecer a 0 para desactivar.\n" +"\n" +" Un valor de PA más bajo al imprimir puentes ayuda a reducir la aparición de " +"una ligera sub-extrusión inmediatamente después de los puentes. Esto es " +"causado por la caída de presión en la boquilla cuando se imprime en el aire " +"y un PA más bajo ayuda a contrarrestar esto." + msgid "" "Default line width if other line widths are set to 0. If expressed as a %, " "it will be computed over the nozzle diameter." @@ -10946,10 +11082,10 @@ msgstr "" "especialmente útil en los siguientes escenarios:\n" "\n" " 1. Para evitar cambios de brillo al imprimir filamentos brillantes\n" -"2. Para evitar cambios en la velocidad de la pared externa que pueden crear " -"ligeros artefactos de pared que aparecen como z banding\n" +"2. Para evitar cambios en la velocidad de el perímetros externo que pueden " +"crear ligeros artefactos de perímetro que aparecen como z banding\n" "3. Para evitar imprimir a velocidades que provoquen VFA (artefactos finos) " -"en las paredes externas\n" +"en las perímetros externas\n" "\n" msgid "Layer time" @@ -11023,6 +11159,26 @@ msgstr "" "El diámetro del filamento se utiliza para calcular la extrusión en el G-" "Code, por lo que es importante y debe ser preciso" +msgid "Pellet flow coefficient" +msgstr "Coeficiente de Flujo de Pellets" + +msgid "" +"Pellet flow coefficient is emperically derived and allows for volume " +"calculation for pellet printers.\n" +"\n" +"Internally it is converted to filament_diameter. All other volume " +"calculations remain the same.\n" +"\n" +"filament_diameter = sqrt( (4 * pellet_flow_coefficient) / PI )" +msgstr "" +"El coeficiente de flujo de pellets se obtiene de forma empírica y permite " +"calcular el volumen para impresoras de pellets.\n" +"\n" +"Internamente se convierte a filament_diameter. Todos los demás cálculos de " +"volumen siguen siendo los mismos.\n" +"\n" +"diámetro_filamento = sqrt( (4 * coeficiente_flujo_pellets) / PI )" + msgid "Shrinkage" msgstr "Contracción" @@ -11081,8 +11237,8 @@ msgid "" "original dimensions." msgstr "" "Tiempo de espera después de la descarga de filamento. Esto debería ayudar a " -"unos cambios de herramienta confiables con materiales flexibles que " -"necesitan más tiempo para encogerse a las dimensiones originales." +"cambios de cabezal confiables con materiales flexibles que necesitan más " +"tiempo para encogerse a las dimensiones originales." msgid "Number of cooling moves" msgstr "Cantidad de movimientos de refrigeración" @@ -11094,6 +11250,27 @@ msgstr "" "El filamento se enfría moviéndose hacía atrás y hacía delante en los tubos " "de refrigeración. Especifique la cantidad de movimientos." +msgid "Stamping loading speed" +msgstr "Velocidad de Descarga" + +msgid "Speed used for stamping." +msgstr "Velocidad utilizada para \"Stamping\"." + +msgid "Stamping distance measured from the center of the cooling tube" +msgstr "" +"Distancia del punto central del tubo de refrigeración a la punta del " +"extrusor." + +msgid "" +"If set to nonzero value, filament is moved toward the nozzle between the " +"individual cooling moves (\"stamping\"). This option configures how long " +"this movement should be before the filament is retracted again." +msgstr "" +"Si se establece en un valor distinto de cero, el filamento se mueve hacia la " +"boquilla entre los movimientos de enfriamiento individuales (\"Stamping\"). " +"Esta opción configura cuánto tiempo debe durar este movimiento antes de que " +"el filamento se retraiga de nuevo." + msgid "Speed of the first cooling move" msgstr "Velocidad del primer movimiento de refrigeración" @@ -11111,12 +11288,12 @@ msgid "" "object, Orca Slicer will always prime this amount of material into the wipe " "tower to produce successive infill or sacrificial object extrusions reliably." msgstr "" -"Tras un cambio de herramienta, es posible que no se conozca la posición " -"exacta del filamento recién cargado dentro de la boquilla y que la presión " -"del filamento aún no sea estable. Antes de purgar el cabezal de impresión en " -"un relleno o un objeto de sacrificio, OrcaSlicer siempre cebará esta " -"cantidad de material en la torre de purga para producir sucesivas " -"extrusiones de relleno u objetos de sacrificio de forma fiable." +"Tras un cambio de cabezal, es posible que no se conozca la posición exacta " +"del filamento recién cargado dentro de la boquilla y que la presión del " +"filamento aún no sea estable. Antes de purgar el cabezal de impresión en un " +"relleno o un objeto de sacrificio, OrcaSlicer siempre cebará esta cantidad " +"de material en la torre de purga para producir sucesivas extrusiones de " +"relleno u objetos de sacrificio de forma fiable." msgid "Speed of the last cooling move" msgstr "La velocidad del último movimiento de refrigeración" @@ -11132,9 +11309,9 @@ msgid "" "added to the total print time by the G-code time estimator." msgstr "" "Tiempo que tarda el firmware de la impresora (o la Unidad Multi Material " -"2.0) en cargar un nuevo filamento durante un cambio de herramienta (al " -"ejecutar el T-Code). El estimador de tiempo del G-Code añade este tiempo al " -"tiempo total de impresión." +"2.0) en cargar un nuevo filamento durante un cambio de cabezal (al ejecutar " +"el T-Code). El estimador de tiempo del G-Code añade este tiempo al tiempo " +"total de impresión." msgid "Ramming parameters" msgstr "Parámetros de moldeado de extremo" @@ -11152,12 +11329,12 @@ msgid "" "added to the total print time by the G-code time estimator." msgstr "" "Tiempo que tarda el firmware (para la unidad Multi Material 2.0) en " -"descargar el filamento durante el cambio de herramienta ( cuando se ejecuta " -"el T-Code). Esta duración se añade a la duración total de impresión estimada " -"del G-Code." +"descargar el filamento durante el cambio de cabezal ( cuando se ejecuta el T-" +"Code). Esta duración se añade a la duración total de impresión estimada del " +"G-Code." msgid "Enable ramming for multitool setups" -msgstr "Activar moldeado de extremo para configuraciones multiherramienta" +msgstr "Activar moldeado de extremo para configuraciones multicabezal" msgid "" "Perform ramming when using multitool printer (i.e. when the 'Single Extruder " @@ -11166,25 +11343,25 @@ msgid "" "toolchange. This option is only used when the wipe tower is enabled." msgstr "" "Llevar a cabo el moldeado de extremo cuando se usa una impresora multi " -"herramienta (es decir, cuando el 'Extrusor Único Multimaterial' en los " -"Ajustes de Impresora está desmarcado). Cuando está marcado, una pequeña " -"cantidad de filamento es extruida rápidamente en la torre de purga, justo " -"antes del cambio de herramienta. Esta opción se usa solamente cuando la " -"torre de purga está activada." +"cabezal (es decir, cuando el 'Extrusor Único Multimaterial' en los Ajustes " +"de Impresora está desmarcado). Cuando está marcado, una pequeña cantidad de " +"filamento es extruida rápidamente en la torre de purga, justo antes del " +"cambio de cabezal. Esta opción se usa solamente cuando la torre de purga " +"está activada." msgid "Multitool ramming volume" -msgstr "Volumen de Moldeado de Extremo multiherramienta" +msgstr "Volumen de Moldeado de Extremo Multicabezal" msgid "The volume to be rammed before the toolchange." -msgstr "El volumen de Moldeado de Extremo antes del cambio de herramienta." +msgstr "El volumen de Moldeado de Extremo antes del cambio de cabezal." msgid "Multitool ramming flow" -msgstr "Flujo de Moldeado de Extremo multiherramienta" +msgstr "Flujo de Moldeado de Extremo multicabezal" msgid "Flow used for ramming the filament before the toolchange." msgstr "" "Flujo usado por el Moldeado de Extremo de filamento antes del cambio de " -"herramienta." +"cabezal." msgid "Density" msgstr "Densidad" @@ -11321,7 +11498,7 @@ msgid "Lightning" msgstr "Rayo" msgid "Cross Hatch" -msgstr "Escotilla Transversal" +msgstr "Rayado Cruzado" msgid "Sparse infill anchor length" msgstr "Longitud del anclaje de relleno de baja densidad" @@ -11343,10 +11520,12 @@ msgstr "" "es calculado sobre el ancho de extrusión de relleno. OrcaSlicer intenta " "conectar dos líneas de relleno cercanas a un segmento de perímetro corto. Si " "no se encuentra ningún segmento más corto que relleno_anclaje_max, la línea " -"de relleno se conecta a un semento de perímetro en un solo lado y la " -"longitud del ancho de segmento de perímetro escogido se limita a este " -"parámetro, pero no más largo que anclage_longitud_max. \n" -"Configue este parámetro a cero para deshabilitar los perímetros de anclaje " +"de relleno se conecta a un segmento de perímetro en un solo lado y la de " +"relleno se conecta a un segmento de perímetro en un solo lado y la longitud " +"del ancho de segmento de perímetro escogido se limita a este parámetro, pero " +"no más largo que anclage_longitud_max. \n" +"Configure este parámetro a cero para deshabilitar los perímetros de anclaje " +"Configure este parámetro a cero para deshabilitar los perímetros de anclaje " "conectados a una sola línea de relleno." msgid "0 (no open anchors)" @@ -11443,7 +11622,7 @@ msgid "Enable accel_to_decel" msgstr "Activar acel_a_decel" msgid "Klipper's max_accel_to_decel will be adjusted automatically" -msgstr "El max_accel_a_decel de Klipper será ajustado automaticamente" +msgstr "El max_accel_to_decel de Klipper será ajustado automáticamente" msgid "accel_to_decel" msgstr "accel_to_decel" @@ -11483,7 +11662,7 @@ msgstr "Altura de la primera capa" msgid "" "Height of initial layer. Making initial layer height to be thick slightly " -"can improve build plate adhension" +"can improve build plate adhesion" msgstr "" "Altura de la primera capa. Hacer que la altura de la primera capa sea " "ligeramente gruesa puede mejorar la adherencia de la bandeja de impresión" @@ -11534,7 +11713,7 @@ msgid "" msgstr "" "La velocidad de ventilador se incrementará linealmente de cero a " "\"close_fan_the_first_x_layers\" al máximo de capa \"full_fan_speed_layer\". " -"\"full_fan_speed_layer\" se ignorará si es menor que " +"\"full_fan_speed_layer\" se ignorará si es menor que " "\"close_fan_the_first_x_layers\", en cuyo caso el ventilador funcionará al " "máximo permitido de capa \"close_fan_the_first_x_layers\" + 1." @@ -11724,8 +11903,8 @@ msgstr "Mejor posición de los objetos" msgid "Best auto arranging position in range [0,1] w.r.t. bed shape." msgstr "" -"Mejor auto posicionamiento de los objetos en el intervalo [0,1] con respecto " -"a la forma de la cama." +"Mejor auto posicionamiento de los objetos en el rango [0,1] con respecto a " +"la forma de la cama." msgid "" "Enable this option if machine has auxiliary part cooling fan. G-code " @@ -11807,7 +11986,7 @@ msgid "" "G-code command: M106 P3 S(0-255)" msgstr "" "Active esta opción si la impresora admite filtración de aire\n" -"Comando G-code: M106 P3 S(0-255)" +"Comando G-Code: M106 P3 S(0-255)" msgid "G-code flavor" msgstr "Tipo de G-Code" @@ -11818,6 +11997,13 @@ msgstr "Con qué tipo de G-Code es compatible la impresora" msgid "Klipper" msgstr "Klipper" +msgid "Pellet Modded Printer" +msgstr "Impresora Pellet Modificada" + +msgid "Enable this option if your printer uses pellets instead of filaments" +msgstr "" +"Active esta opción si su impresora utiliza pellets en lugar de filamentos" + msgid "Support multi bed types" msgstr "Admite varios tipos de cama" @@ -11888,14 +12074,14 @@ msgid "" "value to ~10-15% to minimize potential over extrusion and accumulation of " "material resulting in rough top surfaces." msgstr "" -"El área de relleno se amplía ligeramente para solaparse con la pared y " +"El área de relleno se amplía ligeramente para solaparse con el perímetro y " "mejorar la adherencia. El valor porcentual es relativo a la anchura de línea " "del de baja densidad. Ajuste este valor a ~10-15% para minimizar la " "sobreextrusión potencial y la acumulación de material que resulta en " "superficies superiores ásperas." msgid "Top/Bottom solid infill/wall overlap" -msgstr "Relleno sólido superior/inferior/solapamiento de paredes" +msgstr "Relleno sólido superior/inferior/solapamiento de perímetros" #, no-c-format, no-boost-format msgid "" @@ -11906,10 +12092,10 @@ msgid "" "sparse infill" msgstr "" "El área de relleno sólido de cubierta superior se amplía ligeramente para " -"solaparse con la pared y mejorar la adherencia y minimizar la aparición de " -"agujeros de alfiler donde el relleno de cubierta superior se une a las " -"paredes. Un valor del 25-30% es un buen punto de partida para minimizar la " -"aparición de agujeros. El valor porcentual es relativo a la anchura de la " +"solaparse con el perímetro y mejorar la adherencia y minimizar la aparición " +"de agujeros de alfiler donde el relleno de cubierta superior se une a las " +"perímetros. Un valor del 25-30% es un buen punto de partida para minimizar " +"la aparición de agujeros. El valor porcentual es relativo a la anchura de la " "línea de relleno de baja densidad" msgid "Speed of internal sparse infill" @@ -11932,15 +12118,76 @@ msgstr "Máximo ancho de una región segmentada" msgid "Maximum width of a segmented region. Zero disables this feature." msgstr "" -"Máximo ancho de una región segmentada. Zero desactiva está característica." +"Máximo ancho de una región segmentada. Cero desactiva está característica." msgid "Interlocking depth of a segmented region" msgstr "Profundidad de entrelazado de una región segmentada" -msgid "Interlocking depth of a segmented region. Zero disables this feature." +msgid "" +"Interlocking depth of a segmented region. It will be ignored if " +"\"mmu_segmented_region_max_width\" is zero or if " +"\"mmu_segmented_region_interlocking_depth\"is bigger then " +"\"mmu_segmented_region_max_width\". Zero disables this feature." +msgstr "" +"Profundidad de enlazado de una región segmentada. Se ignorará si " +"\"mmu_segmented_region_max_width\" es cero o si " +"\"mmu_segmented_region_interlocking_depth \"es mayor que " +"\"mmu_segmented_region_max_width\". El valor cero desactiva esta función." + +msgid "Use beam interlocking" +msgstr "Usar entrelazado de vigas" + +msgid "" +"Generate interlocking beam structure at the locations where different " +"filaments touch. This improves the adhesion between filaments, especially " +"models printed in different materials." msgstr "" -"Profundidad de entrelazado de una región segmentada. Zero desactiva esta " -"característica." +"Genera una estructura de vigas de entrelazado en los lugares donde se tocan " +"los distintos filamentos. Esto mejora la adherencia entre filamentos, " +"especialmente en modelos impresos en distintos materiales." + +msgid "Interlocking beam width" +msgstr "Ancho de viga de entrelazado" + +msgid "The width of the interlocking structure beams." +msgstr "El ancho de estructura de vigas de entrelazado." + +msgid "Interlocking direction" +msgstr "Dirección de entrelazado" + +msgid "Orientation of interlock beams." +msgstr "Orientación de vigas entrelazadas." + +msgid "Interlocking beam layers" +msgstr "Capas de vigas de entrelazado" + +msgid "" +"The height of the beams of the interlocking structure, measured in number of " +"layers. Less layers is stronger, but more prone to defects." +msgstr "" +"La altura de las vigas de la estructura de entrelazado, medida en número de " +"capas. Menos capas es más fuerte, pero más propenso a defectos." + +msgid "Interlocking depth" +msgstr "Profundidad de entrelazado" + +msgid "" +"The distance from the boundary between filaments to generate interlocking " +"structure, measured in cells. Too few cells will result in poor adhesion." +msgstr "" +"La distancia desde el límite entre filamentos para generar estructura " +"entrelazada, medida en celdas. Un número demasiado bajo de celdas dará lugar " +"a una adhesión deficiente." + +msgid "Interlocking boundary avoidance" +msgstr "Evitar los limites de entrelazado" + +msgid "" +"The distance from the outside of a model where interlocking structures will " +"not be generated, measured in cells." +msgstr "" +"La distancia desde el exterior de un modelo donde no se generarán " +"estructuras entrelazadas, medida en celdas." msgid "Ironing Type" msgstr "Tipo de alisado" @@ -12029,8 +12276,8 @@ msgid "" "This option will be ignored if the g-code flavor is set to Klipper." msgstr "" "Si está activada, los límites de la máquina se emitirán en un archivo G-" -"code. \n" -"Esta opción se ignorará si el tipo de g-code es Klipper." +"Code. \n" +"Esta opción se ignorará si el tipo de G-Code es Klipper." msgid "" "This G-code will be used as a code for the pause print. User can insert " @@ -12220,10 +12467,10 @@ msgstr "" "(alta velocidad/ancho mayor) a una extrusión de menor flujo (menor velocidad/" "ancho menor) y viceversa.\n" "\n" -"Define la velocidad máxima a la que el flujo volumétrico extruido en mm3/" -"seg2 puede cambiar con el tiempo. Valores más altos significan que se " -"permiten cambios de velocidad de extrusión más altos, lo que resulta en " -"transiciones de velocidad más rápidas.\n" +"Define la velocidad máxima a la que el flujo volumétrico extruido en mm3/seg " +"puede cambiar con el tiempo. Valores más altos significan que se permiten " +"cambios de velocidad de extrusión más altos, lo que resulta en transiciones " +"de velocidad más rápidas.\n" "\n" "Un valor de 0 desactiva la función. \n" "\n" @@ -12262,8 +12509,8 @@ msgid "" "Allowed values: 1-5" msgstr "" "Un valor más bajo resulta en transiciones de velocidad de extrusión más " -"suaves. Sin embargo, esto resulta en un archivo gcode significativamente más " -"grande y más instrucciones para que la impresora procese. \n" +"suaves. Sin embargo, esto resulta en un archivo G-Code significativamente " +"más grande y más instrucciones para que la impresora procese. \n" "\n" "El valor por defecto de 3 funciona bien en la mayoría de los casos. Si su " "impresora está tartamudeando, aumente este valor para reducir el número de " @@ -12285,7 +12532,7 @@ msgstr "" "auxiliar funcionará a esta velocidad durante la impresión, excepto en las " "primeras capas, que se define como sin capas de refrigeración.\n" "Por favor, active auxiliary_fan en la configuración de la impresora para " -"utilizar esta función. Comando G-code: M106 P2 S(0-255)" +"utilizar esta función. Comando G-Code: M106 P2 S(0-255)" msgid "Min" msgstr "Min" @@ -12309,11 +12556,8 @@ msgstr "" "para intentar mantener el tiempo mínimo de capa anterior, cuando la " "ralentización para un mejor ventilación de la capa está activada." -msgid "Nozzle diameter" -msgstr "Diámetro de la boquilla" - msgid "Diameter of nozzle" -msgstr "Diámetro de la boquilla" +msgstr "Diámetro de boquilla" msgid "Configuration notes" msgstr "Anotaciones de configuración" @@ -12358,7 +12602,7 @@ msgstr "" "de los movimientos en su interior." msgid "High extruder current on filament swap" -msgstr "Alto flujo de extrusión en los cambio de filamento" +msgstr "Aumentar el flujo de extrusión en el cambio de filamento" msgid "" "It may be beneficial to increase the extruder motor current during the " @@ -12415,6 +12659,13 @@ msgstr "" "retracción para modelos complejos y ahorrar tiempo de impresión, pero hacer " "que el corte y la generación de G-Code sea más lento" +msgid "" +"This option will drop the temperature of the inactive extruders to prevent " +"oozing." +msgstr "" +"Esta opción reducirá la temperatura de los extrusores inactivos para evitar " +"el rezumado." + msgid "Filename format" msgstr "Formato de los archivos" @@ -12671,6 +12922,16 @@ msgstr "Pendiente" msgid "Spiral" msgstr "Espiral" +msgid "Traveling angle" +msgstr "Ángulo de desplazamiento" + +msgid "" +"Traveling angle for Slope and Spiral Z hop type. Setting it to 90° results " +"in Normal Lift" +msgstr "" +"Ángulo de desplazamiento para el tipo de salto de Pendiente y Espiral Z. Si " +"se ajusta a 90°, se obtiene una elevación normal." + msgid "Only lift Z above" msgstr "Solo elevar Z por encima" @@ -12728,8 +12989,8 @@ msgid "" "When the retraction is compensated after changing tool, the extruder will " "push this additional amount of filament." msgstr "" -"Cuando se compensa la retracción después de cambiar de herramienta, el " -"extrusor empujará esta cantidad adicional de filamento." +"Cuando se compensa la retracción después de cambiar de cabezal, el extrusor " +"empujará esta cantidad adicional de filamento." msgid "Retraction Speed" msgstr "Velocidad de retracción" @@ -12738,7 +12999,7 @@ msgid "Speed of retractions" msgstr "Velocidad de las retracciones" msgid "Deretraction Speed" -msgstr "Velocidad de desretracción" +msgstr "Velocidad de Desretracción" msgid "" "Speed for reloading filament into extruder. Zero means same speed with " @@ -12992,13 +13253,14 @@ msgid "" "be calculated based on the travel speed setting above.The default value for " "this parameter is 80%" msgstr "" -"La velocidad de barrido viene determinada por el ajuste de velocidad " -"especificado en esta configuración. Si el valor se expresa en porcentaje " -"(por ejemplo, 80%), se calculará en función del ajuste de velocidad de " -"desplazamiento anterior. El valor por defecto de este parámetro es 80%" +"La velocidad de limpieza es determinada por el ajuste de velocidad La " +"velocidad de limpieza es determinada por el ajuste de velocidad especificado " +"en esta configuración. Si el valor se expresa en porcentaje (por ejemplo, " +"80%), se calculará en función del ajuste de velocidad de desplazamiento " +"anterior. El valor por defecto de este parámetro es 80%" msgid "Skirt distance" -msgstr "Distancia de la falda" +msgstr "Distancia de falda" msgid "Distance from skirt to brim or object" msgstr "Distancia de la falda al borde de adherencia o al objeto" @@ -13010,7 +13272,7 @@ msgid "How many layers of skirt. Usually only one layer" msgstr "C capas de falda. Normalmente sólo una capa" msgid "Draft shield" -msgstr "Escudo de protección" +msgstr "Protector contra corrientes de aire" msgid "" "A draft shield is useful to protect an ABS or ASA print from warping and " @@ -13027,18 +13289,21 @@ msgid "" msgstr "" "Un protector contra corrientes de aire es útil para proteger una impresión " "en ABS o ASA de la deformación y el desprendimiento de la cama de impresión " -"debido a los flujoes de aire. Suele ser necesario solo en impresoras de " +"debido a los flujos de aire. Suele ser necesario solo en impresoras de " "bastidor abierto, es decir, sin cerramiento.\n" "\n" "Opciones:\n" -"Activado = la falda es tan alto como el objeto impreso más alto.\n" -"Limitado = la altura de la falda es la especificada por la altura del " -"falda.\n" +"Activado = la falda es tan alta como el objeto impreso más alto.\n" +"Limitado = la falda es tan alta cómo se especifica en el ajuste \"Altura de " +"falda\"\n" "\n" "Nota: Con el protector contra corrientes de aire activo, la falda se " -"imprimirá a la distancia del faldón del objeto. Por lo tanto, si los bordes " -"están activos, puede cruzarse con ellos. Para evitarlo, aumente el valor de " -"la distancia de la falda.\n" +"imprimirá a la distancia especificada en \"Distancia de falda\" del objeto. " +"Por lo tanto, si los bordes están activos, puede cruzarse con ellos. Para " +"evitarlo, aumente el valor de la \"Distancia de falda\".\n" +"imprimirá a la distancia especificada en \"Distancia de falda\" del objeto. " +"Por lo tanto, si los bordes están activos, puede cruzarse con ellos. Para " +"evitarlo, aumente el valor de la \"Distancia de la falda\".\n" msgid "Limited" msgstr "Limitado" @@ -13150,10 +13415,10 @@ msgstr "" "lapse para cada impresión. Después de imprimir cada capa, se toma una " "instantánea con la cámara. Todas estas instantáneas se componen en un vídeo " "time-lapse cuando finaliza la impresión. Si se selecciona el modo suave, el " -"cabezal de la herramienta se moverá a la rampa de exceso después de cada " -"capa se imprime y luego tomar una instantánea. Dado que el filamento fundido " -"puede gotear de la boquilla durante el proceso de tomar una instantánea, la " -"torre de purga es necesaria para el modo suave de limpiar la boquilla." +"cabezal se moverá a la rampa de exceso después de cada capa se imprime y " +"luego tomar una instantánea. Dado que el filamento fundido puede gotear de " +"la boquilla durante el proceso de tomar una instantánea, la torre de purga " +"es necesaria para el modo suave de limpiar la boquilla." msgid "Traditional" msgstr "Tradicional" @@ -13161,6 +13426,41 @@ msgstr "Tradicional" msgid "Temperature variation" msgstr "Variación de temperatura" +#. TRN PrintSettings : "Ooze prevention" > "Temperature variation" +msgid "" +"Temperature difference to be applied when an extruder is not active. The " +"value is not used when 'idle_temperature' in filament settings is set to non " +"zero value." +msgstr "" +"Diferencia de temperatura a aplicar cuando un extrusor no está activo. El " +"valor no se utiliza cuando 'idle_temperature' en los ajustes de filamento se " +"establece en un valor distinto de cero." + +msgid "Preheat time" +msgstr "Tiempo de Precalentamiento" + +msgid "" +"To reduce the waiting time after tool change, Orca can preheat the next tool " +"while the current tool is still in use. This setting specifies the time in " +"seconds to preheat the next tool. Orca will insert a M104 command to preheat " +"the tool in advance." +msgstr "" +"Para reducir el tiempo de espera tras el cambio de cabezal, Orca puede " +"precalentar lel siguiente cabezal mientras el cabezal actual todavía está en " +"uso. Este ajuste especifica el tiempo en segundos para precalentar la " +"siguiente herramienta. Orca insertará un comando M104 para precalentar el " +"cabezal por adelantado." + +msgid "Preheat steps" +msgstr "Pasos precalentamiento" + +msgid "" +"Insert multiple preheat commands(e.g. M104.1). Only useful for Prusa XL. For " +"other printers, please set it to 1." +msgstr "" +"Insertar múltiples comandos de precalentamiento (por ejemplo, M104.1). Sólo " +"útil para Prusa XL. Para otras impresoras, por favor ajústelo a 1." + msgid "Start G-code" msgstr "G-Code inicial" @@ -13187,7 +13487,7 @@ msgid "" "action." msgstr "" "Active esta opción para omitir el G-Code personalizado Cambiar filamento " -"sólo al principio de la impresión. El comando de cambio de herramienta (por " +"sólo al principio de la impresión. El comando de cambio de cabezal (por " "ejemplo, T0) se omitirá durante toda la impresión. Esto es útil para la " "impresión manual multi-material, donde utilizamos M600/PAUSE para activar la " "acción manual de cambio de filamento." @@ -13211,9 +13511,9 @@ msgid "" "with the print." msgstr "" "Sí está activado, la torre de purga no se imprimirá en las capa sin cambio " -"de herramienta. En las capas con cambio de herramienta, viajará hacía abajo " -"para imprimir la torre de purga. El usuario es responsable de asegurarse que " -"no hay colisiones con la impresión." +"de cabezal. En las capas con cambio de cabezal, viajará hacía abajo para " +"imprimir la torre de purga. El usuario es responsable de asegurarse que no " +"hay colisiones con la impresión." msgid "Prime all printing extruders" msgstr "Purgar todos los extrusores" @@ -13709,11 +14009,11 @@ msgid "" "This gcode is inserted when change filament, including T command to trigger " "tool change" msgstr "" -"Este gcode se inserta al cambiar de filamento, incluyendo el comando T para " -"activar el cambio de herramienta" +"Este G-Code se inserta al cambiar de filamento, incluyendo el comando T para " +"activar el cambio de cabezal" msgid "This gcode is inserted when the extrusion role is changed" -msgstr "Este gcode se inserta cuando se cambia el rol de extrusión" +msgstr "Este G-Code se inserta cuando se cambia el rol de extrusión" msgid "" "Line width for top surfaces. If expressed as a %, it will be computed over " @@ -13843,12 +14143,6 @@ msgstr "" "Ángulo del vértice del cono que se usa para estabilidad la torre de purga. " "Un angulo mayor significa una base más ancha." -msgid "Wipe tower purge lines spacing" -msgstr "Separación de las líneas de la torre de purga" - -msgid "Spacing of purge lines on the wipe tower." -msgstr "Separación de las líneas de la torre de purga." - msgid "Maximum wipe tower print speed" msgstr "Velocidad máxima de impresión de la torre de purga" @@ -13889,15 +14183,12 @@ msgstr "" "\n" "Antes de aumentar este parámetro más allá del valor por defecto de 90mm/seg, " "asegúrese de que su impresora puede puentear de forma fiable a las " -"velocidades aumentadas y que el rezume al cambiar de herramienta está bien " +"velocidades aumentadas y que el rezume al cambiar de cabezal está bien " "controlado.\n" "\n" "Para los perímetros externos de la torre de purga se utiliza la velocidad " "del perímetro interno independientemente de este ajuste." -msgid "Wipe tower extruder" -msgstr "Extrusor de torre de purga" - msgid "" "The extruder to use when printing perimeter of the wipe tower. Set to 0 to " "use the one that is available (non-soluble would be preferred)." @@ -13913,9 +14204,9 @@ msgid "" "wipe tower. These values are used to simplify creation of the full purging " "volumes below." msgstr "" -"Este vector guarda los volúmenes necesarios para cambiar de/a cada " -"herramienta utilizada en la torre de purga. Estos valores se utilizan para " -"simplificar la creación de los volúmenes de purga completos a continuación." +"Este vector guarda los volúmenes necesarios para cambiar de/a cada cabezal " +"utilizada en la torre de purga. Estos valores se utilizan para simplificar " +"la creación de los volúmenes de purga completos a continuación." msgid "" "Purging after filament change will be done inside objects' infills. This may " @@ -13956,6 +14247,35 @@ msgstr "" "Distancia máxima entre los soportes en las sección de relleno de baja " "densidad." +msgid "Wipe tower purge lines spacing" +msgstr "Separación de las líneas de la torre de purga" + +msgid "Spacing of purge lines on the wipe tower." +msgstr "Separación de las líneas de la torre de purga." + +msgid "Extra flow for purging" +msgstr "Caudal adicional para purgar" + +msgid "" +"Extra flow used for the purging lines on the wipe tower. This makes the " +"purging lines thicker or narrower than they normally would be. The spacing " +"is adjusted automatically." +msgstr "" +"Flujo extra utilizado para las líneas de purga en la torre de limpieza. Esto " +"hace que las líneas de purga sean más gruesas o más estrechas de lo normal. " +"La separación se ajusta automáticamente." + +msgid "Idle temperature" +msgstr "Temperatura en Espera" + +msgid "" +"Nozzle temperature when the tool is currently not used in multi-tool setups." +"This is only used when 'Ooze prevention' is active in Print Settings. Set to " +"0 to disable." +msgstr "" +"Temperatura de la boquilla cuando el cabezal no se está utilizando en " +"configuraciones multicabezal. Póngalo a 0 para desactivarlo." + msgid "X-Y hole compensation" msgstr "Compensación de huecos X-Y" @@ -14165,7 +14485,11 @@ msgstr "" "\n" "NOTA: Las superficies inferior y superior no se verán afectadas por este " "valor para evitar huecos visuales en el exterior del modelo. Ajuste \"Umbral " -"de perímetro\" en la configuración avanzada para ajustar la sensibilidad de " +"de Perímetro\" en la configuración avanzada para ajustar la sensibilidad de " +"lo que se considera una superficie superior. El \"Umbral de un Solo " +"Perímetro\" sólo es visible si este valor es superior al valor " +"predeterminado de 0,5, o si las superficies superiores de un solo perímetro " +"están activados." msgid "First layer minimum wall width" msgstr "Ancho mínimo del perímetro de la primera capa" @@ -14308,6 +14632,16 @@ msgstr "" "Actualmente está previsto un purgado adicional del extrusor después de la " "desretracción." +msgid "Absolute E position" +msgstr "Posición E absoluta" + +msgid "" +"Current position of the extruder axis. Only used with absolute extruder " +"addressing." +msgstr "" +"Posición actual del eje del extrusor. Sólo se utiliza con direccionamiento " +"absoluto del extrusor." + msgid "Current extruder" msgstr "Extrusora actual" @@ -14338,7 +14672,7 @@ msgid "" "initial_tool." msgstr "" "Índice de base cero del primer extrusor utilizado en la impresión. Igual que " -"herramienta inicial." +"cabezal inicial." msgid "Initial tool" msgstr "Herramienta inicial" @@ -14358,6 +14692,14 @@ msgstr "" "Vector de bools que indica si un determinado extrusor se utiliza en la " "impresión." +msgid "Has single extruder MM priming" +msgstr "Parámetros de cambio de cabezal para impresoras de 1 extrusor MM" + +msgid "Are the extra multi-material priming regions used in this print?" +msgstr "" +"¿Se utilizan las regiones de imprimación multimaterial adicionales en esta " +"impresión?" + msgid "Volume per extruder" msgstr "Volumen por extrusora" @@ -14366,10 +14708,10 @@ msgstr "" "Volumen total de filamento extruido por extrusor durante toda la impresión." msgid "Total toolchanges" -msgstr "Total de cambios de herramientas" +msgstr "Total de cambios de cabezales" msgid "Number of toolchanges during the print." -msgstr "Número de cambios de herramienta durante la impresión." +msgstr "Número de cambios de cabezal durante la impresión." msgid "Total volume" msgstr "Volumen total" @@ -14495,26 +14837,26 @@ msgid "Minute" msgstr "Minuto" msgid "Print preset name" -msgstr "Imprimir nombre de preajuste" +msgstr "Imprimir nombre de perfil" msgid "Name of the print preset used for slicing." -msgstr "Nombre del preajuste de impresión utilizado para el corte." +msgstr "Nombre del perfil de impresión utilizado para el corte." msgid "Filament preset name" -msgstr "Nombre del preajuste de filamento" +msgstr "Nombre del perfil de filamento" msgid "" "Names of the filament presets used for slicing. The variable is a vector " "containing one name for each extruder." msgstr "" -"Nombres de los preajustes de filamento utilizados para el corte. La variable " +"Nombres de los perfiles de filamento utilizados para el corte. La variable " "es un vector que contiene un nombre para cada extrusor." msgid "Printer preset name" -msgstr "Nombre de preajuste de la impresora" +msgstr "Nombre de perfil de la impresora" msgid "Name of the printer preset used for slicing." -msgstr "Nombre del preajuste de impresora utilizado para laminar." +msgstr "Nombre del perfil de impresora utilizado para laminar." msgid "Physical printer name" msgstr "Nombre físico de la impresora" @@ -14522,6 +14864,16 @@ msgstr "Nombre físico de la impresora" msgid "Name of the physical printer used for slicing." msgstr "Nombre de la impresora física utilizada para el corte." +msgid "Number of extruders" +msgstr "Número de Cabezales" + +msgid "" +"Total number of extruders, regardless of whether they are used in the " +"current print." +msgstr "" +"Número total de extrusores, independientemente de si se utilizan en la " +"impresión actual." + msgid "Layer number" msgstr "Número de capa" @@ -14591,7 +14943,7 @@ msgstr "" "generación de soporte." msgid "Optimizing toolpath" -msgstr "Optimización de la trayectoria de la herramienta" +msgstr "Optimización de la trayectoria de cabezal" msgid "Slicing mesh" msgstr "Malla de corte" @@ -14833,8 +15185,8 @@ msgid "" "This machine type can only hold %d history results per nozzle. This result " "will not be saved." msgstr "" -"This machine type can only hold %d historical results per nozzle. This " -"result will not be saved." +"Este tipo de máquina sólo puede guardar %d resultados históricos por " +"boquilla. Este resultado no se guardará." msgid "Internal Error" msgstr "Error interno" @@ -14901,6 +15253,12 @@ msgstr "" "wiki.\n" "\n" "Normalmente la calibración es innecesaria. Cuando se inicia una impresión de " +"un solo color/material, con la opción \"Calibración de Dinámica de Flujo\" " +"marcada en el menú de inicio de impresión, la impresora seguirá el camino " +"antiguo, calibrar el filamento antes de la impresión; cuando se inicia una " +"impresión de varios colores/materiales, la impresora utilizará el parámetro " +"de compensación por defecto para el filamento durante cada cambio de " +"filamento que tendrá un buen resultado en la mayoría de los casos.\n" "un solo color/material, con la opción \"calibración de la dinámica de " "flujo\" marcada en el menú de inicio de impresión, la impresora seguirá el " "camino antiguo, calibrar el filamento antes de la impresión; cuando se " @@ -14909,10 +15267,10 @@ msgstr "" "de filamento que tendrá un buen resultado en la mayoría de los casos.\n" "\n" "Tenga en cuenta que hay algunos casos que pueden hacer que los resultados de " -"la calibración no sean fiables, como una adhesión insuficiente en la placa " -"de impresión. Se puede mejorar la adherencia lavando la placa de impresión o " -"aplicando pegamento. Para obtener más información sobre este tema, consulte " -"nuestra Wiki.\n" +"la calibración no sean fiables, como una adhesión insuficiente en la bandeja " +"de impresión. Se puede mejorar la adherencia lavando la bandeja de impresión " +"o aplicando pegamento. Para obtener más información sobre este tema, " +"consulte nuestra Wiki.\n" "\n" "Los resultados de la calibración tienen alrededor de un 10 por ciento de " "fluctuación en nuestra prueba, lo que puede causar que el resultado no sea " @@ -14934,6 +15292,7 @@ msgid "" "they should be." msgstr "" "Después de usar la Calibración de Dinámicas de Flujo, puede haber algunos " +"Después de usar la Calibración de Dinámicas de Flujo, puede haber algunos " "problemas de extrusión, como:\n" "1. Sobre extrusión: Exceso de material en la impresión, formando truños o " "capas más anchas y no uniformes.\n" @@ -14966,7 +15325,7 @@ msgstr "" "esperados y los reales. La configuración predeterminada funciona bien en las " "impresoras Bambu Lab y en los filamentos oficiales, ya que fueron " "precalibrados y ajustados con precisión. Para un filamento normal, " -"normalmente no necesitarás realizar una Calibración de Caudal a menos que " +"normalmente no necesitarás realizar una Calibración de Flujo a menos que " "sigas viendo los defectos listados después de haber realizado otras " "calibraciones. Para más detalles, consulte el artículo de la wiki." @@ -14989,6 +15348,7 @@ msgid "" "read and understand the process before doing it." msgstr "" "La auto Calibración de Ratio de Flujo utiliza la tecnología Micro-Lidar de " +"La auto Calibración de Ratio de Flujo utiliza la tecnología Micro-Lidar de " "Bambu Lab, midiendo directamente los patrones de calibración. Sin embargo, " "tenga en cuenta que la eficacia y precisión puede verse comprometida con " "algunos tipos de material. Particularmente, los filamentos que son " @@ -15000,7 +15360,7 @@ msgstr "" "filamento. Seguimos mejorando la precisión y compatibilidad de esta " "calibración mediante actualizaciones de firmware a lo largo del tiempo.\n" "\n" -"Precaución: La Calibración del Caudal es un proceso avanzado, que sólo debe " +"Precaución: La Calibración del Flujo es un proceso avanzado, que sólo debe " "ser realizado por aquellos que entiendan completamente su propósito e " "implicaciones. Un uso incorrecto puede dar lugar a impresiones de calidad " "inferior o a daños en la impresora. Por favor asegúrese de leer " @@ -15017,10 +15377,10 @@ msgstr "" "Se recomienda calibrar la Velocidad Volumétrica Máxima cuando imprima con:" msgid "material with significant thermal shrinkage/expansion, such as..." -msgstr "material con importante contracción/expansión térmica, como..." +msgstr "Material con importante contracción/expansión térmica, como..." msgid "materials with inaccurate filament diameter" -msgstr "materiales con diámetro de filamento inpreciso" +msgstr "Materiales con diámetro de filamento impreciso" msgid "We found the best Flow Dynamics Calibration Factor" msgstr "Hemos encontrado el mejor Factor de Calibración de Dinámicas de Flujo" @@ -15103,7 +15463,7 @@ msgstr "Saltar Calibración2" #, c-format, boost-format msgid "flow ratio : %s " -msgstr "ratio de flujo: %s " +msgstr "Ratio de flujo: %s " msgid "Please choose a block with smoothest top surface" msgstr "Por favor, escoja un bloque con la superficie superior más lisa" @@ -15142,7 +15502,7 @@ msgid "Plate Type" msgstr "Tipo de Bandeja" msgid "filament position" -msgstr "posición de filamento" +msgstr "Posición de filamento" msgid "External Spool" msgstr "Bobina Externa" @@ -15202,13 +15562,13 @@ msgid "Flow Dynamics Calibration Result" msgstr "Resultado de Calibración de Dinámicas de Flujo" msgid "New" -msgstr "New" +msgstr "Nuevo" msgid "No History Result" -msgstr "Sin Resultados Históricos" +msgstr "Sin Historial de Resultados" msgid "Success to get history result" -msgstr "Éxito recuperando los resultados históricos" +msgstr "Éxito recuperando el historial de resultados" msgid "Refreshing the historical Flow Dynamics Calibration records" msgstr "" @@ -15227,13 +15587,13 @@ msgid "Edit Flow Dynamics Calibration" msgstr "Editar Calibración de Dinámicas de Flujo" msgid "New Flow Dynamic Calibration" -msgstr "Nueva Calibración Dinámica del Caudal" +msgstr "Nueva Calibración Dinámica del Flujo" msgid "Ok" msgstr "Ok" msgid "The filament must be selected." -msgstr "Debe seleccionarse el filamento." +msgstr "Debe seleccionar el filamento." msgid "Network lookup" msgstr "Búsqueda de red" @@ -15324,7 +15684,7 @@ msgid "PETG" msgstr "PETG" msgid "PCTG" -msgstr "" +msgstr "PCTG" msgid "TPU" msgstr "TPU" @@ -15368,7 +15728,7 @@ msgid "End volumetric speed: " msgstr "Velocidad volumétrica final: " msgid "step: " -msgstr "paso: " +msgstr "Paso: " msgid "" "Please input valid values:\n" @@ -15402,10 +15762,10 @@ msgstr "" "final > inicio + paso)" msgid "Start retraction length: " -msgstr "Iniciar anchura de retracción: " +msgstr "Longitud de retracción inicial:" msgid "End retraction length: " -msgstr "Finalizar " +msgstr "Longitud de retracción final:" msgid "mm/mm" msgstr "mm/mm" @@ -15417,9 +15777,7 @@ msgid "Upload to Printer Host with the following filename:" msgstr "Subido al Host de Impresión con el siguiente nombre de archivo:" msgid "Use forward slashes ( / ) as a directory separator if needed." -msgstr "" -"Use barras oblicuas como separador de directorio \n" -"si es necesario." +msgstr "Use barras oblicuas como separador de directorio si es necesario." msgid "Upload to storage" msgstr "Subir a almacenamiento" @@ -15549,7 +15907,7 @@ msgid "Log Info" msgstr "Información de Registro" msgid "Select filament preset" -msgstr "Seleccionar Filamento Preestablecido" +msgstr "Seleccionar perfil de filamento" msgid "Create Filament" msgstr "Crear Filamento" @@ -15573,7 +15931,7 @@ msgid "Select Vendor" msgstr "Seleccionar Fabricante" msgid "Input Custom Vendor" -msgstr "Introducor Fabricante Personalizado" +msgstr "Introducir Fabricante Personalizado" msgid "Can't find vendor I want" msgstr "No es posible encontrar el fabricante que deseamos" @@ -15646,7 +16004,7 @@ msgid "" "name. Do you want to continue?" msgstr "" "El nombre del filamento %s que ha creado ya existe. \n" -"Si continúa, el preajuste creado se mostrará con su nombre completo. ¿Desea " +"Si continúa, el perfil creado se mostrará con su nombre completo. ¿Desea " "continuar?" msgid "Some existing presets have failed to be created, as follows:\n" @@ -15666,9 +16024,9 @@ msgid "" "selected\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" -"Cambiaríamos el nombre de los preajustes a \"Número de serie del Vendedor " -"@impresora que ha seleccionado\". \n" -"Para añadir preajustes para más impresoras, vaya a selección de impresoras" +"Cambiaremos el nombre de los perfiles a \"Tipo Número de Serie @impresora " +"seleccionados\". \n" +"Para añadir perfiles para más impresoras, vaya a la selección de impresoras" msgid "Create Printer/Nozzle" msgstr "Crear Impresora/Boquilla" @@ -15691,7 +16049,7 @@ msgstr "Importar Perfil" msgid "Create Type" msgstr "Crear Tipo" -msgid "The model is not fond, place reselect vendor." +msgid "The model is not found, place reselect vendor." msgstr "No se encuentra el modelo, vuelva a seleccionar fabricante." msgid "Select Model" @@ -15743,11 +16101,11 @@ msgstr "" msgid "The printer model was not found, please reselect." msgstr "No se ha encontrado el modelo de impresora, vuelva a seleccionarlo." -msgid "The nozzle diameter is not fond, place reselect." +msgid "The nozzle diameter is not found, place reselect." msgstr "" "El diámetro de la boquilla no es adecuado, vuelva a seleccionar el lugar." -msgid "The printer preset is not fond, place reselect." +msgid "The printer preset is not found, place reselect." msgstr "" "El perfil de impresora se ha encontrado, por favor, vuelva a seleccionarlo." @@ -15796,7 +16154,7 @@ msgid "" msgstr "" "El perfil de impresora que ha creado ya tiene un perfil con el mismo nombre. " "¿Desea sobrescribirlo?\n" -"\tSí: sobrescriba el perfil de impresora con el mismo nombre, y los perfiles " +"\tSí: sobrescribe el perfil de impresora con el mismo nombre, y los perfiles " "de filamento y proceso con el mismo nombre de perfil se volverán a crear \n" "y los perfiles de filamento y proceso sin el mismo nombre de perfil se " "reservarán.\n" @@ -15872,7 +16230,7 @@ msgid "" "them carefully." msgstr "" "Por favor, vaya a la configuración de filamento para editar sus ajustes " -"perfils si es necesario.\n" +"perfiles si es necesario.\n" "Tenga en cuenta que la temperatura de la boquilla, la temperatura de la cama " "caliente y la velocidad volumétrica máxima tienen un impacto significativo " "en la calidad de impresión. Por favor, configúrelos con cuidado." @@ -15887,11 +16245,11 @@ msgid "" msgstr "" "\n" "\n" -"Orca ha detectado que la función de sincronización de las preconfiguraciones " -"de usuario no está activada, lo que puede dar lugar a una configuración " +"Orca ha detectado que la función de sincronización de los perfiles de " +"usuario no está activada, lo que puede dar lugar a una configuración " "incorrecta del filamento en la página Dispositivo.\n" -"Haga clic en \"Sincronizar preajustes de usuario\" para activar la función " -"de sincronización." +"Haga clic en \"Sincronizar perfiles de usuario\" para activar la función de " +"sincronización." msgid "Printer Setting" msgstr "Ajustes de Impresora" @@ -15953,8 +16311,8 @@ msgid "" "User's fillment preset set. \n" "Can be shared with others." msgstr "" -"Conjunto de perfiles de relleno del usuario. \n" -"Se puede compartir con otros." +"Conjunto de perfiles de filamento del usuario. \n" +"Se pueden compartir con otros." msgid "" "Only display printer names with changes to printer, filament, and process " @@ -16065,7 +16423,7 @@ msgid "The filament choice not find filament preset, please reselect it" msgstr "Perfil de filamento no encontrado, por favor, seleccione otro" msgid "[Delete Required]" -msgstr "[Suprimir Obligatorio]" +msgstr "[Necesario Eliminar]" msgid "Edit Preset" msgstr "Editar Perfil" @@ -16346,7 +16704,7 @@ msgstr "" "En comparación con el perfil predeterminado de una boquilla de 0,2 mm, tiene " "una altura de capa menor. Esto da como resultado líneas de capa casi " "invisibles y una mayor calidad de impresión, pero un tiempo de impresión más " -"largo." +"corto." msgid "" "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " @@ -16483,9 +16841,9 @@ msgid "" "prints, but more filament consumption and longer printing time." msgstr "" "En comparación con el perfil predeterminado de una boquilla de 0,6 mm, tiene " -"más bucles de pared y una mayor relleno de baja densidad. Esto se traduce en " -"una mayor resistencia de impresión, pero un mayor consumo de filamento y un " -"tiempo de impresión más largo." +"más bucles de perímetro y una mayor relleno de baja densidad. Esto se " +"traduce en una mayor resistencia de impresión, pero un mayor consumo de " +"filamento y un tiempo de impresión más largo." msgid "" "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " @@ -16586,7 +16944,7 @@ msgstr "¡Se ha conectado correctamente a SimplyPrint!" msgid "Could not connect to SimplyPrint" msgstr "No se ha podido conectar con SimplyPrint" -msgid "Internel error" +msgid "Internal error" msgstr "Error interno" msgid "Unknown error" @@ -16645,7 +17003,7 @@ msgid "" "Did you know that OrcaSlicer supports chamber temperature?" msgstr "" "Temperatura de la cámara \n" -"¿Sabía que OrcaSlicer admite la temperatura de la cámara?" +"¿Sabía que OrcaSlicer admite la temperatura de cámara?" #: resources/data/hints.ini: [hint:Calibration] msgid "" @@ -16737,9 +17095,8 @@ msgid "" "Timelapse\n" "Did you know that you can generate a timelapse video during each print?" msgstr "" -"Intervalo\n" -"¿Sabías que puedes generar un vídeo de intervalo de trabajo durante cada " -"impresión?" +"Timelapse\n" +"¿Sabías que puedes generar un vídeo timelapse durante cada impresión?" #: resources/data/hints.ini: [hint:Auto-Arrange] msgid "" @@ -17006,6 +17363,121 @@ msgstr "" "aumentar adecuadamente la temperatura del lecho térmico puede reducir la " "probabilidad de deformaciones." +#~ msgid "up to" +#~ msgstr "hasta" + +#~ msgid "above" +#~ msgstr "sobre" + +#~ msgid "from" +#~ msgstr "desde" + +#~ msgid "Switching application language while some presets are modified." +#~ msgstr "" +#~ "Cambiando idioma de la aplicación mientras se modifican algunos perfiles." + +#~ msgid "⌘+Shift+G" +#~ msgstr "⌘+Shift+G" + +#~ msgid "Ctrl+Shift+G" +#~ msgstr "Ctrl+Shift+G" + +#~ msgid "⌥+Left mouse button" +#~ msgstr "Botón de ratón ⌥+Left" + +#~ msgid "⌘+Left mouse button" +#~ msgstr "⌘+botón izquierdo de ratón" + +#~ msgid "Ctrl+Any arrow" +#~ msgstr "Ctrl+Cualquier flecha" + +#~ msgid "Alt+Left mouse button" +#~ msgstr "Alt+Botón izquierdo de ratón" + +#~ msgid "Ctrl+Left mouse button" +#~ msgstr "Ctrl+Botón izquierdo de ratón" + +#~ msgid "⌘+Mouse wheel" +#~ msgstr "⌘+Rueda del ratón" + +#~ msgid "⌥+Mouse wheel" +#~ msgstr "⌥+Rueda del ratón" + +#~ msgid "Ctrl+Mouse wheel" +#~ msgstr "Ctrl+Rueda del ratón" + +#~ msgid "Alt+Mouse wheel" +#~ msgstr "Alt+Rueda del ratón" + +#~ msgid "" +#~ "Interlocking depth of a segmented region. Zero disables this feature." +#~ msgstr "" +#~ "Profundidad de entrelazado de una región segmentada. Cero desactiva esta " +#~ "característica." + +#~ msgid "Wipe tower extruder" +#~ msgstr "Extrusor de torre de purga" + +#~ 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 "" +#~ "Cuando grabamos timelapse sin cabezal de impresión, es recomendable " +#~ "añadir un \"Torre de Purga de Intervalo\" \n" +#~ "presionando con el botón derecho la posición vacía de la bandeja de " +#~ "construcción y elegir \"Añadir Primitivo\"->\"Intervalo de Torre de " +#~ "Purga\"." + +#~ msgid "" +#~ "We would rename the presets as \"Vendor Type Serial @printer you " +#~ "selected\". \n" +#~ "We would rename the presets as \"Vendor Type Serial @printer you " +#~ "selected\". \n" +#~ "To add preset for more printers, Please go to printer selection" +#~ msgstr "" +#~ "Cambiaríamos el nombre de los preajustes a \"Número de serie del Vendedor " +#~ "@impresora que ha seleccionado\". \n" +#~ "Para añadir preajustes para más impresoras, vaya a selección de impresoras" + +#~ msgid "Current association: " +#~ msgstr "Asociación actual:" + +#~ msgid "Associate prusaslicer://" +#~ msgstr "Asociar prusaslicer://" + +#~ msgid "Not associated to any application" +#~ msgstr "No asociado a ninguna aplicación" + +#~ msgid "" +#~ "Associate OrcaSlicer with prusaslicer:// links so that Orca can open " +#~ "models from Printable.com" +#~ msgstr "" +#~ "Asociar OrcaSlicer con prusaslicer:// enlaces para que Orca puede abrir " +#~ "modelos de Printables.com" + +#~ msgid "Associate bambustudio://" +#~ msgstr "Asociar bambustudio://" + +#~ msgid "" +#~ "Associate OrcaSlicer with bambustudio:// links so that Orca can open " +#~ "models from makerworld.com" +#~ msgstr "" +#~ "Asociar OrcaSlicer con bambustudio:// enlaces para que Orca puede abrir " +#~ "modelos de makerworld.com" + +#~ msgid "Associate cura://" +#~ msgstr "Asociar cura://" + +#~ msgid "" +#~ "Associate OrcaSlicer with cura:// links so that Orca can open models from " +#~ "thingiverse.com" +#~ msgstr "" +#~ "Asociar OrcaSlicer con enlaces cura:// para que Orca pueda abrir modelos " +#~ "desde thingiverse.com" + #~ msgid "" #~ "File size exceeds the 100MB upload limit. Please upload your file through " #~ "the panel." @@ -17450,16 +17922,6 @@ msgstr "" #~ msgid "No sparse layers (EXPERIMENTAL)" #~ msgstr "Capas de baja densidad (EXPERIMENTAL)" -#~ msgid "" -#~ "We would rename the presets as \"Vendor Type Serial @printer you " -#~ "selected\". \n" -#~ "To add preset for more prinetrs, Please go to printer selection" -#~ msgstr "" -#~ "Cambiaremos el nombre de los perfiles a \"Tipo Número de Serie @impresora " -#~ "seleccionados\". \n" -#~ "Para añadir perfiles para más impresoras, vaya a la selección de " -#~ "impresoras" - #~ msgid "The Config can not be loaded." #~ msgstr "La Configuración no será cargada." @@ -17737,13 +18199,6 @@ msgstr "" #~ msgid "Add/Remove printers" #~ msgstr "Añadir/Borrar impresoras" -#~ msgid "" -#~ "When print by object, machines with I3 structure will not generate " -#~ "timelapse videos." -#~ msgstr "" -#~ "Cuando imprima por objeto, las máquinas con estructura I3 no generará " -#~ "videos timelapse." - #, c-format, boost-format #~ msgid "%s is not supported by AMS." #~ msgstr "%s no está soportado por el AMS." @@ -19142,15 +19597,6 @@ msgstr "" #~ msgid "Spiral mode" #~ msgstr "Modo espiral" -#~ msgid "" -#~ "Spiral mode only works when wall loops is 1, \n" -#~ "support is disabled, top shell layers is 0 and sparse infill density is " -#~ "0\n" -#~ msgstr "" -#~ "El modo espiral sólo funciona cuando los bucles de pared son 1, \n" -#~ "el soporte está desactivado, las capas superiores de la cáscara es 0 y la " -#~ "densidad de relleno dispersa es 0\n" - #~ msgid "Successfully sent.Will automatically jump to the device page in %s s" #~ msgstr "" #~ "Enviado con éxito. Saltará automáticamente a la página del dispositivo en " @@ -19257,13 +19703,6 @@ msgstr "" #~ msgid "Waiting" #~ msgstr "Esperando" -#~ msgid "" -#~ "When recording timelapse without toolhead, it is recommended to add a " -#~ "\"Timelapse Wipe Tower\" \n" -#~ "by right-click the empty position of build plate and choose \"Add " -#~ "Primitive\"->\"Timelapse Wipe Tower\".\n" -#~ msgstr "\n" - #~ msgid "" #~ "You have changed some preset settings. \n" #~ "Would you like to keep these changed settings after switching preset?" @@ -19625,15 +20064,6 @@ msgstr "" #~ "Detección de hilos en la impresión y exceso de material de purga en el " #~ "vertedero." -#~ 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" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index 81bba4fe876..61fcb5eb5e6 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -7,10 +7,10 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-06-30 15:44+0200\n" +"POT-Creation-Date: 2024-07-30 10:20+0900\n" "PO-Revision-Date: 2024-05-31 23:33+0900\n" -"Last-Translator: Hotsolidinfill <138652683+Hotsolidinfill@users.noreply." -"github.com>, crwusiz \n" +"Last-Translator: ElectricalBoy <15651807+ElectricalBoy@users.noreply.github." +"com>\n" "Language-Team: \n" "Language: ko_KR\n" "MIME-Version: 1.0\n" @@ -79,9 +79,6 @@ msgstr "스마트 채우기 각도" msgid "On overhangs only" msgstr "돌출부에만 칠하기" -msgid "Auto support threshold angle: " -msgstr "자동 지지대 임계값 각도: " - msgid "Circle" msgstr "원" @@ -101,6 +98,9 @@ msgstr "\"%1%\"에서 선택한 영역에만 칠하기 허용" msgid "Highlight faces according to overhang angle." msgstr "돌출부 각도에 따라 면을 강조 표시합니다." +msgid "Auto support threshold angle: " +msgstr "자동 지지대 임계값 각도: " + msgid "No auto support" msgstr "자동 지지대 비활성" @@ -4052,15 +4052,6 @@ msgstr "시간 합계" msgid "Total cost" msgstr "총 비용" -msgid "up to" -msgstr "까지" - -msgid "above" -msgstr "위에" - -msgid "from" -msgstr "부터" - msgid "Color Scheme" msgstr "색 구성표" @@ -4124,12 +4115,12 @@ msgstr "필라멘트 변경 시간" msgid "Cost" msgstr "비용" -msgid "Color change" -msgstr "색 변경" - msgid "Print" msgstr "출력" +msgid "Color change" +msgstr "색 변경" + msgid "Printer" msgstr "프린터" @@ -6008,13 +5999,18 @@ msgid "The file does not contain any geometry data." msgstr "파일에 형상 데이터가 포함되어 있지 않습니다." msgid "" -"Your object appears to be too large, Do you want to scale it down to fit the " -"heat bed automatically?" -msgstr "개체가 너무 큽니다. 자동으로 고온 베드에 맞게 크기를 줄이시겠습니까?" +"Your object appears to be too large. It will be scaled down to fit the heat " +"bed automatically." +msgstr "" msgid "Object too large" msgstr "개체가 너무 큼" +msgid "" +"Your object appears to be too large, Do you want to scale it down to fit the " +"heat bed automatically?" +msgstr "개체가 너무 큽니다. 자동으로 고온 베드에 맞게 크기를 줄이시겠습니까?" + msgid "Export STL file:" msgstr "STL 파일 내보내기:" @@ -6384,9 +6380,6 @@ msgstr "계속하시겠습니까?" msgid "Language selection" msgstr "언어 선택" -msgid "Switching application language while some presets are modified." -msgstr "일부 사전 설정이 수정되는 동안 응용 프로그램 언어를 전환합니다." - msgid "Changing application language" msgstr "응용 프로그램 언어 변경" @@ -6576,6 +6569,12 @@ msgid "" msgstr "" "활성화하면 여러 장치에 동시에 작업을 보내고 여러 장치를 관리할 수 있습니다." +msgid "Auto arrange plate after cloning" +msgstr "복제 후 플레이트 자동 정렬" + +msgid "Auto arrange plate after object cloning" +msgstr "개체를 복제한 후 플레이트를 자동으로 정렬합니다" + msgid "Network" msgstr "네트워크" @@ -7461,8 +7460,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" @@ -7537,12 +7536,21 @@ msgstr "지지대 필라멘트" msgid "Tree supports" msgstr "나무 지지대" -msgid "Skirt" -msgstr "스커트" +msgid "Multimaterial" +msgstr "다중 재료" msgid "Prime tower" msgstr "프라임 타워" +msgid "Filament for Features" +msgstr "" + +msgid "Ooze prevention" +msgstr "" + +msgid "Skirt" +msgstr "스커트" + msgid "Special mode" msgstr "특수 모드" @@ -7590,6 +7598,9 @@ msgstr "권장 노즐 온도" msgid "Recommended nozzle temperature range of this filament. 0 means no set" msgstr "이 필라멘트의 권장 노즐 온도 범위. 0은 설정하지 않음을 의미합니다" +msgid "Flow ratio and Pressure Advance" +msgstr "" + msgid "Print chamber temperature" msgstr "출력 챔버 온도" @@ -7695,9 +7706,6 @@ msgstr "필라멘트 시작 G코드" msgid "Filament end G-code" msgstr "필라멘트 종료 G코드" -msgid "Multimaterial" -msgstr "다중 재료" - msgid "Wipe tower parameters" msgstr "닦기 타워 매개변수" @@ -7787,12 +7795,30 @@ msgstr "저크 제한" msgid "Single extruder multimaterial setup" msgstr "단일 압출기 다중 재료 설정" +msgid "Number of extruders of the printer." +msgstr "" + +msgid "" +"Single Extruder Multi Material is selected, \n" +"and all extruders must have the same diameter.\n" +"Do you want to change the diameter for all extruders to first extruder " +"nozzle diameter value?" +msgstr "" + +msgid "Nozzle diameter" +msgstr "노즐 직경" + msgid "Wipe tower" msgstr "닦기 타워" msgid "Single extruder multimaterial parameters" msgstr "단일 압출기 다중 재료 매개변수" +msgid "" +"This is a single extruder multimaterial printer, diameters of all extruders " +"will be set to the new value. Do you want to proceed?" +msgstr "" + msgid "Layer height limits" msgstr "레이어 높이 한도" @@ -8286,11 +8312,8 @@ msgstr "개체 목록" msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "STL/STEP/3MF/OBJ/AMF 파일에서 형상 데이터 가져오기" -msgid "⌘+Shift+G" -msgstr "⌘+Shift+G" - -msgid "Ctrl+Shift+G" -msgstr "Ctrl+Shift+G" +msgid "Shift+G" +msgstr "" msgid "Paste from clipboard" msgstr "클립보드에서 붙여넣기" @@ -8340,33 +8363,18 @@ msgstr "Shift+Tab" msgid "Collapse/Expand the sidebar" msgstr "사이드바 접기/펼치기" -msgid "⌘+Any arrow" -msgstr "⌘+아무 화살표" +msgid "Any arrow" +msgstr "" msgid "Movement in camera space" msgstr "카메라 공간에서 이동" -msgid "⌥+Left mouse button" -msgstr "⌥+마우스 왼쪽 버튼" - msgid "Select a part" msgstr "부품 선택" -msgid "⌘+Left mouse button" -msgstr "⌘+마우스 왼쪽 버튼" - msgid "Select multiple objects" msgstr "여러 개체 선택" -msgid "Ctrl+Any arrow" -msgstr "Ctrl+화살표" - -msgid "Alt+Left mouse button" -msgstr "Alt+마우스 왼쪽 버튼" - -msgid "Ctrl+Left mouse button" -msgstr "Ctrl+마우스 왼쪽 버튼" - msgid "Shift+Left mouse button" msgstr "Shift+마우스 왼쪽 버튼" @@ -8469,24 +8477,12 @@ msgstr "출력판" msgid "Move: press to snap by 1mm" msgstr "이동: 눌러서 1mm씩 이동" -msgid "⌘+Mouse wheel" -msgstr "⌘+마우스 휠" - msgid "Support/Color Painting: adjust pen radius" msgstr "지지대/색상 칠하기: 펜 반경 조정" -msgid "⌥+Mouse wheel" -msgstr "⌥+마우스 휠" - msgid "Support/Color Painting: adjust section position" msgstr "지지대/색상 칠하기: 단면 위치 조정" -msgid "Ctrl+Mouse wheel" -msgstr "Ctrl+마우스 휠" - -msgid "Alt+Mouse wheel" -msgstr "Alt+마우스 휠" - msgid "Gizmo" msgstr "도구 상자" @@ -8792,6 +8788,11 @@ msgstr "" msgid "No object can be printed. Maybe too small" msgstr "개체를 출력할 수 없습니다. 너무 작을 수 있습니다" +msgid "" +"Your print is very close to the priming regions. Make sure there is no " +"collision." +msgstr "" + msgid "" "Failed to generate gcode for invalid custom G-code.\n" "\n" @@ -9030,11 +9031,10 @@ msgid "Variable layer height is not supported with Organic supports." msgstr "유기체 지지대에서는 가변 레이어 높이가 지원되지 않습니다." msgid "" -"Different nozzle diameters and different filament diameters is not allowed " -"when prime tower is enabled." +"Different nozzle diameters and different filament diameters may not work " +"well when the prime tower is enabled. It's very experimental, so please " +"proceed with caution." msgstr "" -"다른 노즐 직경과 다른 필라멘트 직경은 허용되지 않습니다.프라임 타워가 활성화" -"되면." msgid "" "The Wipe Tower is currently only supported with the relative extruder " @@ -9044,8 +9044,9 @@ msgstr "" "(use_relative_e_distances=1)." msgid "" -"Ooze prevention is currently not supported with the prime tower enabled." -msgstr "현재 프라임 타워가 활성화된 상태에서는 누출 방지가 지원되지 않습니다." +"Ooze prevention is only supported with the wipe tower when " +"'single_extruder_multi_material' is off." +msgstr "" msgid "" "The prime tower is currently only supported for the Marlin, RepRap/Sprinter, " @@ -10431,6 +10432,86 @@ msgstr "" msgid "Pressure advance(Klipper) AKA Linear advance factor(Marlin)" msgstr "프레셔 어드밴스(Klipper)/리니어 어드밴스(Marlin)" +msgid "Enable adaptive pressure advance (beta)" +msgstr "" + +#, c-format, boost-format +msgid "" +"With increasing print speeds (and hence increasing volumetric flow through " +"the nozzle) and increasing accelerations, it has been observed that the " +"effective PA value typically decreases. This means that a single PA value is " +"not always 100% optimal for all features and a compromise value is usually " +"used that does not cause too much bulging on features with lower flow speed " +"and accelerations while also not causing gaps on faster features.\n" +"\n" +"This feature aims to address this limitation by modeling the response of " +"your printer's extrusion system depending on the volumetric flow speed and " +"acceleration it is printing at. Internally, it generates a fitted model that " +"can extrapolate the needed pressure advance for any given volumetric flow " +"speed and acceleration, which is then emmited to the printer depending on " +"the current print conditions.\n" +"\n" +"When enabled, the pressure advance value above is overriden. However, a " +"reasonable default value above is strongly recomended to act as a fallback " +"and for when tool changing.\n" +"\n" +msgstr "" + +msgid "Adaptive pressure advance measurements (beta)" +msgstr "" + +msgid "" +"Add sets of pressure advance (PA) values, the volumetric flow speeds and " +"accelerations they were measured at, separated by a comma. One set of values " +"per line. For example\n" +"0.04,3.96,3000\n" +"0.033,3.96,10000\n" +"0.029,7.91,3000\n" +"0.026,7.91,10000\n" +"\n" +"How to calibrate:\n" +"1. Run the pressure advance test for at least 3 speeds per acceleration " +"value. It is recommended that the test is run for at least the speed of the " +"external perimeters, the speed of the internal perimeters and the fastest " +"feature print speed in your profile (usually its the sparse or solid " +"infill). Then run them for the same speeds for the slowest and fastest print " +"accelerations,and no faster than the recommended maximum acceleration as " +"given by the klipper input shaper.\n" +"2. Take note of the optimal PA value for each volumetric flow speed and " +"acceleration. You can find the flow number by selecting flow from the color " +"scheme drop down and move the horizontal slider over the PA pattern lines. " +"The number should be visible at the bottom of the page. The ideal PA value " +"should be decreasing the higher the volumetric flow is. If it is not, " +"confirm that your extruder is functioning correctly.The slower and with less " +"acceleration you print, the larger the range of acceptable PA values. If no " +"difference is visible, use the PA value from the faster test.3. Enter the " +"triplets of PA values, Flow and Accelerations in the text box here and save " +"your filament profile\n" +"\n" +msgstr "" + +msgid "Enable adaptive pressure advance for overhangs (beta)" +msgstr "" + +msgid "" +"Enable adaptive PA for overhangs as well as when flow changes within the " +"same feature. This is an experimental option, as if the PA profile is not " +"set accurately, it will cause uniformity issues on the external surfaces " +"before and after overhangs.\n" +msgstr "" + +msgid "Pressure advance for bridges" +msgstr "" + +msgid "" +"Pressure advance value for bridges. Set to 0 to disable. \n" +"\n" +" A lower PA value when printing bridges helps reduce the appearance of " +"slight under extrusion immediately after bridges. This is caused by the " +"pressure drop in the nozzle when printing in the air and a lower PA helps " +"counteract this." +msgstr "" + msgid "" "Default line width if other line widths are set to 0. If expressed as a %, " "it will be computed over the nozzle diameter." @@ -10624,6 +10705,21 @@ msgstr "" "필라멘트는 냉각 튜브 내에서 앞뒤로 움직이면서 냉각됩니다. 원하는 이동 횟수를 " "지정하세요." +msgid "Stamping loading speed" +msgstr "" + +msgid "Speed used for stamping." +msgstr "" + +msgid "Stamping distance measured from the center of the cooling tube" +msgstr "" + +msgid "" +"If set to nonzero value, filament is moved toward the nozzle between the " +"individual cooling moves (\"stamping\"). This option configures how long " +"this movement should be before the filament is retracted again." +msgstr "" + msgid "Speed of the first cooling move" msgstr "첫 번째 냉각 이동 속도" @@ -11024,10 +11120,10 @@ msgstr "팬 최대 속도 레이어" msgid "" "Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" -"\". \"full_fan_speed_layer\" will be ignored if lower than " -"\"close_fan_the_first_x_layers\", in which case the fan will be running at " -"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" to maximum at layer " +"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " +"than \"close_fan_the_first_x_layers\", in which case the fan will be running " +"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" "팬 속도는 \"close_fan_the_first_x_layers\" 의 0에서 \"full_fan_speed_layer\" " "의 최고 속도까지 선형적으로 증가합니다. \"full_fan_speed_layer\"가 " @@ -11416,8 +11512,12 @@ msgstr "분할된 영역의 최대 너비입니다. 0은 이 기능을 비활성 msgid "Interlocking depth of a segmented region" msgstr "분할된 영역의 연동 깊이" -msgid "Interlocking depth of a segmented region. Zero disables this feature." -msgstr "분할된 영역의 깊이를 연동합니다. 0은 이 기능을 비활성화합니다." +msgid "" +"Interlocking depth of a segmented region. It will be ignored if " +"\"mmu_segmented_region_max_width\" is zero or if " +"\"mmu_segmented_region_interlocking_depth\"is bigger then " +"\"mmu_segmented_region_max_width\". Zero disables this feature." +msgstr "" msgid "Use beam interlocking" msgstr "인터로킹 빔 사용" @@ -11820,9 +11920,6 @@ msgstr "" "더 나은 레이어 냉각을 위해 속도를 낮추는 경우 위의 최소 레이어 시간을 유지하" "기 위해 프린터가 느려지는 최소 출력 속도입니다." -msgid "Nozzle diameter" -msgstr "노즐 직경" - msgid "Diameter of nozzle" msgstr "노즐 직경" @@ -11917,6 +12014,11 @@ msgstr "" "없습니다. 이는 복잡한 모델의 후퇴 시간을 줄이고 출력 시간을 절약할 수 있지만 " "슬라이싱 및 G코드 생성 속도를 느리게 만듭니다" +msgid "" +"This option will drop the temperature of the inactive extruders to prevent " +"oozing." +msgstr "" + msgid "Filename format" msgstr "파일 이름 형식" @@ -12155,12 +12257,14 @@ msgid "Spiral" msgstr "나선형" msgid "Traveling angle" -msgstr "" +msgstr "이동 각도" msgid "" "Traveling angle for Slope and Spiral Z hop type. Setting it to 90° results " "in Normal Lift" msgstr "" +"경사나 나선형 Z 올리기 유형에 사용할 이동 각도입니다. 90°로 설정할 경우 일반" +"적인 Z 올리기가 적용됩니다" msgid "Only lift Z above" msgstr "Z값 위에서만 올리기" @@ -12619,6 +12723,31 @@ msgstr "기존" msgid "Temperature variation" msgstr "온도 가변" +#. TRN PrintSettings : "Ooze prevention" > "Temperature variation" +msgid "" +"Temperature difference to be applied when an extruder is not active. The " +"value is not used when 'idle_temperature' in filament settings is set to non " +"zero value." +msgstr "" + +msgid "Preheat time" +msgstr "" + +msgid "" +"To reduce the waiting time after tool change, Orca can preheat the next tool " +"while the current tool is still in use. This setting specifies the time in " +"seconds to preheat the next tool. Orca will insert a M104 command to preheat " +"the tool in advance." +msgstr "" + +msgid "Preheat steps" +msgstr "" + +msgid "" +"Insert multiple preheat commands(e.g. M104.1). Only useful for Prusa XL. For " +"other printers, please set it to 1." +msgstr "" + msgid "Start G-code" msgstr "시작 G코드" @@ -13257,12 +13386,6 @@ msgstr "" "닦기 타워를 안정화하는 데 사용되는 원뿔 꼭대기의 각도입니다. 각도가 클수록 베" "이스가 넓어집니다." -msgid "Wipe tower purge lines spacing" -msgstr "닦기 타워 청소 선 간격" - -msgid "Spacing of purge lines on the wipe tower." -msgstr "닦기 타워의 청소 선 간격입니다." - msgid "Maximum wipe tower print speed" msgstr "최대 와이프 타워 인쇄 속도" @@ -13303,9 +13426,6 @@ msgstr "" "\n" "와이프 타워 외부 경계의 경우 이 설정에 관계없이 내부 경계 속도가 사용됩니다." -msgid "Wipe tower extruder" -msgstr "닦기 타워 압출기" - msgid "" "The extruder to use when printing perimeter of the wipe tower. Set to 0 to " "use the one that is available (non-soluble would be preferred)." @@ -13359,6 +13479,30 @@ msgstr "최대 브릿지 거리" msgid "Maximal distance between supports on sparse infill sections." msgstr "드문 채우기 부분의 지지대 사이의 최대 거리." +msgid "Wipe tower purge lines spacing" +msgstr "닦기 타워 청소 선 간격" + +msgid "Spacing of purge lines on the wipe tower." +msgstr "닦기 타워의 청소 선 간격입니다." + +msgid "Extra flow for purging" +msgstr "" + +msgid "" +"Extra flow used for the purging lines on the wipe tower. This makes the " +"purging lines thicker or narrower than they normally would be. The spacing " +"is adjusted automatically." +msgstr "" + +msgid "Idle temperature" +msgstr "" + +msgid "" +"Nozzle temperature when the tool is currently not used in multi-tool setups." +"This is only used when 'Ooze prevention' is active in Print Settings. Set to " +"0 to disable." +msgstr "" + msgid "X-Y hole compensation" msgstr "X-Y 구멍 보정" @@ -13691,6 +13835,14 @@ msgstr "추가 철회" msgid "Currently planned extra extruder priming after deretraction." msgstr "현재 철회 후 추가 압출기 프라이밍이 계획되어 있습니다." +msgid "Absolute E position" +msgstr "" + +msgid "" +"Current position of the extruder axis. Only used with absolute extruder " +"addressing." +msgstr "" + msgid "Current extruder" msgstr "현재 압출기" @@ -13735,6 +13887,12 @@ msgstr "압출기를 사용하나요?" msgid "Vector of bools stating whether a given extruder is used in the print." msgstr "특정 압출기가 출력에 사용되는지 여부를 나타내는 값 입니다." +msgid "Has single extruder MM priming" +msgstr "" + +msgid "Are the extra multi-material priming regions used in this print?" +msgstr "" + msgid "Volume per extruder" msgstr "압출기당 부피" @@ -13889,6 +14047,14 @@ msgstr "실제 프린터 이름" msgid "Name of the physical printer used for slicing." msgstr "슬라이싱에 사용되는 실제 프린터의 이름입니다." +msgid "Number of extruders" +msgstr "" + +msgid "" +"Total number of extruders, regardless of whether they are used in the " +"current print." +msgstr "" + msgid "Layer number" msgstr "레이어 번호" @@ -14973,8 +15139,8 @@ msgstr "" "다시 작성하시겠습니까?" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you selected" -"\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you " +"selected\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" "사전 설정의 이름을 \"선택한 공급업체 유형 직렬 @프린터\"로 변경합니다.\n" @@ -16238,6 +16404,73 @@ msgstr "" "ABS와 같이 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 " "높이면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?" +#~ msgid "up to" +#~ msgstr "까지" + +#~ msgid "above" +#~ msgstr "위에" + +#~ msgid "from" +#~ msgstr "부터" + +#~ msgid "Switching application language while some presets are modified." +#~ msgstr "일부 사전 설정이 수정되는 동안 응용 프로그램 언어를 전환합니다." + +#~ msgid "⌘+Shift+G" +#~ msgstr "⌘+Shift+G" + +#~ msgid "Ctrl+Shift+G" +#~ msgstr "Ctrl+Shift+G" + +#~ msgid "⌘+Any arrow" +#~ msgstr "⌘+아무 화살표" + +#~ msgid "⌥+Left mouse button" +#~ msgstr "⌥+마우스 왼쪽 버튼" + +#~ msgid "⌘+Left mouse button" +#~ msgstr "⌘+마우스 왼쪽 버튼" + +#~ msgid "Ctrl+Any arrow" +#~ msgstr "Ctrl+화살표" + +#~ msgid "Alt+Left mouse button" +#~ msgstr "Alt+마우스 왼쪽 버튼" + +#~ msgid "Ctrl+Left mouse button" +#~ msgstr "Ctrl+마우스 왼쪽 버튼" + +#~ msgid "⌘+Mouse wheel" +#~ msgstr "⌘+마우스 휠" + +#~ msgid "⌥+Mouse wheel" +#~ msgstr "⌥+마우스 휠" + +#~ msgid "Ctrl+Mouse wheel" +#~ msgstr "Ctrl+마우스 휠" + +#~ msgid "Alt+Mouse wheel" +#~ msgstr "Alt+마우스 휠" + +#~ msgid "" +#~ "Different nozzle diameters and different filament diameters is not " +#~ "allowed when prime tower is enabled." +#~ msgstr "" +#~ "다른 노즐 직경과 다른 필라멘트 직경은 허용되지 않습니다.프라임 타워가 활성" +#~ "화되면." + +#~ msgid "" +#~ "Ooze prevention is currently not supported with the prime tower enabled." +#~ msgstr "" +#~ "현재 프라임 타워가 활성화된 상태에서는 누출 방지가 지원되지 않습니다." + +#~ msgid "" +#~ "Interlocking depth of a segmented region. Zero disables this feature." +#~ msgstr "분할된 영역의 깊이를 연동합니다. 0은 이 기능을 비활성화합니다." + +#~ msgid "Wipe tower extruder" +#~ msgstr "닦기 타워 압출기" + #~ msgid "" #~ "File size exceeds the 100MB upload limit. Please upload your file through " #~ "the panel." @@ -16662,8 +16895,8 @@ msgstr "" #~ msgstr "드문 레이어 없음(실험적)" #~ msgid "" -#~ "We would rename the presets as \"Vendor Type Serial @printer you selected" -#~ "\". \n" +#~ "We would rename the presets as \"Vendor Type Serial @printer you " +#~ "selected\". \n" #~ "To add preset for more prinetrs, Please go to printer selection" #~ msgstr "" #~ "사전 설정의 이름을 \"선택한 공급업체 유형 직렬 @프린터\"로 변경합니다.\n" diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index 34c2a6bc8dd..41b75b0150b 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -346,7 +346,7 @@ msgid "Groove Angle" msgstr "Kąt rowka" msgid "Part" -msgstr "Part" +msgstr "Wydruk" msgid "Object" msgstr "Obiekt" @@ -2433,7 +2433,7 @@ msgid "Load" msgstr "Ładuj" msgid "Unload" -msgstr "Wyładuj" +msgstr "Rozładuj" msgid "Ext Spool" msgstr "zew.szpula" @@ -2498,8 +2498,8 @@ msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " "load or unload filaments." msgstr "" -"Wybierz gniazdo AMS, a następnie naciśnij przycisk \"Ładuj\" lub \"Wyładuj" -"\" ,aby automatycznie załadować lub wyładować filamenty." +"Wybierz gniazdo AMS, a następnie naciśnij przycisk \"Ładuj\" lub " +"\"Rozładuj\" ,aby automatycznie załadować lub wyładować filamenty." msgid "Edit" msgstr "Edytuj" @@ -2840,7 +2840,8 @@ msgid "SN" msgstr "Numer seryjny" msgid "Setting AMS slot information while printing is not supported" -msgstr "Ustawianie informacji o slocie AMS podczas druku nie jest obsługiwane" +msgstr "" +"Ustawianie informacji o gnieździe AMS podczas druku nie jest obsługiwane" msgid "Factors of Flow Dynamics Calibration" msgstr "współczynnik kalibracji dynamiki przepływu" @@ -2975,7 +2976,7 @@ msgid "Disable AMS" msgstr "Wyłącz AMS" msgid "Print with the filament mounted on the back of chassis" -msgstr "Drukuj z filamentem zamontowanym na tylnej części obudowy" +msgstr "Drukukowanie filamentem zamontowanym na tylnej części obudowy" msgid "Current Cabin humidity" msgstr "Aktualna wilgotność w komorze" @@ -3760,8 +3761,8 @@ msgid "" "layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "" "Tryb Wazy działa tylko wtedy gdy liczba pętli ściany wynosi 1, wyłączone są " -"podpory, ilość warstw górnej powłoki wynosi 0, gęstość wypełnienia wynosi 0, " -"a tryb Timelaps ustawiony jest na Tradycyjny." +"podpory, liczba warstw górnej powłoki wynosi 0, gęstość wypełnienia wynosi " +"0, a tryb Timelaps ustawiony jest na Tradycyjny." msgid " But machines with I3 structure will not generate timelapse videos." msgstr " Jednak maszyny z budową I3 nie będą generować filmów timelapse." @@ -5397,7 +5398,7 @@ msgid "Aux" msgstr "Aux" msgid "Cham" -msgstr "Cham" +msgstr "Komora" msgid "Bed" msgstr "Stół" @@ -5439,7 +5440,7 @@ msgid "" "Please heat the nozzle to above 170 degree before loading or unloading " "filament." msgstr "" -"Przed załadowaniem lub wyładunkiem filamentu, podgrzej dyszę do temperatury " +"Przed załadowaniem lub rozładunkiem filamentu, podgrzej dyszę do temperatury " "powyżej 170 stopni." msgid "Still unload" @@ -6088,9 +6089,7 @@ msgid "Please correct them in the param tabs" msgstr "Proszę poprawić je na kartach parametrów" msgid "The 3mf has following modified G-codes in filament or printer presets:" -msgstr "" -"Plik 3MF ma następujące zmodyfikowane G-code w profilach filamentu lub " -"drukarki:" +msgstr "Plik 3MF ma zmodyfikowane G-code w profilach filamentu lub drukarki:" msgid "" "Please confirm that these modified G-codes are safe to prevent any damage to " @@ -6103,13 +6102,13 @@ msgid "Modified G-codes" msgstr "Zmodyfikowane G-codes" msgid "The 3mf has following customized filament or printer presets:" -msgstr "Plik 3MF ma następujące dostosowane profile filamentu lub drukarki:" +msgstr "Plik 3MF ma już dostosowane profile filamentu lub drukarki:" msgid "" "Please confirm that the G-codes within these presets are safe to prevent any " "damage to the machine!" msgstr "" -"Proszę potwierdzić, że G-code w tych profilach są bezpieczne, aby zapobiec " +"Proszę potwierdź, że G-code w tych profilach jest bezpieczny, aby zapobiec " "ewentualnym uszkodzeniom maszyny!" msgid "Customized Preset" @@ -7681,8 +7680,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 "" "Podczas nagrywania timelapse'a bez głowicy drukującej zaleca się dodanie " "\"Timelaps - Wieża Czyszcząca\" \n" @@ -9537,10 +9536,10 @@ msgid "" "the next layers will be linearly shrunk less, up to the layer indicated by " "this value." msgstr "" -"Ilość warstw, na które będzie rozciągać się kompensacja \"stopy słonia\". " +"Liczba warstw, na które będzie rozciągać się kompensacja \"stopy słonia\". " "Pierwsza warstwa zostanie zmniejszona o wartość kompensacji 'stopy słonia', " -"a następne warstwy będą liniowo zmniejszane mniej, aż do warstwy wskazanej " -"przez tę wartość." +"a następne warstwy będą zmniejszane liniowo, aż do warstwy wskazanej przez " +"tę wartość." msgid "layers" msgstr "warstwy" @@ -9676,10 +9675,10 @@ msgid "" msgstr "" "Unikaj ruchów nad obrysami-\n" "Maksymalna długość objazdu przy unikaniu przejeżdżania nad obrysami. Jeśli " -"objazd miałby wykroczyć poza tę wartość, funkcja \"unikaj ruchów nad obrysami" -"\" zostanie zignorowana dla tej ścieżki. Długość objazdu można zdefiniować " -"jako wartość absolutna lub obliczona procentowo (np. 50%) z długości ruchu " -"bezpośredniego." +"objazd miałby wykroczyć poza tę wartość, funkcja \"unikaj ruchów nad " +"obrysami\" zostanie zignorowana dla tej ścieżki. Długość objazdu można " +"zdefiniować jako wartość absolutna lub obliczona procentowo (np. 50%) z " +"długości ruchu bezpośredniego." msgid "mm or %" msgstr "mm lub %" @@ -9768,7 +9767,7 @@ msgid "Other layers print sequence" msgstr "Inna kolejność druku warstw" msgid "The number of other layers print sequence" -msgstr "Ilość warstw ze zmienioną kolejnością drukowania" +msgstr "Liczba warstw ze zmienioną kolejnością drukowania" msgid "Other layers filament sequence" msgstr "Kolejność filamenu dla pozostałych warstw" @@ -9806,7 +9805,7 @@ msgstr "" "jest mniejsza niż ta wartość. Dzięki temu można uniknąć zbyt cienkiej " "powłoki, gdy wysokość warstwy jest niska. Wartość 0 oznacza wyłączenie tego " "ustawienia, a grubość dolnej powłoki jest wówczas wyznaczana wyłącznie przez " -"ilość warstw dolnej powłoki" +"liczbę warstw dolnej powłoki" msgid "Apply gap fill" msgstr "Zastosuj wypełnienie szczelin" @@ -11424,7 +11423,7 @@ msgid "Travel speed of initial layer" msgstr "Prędkość jałowa dla pierwszej warstwy" msgid "Number of slow layers" -msgstr "Ilość warstw o niższej prędkości" +msgstr "Liczba warstw o niższej prędkości" msgid "" "The first few layers are printed slower than normal. The speed is gradually " @@ -11445,10 +11444,10 @@ msgstr "Pełna prędkość wentylatora na warstwie" msgid "" "Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" -"\". \"full_fan_speed_layer\" will be ignored if lower than " -"\"close_fan_the_first_x_layers\", in which case the fan will be running at " -"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" to maximum at layer " +"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " +"than \"close_fan_the_first_x_layers\", in which case the fan will be running " +"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" "Prędkość wentylatora będzie stopniowo zwiększana liniowo od zera na warstwie " "\"close_fan_the_first_x_layers\" do maksymalnej na warstwie " @@ -11863,52 +11862,63 @@ msgstr "Głębokość zazębiania się podzielonego na segmenty obszaru" msgid "Interlocking depth of a segmented region. Zero disables this feature." msgstr "" -"Głębokość blokowania obszaru segmentowego. Wartość zero wyłącza tę funkcję." +"Głębokość zazębiania się podzielonego na segmenty regionu. Wartość zero " +"wyłącza tę funkcję." msgid "Use beam interlocking" -msgstr "" +msgstr "Użyj struktury zazębiającej" msgid "" "Generate interlocking beam structure at the locations where different " "filaments touch. This improves the adhesion between filaments, especially " "models printed in different materials." msgstr "" +"Wygeneruj strukturę zazębiającą się w miejscach, gdzie stykają się różne " +"filamenty. Poprawia to przyczepność między filamentami, szczególnie w " +"modelach drukowanych z różnych materiałów." msgid "Interlocking beam width" -msgstr "" +msgstr "Szerokość zazębiania" msgid "The width of the interlocking structure beams." -msgstr "" +msgstr "Określa szerokość struktury zazębiającej" msgid "Interlocking direction" -msgstr "" +msgstr "Kierunek zazębiania" msgid "Orientation of interlock beams." -msgstr "" +msgstr "Orientacja struktury zatrzaskowej" msgid "Interlocking beam layers" -msgstr "" +msgstr "Liczba warstw zazębienia" msgid "" "The height of the beams of the interlocking structure, measured in number of " "layers. Less layers is stronger, but more prone to defects." msgstr "" +"Wysokość struktury zazębiającej wyrażona w liczbie warstw. Mniejsza liczba " +"warstw oznacza większą wytrzymałość, ale większą podatność na wady." msgid "Interlocking depth" -msgstr "" +msgstr "Głębokość zazębiania" msgid "" "The distance from the boundary between filaments to generate interlocking " "structure, measured in cells. Too few cells will result in poor adhesion." msgstr "" +"Odległość od granicy między filamentami potrzebna do generowania struktur " +"zazębiających, mierzona w komórkach. Zbyt mało komórek skutkuje słabą " +"adhezją." msgid "Interlocking boundary avoidance" -msgstr "" +msgstr "Odległość zapobiegająca zazębieniu" msgid "" "The distance from the outside of a model where interlocking structures will " "not be generated, measured in cells." msgstr "" +"Odległość od zewnętrznej strony modelu, gdzie struktury zazębiające nie będą " +"generowane, mierzona w komórkach." msgid "Ironing Type" msgstr "Rodzaj prasowania" @@ -13212,10 +13222,10 @@ msgid "" "triangle mesh slicing. The gap closing operation may reduce the final print " "resolution, therefore it is advisable to keep the value reasonably low." msgstr "" -"Szpary mniejsze niż dwukrotność wartości parametru \"promień zamykania szpar" -"\" zostaną zamknięte przy cięciu. Operacja zamykania szpar może zmniejszyć " -"finalną rozdzielczość wydruku, więc zalecane jest ustawienie tej wartości na " -"rozsądnie niskim poziomie." +"Szpary mniejsze niż dwukrotność wartości parametru \"promień zamykania " +"szpar\" zostaną zamknięte przy cięciu. Operacja zamykania szpar może " +"zmniejszyć finalną rozdzielczość wydruku, więc zalecane jest ustawienie tej " +"wartości na rozsądnie niskim poziomie." msgid "Slicing Mode" msgstr "Tryb cięcia" @@ -14365,7 +14375,7 @@ msgid "Total layer count" msgstr "Całkowita liczba warstw" msgid "Number of layers in the entire print." -msgstr "Ilość warstw w całym procesie drukowania" +msgstr "Liczba warstw w całym procesie drukowania" msgid "Number of objects" msgstr "Liczba obiektów" @@ -15601,8 +15611,8 @@ msgstr "" "Czy chcesz go zastąpić?" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you selected" -"\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you " +"selected\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" "Nazwa profilu zostanie zmieniona na \"Dostawca Typ Seria @nazwa drukarki, " @@ -18213,8 +18223,8 @@ msgstr "" #~ "Elevation is too low for object. Use the \"Pad around object\" feature to " #~ "print the object without elevation." #~ msgstr "" -#~ "Podniesienie zbyt małe dla modelu. Użyj funkcji \"Podkładka wokół modelu" -#~ "\", aby wydrukować model bez podniesienia." +#~ "Podniesienie zbyt małe dla modelu. Użyj funkcji \"Podkładka wokół " +#~ "modelu\", aby wydrukować model bez podniesienia." #~ msgid "" #~ "The endings of the support pillars will be deployed on the gap between " diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index d46ccfef315..066f6c30d6b 100644 --- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po +++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po @@ -7,8 +7,8 @@ msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-06-30 15:44+0200\n" -"PO-Revision-Date: 2023-04-01 13:21+0800\n" -"Last-Translator: SoftFever \n" +"PO-Revision-Date: 2024-07-28 07:12+0000\n" +"Last-Translator: Handle \n" "Language-Team: \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" @@ -355,6 +355,8 @@ msgid "" "Click to flip the cut plane\n" "Drag to move the cut plane" msgstr "" +"单击以翻转剖切面\n" +"拖动以移动剖切面" msgid "" "Click to flip the cut plane\n" @@ -372,7 +374,7 @@ msgid "Mode" msgstr "模式" msgid "Change cut mode" -msgstr "" +msgstr "更改切割模式" msgid "Tolerance" msgstr "容差" @@ -381,7 +383,7 @@ msgid "Drag" msgstr "拖拽" msgid "Draw cut line" -msgstr "" +msgstr "绘制切线" msgid "Left click" msgstr "左击" @@ -423,7 +425,7 @@ msgid "Bulge proportion related to radius" msgstr "" msgid "Space" -msgstr "空格键" +msgstr "间隔" msgid "Space proportion related to radius" msgstr "" @@ -441,14 +443,14 @@ msgid "Flip cut plane" msgstr "翻转剖切面" msgid "Groove change" -msgstr "" +msgstr "槽变化" msgid "Reset" msgstr "重置" #. TRN: This is an entry in the Undo/Redo stack. The whole line will be 'Edited: (name of whatever was edited)'. msgid "Edited" -msgstr "" +msgstr "已编辑" msgid "Cut position" msgstr "切割位置" @@ -498,12 +500,12 @@ msgstr "检测到无效连接件" #, c-format, boost-format msgid "%1$d connector is out of cut contour" msgid_plural "%1$d connectors are out of cut contour" -msgstr[0] "" +msgstr[0] "%1$d 个连接件超出了切割轮廓" #, c-format, boost-format msgid "%1$d connector is out of object" msgid_plural "%1$d connectors are out of object" -msgstr[0] "" +msgstr[0] "%1$d 个连接件超出了对象" msgid "Some connectors are overlapped" msgstr "存在连接件相互重叠" @@ -515,7 +517,7 @@ msgid "Cut plane is placed out of object" msgstr "剖切面放置在对象之外" msgid "Cut plane with groove is invalid" -msgstr "" +msgstr "槽所在的切割平面无效" msgid "Connector" msgstr "连接件" @@ -666,11 +668,11 @@ msgstr "文本形状" #. TRN - Title in Undo/Redo stack after rotate with text around emboss axe msgid "Text rotate" -msgstr "" +msgstr "旋转文字" #. TRN - Title in Undo/Redo stack after move with text along emboss axe - From surface msgid "Text move" -msgstr "" +msgstr "移动文字" msgid "Set Mirror" msgstr "设置镜像" @@ -900,44 +902,44 @@ msgid "Revert using of model surface." msgstr "恢复使用模型曲面。" msgid "Revert Transformation per glyph." -msgstr "" +msgstr "恢复按字符变形选项。" msgid "Set global orientation for whole text." -msgstr "" +msgstr "为整段文本使用同一基准。" msgid "Set position and orientation per glyph." -msgstr "" +msgstr "为每个字符独立计算位置和方向。" msgctxt "Alignment" msgid "Left" -msgstr "左面" +msgstr "左对齐" msgctxt "Alignment" msgid "Center" -msgstr "居中" +msgstr "水平居中" msgctxt "Alignment" msgid "Right" -msgstr "右面" +msgstr "右对齐" msgctxt "Alignment" msgid "Top" -msgstr "顶部" +msgstr "顶对齐" msgctxt "Alignment" msgid "Middle" -msgstr "" +msgstr "垂直居中" msgctxt "Alignment" msgid "Bottom" -msgstr "底部" +msgstr "底对齐" msgid "Revert alignment." -msgstr "" +msgstr "还原对齐。" #. TRN EmbossGizmo: font units msgid "points" -msgstr "" +msgstr "点" msgid "Revert gap between characters" msgstr "恢复字间距" @@ -952,13 +954,13 @@ msgid "Distance between lines" msgstr "行间距" msgid "Undo boldness" -msgstr "" +msgstr "撤销粗细调整" msgid "Tiny / Wide glyphs" -msgstr "细小/宽大的字形" +msgstr "细小/粗大的字形" msgid "Undo letter's skew" -msgstr "撤消字母的歪斜" +msgstr "撤消字母的斜体效果" msgid "Italic strength ratio" msgstr "倾斜强度比" @@ -1039,12 +1041,12 @@ msgstr "行间距" #. TRN - Input label. Be short as possible msgid "Boldness" -msgstr "粗细" +msgstr "仿字重" #. TRN - Input label. Be short as possible #. Like Font italic msgid "Skew ratio" -msgstr "斜率" +msgstr "仿斜体" #. TRN - Input label. Be short as possible #. Distance from model surface to be able @@ -1067,11 +1069,11 @@ msgstr "收集" #. TRN - Title in Undo/Redo stack after rotate with SVG around emboss axe msgid "SVG rotate" -msgstr "" +msgstr "旋转SVG图形" #. TRN - Title in Undo/Redo stack after move with SVG along emboss axe - From surface msgid "SVG move" -msgstr "" +msgstr "移动SVG图形" msgid "Enter SVG gizmo" msgstr "" @@ -1087,26 +1089,26 @@ msgstr "SVG矢量图" #, boost-format msgid "Opacity (%1%)" -msgstr "" +msgstr "不透明度 (%1%)" #, boost-format msgid "Color gradient (%1%)" -msgstr "" +msgstr "渐变 (%1%)" msgid "Undefined fill type" -msgstr "" +msgstr "未定义的填充类型" msgid "Linear gradient" -msgstr "" +msgstr "线性渐变" msgid "Radial gradient" -msgstr "" +msgstr "径向渐变" msgid "Open filled path" msgstr "" msgid "Undefined stroke type" -msgstr "" +msgstr "未定义的描边类型" msgid "Path can't be healed from selfintersection and multiple points." msgstr "" @@ -1118,7 +1120,7 @@ msgstr "" #, boost-format msgid "Shape is marked as invisible (%1%)." -msgstr "" +msgstr "形状已被标记为不可见 (%1%)." #. TRN: The first placeholder is shape identifier, the second one is text describing the problem. #, boost-format @@ -1127,25 +1129,25 @@ msgstr "" #, boost-format msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." -msgstr "" +msgstr "形状 (%1%) 的描边太细了(不小于 %2% mm)。" #, boost-format msgid "Stroke of shape (%1%) contains unsupported: %2%." msgstr "" msgid "Face the camera" -msgstr "" +msgstr "面向摄像机" #. TRN - Preview of filename after clear local filepath. msgid "Unknown filename" -msgstr "" +msgstr "未知文件名" #, boost-format msgid "SVG file path is \"%1%\"" -msgstr "" +msgstr "SVG文件路径:\"%1%\"" msgid "Reload SVG file from disk." -msgstr "" +msgstr "从磁盘重新加载SVG文件。" msgid "Change file" msgstr "" @@ -1173,10 +1175,10 @@ msgid "Save as" msgstr "另存为" msgid "Save SVG file" -msgstr "" +msgstr "保存SVG文件" msgid "Save as '.svg' file" -msgstr "" +msgstr "另存为“.svg”文件" msgid "Size in emboss direction." msgstr "" @@ -1406,6 +1408,8 @@ msgid "" "features.\n" "Click Yes to install it now." msgstr "" +"Orca Slicer 依赖 Microsoft WebView2 运行时以运行部分功能。\n" +"请点击 Yes 进行安装。" msgid "WebView2 Runtime" msgstr "WebView2 运行库" @@ -1441,6 +1445,9 @@ msgid "" "Please note, application settings will be lost, but printer profiles will " "not be affected." msgstr "" +"OrcaSlicer 配置文件无法解析,可能已经损坏。\n" +"OrcaSlicer 已尝试重新创建配置文件。\n" +"请注意,您的程序设置会丢失,但打印机配置文件不会受到影响。" msgid "Rebuild" msgstr "重新构建" @@ -1695,6 +1702,13 @@ msgid "" "Yes - Change these settings automatically\n" "No - Do not change these settings for me" msgstr "" +"该模型顶面具有文字浮雕。\n" +"为了获得最佳效果,我们推荐您将“单层墙阈值”设置为 0 " +"以使“仅首层单层墙”效果最佳。\n" +"\n" +"自动调整这些设置?\n" +"是 - 自动调整这些设置\n" +"否 - 不用为我调整这些设置" msgid "Text" msgstr "文字浮雕" @@ -1899,7 +1913,7 @@ msgid "arrange current plate" msgstr "在当前盘执行自动摆放" msgid "Reload All" -msgstr "" +msgstr "重新加载全部" msgid "reload all from disk" msgstr "" @@ -2306,7 +2320,7 @@ msgid "Check the status of current system services" msgstr "请检查当前系统服务状态" msgid "code" -msgstr "" +msgstr "代码" msgid "Failed to connect to cloud service" msgstr "无法连接到云服务" @@ -2477,7 +2491,7 @@ msgid "Orienting" msgstr "自动朝向中..." msgid "Orienting canceled." -msgstr "" +msgstr "自动朝向已取消。" msgid "Filling" msgstr "正在填充" @@ -2654,7 +2668,7 @@ msgid "GNU Affero General Public License, version 3" msgstr "GNU Affero 通用公共许可证,版本 3下授权的" msgid "Orca Slicer is based on PrusaSlicer and BambuStudio" -msgstr "" +msgstr "Orca Slicer 基于 PrusaSlicer 以及 BambuStudio 开发" msgid "Libraries" msgstr "库" @@ -2672,10 +2686,10 @@ msgid "Orca Slicer " msgstr "逆戟鲸切片" msgid "OrcaSlicer is based on BambuStudio, PrusaSlicer, and SuperSlicer." -msgstr "" +msgstr "OrcaSlicer基于BambuStudio、PrusaSlicer 以及SuperSlicer开发。" msgid "BambuStudio is originally based on PrusaSlicer by PrusaResearch." -msgstr "" +msgstr "BambuStudio基于PrusaResearch的PrusaSlicer开发而来。" msgid "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." msgstr "PrusaSlicer最初是基于Alessandro Ranellucci的Slic3r。" @@ -2713,7 +2727,7 @@ msgstr "最小" #, boost-format msgid "The input value should be greater than %1% and less than %2%" -msgstr "输入的范围在 %1% 和 %2% 之间" +msgstr "输入的范围应当在 %1% 和 %2% 之间" msgid "SN" msgstr "序列号" @@ -2851,7 +2865,7 @@ msgid "Print with the filament mounted on the back of chassis" msgstr "使用机箱背后挂载的材料打印" msgid "Current Cabin humidity" -msgstr "" +msgstr "当前舱内湿度" msgid "" "Please change the desiccant when it is too wet. The indicator may not " @@ -2912,10 +2926,10 @@ msgstr "" "(目前支持品牌、材料种类、颜色相同的耗材的自动补给)" msgid "DRY" -msgstr "" +msgstr "干燥" msgid "WET" -msgstr "" +msgstr "潮湿" msgid "AMS Settings" msgstr "AMS 设置" @@ -3300,13 +3314,13 @@ msgid "Timelapse" msgstr "延时摄影" msgid "Flow Dynamic Calibration" -msgstr "" +msgstr "动态流量校准" msgid "Send Options" msgstr "发送选项" msgid "Send to" -msgstr "" +msgstr "发送至" msgid "" "printers at the same time.(It depends on how many devices can undergo " @@ -3770,7 +3784,7 @@ msgstr "缺省" #, boost-format msgid "Edit Custom G-code (%1%)" -msgstr "" +msgstr "编辑自定义G-code (%1%)" msgid "Built-in placeholders (Double click item to add to G-code)" msgstr "" @@ -3809,7 +3823,7 @@ msgid "Temperatures" msgstr "温度" msgid "Timestamps" -msgstr "" +msgstr "时间戳" #, boost-format msgid "Specific for %1%" @@ -4302,10 +4316,10 @@ msgid "Enable" msgstr "开启" msgid "Hostname or IP" -msgstr "" +msgstr "主机名或IP地址" msgid "Custom camera source" -msgstr "" +msgstr "自定义摄像机源" msgid "Show \"Live Video\" guide page." msgstr "显示\"直播视频流\"指南" @@ -4425,38 +4439,38 @@ msgstr "默认视图" #. TRN To be shown in the main menu View->Top msgid "Top" -msgstr "顶部" +msgstr "上" msgid "Top View" msgstr "顶部视图" #. TRN To be shown in the main menu View->Bottom msgid "Bottom" -msgstr "底部" +msgstr "下" msgid "Bottom View" msgstr "底部视图" msgid "Front" -msgstr "前面" +msgstr "前" msgid "Front View" msgstr "前视图" msgid "Rear" -msgstr "后面" +msgstr "后" msgid "Rear View" msgstr "后视图" msgid "Left" -msgstr "左面" +msgstr "左" msgid "Left View" msgstr "左视图" msgid "Right" -msgstr "右面" +msgstr "右" msgid "Right View" msgstr "右视图" @@ -4498,10 +4512,10 @@ msgid "Load a model" msgstr "加载模型" msgid "Import Zip Archive" -msgstr "" +msgstr "导入 ZIP 压缩文件" msgid "Load models contained within a zip archive" -msgstr "" +msgstr "从 ZIP 压缩文件中导入一个或多个模型" msgid "Import Configs" msgstr "导入预设" @@ -4769,6 +4783,8 @@ msgid "" "Hint: Make sure you have added the corresponding printer before importing " "the configs." msgstr "" +"\n" +"注意:请确保您在导入配置前,已经添加了相应的打印机。" msgid "Import result" msgstr "导入结果" @@ -5122,7 +5138,7 @@ msgid "Camera Setting" msgstr "相机设置" msgid "Switch Camera View" -msgstr "" +msgstr "切换相机视图" msgid "Control" msgstr "控制" @@ -5380,7 +5396,7 @@ msgid "Latest Version: " msgstr "最新版本:" msgid "Not for now" -msgstr "" +msgstr "暂不" msgid "3D Mouse disconnected." msgstr "3D鼠标断连。" @@ -5594,7 +5610,7 @@ msgid "View all object's settings" msgstr "查看所有对象的配置" msgid "Material settings" -msgstr "" +msgstr "材料设置" msgid "Remove current plate (if not last one)" msgstr "移除当前板(如果不是最后一个)" @@ -5612,7 +5628,7 @@ msgid "Lock current plate" msgstr "锁定当前板" msgid "Edit current plate name" -msgstr "" +msgstr "编辑当前盘名" msgid "Customize current plate" msgstr "自定义当前板" @@ -6285,7 +6301,8 @@ msgstr "局域网模式" msgid "" "This stops the transmission of data to Bambu's cloud services. Users who " "don't use BBL machines or use LAN mode only can safely turn on this function." -msgstr "" +msgstr "停止向拓竹科技服务器发送数据。如果您不使用Bambu " +"Lab的打印机或仅使用局域网模式,则可以安全地启用此功能。" msgid "Enable network plugin" msgstr "启用网络插件" @@ -6303,7 +6320,7 @@ msgid "Units" msgstr "单位" msgid "Allow only one OrcaSlicer instance" -msgstr "" +msgstr "同时仅运行一个 OrcaSlicer 实例" msgid "" "On OSX there is always only one instance of app running by default. However " @@ -6317,28 +6334,32 @@ msgid "" "If this is enabled, when starting OrcaSlicer and another instance of the " "same OrcaSlicer is already running, that instance will be reactivated " "instead." -msgstr "" +msgstr "如果启用,当您在已经启动一个 OrcaSlicer 实例时再次启动 OrcaSlicer ," +"将会激活您已经启动的 OrcaSlicer 实例。" msgid "Home" msgstr "首页" msgid "Default Page" -msgstr "" +msgstr "起始页" msgid "Set the page opened on startup." -msgstr "" +msgstr "设置启动OrcaSlicer时首先显示的页面。" msgid "Touchpad" -msgstr "" +msgstr "触控板" msgid "Camera style" -msgstr "" +msgstr "视角控制模式" msgid "" "Select camera navigation style.\n" "Default: LMB+move for rotation, RMB/MMB+move for panning.\n" "Touchpad: Alt+move for rotation, Shift+move for panning." msgstr "" +"选择摄像机的导航模式。\n" +"缺省:鼠标左键+拖动 旋转,鼠标右键+拖动 平移;\n" +"触控板:Alt+拖动 旋转,Shift+拖动 平移。" msgid "Zoom to mouse position" msgstr "放大到鼠标位置" @@ -6355,10 +6376,10 @@ msgid "If enabled, use free camera. If not enabled, use constrained camera." msgstr "如果启用,使用自由视角。如果未启用,使用约束视角。" msgid "Reverse mouse zoom" -msgstr "" +msgstr "反转鼠标缩放" msgid "If enabled, reverses the direction of zoom with mouse wheel." -msgstr "" +msgstr "如果启用,使用鼠标滚轮缩放的方向会反转。" msgid "Show splash screen" msgstr "显示启动画面" @@ -6386,15 +6407,15 @@ msgid "If enabled, auto-calculate every time when filament is changed" msgstr "如果启用,会在每一次更换材料时自动计算。" msgid "Remember printer configuration" -msgstr "" +msgstr "记住打印机选项" msgid "" "If enabled, Orca will remember and switch filament/process configuration for " "each printer automatically." -msgstr "" +msgstr "如果启用,Orca会自动记录并切换您不同打印机之间的耗材配置与打印参数。" msgid "Multi-device Management(Take effect after restarting Orca)." -msgstr "" +msgstr "多设备管理 (重启Orca后生效)" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -6787,22 +6808,22 @@ msgid "Busy" msgstr "忙碌" msgid "Bambu Cool Plate" -msgstr "低温打印热床" +msgstr "低温打印板" msgid "PLA Plate" msgstr "PLA打印板" msgid "Bambu Engineering Plate" -msgstr "工程打印热床" +msgstr "工程材料打印板" msgid "Bambu Smooth PEI Plate" -msgstr "" +msgstr "光面PEI打印板" msgid "High temperature Plate" -msgstr "高温打印热床" +msgstr "高温打印板" msgid "Bambu Textured PEI Plate" -msgstr "" +msgstr "纹理PEI打印板" msgid "Send print job to" msgstr "发送打印任务至" @@ -7750,6 +7771,8 @@ msgid "" "You can discard the preset values you have modified, or choose to transfer " "the modified values to the new project" msgstr "" +"\n" +"您可以放弃已修改的预设值,或者将修改后的值转移到新项目" msgid "Extruders count" msgstr "挤出机数量" @@ -8177,7 +8200,7 @@ msgid "Camera view - Bottom" msgstr "摄像机视角 - 底部" msgid "Camera view - Front" -msgstr "摄像机视角 - 前面" +msgstr "摄像机视角 - 正面" msgid "Camera view - Behind" msgstr "摄像机视角 - 后面" @@ -9435,7 +9458,7 @@ msgid "Slow down for overhang" msgstr "悬垂降速" msgid "Enable this option to slow printing down for different overhang degree" -msgstr "打开这个选项将降低不同悬垂程度的走线的打印速度" +msgstr "启用此选项将降低不同悬垂程度的走线的打印速度" msgid "Slow down for curled perimeters" msgstr "翘边降速" @@ -10691,12 +10714,18 @@ msgid "" "quality as line segments are converted to arcs by the slicer and then back " "to line segments by the firmware." msgstr "" +"启用此设置,导出的G-code将包含G2 G3指令。圆弧拟合的容许值和精度相同。\n" +"\n" +"请注意:对于使用Klipper的打印机,建议禁用此选项。\n" +"Klipper打印机并不会从圆弧拟合中受益,因为这些命令会被固件\n" +"重新分割为线段。由于切片软件将线段转换为圆弧后再次被转换为\n" +"线段进行打印,这样操作会导致打印件表面质量下降。" msgid "Add line number" msgstr "标注行号" msgid "Enable this to add line number(Nx) at the beginning of each G-Code line" -msgstr "打开这个设置,G-code的每一行的开头会增加Nx标注行号。" +msgstr "启用该设置,G-code的每一行的开头会增加Nx标注行号。" msgid "Scan first layer" msgstr "首层扫描" @@ -10744,16 +10773,16 @@ msgid "The physical arrangement and components of a printing device" msgstr "打印设备的物理结构和组件" msgid "CoreXY" -msgstr "" +msgstr "CoreXY" msgid "I3" -msgstr "" +msgstr "I3" msgid "Hbot" -msgstr "" +msgstr "Hbot" msgid "Delta" -msgstr "" +msgstr "Delta(三角洲)" msgid "Best object position" msgstr "最佳对象位置" @@ -10806,7 +10835,7 @@ msgid "The printer cost per hour" msgstr "打印机每小时的成本" msgid "money/h" -msgstr "" +msgstr "元/时" msgid "Support control chamber temperature" msgstr "支持仓温控制" @@ -11309,7 +11338,8 @@ msgid "" "The minimum printing speed that the printer will slow down to to attempt to " "maintain the minimum layer time above, when slow down for better layer " "cooling is enabled." -msgstr "" +msgstr "在您启用“降低打印速度 " +"以得到更好的冷却”选项时最小的打印速度,以尝试保持上方设置的最小层时间。" msgid "Nozzle diameter" msgstr "喷嘴直径" @@ -11485,6 +11515,10 @@ msgid "" "argument, and they can access the Orca Slicer config settings by reading " "environment variables." msgstr "" +"如果您希望使用自定义脚本来处理输出的 " +"G-code,只需要在此列出这些脚本的绝对路径,使用分号来分割多个脚本。" +"脚本执行的第一个参数将会被设置为 G-code 文件的绝对路径," +"并支持脚本通过全局变量来读取 Orca Slicer 的设置。" msgid "Printer notes" msgstr "打印机注释" @@ -11710,7 +11744,7 @@ msgstr "禁用M73剩余打印时间" msgid "" "Disable generating of the M73: Set remaining print time in the final gcode" -msgstr "" +msgstr "在最终生成的G-code中禁用M73命令:设置剩余打印时间" msgid "Seam position" msgstr "接缝位置" @@ -11932,12 +11966,21 @@ msgid "" "distance from the object. Therefore, if brims are active it may intersect " "with them. To avoid this, increase the skirt distance value.\n" msgstr "" +"打印风挡有助于保护ABS或ASA材料的打印件,避免因气流流动产生变形或从打印床上脱" +"落。通常只有在开放式框架打印机上需要使用它,即没有封箱的打印机。\n" +"\n" +"选项:\n" +"启用 = Skirt和您的打印物体一样高。\n" +"限制 = Skirt高度将由Skirt高度选项指定。\n" +"\n" +"注意:当风挡功能启用时,Skirt将在远离物体自身的Skirt一定距离处打印。因此,如" +"果同时启用了Brims,则可能与Skirt相交。为避免这种情况,请增加Skirt距离值。\n" msgid "Limited" msgstr "限制" msgid "Enabled" -msgstr "打开" +msgstr "启用" msgid "Skirt loops" msgstr "Skirt圈数" @@ -12061,6 +12104,10 @@ msgid "" "printing, where we use M600/PAUSE to trigger the manual filament change " "action." msgstr "" +"启用该选项可以在打印开始时省略自定义更换耗材丝的 " +"G-code。整个打印过程中的工具头指令(如 " +"T0)将会被跳过。这对于手动多材料打印十分有用,其将会使用 M600/PAUSE " +"指令来使您可以进行手动对耗材丝进行更换。" msgid "Purge in prime tower" msgstr "冲刷进擦拭塔" @@ -12072,7 +12119,7 @@ msgid "Enable filament ramming" msgstr "启用耗材尖端成型" msgid "No sparse layers (beta)" -msgstr "" +msgstr "无稀疏层 (实验)" msgid "" "If enabled, the wipe tower will not be printed on layers with no " @@ -12319,6 +12366,11 @@ msgid "" "style will create similar structure to normal support under large flat " "overhangs." msgstr "" +"支撑物的样式和形状。对于普通支撑,将支撑投射到一个规则的网格中,将创建更稳定" +"的支撑(默认),而紧贴的支撑塔将节省材料并减少物体的瑕疵。\n" +"对于树形支撑,苗条树将更激进地合并树枝,并节省大量的材料;粗壮树会产生更大更" +"强壮的支撑结构,但用料更多;而混合树是苗条树和普通支撑的结合,它会在大的平面" +"悬垂下创建与正常支撑类似的结构(默认)。" msgid "Snug" msgstr "紧贴" @@ -12481,6 +12533,9 @@ msgid "" "added before \"machine_start_gcode\"\n" "G-code commands: M141/M191 S(0-255)" msgstr "" +"启用该选项以控制打印仓温度,这将会在\"machine_start_gcode" +"\"之前添加一个M191命令。\n" +"G-code命令:M141/M191 S(0-255)" msgid "Chamber temperature" msgstr "机箱温度" @@ -12583,6 +12638,13 @@ msgid "" "Setting a value in the retract amount before wipe setting below will perform " "any excess retraction before the wipe, else it will be performed after." msgstr "" +"喷嘴在回抽时将沿着最后路径移动的距离\n" +"\n" +"根据擦拭操作的距离以及挤出机/耗材丝回抽的速度和长度,可能需要执行额外的回抽动" +"作以收回剩余的丝材。\n" +"\n" +"在下方的擦拭前回抽量设置中输入一个数值,将在擦拭动作之前执行任何超出部分的回" +"抽,否则超出部分的回抽将在擦拭之后执行。" msgid "" "The wiping tower can be used to clean up the residue on the nozzle and " @@ -13806,7 +13868,7 @@ msgid "To k Value" msgstr "结束k值" msgid "Step value" -msgstr "" +msgstr "步进长度" msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "喷嘴直径已从打印机设置同步" @@ -13931,25 +13993,25 @@ msgid "Temperature calibration" msgstr "温度校准" msgid "PLA" -msgstr "" +msgstr "PLA" msgid "ABS/ASA" -msgstr "" +msgstr "ABS/ASA" msgid "PETG" -msgstr "" +msgstr "PETG" msgid "PCTG" -msgstr "" +msgstr "PCTG" msgid "TPU" -msgstr "" +msgstr "TPU" msgid "PA-CF" -msgstr "" +msgstr "PA-CF" msgid "PET-CF" -msgstr "" +msgstr "PET-CF" msgid "Filament type" msgstr "耗材类型" @@ -14263,6 +14325,8 @@ msgid "" "\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" +"我们将会把预设重命名为“供应商类型名 @ 您选择的打印机”\n" +"如果您希望为更多打印机添加预设,请前往打印机选择页面" msgid "Create Printer/Nozzle" msgstr "创建打印机/喷嘴" @@ -14453,6 +14517,11 @@ msgid "" "page. \n" "Click \"Sync user presets\" to enable the synchronization function." msgstr "" +"\n" +"\n" +"Orca 检测到您没有启用同步用户预设功能,这可能会导致您在设备页面上无法成功设置" +"耗材丝。\n" +"点击“同步用户预设”以启用同步功能。" msgid "Printer Setting" msgstr "打印机设置" @@ -14552,7 +14621,7 @@ msgid "Please select a type you want to export" msgstr "请选择一个你想导出的类型" msgid "Failed to create temporary folder, please try Export Configs again." -msgstr "" +msgstr "创建临时文件夹失败,请尝试重新导出配置文件。" msgid "Edit Filament" msgstr "编辑材料" @@ -14663,16 +14732,16 @@ msgid "Success!" msgstr "成功!" msgid "Are you sure to log out?" -msgstr "" +msgstr "您确定要登出吗?" msgid "Refresh Printers" msgstr "刷新打印机" msgid "View print host webui in Device tab" -msgstr "" +msgstr "在设备标签页中,查看打印机主机的WebUI" msgid "Replace the BambuLab's device tab with print host webui" -msgstr "" +msgstr "使用打印机主机的WebUI替换BambuLab设备页面" msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" @@ -15048,43 +15117,43 @@ msgstr "" "耗时较长。" msgid "Connected to Obico successfully!" -msgstr "" +msgstr "已成功连接到Obico" msgid "Could not connect to Obico" -msgstr "" +msgstr "无法连接到Obico" msgid "Connected to SimplyPrint successfully!" -msgstr "" +msgstr "已成功连接到SimplyPrint" msgid "Could not connect to SimplyPrint" -msgstr "" +msgstr "无法连接到SimplyPrint" msgid "Internal error" -msgstr "" +msgstr "内部错误" msgid "Unknown error" -msgstr "" +msgstr "未知错误" msgid "SimplyPrint account not linked. Go to Connect options to set it up." -msgstr "" +msgstr "尚未连接到SimplyPrint账户,前往连接选项来进行配置。" msgid "Connection to Flashforge works correctly." -msgstr "" +msgstr "与Flashforge的连接工作正常。" msgid "Could not connect to Flashforge" -msgstr "" +msgstr "无法连接至Flashforge" msgid "The provided state is not correct." -msgstr "" +msgstr "提供的状态不正确。" msgid "Please give the required permissions when authorizing this application." -msgstr "" +msgstr "在您为此应用程序进行授权时,请允许所需的权限。" msgid "Something unexpected happened when trying to log in, please try again." -msgstr "" +msgstr "在尝试登录时发生了异常,请重试。" msgid "User cancelled." -msgstr "" +msgstr "用户已取消。" #: resources/data/hints.ini: [hint:Precise wall] msgid "" @@ -15092,6 +15161,8 @@ msgid "" "Did you know that turning on precise wall can improve precision and layer " "consistency?" msgstr "" +"精准外墙尺寸\n" +"您知道吗?您可以启用精准外墙尺寸选项,提高精度和层一致性。" #: resources/data/hints.ini: [hint:Sandwich mode] msgid "" @@ -15452,7 +15523,7 @@ msgstr "" #~ "Enable this to get a G-code file which has G2 and G3 moves. And the " #~ "fitting tolerance is same with resolution" #~ msgstr "" -#~ "打开这个设置,导出的G-code将包含G2 G3指令。圆弧拟合的容许值和精度相同。" +#~ "启用此设置,导出的G-code将包含G2 G3指令。圆弧拟合的容许值和精度相同。" #~ msgid "" #~ "Infill area is enlarged slightly to overlap with wall for better bonding. " diff --git a/resources/images/bind_device_ping_code.svg b/resources/images/bind_device_ping_code.svg index 5c1ff4742d9..2d83240adb8 100644 --- a/resources/images/bind_device_ping_code.svg +++ b/resources/images/bind_device_ping_code.svg @@ -1,3 +1,3 @@ - + diff --git a/resources/images/hms_arrow.svg b/resources/images/hms_arrow.svg index 5cebec40000..c48bfd9a3a4 100644 --- a/resources/images/hms_arrow.svg +++ b/resources/images/hms_arrow.svg @@ -1,3 +1,3 @@ - + diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Plus 0.4 nozzle.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Plus 0.4 nozzle.json index ca2afafa248..cd1de6b7e42 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Plus 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Plus 0.4 nozzle.json @@ -156,7 +156,7 @@ "seam_slope_start_height": "0", "seam_slope_steps": "10", "seam_slope_type": "none", - "single_extruder_multi_material_priming": "1", + "single_extruder_multi_material_priming": "0", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Pro 0.4 nozzle.json index 63c52ab2603..bab2091fdd2 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Pro 0.4 nozzle.json @@ -156,7 +156,7 @@ "seam_slope_start_height": "0", "seam_slope_steps": "10", "seam_slope_type": "none", - "single_extruder_multi_material_priming": "1", + "single_extruder_multi_material_priming": "0", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Plus 0.4 nozzle.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Plus 0.4 nozzle.json index 6541d48fb29..e72063a41ca 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Plus 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Plus 0.4 nozzle.json @@ -156,7 +156,7 @@ "seam_slope_start_height": "0", "seam_slope_steps": "10", "seam_slope_type": "none", - "single_extruder_multi_material_priming": "1", + "single_extruder_multi_material_priming": "0", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Pro 0.4 nozzle.json index 3f2e3ca406b..59b4db5f67b 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Pro 0.4 nozzle.json @@ -156,7 +156,7 @@ "seam_slope_start_height": "0", "seam_slope_steps": "10", "seam_slope_type": "none", - "single_extruder_multi_material_priming": "1", + "single_extruder_multi_material_priming": "0", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index 775288cbd3d..3cd51ed347a 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.09.00.14", + "version": "01.09.00.18", "force_update": "0", "description": "the initial version of BBL configurations", "machine_model_list": [ @@ -821,6 +821,10 @@ "name": "Generic PCTG @base", "sub_path": "filament/Generic PCTG @base.json" }, + { + "name": "Bambu PETG HF @base", + "sub_path": "filament/Bambu PETG HF @base.json" + }, { "name": "Bambu ABS @base", "sub_path": "filament/Bambu ABS @base.json" @@ -837,6 +841,10 @@ "name": "Bambu ABS-GF @base", "sub_path": "filament/Bambu ABS-GF @base.json" }, + { + "name": "Bambu Support for ABS @base", + "sub_path": "filament/Bambu Support for ABS @base.json" + }, { "name": "Bambu PC @base", "sub_path": "filament/Bambu PC @base.json" @@ -1869,6 +1877,42 @@ "name": "Bambu PETG Translucent @BBL A1", "sub_path": "filament/Bambu PETG Translucent @BBL A1.json" }, + { + "name": "Bambu PETG HF @BBL X1C", + "sub_path": "filament/Bambu PETG HF @BBL X1C.json" + }, + { + "name": "Bambu PETG HF @BBL X1C 0.2 nozzle", + "sub_path": "filament/Bambu PETG HF @BBL X1C 0.2 nozzle.json" + }, + { + "name": "Bambu PETG HF @BBL X1C 0.8 nozzle", + "sub_path": "filament/Bambu PETG HF @BBL X1C 0.8 nozzle.json" + }, + { + "name": "Bambu PETG HF @BBL A1", + "sub_path": "filament/Bambu PETG HF @BBL A1.json" + }, + { + "name": "Bambu PETG HF @BBL A1 0.2 nozzle", + "sub_path": "filament/Bambu PETG HF @BBL A1 0.2 nozzle.json" + }, + { + "name": "Bambu PETG HF @BBL A1 0.8 nozzle", + "sub_path": "filament/Bambu PETG HF @BBL A1 0.8 nozzle.json" + }, + { + "name": "Bambu PETG HF @BBL A1M", + "sub_path": "filament/Bambu PETG HF @BBL A1M.json" + }, + { + "name": "Bambu PETG HF @BBL A1M 0.2 nozzle", + "sub_path": "filament/Bambu PETG HF @BBL A1M 0.2 nozzle.json" + }, + { + "name": "Bambu PETG HF @BBL A1M 0.8 nozzle", + "sub_path": "filament/Bambu PETG HF @BBL A1M 0.8 nozzle.json" + }, { "name": "Generic PCTG @BBL X1C", "sub_path": "filament/Generic PCTG @BBL X1C.json" @@ -1961,6 +2005,14 @@ "name": "Bambu ABS-GF @BBL A1", "sub_path": "filament/Bambu ABS-GF @BBL A1.json" }, + { + "name": "Bambu Support for ABS @BBL X1C", + "sub_path": "filament/Bambu Support for ABS @BBL X1C.json" + }, + { + "name": "Bambu Support for ABS @BBL A1", + "sub_path": "filament/Bambu Support for ABS @BBL A1.json" + }, { "name": "Bambu PC @BBL X1C", "sub_path": "filament/Bambu PC @BBL X1C.json" diff --git a/resources/profiles/BBL/filament/Bambu PETG HF @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu PETG HF @BBL A1 0.2 nozzle.json new file mode 100644 index 00000000000..7335bcaffe0 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PETG HF @BBL A1 0.2 nozzle.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Bambu PETG HF @BBL A1 0.2 nozzle", + "inherits": "Bambu PETG HF @base", + "from": "system", + "setting_id": "GFSG02_04", + "instantiation": "true", + "fan_cooling_layer_time": [ + "15" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "1" + ], + "nozzle_temperature": [ + "240" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_layer_time": [ + "7" + ], + "compatible_printers": [ + "Bambu Lab A1 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PETG HF @BBL A1 0.8 nozzle.json b/resources/profiles/BBL/filament/Bambu PETG HF @BBL A1 0.8 nozzle.json new file mode 100644 index 00000000000..a4db6b85bd2 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PETG HF @BBL A1 0.8 nozzle.json @@ -0,0 +1,36 @@ +{ + "type": "filament", + "name": "Bambu PETG HF @BBL A1 0.8 nozzle", + "inherits": "Bambu PETG HF @base", + "from": "system", + "setting_id": "GFSG02_05", + "instantiation": "true", + "fan_cooling_layer_time": [ + "15" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "nozzle_temperature": [ + "240" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_layer_time": [ + "7" + ], + "compatible_printers": [ + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PETG HF @BBL A1.json b/resources/profiles/BBL/filament/Bambu PETG HF @BBL A1.json new file mode 100644 index 00000000000..2a9f8a264c1 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PETG HF @BBL A1.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Bambu PETG HF @BBL A1", + "inherits": "Bambu PETG HF @base", + "from": "system", + "setting_id": "GFSG02_03", + "instantiation": "true", + "fan_cooling_layer_time": [ + "15" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "nozzle_temperature": [ + "240" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_layer_time": [ + "7" + ], + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PETG HF @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu PETG HF @BBL A1M 0.2 nozzle.json new file mode 100644 index 00000000000..17106138f6c --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PETG HF @BBL A1M 0.2 nozzle.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Bambu PETG HF @BBL A1M 0.2 nozzle", + "inherits": "Bambu PETG HF @base", + "from": "system", + "setting_id": "GFSG02_07", + "instantiation": "true", + "fan_cooling_layer_time": [ + "15" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "1" + ], + "nozzle_temperature": [ + "240" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_layer_time": [ + "7" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PETG HF @BBL A1M 0.8 nozzle.json b/resources/profiles/BBL/filament/Bambu PETG HF @BBL A1M 0.8 nozzle.json new file mode 100644 index 00000000000..2d3ea73731f --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PETG HF @BBL A1M 0.8 nozzle.json @@ -0,0 +1,36 @@ +{ + "type": "filament", + "name": "Bambu PETG HF @BBL A1M 0.8 nozzle", + "inherits": "Bambu PETG HF @base", + "from": "system", + "setting_id": "GFSG02_08", + "instantiation": "true", + "fan_cooling_layer_time": [ + "15" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "nozzle_temperature": [ + "240" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_layer_time": [ + "7" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.6 nozzle", + "Bambu Lab A1 mini 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PETG HF @BBL A1M.json b/resources/profiles/BBL/filament/Bambu PETG HF @BBL A1M.json new file mode 100644 index 00000000000..f6d16e8d475 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PETG HF @BBL A1M.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Bambu PETG HF @BBL A1M", + "inherits": "Bambu PETG HF @base", + "from": "system", + "setting_id": "GFSG02_06", + "instantiation": "true", + "fan_cooling_layer_time": [ + "15" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "nozzle_temperature": [ + "240" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_layer_time": [ + "7" + ], + "compatible_printers": [ + "Bambu Lab A1 mini 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PETG HF @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Bambu PETG HF @BBL X1C 0.2 nozzle.json new file mode 100644 index 00000000000..b0d8d373744 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PETG HF @BBL X1C 0.2 nozzle.json @@ -0,0 +1,33 @@ +{ + "type": "filament", + "name": "Bambu PETG HF @BBL X1C 0.2 nozzle", + "inherits": "Bambu PETG HF @base", + "from": "system", + "setting_id": "GFSG02_01", + "instantiation": "true", + "fan_cooling_layer_time": [ + "20" + ], + "fan_min_speed": [ + "20" + ], + "filament_max_volumetric_speed": [ + "1" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.2 nozzle", + "Bambu Lab P1S 0.2 nozzle", + "Bambu Lab X1 0.2 nozzle", + "Bambu Lab X1 Carbon 0.2 nozzle", + "Bambu Lab X1E 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PETG HF @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/filament/Bambu PETG HF @BBL X1C 0.8 nozzle.json new file mode 100644 index 00000000000..44193c3c433 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PETG HF @BBL X1C 0.8 nozzle.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Bambu PETG HF @BBL X1C 0.8 nozzle", + "inherits": "Bambu PETG HF @base", + "from": "system", + "setting_id": "GFSG02_02", + "instantiation": "true", + "fan_cooling_layer_time": [ + "20" + ], + "fan_min_speed": [ + "20" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "compatible_printers": [ + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PETG HF @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PETG HF @BBL X1C.json new file mode 100644 index 00000000000..c02f8e26099 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PETG HF @BBL X1C.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Bambu PETG HF @BBL X1C", + "inherits": "Bambu PETG HF @base", + "from": "system", + "setting_id": "GFSG02_00", + "instantiation": "true", + "fan_cooling_layer_time": [ + "20" + ], + "fan_min_speed": [ + "20" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab X1E 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu PETG HF @base.json b/resources/profiles/BBL/filament/Bambu PETG HF @base.json new file mode 100644 index 00000000000..ebc21599255 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu PETG HF @base.json @@ -0,0 +1,80 @@ +{ + "type": "filament", + "name": "Bambu PETG HF @base", + "inherits": "fdm_filament_pet", + "from": "system", + "filament_id": "GFG02", + "instantiation": "false", + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "24.99" + ], + "filament_density": [ + "1.28" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "21" + ], + "filament_vendor": [ + "Bambu Lab" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "slow_down_layer_time": [ + "12" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >80)||(bed_temperature_initial_layer[current_extruder] >80)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >60)||(bed_temperature_initial_layer[current_extruder] >60)}M106 P3 S180\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu Support for ABS @BBL A1.json b/resources/profiles/BBL/filament/Bambu Support for ABS @BBL A1.json new file mode 100644 index 00000000000..f0841864961 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu Support for ABS @BBL A1.json @@ -0,0 +1,13 @@ +{ + "type": "filament", + "name": "Bambu Support for ABS @BBL A1", + "inherits": "Bambu Support for ABS @base", + "from": "system", + "setting_id": "GFSS06_01", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle", + "Bambu Lab A1 0.6 nozzle", + "Bambu Lab A1 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu Support for ABS @BBL X1C.json b/resources/profiles/BBL/filament/Bambu Support for ABS @BBL X1C.json new file mode 100644 index 00000000000..5029095bca5 --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu Support for ABS @BBL X1C.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Bambu Support for ABS @BBL X1C", + "inherits": "Bambu Support for ABS @base", + "from": "system", + "setting_id": "GFSS06_00", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab P1P 0.4 nozzle", + "Bambu Lab P1P 0.6 nozzle", + "Bambu Lab P1P 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle", + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Bambu Support for ABS @base.json b/resources/profiles/BBL/filament/Bambu Support for ABS @base.json new file mode 100644 index 00000000000..506ffa39acf --- /dev/null +++ b/resources/profiles/BBL/filament/Bambu Support for ABS @base.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Bambu Support for ABS @base", + "inherits": "fdm_filament_abs", + "from": "system", + "filament_id": "GFS06", + "instantiation": "false", + "fan_max_speed": [ + "30" + ], + "filament_cost": [ + "29.98" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "1" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_vendor": [ + "Bambu Lab" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "slow_down_layer_time": [ + "12" + ], + "temperature_vitrification": [ + "90" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic PPA-CF @BBL X1C.json b/resources/profiles/BBL/filament/Generic PPA-CF @BBL X1C.json index 2df7f152555..ca1d8fc926e 100644 --- a/resources/profiles/BBL/filament/Generic PPA-CF @BBL X1C.json +++ b/resources/profiles/BBL/filament/Generic PPA-CF @BBL X1C.json @@ -5,8 +5,14 @@ "from": "system", "setting_id": "GFSN97_00", "instantiation": "true", - "filament_type": [ - "PPA-CF" + "fan_max_speed": [ + "35" + ], + "filament_max_volumetric_speed": [ + "6.5" + ], + "overhang_fan_threshold": [ + "25%" ], "compatible_printers": [ "Bambu Lab X1 Carbon 0.4 nozzle", diff --git a/resources/profiles/BBL/filament/Generic PPA-CF @BBL X1E.json b/resources/profiles/BBL/filament/Generic PPA-CF @BBL X1E.json index b0326275612..7e1c4d8f63e 100644 --- a/resources/profiles/BBL/filament/Generic PPA-CF @BBL X1E.json +++ b/resources/profiles/BBL/filament/Generic PPA-CF @BBL X1E.json @@ -8,8 +8,14 @@ "chamber_temperatures": [ "60" ], - "filament_type": [ - "PPA-CF" + "fan_max_speed": [ + "35" + ], + "filament_max_volumetric_speed": [ + "6.5" + ], + "overhang_fan_threshold": [ + "25%" ], "compatible_printers": [ "Bambu Lab X1E 0.4 nozzle", diff --git a/resources/profiles/BBL/machine/Bambu Lab A1 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab A1 0.4 nozzle.json index 86fcc31826b..a9da7587091 100644 --- a/resources/profiles/BBL/machine/Bambu Lab A1 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab A1 0.4 nozzle.json @@ -61,7 +61,7 @@ "255" ], "scan_first_layer": "0", - "machine_start_gcode": ";===== machine: A1 =========================\n;===== date: 20240606 =====================\nG392 S0\nM9833.2\n;M400\n;M73 P1.717\n\n;===== start to heat heatbead&hotend==========\nM1002 gcode_claim_action : 2\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\nM104 S140\nM140 S[bed_temperature_initial_layer_single]\n\n;=====start printer sound ===================\nM17\nM400 S1\nM1006 S1\nM1006 A0 B10 L100 C37 D10 M60 E37 F10 N60\nM1006 A0 B10 L100 C41 D10 M60 E41 F10 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A43 B10 L100 C46 D10 M70 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A0 B10 L100 C43 D10 M60 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A0 B10 L100 C41 D10 M80 E41 F10 N80\nM1006 A0 B10 L100 C44 D10 M80 E44 F10 N80\nM1006 A0 B10 L100 C49 D10 M80 E49 F10 N80\nM1006 A0 B10 L100 C0 D10 M80 E0 F10 N80\nM1006 A44 B10 L100 C48 D10 M60 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A0 B10 L100 C44 D10 M80 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A43 B10 L100 C46 D10 M60 E39 F10 N80\nM1006 W\nM18 \n;=====start printer sound ===================\n\n;=====avoid end stop =================\nG91\nG380 S2 Z40 F1200\nG380 S3 Z-15 F1200\nG90\n\n;===== reset machine status =================\n;M290 X39 Y39 Z8\nM204 S6000\n\nM630 S0 P0\nG91\nM17 Z0.3 ; lower the z-motor current\n\nG90\nM17 X0.65 Y1.2 Z0.6 ; 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\n;M211 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\n\n;====== cog noise reduction=================\nM982.2 S1 ; turn on cog noise reduction\n\nM1002 gcode_claim_action : 13\n\nG28 X\nG91\nG1 Z5 F1200\nG90\nG0 X128 F30000\nG0 Y254 F3000\nG91\nG1 Z-5 F1200\n\nM109 S25 H140\n\nM17 E0.3\nM83\nG1 E10 F1200\nG1 E-0.5 F30\nM17 D\n\nG28 Z P0 T140; home z with low precision,permit 300deg temperature\nM104 S{nozzle_temperature_initial_layer[initial_extruder]}\n\nM1002 judge_flag build_plate_detect_flag\nM622 S1\n G39.4\n G90\n G1 Z5 F1200\nM623\n\n;M400\n;M73 P1.717\n\n;===== prepare print temperature and material ==========\nM1002 gcode_claim_action : 24\n\nM400\n;G392 S1\nM211 X0 Y0 Z0 ;turn off soft endstop\nM975 S1 ; turn on\n\nG90\nG1 X-28.5 F30000\nG1 X-48.2 F3000\n\nM620 M ;enable remap\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M1002 gcode_claim_action : 4\n M400\n M1002 set_filament_type:UNKNOWN\n M109 S[nozzle_temperature_initial_layer]\n M104 S250\n M400\n T[initial_no_support_extruder]\n G1 X-48.2 F3000\n M400\n\n M620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n M109 S250 ;set nozzle to common flush temp\n M106 P1 S0\n G92 E0\n G1 E50 F200\n M400\n M1002 set_filament_type:{filament_type[initial_no_support_extruder]}\nM621 S[initial_no_support_extruder]A\n\nM109 S{nozzle_temperature_range_high[initial_no_support_extruder]} H300\nG92 E0\nG1 E50 F200 ; lower extrusion speed to avoid clog\nM400\nM106 P1 S178\nG92 E0\nG1 E5 F200\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG92 E0\nG1 E-0.5 F300\n\nG1 X-28.5 F30000\nG1 X-48.2 F3000\nG1 X-28.5 F30000 ;wipe and shake\nG1 X-48.2 F3000\nG1 X-28.5 F30000 ;wipe and shake\nG1 X-48.2 F3000\n\n;G392 S0\n\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n;M400\n;M73 P1.717\n\n;===== auto extrude cali start =========================\nM975 S1\n;G392 S1\n\nG90\nM83\nT1000\nG1 X-48.2 Y0 Z10 F10000\nM400\nM1002 set_filament_type:UNKNOWN\n\nM412 S1 ; ===turn on filament runout detection===\nM400 P10\nM620.3 W1; === turn on filament tangle detection===\nM400 S2\n\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\n\n;M1002 set_flag extrude_cali_flag=1\nM1002 judge_flag extrude_cali_flag\n\nM622 J1\n M1002 gcode_claim_action : 8\n\n M109 S{nozzle_temperature[initial_extruder]}\n G1 E10 F{outer_wall_volumetric_speed/2.4*60}\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n\n M106 P1 S255\n M400 S5\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n G1 X-48.2 F3000\n M400\n M106 P1 S0\n\n M1002 judge_last_extrude_cali_success\n M622 J0\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n M106 P1 S255\n M400 S5\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n M400\n M106 P1 S0\n M623\n \n G1 X-48.2 F3000\n M400\n M984 A0.1 E1 S1 F{outer_wall_volumetric_speed/2.4}\n M106 P1 S178\n M400 S7\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n G1 X-48.2 F3000\n M400\n M106 P1 S0\nM623 ; end of \"draw extrinsic para cali paint\"\n\n;G392 S0\n;===== auto extrude cali end ========================\n\n;M400\n;M73 P1.717\n\nM104 S170 ; prepare to wipe nozzle\nM106 S255 ; turn on fan\n\n;===== mech mode fast check start =====================\nM1002 gcode_claim_action : 3\n\nG1 X128 Y128 F20000\nG1 Z5 F1200\nM400 P200\nM970.3 Q1 A5 K0 O3\nM974 Q1 S2 P0\n\nM970.2 Q1 K1 W58 Z0.11\nM974 S2\n\nG1 X128 Y128 F20000\nG1 Z5 F1200\nM400 P200\nM970.3 Q0 A10 K0 O1\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X0 Y5\nG28 X ; re-home XY\n\nG1 Z4 F1200\n\n;===== mech mode fast check end =======================\n\n;M400\n;M73 P1.717\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\n\nM975 S1\nM106 S255 ; turn on fan (G28 has turn off fan)\nM211 S; push soft endstop status\nM211 X0 Y0 Z0 ;turn off Z axis endstop\n\n;===== remove waste by touching start =====\n\nM104 S170 ; set temp down to heatbed acceptable\n\nM83\nG1 E-1 F500\nG90\nM83\n\nM109 S170\nG0 X108 Y-0.5 F30000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X110 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X112 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X114 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X116 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X118 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X120 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X122 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X124 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X126 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X128 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X130 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X132 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X134 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X136 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X138 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X140 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X142 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X144 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X146 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X148 F10000\nG380 S3 Z-5 F1200\n\nG1 Z5 F30000\n;===== remove waste by touching end =====\n\nG1 Z10 F1200\nG0 X118 Y261 F30000\nG1 Z5 F1200\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-50}\n\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nM104 S140 ; prepare to abl\nG0 Z5 F20000\n\nG0 X128 Y261 F20000 ; move to exposed steel surface\nG0 Z-1.01 F1200 ; stop the nozzle\n\nG91\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nG90\nG1 Z10 F1200\n\n;===== brush material wipe nozzle =====\n\nG90\nG1 Y250 F30000\nG1 X55\nG1 Z1.300 F1200\nG1 Y262.5 F6000\nG91\nG1 X-35 F30000\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Z5.000 F1200\n\nG90\nG1 X30 Y250.000 F30000\nG1 Z1.300 F1200\nG1 Y262.5 F6000\nG91\nG1 X35 F30000\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Z10.000 F1200\n\n;===== brush material wipe nozzle end =====\n\nG90\n;G0 X128 Y261 F20000 ; move to exposed steel surface\nG1 Y250 F30000\nG1 X138\nG1 Y261\nG0 Z-1.01 F1200 ; stop the nozzle\n\nG91\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nM109 S140\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM211 R; pop softend status\n\n;===== wipe nozzle end ================================\n\n;M400\n;M73 P1.717\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\n\nG90\nG1 Z5 F1200\nG1 X0 Y0 F30000\nG29.2 S1 ; turn on ABL\n\nM190 S[bed_temperature_initial_layer_single]; ensure bed temp\nM109 S140\nM106 S0 ; turn off fan , too noisy\n\nM622 J1\n M1002 gcode_claim_action : 1\n G29 A1 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\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\n;===== home after wipe mouth end =======================\n\n;M400\n;M73 P1.717\n\nG1 X108.000 Y-0.5 F30000\nG1 Z0.300 F1200\nM400\nG2814 Z0.32\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; prepare to print\n\n;===== nozzle load line ===============================\n;G90\n;M83\n;G1 Z5 F1200\n;G1 X88 Y1.0 F20000\n;G1 Z0.3 F1200\n\n;M109 S{nozzle_temperature_initial_layer[initial_extruder]}\n\n;G1 E2 F300\n;G1 X168 E4.989 F6000\n;G1 Z1 F1200\n;===== nozzle load line end ===========================\n\n;===== extrude cali test ===============================\n\nM400\n M900 S\n M900 C\n G90\n M83\n\n M109 S{nozzle_temperature_initial_layer[initial_extruder]}\n G0 X128 E8 F{outer_wall_volumetric_speed/(24/20) * 60}\n G0 X133 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X138 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X143 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X148 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X153 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G91\n G1 X1 Z-0.300\n G1 X4\n G1 Z1 F1200\n G90\n M83\n M400\n\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M900 R\n G90\n G1 X108.000 Y1.0 F30000\n G91\n G1 Z-0.700 F1200\n G90\n M83\n G0 X128 E4 F{outer_wall_volumetric_speed/(24/20) * 60}\n G0 X133 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X138 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X143 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X148 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X153 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G91\n G1 X1 Z-0.300\n G1 X4\n G1 Z1 F1200\n G90\n M400\nM623\n\nG1 Z0.2\n\n;M400\n;M73 P1.717\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\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.02} ; for Textured PEI Plate\n{endif}\n\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\n\nM211 X0 Y0 Z0 ;turn off soft endstop\n;G392 S1 ; turn on clog detection\nM1007 S1 ; turn on mass estimation\nG29.4\n", + "machine_start_gcode": ";===== machine: A1 =========================\n;===== date: 20240620 =====================\nG392 S0\nM9833.2\n;M400\n;M73 P1.717\n\n;===== start to heat heatbead&hotend==========\nM1002 gcode_claim_action : 2\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\nM104 S140\nM140 S[bed_temperature_initial_layer_single]\n\n;=====start printer sound ===================\nM17\nM400 S1\nM1006 S1\nM1006 A0 B10 L100 C37 D10 M60 E37 F10 N60\nM1006 A0 B10 L100 C41 D10 M60 E41 F10 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A43 B10 L100 C46 D10 M70 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A0 B10 L100 C43 D10 M60 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A0 B10 L100 C41 D10 M80 E41 F10 N80\nM1006 A0 B10 L100 C44 D10 M80 E44 F10 N80\nM1006 A0 B10 L100 C49 D10 M80 E49 F10 N80\nM1006 A0 B10 L100 C0 D10 M80 E0 F10 N80\nM1006 A44 B10 L100 C48 D10 M60 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A0 B10 L100 C44 D10 M80 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A43 B10 L100 C46 D10 M60 E39 F10 N80\nM1006 W\nM18 \n;=====start printer sound ===================\n\n;=====avoid end stop =================\nG91\nG380 S2 Z40 F1200\nG380 S3 Z-15 F1200\nG90\n\n;===== reset machine status =================\n;M290 X39 Y39 Z8\nM204 S6000\n\nM630 S0 P0\nG91\nM17 Z0.3 ; lower the z-motor current\n\nG90\nM17 X0.65 Y1.2 Z0.6 ; 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\n;M211 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\n\n;====== cog noise reduction=================\nM982.2 S1 ; turn on cog noise reduction\n\nM1002 gcode_claim_action : 13\n\nG28 X\nG91\nG1 Z5 F1200\nG90\nG0 X128 F30000\nG0 Y254 F3000\nG91\nG1 Z-5 F1200\n\nM109 S25 H140\n\nM17 E0.3\nM83\nG1 E10 F1200\nG1 E-0.5 F30\nM17 D\n\nG28 Z P0 T140; home z with low precision,permit 300deg temperature\nM104 S{nozzle_temperature_initial_layer[initial_extruder]}\n\nM1002 judge_flag build_plate_detect_flag\nM622 S1\n G39.4\n G90\n G1 Z5 F1200\nM623\n\n;M400\n;M73 P1.717\n\n;===== prepare print temperature and material ==========\nM1002 gcode_claim_action : 24\n\nM400\n;G392 S1\nM211 X0 Y0 Z0 ;turn off soft endstop\nM975 S1 ; turn on\n\nG90\nG1 X-28.5 F30000\nG1 X-48.2 F3000\n\nM620 M ;enable remap\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M1002 gcode_claim_action : 4\n M400\n M1002 set_filament_type:UNKNOWN\n M109 S[nozzle_temperature_initial_layer]\n M104 S250\n M400\n T[initial_no_support_extruder]\n G1 X-48.2 F3000\n M400\n\n M620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n M109 S250 ;set nozzle to common flush temp\n M106 P1 S0\n G92 E0\n G1 E50 F200\n M400\n M1002 set_filament_type:{filament_type[initial_no_support_extruder]}\nM621 S[initial_no_support_extruder]A\n\nM109 S{nozzle_temperature_range_high[initial_no_support_extruder]} H300\nG92 E0\nG1 E50 F200 ; lower extrusion speed to avoid clog\nM400\nM106 P1 S178\nG92 E0\nG1 E5 F200\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG92 E0\nG1 E-0.5 F300\n\nG1 X-28.5 F30000\nG1 X-48.2 F3000\nG1 X-28.5 F30000 ;wipe and shake\nG1 X-48.2 F3000\nG1 X-28.5 F30000 ;wipe and shake\nG1 X-48.2 F3000\n\n;G392 S0\n\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n;M400\n;M73 P1.717\n\n;===== auto extrude cali start =========================\nM975 S1\n;G392 S1\n\nG90\nM83\nT1000\nG1 X-48.2 Y0 Z10 F10000\nM400\nM1002 set_filament_type:UNKNOWN\n\nM412 S1 ; ===turn on filament runout detection===\nM400 P10\nM620.3 W1; === turn on filament tangle detection===\nM400 S2\n\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\n\n;M1002 set_flag extrude_cali_flag=1\nM1002 judge_flag extrude_cali_flag\n\nM622 J1\n M1002 gcode_claim_action : 8\n\n M109 S{nozzle_temperature[initial_extruder]}\n G1 E10 F{outer_wall_volumetric_speed/2.4*60}\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n\n M106 P1 S255\n M400 S5\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n G1 X-48.2 F3000\n M400\n M106 P1 S0\n\n M1002 judge_last_extrude_cali_success\n M622 J0\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n M106 P1 S255\n M400 S5\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n M400\n M106 P1 S0\n M623\n \n G1 X-48.2 F3000\n M400\n M984 A0.1 E1 S1 F{outer_wall_volumetric_speed/2.4} H[nozzle_diameter]\n M106 P1 S178\n M400 S7\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n G1 X-48.2 F3000\n M400\n M106 P1 S0\nM623 ; end of \"draw extrinsic para cali paint\"\n\n;G392 S0\n;===== auto extrude cali end ========================\n\n;M400\n;M73 P1.717\n\nM104 S170 ; prepare to wipe nozzle\nM106 S255 ; turn on fan\n\n;===== mech mode fast check start =====================\nM1002 gcode_claim_action : 3\n\nG1 X128 Y128 F20000\nG1 Z5 F1200\nM400 P200\nM970.3 Q1 A5 K0 O3\nM974 Q1 S2 P0\n\nM970.2 Q1 K1 W58 Z0.1\nM974 S2\n\nG1 X128 Y128 F20000\nG1 Z5 F1200\nM400 P200\nM970.3 Q0 A10 K0 O1\nM974 Q0 S2 P0\n\nM970.2 Q0 K1 W78 Z0.1\nM974 S2\n\nM975 S1\nG1 F30000\nG1 X0 Y5\nG28 X ; re-home XY\n\nG1 Z4 F1200\n\n;===== mech mode fast check end =======================\n\n;M400\n;M73 P1.717\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\n\nM975 S1\nM106 S255 ; turn on fan (G28 has turn off fan)\nM211 S; push soft endstop status\nM211 X0 Y0 Z0 ;turn off Z axis endstop\n\n;===== remove waste by touching start =====\n\nM104 S170 ; set temp down to heatbed acceptable\n\nM83\nG1 E-1 F500\nG90\nM83\n\nM109 S170\nG0 X108 Y-0.5 F30000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X110 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X112 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X114 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X116 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X118 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X120 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X122 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X124 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X126 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X128 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X130 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X132 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X134 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X136 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X138 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X140 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X142 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X144 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X146 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X148 F10000\nG380 S3 Z-5 F1200\n\nG1 Z5 F30000\n;===== remove waste by touching end =====\n\nG1 Z10 F1200\nG0 X118 Y261 F30000\nG1 Z5 F1200\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-50}\n\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nM104 S140 ; prepare to abl\nG0 Z5 F20000\n\nG0 X128 Y261 F20000 ; move to exposed steel surface\nG0 Z-1.01 F1200 ; stop the nozzle\n\nG91\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nG90\nG1 Z10 F1200\n\n;===== brush material wipe nozzle =====\n\nG90\nG1 Y250 F30000\nG1 X55\nG1 Z1.300 F1200\nG1 Y262.5 F6000\nG91\nG1 X-35 F30000\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Z5.000 F1200\n\nG90\nG1 X30 Y250.000 F30000\nG1 Z1.300 F1200\nG1 Y262.5 F6000\nG91\nG1 X35 F30000\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Z10.000 F1200\n\n;===== brush material wipe nozzle end =====\n\nG90\n;G0 X128 Y261 F20000 ; move to exposed steel surface\nG1 Y250 F30000\nG1 X138\nG1 Y261\nG0 Z-1.01 F1200 ; stop the nozzle\n\nG91\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nM109 S140\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM211 R; pop softend status\n\n;===== wipe nozzle end ================================\n\n;M400\n;M73 P1.717\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\n\nG90\nG1 Z5 F1200\nG1 X0 Y0 F30000\nG29.2 S1 ; turn on ABL\n\nM190 S[bed_temperature_initial_layer_single]; ensure bed temp\nM109 S140\nM106 S0 ; turn off fan , too noisy\n\nM622 J1\n M1002 gcode_claim_action : 1\n G29 A1 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\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\n;===== home after wipe mouth end =======================\n\n;M400\n;M73 P1.717\n\nG1 X108.000 Y-0.500 F30000\nG1 Z0.300 F1200\nM400\nG2814 Z0.32\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; prepare to print\n\n;===== nozzle load line ===============================\n;G90\n;M83\n;G1 Z5 F1200\n;G1 X88 Y-0.5 F20000\n;G1 Z0.3 F1200\n\n;M109 S{nozzle_temperature_initial_layer[initial_extruder]}\n\n;G1 E2 F300\n;G1 X168 E4.989 F6000\n;G1 Z1 F1200\n;===== nozzle load line end ===========================\n\n;===== extrude cali test ===============================\n\nM400\n M900 S\n M900 C\n G90\n M83\n\n M109 S{nozzle_temperature_initial_layer[initial_extruder]}\n G0 X128 E8 F{outer_wall_volumetric_speed/(24/20) * 60}\n G0 X133 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X138 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X143 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X148 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X153 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G91\n G1 X1 Z-0.300\n G1 X4\n G1 Z1 F1200\n G90\n M400\n\nM900 R\n\nM1002 judge_flag extrude_cali_flag\nM622 J1\n G90\n G1 X108.000 Y1.000 F30000\n G91\n G1 Z-0.700 F1200\n G90\n M83\n G0 X128 E10 F{outer_wall_volumetric_speed/(24/20) * 60}\n G0 X133 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X138 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X143 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X148 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X153 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G91\n G1 X1 Z-0.300\n G1 X4\n G1 Z1 F1200\n G90\n M400\nM623\n\nG1 Z0.2\n\n;M400\n;M73 P1.717\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\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.02} ; for Textured PEI Plate\n{endif}\n\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\n\nM211 X0 Y0 Z0 ;turn off soft endstop\n;G392 S1 ; turn on clog detection\nM1007 S1 ; turn on mass estimation\nG29.4\n", "machine_end_gcode": ";===== date: 20231229 =====================\nG392 S0 ;turn off nozzle clog detect\n\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 X0 Y{first_layer_center_no_wipe_tower[1]} F18000 ; move to safe pos\nG1 X-13.0 F3000 ; move to safe pos\n{if !spiral_mode && print_sequence != \"by object\"}\nM1002 judge_flag timelapse_record_flag\nM622 J1\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM991 S0 P-1 ;end timelapse at safe pos\nM623\n{endif}\n\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\n;G1 X27 F15000 ; wipe\n\n; pull back filament to AMS\nM620 S255\nG1 X267 F15000\nT255\nG1 X-28.5 F18000\nG1 X-48.2 F3000\nG1 X-28.5 F18000\nG1 X-48.2 F3000\nM621 S255\n\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) < 256}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z256 F600\n G1 Z256\n{endif}\nM400 P100\nM17 R ; restore z current\n\nG90\nG1 X-48 Y180 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\n;=====printer finish sound=========\nM17\nM400 S1\nM1006 S1\nM1006 A0 B20 L100 C37 D20 M40 E42 F20 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C46 D10 M80 E46 F10 N80\nM1006 A44 B20 L100 C39 D20 M60 E48 F20 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C39 D10 M60 E39 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C39 D10 M60 E39 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C48 D10 M60 E44 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A44 B20 L100 C49 D20 M80 E41 F20 N80\nM1006 A0 B20 L100 C0 D20 M60 E0 F20 N80\nM1006 A0 B20 L100 C37 D20 M30 E37 F20 N60\nM1006 W\n;=====printer finish sound=========\n\n;M17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\nM400\nM18 X Y Z\n\n", "layer_change_gcode": "; layer num/total_layer_count: {layer_num+1}/[total_layer_count]\n; update layer progress\nM73 L{layer_num+1}\nM991 S0 P{layer_num} ;notify layer change", "time_lapse_gcode": ";===================== date: 20240606 =====================\n{if !spiral_mode && print_sequence != \"by object\"}\n; don't support timelapse gcode in spiral_mode and by object sequence for I3 structure printer\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\nG92 E0\nG17\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F20000 ; spiral lift a little\nG1 Z{max_layer_z + 0.4}\nG1 X0 Y{first_layer_center_no_wipe_tower[1]} F18000 ; move to safe pos\nG1 X-48.2 F3000 ; move to safe pos\nM400 P300\nM971 S11 C11 O0\nG92 E0\nG1 X0 F18000\nM623\n\nM622.1 S1\nM1002 judge_flag g39_3rd_layer_detect_flag\nM622 J1\n ; enable nozzle clog detect at 3rd layer\n {if layer_num == 2}\n M400\n G90\n M83\n M204 S5000\n G0 Z2 F4000\n G0 X261 Y250 F20000\n M400 P200\n G39 S1\n G0 Z2 F4000\n {endif}\n\n\n M622.1 S1\n M1002 judge_flag g39_detection_flag\n M622 J1\n {if !in_head_wrap_detect_zone}\n M622.1 S0\n M1002 judge_flag g39_mass_exceed_flag\n M622 J1\n {if layer_num > 2}\n G392 S0\n M400\n G90\n M83\n M204 S5000\n G0 Z{max_layer_z + 0.4} F4000\n G39.3 S1\n G0 Z{max_layer_z + 0.4} F4000\n G392 S0\n {endif}\n M623\n {endif}\n M623\nM623\n{endif}\n", diff --git a/resources/profiles/BBL/machine/Bambu Lab A1.json b/resources/profiles/BBL/machine/Bambu Lab A1.json index bd63f6ca8e2..d818efa48b1 100644 --- a/resources/profiles/BBL/machine/Bambu Lab A1.json +++ b/resources/profiles/BBL/machine/Bambu Lab A1.json @@ -2,12 +2,12 @@ "type": "machine_model", "name": "Bambu Lab A1", "nozzle_diameter": "0.4;0.2;0.6;0.8", + "url": "http://www.bambulab.com/Parameters/printer_model/Bambu Lab X1.json", "bed_model": "bbl-3dp-X1.stl", "bed_texture": "bbl-3dp-logo.svg", "default_bed_type": "Textured PEI Plate", "family": "BBL-3DP", "machine_tech": "FFF", "model_id": "N2S", - "url": "http://www.bambulab.com/Parameters/printer_model/Bambu Lab X1.json", - "default_materials": "Bambu PLA Matte @BBL A1;Bambu PLA Basic @BBL A1;Bambu PLA Silk @BBL A1;Bambu Support For PA/PET @BBL A1;Bambu ABS @BBL A1;Bambu PETG Basic @BBL A1;Bambu TPU 95A @BBL A1;Bambu PLA Tough @BBL A1;Generic PLA @BBL A1;Generic PLA High Speed @BBL A1;Generic PETG @BBL A1;Generic PVA @BBL A1" + "default_materials": "Bambu PLA Matte @BBL A1;Bambu PLA Basic @BBL A1;Bambu PLA Silk @BBL A1;Bambu Support For PA/PET @BBL A1;Bambu ABS @BBL A1;Bambu TPU 95A @BBL A1;Bambu PLA Tough @BBL A1;Generic PLA @BBL A1;Generic PLA High Speed @BBL A1;Generic PETG @BBL A1;Generic PVA @BBL A1;Bambu PETG HF @BBL A1" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab P1P.json b/resources/profiles/BBL/machine/Bambu Lab P1P.json index 41036ba641c..ec860165eee 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1P.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1P.json @@ -2,12 +2,12 @@ "type": "machine_model", "name": "Bambu Lab P1P", "nozzle_diameter": "0.4;0.2;0.6;0.8", + "url": "http://www.bambulab.com/Parameters/printer_model/Bambu Lab X1.json", "bed_model": "bbl-3dp-X1.stl", "bed_texture": "bbl-3dp-logo.svg", "default_bed_type": "Textured PEI Plate", "family": "BBL-3DP", "machine_tech": "FFF", "model_id": "C11", - "url": "http://www.bambulab.com/Parameters/printer_model/Bambu Lab X1.json", - "default_materials": "Bambu PLA Matte @BBL P1P;Bambu PLA Basic @BBL P1P;Bambu PLA-CF @BBL P1P;Bambu PETG Basic @BBL X1C;Bambu PETG-CF @BBL P1P;Bambu ABS @BBL P1P;Bambu PLA Silk @BBL P1P;Bambu PAHT-CF @BBL P1P;Bambu Support For PA/PET @BBL P1P;Bambu Support For PLA @BBL P1P;Generic PLA @BBL P1P;Generic PLA High Speed @BBL P1P;Generic PETG @BBL P1P" + "default_materials": "Bambu PLA Matte @BBL P1P;Bambu PLA Basic @BBL P1P;Bambu PLA-CF @BBL P1P;Bambu PETG-CF @BBL P1P;Bambu ABS @BBL P1P;Bambu PLA Silk @BBL P1P;Bambu PAHT-CF @BBL P1P;Bambu Support For PA/PET @BBL P1P;Bambu Support For PLA @BBL P1P;Generic PLA @BBL P1P;Generic PLA High Speed @BBL P1P;Generic PETG @BBL P1P;Bambu PETG HF @BBL X1C" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab P1S.json b/resources/profiles/BBL/machine/Bambu Lab P1S.json index 8a9bb02cf23..f8bc9cfa711 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1S.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1S.json @@ -2,12 +2,12 @@ "type": "machine_model", "name": "Bambu Lab P1S", "nozzle_diameter": "0.4;0.2;0.6;0.8", + "url": "http://www.bambulab.com/Parameters/printer_model/Bambu Lab X1.json", "bed_model": "bbl-3dp-X1.stl", "bed_texture": "bbl-3dp-logo.svg", "default_bed_type": "Textured PEI Plate", "family": "BBL-3DP", "machine_tech": "FFF", "model_id": "C12", - "url": "http://www.bambulab.com/Parameters/printer_model/Bambu Lab X1.json", - "default_materials": "Bambu PLA Matte @BBL X1C;Bambu PLA Basic @BBL X1C;Bambu PLA-CF @BBL X1C;Bambu PETG Basic @BBL X1C;Bambu PETG-CF @BBL X1C;Bambu ABS @BBL X1C;Bambu PLA Silk @BBL X1C;Bambu PAHT-CF @BBL X1C;Bambu Support For PLA @BBL X1C;Bambu Support For PA/PET @BBL X1C;Generic PLA;Generic PLA High Speed @BBL X1C;Generic PETG" + "default_materials": "Bambu PLA Matte @BBL X1C;Bambu PLA Basic @BBL X1C;Bambu PLA-CF @BBL X1C;Bambu PETG-CF @BBL X1C;Bambu ABS @BBL X1C;Bambu PLA Silk @BBL X1C;Bambu PAHT-CF @BBL X1C;Bambu Support For PLA @BBL X1C;Bambu Support For PA/PET @BBL X1C;Generic PLA;Generic PLA High Speed @BBL X1C;Generic PETG;Bambu PETG HF @BBL X1C" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon.json index 3b36361af07..cf585efc061 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon.json @@ -2,12 +2,12 @@ "type": "machine_model", "name": "Bambu Lab X1 Carbon", "nozzle_diameter": "0.4;0.2;0.6;0.8", + "url": "http://www.bambulab.com/Parameters/printer_model/Bambu Lab X1 Carbon.json", "bed_model": "bbl-3dp-X1.stl", "bed_texture": "bbl-3dp-logo.svg", "default_bed_type": "Textured PEI Plate", "family": "BBL-3DP", "machine_tech": "FFF", "model_id": "BL-P001", - "url": "http://www.bambulab.com/Parameters/printer_model/Bambu Lab X1 Carbon.json", - "default_materials": "Bambu PLA Matte @BBL X1C;Bambu PLA Basic @BBL X1C;Bambu PLA-CF @BBL X1C;Bambu PETG Basic @BBL X1C;Bambu PETG-CF @BBL X1C;Bambu ABS @BBL X1C;Bambu PC @BBL X1C;Bambu TPU 95A @BBL X1C;Bambu PAHT-CF @BBL X1C;Bambu Support For PLA @BBL X1C;Bambu Support For PA/PET @BBL X1C;Generic PLA;Generic PLA High Speed @BBL X1C" + "default_materials": "Bambu PLA Matte @BBL X1C;Bambu PLA Basic @BBL X1C;Bambu PLA-CF @BBL X1C;Bambu PETG-CF @BBL X1C;Bambu ABS @BBL X1C;Bambu PC @BBL X1C;Bambu TPU 95A @BBL X1C;Bambu PAHT-CF @BBL X1C;Bambu Support For PLA @BBL X1C;Bambu Support For PA/PET @BBL X1C;Generic PLA;Generic PLA High Speed @BBL X1C;Bambu PETG HF @BBL X1C" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1.json b/resources/profiles/BBL/machine/Bambu Lab X1.json index d8e4794eab2..8c498d3b238 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1.json @@ -2,12 +2,12 @@ "type": "machine_model", "name": "Bambu Lab X1", "nozzle_diameter": "0.4;0.2;0.6;0.8", + "url": "http://www.bambulab.com/Parameters/printer_model/Bambu Lab X1.json", "bed_model": "bbl-3dp-X1.stl", "bed_texture": "bbl-3dp-logo.svg", "default_bed_type": "Textured PEI Plate", "family": "BBL-3DP", "machine_tech": "FFF", "model_id": "BL-P002", - "url": "http://www.bambulab.com/Parameters/printer_model/Bambu Lab X1.json", - "default_materials": "Bambu PLA Matte @BBL X1;Bambu PLA Basic @BBL X1;Bambu PLA-CF @BBL X1C;Bambu PETG Basic @BBL X1C;Bambu PETG-CF @BBL X1C;Bambu ABS @BBL X1C;Bambu PLA Silk @BBL X1;Bambu PAHT-CF @BBL X1C;Bambu Support For PLA @BBL X1C;Bambu Support For PA/PET @BBL X1C;Generic PLA;Generic PLA High Speed @BBL X1C;Generic PETG" + "default_materials": "Bambu PLA Matte @BBL X1;Bambu PLA Basic @BBL X1;Bambu PLA-CF @BBL X1C;Bambu PETG-CF @BBL X1C;Bambu ABS @BBL X1C;Bambu PLA Silk @BBL X1;Bambu PAHT-CF @BBL X1C;Bambu Support For PLA @BBL X1C;Bambu Support For PA/PET @BBL X1C;Generic PLA;Generic PLA High Speed @BBL X1C;Generic PETG;Bambu PETG HF @BBL X1C" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1E.json b/resources/profiles/BBL/machine/Bambu Lab X1E.json index 8687b5137f5..12bbe848a56 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1E.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1E.json @@ -2,12 +2,12 @@ "type": "machine_model", "name": "Bambu Lab X1E", "nozzle_diameter": "0.4;0.2;0.6;0.8", + "url": "http://www.bambulab.com/Parameters/printer_model/Bambu Lab X1 Carbon.json", "bed_model": "bbl-3dp-X1.stl", "bed_texture": "bbl-3dp-logo.svg", "default_bed_type": "Textured PEI Plate", "family": "BBL-3DP", "machine_tech": "FFF", "model_id": "C13", - "url": "http://www.bambulab.com/Parameters/printer_model/Bambu Lab X1 Carbon.json", - "default_materials": "Bambu PLA Matte @BBL X1C;Bambu PLA Basic @BBL X1C;Bambu PLA-CF @BBL X1C;Bambu PETG Basic @BBL X1C;Bambu PETG-CF @BBL X1C;Bambu ABS @BBL X1E;Bambu ASA @BBL X1E;Bambu PC @BBL X1E;Bambu PAHT-CF @BBL X1C;Bambu Support For PLA @BBL X1C;Bambu Support For PA/PET @BBL X1C;Generic PPA-CF @BBL X1E;Generic PPS @BBL X1E;Generic PPS-CF @BBL X1E" + "default_materials": "Bambu PLA Matte @BBL X1C;Bambu PLA Basic @BBL X1C;Bambu PLA-CF @BBL X1C;Bambu PETG-CF @BBL X1C;Bambu ABS @BBL X1E;Bambu ASA @BBL X1E;Bambu PC @BBL X1E;Bambu PAHT-CF @BBL X1C;Bambu Support For PLA @BBL X1C;Bambu Support For PA/PET @BBL X1C;Generic PPA-CF @BBL X1E;Generic PPS @BBL X1E;Generic PPS-CF @BBL X1E;Bambu PETG HF @BBL X1C" } \ No newline at end of file diff --git a/resources/profiles/Comgrow/process/fdm_process_comgrow_common.json b/resources/profiles/Comgrow/process/fdm_process_comgrow_common.json index 8f144ff59a3..194e40a196c 100644 --- a/resources/profiles/Comgrow/process/fdm_process_comgrow_common.json +++ b/resources/profiles/Comgrow/process/fdm_process_comgrow_common.json @@ -128,7 +128,7 @@ "role_based_wipe_speed": "1", "seam_gap": "5%", "seam_position": "aligned", - "single_extruder_multi_material_priming": "1", + "single_extruder_multi_material_priming": "0", "skirt_distance": "3", "skirt_height": "2", "skirt_loops": "0", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.4 nozzle.json index d2253ed3826..56a7c4bdaf8 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.4 nozzle.json @@ -11,9 +11,9 @@ "printer_structure": "i3", "default_print_profile": "0.20mm Standard @Creality Ender3V3KE", "extruder_clearance_height_to_rod": "47", - "extruder_clearance_max_radius": "90", - "extruder_clearance_radius": "90", - "machine_load_filament_time": "11", + "extruder_clearance_max_radius": "90", + "extruder_clearance_radius": "90", + "machine_load_filament_time": "11", "nozzle_diameter": [ "0.4" ], @@ -23,7 +23,7 @@ "220x220", "0x220" ], - "printable_height": "240", + "printable_height": "245", "nozzle_type": "brass", "auxiliary_fan": "0", "machine_max_acceleration_extruding": [ @@ -120,7 +120,7 @@ "Creality Generic PLA @Ender-3V3-all" ], "machine_start_gcode": "SET_GCODE_VARIABLE MACRO=PRINTER_PARAM VARIABLE=fan0_min VALUE=30 ;compensate for fan speed\nSET_VELOCITY_LIMIT ACCEL_TO_DECEL=2500 ;revert accel_to_decel back to 2500\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\n\nM140 S[bed_temperature_initial_layer_single] ;Set bed temp\nG28 X Y ;Home XY axes\nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize\nG28 Z ;Home Z axis & load bed mesh\nBED_MESH_CALIBRATE PROBE_COUNT=6,6 ;Auto bed level\n\nM104 S[nozzle_temperature_initial_layer] ;Set nozzle temp\nG92 E0 ;Reset Extruder\nG1 X-2.0 Y20 Z0.3 F5000.0 ;Move to start position\nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize\nG1 Z0.2 ;Lower nozzle to printing height\nG1 Y145.0 F1500.0 E15 ;Draw the first line\nG1 X-1.7 F5000.0 ;Move to side a little\nG1 Y30 F1500.0 E15 ;Draw the second line\nG92 E0 ;Reset Extruder", - "machine_end_gcode": "G91 ;Relative positionning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z{if max_layer_z < 50}25{else}5{endif} ;Raise Z more\nG90 ;Absolute positionning\nG1 X2 Y218 F3000 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z", + "machine_end_gcode": "G92 E0 ;Reset Extruder\nG1 E-1.2 Z{max_layer_z + 0.5} F1800 ;Retract and raise Z\n{if max_layer_z < 50}\nG1 Z{max_layer_z + 25} F900 ;Raise Z more\n{endif}\n\nG1 X2 Y218 F3000 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\n\nM84 X Y E ;Disable all steppers but Z", "scan_first_layer": "0", "thumbnails": [ "96x96", diff --git a/resources/profiles/Custom.json b/resources/profiles/Custom.json index a6015b1a4ed..e4dae5bd729 100644 --- a/resources/profiles/Custom.json +++ b/resources/profiles/Custom.json @@ -1,6 +1,6 @@ { "name": "Custom Printer", - "version": "02.01.01.00", + "version": "02.01.04.00", "force_update": "0", "description": "My configurations", "machine_model_list": [ @@ -15,6 +15,10 @@ { "name": "Generic RRF Printer", "sub_path": "machine/MyRRF.json" + }, + { + "name": "Generic ToolChanger Printer", + "sub_path": "machine/MyToolChanger.json" } ], "process_list": [ @@ -34,6 +38,10 @@ "name": "fdm_process_marlin_common", "sub_path": "process/fdm_process_marlin_common.json" }, + { + "name": "fdm_process_mytoolchanger_common", + "sub_path": "process/fdm_process_mytoolchanger_common.json" + }, { "name": "0.08mm Extra Fine @MyKlipper", "sub_path": "process/0.08mm Extra Fine @MyKlipper.json" @@ -121,6 +129,46 @@ { "name": "0.28mm Extra Draft @MyMarlin", "sub_path": "process/0.28mm Extra Draft @MyMarlin.json" + }, + { + "name": "0.08mm Extra Fine @MyToolChanger", + "sub_path": "process/0.08mm Extra Fine @MyToolChanger.json" + }, + { + "name": "0.12mm Fine @MyToolChanger", + "sub_path": "process/0.12mm Fine @MyToolChanger.json" + }, + { + "name": "0.15mm Optimal @MyToolChanger", + "sub_path": "process/0.15mm Optimal @MyToolChanger.json" + }, + { + "name": "0.16mm Optimal @MyToolChanger", + "sub_path": "process/0.16mm Optimal @MyToolChanger.json" + }, + { + "name": "0.20mm Standard @MyToolChanger", + "sub_path": "process/0.20mm Standard @MyToolChanger.json" + }, + { + "name": "0.24mm Draft @MyToolChanger", + "sub_path": "process/0.24mm Draft @MyToolChanger.json" + }, + { + "name": "0.28mm Extra Draft @MyToolChanger", + "sub_path": "process/0.28mm Extra Draft @MyToolChanger.json" + }, + { + "name": "0.32mm Extra Draft @MyToolChanger", + "sub_path": "process/0.32mm Extra Draft @MyToolChanger.json" + }, + { + "name": "0.40mm Extra Draft @MyToolChanger", + "sub_path": "process/0.40mm Extra Draft @MyToolChanger.json" + }, + { + "name": "0.56mm Extra Draft @MyToolChanger", + "sub_path": "process/0.56mm Extra Draft @MyToolChanger.json" } ], "filament_list": [ @@ -199,6 +247,46 @@ { "name": "My Generic PA-CF", "sub_path": "filament/My Generic PA-CF.json" + }, + { + "name": "My Generic PLA @MyToolChanger", + "sub_path": "filament/My Generic PLA @MyToolChanger.json" + }, + { + "name": "My Generic PLA-CF @MyToolChanger", + "sub_path": "filament/My Generic PLA-CF @MyToolChanger.json" + }, + { + "name": "My Generic PETG @MyToolChanger", + "sub_path": "filament/My Generic PETG @MyToolChanger.json" + }, + { + "name": "My Generic ABS @MyToolChanger", + "sub_path": "filament/My Generic ABS @MyToolChanger.json" + }, + { + "name": "My Generic TPU @MyToolChanger", + "sub_path": "filament/My Generic TPU @MyToolChanger.json" + }, + { + "name": "My Generic ASA @MyToolChanger", + "sub_path": "filament/My Generic ASA @MyToolChanger.json" + }, + { + "name": "My Generic PC @MyToolChanger", + "sub_path": "filament/My Generic PC @MyToolChanger.json" + }, + { + "name": "My Generic PVA @MyToolChanger", + "sub_path": "filament/My Generic PVA @MyToolChanger.json" + }, + { + "name": "My Generic PA @MyToolChanger", + "sub_path": "filament/My Generic PA @MyToolChanger.json" + }, + { + "name": "My Generic PA-CF @MyToolChanger", + "sub_path": "filament/My Generic PA-CF @MyToolChanger.json" } ], "machine_list": [ @@ -214,6 +302,10 @@ "name": "fdm_rrf_common", "sub_path": "machine/fdm_rrf_common.json" }, + { + "name": "fdm_toolchanger_common", + "sub_path": "machine/fdm_toolchanger_common.json" + }, { "name": "MyKlipper 0.4 nozzle", "sub_path": "machine/MyKlipper 0.4 nozzle.json" @@ -237,6 +329,22 @@ { "name": "MyRRF 0.4 nozzle", "sub_path": "machine/MyRRF 0.4 nozzle.json" + }, + { + "name": "MyToolChanger 0.4 nozzle", + "sub_path": "machine/MyToolChanger 0.4 nozzle.json" + }, + { + "name": "MyToolChanger 0.2 nozzle", + "sub_path": "machine/MyToolChanger 0.2 nozzle.json" + }, + { + "name": "MyToolChanger 0.6 nozzle", + "sub_path": "machine/MyToolChanger 0.6 nozzle.json" + }, + { + "name": "MyToolChanger 0.8 nozzle", + "sub_path": "machine/MyToolChanger 0.8 nozzle.json" } ] -} +} \ No newline at end of file diff --git a/resources/profiles/Custom/Custom_350_bed.stl b/resources/profiles/Custom/Custom_350_bed.stl new file mode 100644 index 00000000000..d2a9a497925 Binary files /dev/null and b/resources/profiles/Custom/Custom_350_bed.stl differ diff --git a/resources/profiles/Custom/Generic ToolChanger Printer_cover.png b/resources/profiles/Custom/Generic ToolChanger Printer_cover.png new file mode 100644 index 00000000000..cf85288d7ae Binary files /dev/null and b/resources/profiles/Custom/Generic ToolChanger Printer_cover.png differ diff --git a/resources/profiles/Custom/filament/My Generic ABS @MyToolChanger.json b/resources/profiles/Custom/filament/My Generic ABS @MyToolChanger.json new file mode 100644 index 00000000000..fb8f51bf95b --- /dev/null +++ b/resources/profiles/Custom/filament/My Generic ABS @MyToolChanger.json @@ -0,0 +1,57 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFB99_MTC_0", + "name": "My Generic ABS @MyToolChanger", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "filament_flow_ratio": [ + "0.926" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_cooling_final_speed": [ + "3.5" + ], + "filament_cooling_initial_speed": [ + "10" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_load_time": [ + "10.5" + ], + "filament_loading_speed": [ + "10" + ], + "filament_loading_speed_start": [ + "50" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_unload_time": [ + "8.5" + ], + "filament_unloading_speed": [ + "100" + ], + "compatible_printers": [ + "MyToolChanger 0.4 nozzle", + "MyToolChanger 0.2 nozzle", + "MyToolChanger 0.6 nozzle", + "MyToolChanger 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic ASA @MyToolChanger.json b/resources/profiles/Custom/filament/My Generic ASA @MyToolChanger.json new file mode 100644 index 00000000000..05bab114b43 --- /dev/null +++ b/resources/profiles/Custom/filament/My Generic ASA @MyToolChanger.json @@ -0,0 +1,57 @@ +{ + "type": "filament", + "filament_id": "GFB98", + "setting_id": "GFB98_MTC_0", + "name": "My Generic ASA @MyToolChanger", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_asa", + "filament_flow_ratio": [ + "0.93" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_cooling_final_speed": [ + "3.5" + ], + "filament_cooling_initial_speed": [ + "10" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_load_time": [ + "10.5" + ], + "filament_loading_speed": [ + "10" + ], + "filament_loading_speed_start": [ + "50" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_unload_time": [ + "8.5" + ], + "filament_unloading_speed": [ + "100" + ], + "compatible_printers": [ + "MyToolChanger 0.4 nozzle", + "MyToolChanger 0.2 nozzle", + "MyToolChanger 0.6 nozzle", + "MyToolChanger 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic PA @MyToolChanger.json b/resources/profiles/Custom/filament/My Generic PA @MyToolChanger.json new file mode 100644 index 00000000000..17a9b793cca --- /dev/null +++ b/resources/profiles/Custom/filament/My Generic PA @MyToolChanger.json @@ -0,0 +1,60 @@ +{ + "type": "filament", + "filament_id": "GFN99", + "setting_id": "GFN99_MTC_0", + "name": "My Generic PA @MyToolChanger", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa", + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_cooling_final_speed": [ + "3.5" + ], + "filament_cooling_initial_speed": [ + "10" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_load_time": [ + "10.5" + ], + "filament_loading_speed": [ + "10" + ], + "filament_loading_speed_start": [ + "50" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_unload_time": [ + "8.5" + ], + "filament_unloading_speed": [ + "100" + ], + "compatible_printers": [ + "MyToolChanger 0.4 nozzle", + "MyToolChanger 0.2 nozzle", + "MyToolChanger 0.6 nozzle", + "MyToolChanger 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic PA-CF @MyToolChanger.json b/resources/profiles/Custom/filament/My Generic PA-CF @MyToolChanger.json new file mode 100644 index 00000000000..0b0f065eed2 --- /dev/null +++ b/resources/profiles/Custom/filament/My Generic PA-CF @MyToolChanger.json @@ -0,0 +1,63 @@ +{ + "type": "filament", + "filament_id": "GFN98", + "setting_id": "GFN98_MTC_0", + "name": "My Generic PA-CF @MyToolChanger", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa", + "filament_type": [ + "PA-CF" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_cooling_final_speed": [ + "3.5" + ], + "filament_cooling_initial_speed": [ + "10" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_load_time": [ + "10.5" + ], + "filament_loading_speed": [ + "10" + ], + "filament_loading_speed_start": [ + "50" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_unload_time": [ + "8.5" + ], + "filament_unloading_speed": [ + "100" + ], + "compatible_printers": [ + "MyToolChanger 0.4 nozzle", + "MyToolChanger 0.2 nozzle", + "MyToolChanger 0.6 nozzle", + "MyToolChanger 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic PC @MyToolChanger.json b/resources/profiles/Custom/filament/My Generic PC @MyToolChanger.json new file mode 100644 index 00000000000..7ae24c6774d --- /dev/null +++ b/resources/profiles/Custom/filament/My Generic PC @MyToolChanger.json @@ -0,0 +1,57 @@ +{ + "type": "filament", + "filament_id": "GFC99", + "setting_id": "GFC99_MTC_0", + "name": "My Generic PC @MyToolChanger", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pc", + "filament_max_volumetric_speed": [ + "12" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_cooling_final_speed": [ + "3.5" + ], + "filament_cooling_initial_speed": [ + "10" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_load_time": [ + "10.5" + ], + "filament_loading_speed": [ + "10" + ], + "filament_loading_speed_start": [ + "50" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_unload_time": [ + "8.5" + ], + "filament_unloading_speed": [ + "100" + ], + "compatible_printers": [ + "MyToolChanger 0.4 nozzle", + "MyToolChanger 0.2 nozzle", + "MyToolChanger 0.6 nozzle", + "MyToolChanger 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic PETG @MyToolChanger.json b/resources/profiles/Custom/filament/My Generic PETG @MyToolChanger.json new file mode 100644 index 00000000000..f9cb2e0b162 --- /dev/null +++ b/resources/profiles/Custom/filament/My Generic PETG @MyToolChanger.json @@ -0,0 +1,87 @@ +{ + "type": "filament", + "filament_id": "GFG99", + "setting_id": "GFG99_MTC_0", + "name": "My Generic PETG @MyToolChanger", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pet", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_cooling_final_speed": [ + "3.5" + ], + "filament_cooling_initial_speed": [ + "10" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_load_time": [ + "10.5" + ], + "filament_loading_speed": [ + "10" + ], + "filament_loading_speed_start": [ + "50" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_unload_time": [ + "8.5" + ], + "filament_unloading_speed": [ + "100" + ], + "compatible_printers": [ + "MyToolChanger 0.4 nozzle", + "MyToolChanger 0.2 nozzle", + "MyToolChanger 0.6 nozzle", + "MyToolChanger 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic PLA @MyToolChanger.json b/resources/profiles/Custom/filament/My Generic PLA @MyToolChanger.json new file mode 100644 index 00000000000..facaf08984b --- /dev/null +++ b/resources/profiles/Custom/filament/My Generic PLA @MyToolChanger.json @@ -0,0 +1,60 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFL99_MTC_0", + "name": "My Generic PLA @MyToolChanger", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_cooling_final_speed": [ + "3.5" + ], + "filament_cooling_initial_speed": [ + "10" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_load_time": [ + "10.5" + ], + "filament_loading_speed": [ + "10" + ], + "filament_loading_speed_start": [ + "50" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_unload_time": [ + "8.5" + ], + "filament_unloading_speed": [ + "100" + ], + "compatible_printers": [ + "MyToolChanger 0.4 nozzle", + "MyToolChanger 0.2 nozzle", + "MyToolChanger 0.6 nozzle", + "MyToolChanger 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic PLA-CF @MyToolChanger.json b/resources/profiles/Custom/filament/My Generic PLA-CF @MyToolChanger.json new file mode 100644 index 00000000000..8adf8d53d27 --- /dev/null +++ b/resources/profiles/Custom/filament/My Generic PLA-CF @MyToolChanger.json @@ -0,0 +1,63 @@ +{ + "type": "filament", + "filament_id": "GFL98", + "setting_id": "GFL98_MTC_0", + "name": "My Generic PLA-CF @MyToolChanger", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "0.95" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "7" + ], + "filament_cooling_final_speed": [ + "3.5" + ], + "filament_cooling_initial_speed": [ + "10" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_load_time": [ + "10.5" + ], + "filament_loading_speed": [ + "10" + ], + "filament_loading_speed_start": [ + "50" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_unload_time": [ + "8.5" + ], + "filament_unloading_speed": [ + "100" + ], + "compatible_printers": [ + "MyToolChanger 0.4 nozzle", + "MyToolChanger 0.2 nozzle", + "MyToolChanger 0.6 nozzle", + "MyToolChanger 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic PVA @MyToolChanger.json b/resources/profiles/Custom/filament/My Generic PVA @MyToolChanger.json new file mode 100644 index 00000000000..a2dd357753e --- /dev/null +++ b/resources/profiles/Custom/filament/My Generic PVA @MyToolChanger.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "filament_id": "GFS99", + "setting_id": "GFS99_MTC_0", + "name": "My Generic PVA @MyToolChanger", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pva", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "compatible_printers": [ + "MyToolChanger 0.4 nozzle", + "MyToolChanger 0.2 nozzle", + "MyToolChanger 0.6 nozzle", + "MyToolChanger 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic TPU @MyToolChanger.json b/resources/profiles/Custom/filament/My Generic TPU @MyToolChanger.json new file mode 100644 index 00000000000..54c4a15a19f --- /dev/null +++ b/resources/profiles/Custom/filament/My Generic TPU @MyToolChanger.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "filament_id": "GFU99", + "setting_id": "GFU99_MTC_0", + "name": "My Generic TPU @MyToolChanger", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_tpu", + "filament_max_volumetric_speed": [ + "3.2" + ], + "compatible_printers": [ + "MyToolChanger 0.4 nozzle", + "MyToolChanger 0.2 nozzle", + "MyToolChanger 0.6 nozzle", + "MyToolChanger 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/machine/MyToolChanger 0.2 nozzle.json b/resources/profiles/Custom/machine/MyToolChanger 0.2 nozzle.json new file mode 100644 index 00000000000..f23384aee7f --- /dev/null +++ b/resources/profiles/Custom/machine/MyToolChanger 0.2 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "setting_id": "GM_CUSTOM_001", + "name": "MyToolChanger 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_toolchanger_common", + "printer_model": "Generic ToolChanger Printer", + "nozzle_diameter": [ + "0.2", + "0.2", + "0.2", + "0.2", + "0.2" + ], + "max_layer_height": [ + "0.16" + ], + "min_layer_height": [ + "0.04" + ], + "printer_variant": "0.2", + "printable_area": [ + "0x0", + "350x0", + "350x350", + "0x350" + ], + "printable_height": "300" +} \ No newline at end of file diff --git a/resources/profiles/Custom/machine/MyToolChanger 0.4 nozzle.json b/resources/profiles/Custom/machine/MyToolChanger 0.4 nozzle.json new file mode 100644 index 00000000000..cf43dd0a418 --- /dev/null +++ b/resources/profiles/Custom/machine/MyToolChanger 0.4 nozzle.json @@ -0,0 +1,24 @@ +{ + "type": "machine", + "setting_id": "GM_CUSTOM_002", + "name": "MyToolChanger 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_toolchanger_common", + "printer_model": "Generic ToolChanger Printer", + "nozzle_diameter": [ + "0.4", + "0.4", + "0.4", + "0.4", + "0.4" + ], + "printer_variant": "0.4", + "printable_area": [ + "0x0", + "350x0", + "350x350", + "0x350" + ], + "printable_height": "300" +} \ No newline at end of file diff --git a/resources/profiles/Custom/machine/MyToolChanger 0.6 nozzle.json b/resources/profiles/Custom/machine/MyToolChanger 0.6 nozzle.json new file mode 100644 index 00000000000..b8d387573fa --- /dev/null +++ b/resources/profiles/Custom/machine/MyToolChanger 0.6 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "setting_id": "GM_CUSTOM_003", + "name": "MyToolChanger 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_toolchanger_common", + "printer_model": "Generic ToolChanger Printer", + "nozzle_diameter": [ + "0.6", + "0.6", + "0.6", + "0.6", + "0.6" + ], + "max_layer_height": [ + "0.4" + ], + "min_layer_height": [ + "0.12" + ], + "printer_variant": "0.6", + "printable_area": [ + "0x0", + "350x0", + "350x350", + "0x350" + ], + "printable_height": "300" +} \ No newline at end of file diff --git a/resources/profiles/Custom/machine/MyToolChanger 0.8 nozzle.json b/resources/profiles/Custom/machine/MyToolChanger 0.8 nozzle.json new file mode 100644 index 00000000000..2ce7029dce4 --- /dev/null +++ b/resources/profiles/Custom/machine/MyToolChanger 0.8 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "setting_id": "GM_CUSTOM_004", + "name": "MyToolChanger 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_toolchanger_common", + "printer_model": "Generic ToolChanger Printer", + "nozzle_diameter": [ + "0.8", + "0.8", + "0.8", + "0.8", + "0.8" + ], + "max_layer_height": [ + "0.6" + ], + "min_layer_height": [ + "0.2" + ], + "printer_variant": "0.8", + "printable_area": [ + "0x0", + "350x0", + "350x350", + "0x350" + ], + "printable_height": "300" +} \ No newline at end of file diff --git a/resources/profiles/Custom/machine/MyToolChanger.json b/resources/profiles/Custom/machine/MyToolChanger.json new file mode 100644 index 00000000000..9c927e4be20 --- /dev/null +++ b/resources/profiles/Custom/machine/MyToolChanger.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Generic ToolChanger Printer", + "model_id": "my_toolchanger_01", + "nozzle_diameter": "0.4;0.2;0.6;0.8", + "machine_tech": "FFF", + "family": "MyPrinter", + "bed_model": "Custom_350_bed.stl", + "bed_texture": "orcaslicer_bed_texture.svg", + "hotend_model": "", + "default_materials": "My Generic PLA @MyToolChanger;My Generic ABS @MyToolChanger;My Generic PLA-CF @MyToolChanger;My Generic PETG @MyToolChanger;My Generic TPU @MyToolChanger;My Generic ASA @MyToolChanger;My Generic PC @MyToolChanger;My Generic PVA @MyToolChanger;My Generic PA @MyToolChanger;My Generic PA-CF @MyToolChanger" +} diff --git a/resources/profiles/Custom/machine/fdm_toolchanger_common.json b/resources/profiles/Custom/machine/fdm_toolchanger_common.json new file mode 100644 index 00000000000..0d1fe9c1659 --- /dev/null +++ b/resources/profiles/Custom/machine/fdm_toolchanger_common.json @@ -0,0 +1,189 @@ +{ + "type": "machine", + "name": "fdm_toolchanger_common", + "from": "system", + "instantiation": "false", + "inherits": "fdm_klipper_common", + "gcode_flavor": "klipper", + "single_extruder_multi_material": "0", + "default_filament_profile": [ + "My Generic PLA @MyToolChanger" + ], + "default_print_profile": "0.20mm Standard @MyToolChanger", + "max_layer_height": [ + "0.32", + "0.32", + "0.32", + "0.32", + "0.32" + ], + "min_layer_height": [ + "0.08", + "0.08", + "0.08", + "0.08", + "0.08" + ], + "deretraction_speed": [ + "30", + "30", + "30", + "30", + "30" + ], + "extruder_colour": [ + "#FCE94F", + "#FCE94F", + "#FCE94F", + "#FCE94F", + "#FCE94F" + ], + "extruder_offset": [ + "0x0", + "0x0", + "0x0", + "0x0", + "0x0" + ], + "long_retractions_when_cut": [ + "0", + "0", + "0", + "0", + "0" + ], + "nozzle_diameter": [ + "0.4", + "0.4", + "0.4", + "0.4", + "0.4" + ], + "retract_before_wipe": [ + "70%", + "70%", + "70%", + "70%", + "70%" + ], + "retract_length_toolchange": [ + "2", + "2", + "2", + "2", + "2" + ], + "retract_lift_above": [ + "0", + "0", + "0", + "0", + "0" + ], + "retract_lift_below": [ + "0", + "0", + "0", + "0", + "0" + ], + "retract_lift_enforce": [ + "All Surfaces", + "All Surfaces", + "All Surfaces", + "All Surfaces", + "All Surfaces" + ], + "retract_restart_extra": [ + "0", + "0", + "0", + "0", + "0" + ], + "retract_restart_extra_toolchange": [ + "0", + "0", + "0", + "0", + "0" + ], + "retract_when_changing_layer": [ + "1", + "1", + "1", + "1", + "1" + ], + "retraction_distances_when_cut": [ + "18", + "18", + "18", + "18", + "18" + ], + "retraction_length": [ + "0.8", + "0.8", + "0.8", + "0.8", + "0.8" + ], + "retraction_minimum_travel": [ + "1", + "1", + "1", + "1", + "1" + ], + "retraction_speed": [ + "30", + "30", + "30", + "30", + "30" + ], + "travel_slope": [ + "3", + "3", + "3", + "3", + "3" + ], + "version": "2.1.1.1", + "wipe": [ + "1", + "1", + "1", + "1", + "1" + ], + "wipe_distance": [ + "1", + "1", + "1", + "1", + "1" + ], + "z_hop": [ + "0.4", + "0.4", + "0.4", + "0.4", + "0.4" + ], + "z_hop_types": [ + "Normal Lift", + "Normal Lift", + "Normal Lift", + "Normal Lift", + "Normal Lift" + ], + "purge_in_prime_tower": "0", + "machine_pause_gcode": "M601", + "machine_start_gcode": "PRINT_START TOOL_TEMP={first_layer_temperature[initial_tool]} {if is_extruder_used[0]}T0_TEMP={first_layer_temperature[0]}{endif} {if is_extruder_used[1]}T1_TEMP={first_layer_temperature[1]}{endif} {if is_extruder_used[2]}T2_TEMP={first_layer_temperature[2]}{endif} {if is_extruder_used[3]}T3_TEMP={first_layer_temperature[3]}{endif} {if is_extruder_used[4]}T4_TEMP={first_layer_temperature[4]}{endif} {if is_extruder_used[5]}T5_TEMP={first_layer_temperature[5]}{endif} BED_TEMP=[first_layer_bed_temperature] TOOL=[initial_tool]\n\n", + "change_filament_gcode": "", + "scan_first_layer": "0", + "nozzle_type": "undefine", + "auxiliary_fan": "0" +} \ No newline at end of file diff --git a/resources/profiles/Custom/process/0.08mm Extra Fine @MyToolChanger.json b/resources/profiles/Custom/process/0.08mm Extra Fine @MyToolChanger.json new file mode 100644 index 00000000000..4ce17369160 --- /dev/null +++ b/resources/profiles/Custom/process/0.08mm Extra Fine @MyToolChanger.json @@ -0,0 +1,19 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.08mm Extra Fine @MyToolChanger", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_mytoolchanger_common", + "layer_height": "0.08", + "bottom_shell_layers": "7", + "top_shell_layers": "9", + "support_top_z_distance": "0.08", + "support_bottom_z_distance": "0.08", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "MyToolChanger 0.4 nozzle", + "MyToolChanger 0.2 nozzle", + "MyToolChanger 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/process/0.12mm Fine @MyToolChanger.json b/resources/profiles/Custom/process/0.12mm Fine @MyToolChanger.json new file mode 100644 index 00000000000..1117ba588f3 --- /dev/null +++ b/resources/profiles/Custom/process/0.12mm Fine @MyToolChanger.json @@ -0,0 +1,19 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Fine @MyToolChanger", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_mytoolchanger_common", + "layer_height": "0.12", + "bottom_shell_layers": "5", + "top_shell_layers": "6", + "support_top_z_distance": "0.08", + "support_bottom_z_distance": "0.08", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "MyToolChanger 0.4 nozzle", + "MyToolChanger 0.2 nozzle", + "MyToolChanger 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/process/0.15mm Optimal @MyToolChanger.json b/resources/profiles/Custom/process/0.15mm Optimal @MyToolChanger.json new file mode 100644 index 00000000000..13254161c8b --- /dev/null +++ b/resources/profiles/Custom/process/0.15mm Optimal @MyToolChanger.json @@ -0,0 +1,20 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.15mm Optimal @MyToolChanger", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_mytoolchanger_common", + "bottom_shell_layers": "4", + "top_shell_layers": "5", + "layer_height": "0.15", + "support_top_z_distance": "0.15", + "support_bottom_z_distance": "0.15", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "MyToolChanger 0.4 nozzle", + "MyToolChanger 0.2 nozzle", + "MyToolChanger 0.6 nozzle", + "MyToolChanger 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/process/0.16mm Optimal @MyToolChanger.json b/resources/profiles/Custom/process/0.16mm Optimal @MyToolChanger.json new file mode 100644 index 00000000000..f3fa8058a5e --- /dev/null +++ b/resources/profiles/Custom/process/0.16mm Optimal @MyToolChanger.json @@ -0,0 +1,20 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Optimal @MyToolChanger", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_mytoolchanger_common", + "bottom_shell_layers": "4", + "top_shell_layers": "5", + "support_top_z_distance": "0.16", + "support_bottom_z_distance": "0.16", + "layer_height": "0.16", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "MyToolChanger 0.4 nozzle", + "MyToolChanger 0.2 nozzle", + "MyToolChanger 0.6 nozzle", + "MyToolChanger 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/process/0.20mm Standard @MyToolChanger.json b/resources/profiles/Custom/process/0.20mm Standard @MyToolChanger.json new file mode 100644 index 00000000000..812886e4867 --- /dev/null +++ b/resources/profiles/Custom/process/0.20mm Standard @MyToolChanger.json @@ -0,0 +1,14 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @MyToolChanger", + "from": "system", + "inherits": "fdm_process_mytoolchanger_common", + "instantiation": "true", + "layer_height": "0.2", + "compatible_printers": [ + "MyToolChanger 0.4 nozzle", + "MyToolChanger 0.6 nozzle", + "MyToolChanger 0.8 nozzle" + ] +} diff --git a/resources/profiles/Custom/process/0.24mm Draft @MyToolChanger.json b/resources/profiles/Custom/process/0.24mm Draft @MyToolChanger.json new file mode 100644 index 00000000000..af372cc109b --- /dev/null +++ b/resources/profiles/Custom/process/0.24mm Draft @MyToolChanger.json @@ -0,0 +1,17 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Draft @MyToolChanger", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_mytoolchanger_common", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "layer_height": "0.24", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "MyToolChanger 0.4 nozzle", + "MyToolChanger 0.6 nozzle", + "MyToolChanger 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/process/0.28mm Extra Draft @MyToolChanger.json b/resources/profiles/Custom/process/0.28mm Extra Draft @MyToolChanger.json new file mode 100644 index 00000000000..71f435467bf --- /dev/null +++ b/resources/profiles/Custom/process/0.28mm Extra Draft @MyToolChanger.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.28mm Extra Draft @MyToolChanger", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_mytoolchanger_common", + "layer_height": "0.28", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "MyToolChanger 0.4 nozzle", + "MyToolChanger 0.6 nozzle", + "MyToolChanger 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/process/0.32mm Extra Draft @MyToolChanger.json b/resources/profiles/Custom/process/0.32mm Extra Draft @MyToolChanger.json new file mode 100644 index 00000000000..d5282eecef5 --- /dev/null +++ b/resources/profiles/Custom/process/0.32mm Extra Draft @MyToolChanger.json @@ -0,0 +1,17 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.32mm Standard @MyToolChanger", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_mytoolchanger_common", + "support_top_z_distance": "0.24", + "support_bottom_z_distance": "0.24", + "layer_height": "0.32", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "MyToolChanger 0.4 nozzle", + "MyToolChanger 0.6 nozzle", + "MyToolChanger 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/process/0.40mm Extra Draft @MyToolChanger.json b/resources/profiles/Custom/process/0.40mm Extra Draft @MyToolChanger.json new file mode 100644 index 00000000000..940d51d8bff --- /dev/null +++ b/resources/profiles/Custom/process/0.40mm Extra Draft @MyToolChanger.json @@ -0,0 +1,16 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.40mm Standard @MyToolChanger", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_mytoolchanger_common", + "support_top_z_distance": "0.24", + "support_bottom_z_distance": "0.24", + "layer_height": "0.40", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "MyToolChanger 0.6 nozzle", + "MyToolChanger 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/process/0.56mm Extra Draft @MyToolChanger.json b/resources/profiles/Custom/process/0.56mm Extra Draft @MyToolChanger.json new file mode 100644 index 00000000000..ea4ba5c07d1 --- /dev/null +++ b/resources/profiles/Custom/process/0.56mm Extra Draft @MyToolChanger.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.56mm Standard @MyToolChanger", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_mytoolchanger_common", + "support_top_z_distance": "0.24", + "support_bottom_z_distance": "0.24", + "layer_height": "0.56", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "MyToolChanger 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom/process/fdm_process_mytoolchanger_common.json b/resources/profiles/Custom/process/fdm_process_mytoolchanger_common.json new file mode 100644 index 00000000000..88a499c8d69 --- /dev/null +++ b/resources/profiles/Custom/process/fdm_process_mytoolchanger_common.json @@ -0,0 +1,31 @@ +{ + "type": "process", + "name": "fdm_process_mytoolchanger_common", + "from": "system", + "instantiation": "false", + "inherits": "fdm_process_klipper_common", + "default_acceleration": "5000", + "top_surface_acceleration": "3000", + "travel_acceleration": "7000", + "inner_wall_acceleration": "5000", + "outer_wall_acceleration": "3000", + "initial_layer_acceleration": "500", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "105", + "outer_wall_speed": "120", + "inner_wall_speed": "200", + "internal_solid_infill_speed": "200", + "top_surface_speed": "100", + "gap_infill_speed": "100", + "sparse_infill_speed": "200", + "travel_speed": "350", + "exclude_object": "1", + "enable_prime_tower": "1", + "wipe_tower_cone_angle": "25", + "wipe_tower_extra_spacing": "150%", + "wipe_tower_rotation_angle": "90", + "ooze_prevention": "1", + "standby_temperature_delta": "-40", + "preheat_time": "30", + "preheat_steps": "1" +} \ No newline at end of file diff --git a/resources/profiles/FLSun.json b/resources/profiles/FLSun.json index 3eece7ab8b0..7b658ca355d 100644 --- a/resources/profiles/FLSun.json +++ b/resources/profiles/FLSun.json @@ -1,194 +1,226 @@ -{ - "name": "FLSun", - "version": "02.01.01.00", - "force_update": "0", - "description": "FLSun configurations", - "machine_model_list": [ - { - "name": "FLSun Q5", - "sub_path": "machine/FLSun Q5.json" - }, - { - "name": "FLSun QQ-S Pro", - "sub_path": "machine/FLSun QQ-S Pro.json" - }, - { - "name": "FLSun Super Racer (SR)", - "sub_path": "machine/FLSun SR.json" - }, - { - "name": "FLSun V400", - "sub_path": "machine/FLSun V400.json" - } - ], - "process_list": [ - { - "name": "fdm_process_common", - "sub_path": "process/fdm_process_common.json" - }, - { - "name": "0.08mm Fine @FLSun Q5", - "sub_path": "process/0.08mm Fine @FLSun Q5.json" - }, - { - "name": "0.08mm Fine @FLSun QQSPro", - "sub_path": "process/0.08mm Fine @FLSun QQSPro.json" - }, - { - "name": "0.08mm Fine @FLSun SR", - "sub_path": "process/0.08mm Fine @FLSun SR.json" - }, - { - "name": "0.16mm Optimal @FLSun Q5", - "sub_path": "process/0.16mm Optimal @FLSun Q5.json" - }, - { - "name": "0.16mm Optimal @FLSun QQSPro", - "sub_path": "process/0.16mm Optimal @FLSun QQSPro.json" - }, - { - "name": "0.16mm Optimal @FLSun SR", - "sub_path": "process/0.16mm Optimal @FLSun SR.json" - }, - { - "name": "0.20mm Standard @FLSun Q5", - "sub_path": "process/0.20mm Standard @FLSun Q5.json" - }, - { - "name": "0.20mm Standard @FLSun QQSPro", - "sub_path": "process/0.20mm Standard @FLSun QQSPro.json" - }, - { - "name": "0.20mm Standard @FLSun SR", - "sub_path": "process/0.20mm Standard @FLSun SR.json" - }, - { - "name": "0.20mm Standard @FLSun V400", - "sub_path": "process/0.20mm Standard @FLSun V400.json" - }, - { - "name": "0.24mm Draft @FLSun Q5", - "sub_path": "process/0.24mm Draft @FLSun Q5.json" - }, - { - "name": "0.24mm Draft @FLSun QQSPro", - "sub_path": "process/0.24mm Draft @FLSun QQSPro.json" - }, - { - "name": "0.24mm Draft @FLSun SR", - "sub_path": "process/0.24mm Draft @FLSun SR.json" - }, - { - "name": "0.30mm Extra Draft @FLSun Q5", - "sub_path": "process/0.30mm Extra Draft @FLSun Q5.json" - }, - { - "name": "0.30mm Extra Draft @FLSun QQSPro", - "sub_path": "process/0.30mm Extra Draft @FLSun QQSPro.json" - }, - { - "name": "0.30mm Extra Draft @FLSun SR", - "sub_path": "process/0.30mm Extra Draft @FLSun SR.json" - } - ], - "filament_list": [ - { - "name": "fdm_filament_common", - "sub_path": "filament/fdm_filament_common.json" - }, - { - "name": "fdm_filament_pla", - "sub_path": "filament/fdm_filament_pla.json" - }, - { - "name": "fdm_filament_tpu", - "sub_path": "filament/fdm_filament_tpu.json" - }, - { - "name": "fdm_filament_pet", - "sub_path": "filament/fdm_filament_pet.json" - }, - { - "name": "fdm_filament_abs", - "sub_path": "filament/fdm_filament_abs.json" - }, - { - "name": "fdm_filament_pc", - "sub_path": "filament/fdm_filament_pc.json" - }, - { - "name": "fdm_filament_asa", - "sub_path": "filament/fdm_filament_asa.json" - }, - { - "name": "fdm_filament_pva", - "sub_path": "filament/fdm_filament_pva.json" - }, - { - "name": "fdm_filament_pa", - "sub_path": "filament/fdm_filament_pa.json" - }, - { - "name": "FLSun Generic PLA", - "sub_path": "filament/FLSun Generic PLA.json" - }, - { - "name": "FLSun Generic PLA-CF", - "sub_path": "filament/FLSun Generic PLA-CF.json" - }, - { - "name": "FLSun Generic PETG", - "sub_path": "filament/FLSun Generic PETG.json" - }, - { - "name": "FLSun Generic ABS", - "sub_path": "filament/FLSun Generic ABS.json" - }, - { - "name": "FLSun Generic TPU", - "sub_path": "filament/FLSun Generic TPU.json" - }, - { - "name": "FLSun Generic ASA", - "sub_path": "filament/FLSun Generic ASA.json" - }, - { - "name": "FLSun Generic PC", - "sub_path": "filament/FLSun Generic PC.json" - }, - { - "name": "FLSun Generic PVA", - "sub_path": "filament/FLSun Generic PVA.json" - }, - { - "name": "FLSun Generic PA", - "sub_path": "filament/FLSun Generic PA.json" - }, - { - "name": "FLSun Generic PA-CF", - "sub_path": "filament/FLSun Generic PA-CF.json" - } - ], - "machine_list": [ - { - "name": "fdm_machine_common", - "sub_path": "machine/fdm_machine_common.json" - }, - { - "name": "FLSun Q5 0.4 nozzle", - "sub_path": "machine/FLSun Q5 0.4 nozzle.json" - }, - { - "name": "FLSun QQ-S Pro 0.4 nozzle", - "sub_path": "machine/FLSun QQ-S Pro 0.4 nozzle.json" - }, - { - "name": "FLSun Super Racer 0.4 nozzle", - "sub_path": "machine/FLSun SR 0.4 nozzle.json" - }, - { - "name": "FLSun V400 0.4 nozzle", - "sub_path": "machine/FLSun V400 0.4 nozzle.json" - } - ] +{ + "name": "FLSun", + "version": "02.01.01.00", + "force_update": "0", + "description": "FLSun configurations", + "machine_model_list": [ + { + "name": "FLSun Q5", + "sub_path": "machine/FLSun Q5.json" + }, + { + "name": "FLSun QQ-S Pro", + "sub_path": "machine/FLSun QQ-S Pro.json" + }, + { + "name": "FLSun Super Racer (SR)", + "sub_path": "machine/FLSun SR.json" + }, + { + "name": "FLSun V400", + "sub_path": "machine/FLSun V400.json" + }, + { + "name": "FLSun S1", + "sub_path": "machine/FLSun S1.json" + }, + { + "name": "FLSun T1", + "sub_path": "machine/FLSun T1.json" + } + ], + "process_list": [ + { + "name": "fdm_process_common", + "sub_path": "process/fdm_process_common.json" + }, + { + "name": "0.08mm Fine @FLSun Q5", + "sub_path": "process/0.08mm Fine @FLSun Q5.json" + }, + { + "name": "0.08mm Fine @FLSun QQSPro", + "sub_path": "process/0.08mm Fine @FLSun QQSPro.json" + }, + { + "name": "0.08mm Fine @FLSun SR", + "sub_path": "process/0.08mm Fine @FLSun SR.json" + }, + { + "name": "0.16mm Optimal @FLSun Q5", + "sub_path": "process/0.16mm Optimal @FLSun Q5.json" + }, + { + "name": "0.16mm Optimal @FLSun QQSPro", + "sub_path": "process/0.16mm Optimal @FLSun QQSPro.json" + }, + { + "name": "0.16mm Optimal @FLSun SR", + "sub_path": "process/0.16mm Optimal @FLSun SR.json" + }, + { + "name": "0.20mm Standard @FLSun Q5", + "sub_path": "process/0.20mm Standard @FLSun Q5.json" + }, + { + "name": "0.20mm Standard @FLSun QQSPro", + "sub_path": "process/0.20mm Standard @FLSun QQSPro.json" + }, + { + "name": "0.20mm Standard @FLSun SR", + "sub_path": "process/0.20mm Standard @FLSun SR.json" + }, + { + "name": "0.20mm Standard @FLSun V400", + "sub_path": "process/0.20mm Standard @FLSun V400.json" + }, + { + "name": "0.20mm Standard @FLSun S1", + "sub_path": "process/0.20mm Standard @FLSun S1.json" + }, + { + "name": "0.20mm Standard @FLSun T1", + "sub_path": "process/0.20mm Standard @FLSun T1.json" + }, + { + "name": "0.24mm Draft @FLSun Q5", + "sub_path": "process/0.24mm Draft @FLSun Q5.json" + }, + { + "name": "0.24mm Draft @FLSun QQSPro", + "sub_path": "process/0.24mm Draft @FLSun QQSPro.json" + }, + { + "name": "0.24mm Draft @FLSun SR", + "sub_path": "process/0.24mm Draft @FLSun SR.json" + }, + { + "name": "0.30mm Extra Draft @FLSun Q5", + "sub_path": "process/0.30mm Extra Draft @FLSun Q5.json" + }, + { + "name": "0.30mm Extra Draft @FLSun QQSPro", + "sub_path": "process/0.30mm Extra Draft @FLSun QQSPro.json" + }, + { + "name": "0.30mm Extra Draft @FLSun SR", + "sub_path": "process/0.30mm Extra Draft @FLSun SR.json" + } + ], + "filament_list": [ + { + "name": "fdm_filament_common", + "sub_path": "filament/fdm_filament_common.json" + }, + { + "name": "fdm_filament_pla", + "sub_path": "filament/fdm_filament_pla.json" + }, + { + "name": "fdm_filament_tpu", + "sub_path": "filament/fdm_filament_tpu.json" + }, + { + "name": "fdm_filament_pet", + "sub_path": "filament/fdm_filament_pet.json" + }, + { + "name": "fdm_filament_abs", + "sub_path": "filament/fdm_filament_abs.json" + }, + { + "name": "fdm_filament_pc", + "sub_path": "filament/fdm_filament_pc.json" + }, + { + "name": "fdm_filament_asa", + "sub_path": "filament/fdm_filament_asa.json" + }, + { + "name": "fdm_filament_pva", + "sub_path": "filament/fdm_filament_pva.json" + }, + { + "name": "fdm_filament_pa", + "sub_path": "filament/fdm_filament_pa.json" + }, + { + "name": "FLSun Generic PLA", + "sub_path": "filament/FLSun Generic PLA.json" + }, + { + "name": "FLSun Generic PLA-CF", + "sub_path": "filament/FLSun Generic PLA-CF.json" + }, + { + "name": "FLSun Generic PETG", + "sub_path": "filament/FLSun Generic PETG.json" + }, + { + "name": "FLSun Generic ABS", + "sub_path": "filament/FLSun Generic ABS.json" + }, + { + "name": "FLSun Generic TPU", + "sub_path": "filament/FLSun Generic TPU.json" + }, + { + "name": "FLSun Generic ASA", + "sub_path": "filament/FLSun Generic ASA.json" + }, + { + "name": "FLSun Generic PC", + "sub_path": "filament/FLSun Generic PC.json" + }, + { + "name": "FLSun Generic PVA", + "sub_path": "filament/FLSun Generic PVA.json" + }, + { + "name": "FLSun Generic PA", + "sub_path": "filament/FLSun Generic PA.json" + }, + { + "name": "FLSun Generic PA-CF", + "sub_path": "filament/FLSun Generic PA-CF.json" + }, + { + "name": "FLSun Generic PLA-HS-S1", + "sub_path": "filament/FLSun Generic PLA-HS-S1.json" + }, + { + "name": "FLSun Generic PLA-HS-T1", + "sub_path": "filament/FLSun Generic PLA-HS-T1.json" + } + ], + "machine_list": [ + { + "name": "fdm_machine_common", + "sub_path": "machine/fdm_machine_common.json" + }, + { + "name": "FLSun Q5 0.4 nozzle", + "sub_path": "machine/FLSun Q5 0.4 nozzle.json" + }, + { + "name": "FLSun QQ-S Pro 0.4 nozzle", + "sub_path": "machine/FLSun QQ-S Pro 0.4 nozzle.json" + }, + { + "name": "FLSun Super Racer 0.4 nozzle", + "sub_path": "machine/FLSun SR 0.4 nozzle.json" + }, + { + "name": "FLSun V400 0.4 nozzle", + "sub_path": "machine/FLSun V400 0.4 nozzle.json" + }, + { + "name": "FLSun T1 0.4 nozzle", + "sub_path": "machine/FLSun T1 0.4 nozzle.json" + }, + { + "name": "FLSun S1 0.4 nozzle", + "sub_path": "machine/FLSun S1 0.4 nozzle.json" + } + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/FLSun S1_cover.png b/resources/profiles/FLSun/FLSun S1_cover.png new file mode 100644 index 00000000000..d5c49294bb2 Binary files /dev/null and b/resources/profiles/FLSun/FLSun S1_cover.png differ diff --git a/resources/profiles/FLSun/FLSun T1_cover.png b/resources/profiles/FLSun/FLSun T1_cover.png new file mode 100644 index 00000000000..5ee7fb0f129 Binary files /dev/null and b/resources/profiles/FLSun/FLSun T1_cover.png differ diff --git a/resources/profiles/FLSun/filament/FLSun Generic ABS.json b/resources/profiles/FLSun/filament/FLSun Generic ABS.json index dbaba98b86f..226ba477241 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic ABS.json +++ b/resources/profiles/FLSun/filament/FLSun Generic ABS.json @@ -1,21 +1,21 @@ -{ - "type": "filament", - "filament_id": "GFB99", - "setting_id": "GFSA04", - "name": "FLSun Generic ABS", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_abs", - "filament_flow_ratio": [ - "0.926" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun Super Racer 0.4 nozzle", - "FLSun V400 0.4 nozzle" - ] -} +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "name": "FLSun Generic ABS", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "filament_flow_ratio": [ + "0.926" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/FLSun Generic ASA.json b/resources/profiles/FLSun/filament/FLSun Generic ASA.json index 716a279943f..b29c085e4b6 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic ASA.json +++ b/resources/profiles/FLSun/filament/FLSun Generic ASA.json @@ -1,21 +1,21 @@ -{ - "type": "filament", - "filament_id": "GFB98", - "setting_id": "GFSA04", - "name": "FLSun Generic ASA", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_asa", - "filament_flow_ratio": [ - "0.93" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun Super Racer 0.4 nozzle", - "FLSun V400 0.4 nozzle" - ] +{ + "type": "filament", + "filament_id": "GFB98", + "setting_id": "GFSA04", + "name": "FLSun Generic ASA", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_asa", + "filament_flow_ratio": [ + "0.93" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/filament/FLSun Generic PA-CF.json b/resources/profiles/FLSun/filament/FLSun Generic PA-CF.json index de4cdb119af..05220204bde 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PA-CF.json +++ b/resources/profiles/FLSun/filament/FLSun Generic PA-CF.json @@ -1,27 +1,27 @@ -{ - "type": "filament", - "filament_id": "GFN98", - "setting_id": "GFSA04", - "name": "FLSun Generic PA-CF", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pa", - "filament_type": [ - "PA-CF" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun Super Racer 0.4 nozzle", - "FLSun V400 0.4 nozzle" - ] +{ + "type": "filament", + "filament_id": "GFN98", + "setting_id": "GFSA04", + "name": "FLSun Generic PA-CF", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa", + "filament_type": [ + "PA-CF" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "compatible_printers": [ + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/filament/FLSun Generic PA.json b/resources/profiles/FLSun/filament/FLSun Generic PA.json index 06da861a23f..e97208d10f3 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PA.json +++ b/resources/profiles/FLSun/filament/FLSun Generic PA.json @@ -1,24 +1,24 @@ -{ - "type": "filament", - "filament_id": "GFN99", - "setting_id": "GFSA04", - "name": "FLSun Generic PA", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pa", - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun Super Racer 0.4 nozzle", - "FLSun V400 0.4 nozzle" - ] +{ + "type": "filament", + "filament_id": "GFN99", + "setting_id": "GFSA04", + "name": "FLSun Generic PA", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa", + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/filament/FLSun Generic PC.json b/resources/profiles/FLSun/filament/FLSun Generic PC.json index 42c95926ef3..4a7c982675d 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PC.json +++ b/resources/profiles/FLSun/filament/FLSun Generic PC.json @@ -1,21 +1,21 @@ -{ - "type": "filament", - "filament_id": "GFC99", - "setting_id": "GFSA04", - "name": "FLSun Generic PC", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pc", - "filament_max_volumetric_speed": [ - "12" - ], - "filament_flow_ratio": [ - "0.94" - ], - "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun Super Racer 0.4 nozzle", - "FLSun V400 0.4 nozzle" - ] +{ + "type": "filament", + "filament_id": "GFC99", + "setting_id": "GFSA04", + "name": "FLSun Generic PC", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pc", + "filament_max_volumetric_speed": [ + "12" + ], + "filament_flow_ratio": [ + "0.94" + ], + "compatible_printers": [ + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/filament/FLSun Generic PETG.json b/resources/profiles/FLSun/filament/FLSun Generic PETG.json index 9f65ef5be27..170ae7e66a4 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PETG.json +++ b/resources/profiles/FLSun/filament/FLSun Generic PETG.json @@ -1,51 +1,51 @@ -{ - "type": "filament", - "filament_id": "GFG99", - "setting_id": "GFSA04", - "name": "FLSun Generic PETG", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pet", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun Super Racer 0.4 nozzle", - "FLSun V400 0.4 nozzle" - ] +{ + "type": "filament", + "filament_id": "GFG99", + "setting_id": "GFSA04", + "name": "FLSun Generic PETG", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pet", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "compatible_printers": [ + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/filament/FLSun Generic PLA-CF.json b/resources/profiles/FLSun/filament/FLSun Generic PLA-CF.json index 5cd0835ce04..42f977ab8b0 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PLA-CF.json +++ b/resources/profiles/FLSun/filament/FLSun Generic PLA-CF.json @@ -1,27 +1,27 @@ -{ - "type": "filament", - "filament_id": "GFL98", - "setting_id": "GFSA04", - "name": "FLSun Generic PLA-CF", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pla", - "filament_flow_ratio": [ - "0.95" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "7" - ], - "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun Super Racer 0.4 nozzle", - "FLSun V400 0.4 nozzle" - ] +{ + "type": "filament", + "filament_id": "GFL98", + "setting_id": "GFSA04", + "name": "FLSun Generic PLA-CF", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "0.95" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "7" + ], + "compatible_printers": [ + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/filament/FLSun Generic PLA-HS-S1.json b/resources/profiles/FLSun/filament/FLSun Generic PLA-HS-S1.json new file mode 100644 index 00000000000..b1a01576e7b --- /dev/null +++ b/resources/profiles/FLSun/filament/FLSun Generic PLA-HS-S1.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "filament_id": "GFH99", + "setting_id": "GFSA04", + "name": "FLSun Generic PLA-HS-S1", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "1.1" + ], + "filament_type": [ + "PLA-HS" + ], + "filament_max_volumetric_speed": [ + "110" + ], + "slow_down_layer_time": [ + "1" + ], + "compatible_printers": [ + "FLSun S1 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/FLSun/filament/FLSun Generic PLA-HS-T1.json b/resources/profiles/FLSun/filament/FLSun Generic PLA-HS-T1.json new file mode 100644 index 00000000000..2f0ea5402c3 --- /dev/null +++ b/resources/profiles/FLSun/filament/FLSun Generic PLA-HS-T1.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSA04", + "name": "FLSun Generic PLA-HS-T1", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "60" + ], + "slow_down_layer_time": [ + "100" + ], + "compatible_printers": [ + "FLSun T1 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/FLSun/filament/FLSun Generic PLA.json b/resources/profiles/FLSun/filament/FLSun Generic PLA.json index 0945715758e..6fd89a2be79 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PLA.json +++ b/resources/profiles/FLSun/filament/FLSun Generic PLA.json @@ -1,24 +1,24 @@ -{ - "type": "filament", - "filament_id": "GFL99", - "setting_id": "GFSA04", - "name": "FLSun Generic PLA", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pla", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "8" - ], - "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun Super Racer 0.4 nozzle", - "FLSun V400 0.4 nozzle" - ] +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSA04", + "name": "FLSun Generic PLA", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/filament/FLSun Generic PVA.json b/resources/profiles/FLSun/filament/FLSun Generic PVA.json index 8ad4ecdb61f..ecb20a77711 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PVA.json +++ b/resources/profiles/FLSun/filament/FLSun Generic PVA.json @@ -1,27 +1,27 @@ -{ - "type": "filament", - "filament_id": "GFS99", - "setting_id": "GFSA04", - "name": "FLSun Generic PVA", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pva", - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "10" - ], - "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun Super Racer 0.4 nozzle", - "FLSun V400 0.4 nozzle" - ] +{ + "type": "filament", + "filament_id": "GFS99", + "setting_id": "GFSA04", + "name": "FLSun Generic PVA", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pva", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "compatible_printers": [ + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/filament/FLSun Generic TPU.json b/resources/profiles/FLSun/filament/FLSun Generic TPU.json index 357cd8d45af..55bd2a9cc3f 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic TPU.json +++ b/resources/profiles/FLSun/filament/FLSun Generic TPU.json @@ -1,18 +1,18 @@ -{ - "type": "filament", - "filament_id": "GFU99", - "setting_id": "GFSA04", - "name": "FLSun Generic TPU", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_tpu", - "filament_max_volumetric_speed": [ - "3.2" - ], - "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun Super Racer 0.4 nozzle", - "FLSun V400 0.4 nozzle" - ] +{ + "type": "filament", + "filament_id": "GFU99", + "setting_id": "GFSA04", + "name": "FLSun Generic TPU", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_tpu", + "filament_max_volumetric_speed": [ + "3.2" + ], + "compatible_printers": [ + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/filament/fdm_filament_abs.json b/resources/profiles/FLSun/filament/fdm_filament_abs.json index 7e478a37f3f..acbe71bbd64 100644 --- a/resources/profiles/FLSun/filament/fdm_filament_abs.json +++ b/resources/profiles/FLSun/filament/fdm_filament_abs.json @@ -1,82 +1,82 @@ -{ - "type": "filament", - "name": "fdm_filament_abs", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "cool_plate_temp" : [ - "105" - ], - "eng_plate_temp" : [ - "105" - ], - "hot_plate_temp" : [ - "105" - ], - "cool_plate_temp_initial_layer" : [ - "105" - ], - "eng_plate_temp_initial_layer" : [ - "105" - ], - "hot_plate_temp_initial_layer" : [ - "105" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "30" - ], - "filament_max_volumetric_speed": [ - "28.6" - ], - "filament_type": [ - "ABS" - ], - "filament_density": [ - "1.04" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "10" - ], - "overhang_fan_threshold": [ - "25%" - ], - "overhang_fan_speed": [ - "80" - ], - "nozzle_temperature": [ - "260" - ], - "temperature_vitrification": [ - "110" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "3" - ] -} +{ + "type": "filament", + "name": "fdm_filament_abs", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "105" + ], + "eng_plate_temp" : [ + "105" + ], + "hot_plate_temp" : [ + "105" + ], + "cool_plate_temp_initial_layer" : [ + "105" + ], + "eng_plate_temp_initial_layer" : [ + "105" + ], + "hot_plate_temp_initial_layer" : [ + "105" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "30" + ], + "filament_max_volumetric_speed": [ + "28.6" + ], + "filament_type": [ + "ABS" + ], + "filament_density": [ + "1.04" + ], + "filament_cost": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "80" + ], + "nozzle_temperature": [ + "260" + ], + "temperature_vitrification": [ + "110" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "3" + ] +} diff --git a/resources/profiles/FLSun/filament/fdm_filament_asa.json b/resources/profiles/FLSun/filament/fdm_filament_asa.json index 29a752a4ee0..0c6bcee1957 100644 --- a/resources/profiles/FLSun/filament/fdm_filament_asa.json +++ b/resources/profiles/FLSun/filament/fdm_filament_asa.json @@ -1,82 +1,82 @@ -{ - "type": "filament", - "name": "fdm_filament_asa", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "cool_plate_temp" : [ - "105" - ], - "eng_plate_temp" : [ - "105" - ], - "hot_plate_temp" : [ - "105" - ], - "cool_plate_temp_initial_layer" : [ - "105" - ], - "eng_plate_temp_initial_layer" : [ - "105" - ], - "hot_plate_temp_initial_layer" : [ - "105" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "35" - ], - "filament_max_volumetric_speed": [ - "28.6" - ], - "filament_type": [ - "ASA" - ], - "filament_density": [ - "1.04" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "10" - ], - "overhang_fan_threshold": [ - "25%" - ], - "overhang_fan_speed": [ - "80" - ], - "nozzle_temperature": [ - "260" - ], - "temperature_vitrification": [ - "110" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "3" - ] -} +{ + "type": "filament", + "name": "fdm_filament_asa", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "105" + ], + "eng_plate_temp" : [ + "105" + ], + "hot_plate_temp" : [ + "105" + ], + "cool_plate_temp_initial_layer" : [ + "105" + ], + "eng_plate_temp_initial_layer" : [ + "105" + ], + "hot_plate_temp_initial_layer" : [ + "105" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "35" + ], + "filament_max_volumetric_speed": [ + "28.6" + ], + "filament_type": [ + "ASA" + ], + "filament_density": [ + "1.04" + ], + "filament_cost": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "80" + ], + "nozzle_temperature": [ + "260" + ], + "temperature_vitrification": [ + "110" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "3" + ] +} diff --git a/resources/profiles/FLSun/filament/fdm_filament_common.json b/resources/profiles/FLSun/filament/fdm_filament_common.json index f1e09f49dcb..76421053121 100644 --- a/resources/profiles/FLSun/filament/fdm_filament_common.json +++ b/resources/profiles/FLSun/filament/fdm_filament_common.json @@ -1,138 +1,138 @@ -{ - "type": "filament", - "name": "fdm_filament_common", - "from": "system", - "instantiation": "false", - "cool_plate_temp" : [ - "60" - ], - "eng_plate_temp" : [ - "60" - ], - "hot_plate_temp" : [ - "60" - ], - "cool_plate_temp_initial_layer" : [ - "60" - ], - "eng_plate_temp_initial_layer" : [ - "60" - ], - "hot_plate_temp_initial_layer" : [ - "60" - ], - "overhang_fan_threshold": [ - "95%" - ], - "overhang_fan_speed": [ - "100" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "filament_flow_ratio": [ - "1" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "fan_cooling_layer_time": [ - "60" - ], - "filament_cost": [ - "0" - ], - "filament_density": [ - "0" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_max_volumetric_speed": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "bed_type": [ - "Cool Plate" - ], - "nozzle_temperature_initial_layer": [ - "200" - ], - "full_fan_speed_layer": [ - "0" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "35" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_start_gcode": [ - "; Filament gcode\n" - ], - "nozzle_temperature": [ - "200" - ], - "temperature_vitrification": [ - "100" - ] -} +{ + "type": "filament", + "name": "fdm_filament_common", + "from": "system", + "instantiation": "false", + "cool_plate_temp" : [ + "60" + ], + "eng_plate_temp" : [ + "60" + ], + "hot_plate_temp" : [ + "60" + ], + "cool_plate_temp_initial_layer" : [ + "60" + ], + "eng_plate_temp_initial_layer" : [ + "60" + ], + "hot_plate_temp_initial_layer" : [ + "60" + ], + "overhang_fan_threshold": [ + "95%" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "1" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "fan_cooling_layer_time": [ + "60" + ], + "filament_cost": [ + "0" + ], + "filament_density": [ + "0" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_max_volumetric_speed": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "bed_type": [ + "Cool Plate" + ], + "nozzle_temperature_initial_layer": [ + "200" + ], + "full_fan_speed_layer": [ + "0" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "35" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_start_gcode": [ + "; Filament gcode\n" + ], + "nozzle_temperature": [ + "200" + ], + "temperature_vitrification": [ + "100" + ] +} diff --git a/resources/profiles/FLSun/filament/fdm_filament_pa.json b/resources/profiles/FLSun/filament/fdm_filament_pa.json index e75e2e9f6c9..2a80ac75f67 100644 --- a/resources/profiles/FLSun/filament/fdm_filament_pa.json +++ b/resources/profiles/FLSun/filament/fdm_filament_pa.json @@ -1,79 +1,79 @@ -{ - "type": "filament", - "name": "fdm_filament_pa", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "cool_plate_temp" : [ - "0" - ], - "eng_plate_temp" : [ - "100" - ], - "hot_plate_temp" : [ - "100" - ], - "cool_plate_temp_initial_layer" : [ - "0" - ], - "eng_plate_temp_initial_layer" : [ - "100" - ], - "hot_plate_temp_initial_layer" : [ - "100" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "4" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_type": [ - "PA" - ], - "filament_density": [ - "1.04" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "290" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "fan_max_speed": [ - "60" - ], - "fan_min_speed": [ - "0" - ], - "overhang_fan_speed": [ - "30" - ], - "nozzle_temperature": [ - "290" - ], - "temperature_vitrification": [ - "108" - ], - "nozzle_temperature_range_low": [ - "270" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "2" - ] -} +{ + "type": "filament", + "name": "fdm_filament_pa", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "0" + ], + "eng_plate_temp" : [ + "100" + ], + "hot_plate_temp" : [ + "100" + ], + "cool_plate_temp_initial_layer" : [ + "0" + ], + "eng_plate_temp_initial_layer" : [ + "100" + ], + "hot_plate_temp_initial_layer" : [ + "100" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "4" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_type": [ + "PA" + ], + "filament_density": [ + "1.04" + ], + "filament_cost": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "290" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "0" + ], + "overhang_fan_speed": [ + "30" + ], + "nozzle_temperature": [ + "290" + ], + "temperature_vitrification": [ + "108" + ], + "nozzle_temperature_range_low": [ + "270" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "2" + ] +} diff --git a/resources/profiles/FLSun/filament/fdm_filament_pc.json b/resources/profiles/FLSun/filament/fdm_filament_pc.json index 89f770017e7..967155f3bc6 100644 --- a/resources/profiles/FLSun/filament/fdm_filament_pc.json +++ b/resources/profiles/FLSun/filament/fdm_filament_pc.json @@ -1,82 +1,82 @@ -{ - "type": "filament", - "name": "fdm_filament_pc", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "cool_plate_temp" : [ - "0" - ], - "eng_plate_temp" : [ - "110" - ], - "hot_plate_temp" : [ - "110" - ], - "cool_plate_temp_initial_layer" : [ - "0" - ], - "eng_plate_temp_initial_layer" : [ - "110" - ], - "hot_plate_temp_initial_layer" : [ - "110" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "30" - ], - "filament_max_volumetric_speed": [ - "23.2" - ], - "filament_type": [ - "PC" - ], - "filament_density": [ - "1.04" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "fan_max_speed": [ - "60" - ], - "fan_min_speed": [ - "10" - ], - "overhang_fan_threshold": [ - "25%" - ], - "overhang_fan_speed": [ - "60" - ], - "nozzle_temperature": [ - "280" - ], - "temperature_vitrification": [ - "140" - ], - "nozzle_temperature_range_low": [ - "260" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "2" - ] -} +{ + "type": "filament", + "name": "fdm_filament_pc", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "0" + ], + "eng_plate_temp" : [ + "110" + ], + "hot_plate_temp" : [ + "110" + ], + "cool_plate_temp_initial_layer" : [ + "0" + ], + "eng_plate_temp_initial_layer" : [ + "110" + ], + "hot_plate_temp_initial_layer" : [ + "110" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "30" + ], + "filament_max_volumetric_speed": [ + "23.2" + ], + "filament_type": [ + "PC" + ], + "filament_density": [ + "1.04" + ], + "filament_cost": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "60" + ], + "nozzle_temperature": [ + "280" + ], + "temperature_vitrification": [ + "140" + ], + "nozzle_temperature_range_low": [ + "260" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "2" + ] +} diff --git a/resources/profiles/FLSun/filament/fdm_filament_pet.json b/resources/profiles/FLSun/filament/fdm_filament_pet.json index 2f98be665f1..db024853e28 100644 --- a/resources/profiles/FLSun/filament/fdm_filament_pet.json +++ b/resources/profiles/FLSun/filament/fdm_filament_pet.json @@ -1,76 +1,76 @@ -{ - "type": "filament", - "name": "fdm_filament_pet", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "cool_plate_temp" : [ - "60" - ], - "eng_plate_temp" : [ - "0" - ], - "hot_plate_temp" : [ - "80" - ], - "cool_plate_temp_initial_layer" : [ - "60" - ], - "eng_plate_temp_initial_layer" : [ - "0" - ], - "hot_plate_temp_initial_layer" : [ - "80" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "20" - ], - "filament_max_volumetric_speed": [ - "25" - ], - "filament_type": [ - "PETG" - ], - "filament_density": [ - "1.27" - ], - "filament_cost": [ - "30" - ], - "nozzle_temperature_initial_layer": [ - "255" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "20" - ], - "overhang_fan_speed": [ - "100" - ], - "nozzle_temperature": [ - "255" - ], - "temperature_vitrification": [ - "80" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ] -} +{ + "type": "filament", + "name": "fdm_filament_pet", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "60" + ], + "eng_plate_temp" : [ + "0" + ], + "hot_plate_temp" : [ + "80" + ], + "cool_plate_temp_initial_layer" : [ + "60" + ], + "eng_plate_temp_initial_layer" : [ + "0" + ], + "hot_plate_temp_initial_layer" : [ + "80" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "20" + ], + "filament_max_volumetric_speed": [ + "25" + ], + "filament_type": [ + "PETG" + ], + "filament_density": [ + "1.27" + ], + "filament_cost": [ + "30" + ], + "nozzle_temperature_initial_layer": [ + "255" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "20" + ], + "overhang_fan_speed": [ + "100" + ], + "nozzle_temperature": [ + "255" + ], + "temperature_vitrification": [ + "80" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/FLSun/filament/fdm_filament_pla.json b/resources/profiles/FLSun/filament/fdm_filament_pla.json index de2f3c2a71d..fda535d846a 100644 --- a/resources/profiles/FLSun/filament/fdm_filament_pla.json +++ b/resources/profiles/FLSun/filament/fdm_filament_pla.json @@ -1,88 +1,88 @@ -{ - "type": "filament", - "name": "fdm_filament_pla", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "fan_cooling_layer_time": [ - "100" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_type": [ - "PLA" - ], - "filament_density": [ - "1.24" - ], - "filament_cost": [ - "20" - ], - "cool_plate_temp" : [ - "35" - ], - "eng_plate_temp" : [ - "0" - ], - "hot_plate_temp" : [ - "45" - ], - "cool_plate_temp_initial_layer" : [ - "35" - ], - "eng_plate_temp_initial_layer" : [ - "0" - ], - "hot_plate_temp_initial_layer" : [ - "45" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "nozzle_temperature": [ - "220" - ], - "temperature_vitrification": [ - "60" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "230" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "4" - ], - "additional_cooling_fan_speed": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ] -} +{ + "type": "filament", + "name": "fdm_filament_pla", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "fan_cooling_layer_time": [ + "100" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_type": [ + "PLA" + ], + "filament_density": [ + "1.24" + ], + "filament_cost": [ + "20" + ], + "cool_plate_temp" : [ + "35" + ], + "eng_plate_temp" : [ + "0" + ], + "hot_plate_temp" : [ + "45" + ], + "cool_plate_temp_initial_layer" : [ + "35" + ], + "eng_plate_temp_initial_layer" : [ + "0" + ], + "hot_plate_temp_initial_layer" : [ + "45" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "nozzle_temperature": [ + "220" + ], + "temperature_vitrification": [ + "60" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "4" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/FLSun/filament/fdm_filament_pva.json b/resources/profiles/FLSun/filament/fdm_filament_pva.json index f529bb39af4..9858c78712e 100644 --- a/resources/profiles/FLSun/filament/fdm_filament_pva.json +++ b/resources/profiles/FLSun/filament/fdm_filament_pva.json @@ -1,94 +1,94 @@ -{ - "type": "filament", - "name": "fdm_filament_pva", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "cool_plate_temp" : [ - "35" - ], - "eng_plate_temp" : [ - "0" - ], - "hot_plate_temp" : [ - "45" - ], - "cool_plate_temp_initial_layer" : [ - "35" - ], - "eng_plate_temp_initial_layer" : [ - "0" - ], - "hot_plate_temp_initial_layer" : [ - "45" - ], - "fan_cooling_layer_time": [ - "100" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "filament_soluble": [ - "1" - ], - "filament_is_support": [ - "1" - ], - "filament_type": [ - "PVA" - ], - "filament_density": [ - "1.24" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "nozzle_temperature": [ - "220" - ], - "temperature_vitrification": [ - "50" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "4" - ], - "additional_cooling_fan_speed": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ] -} +{ + "type": "filament", + "name": "fdm_filament_pva", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "35" + ], + "eng_plate_temp" : [ + "0" + ], + "hot_plate_temp" : [ + "45" + ], + "cool_plate_temp_initial_layer" : [ + "35" + ], + "eng_plate_temp_initial_layer" : [ + "0" + ], + "hot_plate_temp_initial_layer" : [ + "45" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_soluble": [ + "1" + ], + "filament_is_support": [ + "1" + ], + "filament_type": [ + "PVA" + ], + "filament_density": [ + "1.24" + ], + "filament_cost": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "nozzle_temperature": [ + "220" + ], + "temperature_vitrification": [ + "50" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "4" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/FLSun/filament/fdm_filament_tpu.json b/resources/profiles/FLSun/filament/fdm_filament_tpu.json index d5cc57fbcc0..7bee9e1b8c2 100644 --- a/resources/profiles/FLSun/filament/fdm_filament_tpu.json +++ b/resources/profiles/FLSun/filament/fdm_filament_tpu.json @@ -1,82 +1,82 @@ -{ - "type": "filament", - "name": "fdm_filament_tpu", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "cool_plate_temp" : [ - "30" - ], - "eng_plate_temp" : [ - "30" - ], - "hot_plate_temp" : [ - "35" - ], - "cool_plate_temp_initial_layer" : [ - "30" - ], - "eng_plate_temp_initial_layer" : [ - "30" - ], - "hot_plate_temp_initial_layer" : [ - "35" - ], - "fan_cooling_layer_time": [ - "100" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "filament_type": [ - "TPU" - ], - "filament_density": [ - "1.24" - ], - "filament_cost": [ - "20" - ], - "filament_retraction_length": [ - "0.4" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "overhang_fan_speed": [ - "100" - ], - "additional_cooling_fan_speed": [ - "70" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "nozzle_temperature": [ - "240" - ], - "temperature_vitrification": [ - "60" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ] -} +{ + "type": "filament", + "name": "fdm_filament_tpu", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "30" + ], + "eng_plate_temp" : [ + "30" + ], + "hot_plate_temp" : [ + "35" + ], + "cool_plate_temp_initial_layer" : [ + "30" + ], + "eng_plate_temp_initial_layer" : [ + "30" + ], + "hot_plate_temp_initial_layer" : [ + "35" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_type": [ + "TPU" + ], + "filament_density": [ + "1.24" + ], + "filament_cost": [ + "20" + ], + "filament_retraction_length": [ + "0.4" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "nozzle_temperature": [ + "240" + ], + "temperature_vitrification": [ + "60" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/FLSun/flsun_SR_buildplate_texture.svg b/resources/profiles/FLSun/flsun_SR_buildplate_texture.svg index 846833b6860..70be17936b6 100644 --- a/resources/profiles/FLSun/flsun_SR_buildplate_texture.svg +++ b/resources/profiles/FLSun/flsun_SR_buildplate_texture.svg @@ -1,54 +1,54 @@ - - - - - - - image/svg+xml - - - - - - - + + + + + + + image/svg+xml + + + + + + + diff --git a/resources/profiles/FLSun/flsun_T1_buildplate_model.stl b/resources/profiles/FLSun/flsun_T1_buildplate_model.stl new file mode 100644 index 00000000000..5702cb464f9 Binary files /dev/null and b/resources/profiles/FLSun/flsun_T1_buildplate_model.stl differ diff --git a/resources/profiles/FLSun/flsun_T1_buildplate_texture.svg b/resources/profiles/FLSun/flsun_T1_buildplate_texture.svg new file mode 100644 index 00000000000..a90e5aa342e --- /dev/null +++ b/resources/profiles/FLSun/flsun_T1_buildplate_texture.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/profiles/FLSun/flsun_s1_buildplate_model.stl b/resources/profiles/FLSun/flsun_s1_buildplate_model.stl new file mode 100644 index 00000000000..5702cb464f9 Binary files /dev/null and b/resources/profiles/FLSun/flsun_s1_buildplate_model.stl differ diff --git a/resources/profiles/FLSun/flsun_s1_buildplate_texture.svg b/resources/profiles/FLSun/flsun_s1_buildplate_texture.svg new file mode 100644 index 00000000000..082fc11ee90 --- /dev/null +++ b/resources/profiles/FLSun/flsun_s1_buildplate_texture.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/profiles/FLSun/flsun_v400_buildplate_texture.svg b/resources/profiles/FLSun/flsun_v400_buildplate_texture.svg index 9e60c1fbca4..2fab2421d7d 100644 --- a/resources/profiles/FLSun/flsun_v400_buildplate_texture.svg +++ b/resources/profiles/FLSun/flsun_v400_buildplate_texture.svg @@ -1,59 +1,59 @@ - - - - - - - image/svg+xml - - - - - - - - - - + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/resources/profiles/FLSun/machine/FLSun Q5 0.4 nozzle.json b/resources/profiles/FLSun/machine/FLSun Q5 0.4 nozzle.json index 0e17d1200ac..241995f50d5 100644 --- a/resources/profiles/FLSun/machine/FLSun Q5 0.4 nozzle.json +++ b/resources/profiles/FLSun/machine/FLSun Q5 0.4 nozzle.json @@ -1,189 +1,189 @@ -{ - "type": "machine", - "setting_id": "GM003", - "name": "FLSun Q5 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "printer_model": "FLSun Q5", - "default_print_profile": "0.20mm Standard @FLSun Q5", - "gcode_flavor": "marlin", - "thumbnails": [ - "260x260" - ], - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "99.6195x8.71557", - "98.4808x17.3648", - "96.5926x25.8819", - "93.9693x34.202", - "90.6308x42.2618", - "86.6025x50", - "81.9152x57.3576", - "76.6044x64.2788", - "70.7107x70.7107", - "64.2788x76.6044", - "57.3576x81.9152", - "50x86.6025", - "42.2618x90.6308", - "34.202x93.9693", - "25.8819x96.5926", - "17.3648x98.4808", - "8.71557x99.6195", - "6.12323e-15x100", - "-8.71557x99.6195", - "-17.3648x98.4808", - "-25.8819x96.5926", - "-34.202x93.9693", - "-42.2618x90.6308", - "-50x86.6025", - "-57.3576x81.9152", - "-64.2788x76.6044", - "-70.7107x70.7107", - "-76.6044x64.2788", - "-81.9152x57.3576", - "-86.6025x50", - "-90.6308x42.2618", - "-93.9693x34.202", - "-96.5926x25.8819", - "-98.4808x17.3648", - "-99.6195x8.71557", - "-100x1.22465e-14", - "-99.6195x-8.71557", - "-98.4808x-17.3648", - "-96.5926x-25.8819", - "-93.9693x-34.202", - "-90.6308x-42.2618", - "-86.6025x-50", - "-81.9152x-57.3576", - "-76.6044x-64.2788", - "-70.7107x-70.7107", - "-64.2788x-76.6044", - "-57.3576x-81.9152", - "-50x-86.6025", - "-42.2618x-90.6308", - "-34.202x-93.9693", - "-25.8819x-96.5926", - "-17.3648x-98.4808", - "-8.71557x-99.6195", - "-1.83697e-14x-100", - "8.71557x-99.6195", - "17.3648x-98.4808", - "25.8819x-96.5926", - "34.202x-93.9693", - "42.2618x-90.6308", - "50x-86.6025", - "57.3576x-81.9152", - "64.2788x-76.6044", - "70.7107x-70.7107", - "76.6044x-64.2788", - "81.9152x-57.3576", - "86.6025x-50", - "90.6308x-42.2618", - "93.9693x-34.202", - "96.5926x-25.8819", - "98.4808x-17.3648", - "99.6195x-8.71557", - "100x-2.44929e-14" - ], - "printable_height": "200", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0", - "machine_max_acceleration_e": [ - "3000", - "800" - ], - "machine_max_acceleration_extruding": [ - "1500", - "800" - ], - "machine_max_acceleration_retracting": [ - "2000", - "800" - ], - "machine_max_acceleration_travel": [ - "1500", - "800" - ], - "machine_max_acceleration_x": [ - "1500", - "800" - ], - "machine_max_acceleration_y": [ - "1500", - "800" - ], - "machine_max_acceleration_z": [ - "1500", - "800" - ], - "machine_max_speed_e": [ - "60", - "30" - ], - "machine_max_speed_x": [ - "200", - "150" - ], - "machine_max_speed_y": [ - "200", - "150" - ], - "machine_max_speed_z": [ - "200", - "150" - ], - "machine_max_jerk_e": [ - "5", - "5" - ], - "machine_max_jerk_x": [ - "5", - "10" - ], - "machine_max_jerk_y": [ - "5", - "10" - ], - "machine_max_jerk_z": [ - "5", - "10" - ], - "max_layer_height": [ - "0.32" - ], - "min_layer_height": [ - "0.08" - ], - "printer_settings_id": "FLSun", - "retraction_minimum_travel": [ - "2" - ], - "retract_before_wipe": [ - "70%" - ], - "retraction_length": [ - "3" - ], - "retract_length_toolchange": [ - "1" - ], - "retraction_speed": [ - "30" - ], - "deretraction_speed": [ - "40" - ], - "single_extruder_multi_material": "1", - "change_filament_gcode": "", - "machine_pause_gcode": "M400 U1\n", - "default_filament_profile": [ - "FLSun Generic PLA" - ], - "machine_start_gcode": ";STARTGCODE\nM117 Initializing\n; G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM107\nG28 ;Home\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\n\nG92 E0\nG1 X-98 Y0 Z0.2 F4000 ; move to arc start\nG3 X0 Y-98 I98 Z0.2 E40 F400 ; lay arc stripe 90deg\nG0 Z1 \nG92 E0.0\n", - "machine_end_gcode": "M107\nM104 S0\nM140 S0\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\n;M84\nM18 S180 ;disable motors after 180s\n", - "scan_first_layer": "0" - } +{ + "type": "machine", + "setting_id": "GM003", + "name": "FLSun Q5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "FLSun Q5", + "default_print_profile": "0.20mm Standard @FLSun Q5", + "gcode_flavor": "marlin", + "thumbnails": [ + "260x260" + ], + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "99.6195x8.71557", + "98.4808x17.3648", + "96.5926x25.8819", + "93.9693x34.202", + "90.6308x42.2618", + "86.6025x50", + "81.9152x57.3576", + "76.6044x64.2788", + "70.7107x70.7107", + "64.2788x76.6044", + "57.3576x81.9152", + "50x86.6025", + "42.2618x90.6308", + "34.202x93.9693", + "25.8819x96.5926", + "17.3648x98.4808", + "8.71557x99.6195", + "6.12323e-15x100", + "-8.71557x99.6195", + "-17.3648x98.4808", + "-25.8819x96.5926", + "-34.202x93.9693", + "-42.2618x90.6308", + "-50x86.6025", + "-57.3576x81.9152", + "-64.2788x76.6044", + "-70.7107x70.7107", + "-76.6044x64.2788", + "-81.9152x57.3576", + "-86.6025x50", + "-90.6308x42.2618", + "-93.9693x34.202", + "-96.5926x25.8819", + "-98.4808x17.3648", + "-99.6195x8.71557", + "-100x1.22465e-14", + "-99.6195x-8.71557", + "-98.4808x-17.3648", + "-96.5926x-25.8819", + "-93.9693x-34.202", + "-90.6308x-42.2618", + "-86.6025x-50", + "-81.9152x-57.3576", + "-76.6044x-64.2788", + "-70.7107x-70.7107", + "-64.2788x-76.6044", + "-57.3576x-81.9152", + "-50x-86.6025", + "-42.2618x-90.6308", + "-34.202x-93.9693", + "-25.8819x-96.5926", + "-17.3648x-98.4808", + "-8.71557x-99.6195", + "-1.83697e-14x-100", + "8.71557x-99.6195", + "17.3648x-98.4808", + "25.8819x-96.5926", + "34.202x-93.9693", + "42.2618x-90.6308", + "50x-86.6025", + "57.3576x-81.9152", + "64.2788x-76.6044", + "70.7107x-70.7107", + "76.6044x-64.2788", + "81.9152x-57.3576", + "86.6025x-50", + "90.6308x-42.2618", + "93.9693x-34.202", + "96.5926x-25.8819", + "98.4808x-17.3648", + "99.6195x-8.71557", + "100x-2.44929e-14" + ], + "printable_height": "200", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "machine_max_acceleration_e": [ + "3000", + "800" + ], + "machine_max_acceleration_extruding": [ + "1500", + "800" + ], + "machine_max_acceleration_retracting": [ + "2000", + "800" + ], + "machine_max_acceleration_travel": [ + "1500", + "800" + ], + "machine_max_acceleration_x": [ + "1500", + "800" + ], + "machine_max_acceleration_y": [ + "1500", + "800" + ], + "machine_max_acceleration_z": [ + "1500", + "800" + ], + "machine_max_speed_e": [ + "60", + "30" + ], + "machine_max_speed_x": [ + "200", + "150" + ], + "machine_max_speed_y": [ + "200", + "150" + ], + "machine_max_speed_z": [ + "200", + "150" + ], + "machine_max_jerk_e": [ + "5", + "5" + ], + "machine_max_jerk_x": [ + "5", + "10" + ], + "machine_max_jerk_y": [ + "5", + "10" + ], + "machine_max_jerk_z": [ + "5", + "10" + ], + "max_layer_height": [ + "0.32" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "FLSun", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "70%" + ], + "retraction_length": [ + "3" + ], + "retract_length_toolchange": [ + "1" + ], + "retraction_speed": [ + "30" + ], + "deretraction_speed": [ + "40" + ], + "single_extruder_multi_material": "1", + "change_filament_gcode": "", + "machine_pause_gcode": "M400 U1\n", + "default_filament_profile": [ + "FLSun Generic PLA" + ], + "machine_start_gcode": ";STARTGCODE\nM117 Initializing\n; G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM107\nG28 ;Home\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\n\nG92 E0\nG1 X-98 Y0 Z0.2 F4000 ; move to arc start\nG3 X0 Y-98 I98 Z0.2 E40 F400 ; lay arc stripe 90deg\nG0 Z1 \nG92 E0.0\n", + "machine_end_gcode": "M107\nM104 S0\nM140 S0\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\n;M84\nM18 S180 ;disable motors after 180s\n", + "scan_first_layer": "0" + } \ No newline at end of file diff --git a/resources/profiles/FLSun/machine/FLSun Q5.json b/resources/profiles/FLSun/machine/FLSun Q5.json index e595b53d505..58bb00f5eae 100644 --- a/resources/profiles/FLSun/machine/FLSun Q5.json +++ b/resources/profiles/FLSun/machine/FLSun Q5.json @@ -1,12 +1,12 @@ -{ - "type": "machine_model", - "name": "FLSun Q5", - "model_id": "FLSun-Q5", - "nozzle_diameter": "0.4", - "machine_tech": "FFF", - "family": "FLSun", - "bed_model": "flsun_q5_buildplate_model.stl", - "bed_texture": "flsun_q5_buildplate_texture.png", - "hotend_model": "", - "default_materials": "FLSun Generic ABS;FLSun Generic PLA;FLSun Generic PLA-CF;FLSun Generic PETG;FLSun Generic TPU;FLSun Generic ASA;FLSun Generic PC;FLSun Generic PVA;FLSun Generic PA;FLSun Generic PA-CF" -} +{ + "type": "machine_model", + "name": "FLSun Q5", + "model_id": "FLSun-Q5", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "FLSun", + "bed_model": "flsun_q5_buildplate_model.stl", + "bed_texture": "flsun_q5_buildplate_texture.png", + "hotend_model": "", + "default_materials": "FLSun Generic ABS;FLSun Generic PLA;FLSun Generic PLA-CF;FLSun Generic PETG;FLSun Generic TPU;FLSun Generic ASA;FLSun Generic PC;FLSun Generic PVA;FLSun Generic PA;FLSun Generic PA-CF" +} diff --git a/resources/profiles/FLSun/machine/FLSun QQ-S Pro 0.4 nozzle.json b/resources/profiles/FLSun/machine/FLSun QQ-S Pro 0.4 nozzle.json index 6b62e0e2fc8..d955b234436 100644 --- a/resources/profiles/FLSun/machine/FLSun QQ-S Pro 0.4 nozzle.json +++ b/resources/profiles/FLSun/machine/FLSun QQ-S Pro 0.4 nozzle.json @@ -1,189 +1,189 @@ -{ - "type": "machine", - "setting_id": "GM003", - "name": "FLSun QQ-S Pro 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "printer_model": "FLSun QQ-S Pro", - "default_print_profile": "0.20mm Standard @FLSun QQSPro", - "gcode_flavor": "marlin", - "thumbnails": [ - "260x260" - ], - "nozzle_diameter": [ - "0.4" - ], - "printable_area": [ - "129.505x11.3302", - "128.025x22.5743", - "125.57x33.6465", - "122.16x44.4626", - "117.82x54.9404", - "112.583x65", - "106.49x74.5649", - "99.5858x83.5624", - "91.9239x91.9239", - "83.5624x99.5858", - "74.5649x106.49", - "65x112.583", - "54.9404x117.82", - "44.4626x122.16", - "33.6465x125.57", - "22.5743x128.025", - "11.3302x129.505", - "7.9602e-15x130", - "-11.3302x129.505", - "-22.5743x128.025", - "-33.6465x125.57", - "-44.4626x122.16", - "-54.9404x117.82", - "-65x112.583", - "-74.5649x106.49", - "-83.5624x99.5858", - "-91.9239x91.9239", - "-99.5858x83.5624", - "-106.49x74.5649", - "-112.583x65", - "-117.82x54.9404", - "-122.16x44.4626", - "-125.57x33.6465", - "-128.025x22.5743", - "-129.505x11.3302", - "-130x1.59204e-14", - "-129.505x-11.3302", - "-128.025x-22.5743", - "-125.57x-33.6465", - "-122.16x-44.4626", - "-117.82x-54.9404", - "-112.583x-65", - "-106.49x-74.5649", - "-99.5858x-83.5624", - "-91.9239x-91.9239", - "-83.5624x-99.5858", - "-74.5649x-106.49", - "-65x-112.583", - "-54.9404x-117.82", - "-44.4626x-122.16", - "-33.6465x-125.57", - "-22.5743x-128.025", - "-11.3302x-129.505", - "-2.38806e-14x-130", - "11.3302x-129.505", - "22.5743x-128.025", - "33.6465x-125.57", - "44.4626x-122.16", - "54.9404x-117.82", - "65x-112.583", - "74.5649x-106.49", - "83.5624x-99.5858", - "91.9239x-91.9239", - "99.5858x-83.5624", - "106.49x-74.5649", - "112.583x-65", - "117.82x-54.9404", - "122.16x-44.4626", - "125.57x-33.6465", - "128.025x-22.5743", - "129.505x-11.3302", - "130x-3.18408e-14" - ], - "printable_height": "360", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0", - "machine_max_acceleration_e": [ - "3000", - "800" - ], - "machine_max_acceleration_extruding": [ - "1500", - "800" - ], - "machine_max_acceleration_retracting": [ - "2000", - "800" - ], - "machine_max_acceleration_travel": [ - "1500", - "800" - ], - "machine_max_acceleration_x": [ - "1500", - "800" - ], - "machine_max_acceleration_y": [ - "1500", - "800" - ], - "machine_max_acceleration_z": [ - "1500", - "800" - ], - "machine_max_speed_e": [ - "60", - "30" - ], - "machine_max_speed_x": [ - "200", - "150" - ], - "machine_max_speed_y": [ - "200", - "150" - ], - "machine_max_speed_z": [ - "200", - "150" - ], - "machine_max_jerk_e": [ - "5", - "5" - ], - "machine_max_jerk_x": [ - "5", - "10" - ], - "machine_max_jerk_y": [ - "5", - "10" - ], - "machine_max_jerk_z": [ - "5", - "10" - ], - "max_layer_height": [ - "0.32" - ], - "min_layer_height": [ - "0.08" - ], - "printer_settings_id": "FLSun", - "retraction_minimum_travel": [ - "2" - ], - "retract_before_wipe": [ - "70%" - ], - "retraction_length": [ - "5" - ], - "retract_length_toolchange": [ - "1" - ], - "retraction_speed": [ - "30" - ], - "deretraction_speed": [ - "40" - ], - "single_extruder_multi_material": "1", - "change_filament_gcode": "", - "machine_pause_gcode": "M400 U1\n", - "default_filament_profile": [ - "FLSun Generic PLA" - ], - "machine_start_gcode": ";STARTGCODE\nM117 Initializing\n; Set coordinate modes\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; Reset speed and extrusion rates\nM200 D0 ; disable volumetric E\nM220 S100 ; reset speed\n; Set initial warmup temps\nM117 Nozzle preheat\nM104 S100 ; preheat extruder to no ooze temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed final temp\nM300 S40 P10 ; Bip\n; Home\nM117 Homing\nG28 ; home all with default mesh bed level\n; For ABL users put G29 for a leveling request\n; Final warmup routine\nM117 Final warmup\nM104 S[nozzle_temperature_initial_layer] ; set extruder final temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder final temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed final temp\nM300 S440 P200; 1st beep for printer ready and allow some time to clean nozzle\nM300 S0 P250; wait between dual beep\nM300 S440 P200; 2nd beep for printer ready\nG4 S10; wait to clean the nozzle\nM300 S440 P200; 3rd beep for ready to start printing\n; Prime line routine\nM117 Printing prime line\n;M900 K0; Disable Linear Advance (Marlin) for prime line\nG92 E0.0; reset extrusion distance\nG1 X-54.672 Y-95.203 Z0.3 F4000; go outside print area\nG92 E0.0; reset extrusion distance\nG1 E2 F1000 ; de-retract and push ooze\nG3 X38.904 Y-102.668 I54.672 J95.105 E20.999\nG3 X54.671 Y-95.203 I-38.815 J102.373 E5.45800\nG92 E0.0\nG1 E-5 F3000 ; retract 5mm\nG1 X52.931 Y-96.185 F1000 ; wipe\nG1 X50.985 Y-97.231 F1000 ; wipe\nG1 X49.018 Y-98.238 F1000 ; wipe\nG1 X0 Y-109.798 F1000\nG1 E4.8 F1500; de-retract\nG92 E0.0 ; reset extrusion distance\n; Final print adjustments\nM117 Preparing to print\n;M82 ; extruder absolute mode\nM221 S{if layer_height<0.075}100{else}95{endif}\nM300 S40 P10 ; chirp\nM117 Print [output_filename_format]; Display: Printing started...", - "machine_end_gcode": "; printing object ENDGCODE\nG92 E0.0 ; prepare to retract\nG1 E-6 F3000; retract to avoid stringing\n; Anti-stringing end wiggle\n{if layer_z < max_print_height}G1 Z{min(layer_z+100, max_print_height)}{endif} F4000 ; Move print head up\nG1 X0 Y120 F3000 ; present print\n; Reset print setting overrides\nG92 E0\nM200 D0 ; disable volumetric e\nM220 S100 ; reset speed factor to 100%\nM221 S100 ; reset extruder factor to 100%\n;M900 K0 ; reset linear acceleration(Marlin)\n; Shut down printer\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM18 S180 ;disable motors after 180s\nM300 S40 P10 ; Bip\nM117 Print finish.", - "scan_first_layer": "0" - } +{ + "type": "machine", + "setting_id": "GM003", + "name": "FLSun QQ-S Pro 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "FLSun QQ-S Pro", + "default_print_profile": "0.20mm Standard @FLSun QQSPro", + "gcode_flavor": "marlin", + "thumbnails": [ + "260x260" + ], + "nozzle_diameter": [ + "0.4" + ], + "printable_area": [ + "129.505x11.3302", + "128.025x22.5743", + "125.57x33.6465", + "122.16x44.4626", + "117.82x54.9404", + "112.583x65", + "106.49x74.5649", + "99.5858x83.5624", + "91.9239x91.9239", + "83.5624x99.5858", + "74.5649x106.49", + "65x112.583", + "54.9404x117.82", + "44.4626x122.16", + "33.6465x125.57", + "22.5743x128.025", + "11.3302x129.505", + "7.9602e-15x130", + "-11.3302x129.505", + "-22.5743x128.025", + "-33.6465x125.57", + "-44.4626x122.16", + "-54.9404x117.82", + "-65x112.583", + "-74.5649x106.49", + "-83.5624x99.5858", + "-91.9239x91.9239", + "-99.5858x83.5624", + "-106.49x74.5649", + "-112.583x65", + "-117.82x54.9404", + "-122.16x44.4626", + "-125.57x33.6465", + "-128.025x22.5743", + "-129.505x11.3302", + "-130x1.59204e-14", + "-129.505x-11.3302", + "-128.025x-22.5743", + "-125.57x-33.6465", + "-122.16x-44.4626", + "-117.82x-54.9404", + "-112.583x-65", + "-106.49x-74.5649", + "-99.5858x-83.5624", + "-91.9239x-91.9239", + "-83.5624x-99.5858", + "-74.5649x-106.49", + "-65x-112.583", + "-54.9404x-117.82", + "-44.4626x-122.16", + "-33.6465x-125.57", + "-22.5743x-128.025", + "-11.3302x-129.505", + "-2.38806e-14x-130", + "11.3302x-129.505", + "22.5743x-128.025", + "33.6465x-125.57", + "44.4626x-122.16", + "54.9404x-117.82", + "65x-112.583", + "74.5649x-106.49", + "83.5624x-99.5858", + "91.9239x-91.9239", + "99.5858x-83.5624", + "106.49x-74.5649", + "112.583x-65", + "117.82x-54.9404", + "122.16x-44.4626", + "125.57x-33.6465", + "128.025x-22.5743", + "129.505x-11.3302", + "130x-3.18408e-14" + ], + "printable_height": "360", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "machine_max_acceleration_e": [ + "3000", + "800" + ], + "machine_max_acceleration_extruding": [ + "1500", + "800" + ], + "machine_max_acceleration_retracting": [ + "2000", + "800" + ], + "machine_max_acceleration_travel": [ + "1500", + "800" + ], + "machine_max_acceleration_x": [ + "1500", + "800" + ], + "machine_max_acceleration_y": [ + "1500", + "800" + ], + "machine_max_acceleration_z": [ + "1500", + "800" + ], + "machine_max_speed_e": [ + "60", + "30" + ], + "machine_max_speed_x": [ + "200", + "150" + ], + "machine_max_speed_y": [ + "200", + "150" + ], + "machine_max_speed_z": [ + "200", + "150" + ], + "machine_max_jerk_e": [ + "5", + "5" + ], + "machine_max_jerk_x": [ + "5", + "10" + ], + "machine_max_jerk_y": [ + "5", + "10" + ], + "machine_max_jerk_z": [ + "5", + "10" + ], + "max_layer_height": [ + "0.32" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "FLSun", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "70%" + ], + "retraction_length": [ + "5" + ], + "retract_length_toolchange": [ + "1" + ], + "retraction_speed": [ + "30" + ], + "deretraction_speed": [ + "40" + ], + "single_extruder_multi_material": "1", + "change_filament_gcode": "", + "machine_pause_gcode": "M400 U1\n", + "default_filament_profile": [ + "FLSun Generic PLA" + ], + "machine_start_gcode": ";STARTGCODE\nM117 Initializing\n; Set coordinate modes\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; Reset speed and extrusion rates\nM200 D0 ; disable volumetric E\nM220 S100 ; reset speed\n; Set initial warmup temps\nM117 Nozzle preheat\nM104 S100 ; preheat extruder to no ooze temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed final temp\nM300 S40 P10 ; Bip\n; Home\nM117 Homing\nG28 ; home all with default mesh bed level\n; For ABL users put G29 for a leveling request\n; Final warmup routine\nM117 Final warmup\nM104 S[nozzle_temperature_initial_layer] ; set extruder final temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder final temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed final temp\nM300 S440 P200; 1st beep for printer ready and allow some time to clean nozzle\nM300 S0 P250; wait between dual beep\nM300 S440 P200; 2nd beep for printer ready\nG4 S10; wait to clean the nozzle\nM300 S440 P200; 3rd beep for ready to start printing\n; Prime line routine\nM117 Printing prime line\n;M900 K0; Disable Linear Advance (Marlin) for prime line\nG92 E0.0; reset extrusion distance\nG1 X-54.672 Y-95.203 Z0.3 F4000; go outside print area\nG92 E0.0; reset extrusion distance\nG1 E2 F1000 ; de-retract and push ooze\nG3 X38.904 Y-102.668 I54.672 J95.105 E20.999\nG3 X54.671 Y-95.203 I-38.815 J102.373 E5.45800\nG92 E0.0\nG1 E-5 F3000 ; retract 5mm\nG1 X52.931 Y-96.185 F1000 ; wipe\nG1 X50.985 Y-97.231 F1000 ; wipe\nG1 X49.018 Y-98.238 F1000 ; wipe\nG1 X0 Y-109.798 F1000\nG1 E4.8 F1500; de-retract\nG92 E0.0 ; reset extrusion distance\n; Final print adjustments\nM117 Preparing to print\n;M82 ; extruder absolute mode\nM221 S{if layer_height<0.075}100{else}95{endif}\nM300 S40 P10 ; chirp\nM117 Print [output_filename_format]; Display: Printing started...", + "machine_end_gcode": "; printing object ENDGCODE\nG92 E0.0 ; prepare to retract\nG1 E-6 F3000; retract to avoid stringing\n; Anti-stringing end wiggle\n{if layer_z < max_print_height}G1 Z{min(layer_z+100, max_print_height)}{endif} F4000 ; Move print head up\nG1 X0 Y120 F3000 ; present print\n; Reset print setting overrides\nG92 E0\nM200 D0 ; disable volumetric e\nM220 S100 ; reset speed factor to 100%\nM221 S100 ; reset extruder factor to 100%\n;M900 K0 ; reset linear acceleration(Marlin)\n; Shut down printer\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM18 S180 ;disable motors after 180s\nM300 S40 P10 ; Bip\nM117 Print finish.", + "scan_first_layer": "0" + } \ No newline at end of file diff --git a/resources/profiles/FLSun/machine/FLSun QQ-S Pro.json b/resources/profiles/FLSun/machine/FLSun QQ-S Pro.json index eaf0dac196d..e74a8a6f3a8 100644 --- a/resources/profiles/FLSun/machine/FLSun QQ-S Pro.json +++ b/resources/profiles/FLSun/machine/FLSun QQ-S Pro.json @@ -1,12 +1,12 @@ -{ - "type": "machine_model", - "name": "FLSun QQ-S Pro", - "model_id": "FLSun-QQS-Pro", - "nozzle_diameter": "0.4", - "machine_tech": "FFF", - "family": "FLSun", - "bed_model": "flsun_qqspro_buildplate_model.stl", - "bed_texture": "flsun_qqspro_buildplate_texture.png", - "hotend_model": "", - "default_materials": "FLSun Generic ABS;FLSun Generic PLA;FLSun Generic PLA-CF;FLSun Generic PETG;FLSun Generic TPU;FLSun Generic ASA;FLSun Generic PC;FLSun Generic PVA;FLSun Generic PA;FLSun Generic PA-CF" -} +{ + "type": "machine_model", + "name": "FLSun QQ-S Pro", + "model_id": "FLSun-QQS-Pro", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "FLSun", + "bed_model": "flsun_qqspro_buildplate_model.stl", + "bed_texture": "flsun_qqspro_buildplate_texture.png", + "hotend_model": "", + "default_materials": "FLSun Generic ABS;FLSun Generic PLA;FLSun Generic PLA-CF;FLSun Generic PETG;FLSun Generic TPU;FLSun Generic ASA;FLSun Generic PC;FLSun Generic PVA;FLSun Generic PA;FLSun Generic PA-CF" +} diff --git a/resources/profiles/FLSun/machine/FLSun S1 0.4 nozzle.json b/resources/profiles/FLSun/machine/FLSun S1 0.4 nozzle.json new file mode 100644 index 00000000000..940d7a6530c --- /dev/null +++ b/resources/profiles/FLSun/machine/FLSun S1 0.4 nozzle.json @@ -0,0 +1,100 @@ +{ + "type": "machine", + "setting_id": "GM003", + "name": "FLSun S1 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "FLSun S1", + "default_print_profile": "0.20mm PLA_HS_S1_FLSUN @FLSUN", + "gcode_flavor": "klipper", + "nozzle_diameter": [ + "0.4" + ], + "bed_exclude_area": [ + "0x0" + ], + "printable_area": [ + "159.392x13.945", + "157.57x27.7838", + "154.549x41.4112", + "150.351x54.7234", + "145.01x67.6191", + "138.564x80.0002", + "131.065x91.7725", + "122.567x102.846", + "113.137x113.137", + "102.846x122.567", + "91.7725x131.065", + "80.0003x138.564", + "67.6191x145.01", + "54.7234x150.351", + "41.4112x154.549", + "27.7838x157.57", + "13.945x159.392", + "9.79721e-15x160", + "-13.945x159.392", + "-27.7838x157.57", + "-41.4112x154.549", + "-54.7234x150.351", + "-67.6191x145.01", + "-80.0002x138.564", + "-91.7725x131.065", + "-102.846x122.567", + "-113.137x113.137", + "-122.567x102.846", + "-131.065x91.7725", + "-138.564x80.0003", + "-145.01x67.6191", + "-150.351x54.7234", + "-154.549x41.4112", + "-157.57x27.7838", + "-159.392x13.945", + "-160x1.95944e-14", + "-159.392x-13.945", + "-157.57x-27.7838", + "-154.549x-41.4112", + "-150.351x-54.7234", + "-145.01x-67.6191", + "-138.564x-80.0003", + "-131.065x-91.7725", + "-122.567x-102.846", + "-113.137x-113.137", + "-102.846x-122.567", + "-91.7725x-131.065", + "-80.0003x-138.564", + "-67.6191x-145.01", + "-54.7234x-150.351", + "-41.4112x-154.549", + "-27.7838x-157.57", + "-13.945x-159.392", + "-2.93916e-14x-160", + "13.945x-159.392", + "27.7838x-157.57", + "41.4112x-154.549", + "54.7234x-150.351", + "67.6191x-145.01", + "80.0002x-138.564", + "91.7725x-131.065", + "102.846x-122.567", + "113.137x-113.137", + "122.567x-102.846", + "131.065x-91.7725", + "138.564x-80.0002", + "145.01x-67.6191", + "150.351x-54.7234", + "154.549x-41.4112", + "157.57x-27.7838", + "159.392x-13.945", + "160x-3.91888e-14" + ], + "printable_height": "430", + "machine_end_gcode": "M107 T0\nM104 S0\nM104 S0 T1\nM140 S0\nG92 E0\nG91\nG1 Z+0.5 F6000\nG28 \nG90 ;absolute positioning", + "machine_start_gcode": "G21\nG90\nM82\nG28 ; home all axes\nM140 S[first_layer_bed_temperature] is_AB\nM104 S[first_layer_temperature] T0\nG1 F3000 Z1\nG1 X-155 Y0 Z0.4\nM107 T0\nM109 S[first_layer_temperature] T0\nM190 S[first_layer_bed_temperature] is_AB\nG92 E0\nG3 X0 Y-155 I155 Z0.3 E30 F2000\nG92 E0\nSET_TMC_CURRENT STEPPER=extruder CURRENT=0.8", + "layer_change_gcode": "", + "machine_pause_gcode": "M600", + "scan_first_layer": "0", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0" +} + diff --git a/resources/profiles/FLSun/machine/FLSun S1.json b/resources/profiles/FLSun/machine/FLSun S1.json new file mode 100644 index 00000000000..bb824ef9068 --- /dev/null +++ b/resources/profiles/FLSun/machine/FLSun S1.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "FLSun S1", + "model_id": "FLSun_S1", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "FLSun", + "bed_model": "flsun_s1_buildplate_model.stl", + "bed_texture": "flsun_s1_buildplate_texture.svg", + "hotend_model": "", + "default_materials": "FLSun Generic PLA-HS-S1" +} diff --git a/resources/profiles/FLSun/machine/FLSun SR 0.4 nozzle.json b/resources/profiles/FLSun/machine/FLSun SR 0.4 nozzle.json index 2bae873ef6a..67b444d317f 100644 --- a/resources/profiles/FLSun/machine/FLSun SR 0.4 nozzle.json +++ b/resources/profiles/FLSun/machine/FLSun SR 0.4 nozzle.json @@ -1,238 +1,238 @@ -{ - "type": "machine", - "setting_id": "GM003", - "name": "FLSun Super Racer 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "printer_model": "FLSun Super Racer (SR)", - "default_print_profile": "0.20mm Standard @FLSun SR", - "gcode_flavor": "marlin", - "nozzle_diameter": [ - "0.4" - ], - "nozzle_type": "brass", - "default_filament_profile": [ - "FLSun Generic PLA" - ], - "bed_exclude_area": [ - "0x0" - ], - "auxiliary_fan": "0", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]", - "change_filament_gcode": ";FILAMENT_CHANGE\nM600", - "deretraction_speed": [ - "40" - ], - "extruder_clearance_height_to_lid": "140", - "extruder_clearance_height_to_rod": "36", - "extruder_clearance_radius": "65", - "machine_end_gcode": "; printing object ENDGCODE\nG92 E0.0 ; prepare to retract\nG1 E-6 F3000; retract to avoid stringing\n; Anti-stringing end wiggle\n{if layer_z < max_print_height}G1 Z{min(layer_z+100, max_print_height)}{endif} F4000 ; Move print head up\nG1 X0 Y120 F3000 ; present print\n; Reset print setting overrides\nG92 E0\nM200 D0 ; disable volumetric e\nM220 S100 ; reset speed factor to 100%\nM221 S100 ; reset extruder factor to 100%\n;M900 K0 ; reset linear acceleration(Marlin)\n; Shut down printer\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM18 S180 ;disable motors after 180s\nM300 S40 P10 ; Bip\nM117 Print finish.", - "machine_max_acceleration_e": [ - "5000", - "5000" - ], - "machine_max_acceleration_extruding": [ - "5000", - "2000" - ], - "machine_max_acceleration_retracting": [ - "5000", - "5000" - ], - "machine_max_acceleration_travel": [ - "3000", - "3000" - ], - "machine_max_acceleration_x": [ - "5000", - "2000" - ], - "machine_max_acceleration_y": [ - "5000", - "2000" - ], - "machine_max_acceleration_z": [ - "1500", - "200" - ], - "machine_max_jerk_e": [ - "2.5", - "2.5" - ], - "machine_max_jerk_x": [ - "9", - "9" - ], - "machine_max_jerk_y": [ - "9", - "9" - ], - "machine_max_jerk_z": [ - "3", - "0.4" - ], - "machine_max_speed_e": [ - "30", - "25" - ], - "machine_max_speed_x": [ - "300", - "200" - ], - "machine_max_speed_y": [ - "300", - "200" - ], - "machine_max_speed_z": [ - "20", - "12" - ], - "machine_min_extruding_rate": [ - "0", - "0" - ], - "machine_min_travel_rate": [ - "0", - "0" - ], - "machine_pause_gcode": "M600", - "machine_start_gcode": ";STARTGCODE\nM117 Initializing\n; Set coordinate modes\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; Reset speed and extrusion rates\nM200 D0 ; disable volumetric E\nM220 S100 ; reset speed\n; Set initial warmup temps\nM117 Nozzle preheat\nM104 S100 ; preheat extruder to no ooze temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed final temp\nM300 S40 P10 ; Bip\n; Home\nM117 Homing\nG28 ; home all with default mesh bed level\n; For ABL users put G29 for a leveling request\n; Final warmup routine\nM117 Final warmup\nM104 S[first_layer_temperature] ; set extruder final temp\nM109 S[first_layer_temperature] ; wait for extruder final temp\nM190 S[first_layer_bed_temperature] ; wait for bed final temp\nM300 S440 P200 ; 1st beep for printer ready and allow some time to clean nozzle\nM300 S0 P250 ; wait between dual beep\nM300 S440 P200 ; 2nd beep for printer ready\nG4 S10 ; wait to clean the nozzle\nM300 S440 P200 ; 3rd beep for ready to start printing\n; Prime line routine\nM117 Printing prime line\n;M900 K0; Disable Linear Advance (Marlin) for prime line\nG92 E0.0; reset extrusion distance\nG1 F3000 Z1\nG1 X-150 Y0 Z0.4\nG92 E0\nG3 X0 Y-130 I150 Z0.3 E30 F2000\nG92 E0.0 ; reset extrusion distance\n; Final print adjustments\nM117 Preparing to print\n;M82 ; extruder absolute mode\nM221 S{if layer_height<0.075}100{else}95{endif}\nM300 S40 P10 ; chirp\nM117 Print [input_filename_base]; Display: Printing started...", - "machine_unload_filament_time": "0", - "max_layer_height": [ - "0.2" - ], - "min_layer_height": [ - "0.08" - ], - "printable_area": [ - "134.486x11.766", - "132.949x23.4425", - "130.4x34.9406", - "126.859x46.1727", - "122.352x57.0535", - "116.913x67.5", - "110.586x77.4328", - "103.416x86.7763", - "95.4594x95.4594", - "86.7763x103.416", - "77.4328x110.586", - "67.5x116.913", - "57.0535x122.352", - "46.1727x126.859", - "34.9406x130.4", - "23.4425x132.949", - "11.766x134.486", - "8.26637e-15x135", - "-11.766x134.486", - "-23.4425x132.949", - "-34.9406x130.4", - "-46.1727x126.859", - "-57.0535x122.352", - "-67.5x116.913", - "-77.4328x110.586", - "-86.7763x103.416", - "-95.4594x95.4594", - "-103.416x86.7763", - "-110.586x77.4328", - "-116.913x67.5", - "-122.352x57.0535", - "-126.859x46.1727", - "-130.4x34.9406", - "-132.949x23.4425", - "-134.486x11.766", - "-135x1.65327e-14", - "-134.486x-11.766", - "-132.949x-23.4425", - "-130.4x-34.9406", - "-126.859x-46.1727", - "-122.352x-57.0535", - "-116.913x-67.5", - "-110.586x-77.4328", - "-103.416x-86.7763", - "-95.4594x-95.4594", - "-86.7763x-103.416", - "-77.4328x-110.586", - "-67.5x-116.913", - "-57.0535x-122.352", - "-46.1727x-126.859", - "-34.9406x-130.4", - "-23.4425x-132.949", - "-11.766x-134.486", - "-2.47991e-14x-135", - "11.766x-134.486", - "23.4425x-132.949", - "34.9406x-130.4", - "46.1727x-126.859", - "57.0535x-122.352", - "67.5x-116.913", - "77.4328x-110.586", - "86.7763x-103.416", - "95.4594x-95.4594", - "103.416x-86.7763", - "110.586x-77.4328", - "116.913x-67.5", - "122.352x-57.0535", - "126.859x-46.1727", - "130.4x-34.9406", - "132.949x-23.4425", - "134.486x-11.766", - "135x-3.30655e-14" - ], - "printable_height": "330", - "printer_technology": "FFF", - "printer_variant": "0.4", - "printhost_apikey": "", - "printhost_authorization_type": "key", - "printhost_cafile": "", - "printhost_password": "", - "printhost_port": "", - "printhost_ssl_ignore_revoke": "0", - "printhost_user": "", - "retract_before_wipe": [ - "70%" - ], - "retract_length_toolchange": [ - "2" - ], - "retract_lift_above": [ - "0" - ], - "retract_lift_below": [ - "0" - ], - "retract_restart_extra": [ - "0" - ], - "retract_restart_extra_toolchange": [ - "0" - ], - "retract_when_changing_layer": [ - "1" - ], - "retraction_length": [ - "6.5" - ], - "retraction_minimum_travel": [ - "1" - ], - "retraction_speed": [ - "40" - ], - "template_custom_gcode": ";FILAMENT_CHANGE\nM600", - "thumbnails": [ - "260x260" - ], - "wipe": [ - "1" - ], - "wipe_distance": [ - "1" - ], - "z_hop": [ - "0.3" - ], - "z_hop_types": [ - "Normal Lift" - ] +{ + "type": "machine", + "setting_id": "GM003", + "name": "FLSun Super Racer 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "FLSun Super Racer (SR)", + "default_print_profile": "0.20mm Standard @FLSun SR", + "gcode_flavor": "marlin", + "nozzle_diameter": [ + "0.4" + ], + "nozzle_type": "brass", + "default_filament_profile": [ + "FLSun Generic PLA" + ], + "bed_exclude_area": [ + "0x0" + ], + "auxiliary_fan": "0", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]", + "change_filament_gcode": ";FILAMENT_CHANGE\nM600", + "deretraction_speed": [ + "40" + ], + "extruder_clearance_height_to_lid": "140", + "extruder_clearance_height_to_rod": "36", + "extruder_clearance_radius": "65", + "machine_end_gcode": "; printing object ENDGCODE\nG92 E0.0 ; prepare to retract\nG1 E-6 F3000; retract to avoid stringing\n; Anti-stringing end wiggle\n{if layer_z < max_print_height}G1 Z{min(layer_z+100, max_print_height)}{endif} F4000 ; Move print head up\nG1 X0 Y120 F3000 ; present print\n; Reset print setting overrides\nG92 E0\nM200 D0 ; disable volumetric e\nM220 S100 ; reset speed factor to 100%\nM221 S100 ; reset extruder factor to 100%\n;M900 K0 ; reset linear acceleration(Marlin)\n; Shut down printer\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM18 S180 ;disable motors after 180s\nM300 S40 P10 ; Bip\nM117 Print finish.", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "5000", + "2000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "3000", + "3000" + ], + "machine_max_acceleration_x": [ + "5000", + "2000" + ], + "machine_max_acceleration_y": [ + "5000", + "2000" + ], + "machine_max_acceleration_z": [ + "1500", + "200" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "9", + "9" + ], + "machine_max_jerk_y": [ + "9", + "9" + ], + "machine_max_jerk_z": [ + "3", + "0.4" + ], + "machine_max_speed_e": [ + "30", + "25" + ], + "machine_max_speed_x": [ + "300", + "200" + ], + "machine_max_speed_y": [ + "300", + "200" + ], + "machine_max_speed_z": [ + "20", + "12" + ], + "machine_min_extruding_rate": [ + "0", + "0" + ], + "machine_min_travel_rate": [ + "0", + "0" + ], + "machine_pause_gcode": "M600", + "machine_start_gcode": ";STARTGCODE\nM117 Initializing\n; Set coordinate modes\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; Reset speed and extrusion rates\nM200 D0 ; disable volumetric E\nM220 S100 ; reset speed\n; Set initial warmup temps\nM117 Nozzle preheat\nM104 S100 ; preheat extruder to no ooze temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed final temp\nM300 S40 P10 ; Bip\n; Home\nM117 Homing\nG28 ; home all with default mesh bed level\n; For ABL users put G29 for a leveling request\n; Final warmup routine\nM117 Final warmup\nM104 S[first_layer_temperature] ; set extruder final temp\nM109 S[first_layer_temperature] ; wait for extruder final temp\nM190 S[first_layer_bed_temperature] ; wait for bed final temp\nM300 S440 P200 ; 1st beep for printer ready and allow some time to clean nozzle\nM300 S0 P250 ; wait between dual beep\nM300 S440 P200 ; 2nd beep for printer ready\nG4 S10 ; wait to clean the nozzle\nM300 S440 P200 ; 3rd beep for ready to start printing\n; Prime line routine\nM117 Printing prime line\n;M900 K0; Disable Linear Advance (Marlin) for prime line\nG92 E0.0; reset extrusion distance\nG1 F3000 Z1\nG1 X-150 Y0 Z0.4\nG92 E0\nG3 X0 Y-130 I150 Z0.3 E30 F2000\nG92 E0.0 ; reset extrusion distance\n; Final print adjustments\nM117 Preparing to print\n;M82 ; extruder absolute mode\nM221 S{if layer_height<0.075}100{else}95{endif}\nM300 S40 P10 ; chirp\nM117 Print [input_filename_base]; Display: Printing started...", + "machine_unload_filament_time": "0", + "max_layer_height": [ + "0.2" + ], + "min_layer_height": [ + "0.08" + ], + "printable_area": [ + "134.486x11.766", + "132.949x23.4425", + "130.4x34.9406", + "126.859x46.1727", + "122.352x57.0535", + "116.913x67.5", + "110.586x77.4328", + "103.416x86.7763", + "95.4594x95.4594", + "86.7763x103.416", + "77.4328x110.586", + "67.5x116.913", + "57.0535x122.352", + "46.1727x126.859", + "34.9406x130.4", + "23.4425x132.949", + "11.766x134.486", + "8.26637e-15x135", + "-11.766x134.486", + "-23.4425x132.949", + "-34.9406x130.4", + "-46.1727x126.859", + "-57.0535x122.352", + "-67.5x116.913", + "-77.4328x110.586", + "-86.7763x103.416", + "-95.4594x95.4594", + "-103.416x86.7763", + "-110.586x77.4328", + "-116.913x67.5", + "-122.352x57.0535", + "-126.859x46.1727", + "-130.4x34.9406", + "-132.949x23.4425", + "-134.486x11.766", + "-135x1.65327e-14", + "-134.486x-11.766", + "-132.949x-23.4425", + "-130.4x-34.9406", + "-126.859x-46.1727", + "-122.352x-57.0535", + "-116.913x-67.5", + "-110.586x-77.4328", + "-103.416x-86.7763", + "-95.4594x-95.4594", + "-86.7763x-103.416", + "-77.4328x-110.586", + "-67.5x-116.913", + "-57.0535x-122.352", + "-46.1727x-126.859", + "-34.9406x-130.4", + "-23.4425x-132.949", + "-11.766x-134.486", + "-2.47991e-14x-135", + "11.766x-134.486", + "23.4425x-132.949", + "34.9406x-130.4", + "46.1727x-126.859", + "57.0535x-122.352", + "67.5x-116.913", + "77.4328x-110.586", + "86.7763x-103.416", + "95.4594x-95.4594", + "103.416x-86.7763", + "110.586x-77.4328", + "116.913x-67.5", + "122.352x-57.0535", + "126.859x-46.1727", + "130.4x-34.9406", + "132.949x-23.4425", + "134.486x-11.766", + "135x-3.30655e-14" + ], + "printable_height": "330", + "printer_technology": "FFF", + "printer_variant": "0.4", + "printhost_apikey": "", + "printhost_authorization_type": "key", + "printhost_cafile": "", + "printhost_password": "", + "printhost_port": "", + "printhost_ssl_ignore_revoke": "0", + "printhost_user": "", + "retract_before_wipe": [ + "70%" + ], + "retract_length_toolchange": [ + "2" + ], + "retract_lift_above": [ + "0" + ], + "retract_lift_below": [ + "0" + ], + "retract_restart_extra": [ + "0" + ], + "retract_restart_extra_toolchange": [ + "0" + ], + "retract_when_changing_layer": [ + "1" + ], + "retraction_length": [ + "6.5" + ], + "retraction_minimum_travel": [ + "1" + ], + "retraction_speed": [ + "40" + ], + "template_custom_gcode": ";FILAMENT_CHANGE\nM600", + "thumbnails": [ + "260x260" + ], + "wipe": [ + "1" + ], + "wipe_distance": [ + "1" + ], + "z_hop": [ + "0.3" + ], + "z_hop_types": [ + "Normal Lift" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/machine/FLSun SR.json b/resources/profiles/FLSun/machine/FLSun SR.json index 6e85731d28f..92e29acc48b 100644 --- a/resources/profiles/FLSun/machine/FLSun SR.json +++ b/resources/profiles/FLSun/machine/FLSun SR.json @@ -1,12 +1,12 @@ -{ - "type": "machine_model", - "name": "FLSun Super Racer (SR)", - "model_id": "FLSun_Super_Racer", - "nozzle_diameter": "0.4", - "machine_tech": "FFF", - "family": "FLSun", - "bed_model": "flsun_SR_buildplate_model.stl", - "bed_texture": "flsun_SR_buildplate_texture.svg", - "hotend_model": "", - "default_materials": "FLSun Generic ABS;FLSun Generic PLA;FLSun Generic PLA-CF;FLSun Generic PETG;FLSun Generic TPU;FLSun Generic ASA;FLSun Generic PC;FLSun Generic PVA;FLSun Generic PA;FLSun Generic PA-CF" +{ + "type": "machine_model", + "name": "FLSun Super Racer (SR)", + "model_id": "FLSun_Super_Racer", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "FLSun", + "bed_model": "flsun_SR_buildplate_model.stl", + "bed_texture": "flsun_SR_buildplate_texture.svg", + "hotend_model": "", + "default_materials": "FLSun Generic ABS;FLSun Generic PLA;FLSun Generic PLA-CF;FLSun Generic PETG;FLSun Generic TPU;FLSun Generic ASA;FLSun Generic PC;FLSun Generic PVA;FLSun Generic PA;FLSun Generic PA-CF" } \ No newline at end of file diff --git a/resources/profiles/FLSun/machine/FLSun T1 0.4 nozzle.json b/resources/profiles/FLSun/machine/FLSun T1 0.4 nozzle.json new file mode 100644 index 00000000000..fe098bd2bc4 --- /dev/null +++ b/resources/profiles/FLSun/machine/FLSun T1 0.4 nozzle.json @@ -0,0 +1,100 @@ +{ + "type": "machine", + "setting_id": "GM003", + "name": "FLSun T1 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "FLSun T1", + "default_print_profile": "0.20mm PLA_HS_T1_FLSUN @FLSUN", + "gcode_flavor": "klipper", + "nozzle_diameter": [ + "0.4" + ], + "bed_exclude_area": [ + "0x0" + ], + "printable_area": [ + "129.505x11.3302", + "128.025x22.5743", + "125.57x33.6465", + "122.16x44.4626", + "117.82x54.9404", + "112.583x65", + "106.49x74.5649", + "99.5858x83.5624", + "91.9239x91.9239", + "83.5624x99.5858", + "74.5649x106.49", + "65x112.583", + "54.9404x117.82", + "44.4626x122.16", + "33.6465x125.57", + "22.5743x128.025", + "11.3302x129.505", + "7.9602e-15x130", + "-11.3302x129.505", + "-22.5743x128.025", + "-33.6465x125.57", + "-44.4626x122.16", + "-54.9404x117.82", + "-65x112.583", + "-74.5649x106.49", + "-83.5624x99.5858", + "-91.9239x91.9239", + "-99.5858x83.5624", + "-106.49x74.5649", + "-112.583x65", + "-117.82x54.9404", + "-122.16x44.4626", + "-125.57x33.6465", + "-128.025x22.5743", + "-129.505x11.3302", + "-130x1.59204e-14", + "-129.505x-11.3302", + "-128.025x-22.5743", + "-125.57x-33.6465", + "-122.16x-44.4626", + "-117.82x-54.9404", + "-112.583x-65", + "-106.49x-74.5649", + "-99.5858x-83.5624", + "-91.9239x-91.9239", + "-83.5624x-99.5858", + "-74.5649x-106.49", + "-65x-112.583", + "-54.9404x-117.82", + "-44.4626x-122.16", + "-33.6465x-125.57", + "-22.5743x-128.025", + "-11.3302x-129.505", + "-2.38806e-14x-130", + "11.3302x-129.505", + "22.5743x-128.025", + "33.6465x-125.57", + "44.4626x-122.16", + "54.9404x-117.82", + "65x-112.583", + "74.5649x-106.49", + "83.5624x-99.5858", + "91.9239x-91.9239", + "99.5858x-83.5624", + "106.49x-74.5649", + "112.583x-65", + "117.82x-54.9404", + "122.16x-44.4626", + "125.57x-33.6465", + "128.025x-22.5743", + "129.505x-11.3302", + "130x-3.18408e-14" + ], + "printable_height": "330", + "machine_end_gcode": "M107 T0\nM104 S0\nM104 S0 T1\nM140 S0\nG92 E0\nG91\nG1 Z+0.5 F6000\nG28 \nG90 ;absolute positioning\nTIMELAPSE_RENDER", + "machine_start_gcode": "G21\nG90\nM82\nG28 ; home all axes\nM140 S[first_layer_bed_temperature]\nM104 S[first_layer_temperature] T0\nG1 F3000 Z1\nG1 X-125 Y0 Z0.4\nM109 S[first_layer_temperature] T0\nM190 S[first_layer_bed_temperature]\nM107 T0\nG92 E0\nG3 X0 Y-125 I125 Z0.3 E30 F2000\nG92 E0\nSET_TMC_CURRENT STEPPER=extruder CURRENT=0.8", + "layer_change_gcode": "", + "machine_pause_gcode": "M600", + "scan_first_layer": "0", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0" +} + diff --git a/resources/profiles/FLSun/machine/FLSun T1.json b/resources/profiles/FLSun/machine/FLSun T1.json new file mode 100644 index 00000000000..65ea1a37375 --- /dev/null +++ b/resources/profiles/FLSun/machine/FLSun T1.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "FLSun T1", + "model_id": "FLSun_T1", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "FLSun", + "bed_model": "flsun_T1_buildplate_model.stl", + "bed_texture": "flsun_T1_buildplate_texture.svg", + "hotend_model": "", + "default_materials": "FLSun Generic PLA-HS-T1" +} diff --git a/resources/profiles/FLSun/machine/FLSun V400 0.4 nozzle.json b/resources/profiles/FLSun/machine/FLSun V400 0.4 nozzle.json index 98c26efe898..795d2398edb 100644 --- a/resources/profiles/FLSun/machine/FLSun V400 0.4 nozzle.json +++ b/resources/profiles/FLSun/machine/FLSun V400 0.4 nozzle.json @@ -1,100 +1,100 @@ -{ - "type": "machine", - "setting_id": "GM003", - "name": "FLSun V400 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "printer_model": "FLSun V400", - "default_print_profile": "0.20mm Standard @FLSun V400", - "gcode_flavor": "klipper", - "nozzle_diameter": [ - "0.4" - ], - "bed_exclude_area": [ - "0x0" - ], - "printable_area": [ - "149.429x13.0734", - "147.721x26.0472", - "144.889x38.8229", - "140.954x51.303", - "135.946x63.3927", - "129.904x75", - "122.873x86.0365", - "114.907x96.4181", - "106.066x106.066", - "96.4181x114.907", - "86.0365x122.873", - "75x129.904", - "63.3927x135.946", - "51.303x140.954", - "38.8229x144.889", - "26.0472x147.721", - "13.0734x149.429", - "9.18485e-15x150", - "-13.0734x149.429", - "-26.0472x147.721", - "-38.8229x144.889", - "-51.303x140.954", - "-63.3927x135.946", - "-75x129.904", - "-86.0365x122.873", - "-96.4181x114.907", - "-106.066x106.066", - "-114.907x96.4181", - "-122.873x86.0365", - "-129.904x75", - "-135.946x63.3927", - "-140.954x51.303", - "-144.889x38.8229", - "-147.721x26.0472", - "-149.429x13.0734", - "-150x1.83697e-14", - "-149.429x-13.0734", - "-147.721x-26.0472", - "-144.889x-38.8229", - "-140.954x-51.303", - "-135.946x-63.3927", - "-129.904x-75", - "-122.873x-86.0365", - "-114.907x-96.4181", - "-106.066x-106.066", - "-96.4181x-114.907", - "-86.0365x-122.873", - "-75x-129.904", - "-63.3927x-135.946", - "-51.303x-140.954", - "-38.8229x-144.889", - "-26.0472x-147.721", - "-13.0734x-149.429", - "-2.75546e-14x-150", - "13.0734x-149.429", - "26.0472x-147.721", - "38.8229x-144.889", - "51.303x-140.954", - "63.3927x-135.946", - "75x-129.904", - "86.0365x-122.873", - "96.4181x-114.907", - "106.066x-106.066", - "114.907x-96.4181", - "122.873x-86.0365", - "129.904x-75", - "135.946x-63.3927", - "140.954x-51.303", - "144.889x-38.8229", - "147.721x-26.0472", - "149.429x-13.0734", - "150x-3.67394e-14" - ], - "printable_height": "410", - "machine_end_gcode": "M107 T0\nM104 S0\nM104 S0 T1\nM140 S0\nG92 E0\nG91\nG1 E-1 F300\nG1 Z+0.5 F6000\nG28 \nG90 ;absolute positioning", - "machine_start_gcode": "G21\nG90\nM82\nM107 T0\nM140 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer] T0\nM190 S[bed_temperature_initial_layer_single]\nM109 S[nozzle_temperature_initial_layer] T0\nG28\nG1 F3000 Z1\nG1 X-150 Y0 Z0.4\nG92 E0\nG3 X0 Y-130 I150 Z0.3 E30 F2000\nG92 E0", - "layer_change_gcode": "", - "machine_pause_gcode": "PAUSE", - "scan_first_layer": "0", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0" - } - +{ + "type": "machine", + "setting_id": "GM003", + "name": "FLSun V400 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "FLSun V400", + "default_print_profile": "0.20mm Standard @FLSun V400", + "gcode_flavor": "klipper", + "nozzle_diameter": [ + "0.4" + ], + "bed_exclude_area": [ + "0x0" + ], + "printable_area": [ + "149.429x13.0734", + "147.721x26.0472", + "144.889x38.8229", + "140.954x51.303", + "135.946x63.3927", + "129.904x75", + "122.873x86.0365", + "114.907x96.4181", + "106.066x106.066", + "96.4181x114.907", + "86.0365x122.873", + "75x129.904", + "63.3927x135.946", + "51.303x140.954", + "38.8229x144.889", + "26.0472x147.721", + "13.0734x149.429", + "9.18485e-15x150", + "-13.0734x149.429", + "-26.0472x147.721", + "-38.8229x144.889", + "-51.303x140.954", + "-63.3927x135.946", + "-75x129.904", + "-86.0365x122.873", + "-96.4181x114.907", + "-106.066x106.066", + "-114.907x96.4181", + "-122.873x86.0365", + "-129.904x75", + "-135.946x63.3927", + "-140.954x51.303", + "-144.889x38.8229", + "-147.721x26.0472", + "-149.429x13.0734", + "-150x1.83697e-14", + "-149.429x-13.0734", + "-147.721x-26.0472", + "-144.889x-38.8229", + "-140.954x-51.303", + "-135.946x-63.3927", + "-129.904x-75", + "-122.873x-86.0365", + "-114.907x-96.4181", + "-106.066x-106.066", + "-96.4181x-114.907", + "-86.0365x-122.873", + "-75x-129.904", + "-63.3927x-135.946", + "-51.303x-140.954", + "-38.8229x-144.889", + "-26.0472x-147.721", + "-13.0734x-149.429", + "-2.75546e-14x-150", + "13.0734x-149.429", + "26.0472x-147.721", + "38.8229x-144.889", + "51.303x-140.954", + "63.3927x-135.946", + "75x-129.904", + "86.0365x-122.873", + "96.4181x-114.907", + "106.066x-106.066", + "114.907x-96.4181", + "122.873x-86.0365", + "129.904x-75", + "135.946x-63.3927", + "140.954x-51.303", + "144.889x-38.8229", + "147.721x-26.0472", + "149.429x-13.0734", + "150x-3.67394e-14" + ], + "printable_height": "410", + "machine_end_gcode": "M107 T0\nM104 S0\nM104 S0 T1\nM140 S0\nG92 E0\nG91\nG1 E-1 F300\nG1 Z+0.5 F6000\nG28 \nG90 ;absolute positioning", + "machine_start_gcode": "G21\nG90\nM82\nM107 T0\nM140 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer] T0\nM190 S[bed_temperature_initial_layer_single]\nM109 S[nozzle_temperature_initial_layer] T0\nG28\nG1 F3000 Z1\nG1 X-150 Y0 Z0.4\nG92 E0\nG3 X0 Y-130 I150 Z0.3 E30 F2000\nG92 E0", + "layer_change_gcode": "", + "machine_pause_gcode": "PAUSE", + "scan_first_layer": "0", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0" + } + diff --git a/resources/profiles/FLSun/machine/FLSun V400.json b/resources/profiles/FLSun/machine/FLSun V400.json index 732b7c87299..a5c79cac654 100644 --- a/resources/profiles/FLSun/machine/FLSun V400.json +++ b/resources/profiles/FLSun/machine/FLSun V400.json @@ -1,12 +1,12 @@ -{ - "type": "machine_model", - "name": "FLSun V400", - "model_id": "FLSun_V400", - "nozzle_diameter": "0.4", - "machine_tech": "FFF", - "family": "FLSun", - "bed_model": "flsun_v400_buildplate_model.stl", - "bed_texture": "flsun_v400_buildplate_texture.svg", - "hotend_model": "", - "default_materials": "FLSun Generic ABS;FLSun Generic PLA;FLSun Generic PLA-CF;FLSun Generic PETG;FLSun Generic TPU;FLSun Generic ASA;FLSun Generic PC;FLSun Generic PVA;FLSun Generic PA;FLSun Generic PA-CF" -} +{ + "type": "machine_model", + "name": "FLSun V400", + "model_id": "FLSun_V400", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "FLSun", + "bed_model": "flsun_v400_buildplate_model.stl", + "bed_texture": "flsun_v400_buildplate_texture.svg", + "hotend_model": "", + "default_materials": "FLSun Generic ABS;FLSun Generic PLA;FLSun Generic PLA-CF;FLSun Generic PETG;FLSun Generic TPU;FLSun Generic ASA;FLSun Generic PC;FLSun Generic PVA;FLSun Generic PA;FLSun Generic PA-CF" +} diff --git a/resources/profiles/FLSun/machine/fdm_machine_common.json b/resources/profiles/FLSun/machine/fdm_machine_common.json index 6f2b40c2a26..3deef99eaa2 100644 --- a/resources/profiles/FLSun/machine/fdm_machine_common.json +++ b/resources/profiles/FLSun/machine/fdm_machine_common.json @@ -1,56 +1,56 @@ -{ - "type": "machine", - "name": "fdm_machine_common", - "from": "system", - "instantiation": "false", - "gcode_flavor": "marlin", - "machine_start_gcode": "", - "machine_end_gcode": "", - "extruder_colour": ["#018001"], - "extruder_offset": ["0x0"], - "machine_max_acceleration_e": ["5000", "5000"], - "machine_max_acceleration_extruding": ["20000", "20000"], - "machine_max_acceleration_retracting": ["5000", "5000"], - "machine_max_acceleration_travel": ["20000", "20000"], - "machine_max_acceleration_x": ["20000", "20000"], - "machine_max_acceleration_y": ["20000", "20000"], - "machine_max_acceleration_z": ["500", "500"], - "machine_max_speed_e": ["30", "30"], - "machine_max_speed_x": ["1000", "1000"], - "machine_max_speed_y": ["1000", "1000"], - "machine_max_speed_z": ["20", "20"], - "machine_max_jerk_e": ["2.5", "2.5"], - "machine_max_jerk_x": ["12", "12"], - "machine_max_jerk_y": ["12", "12"], - "machine_max_jerk_z": ["0.2", "0.4"], - "machine_min_extruding_rate": ["0", "0"], - "machine_min_travel_rate": ["0", "0"], - "max_layer_height": ["0.3"], - "min_layer_height": ["0.08"], - "printable_height": "250", - "extruder_clearance_radius": "65", - "extruder_clearance_height_to_rod": "36", - "extruder_clearance_height_to_lid": "140", - "nozzle_diameter": ["0.4"], - "printer_settings_id": "", - "printer_technology": "FFF", - "printer_variant": "0.4", - "retraction_minimum_travel": ["1"], - "retract_before_wipe": ["70%"], - "retract_when_changing_layer": ["1"], - "retraction_length": ["0.8"], - "retract_length_toolchange": ["2"], - "z_hop": ["0.4"], - "retract_restart_extra": ["0"], - "retract_restart_extra_toolchange": ["0"], - "retraction_speed": ["30"], - "deretraction_speed": ["30"], - "silent_mode": "0", - "single_extruder_multi_material": "1", - "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", - "wipe": ["1"], - "z_hop_types": "Normal Lift" -} +{ + "type": "machine", + "name": "fdm_machine_common", + "from": "system", + "instantiation": "false", + "gcode_flavor": "marlin", + "machine_start_gcode": "", + "machine_end_gcode": "", + "extruder_colour": ["#018001"], + "extruder_offset": ["0x0"], + "machine_max_acceleration_e": ["5000", "5000"], + "machine_max_acceleration_extruding": ["20000", "20000"], + "machine_max_acceleration_retracting": ["5000", "5000"], + "machine_max_acceleration_travel": ["20000", "20000"], + "machine_max_acceleration_x": ["20000", "20000"], + "machine_max_acceleration_y": ["20000", "20000"], + "machine_max_acceleration_z": ["500", "500"], + "machine_max_speed_e": ["30", "30"], + "machine_max_speed_x": ["1000", "1000"], + "machine_max_speed_y": ["1000", "1000"], + "machine_max_speed_z": ["20", "20"], + "machine_max_jerk_e": ["2.5", "2.5"], + "machine_max_jerk_x": ["12", "12"], + "machine_max_jerk_y": ["12", "12"], + "machine_max_jerk_z": ["0.2", "0.4"], + "machine_min_extruding_rate": ["0", "0"], + "machine_min_travel_rate": ["0", "0"], + "max_layer_height": ["0.3"], + "min_layer_height": ["0.08"], + "printable_height": "250", + "extruder_clearance_radius": "65", + "extruder_clearance_height_to_rod": "36", + "extruder_clearance_height_to_lid": "140", + "nozzle_diameter": ["0.4"], + "printer_settings_id": "", + "printer_technology": "FFF", + "printer_variant": "0.4", + "retraction_minimum_travel": ["1"], + "retract_before_wipe": ["70%"], + "retract_when_changing_layer": ["1"], + "retraction_length": ["0.8"], + "retract_length_toolchange": ["2"], + "z_hop": ["0.4"], + "retract_restart_extra": ["0"], + "retract_restart_extra_toolchange": ["0"], + "retraction_speed": ["30"], + "deretraction_speed": ["30"], + "silent_mode": "0", + "single_extruder_multi_material": "1", + "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", + "wipe": ["1"], + "z_hop_types": "Normal Lift" +} diff --git a/resources/profiles/FLSun/process/0.08mm Fine @FLSun Q5.json b/resources/profiles/FLSun/process/0.08mm Fine @FLSun Q5.json index 0fc5f7c5809..ecad68ac1f5 100644 --- a/resources/profiles/FLSun/process/0.08mm Fine @FLSun Q5.json +++ b/resources/profiles/FLSun/process/0.08mm Fine @FLSun Q5.json @@ -1,108 +1,108 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.08mm Fine @FLSun Q5", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.08", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "10", - "bottom_shell_thickness": "0.5", - "bridge_flow": "0.7", - "bridge_speed": "30", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "800", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.2", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "crosshatch", - "initial_layer_acceleration": "800", - "travel_acceleration": "0", - "inner_wall_acceleration": "800", - "initial_layer_line_width": "0.45", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "5", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.06", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "2", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "1.5", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.06", - "support_speed": "60", - "support_threshold_angle": "30", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonicline", - "top_surface_line_width": "0.38", - "top_shell_layers": "12", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "40", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "FLSun Q5 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.08mm Fine @FLSun Q5", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.08", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "10", + "bottom_shell_thickness": "0.5", + "bridge_flow": "0.7", + "bridge_speed": "30", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "800", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.2", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "800", + "travel_acceleration": "0", + "inner_wall_acceleration": "800", + "initial_layer_line_width": "0.45", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "5", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.06", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "1.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.06", + "support_speed": "60", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.38", + "top_shell_layers": "12", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "40", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "FLSun Q5 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.08mm Fine @FLSun QQSPro.json b/resources/profiles/FLSun/process/0.08mm Fine @FLSun QQSPro.json index 8478fbab7af..45686b4bde9 100644 --- a/resources/profiles/FLSun/process/0.08mm Fine @FLSun QQSPro.json +++ b/resources/profiles/FLSun/process/0.08mm Fine @FLSun QQSPro.json @@ -1,108 +1,108 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.08mm Fine @FLSun QQSPro", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.08", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "10", - "bottom_shell_thickness": "0.5", - "bridge_flow": "0.7", - "bridge_speed": "30", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "1500", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.2", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "crosshatch", - "initial_layer_acceleration": "1000", - "travel_acceleration": "0", - "inner_wall_acceleration": "800", - "initial_layer_line_width": "0.45", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "5", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.06", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "2", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "1.5", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.06", - "support_speed": "60", - "support_threshold_angle": "30", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonicline", - "top_surface_line_width": "0.38", - "top_shell_layers": "12", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "40", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "FLSun QQ-S Pro 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.08mm Fine @FLSun QQSPro", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.08", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "10", + "bottom_shell_thickness": "0.5", + "bridge_flow": "0.7", + "bridge_speed": "30", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "1500", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.2", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "0", + "inner_wall_acceleration": "800", + "initial_layer_line_width": "0.45", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "5", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.06", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "1.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.06", + "support_speed": "60", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.38", + "top_shell_layers": "12", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "40", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "FLSun QQ-S Pro 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.08mm Fine @FLSun SR.json b/resources/profiles/FLSun/process/0.08mm Fine @FLSun SR.json index 28fd70266d2..1481b2bb754 100644 --- a/resources/profiles/FLSun/process/0.08mm Fine @FLSun SR.json +++ b/resources/profiles/FLSun/process/0.08mm Fine @FLSun SR.json @@ -1,109 +1,109 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.08mm Fine @FLSun SR", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.08", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "10", - "bottom_shell_thickness": "0.5", - "bridge_flow": "0.7", - "bridge_speed": "30", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "5000", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.2", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "crosshatch", - "initial_layer_acceleration": "3000", - "travel_acceleration": "0", - "inner_wall_acceleration": "3000", - "initial_layer_line_width": "0.45", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "only_one_wall_top": "1", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "5", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.06", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "2", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "1.5", - "support_interface_speed": "70%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.06", - "support_speed": "80", - "support_threshold_angle": "30", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonicline", - "top_surface_line_width": "0.38", - "top_shell_layers": "12", - "top_shell_thickness": "0.8", - "initial_layer_speed": "50%", - "initial_layer_infill_speed": "50%", - "outer_wall_speed": "40", - "inner_wall_speed": "80", - "internal_solid_infill_speed": "40", - "top_surface_speed": "50", - "gap_infill_speed": "50", - "sparse_infill_speed": "100", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "FLSun Super Racer 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.08mm Fine @FLSun SR", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.08", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "10", + "bottom_shell_thickness": "0.5", + "bridge_flow": "0.7", + "bridge_speed": "30", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.2", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "3000", + "travel_acceleration": "0", + "inner_wall_acceleration": "3000", + "initial_layer_line_width": "0.45", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "3", + "only_one_wall_top": "1", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "5", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.06", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "1.5", + "support_interface_speed": "70%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.06", + "support_speed": "80", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.38", + "top_shell_layers": "12", + "top_shell_thickness": "0.8", + "initial_layer_speed": "50%", + "initial_layer_infill_speed": "50%", + "outer_wall_speed": "40", + "inner_wall_speed": "80", + "internal_solid_infill_speed": "40", + "top_surface_speed": "50", + "gap_infill_speed": "50", + "sparse_infill_speed": "100", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "FLSun Super Racer 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.16mm Optimal @FLSun Q5.json b/resources/profiles/FLSun/process/0.16mm Optimal @FLSun Q5.json index 6bebc0249fe..d0c1e182265 100644 --- a/resources/profiles/FLSun/process/0.16mm Optimal @FLSun Q5.json +++ b/resources/profiles/FLSun/process/0.16mm Optimal @FLSun Q5.json @@ -1,108 +1,108 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @FLSun Q5", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.16", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0.5", - "bridge_flow": "0.9", - "bridge_speed": "30", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "800", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.2", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "crosshatch", - "initial_layer_acceleration": "800", - "travel_acceleration": "0", - "inner_wall_acceleration": "800", - "initial_layer_line_width": "0.45", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "5", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.16", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "2", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.16", - "support_speed": "60", - "support_threshold_angle": "30", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonicline", - "top_surface_line_width": "0.38", - "top_shell_layers": "6", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "40", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "FLSun Q5 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Optimal @FLSun Q5", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.16", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0.5", + "bridge_flow": "0.9", + "bridge_speed": "30", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "800", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.2", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "800", + "travel_acceleration": "0", + "inner_wall_acceleration": "800", + "initial_layer_line_width": "0.45", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "5", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.16", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.16", + "support_speed": "60", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.38", + "top_shell_layers": "6", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "40", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "FLSun Q5 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.16mm Optimal @FLSun QQSPro.json b/resources/profiles/FLSun/process/0.16mm Optimal @FLSun QQSPro.json index 47c6467fabe..36137ae0521 100644 --- a/resources/profiles/FLSun/process/0.16mm Optimal @FLSun QQSPro.json +++ b/resources/profiles/FLSun/process/0.16mm Optimal @FLSun QQSPro.json @@ -1,108 +1,108 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @FLSun QQSPro", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.16", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0.5", - "bridge_flow": "0.9", - "bridge_speed": "30", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "1500", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.2", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "crosshatch", - "initial_layer_acceleration": "1000", - "travel_acceleration": "0", - "inner_wall_acceleration": "800", - "initial_layer_line_width": "0.45", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "5", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.16", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "2", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.16", - "support_speed": "60", - "support_threshold_angle": "30", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonicline", - "top_surface_line_width": "0.38", - "top_shell_layers": "6", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "40", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "FLSun QQ-S Pro 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Optimal @FLSun QQSPro", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.16", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0.5", + "bridge_flow": "0.9", + "bridge_speed": "30", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "1500", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.2", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "0", + "inner_wall_acceleration": "800", + "initial_layer_line_width": "0.45", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "5", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.16", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.16", + "support_speed": "60", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.38", + "top_shell_layers": "6", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "40", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "FLSun QQ-S Pro 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.16mm Optimal @FLSun SR.json b/resources/profiles/FLSun/process/0.16mm Optimal @FLSun SR.json index 22871b63a04..0bb0777024d 100644 --- a/resources/profiles/FLSun/process/0.16mm Optimal @FLSun SR.json +++ b/resources/profiles/FLSun/process/0.16mm Optimal @FLSun SR.json @@ -1,109 +1,109 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @FLSun SR", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.16", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0.5", - "bridge_flow": "0.9", - "bridge_speed": "30", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "5000", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.2", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "crosshatch", - "initial_layer_acceleration": "3000", - "travel_acceleration": "0", - "inner_wall_acceleration": "3000", - "initial_layer_line_width": "0.45", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "only_one_wall_top": "1", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "5", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.16", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "2", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_interface_speed": "70%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.16", - "support_speed": "80", - "support_threshold_angle": "30", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonicline", - "top_surface_line_width": "0.38", - "top_shell_layers": "6", - "top_shell_thickness": "0.8", - "initial_layer_speed": "50%", - "initial_layer_infill_speed": "50%", - "outer_wall_speed": "40", - "inner_wall_speed": "80", - "internal_solid_infill_speed": "40", - "top_surface_speed": "50", - "gap_infill_speed": "50", - "sparse_infill_speed": "100", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "FLSun Super Racer 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Optimal @FLSun SR", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.16", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0.5", + "bridge_flow": "0.9", + "bridge_speed": "30", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.2", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "3000", + "travel_acceleration": "0", + "inner_wall_acceleration": "3000", + "initial_layer_line_width": "0.45", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "3", + "only_one_wall_top": "1", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "5", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.16", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "70%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.16", + "support_speed": "80", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.38", + "top_shell_layers": "6", + "top_shell_thickness": "0.8", + "initial_layer_speed": "50%", + "initial_layer_infill_speed": "50%", + "outer_wall_speed": "40", + "inner_wall_speed": "80", + "internal_solid_infill_speed": "40", + "top_surface_speed": "50", + "gap_infill_speed": "50", + "sparse_infill_speed": "100", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "FLSun Super Racer 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.20mm Standard @FLSun Q5.json b/resources/profiles/FLSun/process/0.20mm Standard @FLSun Q5.json index 4836352921d..30ff864755b 100644 --- a/resources/profiles/FLSun/process/0.20mm Standard @FLSun Q5.json +++ b/resources/profiles/FLSun/process/0.20mm Standard @FLSun Q5.json @@ -1,108 +1,108 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @FLSun Q5", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.2", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "4", - "bottom_shell_thickness": "0.5", - "bridge_flow": "0.95", - "bridge_speed": "30", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "800", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.2", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "crosshatch", - "initial_layer_acceleration": "800", - "travel_acceleration": "0", - "inner_wall_acceleration": "800", - "initial_layer_line_width": "0.45", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "5", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.2", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "2", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.2", - "support_speed": "60", - "support_threshold_angle": "30", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonicline", - "top_surface_line_width": "0.38", - "top_shell_layers": "5", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "40", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "FLSun Q5 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @FLSun Q5", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.2", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0.5", + "bridge_flow": "0.95", + "bridge_speed": "30", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "800", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.2", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "800", + "travel_acceleration": "0", + "inner_wall_acceleration": "800", + "initial_layer_line_width": "0.45", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "5", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "60", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.38", + "top_shell_layers": "5", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "40", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "FLSun Q5 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.20mm Standard @FLSun QQSPro.json b/resources/profiles/FLSun/process/0.20mm Standard @FLSun QQSPro.json index 9a98c2f09a3..c8619d20dad 100644 --- a/resources/profiles/FLSun/process/0.20mm Standard @FLSun QQSPro.json +++ b/resources/profiles/FLSun/process/0.20mm Standard @FLSun QQSPro.json @@ -1,108 +1,108 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @FLSun QQSPro", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.2", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "4", - "bottom_shell_thickness": "0.5", - "bridge_flow": "0.95", - "bridge_speed": "30", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "1500", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.2", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "crosshatch", - "initial_layer_acceleration": "1000", - "travel_acceleration": "0", - "inner_wall_acceleration": "800", - "initial_layer_line_width": "0.45", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "5", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.2", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "2", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.2", - "support_speed": "60", - "support_threshold_angle": "30", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonicline", - "top_surface_line_width": "0.38", - "top_shell_layers": "5", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "40", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "FLSun QQ-S Pro 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @FLSun QQSPro", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.2", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0.5", + "bridge_flow": "0.95", + "bridge_speed": "30", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "1500", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.2", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "0", + "inner_wall_acceleration": "800", + "initial_layer_line_width": "0.45", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "5", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "60", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.38", + "top_shell_layers": "5", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "40", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "FLSun QQ-S Pro 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.20mm Standard @FLSun S1.json b/resources/profiles/FLSun/process/0.20mm Standard @FLSun S1.json new file mode 100644 index 00000000000..0d528e73875 --- /dev/null +++ b/resources/profiles/FLSun/process/0.20mm Standard @FLSun S1.json @@ -0,0 +1,30 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm PLA_HS_S1_FLSUN @FLSUN", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_common", + "outer_wall_speed": "400", + "inner_wall_speed": "500", + "sparse_infill_speed": "800", + "internal_solid_infill_speed": "500", + "default_acceleration": "30000", + "default_jerk": "200", + "gap_infill_speed": "400", + "initial_layer_acceleration": "5000", + "initial_layer_infill_speed": "80", + "initial_layer_speed": "50", + "inner_wall_acceleration": "22000", + "is_custom_defined": "0", + "outer_wall_acceleration": "8000", + "overhang_2_4_speed": "1234", + "top_surface_acceleration": "12000", + "top_surface_speed": "400", + "travel_acceleration": "32000", + "travel_speed": "1200", + "compatible_printers": [ + "FLSun S1 0.4 nozzle" + ], + "exclude_object": "1" +} \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.20mm Standard @FLSun SR.json b/resources/profiles/FLSun/process/0.20mm Standard @FLSun SR.json index c0aff8ff026..deefdebe0af 100644 --- a/resources/profiles/FLSun/process/0.20mm Standard @FLSun SR.json +++ b/resources/profiles/FLSun/process/0.20mm Standard @FLSun SR.json @@ -1,109 +1,109 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @FLSun SR", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.2", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "4", - "bottom_shell_thickness": "0.5", - "bridge_flow": "0.95", - "bridge_speed": "30", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "5000", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.2", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "crosshatch", - "initial_layer_acceleration": "3000", - "travel_acceleration": "0", - "inner_wall_acceleration": "3000", - "initial_layer_line_width": "0.45", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "only_one_wall_top": "1", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "5", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.2", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "2", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.2", - "support_speed": "80", - "support_threshold_angle": "30", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonicline", - "top_surface_line_width": "0.38", - "top_shell_layers": "5", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "75", - "inner_wall_speed": "150", - "internal_solid_infill_speed": "150", - "top_surface_speed": "75", - "gap_infill_speed": "75", - "sparse_infill_speed": "150", - "travel_speed": "180", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "FLSun Super Racer 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @FLSun SR", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.2", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0.5", + "bridge_flow": "0.95", + "bridge_speed": "30", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "5000", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.2", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "3000", + "travel_acceleration": "0", + "inner_wall_acceleration": "3000", + "initial_layer_line_width": "0.45", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "3", + "only_one_wall_top": "1", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "5", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.2", + "support_speed": "80", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.38", + "top_shell_layers": "5", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "75", + "inner_wall_speed": "150", + "internal_solid_infill_speed": "150", + "top_surface_speed": "75", + "gap_infill_speed": "75", + "sparse_infill_speed": "150", + "travel_speed": "180", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "FLSun Super Racer 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.20mm Standard @FLSun T1.json b/resources/profiles/FLSun/process/0.20mm Standard @FLSun T1.json new file mode 100644 index 00000000000..90caef323d8 --- /dev/null +++ b/resources/profiles/FLSun/process/0.20mm Standard @FLSun T1.json @@ -0,0 +1,30 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm PLA_HS_T1_FLSUN @FLSUN", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_common", + "outer_wall_speed": "120", + "inner_wall_speed": "260", + "sparse_infill_speed": "400", + "internal_solid_infill_speed": "260", + "default_acceleration": "8000", + "default_jerk": "20", + "gap_infill_speed": "250", + "initial_layer_acceleration": "1000", + "initial_layer_infill_speed": "60", + "initial_layer_speed": "30", + "inner_wall_acceleration": "8000", + "is_custom_defined": "0", + "outer_wall_acceleration": "8000", + "overhang_1_4_speed": "80", + "top_surface_acceleration": "12000", + "top_surface_speed": "300", + "travel_acceleration": "20000", + "travel_speed": "800", + "compatible_printers": [ + "FLSun T1 0.4 nozzle" + ], + "exclude_object": "1" +} \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.20mm Standard @FLSun V400.json b/resources/profiles/FLSun/process/0.20mm Standard @FLSun V400.json index 87a55478080..e2874b93db6 100644 --- a/resources/profiles/FLSun/process/0.20mm Standard @FLSun V400.json +++ b/resources/profiles/FLSun/process/0.20mm Standard @FLSun V400.json @@ -1,30 +1,30 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @FLSun V400", - "from": "system", - "instantiation": "true", - "inherits": "fdm_process_common", - "outer_wall_speed": "120", - "inner_wall_speed": "200", - "sparse_infill_speed": "250", - "internal_solid_infill_speed": "200", - "default_acceleration": "5000", - "default_jerk": "9", - "gap_infill_speed": "200", - "initial_layer_acceleration": "1000", - "initial_layer_infill_speed": "100", - "initial_layer_speed": "50", - "inner_wall_acceleration": "5000", - "is_custom_defined": "0", - "outer_wall_acceleration": "4000", - "overhang_1_4_speed": "80", - "top_surface_acceleration": "3000", - "top_surface_speed": "200", - "travel_acceleration": "5000", - "travel_speed": "400", - "compatible_printers": [ - "FLSun V400 0.4 nozzle" - ], - "exclude_object": "1" +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @FLSun V400", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_common", + "outer_wall_speed": "120", + "inner_wall_speed": "200", + "sparse_infill_speed": "250", + "internal_solid_infill_speed": "200", + "default_acceleration": "5000", + "default_jerk": "9", + "gap_infill_speed": "200", + "initial_layer_acceleration": "1000", + "initial_layer_infill_speed": "100", + "initial_layer_speed": "50", + "inner_wall_acceleration": "5000", + "is_custom_defined": "0", + "outer_wall_acceleration": "4000", + "overhang_1_4_speed": "80", + "top_surface_acceleration": "3000", + "top_surface_speed": "200", + "travel_acceleration": "5000", + "travel_speed": "400", + "compatible_printers": [ + "FLSun V400 0.4 nozzle" + ], + "exclude_object": "1" } \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.24mm Draft @FLSun Q5.json b/resources/profiles/FLSun/process/0.24mm Draft @FLSun Q5.json index 8ab5ea8fd04..457acf09652 100644 --- a/resources/profiles/FLSun/process/0.24mm Draft @FLSun Q5.json +++ b/resources/profiles/FLSun/process/0.24mm Draft @FLSun Q5.json @@ -1,108 +1,108 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.24mm Draft @FLSun Q5", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.24", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "4", - "bottom_shell_thickness": "0.5", - "bridge_flow": "0.95", - "bridge_speed": "30", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "800", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.2", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "crosshatch", - "initial_layer_acceleration": "800", - "travel_acceleration": "0", - "inner_wall_acceleration": "800", - "initial_layer_line_width": "0.45", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "5", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.18", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "2", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.18", - "support_speed": "60", - "support_threshold_angle": "30", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonicline", - "top_surface_line_width": "0.38", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "40", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "FLSun Q5 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Draft @FLSun Q5", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.24", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0.5", + "bridge_flow": "0.95", + "bridge_speed": "30", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "800", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.2", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "800", + "travel_acceleration": "0", + "inner_wall_acceleration": "800", + "initial_layer_line_width": "0.45", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "5", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.18", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.18", + "support_speed": "60", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.38", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "40", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "FLSun Q5 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.24mm Draft @FLSun QQSPro.json b/resources/profiles/FLSun/process/0.24mm Draft @FLSun QQSPro.json index c5b733ee4a7..bc29f577b67 100644 --- a/resources/profiles/FLSun/process/0.24mm Draft @FLSun QQSPro.json +++ b/resources/profiles/FLSun/process/0.24mm Draft @FLSun QQSPro.json @@ -1,108 +1,108 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.24mm Draft @FLSun QQSPro", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.24", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "4", - "bottom_shell_thickness": "0.5", - "bridge_flow": "0.95", - "bridge_speed": "30", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "1500", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.2", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "crosshatch", - "initial_layer_acceleration": "1000", - "travel_acceleration": "0", - "inner_wall_acceleration": "800", - "initial_layer_line_width": "0.45", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "5", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.18", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "2", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.18", - "support_speed": "60", - "support_threshold_angle": "30", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonicline", - "top_surface_line_width": "0.38", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "40", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "FLSun QQ-S Pro 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Draft @FLSun QQSPro", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.24", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0.5", + "bridge_flow": "0.95", + "bridge_speed": "30", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "1500", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.2", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "0", + "inner_wall_acceleration": "800", + "initial_layer_line_width": "0.45", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "5", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.18", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.18", + "support_speed": "60", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.38", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "40", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "FLSun QQ-S Pro 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.24mm Draft @FLSun SR.json b/resources/profiles/FLSun/process/0.24mm Draft @FLSun SR.json index 1d11c2b26e2..483c9ab71ef 100644 --- a/resources/profiles/FLSun/process/0.24mm Draft @FLSun SR.json +++ b/resources/profiles/FLSun/process/0.24mm Draft @FLSun SR.json @@ -1,109 +1,109 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.24mm Draft @FLSun SR", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.24", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "4", - "bottom_shell_thickness": "0.5", - "bridge_flow": "0.95", - "bridge_speed": "30", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "1500", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.2", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.45", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.45", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "crosshatch", - "initial_layer_acceleration": "1000", - "travel_acceleration": "0", - "inner_wall_acceleration": "800", - "initial_layer_line_width": "0.45", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "only_one_wall_top": "1", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "5", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.18", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "2", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.18", - "support_speed": "80", - "support_threshold_angle": "30", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonicline", - "top_surface_line_width": "0.38", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "75", - "inner_wall_speed": "150", - "internal_solid_infill_speed": "150", - "top_surface_speed": "75", - "gap_infill_speed": "75", - "sparse_infill_speed": "150", - "travel_speed": "180", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "FLSun Super Racer 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Draft @FLSun SR", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.24", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0.5", + "bridge_flow": "0.95", + "bridge_speed": "30", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "1500", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.2", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.45", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.45", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "0", + "inner_wall_acceleration": "800", + "initial_layer_line_width": "0.45", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "3", + "only_one_wall_top": "1", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "5", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.18", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.18", + "support_speed": "80", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.38", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "75", + "inner_wall_speed": "150", + "internal_solid_infill_speed": "150", + "top_surface_speed": "75", + "gap_infill_speed": "75", + "sparse_infill_speed": "150", + "travel_speed": "180", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "FLSun Super Racer 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun Q5.json b/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun Q5.json index 534c02f77b9..0629144f2f8 100644 --- a/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun Q5.json +++ b/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun Q5.json @@ -1,108 +1,108 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.30mm Extra Draft @FLSun Q5", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.3", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0.6", - "bridge_flow": "0.95", - "bridge_speed": "30", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "800", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.2", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.5", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.5", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "crosshatch", - "initial_layer_acceleration": "800", - "travel_acceleration": "0", - "inner_wall_acceleration": "800", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.5", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "5", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.22", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "2", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.22", - "support_speed": "60", - "support_threshold_angle": "30", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonicline", - "top_surface_line_width": "0.45", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "40", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "FLSun Q5 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Extra Draft @FLSun Q5", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.3", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0.6", + "bridge_flow": "0.95", + "bridge_speed": "30", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "800", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.2", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.5", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.5", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "800", + "travel_acceleration": "0", + "inner_wall_acceleration": "800", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.5", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "5", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.22", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.22", + "support_speed": "60", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.45", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "40", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "FLSun Q5 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun QQSPro.json b/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun QQSPro.json index 851a3a25c29..d76a71b6183 100644 --- a/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun QQSPro.json +++ b/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun QQSPro.json @@ -1,108 +1,108 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.30mm Extra Draft @FLSun QQSPro", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.3", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0.6", - "bridge_flow": "0.95", - "bridge_speed": "30", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "1500", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.2", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.5", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.5", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "crosshatch", - "initial_layer_acceleration": "1000", - "travel_acceleration": "0", - "inner_wall_acceleration": "800", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.5", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "5", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.22", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "2", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.22", - "support_speed": "60", - "support_threshold_angle": "30", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonicline", - "top_surface_line_width": "0.45", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "40", - "inner_wall_speed": "40", - "internal_solid_infill_speed": "40", - "top_surface_speed": "30", - "gap_infill_speed": "30", - "sparse_infill_speed": "60", - "travel_speed": "150", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "FLSun QQ-S Pro 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Extra Draft @FLSun QQSPro", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.3", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0.6", + "bridge_flow": "0.95", + "bridge_speed": "30", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "1500", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.2", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.5", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.5", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "0", + "inner_wall_acceleration": "800", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.5", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "5", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.22", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.22", + "support_speed": "60", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.45", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "internal_solid_infill_speed": "40", + "top_surface_speed": "30", + "gap_infill_speed": "30", + "sparse_infill_speed": "60", + "travel_speed": "150", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "FLSun QQ-S Pro 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun SR.json b/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun SR.json index 079f74388c9..782bd42083e 100644 --- a/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun SR.json +++ b/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun SR.json @@ -1,109 +1,109 @@ -{ - "type": "process", - "setting_id": "GP004", - "name": "0.30mm Extra Draft @FLSun SR", - "from": "system", - "inherits": "fdm_process_common", - "instantiation": "true", - "adaptive_layer_height": "1", - "reduce_crossing_wall": "0", - "layer_height": "0.3", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0.6", - "bridge_flow": "0.95", - "bridge_speed": "30", - "brim_width": "0", - "brim_object_gap": "0", - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "1500", - "top_surface_acceleration": "0", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.2", - "enable_arc_fitting": "0", - "outer_wall_line_width": "0.5", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.5", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "crosshatch", - "initial_layer_acceleration": "1000", - "travel_acceleration": "0", - "inner_wall_acceleration": "800", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.5", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "15%", - "ironing_spacing": "0.1", - "ironing_speed": "15", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "20", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "only_one_wall_top": "1", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "5", - "skirt_height": "1", - "skirt_loops": "2", - "minimum_sparse_infill_area": "10", - "internal_solid_infill_line_width": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_style": "grid", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.22", - "support_filament": "0", - "support_line_width": "0.38", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "2", - "support_interface_bottom_layers": "-1", - "support_interface_spacing": "0.5", - "support_interface_speed": "100%", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "0.22", - "support_speed": "80", - "support_threshold_angle": "30", - "support_object_xy_distance": "60%", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "detect_thin_wall": "1", - "top_surface_pattern": "monotonicline", - "top_surface_line_width": "0.45", - "top_shell_layers": "4", - "top_shell_thickness": "0.8", - "initial_layer_speed": "35%", - "initial_layer_infill_speed": "35%", - "outer_wall_speed": "75", - "inner_wall_speed": "150", - "internal_solid_infill_speed": "150", - "top_surface_speed": "75", - "gap_infill_speed": "75", - "sparse_infill_speed": "150", - "travel_speed": "180", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "compatible_printers": [ - "FLSun Super Racer 0.4 nozzle" - ] +{ + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Extra Draft @FLSun SR", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.3", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0.6", + "bridge_flow": "0.95", + "bridge_speed": "30", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "1500", + "top_surface_acceleration": "0", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.2", + "enable_arc_fitting": "0", + "outer_wall_line_width": "0.5", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.5", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_acceleration": "1000", + "travel_acceleration": "0", + "inner_wall_acceleration": "800", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.5", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "3", + "only_one_wall_top": "1", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "5", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.22", + "support_filament": "0", + "support_line_width": "0.38", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_interface_speed": "100%", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "0.22", + "support_speed": "80", + "support_threshold_angle": "30", + "support_object_xy_distance": "60%", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.45", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "initial_layer_speed": "35%", + "initial_layer_infill_speed": "35%", + "outer_wall_speed": "75", + "inner_wall_speed": "150", + "internal_solid_infill_speed": "150", + "top_surface_speed": "75", + "gap_infill_speed": "75", + "sparse_infill_speed": "150", + "travel_speed": "180", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "FLSun Super Racer 0.4 nozzle" + ] } \ No newline at end of file diff --git a/resources/profiles/FLSun/process/fdm_process_common.json b/resources/profiles/FLSun/process/fdm_process_common.json index ef2f117abff..241854486ab 100644 --- a/resources/profiles/FLSun/process/fdm_process_common.json +++ b/resources/profiles/FLSun/process/fdm_process_common.json @@ -1,107 +1,107 @@ -{ - "type": "process", - "name": "fdm_process_common", - "from": "system", - "instantiation": "false", - "adaptive_layer_height": "0", - "reduce_crossing_wall": "0", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_thickness": "0", - "bridge_speed": "50", - "brim_width": "5", - "brim_object_gap": "0.1", - "compatible_printers": [], - "compatible_printers_condition": "", - "print_sequence": "by layer", - "default_acceleration": "1000", - "initial_layer_acceleration": "500", - "top_surface_acceleration": "800", - "travel_acceleration": "1000", - "inner_wall_acceleration": "900", - "outer_wall_acceleration": "700", - "bridge_no_support": "0", - "draft_shield": "disabled", - "elefant_foot_compensation": "0", - - "outer_wall_line_width": "0.4", - "wall_infill_order": "inner wall/outer wall/infill", - "line_width": "0.4", - "infill_direction": "45", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "crosshatch", - "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.2", - "infill_combination": "0", - "sparse_infill_line_width": "0.45", - "infill_wall_overlap": "25%", - "interface_shells": "0", - "ironing_flow": "10%", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "reduce_infill_retraction": "1", - "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", - "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "10", - "inner_wall_line_width": "0.45", - "wall_loops": "3", - "print_settings_id": "", - "raft_layers": "0", - "seam_position": "aligned", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "0", - "minimum_sparse_infill_area": "15", - "internal_solid_infill_line_width": "0.4", - "spiral_mode": "0", - "standby_temperature_delta": "-5", - "enable_support": "0", - "resolution": "0.012", - "support_type": "normal(auto)", - "support_on_build_plate_only": "0", - "support_top_z_distance": "0.2", - "support_filament": "0", - "support_line_width": "0.4", - "support_interface_loop_pattern": "0", - "support_interface_filament": "0", - "support_interface_top_layers": "2", - "support_interface_bottom_layers": "2", - "support_interface_spacing": "0.5", - "support_interface_speed": "80", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "2.5", - "support_speed": "150", - "support_threshold_angle": "30", - "support_object_xy_distance": "0.35", - "tree_support_branch_angle": "30", - "tree_support_wall_count": "0", - "tree_support_with_infill": "0", - "detect_thin_wall": "0", - "top_surface_pattern": "monotonicline", - "top_surface_line_width": "0.4", - "top_shell_thickness": "0.8", - "enable_prime_tower": "0", - "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "layer_height": "0.2", - "bottom_shell_layers": "3", - "top_shell_layers": "4", - "bridge_flow": "1", - "initial_layer_speed": "45", - "initial_layer_infill_speed": "45", - "outer_wall_speed": "45", - "inner_wall_speed": "80", - "sparse_infill_speed": "150", - "internal_solid_infill_speed": "150", - "top_surface_speed": "50", - "gap_infill_speed": "30", - "travel_speed": "200", - "enable_arc_fitting": "0", - "exclude_object" : "0" -} +{ + "type": "process", + "name": "fdm_process_common", + "from": "system", + "instantiation": "false", + "adaptive_layer_height": "0", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_thickness": "0", + "bridge_speed": "50", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers": [], + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "1000", + "initial_layer_acceleration": "500", + "top_surface_acceleration": "800", + "travel_acceleration": "1000", + "inner_wall_acceleration": "900", + "outer_wall_acceleration": "700", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.4", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "inner_wall_line_width": "0.45", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "internal_solid_infill_line_width": "0.4", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.4", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "2", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_angle": "30", + "tree_support_wall_count": "0", + "tree_support_with_infill": "0", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "layer_height": "0.2", + "bottom_shell_layers": "3", + "top_shell_layers": "4", + "bridge_flow": "1", + "initial_layer_speed": "45", + "initial_layer_infill_speed": "45", + "outer_wall_speed": "45", + "inner_wall_speed": "80", + "sparse_infill_speed": "150", + "internal_solid_infill_speed": "150", + "top_surface_speed": "50", + "gap_infill_speed": "30", + "travel_speed": "200", + "enable_arc_fitting": "0", + "exclude_object" : "0" +} diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider 2s 0.4 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider 2s 0.4 nozzle.json index 47dc54bb7d6..b45d8289b51 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider 2s 0.4 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider 2s 0.4 nozzle.json @@ -12,15 +12,15 @@ "printer_variant": "0.4", "printable_area": [ "-140x-125", - "140x-125", - "140x125", - "-140x125" + "140x-125", + "140x125", + "-140x125" ], "printable_height": "300", "extruder_offset": [ "-20", "10" ], "extruder_clearance_height_to_lid": "70", - "extruder_clearance_height_to_rod": "23", - "extruder_clearance_radius": "40", + "extruder_clearance_height_to_rod": "23", + "extruder_clearance_radius": "40", "use_relative_e_distances": "0", "auxiliary_fan": "1", "machine_max_acceleration_e": [ "200", "200" ], diff --git a/resources/profiles/Flashforge/machine/fdm_adventurer3_common.json b/resources/profiles/Flashforge/machine/fdm_adventurer3_common.json index 537a691ccbd..4a49f80f56f 100644 --- a/resources/profiles/Flashforge/machine/fdm_adventurer3_common.json +++ b/resources/profiles/Flashforge/machine/fdm_adventurer3_common.json @@ -41,7 +41,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ "Flashforge PLA" ], - "machine_start_gcode": "M140 S[bed_temperature_initial_layer] T0\nM104 S[nozzle_temperature_initial_layer] T0\nM104 S0 T1\nM107\nM900 K[pressure_advance] T0\nG90\nG28\nM132 X Y Z A B\nG1 Z50.000 F420\nG161 X Y F3300\nM7 T0\nM6 T0\nM651 S255\n;pre-extrude\nM108 T0\nG1 X-37.50 Y-75.00 F6000\nM106\nG1 Z0.200 F420\nG1 X-37.50 Y-75.00 F6000\nG1 X37.50 Y-75.00 E9.5 F1200\n", + "machine_start_gcode": "M140 S[bed_temperature_initial_layer] T0\nM104 S[nozzle_temperature_initial_layer] T0\nM104 S0 T1\nM107\nM900 K[pressure_advance] T0\nG90\nG28\nM132 X Y Z A B\nG1 Z50.000 F420\nG161 X Y F3300\nM7 T0\nM6 T0\nM651 S255", "machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F9000\nM104 S0 T0\nM140 S0 T0\nG162 Z F1800\nG28 X Y\nM132 X Y A B\nM652\nG91\nM18", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]", "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", diff --git a/resources/profiles/Flashforge/process/0.12mm Detail @Flashforge Guider 2s 0.4 nozzle.json b/resources/profiles/Flashforge/process/0.12mm Detail @Flashforge Guider 2s 0.4 nozzle.json index 548172068a0..23d6db20993 100644 --- a/resources/profiles/Flashforge/process/0.12mm Detail @Flashforge Guider 2s 0.4 nozzle.json +++ b/resources/profiles/Flashforge/process/0.12mm Detail @Flashforge Guider 2s 0.4 nozzle.json @@ -2,8 +2,9 @@ "type": "process", "name": "0.12mm Detail @Flashforge Guider 2s 0.4 nozzle", "setting_id": "GS001", + "from": "system", + "inherits": "fdm_process_flashforge_common", "instantiation": "true", - "inherits": "fdm_process_flashforge_0.20", "adaptive_layer_height": "0", "bridge_flow": "1", "bridge_speed": "80%", diff --git a/resources/profiles/Flashforge/process/0.16mm Optimal @Flashforge Guider 2s 0.4 nozzle.json b/resources/profiles/Flashforge/process/0.16mm Optimal @Flashforge Guider 2s 0.4 nozzle.json index 61a5bff705b..2ee3d79d142 100644 --- a/resources/profiles/Flashforge/process/0.16mm Optimal @Flashforge Guider 2s 0.4 nozzle.json +++ b/resources/profiles/Flashforge/process/0.16mm Optimal @Flashforge Guider 2s 0.4 nozzle.json @@ -2,8 +2,9 @@ "type": "process", "name": "0.16mm Optimal @Flashforge Guider 2s 0.4 nozzle", "setting_id": "GS002", + "from": "system", + "inherits": "fdm_process_flashforge_common", "instantiation": "true", - "inherits": "fdm_process_flashforge_0.20", "adaptive_layer_height": "0", "bridge_flow": "1", "bridge_speed": "25", diff --git a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge G3U 0.4 Nozzle.json b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge G3U 0.4 Nozzle.json index 6995772a4d5..15f4fa3add2 100644 --- a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge G3U 0.4 Nozzle.json +++ b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge G3U 0.4 Nozzle.json @@ -136,7 +136,7 @@ "role_based_wipe_speed": "1", "seam_gap": "10%", "seam_position": "aligned", - "single_extruder_multi_material_priming": "1", + "single_extruder_multi_material_priming": "0", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "2", diff --git a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge Guider 2s 0.4 nozzle.json b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge Guider 2s 0.4 nozzle.json index d9dc079e092..6783df37eb0 100644 --- a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge Guider 2s 0.4 nozzle.json +++ b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge Guider 2s 0.4 nozzle.json @@ -2,8 +2,9 @@ "type": "process", "name": "0.20mm Standard @Flashforge Guider 2s 0.4 nozzle", "setting_id": "GS003", + "from": "system", + "inherits": "fdm_process_flashforge_common", "instantiation": "true", - "inherits": "fdm_process_flashforge_0.20", "adaptive_layer_height": "0", "bridge_flow": "1", "bridge_speed": "50%", diff --git a/resources/profiles/Flashforge/process/0.30mm Draft @Flashforge Guider 2s 0.4 nozzle.json b/resources/profiles/Flashforge/process/0.30mm Draft @Flashforge Guider 2s 0.4 nozzle.json index d50de09e281..bb8196f0071 100644 --- a/resources/profiles/Flashforge/process/0.30mm Draft @Flashforge Guider 2s 0.4 nozzle.json +++ b/resources/profiles/Flashforge/process/0.30mm Draft @Flashforge Guider 2s 0.4 nozzle.json @@ -2,8 +2,9 @@ "type": "process", "name": "0.30mm Draft @Flashforge Guider 2s 0.4 nozzle", "setting_id": "GS004", + "from": "system", + "inherits": "fdm_process_flashforge_common", "instantiation": "true", - "inherits": "fdm_process_flashforge_0.30", "adaptive_layer_height": "0", "bridge_flow": "1", "bridge_speed": "50%", diff --git a/resources/profiles/FlyingBear/process/0.08mm Extra Fine @FlyingBear Reborn3.json b/resources/profiles/FlyingBear/process/0.08mm Extra Fine @FlyingBear Reborn3.json index e8d734ca1fc..39001ee125a 100644 --- a/resources/profiles/FlyingBear/process/0.08mm Extra Fine @FlyingBear Reborn3.json +++ b/resources/profiles/FlyingBear/process/0.08mm Extra Fine @FlyingBear Reborn3.json @@ -20,7 +20,7 @@ "layer_height": "0.08", "print_settings_id": "0.08mm Extra Fine @InfiMech TX", "sparse_infill_speed": "450", - "exclude_object": "0", + "exclude_object": "1", "internal_bridge_speed": "50", "compatible_printers": [ "FlyingBear Reborn3 0.4 nozzle" diff --git a/resources/profiles/FlyingBear/process/0.12mm Fine @FlyingBear Reborn3.json b/resources/profiles/FlyingBear/process/0.12mm Fine @FlyingBear Reborn3.json index e83de4cbc68..1000d06175a 100644 --- a/resources/profiles/FlyingBear/process/0.12mm Fine @FlyingBear Reborn3.json +++ b/resources/profiles/FlyingBear/process/0.12mm Fine @FlyingBear Reborn3.json @@ -20,7 +20,7 @@ "layer_height": "0.12", "print_settings_id": "0.12mm Fine @InfiMech TX", "sparse_infill_speed": "400", - "exclude_object": "0", + "exclude_object": "1", "internal_bridge_speed": "50", "compatible_printers": [ "FlyingBear Reborn3 0.4 nozzle" diff --git a/resources/profiles/FlyingBear/process/0.16mm Optimal @FlyingBear Reborn3.json b/resources/profiles/FlyingBear/process/0.16mm Optimal @FlyingBear Reborn3.json index 159c45bea52..f24fa3ca22c 100644 --- a/resources/profiles/FlyingBear/process/0.16mm Optimal @FlyingBear Reborn3.json +++ b/resources/profiles/FlyingBear/process/0.16mm Optimal @FlyingBear Reborn3.json @@ -14,7 +14,7 @@ "bottom_shell_layers": "4", "bridge_speed": "25", "brim_object_gap": "0.1", - "exclude_object": "0", + "exclude_object": "1", "gap_infill_speed": "300", "inner_wall_speed": "300", "internal_bridge_speed": "50", diff --git a/resources/profiles/FlyingBear/process/0.20mm Standard @FlyingBear Reborn3.json b/resources/profiles/FlyingBear/process/0.20mm Standard @FlyingBear Reborn3.json index c7f687a31a3..ab04494f0d5 100644 --- a/resources/profiles/FlyingBear/process/0.20mm Standard @FlyingBear Reborn3.json +++ b/resources/profiles/FlyingBear/process/0.20mm Standard @FlyingBear Reborn3.json @@ -20,7 +20,7 @@ "layer_height": "0.2", "print_settings_id": "0.20mm Standard @InfiMech TX", "sparse_infill_speed": "270", - "exclude_object": "0", + "exclude_object": "1", "internal_bridge_speed": "50", "top_solid_infill_flow_ratio": "0.97", "initial_layer_speed": "25", diff --git a/resources/profiles/FlyingBear/process/0.24mm Draft @FlyingBear Reborn3.json b/resources/profiles/FlyingBear/process/0.24mm Draft @FlyingBear Reborn3.json index 258be4bc8cd..78d68194173 100644 --- a/resources/profiles/FlyingBear/process/0.24mm Draft @FlyingBear Reborn3.json +++ b/resources/profiles/FlyingBear/process/0.24mm Draft @FlyingBear Reborn3.json @@ -22,7 +22,7 @@ "layer_height": "0.24", "print_settings_id": "0.24mm Draft @InfiMech TX", "sparse_infill_speed": "230", - "exclude_object": "0", + "exclude_object": "1", "internal_bridge_speed": "50", "compatible_printers": [ "FlyingBear Reborn3 0.4 nozzle" diff --git a/resources/profiles/FlyingBear/process/S1/0.08mm Extra Fine @FlyingBear S1.json b/resources/profiles/FlyingBear/process/S1/0.08mm Extra Fine @FlyingBear S1.json index c5922a7f85e..8fae3c93c62 100644 --- a/resources/profiles/FlyingBear/process/S1/0.08mm Extra Fine @FlyingBear S1.json +++ b/resources/profiles/FlyingBear/process/S1/0.08mm Extra Fine @FlyingBear S1.json @@ -21,7 +21,7 @@ "layer_height": "0.08", "print_settings_id": "0.08mm Extra Fine @FlyingBear S1", "sparse_infill_speed": "450", - "exclude_object": "0", + "exclude_object": "1", "internal_bridge_speed": "50", "compatible_printers": [ "FlyingBear S1 0.4 nozzle" diff --git a/resources/profiles/FlyingBear/process/S1/0.12mm Fine @FlyingBear S1.json b/resources/profiles/FlyingBear/process/S1/0.12mm Fine @FlyingBear S1.json index dad9af3e4d0..ca70860ca1f 100644 --- a/resources/profiles/FlyingBear/process/S1/0.12mm Fine @FlyingBear S1.json +++ b/resources/profiles/FlyingBear/process/S1/0.12mm Fine @FlyingBear S1.json @@ -20,7 +20,7 @@ "layer_height": "0.12", "print_settings_id": "0.12mm Fine @FlyingBear S1", "sparse_infill_speed": "400", - "exclude_object": "0", + "exclude_object": "1", "internal_bridge_speed": "50", "compatible_printers": [ "FlyingBear S1 0.4 nozzle" diff --git a/resources/profiles/FlyingBear/process/S1/0.16mm Optimal @FlyingBear S1.json b/resources/profiles/FlyingBear/process/S1/0.16mm Optimal @FlyingBear S1.json index 7cb68c5a109..d19bf468349 100644 --- a/resources/profiles/FlyingBear/process/S1/0.16mm Optimal @FlyingBear S1.json +++ b/resources/profiles/FlyingBear/process/S1/0.16mm Optimal @FlyingBear S1.json @@ -14,7 +14,7 @@ "bottom_shell_layers": "4", "bridge_speed": "25", "brim_object_gap": "0.1", - "exclude_object": "0", + "exclude_object": "1", "gap_infill_speed": "300", "inner_wall_speed": "300", "internal_bridge_speed": "50", diff --git a/resources/profiles/FlyingBear/process/S1/0.20mm Standard @FlyingBear S1.json b/resources/profiles/FlyingBear/process/S1/0.20mm Standard @FlyingBear S1.json index 3092c240a66..a5d6ec3f20e 100644 --- a/resources/profiles/FlyingBear/process/S1/0.20mm Standard @FlyingBear S1.json +++ b/resources/profiles/FlyingBear/process/S1/0.20mm Standard @FlyingBear S1.json @@ -20,7 +20,7 @@ "layer_height": "0.2", "print_settings_id": "0.20mm Standard @FlyingBear S1", "sparse_infill_speed": "270", - "exclude_object": "0", + "exclude_object": "1", "internal_bridge_speed": "50", "top_solid_infill_flow_ratio": "0.97", "compatible_printers": [ diff --git a/resources/profiles/FlyingBear/process/S1/0.24mm Draft @FlyingBear S1.json b/resources/profiles/FlyingBear/process/S1/0.24mm Draft @FlyingBear S1.json index b662b2b6153..1e78555c6a8 100644 --- a/resources/profiles/FlyingBear/process/S1/0.24mm Draft @FlyingBear S1.json +++ b/resources/profiles/FlyingBear/process/S1/0.24mm Draft @FlyingBear S1.json @@ -20,7 +20,7 @@ "layer_height": "0.24", "print_settings_id": "0.24mm Draft @FlyingBear S1", "sparse_infill_speed": "230", - "exclude_object": "0", + "exclude_object": "1", "internal_bridge_speed": "50", "compatible_printers": [ "FlyingBear S1 0.4 nozzle" diff --git a/resources/profiles/FlyingBear/process/S1/fdm_process_common_S1.json b/resources/profiles/FlyingBear/process/S1/fdm_process_common_S1.json index 43964dacedf..e1161914600 100644 --- a/resources/profiles/FlyingBear/process/S1/fdm_process_common_S1.json +++ b/resources/profiles/FlyingBear/process/S1/fdm_process_common_S1.json @@ -115,7 +115,7 @@ "role_based_wipe_speed": "1", "seam_gap": "10%", "seam_position": "aligned", - "single_extruder_multi_material_priming": "1", + "single_extruder_multi_material_priming": "0", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/FlyingBear/process/fdm_process_common.json b/resources/profiles/FlyingBear/process/fdm_process_common.json index 6f9e1e1fcbb..8e20a992b1b 100644 --- a/resources/profiles/FlyingBear/process/fdm_process_common.json +++ b/resources/profiles/FlyingBear/process/fdm_process_common.json @@ -115,7 +115,7 @@ "role_based_wipe_speed": "1", "seam_gap": "10%", "seam_position": "aligned", - "single_extruder_multi_material_priming": "1", + "single_extruder_multi_material_priming": "0", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Ginger Additive/process/fdm_process_common.json b/resources/profiles/Ginger Additive/process/fdm_process_common.json index 11b16c1391a..81075c236fd 100644 --- a/resources/profiles/Ginger Additive/process/fdm_process_common.json +++ b/resources/profiles/Ginger Additive/process/fdm_process_common.json @@ -154,7 +154,7 @@ "seam_slope_start_height": "0", "seam_slope_steps": "10", "seam_slope_type": "external", - "single_extruder_multi_material_priming": "1", + "single_extruder_multi_material_priming": "0", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "1", diff --git a/resources/profiles/InfiMech/process/HSN/fdm_process_common_HSN.json b/resources/profiles/InfiMech/process/HSN/fdm_process_common_HSN.json index fc457c76d8d..2afeaf2cb0b 100644 --- a/resources/profiles/InfiMech/process/HSN/fdm_process_common_HSN.json +++ b/resources/profiles/InfiMech/process/HSN/fdm_process_common_HSN.json @@ -114,7 +114,7 @@ "role_based_wipe_speed": "1", "seam_gap": "10%", "seam_position": "aligned", - "single_extruder_multi_material_priming": "1", + "single_extruder_multi_material_priming": "0", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/InfiMech/process/fdm_process_common.json b/resources/profiles/InfiMech/process/fdm_process_common.json index cb944ca97df..0bb51b5c68b 100644 --- a/resources/profiles/InfiMech/process/fdm_process_common.json +++ b/resources/profiles/InfiMech/process/fdm_process_common.json @@ -114,7 +114,7 @@ "role_based_wipe_speed": "1", "seam_gap": "10%", "seam_position": "aligned", - "single_extruder_multi_material_priming": "1", + "single_extruder_multi_material_priming": "0", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Prusa.json b/resources/profiles/Prusa.json index 1845bd173bf..b9a7435e4bd 100644 --- a/resources/profiles/Prusa.json +++ b/resources/profiles/Prusa.json @@ -1,6 +1,6 @@ { "name": "Prusa", - "version": "02.01.01.00", + "version": "02.01.02.40", "force_update": "0", "description": "Prusa configurations", "machine_model_list": [ @@ -23,6 +23,10 @@ { "name": "Prusa XL", "sub_path": "machine/Prusa XL.json" + }, + { + "name": "Prusa XL 5T", + "sub_path": "machine/Prusa XL 5T.json" } ], "process_list": [ @@ -54,6 +58,10 @@ "name": "process_common_xl", "sub_path": "process/process_common_xl.json" }, + { + "name": "process_common_xl_5t", + "sub_path": "process/process_common_xl_5t.json" + }, { "name": "0.20mm Standard @MINI 0.25", "sub_path": "process/0.20mm Standard @MINI 0.25.json" @@ -389,6 +397,134 @@ { "name": "0.30mm Detail @Prusa XL 0.8", "sub_path": "process/0.30mm Detail @Prusa XL 0.8.json" + }, + { + "name": "0.15mm Structural @Prusa XL 5T 0.25", + "sub_path": "process/0.15mm Structural @Prusa XL 5T 0.25.json" + }, + { + "name": "0.15mm Speed @Prusa XL 5T 0.25", + "sub_path": "process/0.15mm Speed @Prusa XL 5T 0.25.json" + }, + { + "name": "0.12mm Structural @Prusa XL 5T 0.25", + "sub_path": "process/0.12mm Structural @Prusa XL 5T 0.25.json" + }, + { + "name": "0.12mm Speed @Prusa XL 5T 0.25", + "sub_path": "process/0.12mm Speed @Prusa XL 5T 0.25.json" + }, + { + "name": "0.07mm Detail @Prusa XL 5T 0.25", + "sub_path": "process/0.07mm Detail @Prusa XL 5T 0.25.json" + }, + { + "name": "0.05mm Detail @Prusa XL 5T 0.25", + "sub_path": "process/0.05mm Detail @Prusa XL 5T 0.25.json" + }, + { + "name": "0.20mm Speed @Prusa XL 5T 0.3", + "sub_path": "process/0.20mm Speed @Prusa XL 5T 0.3.json" + }, + { + "name": "0.16mm Structural @Prusa XL 5T 0.3", + "sub_path": "process/0.16mm Structural @Prusa XL 5T 0.3.json" + }, + { + "name": "0.16mm Speed @Prusa XL 5T 0.3", + "sub_path": "process/0.16mm Speed @Prusa XL 5T 0.3.json" + }, + { + "name": "0.12mm Structural @Prusa XL 5T 0.3", + "sub_path": "process/0.12mm Structural @Prusa XL 5T 0.3.json" + }, + { + "name": "0.25mm Structural @Prusa XL 5T 0.4", + "sub_path": "process/0.25mm Structural @Prusa XL 5T 0.4.json" + }, + { + "name": "0.20mm Structural @Prusa XL 5T 0.4", + "sub_path": "process/0.20mm Structural @Prusa XL 5T 0.4.json" + }, + { + "name": "0.20mm Speed @Prusa XL 5T 0.4", + "sub_path": "process/0.20mm Speed @Prusa XL 5T 0.4.json" + }, + { + "name": "0.15mm Structural @Prusa XL 5T 0.4", + "sub_path": "process/0.15mm Structural @Prusa XL 5T 0.4.json" + }, + { + "name": "0.15mm Speed @Prusa XL 5T 0.4", + "sub_path": "process/0.15mm Speed @Prusa XL 5T 0.4.json" + }, + { + "name": "0.10mm FastDetail @Prusa XL 5T 0.4", + "sub_path": "process/0.10mm FastDetail @Prusa XL 5T 0.4.json" + }, + { + "name": "0.25mm Structural @Prusa XL 5T 0.5", + "sub_path": "process/0.25mm Structural @Prusa XL 5T 0.5.json" + }, + { + "name": "0.25mm Speed @Prusa XL 5T 0.5", + "sub_path": "process/0.25mm Speed @Prusa XL 5T 0.5.json" + }, + { + "name": "0.20mm Structural @Prusa XL 5T 0.5", + "sub_path": "process/0.20mm Structural @Prusa XL 5T 0.5.json" + }, + { + "name": "0.20mm Speed @Prusa XL 5T 0.5", + "sub_path": "process/0.20mm Speed @Prusa XL 5T 0.5.json" + }, + { + "name": "0.15mm Structural @Prusa XL 5T 0.5", + "sub_path": "process/0.15mm Structural @Prusa XL 5T 0.5.json" + }, + { + "name": "0.10mm Structural @Prusa XL 5T 0.5", + "sub_path": "process/0.10mm Structural @Prusa XL 5T 0.5.json" + }, + { + "name": "0.32mm Structural @Prusa XL 5T 0.6", + "sub_path": "process/0.32mm Structural @Prusa XL 5T 0.6.json" + }, + { + "name": "0.32mm Speed @Prusa XL 5T 0.6", + "sub_path": "process/0.32mm Speed @Prusa XL 5T 0.6.json" + }, + { + "name": "0.25mm Structural @Prusa XL 5T 0.6", + "sub_path": "process/0.25mm Structural @Prusa XL 5T 0.6.json" + }, + { + "name": "0.25mm Speed @Prusa XL 5T 0.6", + "sub_path": "process/0.25mm Speed @Prusa XL 5T 0.6.json" + }, + { + "name": "0.20mm Structural @Prusa XL 5T 0.6", + "sub_path": "process/0.20mm Structural @Prusa XL 5T 0.6.json" + }, + { + "name": "0.20mm Speed @Prusa XL 5T 0.6", + "sub_path": "process/0.20mm Speed @Prusa XL 5T 0.6.json" + }, + { + "name": "0.15mm Structural @Prusa XL 5T 0.6", + "sub_path": "process/0.15mm Structural @Prusa XL 5T 0.6.json" + }, + { + "name": "0.55mm Draft @Prusa XL 5T 0.8", + "sub_path": "process/0.55mm Draft @Prusa XL 5T 0.8.json" + }, + { + "name": "0.40mm Quality @Prusa XL 5T 0.8", + "sub_path": "process/0.40mm Quality @Prusa XL 5T 0.8.json" + }, + { + "name": "0.30mm Detail @Prusa XL 5T 0.8", + "sub_path": "process/0.30mm Detail @Prusa XL 5T 0.8.json" } ], "filament_list": [ @@ -464,18 +600,6 @@ "name": "Prusa Generic PLA @MINIIS", "sub_path": "filament/Prusa Generic PLA @MINIIS.json" }, - { - "name": "Prusa Generic PLA @XL", - "sub_path": "filament/Prusa Generic PLA @XL.json" - }, - { - "name": "Prusament PLA @XL", - "sub_path": "filament/Prusament PLA @XL.json" - }, - { - "name": "Prusament rPLA @XL", - "sub_path": "filament/Prusament rPLA @XL.json" - }, { "name": "Prusa Generic PLA-CF", "sub_path": "filament/Prusa Generic PLA-CF.json" @@ -520,14 +644,6 @@ "name": "Prusa Generic PETG @MINIIS 0.8", "sub_path": "filament/Prusa Generic PETG @MINIIS 0.8.json" }, - { - "name": "Prusa Generic PETG @XL", - "sub_path": "filament/Prusa Generic PETG @XL.json" - }, - { - "name": "Prusament PETG @XL", - "sub_path": "filament/Prusament PETG @XL.json" - }, { "name": "Prusa Generic ABS", "sub_path": "filament/Prusa Generic ABS.json" @@ -552,10 +668,6 @@ "name": "Prusa Generic ABS @MINIIS 0.8", "sub_path": "filament/Prusa Generic ABS @MINIIS 0.8.json" }, - { - "name": "Prusa Generic ABS @XL", - "sub_path": "filament/Prusa Generic ABS @XL.json" - }, { "name": "Prusa Generic TPU", "sub_path": "filament/Prusa Generic TPU.json" @@ -592,10 +704,6 @@ "name": "Prusa Generic ASA @MINIIS 0.8", "sub_path": "filament/Prusa Generic ASA @MINIIS 0.8.json" }, - { - "name": "Prusament ASA @XL", - "sub_path": "filament/Prusament ASA @XL.json" - }, { "name": "Prusa Generic PC", "sub_path": "filament/Prusa Generic PC.json" @@ -616,14 +724,6 @@ "name": "Prusa Generic PC @MINIIS 0.8", "sub_path": "filament/Prusa Generic PC @MINIIS 0.8.json" }, - { - "name": "Prusament PC Blend @XL", - "sub_path": "filament/Prusament PC Blend @XL.json" - }, - { - "name": "Prusament PC-CF @XL", - "sub_path": "filament/Prusament PC-CF @XL.json" - }, { "name": "Prusa Generic PVA", "sub_path": "filament/Prusa Generic PVA.json" @@ -644,10 +744,6 @@ "name": "Prusa Generic PVA @MINIIS 0.8", "sub_path": "filament/Prusa Generic PVA @MINIIS 0.8.json" }, - { - "name": "Prusament PVB @XL", - "sub_path": "filament/Prusament PVB @XL.json" - }, { "name": "Prusa Generic PA", "sub_path": "filament/Prusa Generic PA.json" @@ -688,15 +784,107 @@ "name": "Prusa Generic PA-CF @MINIIS 0.8", "sub_path": "filament/Prusa Generic PA-CF @MINIIS 0.8.json" }, + { + "name": "Prusa Generic PLA @XL", + "sub_path": "filament/Prusa Generic PLA @XL.json" + }, + { + "name": "Prusament PLA @XL", + "sub_path": "filament/Prusament PLA @XL.json" + }, + { + "name": "Prusament rPLA @XL", + "sub_path": "filament/Prusament rPLA @XL.json" + }, + { + "name": "Prusament PVB @XL", + "sub_path": "filament/Prusament PVB @XL.json" + }, + { + "name": "Prusament ASA @XL", + "sub_path": "filament/Prusament ASA @XL.json" + }, + { + "name": "Prusa Generic PETG @XL", + "sub_path": "filament/Prusa Generic PETG @XL.json" + }, + { + "name": "Prusament PETG @XL", + "sub_path": "filament/Prusament PETG @XL.json" + }, + { + "name": "Prusa Generic ABS @XL", + "sub_path": "filament/Prusa Generic ABS @XL.json" + }, + { + "name": "Prusament PC Blend @XL", + "sub_path": "filament/Prusament PC Blend @XL.json" + }, + { + "name": "Prusament PC-CF @XL", + "sub_path": "filament/Prusament PC-CF @XL.json" + }, { "name": "Prusament PA-CF @XL", "sub_path": "filament/Prusament PA-CF @XL.json" + }, + { + "name": "Prusa Generic PLA @XL 5T", + "sub_path": "filament/Prusa Generic PLA @XL 5T.json" + }, + { + "name": "Prusament PLA @XL 5T", + "sub_path": "filament/Prusament PLA @XL 5T.json" + }, + { + "name": "Prusament rPLA @XL 5T", + "sub_path": "filament/Prusament rPLA @XL 5T.json" + }, + { + "name": "Prusament PVB @XL 5T", + "sub_path": "filament/Prusament PVB @XL 5T.json" + }, + { + "name": "Prusament ASA @XL 5T", + "sub_path": "filament/Prusament ASA @XL 5T.json" + }, + { + "name": "Prusa Generic PETG @XL 5T", + "sub_path": "filament/Prusa Generic PETG @XL 5T.json" + }, + { + "name": "Prusament PETG @XL 5T", + "sub_path": "filament/Prusament PETG @XL 5T.json" + }, + { + "name": "Prusa Generic ABS @XL 5T", + "sub_path": "filament/Prusa Generic ABS @XL 5T.json" + }, + { + "name": "Prusament PC Blend @XL 5T", + "sub_path": "filament/Prusament PC Blend @XL 5T.json" + }, + { + "name": "Prusament PC-CF @XL 5T", + "sub_path": "filament/Prusament PC-CF @XL 5T.json" + }, + { + "name": "Prusament PA-CF @XL 5T", + "sub_path": "filament/Prusament PA-CF @XL 5T.json" } ], "machine_list": [ { "name": "fdm_machine_common", "sub_path": "machine/fdm_machine_common.json" + }, + { + "name": "fdm_machine_common_xl", + "sub_path": "machine/fdm_machine_common_xl.json" + }, + { + "name": "fdm_machine_common_xl_5t", + "sub_path": "machine/fdm_machine_common_xl_5t.json" }, { "name": "Prusa MK3S 0.25 nozzle", @@ -785,6 +973,30 @@ { "name": "Prusa XL 0.8 nozzle", "sub_path": "machine/Prusa XL 0.8 nozzle.json" + }, + { + "name": "Prusa XL 5T 0.25 nozzle", + "sub_path": "machine/Prusa XL 5T 0.25 nozzle.json" + }, + { + "name": "Prusa XL 5T 0.3 nozzle", + "sub_path": "machine/Prusa XL 5T 0.3 nozzle.json" + }, + { + "name": "Prusa XL 5T 0.4 nozzle", + "sub_path": "machine/Prusa XL 5T 0.4 nozzle.json" + }, + { + "name": "Prusa XL 5T 0.5 nozzle", + "sub_path": "machine/Prusa XL 5T 0.5 nozzle.json" + }, + { + "name": "Prusa XL 5T 0.6 nozzle", + "sub_path": "machine/Prusa XL 5T 0.6 nozzle.json" + }, + { + "name": "Prusa XL 5T 0.8 nozzle", + "sub_path": "machine/Prusa XL 5T 0.8 nozzle.json" } ] } diff --git a/resources/profiles/Prusa/Prusa XL 5T_cover.png b/resources/profiles/Prusa/Prusa XL 5T_cover.png new file mode 100644 index 00000000000..2a302857e61 Binary files /dev/null and b/resources/profiles/Prusa/Prusa XL 5T_cover.png differ diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.25.json index f1f91d3f787..b4d82f7794c 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.25.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFB99_5", "setting_id": "GFSA04", "name": "Prusa Generic ABS @MINIIS 0.25", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.6.json index 3ef1005948f..1a76559cbdc 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.6.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFB99_3", "setting_id": "GFSA04", "name": "Prusa Generic ABS @MINIIS 0.6", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.8.json index 8a3fefe1b44..1668805ca43 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.8.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFB99_4", "setting_id": "GFSA04", "name": "Prusa Generic ABS @MINIIS 0.8", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS.json index 08495b61ac2..97779cd277f 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFB99_2", "setting_id": "GFSA04", "name": "Prusa Generic ABS @MINIIS", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4.json index 0de674b7fea..7a98f46d84d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFB99_1", "setting_id": "GFSA04", "name": "Prusa Generic ABS @MK4", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @XL 5T.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @XL 5T.json new file mode 100644 index 00000000000..a80bfb533d1 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @XL 5T.json @@ -0,0 +1,68 @@ +{ + "type": "filament", + "setting_id": "GFSA04", + "name": "Prusa Generic ABS @XL 5T", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "nozzle_temperature_intial_layer": "255", + "nozzle_temperature": "255", + "hot_plate_temp_initial_layer": "100", + "hot_plate_temp": "105", + "slow_down_min_speed": "15", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "20" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "overhang_fan_speed": [ + "25" + ], + "close_fan_the_first_x_layers": [ + "4" + ], + "filament_loading_speed_start": "19", + "filament_loading_speed": "14", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "20", + "filament_load_time": "15", + "filament_unload_time": "12", + "filament_cooling_moves": "5", + "filament_cooling_initial_speed": "10", + "filament_cooling_final_speed": "50", + "filament_retract_lift_below": "1.5", + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_start_gcode": ["; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.04{elsif nozzle_diameter[0]==0.25}0.1{elsif nozzle_diameter[0]==0.3}0.06{elsif nozzle_diameter[0]==0.35}0.05{elsif nozzle_diameter[0]==0.5}0.03{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.012{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp"], + "compatible_printers": [ + "Prusa XL 5T 0.25 nozzle", + "Prusa XL 5T 0.3 nozzle", + "Prusa XL 5T 0.4 nozzle", + "Prusa XL 5T 0.5 nozzle", + "Prusa XL 5T 0.6 nozzle", + "Prusa XL 5T 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @XL.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @XL.json index 544d644b272..eaaa8223dc2 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @XL.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @XL.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFB99_1", "setting_id": "GFSA04", "name": "Prusa Generic ABS @XL", "from": "system", @@ -42,7 +41,7 @@ "filament_cooling_initial_speed": "10", "filament_cooling_final_speed": "50", "filament_retract_lift_below": "1.5", - "filament_start_gcode": "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.04{elsif nozzle_diameter[0]==0.25}0.1{elsif nozzle_diameter[0]==0.3}0.06{elsif nozzle_diameter[0]==0.35}0.05{elsif nozzle_diameter[0]==0.5}0.03{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.012{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp", + "filament_start_gcode": ["; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.04{elsif nozzle_diameter[0]==0.25}0.1{elsif nozzle_diameter[0]==0.3}0.06{elsif nozzle_diameter[0]==0.35}0.05{elsif nozzle_diameter[0]==0.5}0.03{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.012{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp"], "compatible_printers": [ "Prusa XL 0.25 nozzle", "Prusa XL 0.3 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS.json b/resources/profiles/Prusa/filament/Prusa Generic ABS.json index a23cd0693e6..724c0a3f802 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFB99", "setting_id": "GFSA04", "name": "Prusa Generic ABS", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.25.json index 577d06c5eaf..8dd21dc40a1 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.25.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFB98_5", "setting_id": "GFSA04", "name": "Prusa Generic ASA @MINIIS 0.25", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.6.json index 8d9c6edd6a4..f2016a0eeb8 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.6.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFB98_3", "setting_id": "GFSA04", "name": "Prusa Generic ASA @MINIIS 0.6", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.8.json index 6eff61395ec..739c7b20789 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.8.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFB98_4", "setting_id": "GFSA04", "name": "Prusa Generic ASA @MINIIS 0.8", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS.json index 5fd21311702..f6dd7710f77 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFB98_2", "setting_id": "GFSA04", "name": "Prusa Generic ASA @MINIIS", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4.json index de823b2306f..5fea76436ab 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFB98_1", "setting_id": "GFSA04", "name": "Prusa Generic ASA @MK4", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA.json b/resources/profiles/Prusa/filament/Prusa Generic ASA.json index 5631cd38e8b..86444714c3d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFB98", "setting_id": "GFSA04", "name": "Prusa Generic ASA", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.25.json index b6576cc0d10..8f37a5bd49e 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.25.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFN99_4", "setting_id": "GFSA04", "name": "Prusa Generic PA @MINIIS 0.25", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.6.json index bdb64a4a8b5..ef375d0645b 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.6.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFN99_2", "setting_id": "GFSA04", "name": "Prusa Generic PA @MINIIS 0.6", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.8.json index 2075ae25ed5..b3660df86aa 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.8.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFN99_3", "setting_id": "GFSA04", "name": "Prusa Generic PA @MINIIS 0.8", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS.json index ff8c622decd..df2b3e8bdba 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFN99_1", "setting_id": "GFSA04", "name": "Prusa Generic PA @MINIIS", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.25.json index 68b628210d7..61078927921 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.25.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFN98_4", "setting_id": "GFSA04", "name": "Prusa Generic PA-CF @MINIIS 0.25", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.6.json index f19a1545d6c..558ed7aac4e 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.6.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFN98_2", "setting_id": "GFSA04", "name": "Prusa Generic PA-CF @MINIIS 0.6", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.8.json index c4dbec05284..6d2c69a00ac 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.8.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFN98_3", "setting_id": "GFSA04", "name": "Prusa Generic PA-CF @MINIIS 0.8", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS.json index a0a6b789146..36dbe451286 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFN98_1", "setting_id": "GFSA04", "name": "Prusa Generic PA-CF @MINIIS", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF.json index 8b389957c71..338e3fceb5f 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA-CF.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFN98", "setting_id": "GFSA04", "name": "Prusa Generic PA-CF", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA.json b/resources/profiles/Prusa/filament/Prusa Generic PA.json index c92b0a981e0..d573a9185c5 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFN99", "setting_id": "GFSA04", "name": "Prusa Generic PA", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.25.json index e1ca18d3ae6..5eae079a9b1 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.25.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFC99_4", "setting_id": "GFSA04", "name": "Prusa Generic PC @MINIIS 0.25", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.6.json index 2636f59ea38..de41d697a5f 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.6.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFC99_2", "setting_id": "GFSA04", "name": "Prusa Generic PC @MINIIS 0.6", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.8.json index e7bac7b4ebf..a336739fda7 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.8.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFC99_3", "setting_id": "GFSA04", "name": "Prusa Generic PC @MINIIS 0.8", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS.json index 3dadd237647..e07f12a3558 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFC99_1", "setting_id": "GFSA04", "name": "Prusa Generic PC @MINIIS", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC.json b/resources/profiles/Prusa/filament/Prusa Generic PC.json index b1821e1d4d4..88844a11bb6 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PC.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFC99", "setting_id": "GFSA04", "name": "Prusa Generic PC", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.25.json index 8090554d091..4c64f88db23 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.25.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFG99_5", "setting_id": "GFSA04", "name": "Prusa Generic PETG @MINIIS 0.25", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.6.json index 8dad5b26e8c..8a32807d158 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.6.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFG99_3", "setting_id": "GFSA04", "name": "Prusa Generic PETG @MINIIS 0.6", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.8.json index 8829ea6f8fb..e53595ee01a 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.8.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFG99_4", "setting_id": "GFSA04", "name": "Prusa Generic PETG @MINIIS 0.8", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS.json index e9b57ebadad..7ce30af419b 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFG99_2", "setting_id": "GFSA04", "name": "Prusa Generic PETG @MINIIS", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4.json index 9caa793e9f6..7eedb38b609 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFG99_1", "setting_id": "GFSA04", "name": "Prusa Generic PETG @MK4", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @XL 5T.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @XL 5T.json new file mode 100644 index 00000000000..ef5778964f2 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @XL 5T.json @@ -0,0 +1,71 @@ +{ + "type": "filament", + "setting_id": "GFG99_PRUSA_0", + "name": "Prusa Generic PETG @XL 5T", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pet", + "nozzle_temperature_intial_layer": "230", + "nozzle_temperature": "240", + "hot_plate_temp_initial_layer": "80", + "hot_plate_temp": "80", + "full_fan_speed_layer": "5", + "slow_down_min_speed": "15", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "slow_down_layer_time": [ + "9" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "overhang_fan_speed": [ + "50" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "filament_loading_speed_start": "50", + "filament_loading_speed": "10", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "100", + "filament_load_time": "10.5", + "filament_unload_time": "8.5", + "filament_cooling_moves": "3", + "filament_cooling_initial_speed": "5", + "filament_cooling_final_speed": "2.5", + "filament_retract_lift_below": "1.5", + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_wipe": "1", + "filament_retract_before_wipe": "20%", + "filament_start_gcode": ["; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.053{elsif nozzle_diameter[0]==0.5}0.042{elsif nozzle_diameter[0]==0.6}0.032{elsif nozzle_diameter[0]==0.8}0.018{elsif nozzle_diameter[0]==0.25}0.18{elsif nozzle_diameter[0]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp"], + "compatible_printers": [ + "Prusa XL 5T 0.25 nozzle", + "Prusa XL 5T 0.3 nozzle", + "Prusa XL 5T 0.4 nozzle", + "Prusa XL 5T 0.5 nozzle", + "Prusa XL 5T 0.6 nozzle", + "Prusa XL 5T 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @XL.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @XL.json index c2c535cd911..4767e5ef774 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @XL.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @XL.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL99_1", "setting_id": "GFSA04", "name": "Prusa Generic PETG @XL", "from": "system", @@ -45,7 +44,7 @@ "filament_retract_lift_below": "1.5", "filament_wipe": "1", "filament_retract_before_wipe": "20%", - "filament_start_gcode": "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.053{elsif nozzle_diameter[0]==0.5}0.042{elsif nozzle_diameter[0]==0.6}0.032{elsif nozzle_diameter[0]==0.8}0.018{elsif nozzle_diameter[0]==0.25}0.18{elsif nozzle_diameter[0]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp", + "filament_start_gcode": ["; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.053{elsif nozzle_diameter[0]==0.5}0.042{elsif nozzle_diameter[0]==0.6}0.032{elsif nozzle_diameter[0]==0.8}0.018{elsif nozzle_diameter[0]==0.25}0.18{elsif nozzle_diameter[0]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp"], "compatible_printers": [ "Prusa XL 0.25 nozzle", "Prusa XL 0.3 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG.json b/resources/profiles/Prusa/filament/Prusa Generic PETG.json index 9076a6c3aa7..532ad318d00 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFG99", "setting_id": "GFSA04", "name": "Prusa Generic PETG", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.25.json index 9df6c863c06..bc64fdef618 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.25.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL99_5", "setting_id": "GFSA04", "name": "Prusa Generic PLA @MINIIS 0.25", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.6.json index 667c98c8011..5eaa277a93a 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.6.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL99_3", "setting_id": "GFSA04", "name": "Prusa Generic PLA @MINIIS 0.6", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.8.json index 711b271b1c0..4f4b21eab2f 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.8.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL99_4", "setting_id": "GFSA04", "name": "Prusa Generic PLA @MINIIS 0.8", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS.json index 2ac1386e716..fcb2e730baf 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL99_2", "setting_id": "GFSA04", "name": "Prusa Generic PLA @MINIIS", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4.json index d3293a39cc2..6f8952d40e2 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL99_1", "setting_id": "GFSA04", "name": "Prusa Generic PLA @MK4", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @XL 5T.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @XL 5T.json new file mode 100644 index 00000000000..fc3fea69cdc --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @XL 5T.json @@ -0,0 +1,66 @@ +{ + "type": "filament", + "setting_id": "GFSA04", + "name": "Prusa Generic PLA @XL 5T", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "nozzle_temperature_intial_layer": "215", + "nozzle_temperature": "210", + "hot_plate_temp_initial_layer": "60", + "hot_plate_temp": "60", + "full_fan_speed_layer": "3", + "slow_down_min_speed": "15", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "slow_down_layer_time": [ + "10" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "filament_loading_speed_start": "50", + "filament_loading_speed": "10", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "100", + "filament_load_time": "10.5", + "filament_unload_time": "8.5", + "filament_cooling_moves": "2", + "filament_cooling_initial_speed": "10", + "filament_cooling_final_speed": "3.5", + "filament_retract_lift_below": "0.6", + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_start_gcode": ["; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.036{elsif nozzle_diameter[0]==0.5}0.025{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.014{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp"], + "compatible_printers": [ + "Prusa XL 5T 0.25 nozzle", + "Prusa XL 5T 0.3 nozzle", + "Prusa XL 5T 0.4 nozzle", + "Prusa XL 5T 0.5 nozzle", + "Prusa XL 5T 0.6 nozzle", + "Prusa XL 5T 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @XL.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @XL.json index 06acddef204..6ab8b011ee6 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @XL.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @XL.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL99_1", "setting_id": "GFSA04", "name": "Prusa Generic PLA @XL", "from": "system", @@ -40,7 +39,7 @@ "filament_cooling_initial_speed": "10", "filament_cooling_final_speed": "3.5", "filament_retract_lift_below": "0.6", - "filament_start_gcode": "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.036{elsif nozzle_diameter[0]==0.5}0.025{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.014{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp", + "filament_start_gcode": ["; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.036{elsif nozzle_diameter[0]==0.5}0.025{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.014{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp"], "compatible_printers": [ "Prusa XL 0.25 nozzle", "Prusa XL 0.3 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.25.json index 929fe26671d..e9c54760442 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.25.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL98_5", "setting_id": "GFSA04", "name": "Prusa Generic PLA-CF @MINIIS 0.25", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.6.json index cee03633005..f095249c549 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.6.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL98_3", "setting_id": "GFSA04", "name": "Prusa Generic PLA-CF @MINIIS 0.6", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.8.json index 1bfce103521..c784a473abf 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.8.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL98_4", "setting_id": "GFSA04", "name": "Prusa Generic PLA-CF @MINIIS 0.8", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS.json index 24559261d9b..740c2bfe193 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL98_1", "setting_id": "GFSA04", "name": "Prusa Generic PLA-CF @MINIIS", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF.json index 4461005ad3f..6bb298a0f4e 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL98", "setting_id": "GFSA04", "name": "Prusa Generic PLA-CF", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA.json b/resources/profiles/Prusa/filament/Prusa Generic PLA.json index f31ec71c518..049691036cd 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL99", "setting_id": "GFSA04", "name": "Prusa Generic PLA", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.25.json index bbbc4a6aa96..34ce1a84e4f 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.25.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFS99_4", "setting_id": "GFSA04", "name": "Prusa Generic PVA @MINIIS 0.25", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.6.json index d9f64abbedb..3ee44fa9a6d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.6.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFS99_2", "setting_id": "GFSA04", "name": "Prusa Generic PVA @MINIIS 0.6", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.8.json index 5e0055a5fbe..eeb2dbd43d6 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.8.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFS99_3", "setting_id": "GFSA04", "name": "Prusa Generic PVA @MINIIS 0.8", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS.json index 164b7179649..b5f5602f37d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFS99_1", "setting_id": "GFSA04", "name": "Prusa Generic PVA @MINIIS", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA.json b/resources/profiles/Prusa/filament/Prusa Generic PVA.json index 2c0e2017e37..c5cdfa85182 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFS99", "setting_id": "GFSA04", "name": "Prusa Generic PVA", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json index b9214b30311..3baf1ac2e43 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFU99_2", "setting_id": "GFSA04", "name": "Prusa Generic TPU @MINIIS", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4.json index ac940c00aad..27fbaa66013 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4.json +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFU99_1", "setting_id": "GFSA04", "name": "Prusa Generic TPU @MK4", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU.json b/resources/profiles/Prusa/filament/Prusa Generic TPU.json index 47239a500ee..5384820c98d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU.json +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFU99", "setting_id": "GFSA04", "name": "Prusa Generic TPU", "from": "system", diff --git a/resources/profiles/Prusa/filament/Prusament ASA @XL 5T.json b/resources/profiles/Prusa/filament/Prusament ASA @XL 5T.json new file mode 100644 index 00000000000..2022485fabd --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament ASA @XL 5T.json @@ -0,0 +1,70 @@ +{ + "type": "filament", + "setting_id": "GFSA04", + "name": "Prusament ASA @XL 5T", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_asa", + "nozzle_temperature_intial_layer": "260", + "nozzle_temperature": "260", + "hot_plate_temp_initial_layer": "100", + "hot_plate_temp": "105", + "filament_flow_ratio": [ + "1" + ], + "fan_max_speed": [ + "10" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "30" + ], + "close_fan_the_first_x_layers": [ + "4" + ], + "slow_down_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "15" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_loading_speed_start": "19", + "filament_loading_speed": "14", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "20", + "filament_load_time": "15", + "filament_unload_time": "12", + "filament_cooling_moves": "5", + "filament_cooling_initial_speed": "10", + "filament_cooling_final_speed": "50", + "filament_retract_lift_below": "1.5", + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_start_gcode": ["; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.04{elsif nozzle_diameter[0]==0.25}0.1{elsif nozzle_diameter[0]==0.3}0.06{elsif nozzle_diameter[0]==0.35}0.05{elsif nozzle_diameter[0]==0.5}0.03{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.012{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp"], + "compatible_printers": [ + "Prusa XL 5T 0.25 nozzle", + "Prusa XL 5T 0.3 nozzle", + "Prusa XL 5T 0.4 nozzle", + "Prusa XL 5T 0.5 nozzle", + "Prusa XL 5T 0.6 nozzle", + "Prusa XL 5T 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusament ASA @XL.json b/resources/profiles/Prusa/filament/Prusament ASA @XL.json index 36e1f6c6018..496d63fd1f0 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @XL.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @XL.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFB98", "setting_id": "GFSA04", "name": "Prusament ASA @XL", "from": "system", @@ -44,7 +43,7 @@ "filament_cooling_initial_speed": "10", "filament_cooling_final_speed": "50", "filament_retract_lift_below": "1.5", - "filament_start_gcode": "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.04{elsif nozzle_diameter[0]==0.25}0.1{elsif nozzle_diameter[0]==0.3}0.06{elsif nozzle_diameter[0]==0.35}0.05{elsif nozzle_diameter[0]==0.5}0.03{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.012{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp", + "filament_start_gcode": ["; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.04{elsif nozzle_diameter[0]==0.25}0.1{elsif nozzle_diameter[0]==0.3}0.06{elsif nozzle_diameter[0]==0.35}0.05{elsif nozzle_diameter[0]==0.5}0.03{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.012{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp"], "compatible_printers": [ "Prusa XL 0.25 nozzle", "Prusa XL 0.3 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament PA-CF @XL 5T.json b/resources/profiles/Prusa/filament/Prusament PA-CF @XL 5T.json new file mode 100644 index 00000000000..c15ee9784e6 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament PA-CF @XL 5T.json @@ -0,0 +1,70 @@ +{ + "type": "filament", + "setting_id": "GFSA04", + "name": "Prusament PA-CF @XL 5T", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa11cf", + "nozzle_temperature_intial_layer": "275", + "nozzle_temperature": "285", + "hot_plate_temp_initial_layer": "100", + "hot_plate_temp": "105", + "filament_flow_ratio": [ + "1.05" + ], + "fan_max_speed": [ + "20" + ], + "fan_min_speed": [ + "20" + ], + "overhang_fan_speed": [ + "30" + ], + "close_fan_the_first_x_layers": [ + "4" + ], + "slow_down_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "filament_max_volumetric_speed": [ + "6.5" + ], + "filament_loading_speed_start": "19", + "filament_loading_speed": "14", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "20", + "filament_load_time": "15", + "filament_unload_time": "12", + "filament_cooling_moves": "5", + "filament_cooling_initial_speed": "10", + "filament_cooling_final_speed": "50", + "filament_retract_lift_below": "1.5", + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_start_gcode": ["; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.6}0.025{elsif nozzle_diameter[0]==0.8}0.016{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.09{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S45 ; set heatbreak target temp"], + "compatible_printers": [ + "Prusa XL 5T 0.25 nozzle", + "Prusa XL 5T 0.3 nozzle", + "Prusa XL 5T 0.4 nozzle", + "Prusa XL 5T 0.5 nozzle", + "Prusa XL 5T 0.6 nozzle", + "Prusa XL 5T 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusament PA-CF @XL.json b/resources/profiles/Prusa/filament/Prusament PA-CF @XL.json index 28d4862819a..d718cf7966c 100644 --- a/resources/profiles/Prusa/filament/Prusament PA-CF @XL.json +++ b/resources/profiles/Prusa/filament/Prusament PA-CF @XL.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFN98", "setting_id": "GFSA04", "name": "Prusament PA-CF @XL", "from": "system", @@ -44,7 +43,7 @@ "filament_cooling_initial_speed": "10", "filament_cooling_final_speed": "50", "filament_retract_lift_below": "1.5", - "filament_start_gcode": "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.6}0.025{elsif nozzle_diameter[0]==0.8}0.016{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.09{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S45 ; set heatbreak target temp", + "filament_start_gcode": ["; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.6}0.025{elsif nozzle_diameter[0]==0.8}0.016{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.09{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S45 ; set heatbreak target temp"], "compatible_printers": [ "Prusa XL 0.25 nozzle", "Prusa XL 0.3 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @XL 5T.json b/resources/profiles/Prusa/filament/Prusament PC Blend @XL 5T.json new file mode 100644 index 00000000000..aad5ab31ef2 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @XL 5T.json @@ -0,0 +1,70 @@ +{ + "type": "filament", + "setting_id": "GFSA04", + "name": "Prusament PC Blend @XL 5T", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pc", + "nozzle_temperature_intial_layer": "275", + "nozzle_temperature": "275", + "hot_plate_temp_initial_layer": "100", + "hot_plate_temp": "105", + "filament_flow_ratio": [ + "1" + ], + "fan_max_speed": [ + "10" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "30" + ], + "close_fan_the_first_x_layers": [ + "4" + ], + "slow_down_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "filament_loading_speed_start": "19", + "filament_loading_speed": "14", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "20", + "filament_load_time": "15", + "filament_unload_time": "12", + "filament_cooling_moves": "5", + "filament_cooling_initial_speed": "10", + "filament_cooling_final_speed": "50", + "filament_retract_lift_below": "1.5", + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_start_gcode": ["; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.6}0.025{elsif nozzle_diameter[0]==0.8}0.016{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.09{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S45 ; set heatbreak target temp"], + "compatible_printers": [ + "Prusa XL 5T 0.25 nozzle", + "Prusa XL 5T 0.3 nozzle", + "Prusa XL 5T 0.4 nozzle", + "Prusa XL 5T 0.5 nozzle", + "Prusa XL 5T 0.6 nozzle", + "Prusa XL 5T 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @XL.json b/resources/profiles/Prusa/filament/Prusament PC Blend @XL.json index a2bfaada985..025cc39eee2 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @XL.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @XL.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL99_1", "setting_id": "GFSA04", "name": "Prusament PC Blend @XL", "from": "system", @@ -44,7 +43,7 @@ "filament_cooling_initial_speed": "10", "filament_cooling_final_speed": "50", "filament_retract_lift_below": "1.5", - "filament_start_gcode": "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.6}0.025{elsif nozzle_diameter[0]==0.8}0.016{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.09{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S45 ; set heatbreak target temp", + "filament_start_gcode": ["; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.6}0.025{elsif nozzle_diameter[0]==0.8}0.016{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.09{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S45 ; set heatbreak target temp"], "compatible_printers": [ "Prusa XL 0.25 nozzle", "Prusa XL 0.3 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament PC-CF @XL 5T.json b/resources/profiles/Prusa/filament/Prusament PC-CF @XL 5T.json new file mode 100644 index 00000000000..1bba76b7c40 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament PC-CF @XL 5T.json @@ -0,0 +1,70 @@ +{ + "type": "filament", + "setting_id": "GFSA04", + "name": "Prusament PC-CF @XL 5T", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pccf", + "nozzle_temperature_intial_layer": "285", + "nozzle_temperature": "285", + "hot_plate_temp_initial_layer": "100", + "hot_plate_temp": "105", + "filament_flow_ratio": [ + "1.04" + ], + "fan_max_speed": [ + "10" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "30" + ], + "close_fan_the_first_x_layers": [ + "4" + ], + "slow_down_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_loading_speed_start": "19", + "filament_loading_speed": "14", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "20", + "filament_load_time": "15", + "filament_unload_time": "12", + "filament_cooling_moves": "5", + "filament_cooling_initial_speed": "10", + "filament_cooling_final_speed": "50", + "filament_retract_lift_below": "1.5", + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_start_gcode": ["; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.6}0.025{elsif nozzle_diameter[0]==0.8}0.016{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.09{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S45 ; set heatbreak target temp"], + "compatible_printers": [ + "Prusa XL 5T 0.25 nozzle", + "Prusa XL 5T 0.3 nozzle", + "Prusa XL 5T 0.4 nozzle", + "Prusa XL 5T 0.5 nozzle", + "Prusa XL 5T 0.6 nozzle", + "Prusa XL 5T 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusament PC-CF @XL.json b/resources/profiles/Prusa/filament/Prusament PC-CF @XL.json index 79c707f9996..44bbd20d6a9 100644 --- a/resources/profiles/Prusa/filament/Prusament PC-CF @XL.json +++ b/resources/profiles/Prusa/filament/Prusament PC-CF @XL.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL99_1", "setting_id": "GFSA04", "name": "Prusament PC-CF @XL", "from": "system", @@ -44,7 +43,7 @@ "filament_cooling_initial_speed": "10", "filament_cooling_final_speed": "50", "filament_retract_lift_below": "1.5", - "filament_start_gcode": "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.6}0.025{elsif nozzle_diameter[0]==0.8}0.016{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.09{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S45 ; set heatbreak target temp", + "filament_start_gcode": ["; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.6}0.025{elsif nozzle_diameter[0]==0.8}0.016{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.09{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S45 ; set heatbreak target temp"], "compatible_printers": [ "Prusa XL 0.25 nozzle", "Prusa XL 0.3 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament PETG @XL 5T.json b/resources/profiles/Prusa/filament/Prusament PETG @XL 5T.json new file mode 100644 index 00000000000..5c62c313cc0 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament PETG @XL 5T.json @@ -0,0 +1,71 @@ +{ + "type": "filament", + "setting_id": "GFG99_PRUSA_1", + "name": "Prusament PETG @XL 5T", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pet", + "nozzle_temperature_intial_layer": "240", + "nozzle_temperature": "250", + "hot_plate_temp_initial_layer": "80", + "hot_plate_temp": "80", + "full_fan_speed_layer": "5", + "slow_down_min_speed": "15", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "9.5" + ], + "slow_down_layer_time": [ + "9" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "overhang_fan_speed": [ + "50" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "filament_loading_speed_start": "50", + "filament_loading_speed": "10", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "100", + "filament_load_time": "10.5", + "filament_unload_time": "8.5", + "filament_cooling_moves": "3", + "filament_cooling_initial_speed": "5", + "filament_cooling_final_speed": "2.5", + "filament_retract_lift_below": "1.5", + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_wipe": "1", + "filament_retract_before_wipe": "20%", + "filament_start_gcode": ["; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.053{elsif nozzle_diameter[0]==0.5}0.042{elsif nozzle_diameter[0]==0.6}0.032{elsif nozzle_diameter[0]==0.8}0.018{elsif nozzle_diameter[0]==0.25}0.18{elsif nozzle_diameter[0]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp"], + "compatible_printers": [ + "Prusa XL 5T 0.25 nozzle", + "Prusa XL 5T 0.3 nozzle", + "Prusa XL 5T 0.4 nozzle", + "Prusa XL 5T 0.5 nozzle", + "Prusa XL 5T 0.6 nozzle", + "Prusa XL 5T 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusament PETG @XL.json b/resources/profiles/Prusa/filament/Prusament PETG @XL.json index c4505feda5b..da28d7d5883 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @XL.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @XL.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL99_1", "setting_id": "GFSA04", "name": "Prusament PETG @XL", "from": "system", @@ -45,7 +44,7 @@ "filament_retract_lift_below": "1.5", "filament_wipe": "1", "filament_retract_before_wipe": "20%", - "filament_start_gcode": "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.053{elsif nozzle_diameter[0]==0.5}0.042{elsif nozzle_diameter[0]==0.6}0.032{elsif nozzle_diameter[0]==0.8}0.018{elsif nozzle_diameter[0]==0.25}0.18{elsif nozzle_diameter[0]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp", + "filament_start_gcode": ["; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.053{elsif nozzle_diameter[0]==0.5}0.042{elsif nozzle_diameter[0]==0.6}0.032{elsif nozzle_diameter[0]==0.8}0.018{elsif nozzle_diameter[0]==0.25}0.18{elsif nozzle_diameter[0]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp"], "compatible_printers": [ "Prusa XL 0.25 nozzle", "Prusa XL 0.3 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament PLA @XL 5T.json b/resources/profiles/Prusa/filament/Prusament PLA @XL 5T.json new file mode 100644 index 00000000000..b3efef6127f --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament PLA @XL 5T.json @@ -0,0 +1,66 @@ +{ + "type": "filament", + "setting_id": "GFSA04", + "name": "Prusament PLA @XL 5T", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "nozzle_temperature_intial_layer": "215", + "nozzle_temperature": "215", + "hot_plate_temp_initial_layer": "60", + "hot_plate_temp": "60", + "full_fan_speed_layer": "3", + "slow_down_min_speed": "15", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "slow_down_layer_time": [ + "10" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "filament_loading_speed_start": "50", + "filament_loading_speed": "10", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "100", + "filament_load_time": "10.5", + "filament_unload_time": "8.5", + "filament_cooling_moves": "2", + "filament_cooling_initial_speed": "10", + "filament_cooling_final_speed": "3.5", + "filament_retract_lift_below": "0.6", + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_start_gcode": ["; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.036{elsif nozzle_diameter[0]==0.5}0.025{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.014{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp"], + "compatible_printers": [ + "Prusa XL 5T 0.25 nozzle", + "Prusa XL 5T 0.3 nozzle", + "Prusa XL 5T 0.4 nozzle", + "Prusa XL 5T 0.5 nozzle", + "Prusa XL 5T 0.6 nozzle", + "Prusa XL 5T 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusament PLA @XL.json b/resources/profiles/Prusa/filament/Prusament PLA @XL.json index 949dfb23b30..fe9f0b52810 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @XL.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @XL.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL99_1", "setting_id": "GFSA04", "name": "Prusament PLA @XL", "from": "system", @@ -40,7 +39,7 @@ "filament_cooling_initial_speed": "10", "filament_cooling_final_speed": "3.5", "filament_retract_lift_below": "0.6", - "filament_start_gcode": "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.036{elsif nozzle_diameter[0]==0.5}0.025{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.014{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp", + "filament_start_gcode": ["; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.036{elsif nozzle_diameter[0]==0.5}0.025{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.014{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp"], "compatible_printers": [ "Prusa XL 0.25 nozzle", "Prusa XL 0.3 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament PVB @XL 5T.json b/resources/profiles/Prusa/filament/Prusament PVB @XL 5T.json new file mode 100644 index 00000000000..354f904cefb --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament PVB @XL 5T.json @@ -0,0 +1,71 @@ +{ + "type": "filament", + "setting_id": "GFSA04", + "name": "Prusament PVB @XL 5T", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pvb", + "nozzle_temperature_intial_layer": "215", + "nozzle_temperature": "215", + "hot_plate_temp_initial_layer": "75", + "hot_plate_temp": "75", + "slow_down_min_speed": "15", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "slow_down_layer_time": [ + "10" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "full_fan_speed_layer": [ + "3" + ], + "filament_loading_speed_start": "50", + "filament_loading_speed": "10", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "100", + "filament_load_time": "10.5", + "filament_unload_time": "8.5", + "filament_cooling_moves": "2", + "filament_cooling_initial_speed": "10", + "filament_cooling_final_speed": "3.5", + "filament_retract_lift_below": "0.6", + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_start_gcode": ["; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.036{elsif nozzle_diameter[0]==0.5}0.025{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.014{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp"], + "compatible_printers": [ + "Prusa XL 5T 0.25 nozzle", + "Prusa XL 5T 0.3 nozzle", + "Prusa XL 5T 0.4 nozzle", + "Prusa XL 5T 0.5 nozzle", + "Prusa XL 5T 0.6 nozzle", + "Prusa XL 5T 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusament PVB @XL.json b/resources/profiles/Prusa/filament/Prusament PVB @XL.json index c7e1e5fe0e5..67b2c9501cb 100644 --- a/resources/profiles/Prusa/filament/Prusament PVB @XL.json +++ b/resources/profiles/Prusa/filament/Prusament PVB @XL.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFS99", "setting_id": "GFSA04", "name": "Prusament PVB @XL", "from": "system", @@ -45,7 +44,7 @@ "filament_cooling_initial_speed": "10", "filament_cooling_final_speed": "3.5", "filament_retract_lift_below": "0.6", - "filament_start_gcode": "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.036{elsif nozzle_diameter[0]==0.5}0.025{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.014{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp", + "filament_start_gcode": ["; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.036{elsif nozzle_diameter[0]==0.5}0.025{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.014{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp"], "compatible_printers": [ "Prusa XL 0.25 nozzle", "Prusa XL 0.3 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament rPLA @XL 5T.json b/resources/profiles/Prusa/filament/Prusament rPLA @XL 5T.json new file mode 100644 index 00000000000..9a7cce64550 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament rPLA @XL 5T.json @@ -0,0 +1,69 @@ +{ + "type": "filament", + "setting_id": "GFSA04", + "name": "Prusament rPLA @XL 5T", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "nozzle_temperature_intial_layer": "205", + "nozzle_temperature": "205", + "hot_plate_temp_initial_layer": "60", + "hot_plate_temp": "60", + "full_fan_speed_layer": "3", + "slow_down_min_speed": "15", + "filament_flow_ratio": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "slow_down_layer_time": [ + "10" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_loading_speed_start": "50", + "filament_loading_speed": "10", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "100", + "filament_load_time": "10.5", + "filament_unload_time": "8.5", + "filament_cooling_moves": "2", + "filament_cooling_initial_speed": "10", + "filament_cooling_final_speed": "3.5", + "filament_retract_lift_below": "0.6", + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_start_gcode": ["; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.036{elsif nozzle_diameter[0]==0.5}0.025{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.014{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp"], + "compatible_printers": [ + "Prusa XL 5T 0.25 nozzle", + "Prusa XL 5T 0.3 nozzle", + "Prusa XL 5T 0.4 nozzle", + "Prusa XL 5T 0.5 nozzle", + "Prusa XL 5T 0.6 nozzle", + "Prusa XL 5T 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusament rPLA @XL.json b/resources/profiles/Prusa/filament/Prusament rPLA @XL.json index 6fa3b54c174..cfe956641f0 100644 --- a/resources/profiles/Prusa/filament/Prusament rPLA @XL.json +++ b/resources/profiles/Prusa/filament/Prusament rPLA @XL.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL99_1", "setting_id": "GFSA04", "name": "Prusament rPLA @XL", "from": "system", @@ -43,7 +42,7 @@ "filament_cooling_initial_speed": "10", "filament_cooling_final_speed": "3.5", "filament_retract_lift_below": "0.6", - "filament_start_gcode": "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.036{elsif nozzle_diameter[0]==0.5}0.025{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.014{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp", + "filament_start_gcode": ["; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.036{elsif nozzle_diameter[0]==0.5}0.025{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.014{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp"], "compatible_printers": [ "Prusa XL 0.25 nozzle", "Prusa XL 0.3 nozzle", diff --git a/resources/profiles/Prusa/filament/fdm_filament_abs.json b/resources/profiles/Prusa/filament/fdm_filament_abs.json index 7e478a37f3f..d60e0c16bd0 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_abs.json +++ b/resources/profiles/Prusa/filament/fdm_filament_abs.json @@ -4,22 +4,23 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_common", - "cool_plate_temp" : [ + "filament_id": "GFB99", + "cool_plate_temp": [ "105" ], - "eng_plate_temp" : [ + "eng_plate_temp": [ "105" ], - "hot_plate_temp" : [ + "hot_plate_temp": [ "105" ], - "cool_plate_temp_initial_layer" : [ + "cool_plate_temp_initial_layer": [ "105" ], - "eng_plate_temp_initial_layer" : [ + "eng_plate_temp_initial_layer": [ "105" ], - "hot_plate_temp_initial_layer" : [ + "hot_plate_temp_initial_layer": [ "105" ], "slow_down_for_layer_cooling": [ @@ -43,6 +44,7 @@ "filament_cost": [ "20" ], + "idle_temperature": "0", "nozzle_temperature_initial_layer": [ "260" ], @@ -79,4 +81,4 @@ "slow_down_layer_time": [ "3" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/fdm_filament_asa.json b/resources/profiles/Prusa/filament/fdm_filament_asa.json index 29a752a4ee0..7aa9917aa45 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_asa.json +++ b/resources/profiles/Prusa/filament/fdm_filament_asa.json @@ -4,6 +4,7 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_common", + "filament_id": "GFB98", "cool_plate_temp" : [ "105" ], @@ -43,6 +44,7 @@ "filament_cost": [ "20" ], + "idle_temperature": "0", "nozzle_temperature_initial_layer": [ "260" ], diff --git a/resources/profiles/Prusa/filament/fdm_filament_pa.json b/resources/profiles/Prusa/filament/fdm_filament_pa.json index e75e2e9f6c9..c473b6a203f 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_pa.json +++ b/resources/profiles/Prusa/filament/fdm_filament_pa.json @@ -4,6 +4,7 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_common", + "filament_id": "GFN99", "cool_plate_temp" : [ "0" ], @@ -43,6 +44,7 @@ "filament_cost": [ "20" ], + "idle_temperature": "0", "nozzle_temperature_initial_layer": [ "290" ], diff --git a/resources/profiles/Prusa/filament/fdm_filament_pa11cf.json b/resources/profiles/Prusa/filament/fdm_filament_pa11cf.json index 3be757e798c..2afd4c1696e 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_pa11cf.json +++ b/resources/profiles/Prusa/filament/fdm_filament_pa11cf.json @@ -4,6 +4,7 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_common", + "filament_id": "GFN98", "cool_plate_temp" : [ "0" ], @@ -43,6 +44,7 @@ "filament_cost": [ "20" ], + "idle_temperature": "0", "nozzle_temperature_initial_layer": [ "290" ], diff --git a/resources/profiles/Prusa/filament/fdm_filament_pc.json b/resources/profiles/Prusa/filament/fdm_filament_pc.json index 89f770017e7..2a152fe3545 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_pc.json +++ b/resources/profiles/Prusa/filament/fdm_filament_pc.json @@ -4,6 +4,7 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_common", + "filament_id": "GFC99", "cool_plate_temp" : [ "0" ], @@ -43,6 +44,7 @@ "filament_cost": [ "20" ], + "idle_temperature": "0", "nozzle_temperature_initial_layer": [ "270" ], diff --git a/resources/profiles/Prusa/filament/fdm_filament_pccf.json b/resources/profiles/Prusa/filament/fdm_filament_pccf.json index 483e28036a4..1c6e13f360b 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_pccf.json +++ b/resources/profiles/Prusa/filament/fdm_filament_pccf.json @@ -4,6 +4,7 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_common", + "filament_id": "GFC98", "cool_plate_temp" : [ "0" ], @@ -43,6 +44,7 @@ "filament_cost": [ "20" ], + "idle_temperature": "0", "nozzle_temperature_initial_layer": [ "270" ], diff --git a/resources/profiles/Prusa/filament/fdm_filament_pet.json b/resources/profiles/Prusa/filament/fdm_filament_pet.json index 2f98be665f1..b494b4d3a75 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_pet.json +++ b/resources/profiles/Prusa/filament/fdm_filament_pet.json @@ -4,6 +4,7 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_common", + "filament_id": "GFT02", "cool_plate_temp" : [ "60" ], @@ -43,6 +44,7 @@ "filament_cost": [ "30" ], + "idle_temperature": "0", "nozzle_temperature_initial_layer": [ "255" ], diff --git a/resources/profiles/Prusa/filament/fdm_filament_pla.json b/resources/profiles/Prusa/filament/fdm_filament_pla.json index 9e1e42db6bb..9e7c6746f26 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_pla.json +++ b/resources/profiles/Prusa/filament/fdm_filament_pla.json @@ -4,6 +4,7 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_common", + "filament_id": "GFL99", "fan_cooling_layer_time": [ "100" ], @@ -37,6 +38,7 @@ "hot_plate_temp_initial_layer" : [ "60" ], + "idle_temperature": "0", "nozzle_temperature_initial_layer": [ "220" ], diff --git a/resources/profiles/Prusa/filament/fdm_filament_pva.json b/resources/profiles/Prusa/filament/fdm_filament_pva.json index f529bb39af4..ee8e4311e3e 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_pva.json +++ b/resources/profiles/Prusa/filament/fdm_filament_pva.json @@ -4,6 +4,7 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_common", + "filament_id": "GFS99", "cool_plate_temp" : [ "35" ], @@ -43,6 +44,7 @@ "filament_cost": [ "20" ], + "idle_temperature": "0", "nozzle_temperature_initial_layer": [ "220" ], diff --git a/resources/profiles/Prusa/filament/fdm_filament_pvb.json b/resources/profiles/Prusa/filament/fdm_filament_pvb.json index db5fa7823b8..b4fed01543d 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_pvb.json +++ b/resources/profiles/Prusa/filament/fdm_filament_pvb.json @@ -4,6 +4,7 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_common", + "filament_id": "GFS98", "cool_plate_temp" : [ "35" ], @@ -43,6 +44,7 @@ "filament_cost": [ "20" ], + "idle_temperature": "0", "nozzle_temperature_initial_layer": [ "220" ], diff --git a/resources/profiles/Prusa/filament/fdm_filament_tpu.json b/resources/profiles/Prusa/filament/fdm_filament_tpu.json index d5cc57fbcc0..27a8b984b79 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_tpu.json +++ b/resources/profiles/Prusa/filament/fdm_filament_tpu.json @@ -4,6 +4,7 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_common", + "filament_id": "GFU99", "cool_plate_temp" : [ "30" ], @@ -40,6 +41,7 @@ "filament_retraction_length": [ "0.4" ], + "idle_temperature": "0", "nozzle_temperature_initial_layer": [ "240" ], diff --git a/resources/profiles/Prusa/machine/Prusa XL 0.25 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 0.25 nozzle.json index a8a7cd75da5..ade0d249c87 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 0.25 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 0.25 nozzle.json @@ -4,115 +4,18 @@ "name": "Prusa XL 0.25 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_machine_common", + "inherits": "fdm_machine_common_xl", "gcode_flavor": "marlin2", "printer_model": "Prusa XL", "default_filament_profile": "Prusa Generic PLA @XL", "default_print_profile": "0.15mm Speed @Prusa XL 0.25", - "extruder_clearance_radius": "67", - "extruder_clearance_height_to_rod": "21", - "extruder_clearance_height_to_lid": "21", "printer_variant": "0.25", "nozzle_diameter": [ "0.25" ], "max_layer_height": "0.15", "min_layer_height": "0.05", - "bed_exclude_area": [ - "0x0" - ], - "printable_area": [ - "0x0", - "360x0", - "360x360", - "0x360" - ], - "machine_max_acceleration_e": [ - "2500", - "2500" - ], - "machine_max_acceleration_extruding": [ - "4000", - "4000" - ], - "machine_max_acceleration_retracting": [ - "1200", - "1200" - ], - "machine_max_acceleration_x": [ - "7000", - "7000" - ], - "machine_max_acceleration_y": [ - "7000", - "7000" - ], - "machine_max_acceleration_z": [ - "200", - "200" - ], - "machine_max_acceleration_travel": [ - "2500", - "2500" - ], - "machine_max_speed_e": [ - "100", - "100" - ], - "machine_max_speed_x": [ - "400", - "400" - ], - "machine_max_speed_y": [ - "400", - "400" - ], - "machine_max_speed_z": [ - "12", - "12" - ], - "machine_max_jerk_e": [ - "10", - "10" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "2", - "2" - ], "retraction_length": "0.8", "retraction_speed": "35", - "detraction_speed": "25", - "retraction_minimum_travel": "1.5", - "retract_when_changing_layer": "1", - "wipe": "1", - "retract_before_wipe": "80%", - "retract_lift_below": "1.5", - "z_hop_types": "Auto Lift", - "host_type": "prusalink", - "printable_height": "360", - "machine_end_gcode": "{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720{endif} ; Move bed down\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X6 Y350 F6000 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+100, max_print_height)} F300{endif} ; Move bed down\nM900 K0 ; reset LA\nM142 S36 ; reset heatbreak target temp\nM221 S100 ; reset flow percentage\nM84 ; disable motors\n; max_layer_z = [max_layer_z]", - "machine_pause_gcode": "M601", - "machine_start_gcode": "M17 ; enable steppers\nM862.3 P \"XL\" ; printer model check\nM115 U6.0.1+14848\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\nM862.1 P[nozzle_diameter]\n; set & wait for bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n; home carriage, pick tool, home all\nG28 XY\nM84 E ; turn off E motor\nG28 Z\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG29 G ; absorb heat\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F4800\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z10 F480 ; move away in Z\n{if first_layer_bed_temperature[0] > 60}\nG0 Z70 F480 ; move away (a bit more) in Z\nG0 X30 Y{print_bed_min[1]} F6000 ; move away in X/Y for higher bed temperatures\n{endif}\nM106 S100 ; cool off the nozzle\nM107 ; stop cooling off the nozzle - turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nM104 S[first_layer_temperature] ; set extruder temp\nG1 Z10 F720 ; move away in Z\nG0 X30 Y-8 F6000 ; move next to the sheet\n; wait for extruder temp\nM109 T0 S{first_layer_temperature[0]}\n;\n; purge\n;\nG92 E0 ; reset extruder position\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -8 : -5.5)} ; move close to the sheet's edge\nG1 E{(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E10 X40 Z0.2 F500 ; purge\nG0 X70 E9 F800 ; purge\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG92 E0 ; reset extruder position", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]", - "change_filament_gcode": "M600\nG1 E0.3 F1500 ; prime after color change", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_XLIS\nPG\nINPUT_SHAPER", - "scan_first_layer": "0", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0", - "thumbnails": [ - "16x16/QOI", - "313x173/QOI", - "440x240/QOI", - "480x240/QOI", - "640x480/PNG" - ] + "detraction_speed": "25" } diff --git a/resources/profiles/Prusa/machine/Prusa XL 0.3 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 0.3 nozzle.json index e83f1871a1c..b678114c03b 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 0.3 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 0.3 nozzle.json @@ -1,118 +1,21 @@ { - "type": "machine", - "setting_id": "GM003", - "name": "Prusa XL 0.3 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "gcode_flavor": "marlin2", - "printer_model": "Prusa XL", - "default_filament_profile": "Prusa Generic PLA @XL", - "default_print_profile": "0.20mm Speed @Prusa XL 0.3", - "extruder_clearance_radius": "67", - "extruder_clearance_height_to_rod": "21", - "extruder_clearance_height_to_lid": "21", - "printer_variant": "0.3", - "nozzle_diameter": [ - "0.3" - ], - "max_layer_height": "0.22", - "min_layer_height": "0.05", - "bed_exclude_area": [ - "0x0" - ], - "printable_area": [ - "0x0", - "360x0", - "360x360", - "0x360" - ], - "machine_max_acceleration_e": [ - "2500", - "2500" - ], - "machine_max_acceleration_extruding": [ - "4000", - "4000" - ], - "machine_max_acceleration_retracting": [ - "1200", - "1200" - ], - "machine_max_acceleration_x": [ - "7000", - "7000" - ], - "machine_max_acceleration_y": [ - "7000", - "7000" - ], - "machine_max_acceleration_z": [ - "200", - "200" - ], - "machine_max_acceleration_travel": [ - "3000", - "3000" - ], - "machine_max_speed_e": [ - "100", - "100" - ], - "machine_max_speed_x": [ - "400", - "400" - ], - "machine_max_speed_y": [ - "400", - "400" - ], - "machine_max_speed_z": [ - "12", - "12" - ], - "machine_max_jerk_e": [ - "10", - "10" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "2", - "2" - ], - "retraction_length": "0.7", - "retraction_speed": "35", - "detraction_speed": "25", - "retraction_minimum_travel": "1.5", - "retract_when_changing_layer": "1", - "wipe": "1", - "retract_before_wipe": "80%", - "retract_lift_below": "1.5", - "z_hop_types": "Auto Lift", - "host_type": "prusalink", - "printable_height": "360", - "machine_end_gcode": "{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720{endif} ; Move bed down\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X6 Y350 F6000 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+100, max_print_height)} F300{endif} ; Move bed down\nM900 K0 ; reset LA\nM142 S36 ; reset heatbreak target temp\nM221 S100 ; reset flow percentage\nM84 ; disable motors\n; max_layer_z = [max_layer_z]", - "machine_pause_gcode": "M601", - "machine_start_gcode": "M17 ; enable steppers\nM862.3 P \"XL\" ; printer model check\nM115 U6.0.1+14848\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\nM862.1 P[nozzle_diameter]\n; set & wait for bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n; home carriage, pick tool, home all\nG28 XY\nM84 E ; turn off E motor\nG28 Z\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG29 G ; absorb heat\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F4800\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z10 F480 ; move away in Z\n{if first_layer_bed_temperature[0] > 60}\nG0 Z70 F480 ; move away (a bit more) in Z\nG0 X30 Y{print_bed_min[1]} F6000 ; move away in X/Y for higher bed temperatures\n{endif}\nM106 S100 ; cool off the nozzle\nM107 ; stop cooling off the nozzle - turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nM104 S[first_layer_temperature] ; set extruder temp\nG1 Z10 F720 ; move away in Z\nG0 X30 Y-8 F6000 ; move next to the sheet\n; wait for extruder temp\nM109 T0 S{first_layer_temperature[0]}\n;\n; purge\n;\nG92 E0 ; reset extruder position\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -8 : -5.5)} ; move close to the sheet's edge\nG1 E{(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E10 X40 Z0.2 F500 ; purge\nG0 X70 E9 F800 ; purge\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG92 E0 ; reset extruder position", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]", - "change_filament_gcode": "M600\nG1 E0.3 F1500 ; prime after color change", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_XLIS\nPG\nINPUT_SHAPER", - "scan_first_layer": "0", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0", - "thumbnails": [ - "16x16/QOI", - "313x173/QOI", - "440x240/QOI", - "480x240/QOI", - "640x480/PNG" - ] -} + "type": "machine", + "setting_id": "GM003", + "name": "Prusa XL 0.3 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "gcode_flavor": "marlin2", + "printer_model": "Prusa XL", + "default_filament_profile": "Prusa Generic PLA @XL", + "default_print_profile": "0.20mm Speed @Prusa XL 0.3", + "printer_variant": "0.3", + "nozzle_diameter": [ + "0.3" + ], + "max_layer_height": "0.22", + "min_layer_height": "0.05", + "retraction_length": "0.7", + "retraction_speed": "35", + "detraction_speed": "25" +} \ No newline at end of file diff --git a/resources/profiles/Prusa/machine/Prusa XL 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 0.4 nozzle.json index cbb286aa5b6..3bf1b6fa025 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 0.4 nozzle.json @@ -1,118 +1,19 @@ { - "type": "machine", - "setting_id": "GM003", - "name": "Prusa XL 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "gcode_flavor": "marlin2", - "printer_model": "Prusa XL", - "default_filament_profile": "Prusa Generic PLA @XL", - "default_print_profile": "0.20mm Speed @Prusa XL 0.4", - "extruder_clearance_radius": "67", - "extruder_clearance_height_to_rod": "21", - "extruder_clearance_height_to_lid": "21", - "printer_variant": "0.4", - "nozzle_diameter": [ - "0.4" - ], - "max_layer_height": "0.3", - "min_layer_height": "0.07", - "bed_exclude_area": [ - "0x0" - ], - "printable_area": [ - "0x0", - "360x0", - "360x360", - "0x360" - ], - "machine_max_acceleration_e": [ - "2500", - "2500" - ], - "machine_max_acceleration_extruding": [ - "4000", - "4000" - ], - "machine_max_acceleration_retracting": [ - "1200", - "1200" - ], - "machine_max_acceleration_x": [ - "7000", - "7000" - ], - "machine_max_acceleration_y": [ - "7000", - "7000" - ], - "machine_max_acceleration_z": [ - "200", - "200" - ], - "machine_max_acceleration_travel": [ - "5000", - "5000" - ], - "machine_max_speed_e": [ - "100", - "100" - ], - "machine_max_speed_x": [ - "400", - "400" - ], - "machine_max_speed_y": [ - "400", - "400" - ], - "machine_max_speed_z": [ - "12", - "12" - ], - "machine_max_jerk_e": [ - "10", - "10" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "2", - "2" - ], - "retraction_length": "0.8", - "retraction_speed": "35", - "detraction_speed": "25", - "retraction_minimum_travel": "1.5", - "retract_when_changing_layer": "1", - "wipe": "1", - "retract_before_wipe": "80%", - "retract_lift_below": "1.5", - "z_hop_types": "Auto Lift", - "host_type": "prusalink", - "printable_height": "360", - "machine_end_gcode": "{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720{endif} ; Move bed down\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X6 Y350 F6000 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+100, max_print_height)} F300{endif} ; Move bed down\nM900 K0 ; reset LA\nM142 S36 ; reset heatbreak target temp\nM221 S100 ; reset flow percentage\nM84 ; disable motors\n; max_layer_z = [max_layer_z]", - "machine_pause_gcode": "M601", - "machine_start_gcode": "M17 ; enable steppers\nM862.3 P \"XL\" ; printer model check\nM115 U6.0.1+14848\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\nM862.1 P[nozzle_diameter]\n; set & wait for bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n; home carriage, pick tool, home all\nG28 XY\nM84 E ; turn off E motor\nG28 Z\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG29 G ; absorb heat\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F4800\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z10 F480 ; move away in Z\n{if first_layer_bed_temperature[0] > 60}\nG0 Z70 F480 ; move away (a bit more) in Z\nG0 X30 Y{print_bed_min[1]} F6000 ; move away in X/Y for higher bed temperatures\n{endif}\nM106 S100 ; cool off the nozzle\nM107 ; stop cooling off the nozzle - turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nM104 S[first_layer_temperature] ; set extruder temp\nG1 Z10 F720 ; move away in Z\nG0 X30 Y-8 F6000 ; move next to the sheet\n; wait for extruder temp\nM109 T0 S{first_layer_temperature[0]}\n;\n; purge\n;\nG92 E0 ; reset extruder position\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -8 : -5.5)} ; move close to the sheet's edge\nG1 E{(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E10 X40 Z0.2 F500 ; purge\nG0 X70 E9 F800 ; purge\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG92 E0 ; reset extruder position", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]", - "change_filament_gcode": "M600\nG1 E0.3 F1500 ; prime after color change", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_XLIS\nPG\nINPUT_SHAPER", - "scan_first_layer": "0", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0", - "thumbnails": [ - "16x16/QOI", - "313x173/QOI", - "440x240/QOI", - "480x240/QOI", - "640x480/PNG" - ] -} + "type": "machine", + "setting_id": "GM003", + "name": "Prusa XL 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common_xl", + "gcode_flavor": "marlin2", + "printer_model": "Prusa XL", + "default_filament_profile": "Prusa Generic PLA @XL", + "default_print_profile": "0.20mm Speed @Prusa XL 0.4", + "printer_variant": "0.4", + "nozzle_diameter": [ + "0.4" + ], + "max_layer_height": "0.3", + "min_layer_height": "0.07", + "retraction_length": "0.8" +} \ No newline at end of file diff --git a/resources/profiles/Prusa/machine/Prusa XL 0.5 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 0.5 nozzle.json index 937e88f016e..3f65ffc759f 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 0.5 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 0.5 nozzle.json @@ -1,118 +1,19 @@ { - "type": "machine", - "setting_id": "GM003", - "name": "Prusa XL 0.5 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "gcode_flavor": "marlin2", - "printer_model": "Prusa XL", - "default_filament_profile": "Prusa Generic PLA @XL", - "default_print_profile": "0.25mm Speed @Prusa XL 0.5", - "extruder_clearance_radius": "67", - "extruder_clearance_height_to_rod": "21", - "extruder_clearance_height_to_lid": "21", - "printer_variant": "0.5", - "nozzle_diameter": [ - "0.5" - ], - "max_layer_height": "0.32", - "min_layer_height": "0.07", - "bed_exclude_area": [ - "0x0" - ], - "printable_area": [ - "0x0", - "360x0", - "360x360", - "0x360" - ], - "machine_max_acceleration_e": [ - "2500", - "2500" - ], - "machine_max_acceleration_extruding": [ - "4000", - "4000" - ], - "machine_max_acceleration_retracting": [ - "1200", - "1200" - ], - "machine_max_acceleration_x": [ - "7000", - "7000" - ], - "machine_max_acceleration_y": [ - "7000", - "7000" - ], - "machine_max_acceleration_z": [ - "200", - "200" - ], - "machine_max_acceleration_travel": [ - "5000", - "5000" - ], - "machine_max_speed_e": [ - "100", - "100" - ], - "machine_max_speed_x": [ - "400", - "400" - ], - "machine_max_speed_y": [ - "400", - "400" - ], - "machine_max_speed_z": [ - "12", - "12" - ], - "machine_max_jerk_e": [ - "10", - "10" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "2", - "2" - ], - "retraction_length": "0.7", - "retraction_speed": "35", - "detraction_speed": "25", - "retraction_minimum_travel": "1.5", - "retract_when_changing_layer": "1", - "wipe": "1", - "retract_before_wipe": "80%", - "retract_lift_below": "1.5", - "z_hop_types": "Auto Lift", - "host_type": "prusalink", - "printable_height": "360", - "machine_end_gcode": "{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720{endif} ; Move bed down\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X6 Y350 F6000 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+100, max_print_height)} F300{endif} ; Move bed down\nM900 K0 ; reset LA\nM142 S36 ; reset heatbreak target temp\nM221 S100 ; reset flow percentage\nM84 ; disable motors\n; max_layer_z = [max_layer_z]", - "machine_pause_gcode": "M601", - "machine_start_gcode": "M17 ; enable steppers\nM862.3 P \"XL\" ; printer model check\nM115 U6.0.1+14848\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\nM862.1 P[nozzle_diameter]\n; set & wait for bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n; home carriage, pick tool, home all\nG28 XY\nM84 E ; turn off E motor\nG28 Z\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG29 G ; absorb heat\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F4800\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z10 F480 ; move away in Z\n{if first_layer_bed_temperature[0] > 60}\nG0 Z70 F480 ; move away (a bit more) in Z\nG0 X30 Y{print_bed_min[1]} F6000 ; move away in X/Y for higher bed temperatures\n{endif}\nM106 S100 ; cool off the nozzle\nM107 ; stop cooling off the nozzle - turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nM104 S[first_layer_temperature] ; set extruder temp\nG1 Z10 F720 ; move away in Z\nG0 X30 Y-8 F6000 ; move next to the sheet\n; wait for extruder temp\nM109 T0 S{first_layer_temperature[0]}\n;\n; purge\n;\nG92 E0 ; reset extruder position\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -8 : -5.5)} ; move close to the sheet's edge\nG1 E{(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E10 X40 Z0.2 F500 ; purge\nG0 X70 E9 F800 ; purge\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG92 E0 ; reset extruder position", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]", - "change_filament_gcode": "M600\nG1 E0.3 F1500 ; prime after color change", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_XLIS\nPG\nINPUT_SHAPER", - "scan_first_layer": "0", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0", - "thumbnails": [ - "16x16/QOI", - "313x173/QOI", - "440x240/QOI", - "480x240/QOI", - "640x480/PNG" - ] -} + "type": "machine", + "setting_id": "GM003", + "name": "Prusa XL 0.5 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common_xl", + "gcode_flavor": "marlin2", + "printer_model": "Prusa XL", + "default_filament_profile": "Prusa Generic PLA @XL", + "default_print_profile": "0.25mm Speed @Prusa XL 0.5", + "printer_variant": "0.5", + "nozzle_diameter": [ + "0.5" + ], + "max_layer_height": "0.32", + "min_layer_height": "0.07", + "retraction_length": "0.7" +} \ No newline at end of file diff --git a/resources/profiles/Prusa/machine/Prusa XL 0.6 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 0.6 nozzle.json index e0d47b46c61..1239ddb4470 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 0.6 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 0.6 nozzle.json @@ -1,118 +1,19 @@ { - "type": "machine", - "setting_id": "GM003", - "name": "Prusa XL 0.6 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "gcode_flavor": "marlin2", - "printer_model": "Prusa XL", - "default_filament_profile": "Prusa Generic PLA @XL", - "default_print_profile": "0.32mm Speed @Prusa XL 0.6", - "extruder_clearance_radius": "67", - "extruder_clearance_height_to_rod": "21", - "extruder_clearance_height_to_lid": "21", - "printer_variant": "0.6", - "nozzle_diameter": [ - "0.6" - ], - "max_layer_height": "0.4", - "min_layer_height": "0.15", - "bed_exclude_area": [ - "0x0" - ], - "printable_area": [ - "0x0", - "360x0", - "360x360", - "0x360" - ], - "machine_max_acceleration_e": [ - "2500", - "2500" - ], - "machine_max_acceleration_extruding": [ - "4000", - "4000" - ], - "machine_max_acceleration_retracting": [ - "1200", - "1200" - ], - "machine_max_acceleration_x": [ - "7000", - "7000" - ], - "machine_max_acceleration_y": [ - "7000", - "7000" - ], - "machine_max_acceleration_z": [ - "200", - "200" - ], - "machine_max_acceleration_travel": [ - "5000", - "5000" - ], - "machine_max_speed_e": [ - "100", - "100" - ], - "machine_max_speed_x": [ - "400", - "400" - ], - "machine_max_speed_y": [ - "400", - "400" - ], - "machine_max_speed_z": [ - "12", - "12" - ], - "machine_max_jerk_e": [ - "10", - "10" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "2", - "2" - ], - "retraction_length": "0.7", - "retraction_speed": "35", - "detraction_speed": "25", - "retraction_minimum_travel": "1.5", - "retract_when_changing_layer": "1", - "wipe": "1", - "retract_before_wipe": "0%", - "retract_lift_below": "1.5", - "z_hop_types": "Auto Lift", - "host_type": "prusalink", - "printable_height": "360", - "machine_end_gcode": "{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720{endif} ; Move bed down\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X6 Y350 F6000 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+100, max_print_height)} F300{endif} ; Move bed down\nM900 K0 ; reset LA\nM142 S36 ; reset heatbreak target temp\nM221 S100 ; reset flow percentage\nM84 ; disable motors\n; max_layer_z = [max_layer_z]", - "machine_pause_gcode": "M601", - "machine_start_gcode": "M17 ; enable steppers\nM862.3 P \"XL\" ; printer model check\nM115 U6.0.1+14848\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\nM862.1 P[nozzle_diameter]\n; set & wait for bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n; home carriage, pick tool, home all\nG28 XY\nM84 E ; turn off E motor\nG28 Z\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG29 G ; absorb heat\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F4800\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z10 F480 ; move away in Z\n{if first_layer_bed_temperature[0] > 60}\nG0 Z70 F480 ; move away (a bit more) in Z\nG0 X30 Y{print_bed_min[1]} F6000 ; move away in X/Y for higher bed temperatures\n{endif}\nM106 S100 ; cool off the nozzle\nM107 ; stop cooling off the nozzle - turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nM104 S[first_layer_temperature] ; set extruder temp\nG1 Z10 F720 ; move away in Z\nG0 X30 Y-8 F6000 ; move next to the sheet\n; wait for extruder temp\nM109 T0 S{first_layer_temperature[0]}\n;\n; purge\n;\nG92 E0 ; reset extruder position\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -8 : -5.5)} ; move close to the sheet's edge\nG1 E{(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E10 X40 Z0.2 F500 ; purge\nG0 X70 E9 F800 ; purge\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG92 E0 ; reset extruder position", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]", - "change_filament_gcode": "M600\nG1 E0.3 F1500 ; prime after color change", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_XLIS\nPG\nINPUT_SHAPER", - "scan_first_layer": "0", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0", - "thumbnails": [ - "16x16/QOI", - "313x173/QOI", - "440x240/QOI", - "480x240/QOI", - "640x480/PNG" - ] -} + "type": "machine", + "setting_id": "GM003", + "name": "Prusa XL 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common_xl", + "gcode_flavor": "marlin2", + "printer_model": "Prusa XL", + "default_filament_profile": "Prusa Generic PLA @XL", + "default_print_profile": "0.32mm Speed @Prusa XL 0.6", + "printer_variant": "0.6", + "nozzle_diameter": [ + "0.6" + ], + "max_layer_height": "0.4", + "min_layer_height": "0.15", + "retraction_length": "0.7" +} \ No newline at end of file diff --git a/resources/profiles/Prusa/machine/Prusa XL 0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 0.8 nozzle.json index 85c1631bcb6..b0a2468a687 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 0.8 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 0.8 nozzle.json @@ -4,115 +4,18 @@ "name": "Prusa XL 0.8 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_machine_common", + "inherits": "fdm_machine_common_xl", "gcode_flavor": "marlin2", "printer_model": "Prusa XL", "default_filament_profile": "Prusa Generic PLA @XL", "default_print_profile": "0.40mm Quality @Prusa XL 0.8", - "extruder_clearance_radius": "67", - "extruder_clearance_height_to_rod": "21", - "extruder_clearance_height_to_lid": "21", "printer_variant": "0.8", "nozzle_diameter": [ "0.8" ], "max_layer_height": "0.6", "min_layer_height": "0.2", - "bed_exclude_area": [ - "0x0" - ], - "printable_area": [ - "0x0", - "360x0", - "360x360", - "0x360" - ], - "machine_max_acceleration_e": [ - "2500", - "2500" - ], - "machine_max_acceleration_extruding": [ - "4000", - "4000" - ], - "machine_max_acceleration_retracting": [ - "1200", - "1200" - ], - "machine_max_acceleration_x": [ - "7000", - "7000" - ], - "machine_max_acceleration_y": [ - "7000", - "7000" - ], - "machine_max_acceleration_z": [ - "200", - "200" - ], - "machine_max_acceleration_travel": [ - "5000", - "5000" - ], - "machine_max_speed_e": [ - "100", - "100" - ], - "machine_max_speed_x": [ - "400", - "400" - ], - "machine_max_speed_y": [ - "400", - "400" - ], - "machine_max_speed_z": [ - "12", - "12" - ], - "machine_max_jerk_e": [ - "10", - "10" - ], - "machine_max_jerk_x": [ - "8", - "8" - ], - "machine_max_jerk_y": [ - "8", - "8" - ], - "machine_max_jerk_z": [ - "2", - "2" - ], "retraction_length": "0.6", "retraction_speed": "25", - "detraction_speed": "15", - "retraction_minimum_travel": "1.5", - "retract_when_changing_layer": "1", - "wipe": "1", - "retract_before_wipe": "50%", - "retract_lift_below": "1.5", - "z_hop_types": "Auto Lift", - "host_type": "prusalink", - "printable_height": "360", - "machine_end_gcode": "{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720{endif} ; Move bed down\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X6 Y350 F6000 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+100, max_print_height)} F300{endif} ; Move bed down\nM900 K0 ; reset LA\nM142 S36 ; reset heatbreak target temp\nM221 S100 ; reset flow percentage\nM84 ; disable motors\n; max_layer_z = [max_layer_z]", - "machine_pause_gcode": "M601", - "machine_start_gcode": "M17 ; enable steppers\nM862.3 P \"XL\" ; printer model check\nM115 U6.0.1+14848\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\nM862.1 P[nozzle_diameter]\n; set & wait for bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n; home carriage, pick tool, home all\nG28 XY\nM84 E ; turn off E motor\nG28 Z\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG29 G ; absorb heat\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F4800\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z10 F480 ; move away in Z\n{if first_layer_bed_temperature[0] > 60}\nG0 Z70 F480 ; move away (a bit more) in Z\nG0 X30 Y{print_bed_min[1]} F6000 ; move away in X/Y for higher bed temperatures\n{endif}\nM106 S100 ; cool off the nozzle\nM107 ; stop cooling off the nozzle - turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nM104 S[first_layer_temperature] ; set extruder temp\nG1 Z10 F720 ; move away in Z\nG0 X30 Y-8 F6000 ; move next to the sheet\n; wait for extruder temp\nM109 T0 S{first_layer_temperature[0]}\n;\n; purge\n;\nG92 E0 ; reset extruder position\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -8 : -5.5)} ; move close to the sheet's edge\nG1 E{(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E10 X40 Z0.2 F500 ; purge\nG0 X70 E9 F800 ; purge\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG92 E0 ; reset extruder position", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]", - "change_filament_gcode": "M600\nG1 E0.3 F1500 ; prime after color change", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_XLIS\nPG\nINPUT_SHAPER", - "scan_first_layer": "0", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0", - "thumbnails": [ - "16x16/QOI", - "313x173/QOI", - "440x240/QOI", - "480x240/QOI", - "640x480/PNG" - ] + "detraction_speed": "15" } diff --git a/resources/profiles/Prusa/machine/Prusa XL 5T 0.25 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 5T 0.25 nozzle.json new file mode 100644 index 00000000000..2fc6b341b5f --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa XL 5T 0.25 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "machine", + "setting_id": "GM_PRUSA_007", + "name": "Prusa XL 5T 0.25 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common_xl_5t", + "gcode_flavor": "marlin2", + "printer_model": "Prusa XL 5T", + "default_filament_profile": "Prusa Generic PLA @XL 5T", + "default_print_profile": "0.15mm Speed @Prusa XL 5T 0.25", + "printer_variant": "0.25", + "nozzle_diameter": [ + "0.25", + "0.25", + "0.25", + "0.25", + "0.25" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/machine/Prusa XL 5T 0.3 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 5T 0.3 nozzle.json new file mode 100644 index 00000000000..a495d263499 --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa XL 5T 0.3 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "machine", + "setting_id": "GM_PRUSA_001", + "name": "Prusa XL 5T 0.3 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common_xl_5t", + "gcode_flavor": "marlin2", + "printer_model": "Prusa XL 5T", + "default_filament_profile": "Prusa Generic PLA @XL 5T", + "default_print_profile": "0.20mm Speed @Prusa XL 5T 0.3", + "printer_variant": "0.3", + "nozzle_diameter": [ + "0.3", + "0.3", + "0.3", + "0.3", + "0.3" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/machine/Prusa XL 5T 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 5T 0.4 nozzle.json new file mode 100644 index 00000000000..4dbd7d9b222 --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa XL 5T 0.4 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "machine", + "setting_id": "GM_PRUSA_002", + "name": "Prusa XL 5T 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common_xl_5t", + "gcode_flavor": "marlin2", + "printer_model": "Prusa XL 5T", + "default_filament_profile": "Prusa Generic PLA @XL 5T", + "default_print_profile": "0.20mm Speed @Prusa XL 5T 0.4", + "printer_variant": "0.4", + "nozzle_diameter": [ + "0.4", + "0.4", + "0.4", + "0.4", + "0.4" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/machine/Prusa XL 5T 0.5 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 5T 0.5 nozzle.json new file mode 100644 index 00000000000..69e355ea2f4 --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa XL 5T 0.5 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "machine", + "setting_id": "GM_PRUSA_004", + "name": "Prusa XL 5T 0.5 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common_xl_5t", + "gcode_flavor": "marlin2", + "printer_model": "Prusa XL 5T", + "default_filament_profile": "Prusa Generic PLA @XL 5T", + "default_print_profile": "0.25mm Speed @Prusa XL 5T 0.5", + "printer_variant": "0.5", + "nozzle_diameter": [ + "0.5", + "0.5", + "0.5", + "0.5", + "0.5" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/machine/Prusa XL 5T 0.6 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 5T 0.6 nozzle.json new file mode 100644 index 00000000000..03ef5d97ff7 --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa XL 5T 0.6 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "machine", + "setting_id": "GM_PRUSA_005", + "name": "Prusa XL 5T 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common_xl_5t", + "gcode_flavor": "marlin2", + "printer_model": "Prusa XL 5T", + "default_filament_profile": "Prusa Generic PLA @XL 5T", + "default_print_profile": "0.32mm Speed @Prusa XL 5T 0.6", + "printer_variant": "0.6", + "nozzle_diameter": [ + "0.6", + "0.6", + "0.6", + "0.6", + "0.6" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/machine/Prusa XL 5T 0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 5T 0.8 nozzle.json new file mode 100644 index 00000000000..27656c4072b --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa XL 5T 0.8 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "machine", + "setting_id": "GM_PRUSA_006", + "name": "Prusa XL 5T 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common_xl_5t", + "gcode_flavor": "marlin2", + "printer_model": "Prusa XL 5T", + "default_filament_profile": "Prusa Generic PLA @XL 5T", + "default_print_profile": "0.40mm Quality @Prusa XL 5T 0.8", + "printer_variant": "0.8", + "nozzle_diameter": [ + "0.8", + "0.8", + "0.8", + "0.8", + "0.8" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/machine/Prusa XL 5T.json b/resources/profiles/Prusa/machine/Prusa XL 5T.json new file mode 100644 index 00000000000..81486d711a8 --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa XL 5T.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Prusa XL 5T", + "model_id": "prusa_xl_5t_01", + "nozzle_diameter": "0.25;0.3;0.4;0.5;0.6;0.8", + "machine_tech": "FFF", + "family": "Prusa", + "bed_model": "Prusa XL_bed.stl", + "bed_texture": "Prusa XL.svg", + "hotend_model": "", + "default_materials": "Prusa Generic PLA @XL 5T;Prusament PLA @XL 5T;Prusament rPLA @XL 5T;Prusa Generic PETG @XL 5T;Prusament PETG @XL 5T;Prusa Generic ABS @XL 5T;Prusament ASA @XL 5T;Prusament PC Blend @XL 5T;Prusament PC-CF @XL 5T;Prusament PVB @XL 5T;Prusament PA-CF @XL 5T" +} diff --git a/resources/profiles/Prusa/machine/fdm_machine_common_xl.json b/resources/profiles/Prusa/machine/fdm_machine_common_xl.json new file mode 100644 index 00000000000..7c917d151a9 --- /dev/null +++ b/resources/profiles/Prusa/machine/fdm_machine_common_xl.json @@ -0,0 +1,114 @@ +{ + "type": "machine", + "name": "fdm_machine_common_xl", + "from": "system", + "inherits": "fdm_machine_common", + "instantiation": "false", + "gcode_flavor": "marlin2", + "extruder_clearance_radius": "67", + "extruder_clearance_height_to_rod": "21", + "extruder_clearance_height_to_lid": "21", + "printer_variant": "0.4", + "nozzle_diameter": [ + "0.4" + ], + "max_layer_height": "0.3", + "min_layer_height": "0.07", + "bed_exclude_area": [ + "0x0" + ], + "printable_area": [ + "0x0", + "360x0", + "360x360", + "0x360" + ], + "machine_max_acceleration_e": [ + "2500", + "2500" + ], + "machine_max_acceleration_extruding": [ + "4000", + "4000" + ], + "machine_max_acceleration_retracting": [ + "1200", + "1200" + ], + "machine_max_acceleration_x": [ + "7000", + "7000" + ], + "machine_max_acceleration_y": [ + "7000", + "7000" + ], + "machine_max_acceleration_z": [ + "200", + "200" + ], + "machine_max_acceleration_travel": [ + "5000", + "5000" + ], + "machine_max_speed_e": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "400", + "400" + ], + "machine_max_speed_y": [ + "400", + "400" + ], + "machine_max_speed_z": [ + "12", + "12" + ], + "machine_max_jerk_e": [ + "10", + "10" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "2", + "2" + ], + "retraction_length": "0.8", + "retraction_speed": "35", + "detraction_speed": "25", + "retraction_minimum_travel": "1.5", + "retract_when_changing_layer": "1", + "wipe": "1", + "retract_before_wipe": "80%", + "retract_lift_below": "1.5", + "z_hop_types": "Auto Lift", + "host_type": "prusalink", + "printable_height": "360", + "machine_end_gcode": "{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720{endif} ; Move bed down\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X6 Y350 F6000 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+100, max_print_height)} F300{endif} ; Move bed down\nM900 K0 ; reset LA\nM142 S36 ; reset heatbreak target temp\nM221 S100 ; reset flow percentage\nM84 ; disable motors\n; max_layer_z = [max_layer_z]", + "machine_pause_gcode": "M601", + "machine_start_gcode": "M17 ; enable steppers\nM862.3 P \"XL\" ; printer model check\nM115 U6.0.1+14848\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\nM862.1 P[nozzle_diameter]\n; set & wait for bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n; home carriage, pick tool, home all\nG28 XY\nM84 E ; turn off E motor\nG28 Z\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG29 G ; absorb heat\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F4800\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z10 F480 ; move away in Z\n{if first_layer_bed_temperature[0] > 60}\nG0 Z70 F480 ; move away (a bit more) in Z\nG0 X30 Y{print_bed_min[1]} F6000 ; move away in X/Y for higher bed temperatures\n{endif}\nM106 S100 ; cool off the nozzle\nM107 ; stop cooling off the nozzle - turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nM104 S[first_layer_temperature] ; set extruder temp\nG1 Z10 F720 ; move away in Z\nG0 X30 Y-8 F6000 ; move next to the sheet\n; wait for extruder temp\nM109 T0 S{first_layer_temperature[0]}\n;\n; purge\n;\nG92 E0 ; reset extruder position\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -8 : -5.5)} ; move close to the sheet's edge\nG1 E{(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E10 X40 Z0.2 F500 ; purge\nG0 X70 E9 F800 ; purge\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG92 E0 ; reset extruder position", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]", + "change_filament_gcode": "M600\nG1 E0.3 F1500 ; prime after color change", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_XLIS\nPG\nINPUT_SHAPER", + "scan_first_layer": "0", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "0", + "thumbnails": [ + "16x16/QOI", + "313x173/QOI", + "440x240/QOI", + "480x240/QOI", + "640x480/PNG" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/machine/fdm_machine_common_xl_5t.json b/resources/profiles/Prusa/machine/fdm_machine_common_xl_5t.json new file mode 100644 index 00000000000..7bdc573b391 --- /dev/null +++ b/resources/profiles/Prusa/machine/fdm_machine_common_xl_5t.json @@ -0,0 +1,22 @@ +{ + "type": "machine", + "name": "fdm_machine_common_xl_5t", + "from": "system", + "inherits": "fdm_machine_common_xl", + "instantiation": "false", + "gcode_flavor": "marlin2", + "purge_in_prime_tower": "0", + "single_extruder_multi_material": "0", + "extruder_clearance_radius": "67", + "extruder_clearance_height_to_rod": "21", + "extruder_clearance_height_to_lid": "21", + "printer_variant": "0.4", + "machine_pause_gcode": "M601", + "machine_start_gcode": "M17 ; enable steppers\nM862.3 P \"XL\" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P\"Input shaper\" ; FW feature check\nM115 U6.0.3+14902\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\n{if (is_extruder_used[0])}M862.1 T0 P{nozzle_diameter[0]}{endif}\n{if (is_extruder_used[1])}M862.1 T1 P{nozzle_diameter[1]}{endif}\n{if (is_extruder_used[2])}M862.1 T2 P{nozzle_diameter[2]}{endif}\n{if (is_extruder_used[3])}M862.1 T3 P{nozzle_diameter[3]}{endif}\n{if (is_extruder_used[4])}M862.1 T4 P{nozzle_diameter[4]}{endif}\n\n; turn off unused heaters\n{if ! is_extruder_used[0]} M104 T0 S0 {endif}\n{if ! is_extruder_used[1]} M104 T1 S0 {endif}\n{if num_extruders > 2 and ! is_extruder_used[2]} M104 T2 S0 {endif}\n{if num_extruders > 3 and ! is_extruder_used[3]} M104 T3 S0 {endif}\n{if num_extruders > 4 and ! is_extruder_used[4]} M104 T4 S0 {endif}\n\nM217 Z{max(zhop, 2.0)} ; set toolchange z hop to 2mm, or zhop variable from slicer if higher\n; set bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nG0 Z5 ; add Z clearance\nM109 T{initial_tool} S{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == \"PC\" or filament_type[initial_tool] == \"PA\") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == \"FLEX\") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\n; Home XY\nG28 XY\n; try picking tools used in print\nG1 F{travel_speed * 60}\n{if (is_extruder_used[0]) and (initial_tool != 0)}T0 S1 L0 D0{endif}\n{if (is_extruder_used[1]) and (initial_tool != 1)}T1 S1 L0 D0{endif}\n{if (is_extruder_used[2]) and (initial_tool != 2)}T2 S1 L0 D0{endif}\n{if (is_extruder_used[3]) and (initial_tool != 3)}T3 S1 L0 D0{endif}\n{if (is_extruder_used[4]) and (initial_tool != 4)}T4 S1 L0 D0{endif}\n; select tool that will be used to home & MBL\nT{initial_tool} S1 L0 D0\n; home Z with MBL tool\nM84 E ; turn off E motor\nG28 Z\nG0 Z5 ; add Z clearance\n\nM104 T{initial_tool} S{if idle_temperature[initial_tool] == 0}70{else}{idle_temperature[initial_tool]}{endif} ; set idle temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nG29 G ; absorb heat\n\nM109 T{initial_tool} S{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == \"PC\" or filament_type[initial_tool] == \"PA\") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == \"FLEX\") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F{(travel_speed * 60)}\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z5 F480 ; move away in Z\nM107 ; turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W{(((is_extruder_used[4]) or ((is_extruder_used[3]) or (is_extruder_used[2]))) ? \"300\" : ((is_extruder_used[1]) ? \"130\" : \"50\"))} H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nG1 Z10 F720 ; move away in Z\nG1 F{travel_speed * 60}\nP0 S1 L1 D0; park the tool\n; set extruder temp\n{if first_layer_temperature[0] > 0 and (is_extruder_used[0])}M104 T0 S{first_layer_temperature[0]}{endif}\n{if first_layer_temperature[1] > 0 and (is_extruder_used[1])}M104 T1 S{first_layer_temperature[1]}{endif}\n{if first_layer_temperature[2] > 0 and (is_extruder_used[2])}M104 T2 S{first_layer_temperature[2]}{endif}\n{if first_layer_temperature[3] > 0 and (is_extruder_used[3])}M104 T3 S{first_layer_temperature[3]}{endif}\n{if first_layer_temperature[4] > 0 and (is_extruder_used[4])}M104 T4 S{first_layer_temperature[4]}{endif}\n{if (is_extruder_used[0]) and initial_tool != 0}\n;\n; purge first tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T0 S{first_layer_temperature[0]}\nT0 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if filament_multitool_ramming[0]}10{else}30{endif} X40 Z0.2 F{if filament_multitool_ramming[0]}500{else}170{endif} ; purge while moving towards the sheet\nG0 X70 E9 F800 ; continue purging and wipe the nozzle\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[0]} F2400 ; retract\n{e_retracted[0] = 1.5 * retract_length[0]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(idle_temperature[0] == 0 ? (first_layer_temperature[0] + standby_temperature_delta) : (idle_temperature[0]))} T0\n{endif}\n{if (is_extruder_used[1]) and initial_tool != 1}\n;\n; purge second tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T1 S{first_layer_temperature[1]}\nT1 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(1 == 0 ? 30 : (1 == 1 ? 150 : (1 == 2 ? 210 : 330)))} Y{(1 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if filament_multitool_ramming[1]}10{else}30{endif} X140 Z0.2 F{if filament_multitool_ramming[1]}500{else}170{endif} ; purge while moving towards the sheet\nG0 X110 E9 F800 ; continue purging and wipe the nozzle\nG0 X{110 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{110 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[1]} F2400 ; retract\n{e_retracted[1] = 1.5 * retract_length[1]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(idle_temperature[1] == 0 ? (first_layer_temperature[1] + standby_temperature_delta) : (idle_temperature[1]))} T1\n{endif}\n{if (is_extruder_used[2]) and initial_tool != 2}\n;\n; purge third tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T2 S{first_layer_temperature[2]}\nT2 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(2 == 0 ? 30 : (2 == 1 ? 150 : (2 == 2 ? 210 : 330)))} Y{(2 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if filament_multitool_ramming[2]}10{else}30{endif} X220 Z0.2 F{if filament_multitool_ramming[2]}500{else}170{endif} ; purge while moving towards the sheet\nG0 X250 E9 F800 ; continue purging and wipe the nozzle\nG0 X{250 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{250 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[2]} F2400 ; retract\n{e_retracted[2] = 1.5 * retract_length[2]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(idle_temperature[2] == 0 ? (first_layer_temperature[2] + standby_temperature_delta) : (idle_temperature[2]))} T2\n{endif}\n{if (is_extruder_used[3]) and initial_tool != 3}\n;\n; purge fourth tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T3 S{first_layer_temperature[3]}\nT3 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(3 == 0 ? 30 : (3 == 1 ? 150 : (3 == 2 ? 210 : 330)))} Y{(3 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if filament_multitool_ramming[3]}10{else}30{endif} X320 Z0.2 F{if filament_multitool_ramming[3]}500{else}170{endif} ; purge while moving towards the sheet\nG0 X290 E9 F800 ; continue purging and wipe the nozzle\nG0 X{290 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{290 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[3]} F2400 ; retract\n{e_retracted[3] = 1.5 * retract_length[3]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(idle_temperature[3] == 0 ? (first_layer_temperature[3] + standby_temperature_delta) : (idle_temperature[3]))} T3\n{endif}\n{if (is_extruder_used[4]) and initial_tool != 4}\n;\n; purge fifth tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T4 S{first_layer_temperature[4]}\nT4 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(4 == 0 ? 30 : (4 == 1 ? 150 : (4 == 2 ? 210 : 330)))} Y{(4 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if filament_multitool_ramming[4]}10{else}30{endif} X320 Z0.2 F{if filament_multitool_ramming[4]}500{else}170{endif} ; purge while moving towards the sheet\nG0 X290 E9 F800 ; continue purging and wipe the nozzle\nG0 X{290 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{290 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[4]} F2400 ; retract\n{e_retracted[4] = 1.5 * retract_length[4]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(idle_temperature[4] == 0 ? (first_layer_temperature[4] + standby_temperature_delta) : (idle_temperature[4]))} T4\n{endif}\n;\n; purge initial tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T{initial_tool} S{first_layer_temperature[initial_tool]}\nT{initial_tool} S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330)))} Y{(initial_tool < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if filament_multitool_ramming[initial_tool]}10{else}30{endif} X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 10)} Z0.2 F{if filament_multitool_ramming[initial_tool]}500{else}170{endif} ; purge while moving towards the sheet\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40)} E9 F800 ; continue purging and wipe the nozzle\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 3)} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 3 * 2)} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[initial_tool]} F2400 ; retract\n{e_retracted[initial_tool] = 1.5 * retract_length[initial_tool]}\nG92 E0 ; reset extruder position\n", + "machine_end_gcode": "G4 ; wait\n\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+5, max_print_height)}{endif} ; Move bed down\n\nP0 S1 ; park tool\n\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+97, max_print_height)} F300{endif} ; Move bed further down\n\n; turn off extruder heaters\n{if is_extruder_used[0]} M104 T0 S0 {endif}\n{if is_extruder_used[1]} M104 T1 S0 {endif}\n{if is_extruder_used[2]} M104 T2 S0 {endif}\n{if is_extruder_used[3]} M104 T3 S0 {endif}\n{if is_extruder_used[4]} M104 T4 S0 {endif}\n\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow percentage\nM84 ; disable motors\nM77 ; stop print timer\n; max_layer_z = [max_layer_z]", + "change_filament_gcode": "; Change Tool[previous_extruder] -> Tool[next_extruder] (layer [layer_num])\n{\nlocal max_speed_toolchange = 350.0;\nlocal wait_for_extruder_temp = true;\nposition[2] = position[2] + 2.0;\n\nlocal speed_toolchange = max_speed_toolchange;\nif travel_speed < max_speed_toolchange then\n speed_toolchange = travel_speed;\nendif\n\"G1 F\" + (speed_toolchange * 60) + \"\n\";\nif wait_for_extruder_temp and not((layer_num < 0) and (next_extruder == initial_tool)) then\n \"P0 S1 L2 D0\n\";\n \"; \" + layer_num + \"\n\";\n if layer_num == 0 then\n \"M109 S\" + first_layer_temperature[next_extruder] + \" T\" + next_extruder + \"\n\";\n else\n \"M109 S\" + temperature[next_extruder] + \" T\" + next_extruder + \"\n\";\n endif\nendif\n\"T\" + next_extruder + \" S1 L0 D0\n\";\n}", + + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\n", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "printer_notes": "Do not remove the keywords below.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_XLIS\nPG\nINPUT_SHAPER" +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.05mm Detail @Prusa XL 5T 0.25.json b/resources/profiles/Prusa/process/0.05mm Detail @Prusa XL 5T 0.25.json new file mode 100644 index 00000000000..3eac921d293 --- /dev/null +++ b/resources/profiles/Prusa/process/0.05mm Detail @Prusa XL 5T 0.25.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.05mm Detail @Prusa XL 5T 0.25", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.05", + "wall_loops": "3", + "top_shell_layers": "13", + "bottom_shell_layers": "10", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "1", + "brim_object_gap": "0", + "support_threshold_angle": "40", + "raft_first_layer_density": "95%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.1", + "support_top_z_distance": "0.1", + "support_bottom_z_distance": "0.1", + "support_base_pattern_spacing": "1", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "150%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "65", + "small_perimeter_speed": "40", + "outer_wall_speed": "40", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "100", + "top_surface_speed": "60", + "support_speed": "70", + "support_interface_speed": "75%", + "bridge_speed": "25", + "gap_infill_speed": "40", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "1500", + "outer_wall_acceleration": "800", + "inner_wall_acceleration": "1200", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "2000", + "sparse_infill_acceleration": "2500", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "4000", + "line_width": "0.27", + "initial_layer_line_width": "0.32", + "inner_wall_line_width": "0.25", + "outer_wall_line_width": "0.25", + "sparse_infill_line_width": "0.25", + "internal_solid_infill_line_width": "0.25", + "top_surface_line_width": "0.27", + "support_line_width": "0.25", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0", + "compatible_printers": [ + "Prusa XL 5T 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.07mm Detail @Prusa XL 5T 0.25.json b/resources/profiles/Prusa/process/0.07mm Detail @Prusa XL 5T 0.25.json new file mode 100644 index 00000000000..b30595bd93d --- /dev/null +++ b/resources/profiles/Prusa/process/0.07mm Detail @Prusa XL 5T 0.25.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.07mm Detail @Prusa XL 5T 0.25", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.07", + "wall_loops": "3", + "top_shell_layers": "11", + "bottom_shell_layers": "9", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "1", + "brim_object_gap": "0", + "support_threshold_angle": "40", + "raft_first_layer_density": "95%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.1", + "support_top_z_distance": "0.09", + "support_bottom_z_distance": "0.09", + "support_base_pattern_spacing": "1", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "150%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "65", + "small_perimeter_speed": "40", + "outer_wall_speed": "40", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "140", + "top_surface_speed": "70", + "support_speed": "70", + "support_interface_speed": "75%", + "bridge_speed": "30", + "gap_infill_speed": "40", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "1500", + "outer_wall_acceleration": "800", + "inner_wall_acceleration": "1200", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "2000", + "sparse_infill_acceleration": "2500", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "4000", + "line_width": "0.27", + "initial_layer_line_width": "0.32", + "inner_wall_line_width": "0.25", + "outer_wall_line_width": "0.25", + "sparse_infill_line_width": "0.25", + "internal_solid_infill_line_width": "0.25", + "top_surface_line_width": "0.27", + "support_line_width": "0.25", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0", + "compatible_printers": [ + "Prusa XL 5T 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.10mm FastDetail @Prusa XL 5T 0.4.json b/resources/profiles/Prusa/process/0.10mm FastDetail @Prusa XL 5T 0.4.json new file mode 100644 index 00000000000..e1149bb2144 --- /dev/null +++ b/resources/profiles/Prusa/process/0.10mm FastDetail @Prusa XL 5T 0.4.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.10mm FastDetail @Prusa XL 5T 0.4", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.1", + "wall_loops": "3", + "top_shell_layers": "8", + "bottom_shell_layers": "7", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "2", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.15", + "support_top_z_distance": "0.17", + "support_bottom_z_distance": "0.17", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "140", + "small_perimeter_speed": "140", + "outer_wall_speed": "140", + "sparse_infill_speed": "140", + "internal_solid_infill_speed": "200", + "top_surface_speed": "100", + "support_speed": "120", + "support_interface_speed": "50", + "bridge_speed": "40", + "gap_infill_speed": "120", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2500", + "outer_wall_acceleration": "2000", + "inner_wall_acceleration": "2000", + "top_surface_acceleration": "1500", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.45", + "initial_layer_line_width": "0.5", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "sparse_infill_line_width": "0.45", + "internal_solid_infill_line_width": "0.45", + "top_surface_line_width": "0.4", + "support_line_width": "0.36", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 5T 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.10mm Structural @Prusa XL 5T 0.5.json b/resources/profiles/Prusa/process/0.10mm Structural @Prusa XL 5T 0.5.json new file mode 100644 index 00000000000..4c463eaa2eb --- /dev/null +++ b/resources/profiles/Prusa/process/0.10mm Structural @Prusa XL 5T 0.5.json @@ -0,0 +1,68 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.10mm Structural @Prusa XL 5T 0.5", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.1", + "wall_loops": "2", + "top_shell_layers": "8", + "bottom_shell_layers": "7", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "2", + "infill_anchor_max": "15", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.22", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "70", + "small_perimeter_speed": "40", + "outer_wall_speed": "40", + "sparse_infill_speed": "200", + "internal_solid_infill_speed": "200", + "top_surface_speed": "70", + "support_speed": "75", + "support_interface_speed": "75%", + "bridge_speed": "30", + "gap_infill_speed": "40", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2000", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "3000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.55", + "initial_layer_line_width": "0.55", + "inner_wall_line_width": "0.5", + "outer_wall_line_width": "0.5", + "sparse_infill_line_width": "0.5", + "internal_solid_infill_line_width": "0.5", + "top_surface_line_width": "0.45", + "support_line_width": "0.4", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 5T 0.5 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.12mm Speed @Prusa XL 5T 0.25.json b/resources/profiles/Prusa/process/0.12mm Speed @Prusa XL 5T 0.25.json new file mode 100644 index 00000000000..171c4eb15dd --- /dev/null +++ b/resources/profiles/Prusa/process/0.12mm Speed @Prusa XL 5T 0.25.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Speed @Prusa XL 5T 0.25", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.12", + "wall_loops": "3", + "top_shell_layers": "9", + "bottom_shell_layers": "6", + "top_shell_thickness": "0.6", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "1", + "brim_object_gap": "0", + "support_threshold_angle": "40", + "raft_first_layer_density": "95%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.08", + "support_top_z_distance": "0.09", + "support_bottom_z_distance": "0.09", + "support_base_pattern_spacing": "1", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "150%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "120", + "small_perimeter_speed": "120", + "outer_wall_speed": "120", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "140", + "top_surface_speed": "60", + "support_speed": "70", + "support_interface_speed": "75%", + "bridge_speed": "30", + "gap_infill_speed": "50", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2000", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "3000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "4000", + "line_width": "0.27", + "initial_layer_line_width": "0.32", + "inner_wall_line_width": "0.27", + "outer_wall_line_width": "0.27", + "sparse_infill_line_width": "0.27", + "internal_solid_infill_line_width": "0.27", + "top_surface_line_width": "0.27", + "support_line_width": "0.25", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0", + "compatible_printers": [ + "Prusa XL 5T 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 5T 0.25.json b/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 5T 0.25.json new file mode 100644 index 00000000000..d1cbccfcde7 --- /dev/null +++ b/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 5T 0.25.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Structural @Prusa XL 5T 0.25", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.12", + "wall_loops": "3", + "top_shell_layers": "9", + "bottom_shell_layers": "7", + "top_shell_thickness": "0.6", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "1", + "brim_object_gap": "0", + "support_threshold_angle": "40", + "raft_first_layer_density": "95%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.08", + "support_top_z_distance": "0.09", + "support_bottom_z_distance": "0.09", + "support_base_pattern_spacing": "1", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "150%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "70", + "small_perimeter_speed": "40", + "outer_wall_speed": "40", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "140", + "top_surface_speed": "60", + "support_speed": "70", + "support_interface_speed": "75%", + "bridge_speed": "30", + "gap_infill_speed": "50", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2000", + "outer_wall_acceleration": "1000", + "inner_wall_acceleration": "1500", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "2500", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "4000", + "line_width": "0.27", + "initial_layer_line_width": "0.32", + "inner_wall_line_width": "0.27", + "outer_wall_line_width": "0.27", + "sparse_infill_line_width": "0.27", + "internal_solid_infill_line_width": "0.27", + "top_surface_line_width": "0.27", + "support_line_width": "0.25", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0", + "compatible_printers": [ + "Prusa XL 5T 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 5T 0.3.json b/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 5T 0.3.json new file mode 100644 index 00000000000..57ce297d8c3 --- /dev/null +++ b/resources/profiles/Prusa/process/0.12mm Structural @Prusa XL 5T 0.3.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Structural @Prusa XL 5T 0.3", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.12", + "wall_loops": "3", + "top_shell_layers": "7", + "bottom_shell_layers": "6", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "1", + "brim_object_gap": "0", + "support_threshold_angle": "40", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.12", + "support_top_z_distance": "0.12", + "support_bottom_z_distance": "0.12", + "support_base_pattern_spacing": "1", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "100%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "80", + "small_perimeter_speed": "40", + "outer_wall_speed": "40", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "200", + "top_surface_speed": "40", + "support_speed": "70", + "support_interface_speed": "75%", + "bridge_speed": "30", + "gap_infill_speed": "50", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "1500", + "outer_wall_acceleration": "1200", + "inner_wall_acceleration": "1500", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "3000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.34", + "initial_layer_line_width": "0.4", + "inner_wall_line_width": "0.34", + "outer_wall_line_width": "0.34", + "sparse_infill_line_width": "0.34", + "internal_solid_infill_line_width": "0.34", + "top_surface_line_width": "0.3", + "support_line_width": "0.3", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0", + "compatible_printers": [ + "Prusa XL 5T 0.3 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 5T 0.25.json b/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 5T 0.25.json new file mode 100644 index 00000000000..1f99efe994f --- /dev/null +++ b/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 5T 0.25.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.15mm Speed @Prusa XL 5T 0.25", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.15", + "wall_loops": "3", + "top_shell_layers": "6", + "bottom_shell_layers": "7", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "1", + "brim_object_gap": "0", + "support_threshold_angle": "40", + "raft_first_layer_density": "95%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.08", + "support_top_z_distance": "0.09", + "support_bottom_z_distance": "0.09", + "support_base_pattern_spacing": "1", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "150%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "120", + "small_perimeter_speed": "120", + "outer_wall_speed": "120", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "140", + "top_surface_speed": "60", + "support_speed": "70", + "support_interface_speed": "75%", + "bridge_speed": "30", + "gap_infill_speed": "50", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2000", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "3000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "4000", + "line_width": "0.27", + "initial_layer_line_width": "0.32", + "inner_wall_line_width": "0.27", + "outer_wall_line_width": "0.27", + "sparse_infill_line_width": "0.27", + "internal_solid_infill_line_width": "0.27", + "top_surface_line_width": "0.27", + "support_line_width": "0.25", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0", + "compatible_printers": [ + "Prusa XL 5T 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 5T 0.4.json b/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 5T 0.4.json new file mode 100644 index 00000000000..b371e07e86c --- /dev/null +++ b/resources/profiles/Prusa/process/0.15mm Speed @Prusa XL 5T 0.4.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.15mm Speed @Prusa XL 5T 0.4", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.15", + "wall_loops": "2", + "top_shell_layers": "6", + "bottom_shell_layers": "5", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "2", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.15", + "support_top_z_distance": "0.17", + "support_bottom_z_distance": "0.17", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "170", + "small_perimeter_speed": "170", + "outer_wall_speed": "170", + "sparse_infill_speed": "200", + "internal_solid_infill_speed": "200", + "top_surface_speed": "100", + "support_speed": "120", + "support_interface_speed": "50", + "bridge_speed": "45", + "gap_infill_speed": "120", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2500", + "outer_wall_acceleration": "2500", + "inner_wall_acceleration": "3000", + "top_surface_acceleration": "1500", + "internal_solid_infill_acceleration": "3500", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.45", + "initial_layer_line_width": "0.5", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "sparse_infill_line_width": "0.45", + "internal_solid_infill_line_width": "0.45", + "top_surface_line_width": "0.42", + "support_line_width": "0.36", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 5T 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.25.json b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.25.json new file mode 100644 index 00000000000..9b7cbf961dd --- /dev/null +++ b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.25.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.15mm Structural @Prusa XL 5T 0.25", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.15", + "wall_loops": "3", + "top_shell_layers": "6", + "bottom_shell_layers": "5", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "1", + "brim_object_gap": "0", + "support_threshold_angle": "40", + "raft_first_layer_density": "95%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.08", + "support_top_z_distance": "0.09", + "support_bottom_z_distance": "0.09", + "support_base_pattern_spacing": "1", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "150%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "70", + "small_perimeter_speed": "40", + "outer_wall_speed": "40", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "140", + "top_surface_speed": "60", + "support_speed": "70", + "support_interface_speed": "75%", + "bridge_speed": "30", + "gap_infill_speed": "50", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2000", + "outer_wall_acceleration": "1000", + "inner_wall_acceleration": "1500", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "3000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "4000", + "line_width": "0.27", + "initial_layer_line_width": "0.32", + "inner_wall_line_width": "0.27", + "outer_wall_line_width": "0.27", + "sparse_infill_line_width": "0.27", + "internal_solid_infill_line_width": "0.27", + "top_surface_line_width": "0.27", + "support_line_width": "0.25", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0", + "compatible_printers": [ + "Prusa XL 5T 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.4.json b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.4.json new file mode 100644 index 00000000000..69ad3b44870 --- /dev/null +++ b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.4.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.15mm Structural @Prusa XL 5T 0.4", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.15", + "wall_loops": "2", + "top_shell_layers": "6", + "bottom_shell_layers": "5", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "2", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.15", + "support_top_z_distance": "0.17", + "support_bottom_z_distance": "0.17", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "80", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "110", + "internal_solid_infill_speed": "140", + "top_surface_speed": "75", + "support_speed": "120", + "support_interface_speed": "50", + "bridge_speed": "45", + "gap_infill_speed": "65", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "90%", + "default_acceleration": "2500", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2500", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.45", + "initial_layer_line_width": "0.5", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "sparse_infill_line_width": "0.45", + "internal_solid_infill_line_width": "0.45", + "top_surface_line_width": "0.42", + "support_line_width": "0.36", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 5T 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.5.json b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.5.json new file mode 100644 index 00000000000..fb209d319c6 --- /dev/null +++ b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.5.json @@ -0,0 +1,68 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.15mm Structural @Prusa XL 5T 0.5", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.15", + "wall_loops": "2", + "top_shell_layers": "6", + "bottom_shell_layers": "5", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "2", + "infill_anchor_max": "15", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.22", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "80", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "200", + "internal_solid_infill_speed": "180", + "top_surface_speed": "70", + "support_speed": "75", + "support_interface_speed": "75%", + "bridge_speed": "40", + "gap_infill_speed": "50", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2000", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "3000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.55", + "initial_layer_line_width": "0.55", + "inner_wall_line_width": "0.55", + "outer_wall_line_width": "0.55", + "sparse_infill_line_width": "0.55", + "internal_solid_infill_line_width": "0.55", + "top_surface_line_width": "0.5", + "support_line_width": "0.4", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 5T 0.5 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.6.json b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.6.json new file mode 100644 index 00000000000..24b3b29311a --- /dev/null +++ b/resources/profiles/Prusa/process/0.15mm Structural @Prusa XL 5T 0.6.json @@ -0,0 +1,69 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.15mm Structural @Prusa XL 5T 0.6", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.15", + "wall_loops": "2", + "top_shell_layers": "6", + "bottom_shell_layers": "5", + "top_shell_thickness": "0.9", + "bottom_shell_thickness": "0.6", + "sparse_infill_density": "20%", + "infill_anchor": "2.5", + "infill_anchor_max": "20", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.22", + "support_bottom_z_distance": "0.22", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.25", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_branch_diameter_double_wall": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "80", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "105", + "internal_solid_infill_speed": "160", + "top_surface_speed": "70", + "support_speed": "110", + "support_interface_speed": "75%", + "bridge_speed": "40", + "gap_infill_speed": "75", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "90%", + "default_acceleration": "2500", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2500", + "top_surface_acceleration": "1500", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.68", + "initial_layer_line_width": "0.68", + "inner_wall_line_width": "0.6", + "outer_wall_line_width": "0.6", + "sparse_infill_line_width": "0.6", + "internal_solid_infill_line_width": "0.6", + "top_surface_line_width": "0.5", + "support_line_width": "0.55", + "infill_wall_overlap": "15%", + "resolution": "0.0125", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 5T 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.16mm Speed @Prusa XL 5T 0.3.json b/resources/profiles/Prusa/process/0.16mm Speed @Prusa XL 5T 0.3.json new file mode 100644 index 00000000000..e076cd44fa1 --- /dev/null +++ b/resources/profiles/Prusa/process/0.16mm Speed @Prusa XL 5T 0.3.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Speed @Prusa XL 5T 0.3", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.16", + "wall_loops": "3", + "top_shell_layers": "6", + "bottom_shell_layers": "5", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "1", + "brim_object_gap": "0", + "support_threshold_angle": "40", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.12", + "support_top_z_distance": "0.12", + "support_bottom_z_distance": "0.12", + "support_base_pattern_spacing": "1", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "100%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "140", + "small_perimeter_speed": "120", + "outer_wall_speed": "120", + "sparse_infill_speed": "120", + "internal_solid_infill_speed": "200", + "top_surface_speed": "50", + "support_speed": "100", + "support_interface_speed": "45%", + "bridge_speed": "30", + "gap_infill_speed": "50", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2000", + "outer_wall_acceleration": "2500", + "inner_wall_acceleration": "2500", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.34", + "initial_layer_line_width": "0.4", + "inner_wall_line_width": "0.34", + "outer_wall_line_width": "0.34", + "sparse_infill_line_width": "0.34", + "internal_solid_infill_line_width": "0.34", + "top_surface_line_width": "0.3", + "support_line_width": "0.3", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0", + "compatible_printers": [ + "Prusa XL 5T 0.3 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.16mm Structural @Prusa XL 5T 0.3.json b/resources/profiles/Prusa/process/0.16mm Structural @Prusa XL 5T 0.3.json new file mode 100644 index 00000000000..c87fd0fbb6c --- /dev/null +++ b/resources/profiles/Prusa/process/0.16mm Structural @Prusa XL 5T 0.3.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Structural @Prusa XL 5T 0.3", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.16", + "wall_loops": "3", + "top_shell_layers": "6", + "bottom_shell_layers": "5", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "1", + "brim_object_gap": "0", + "support_threshold_angle": "40", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.12", + "support_top_z_distance": "0.12", + "support_bottom_z_distance": "0.12", + "support_base_pattern_spacing": "1", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "100%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "80", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "120", + "internal_solid_infill_speed": "200", + "top_surface_speed": "50", + "support_speed": "70", + "support_interface_speed": "75%", + "bridge_speed": "30", + "gap_infill_speed": "50", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2000", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.34", + "initial_layer_line_width": "0.4", + "inner_wall_line_width": "0.34", + "outer_wall_line_width": "0.34", + "sparse_infill_line_width": "0.34", + "internal_solid_infill_line_width": "0.34", + "top_surface_line_width": "0.3", + "support_line_width": "0.3", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0", + "compatible_printers": [ + "Prusa XL 5T 0.3 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.3.json b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.3.json new file mode 100644 index 00000000000..429f8d2c072 --- /dev/null +++ b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.3.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Speed @Prusa XL 5T 0.3", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.2", + "wall_loops": "3", + "top_shell_layers": "5", + "bottom_shell_layers": "4", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "1", + "brim_object_gap": "0", + "support_threshold_angle": "40", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.12", + "support_top_z_distance": "0.12", + "support_bottom_z_distance": "0.12", + "support_base_pattern_spacing": "1", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "100%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "140", + "small_perimeter_speed": "120", + "outer_wall_speed": "120", + "sparse_infill_speed": "120", + "internal_solid_infill_speed": "200", + "top_surface_speed": "50", + "support_speed": "100", + "support_interface_speed": "45%", + "bridge_speed": "30", + "gap_infill_speed": "50", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2000", + "outer_wall_acceleration": "2500", + "inner_wall_acceleration": "2500", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.34", + "initial_layer_line_width": "0.4", + "inner_wall_line_width": "0.34", + "outer_wall_line_width": "0.34", + "sparse_infill_line_width": "0.34", + "internal_solid_infill_line_width": "0.34", + "top_surface_line_width": "0.3", + "support_line_width": "0.3", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0", + "compatible_printers": [ + "Prusa XL 5T 0.3 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.4.json b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.4.json new file mode 100644 index 00000000000..d6e23c2a08d --- /dev/null +++ b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.4.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Speed @Prusa XL 5T 0.4", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.2", + "wall_loops": "2", + "top_shell_layers": "5", + "bottom_shell_layers": "4", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "2", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.15", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "170", + "small_perimeter_speed": "170", + "outer_wall_speed": "170", + "sparse_infill_speed": "200", + "internal_solid_infill_speed": "200", + "top_surface_speed": "100", + "support_speed": "110", + "support_interface_speed": "50%", + "bridge_speed": "50", + "gap_infill_speed": "120", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "90%", + "default_acceleration": "2500", + "outer_wall_acceleration": "2500", + "inner_wall_acceleration": "3000", + "top_surface_acceleration": "1500", + "internal_solid_infill_acceleration": "4000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.45", + "initial_layer_line_width": "0.5", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "sparse_infill_line_width": "0.45", + "internal_solid_infill_line_width": "0.45", + "top_surface_line_width": "0.42", + "support_line_width": "0.36", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 5T 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.5.json b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.5.json new file mode 100644 index 00000000000..01e10672ef6 --- /dev/null +++ b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.5.json @@ -0,0 +1,68 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Speed @Prusa XL 5T 0.5", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.2", + "wall_loops": "2", + "top_shell_layers": "5", + "bottom_shell_layers": "4", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "2", + "infill_anchor_max": "15", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.22", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "140", + "small_perimeter_speed": "140", + "outer_wall_speed": "140", + "sparse_infill_speed": "200", + "internal_solid_infill_speed": "135", + "top_surface_speed": "70", + "support_speed": "120", + "support_interface_speed": "75%", + "bridge_speed": "40", + "gap_infill_speed": "70", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2500", + "outer_wall_acceleration": "2500", + "inner_wall_acceleration": "3000", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.55", + "initial_layer_line_width": "0.55", + "inner_wall_line_width": "0.55", + "outer_wall_line_width": "0.55", + "sparse_infill_line_width": "0.55", + "internal_solid_infill_line_width": "0.55", + "top_surface_line_width": "0.5", + "support_line_width": "0.4", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 5T 0.5 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.6.json b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.6.json new file mode 100644 index 00000000000..e44f3cb46b2 --- /dev/null +++ b/resources/profiles/Prusa/process/0.20mm Speed @Prusa XL 5T 0.6.json @@ -0,0 +1,69 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Speed @Prusa XL 5T 0.6", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.2", + "wall_loops": "2", + "top_shell_layers": "5", + "bottom_shell_layers": "4", + "top_shell_thickness": "0.9", + "bottom_shell_thickness": "0.6", + "sparse_infill_density": "20%", + "infill_anchor": "2.5", + "infill_anchor_max": "20", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.22", + "support_bottom_z_distance": "0.22", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.25", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_branch_diameter_double_wall": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "120", + "small_perimeter_speed": "120", + "outer_wall_speed": "120", + "sparse_infill_speed": "120", + "internal_solid_infill_speed": "110", + "top_surface_speed": "70", + "support_speed": "110", + "support_interface_speed": "75%", + "bridge_speed": "40", + "gap_infill_speed": "75", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "50", + "default_acceleration": "2500", + "outer_wall_acceleration": "2500", + "inner_wall_acceleration": "3000", + "top_surface_acceleration": "1500", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.68", + "initial_layer_line_width": "0.68", + "inner_wall_line_width": "0.62", + "outer_wall_line_width": "0.62", + "sparse_infill_line_width": "0.62", + "internal_solid_infill_line_width": "0.62", + "top_surface_line_width": "0.5", + "support_line_width": "0.55", + "infill_wall_overlap": "15%", + "resolution": "0.0125", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 5T 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 5T 0.4.json b/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 5T 0.4.json new file mode 100644 index 00000000000..147386cef36 --- /dev/null +++ b/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 5T 0.4.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Structural @Prusa XL 5T 0.4", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.2", + "wall_loops": "2", + "top_shell_layers": "5", + "bottom_shell_layers": "4", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "2", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.15", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "80", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "120", + "internal_solid_infill_speed": "140", + "top_surface_speed": "75", + "support_speed": "120", + "support_interface_speed": "50", + "bridge_speed": "50", + "gap_infill_speed": "65", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "90%", + "default_acceleration": "2500", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2500", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.45", + "initial_layer_line_width": "0.5", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "sparse_infill_line_width": "0.45", + "internal_solid_infill_line_width": "0.45", + "top_surface_line_width": "0.42", + "support_line_width": "0.36", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 5T 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 5T 0.5.json b/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 5T 0.5.json new file mode 100644 index 00000000000..f761f984244 --- /dev/null +++ b/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 5T 0.5.json @@ -0,0 +1,68 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Structural @Prusa XL 5T 0.5", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.2", + "wall_loops": "2", + "top_shell_layers": "5", + "bottom_shell_layers": "4", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "2", + "infill_anchor_max": "15", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.22", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "80", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "200", + "internal_solid_infill_speed": "120", + "top_surface_speed": "70", + "support_speed": "75", + "support_interface_speed": "75%", + "bridge_speed": "40", + "gap_infill_speed": "70", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2500", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2000", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.55", + "initial_layer_line_width": "0.55", + "inner_wall_line_width": "0.55", + "outer_wall_line_width": "0.55", + "sparse_infill_line_width": "0.55", + "internal_solid_infill_line_width": "0.55", + "top_surface_line_width": "0.5", + "support_line_width": "0.4", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 5T 0.5 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 5T 0.6.json b/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 5T 0.6.json new file mode 100644 index 00000000000..a9951b46322 --- /dev/null +++ b/resources/profiles/Prusa/process/0.20mm Structural @Prusa XL 5T 0.6.json @@ -0,0 +1,69 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Structural @Prusa XL 5T 0.6", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.2", + "wall_loops": "2", + "top_shell_layers": "5", + "bottom_shell_layers": "4", + "top_shell_thickness": "0.9", + "bottom_shell_thickness": "0.6", + "sparse_infill_density": "20%", + "infill_anchor": "2.5", + "infill_anchor_max": "20", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.22", + "support_bottom_z_distance": "0.22", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.25", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_branch_diameter_double_wall": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "80", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "120", + "internal_solid_infill_speed": "110", + "top_surface_speed": "70", + "support_speed": "110", + "support_interface_speed": "75%", + "bridge_speed": "40", + "gap_infill_speed": "75", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "90%", + "default_acceleration": "2500", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2500", + "top_surface_acceleration": "1500", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.68", + "initial_layer_line_width": "0.68", + "inner_wall_line_width": "0.6", + "outer_wall_line_width": "0.6", + "sparse_infill_line_width": "0.6", + "internal_solid_infill_line_width": "0.6", + "top_surface_line_width": "0.5", + "support_line_width": "0.55", + "infill_wall_overlap": "15%", + "resolution": "0.0125", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 5T 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 5T 0.5.json b/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 5T 0.5.json new file mode 100644 index 00000000000..f55bd6d6d8c --- /dev/null +++ b/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 5T 0.5.json @@ -0,0 +1,68 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.25mm Speed @Prusa XL 5T 0.5", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.25", + "wall_loops": "2", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "2", + "infill_anchor_max": "15", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.25", + "support_bottom_z_distance": "0.25", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.22", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "140", + "small_perimeter_speed": "140", + "outer_wall_speed": "140", + "sparse_infill_speed": "200", + "internal_solid_infill_speed": "110", + "top_surface_speed": "70", + "support_speed": "120", + "support_interface_speed": "75%", + "bridge_speed": "40", + "gap_infill_speed": "70", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2500", + "outer_wall_acceleration": "2500", + "inner_wall_acceleration": "3000", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.55", + "initial_layer_line_width": "0.55", + "inner_wall_line_width": "0.55", + "outer_wall_line_width": "0.55", + "sparse_infill_line_width": "0.55", + "internal_solid_infill_line_width": "0.55", + "top_surface_line_width": "0.5", + "support_line_width": "0.4", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 5T 0.5 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 5T 0.6.json b/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 5T 0.6.json new file mode 100644 index 00000000000..678d72f7189 --- /dev/null +++ b/resources/profiles/Prusa/process/0.25mm Speed @Prusa XL 5T 0.6.json @@ -0,0 +1,69 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.25mm Speed @Prusa XL 5T 0.6", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.25", + "wall_loops": "2", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "0.9", + "bottom_shell_thickness": "0.6", + "sparse_infill_density": "20%", + "infill_anchor": "2.5", + "infill_anchor_max": "20", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.25", + "support_bottom_z_distance": "0.25", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.25", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_branch_diameter_double_wall": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "80", + "small_perimeter_speed": "80", + "outer_wall_speed": "80", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "90", + "top_surface_speed": "60", + "support_speed": "80", + "support_interface_speed": "75%", + "bridge_speed": "40", + "gap_infill_speed": "70", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "50", + "default_acceleration": "2500", + "outer_wall_acceleration": "2500", + "inner_wall_acceleration": "3000", + "top_surface_acceleration": "1500", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.68", + "initial_layer_line_width": "0.68", + "inner_wall_line_width": "0.68", + "outer_wall_line_width": "0.68", + "sparse_infill_line_width": "0.68", + "internal_solid_infill_line_width": "0.68", + "top_surface_line_width": "0.55", + "support_line_width": "0.55", + "infill_wall_overlap": "15%", + "resolution": "0.0125", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 5T 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 5T 0.4.json b/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 5T 0.4.json new file mode 100644 index 00000000000..a5d0d3eef0d --- /dev/null +++ b/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 5T 0.4.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.25mm Structural @Prusa XL 5T 0.4", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.25", + "wall_loops": "2", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "2", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.15", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.2", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "80", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "120", + "internal_solid_infill_speed": "140", + "top_surface_speed": "75", + "support_speed": "120", + "support_interface_speed": "50", + "bridge_speed": "50", + "gap_infill_speed": "65", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "90%", + "default_acceleration": "2500", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2500", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.45", + "initial_layer_line_width": "0.5", + "inner_wall_line_width": "0.45", + "outer_wall_line_width": "0.45", + "sparse_infill_line_width": "0.45", + "internal_solid_infill_line_width": "0.45", + "top_surface_line_width": "0.42", + "support_line_width": "0.36", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 5T 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 5T 0.5.json b/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 5T 0.5.json new file mode 100644 index 00000000000..3d39489dd75 --- /dev/null +++ b/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 5T 0.5.json @@ -0,0 +1,68 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.25mm Structural @Prusa XL 5T 0.5", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.25", + "wall_loops": "2", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "0.7", + "bottom_shell_thickness": "0.5", + "sparse_infill_density": "15%", + "infill_anchor": "2", + "infill_anchor_max": "15", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.25", + "support_bottom_z_distance": "0.25", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.22", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "80", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "200", + "internal_solid_infill_speed": "110", + "top_surface_speed": "70", + "support_speed": "75", + "support_interface_speed": "75%", + "bridge_speed": "40", + "gap_infill_speed": "70", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "80%", + "default_acceleration": "2500", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2000", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.55", + "initial_layer_line_width": "0.55", + "inner_wall_line_width": "0.55", + "outer_wall_line_width": "0.55", + "sparse_infill_line_width": "0.55", + "internal_solid_infill_line_width": "0.55", + "top_surface_line_width": "0.5", + "support_line_width": "0.4", + "infill_wall_overlap": "15%", + "resolution": "0.008", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 5T 0.5 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 5T 0.6.json b/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 5T 0.6.json new file mode 100644 index 00000000000..44e36b1d88c --- /dev/null +++ b/resources/profiles/Prusa/process/0.25mm Structural @Prusa XL 5T 0.6.json @@ -0,0 +1,69 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.25mm Structural @Prusa XL 5T 0.6", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.25", + "wall_loops": "2", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "0.9", + "bottom_shell_thickness": "0.6", + "sparse_infill_density": "20%", + "infill_anchor": "2.5", + "infill_anchor_max": "20", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.25", + "support_bottom_z_distance": "0.25", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.25", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_branch_diameter_double_wall": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "80", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "95", + "top_surface_speed": "70", + "support_speed": "80", + "support_interface_speed": "75%", + "bridge_speed": "40", + "gap_infill_speed": "70", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "90%", + "default_acceleration": "2500", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2500", + "top_surface_acceleration": "1500", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.68", + "initial_layer_line_width": "0.68", + "inner_wall_line_width": "0.68", + "outer_wall_line_width": "0.68", + "sparse_infill_line_width": "0.68", + "internal_solid_infill_line_width": "0.68", + "top_surface_line_width": "0.55", + "support_line_width": "0.55", + "infill_wall_overlap": "15%", + "resolution": "0.0125", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 5T 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.30mm Detail @Prusa XL 5T 0.8.json b/resources/profiles/Prusa/process/0.30mm Detail @Prusa XL 5T 0.8.json new file mode 100644 index 00000000000..70c48a8b279 --- /dev/null +++ b/resources/profiles/Prusa/process/0.30mm Detail @Prusa XL 5T 0.8.json @@ -0,0 +1,71 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Detail @Prusa XL 5T 0.8", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.3", + "wall_loops": "2", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "1.2", + "bottom_shell_thickness": "0.8", + "thick_bridges": "1", + "seam_position": "nearest", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "infill_anchor": "2.5", + "infill_anchor_max": "20", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.2", + "support_top_z_distance": "0.25", + "support_bottom_z_distance": "0.25", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.35", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "70", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "50", + "top_surface_speed": "35", + "support_speed": "65", + "support_interface_speed": "85%", + "bridge_speed": "22", + "gap_infill_speed": "40", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "80%", + "default_acceleration": "2000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2000", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.9", + "initial_layer_line_width": "1", + "inner_wall_line_width": "0.9", + "outer_wall_line_width": "0.9", + "sparse_infill_line_width": "0.9", + "internal_solid_infill_line_width": "0.9", + "top_surface_line_width": "0.7", + "support_line_width": "0.65", + "infill_wall_overlap": "15%", + "resolution": "0.0125", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 5T 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.32mm Speed @Prusa XL 5T 0.6.json b/resources/profiles/Prusa/process/0.32mm Speed @Prusa XL 5T 0.6.json new file mode 100644 index 00000000000..bd6799243ea --- /dev/null +++ b/resources/profiles/Prusa/process/0.32mm Speed @Prusa XL 5T 0.6.json @@ -0,0 +1,69 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.32mm Speed @Prusa XL 5T 0.6", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.32", + "wall_loops": "2", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "0.9", + "bottom_shell_thickness": "0.6", + "sparse_infill_density": "20%", + "infill_anchor": "2.5", + "infill_anchor_max": "20", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.25", + "support_bottom_z_distance": "0.25", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.25", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_branch_diameter_double_wall": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "70", + "small_perimeter_speed": "70", + "outer_wall_speed": "70", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "70", + "top_surface_speed": "60", + "support_speed": "70", + "support_interface_speed": "75%", + "bridge_speed": "40", + "gap_infill_speed": "65", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "50", + "default_acceleration": "2500", + "outer_wall_acceleration": "2500", + "inner_wall_acceleration": "3000", + "top_surface_acceleration": "1500", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.68", + "initial_layer_line_width": "0.68", + "inner_wall_line_width": "0.68", + "outer_wall_line_width": "0.68", + "sparse_infill_line_width": "0.68", + "internal_solid_infill_line_width": "0.68", + "top_surface_line_width": "0.55", + "support_line_width": "0.55", + "infill_wall_overlap": "15%", + "resolution": "0.0125", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 5T 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.32mm Structural @Prusa XL 5T 0.6.json b/resources/profiles/Prusa/process/0.32mm Structural @Prusa XL 5T 0.6.json new file mode 100644 index 00000000000..78980e2136e --- /dev/null +++ b/resources/profiles/Prusa/process/0.32mm Structural @Prusa XL 5T 0.6.json @@ -0,0 +1,69 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.32mm Structural @Prusa XL 5T 0.6", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.32", + "wall_loops": "2", + "top_shell_layers": "5", + "bottom_shell_layers": "4", + "top_shell_thickness": "0.9", + "bottom_shell_thickness": "0.6", + "sparse_infill_density": "20%", + "infill_anchor": "2.5", + "infill_anchor_max": "20", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.25", + "support_top_z_distance": "0.25", + "support_bottom_z_distance": "0.25", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.25", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_branch_diameter_double_wall": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "70", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "70", + "internal_solid_infill_speed": "70", + "top_surface_speed": "70", + "support_speed": "80", + "support_interface_speed": "75%", + "bridge_speed": "40", + "gap_infill_speed": "70", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "90%", + "default_acceleration": "2500", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2500", + "top_surface_acceleration": "1500", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1500", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.68", + "initial_layer_line_width": "0.68", + "inner_wall_line_width": "0.68", + "outer_wall_line_width": "0.68", + "sparse_infill_line_width": "0.68", + "internal_solid_infill_line_width": "0.68", + "top_surface_line_width": "0.55", + "support_line_width": "0.55", + "infill_wall_overlap": "15%", + "resolution": "0.0125", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 5T 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.40mm Quality @Prusa XL 5T 0.8.json b/resources/profiles/Prusa/process/0.40mm Quality @Prusa XL 5T 0.8.json new file mode 100644 index 00000000000..7e407ebb9a0 --- /dev/null +++ b/resources/profiles/Prusa/process/0.40mm Quality @Prusa XL 5T 0.8.json @@ -0,0 +1,71 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.40mm Quality @Prusa XL 5T 0.8", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.4", + "wall_loops": "2", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "1.2", + "bottom_shell_thickness": "0.8", + "thick_bridges": "1", + "seam_position": "nearest", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "infill_anchor": "2.5", + "infill_anchor_max": "20", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.2", + "support_top_z_distance": "0.25", + "support_bottom_z_distance": "0.25", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.35", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "50", + "small_perimeter_speed": "45", + "outer_wall_speed": "45", + "sparse_infill_speed": "90", + "internal_solid_infill_speed": "45", + "top_surface_speed": "35", + "support_speed": "50", + "support_interface_speed": "85%", + "bridge_speed": "22", + "gap_infill_speed": "35", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "80%", + "default_acceleration": "2000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2000", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.9", + "initial_layer_line_width": "1", + "inner_wall_line_width": "0.9", + "outer_wall_line_width": "0.9", + "sparse_infill_line_width": "0.9", + "internal_solid_infill_line_width": "0.9", + "top_surface_line_width": "0.75", + "support_line_width": "0.65", + "infill_wall_overlap": "15%", + "resolution": "0.0125", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 5T 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.55mm Draft @Prusa XL 5T 0.8.json b/resources/profiles/Prusa/process/0.55mm Draft @Prusa XL 5T 0.8.json new file mode 100644 index 00000000000..0e51ca2592c --- /dev/null +++ b/resources/profiles/Prusa/process/0.55mm Draft @Prusa XL 5T 0.8.json @@ -0,0 +1,71 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.55mm Draft @Prusa XL 5T 0.8", + "from": "system", + "instantiation": "true", + "inherits": "process_common_xl_5t", + "inital_layer_height": "0.2", + "layer_height": "0.55", + "wall_loops": "2", + "top_shell_layers": "4", + "bottom_shell_layers": "3", + "top_shell_thickness": "1.2", + "bottom_shell_thickness": "0.8", + "thick_bridges": "1", + "seam_position": "nearest", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "infill_anchor": "2.5", + "infill_anchor_max": "20", + "brim_object_gap": "0.1", + "support_threshold_angle": "40", + "raft_first_layer_density": "80%", + "raft_first_layer_expansion": "3.5", + "raft_contact_distance": "0.2", + "support_top_z_distance": "0.25", + "support_bottom_z_distance": "0.25", + "support_base_pattern_spacing": "2", + "support_interface_top_layers": "5", + "support_interface_spacing": "0.35", + "support_object_xy_distance": "80%", + "tree_support_bramch_diameter_angle": "5", + "tree_support_tip_diameter": "0.8", + "inner_wall_speed": "40", + "small_perimeter_speed": "35", + "outer_wall_speed": "35", + "sparse_infill_speed": "55", + "internal_solid_infill_speed": "35", + "top_surface_speed": "30", + "support_speed": "35", + "support_interface_speed": "85%", + "bridge_speed": "22", + "gap_infill_speed": "30", + "overhang_1_4_speed": "15", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "80%", + "default_acceleration": "2000", + "outer_wall_acceleration": "1500", + "inner_wall_acceleration": "2000", + "top_surface_acceleration": "1000", + "internal_solid_infill_acceleration": "3000", + "sparse_infill_acceleration": "4000", + "bridge_acceleration": "1000", + "initial_layer_acceleration": "500", + "travel_acceleration": "5000", + "line_width": "0.9", + "initial_layer_line_width": "1", + "inner_wall_line_width": "1", + "outer_wall_line_width": "1", + "sparse_infill_line_width": "0.9", + "internal_solid_infill_line_width": "0.9", + "top_surface_line_width": "0.75", + "support_line_width": "0.65", + "infill_wall_overlap": "15%", + "resolution": "0.0125", + "elefant_foot_compensation": "0.2", + "compatible_printers": [ + "Prusa XL 5T 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/process_common_xl.json b/resources/profiles/Prusa/process/process_common_xl.json index f3f2a7e791a..65622abadbf 100644 --- a/resources/profiles/Prusa/process/process_common_xl.json +++ b/resources/profiles/Prusa/process/process_common_xl.json @@ -92,5 +92,7 @@ "min_bead_width": "85%", "min_feature_size": "25%", "filename_format": "{input_filename_base}_{layer_height}mm_{filament_type[initial_tool]}_{print_time}.gcode", - "gcode_label_objects": "1" + "gcode_label_objects": "1", + "exclude_object": "1" + } \ No newline at end of file diff --git a/resources/profiles/Prusa/process/process_common_xl_5t.json b/resources/profiles/Prusa/process/process_common_xl_5t.json new file mode 100644 index 00000000000..1fe313aabeb --- /dev/null +++ b/resources/profiles/Prusa/process/process_common_xl_5t.json @@ -0,0 +1,16 @@ +{ + "type": "process", + "name": "process_common_xl_5t", + "from": "system", + "instantiation": "false", + "inherits": "process_common_xl", + "enable_prime_tower": "1", + "wipe_tower_cone_angle": "25", + "wipe_tower_extra_spacing": "150%", + "wipe_tower_rotation_angle": "90", + "single_extruder_multi_material_priming": "0", + "ooze_prevention": "1", + "standby_temperature_delta": "-40", + "preheat_time": "120", + "preheat_steps": "10" +} \ No newline at end of file diff --git a/resources/web/data/text.js b/resources/web/data/text.js index c80bb979c83..7d242960849 100644 --- a/resources/web/data/text.js +++ b/resources/web/data/text.js @@ -107,6 +107,9 @@ var LangText = { t113: "You may change your choice in preference anytime.", orca1: "Edit Project Info", orca2: "no model information", + orca3: "Stealth Mode", + orca4: "This stops the transmission of data to Bambu's cloud services. Users who don't use BBL machines or use LAN mode only can safely turn on this function.", + orca5: "Enable Stealth Mode.", }, ca_ES: { t1: "Benvingut a Orca Slicer", @@ -323,8 +326,11 @@ var LangText = { t111: "Crear nuevo", t112: "Unirse al programa", t113: "Puede cambiar su elección en preferencias en cualquier momento.", - orca1: "Edit Project Info", - orca2: "no model information", + orca1: "Editar información del proyecto", + orca2: "No hay información sobre el modelo", + orca3: "Modo Invisible", + orca4: "Esta función detiene la transmisión de datos a los servicios en la nube de Bambu. Los usuarios que no utilicen máquinas BBL o que solo utilicen el modo LAN pueden activar esta función de forma segura.", + orca5: "Activar Modo Invisible.", }, de_DE: { t1: "Willkommen im Orca Slicer", diff --git a/resources/web/guide/21/index.html b/resources/web/guide/21/index.html index a5163568bdd..3e19309d19d 100644 --- a/resources/web/guide/21/index.html +++ b/resources/web/guide/21/index.html @@ -100,7 +100,7 @@
-
Back
+
Back
Next
diff --git a/resources/web/guide/22/22.js b/resources/web/guide/22/22.js index a335e757345..ff284ed91a5 100644 --- a/resources/web/guide/22/22.js +++ b/resources/web/guide/22/22.js @@ -562,7 +562,7 @@ function ReturnPreviewPage() let nMode=m_ProfileItem["model"].length; if( nMode==1) - document.location.href="../3/index.html"; + document.location.href="../1/index.html"; else document.location.href="../21/index.html"; } @@ -573,7 +573,7 @@ function GotoNetPluginPage() let bRet=ResponseFilamentResult(); if(bRet) - window.location.href="../5/index.html"; + window.location.href="../4orca/index.html"; } function FinishGuide() diff --git a/resources/web/guide/4orca/4orca.css b/resources/web/guide/4orca/4orca.css new file mode 100644 index 00000000000..f12a7860fec --- /dev/null +++ b/resources/web/guide/4orca/4orca.css @@ -0,0 +1,33 @@ + +#Content +{ + padding:0% 15%; +} + +#FeatureText +{ + line-height: 30px; + margin-top: 10mm; +} + + +#CheckArea +{ + margin-top:10mm; + line-height: 30px; +} + +#StealthMode +{ + width: 30px; +} + +#RestartText +{ + padding-left:30px; +} + +.TextPoint +{ + font-size:14px; +} \ No newline at end of file diff --git a/resources/web/guide/4orca/4orca.js b/resources/web/guide/4orca/4orca.js new file mode 100644 index 00000000000..1dbb86abd2d --- /dev/null +++ b/resources/web/guide/4orca/4orca.js @@ -0,0 +1,48 @@ + +function OnInit() +{ + TranslatePage(); + + SendStealthModeCheck(); +} + + + +function SendStealthModeCheck() +{ + let nVal="no"; + if( $('#StealthMode').is(':checked') ) + nVal="yes"; + + var tSend={}; + tSend['sequence_id']=Math.round(new Date() / 1000); + tSend['command']="save_stealth_mode"; + tSend['data']={}; + tSend['data']['action']=nVal; + + SendWXMessage( JSON.stringify(tSend) ); + + return true; +} + +function GotoNetPluginPage() +{ + let bRet=SendStealthModeCheck(); + + if(bRet) + window.location.href="../5/index.html"; +} + + +function FinishGuide() +{ + var tSend={}; + tSend['sequence_id']=Math.round(new Date() / 1000); + tSend['command']="user_guide_finish"; + tSend['data']={}; + tSend['data']['action']="finish"; + + SendWXMessage( JSON.stringify(tSend) ); + + //window.location.href="../6/index.html"; +} diff --git a/resources/web/guide/4orca/index.html b/resources/web/guide/4orca/index.html new file mode 100644 index 00000000000..975123eabc2 --- /dev/null +++ b/resources/web/guide/4orca/index.html @@ -0,0 +1,38 @@ + + + + + +引导_P1 + + + + + + + + + + + +
+
Stealth Mode
+
+ +
+
Back
+
Next
+
+ + diff --git a/resources/web/homepage/css/dark.css b/resources/web/homepage/css/dark.css index 8f585744da2..69df4c34a02 100644 --- a/resources/web/homepage/css/dark.css +++ b/resources/web/homepage/css/dark.css @@ -33,7 +33,7 @@ body /*----Left Menu Button----*/ #LogoutBtn:hover { - background: #004942; + background: #223C3C; color: #efeff0; } @@ -45,7 +45,7 @@ body .BtnItem:hover { color: #efeff0; - background-color: #004942; + background-color: #223C3C; } .BtnItem:hover .LeftIcon @@ -56,7 +56,7 @@ body .BtnItemSelected { color: #efeff0; - background-color: #004942; + background-color: #223C3C; } .BtnItemSelected .LeftIcon @@ -67,8 +67,8 @@ body /*-----Right Top MenuBtn-----*/ .MenuItem:hover { - border-color: #4db6ac; - background-color: #004942; + border-color: #00675b; + background-color: #223C3C; } #RecentClearAllBtn:hover @@ -76,6 +76,11 @@ body color: #000; } +.FileImg +{ + background-color: #36363C; /*ORCA use darker color for dark theme for thumbnails*/ +} + #recnet_context_menu { color: #efeff0; @@ -84,6 +89,11 @@ body box-shadow: 0px 0px 3px #DCDCDC; } +.CT_Item:hover +{ + background-color:#00675b; /*ORCA color*/ +} + /*----User Manual------*/ .UG_DESC { diff --git a/resources/web/homepage/css/home.css b/resources/web/homepage/css/home.css index eb4d595534f..ce70b286923 100644 --- a/resources/web/homepage/css/home.css +++ b/resources/web/homepage/css/home.css @@ -203,12 +203,12 @@ body .BtnItem:hover { - background-color: #E0FCEB; + background-color: #BFE1DE; /*ORCA color with %25 opacity*/ } .BtnItemSelected { - background-color: #e0fcf3; + background-color: #BFE1DE; /*ORCA color with %25 opacity*/ } .BtnIcon @@ -277,8 +277,8 @@ body .MenuItem:hover { - border-color: #4db6ac; - background-color: #E0FCEB; + border-color: #009688; /*ORCA color*/ + background-color: #E5F0EE; /*ORCA color with %25 opacity*/ } .MenuIcon @@ -465,7 +465,7 @@ body .CT_Item:hover { cursor: pointer; - background-color: #0078D4; + background-color:#009688; /*ORCA color*/ border-radius: 4px; color: #fff; } diff --git a/run_gettext.bat b/run_gettext.bat index 9a0425df1bc..c095a3db0a4 100644 --- a/run_gettext.bat +++ b/run_gettext.bat @@ -10,7 +10,7 @@ for %%a in (%*) do ( if %FULL_MODE%==1 ( .\tools\xgettext.exe --keyword=L --keyword=_L --keyword=_u8L --keyword=L_CONTEXT:1,2c --keyword=_L_PLURAL:1,2 --add-comments=TRN --from-code=UTF-8 --no-location --debug --boost -f ./localization/i18n/list.txt -o ./localization/i18n/OrcaSlicer.pot - build\\src\\hints\\Release\\hintsToPot ./resources ./localization/i18n + python3 scripts/HintsToPot.py ./resources ./localization/i18n ) REM Print the current directory echo %cd% diff --git a/run_gettext.sh b/run_gettext.sh index f64f50f0545..561d6da5ed7 100755 --- a/run_gettext.sh +++ b/run_gettext.sh @@ -15,7 +15,7 @@ done if $FULL_MODE; then xgettext --keyword=L --keyword=_L --keyword=_u8L --keyword=L_CONTEXT:1,2c --keyword=_L_PLURAL:1,2 --add-comments=TRN --from-code=UTF-8 --no-location --debug --boost -f ./localization/i18n/list.txt -o ./localization/i18n/OrcaSlicer.pot - ./build_arm64/src/hints/Release/hintsToPot.app/Contents/MacOS/hintsToPot ./resources ./localization/i18n + python3 scripts/HintsToPot.py ./resources ./localization/i18n fi diff --git a/scripts/HintsToPot.py b/scripts/HintsToPot.py new file mode 100644 index 00000000000..9fef62ee8c1 --- /dev/null +++ b/scripts/HintsToPot.py @@ -0,0 +1,37 @@ +# Helps converting hints.ini into POT + +import sys + +from configparser import ConfigParser +from pathlib import Path + + +def write_to_pot(path: Path, data: dict[str, str]): + with open(path, "a+t") as pot_file: + for key in data.keys(): + print( + f"\n#: resources/data/hints.ini: [{ key }]\nmsgid \"{ data[key]['text'] }\"\nmsgstr \"\"", + file=pot_file, + ) + + +def main(): + if len(sys.argv) != 3: + print("HINTS_TO_POT FAILED: WRONG NUM OF ARGS") + exit(-1) + path_to_ini = Path(sys.argv[1]).parent / "resources" / "data" / "hints.ini" + path_to_pot = Path(sys.argv[2]).parent / "i18n" / "OrcaSlicer.pot" + if not path_to_ini.exists(): + print("HINTS_TO_POT FAILED: PATH TO INI DOES NOT EXISTS") + print(str(path_to_ini)) + exit(-1) + config = ConfigParser() + with open(path_to_ini) as hints_file: + config.read_file(hints_file) + write_to_pot(path_to_pot, config._sections) + print("HINTS_TO_POT SUCCESS") + exit(0) + + +if __name__ == "__main__": + main() diff --git a/scripts/generate_presets_vendors.py b/scripts/generate_presets_vendors.py index e5c3c837d50..2dd53db53a1 100644 --- a/scripts/generate_presets_vendors.py +++ b/scripts/generate_presets_vendors.py @@ -94,6 +94,7 @@ 'Formfutura', 'Francofil', 'FilamentOne', + 'Fil X', 'GEEETECH', 'Giantarm', 'Gizmo Dorks', diff --git a/src/BaseException.cpp b/src/BaseException.cpp index 2443ebe4bb1..705ac8f8c1a 100644 --- a/src/BaseException.cpp +++ b/src/BaseException.cpp @@ -358,7 +358,7 @@ void CBaseException::ShowExceptionInformation() OutputString(_T("Exception Flag :0x%x "), m_pEp->ExceptionRecord->ExceptionFlags); OutputString(_T("NumberParameters :%ld \n"), m_pEp->ExceptionRecord->NumberParameters); - for (int i = 0; i < m_pEp->ExceptionRecord->NumberParameters; i++) + for (unsigned int i = 0; i < m_pEp->ExceptionRecord->NumberParameters; i++) { OutputString(_T("Param %d :0x%x \n"), i, m_pEp->ExceptionRecord->ExceptionInformation[i]); } diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index bb52a0aea16..71c39d874c6 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -1190,9 +1190,8 @@ int CLI::run(int argc, char **argv) //BBS: add plate data related logic PlateDataPtrs plate_data_src; std::vector plate_obj_size_infos; - int arrange_option; int plate_to_slice = 0, filament_count = 0, duplicate_count = 0, real_duplicate_count = 0; - bool first_file = true, is_bbl_3mf = false, need_arrange = true, has_thumbnails = false, up_config_to_date = false, normative_check = true, duplicate_single_object = false, use_first_fila_as_default = false, minimum_save = false, enable_timelapse = false; + bool first_file = true, is_bbl_3mf = false, need_arrange = true, up_config_to_date = false, normative_check = true, duplicate_single_object = false, use_first_fila_as_default = false, minimum_save = false, enable_timelapse = false; bool allow_rotations = true, skip_modified_gcodes = false, avoid_extrusion_cali_region = false, skip_useless_pick = false, allow_newer_file = false; Semver file_version; std::map orients_requirement; @@ -1546,7 +1545,7 @@ int CLI::run(int argc, char **argv) { ModelObject* object = model.objects[obj_index]; - for (unsigned int clone_index = 1; clone_index < clone_count; clone_index++) + for (int clone_index = 1; clone_index < clone_count; clone_index++) { ModelObject* newObj = model.add_object(*object); newObj->name = object->name +"_"+ std::to_string(clone_index+1); @@ -1619,7 +1618,7 @@ int CLI::run(int argc, char **argv) } } catch (std::exception& e) { - boost::nowide::cerr << construct_assemble_list << ": " << e.what() << std::endl; + boost::nowide::cerr << "construct_assemble_list: " << e.what() << std::endl; record_exit_reson(outfile_dir, CLI_DATA_FILE_ERROR, 0, cli_errors[CLI_DATA_FILE_ERROR], sliced_info); flush_and_exit(CLI_DATA_FILE_ERROR); } @@ -2103,7 +2102,7 @@ int CLI::run(int argc, char **argv) record_exit_reson(outfile_dir, CLI_INVALID_PARAMS, 0, cli_errors[CLI_INVALID_PARAMS], sliced_info); flush_and_exit(CLI_INVALID_PARAMS); } - for (unsigned int index = 0; index < filament_count; index ++) + for (int index = 0; index < filament_count; index ++) { std::string file = uptodate_filaments[index]; DynamicPrintConfig config; @@ -2220,7 +2219,7 @@ int CLI::run(int argc, char **argv) } //upwards check - bool process_compatible = false, machine_upwards = false, machine_switch = false; + bool process_compatible = false, /* machine_upwards = false, */ machine_switch = false; BOOST_LOG_TRIVIAL(info) << boost::format("current printer %1%, new printer %2%, current process %3%, new process %4%")%current_printer_name %new_printer_name %current_process_name %new_process_name; BOOST_LOG_TRIVIAL(info) << boost::format("current printer inherits %1%, new printer inherits %2%, current process inherits %3%, new process inherits %4%") %current_printer_system_name %new_printer_system_name %current_process_system_name %new_process_system_name; @@ -2290,7 +2289,7 @@ int CLI::run(int argc, char **argv) for (int index = 0; index < upward_compatible_printers.size(); index++) { if (upward_compatible_printers[index] == new_printer_system_name) { process_compatible = true; - machine_upwards = true; + // machine_upwards = true; BOOST_LOG_TRIVIAL(info) << boost::format("new printer is upward_compatible"); break; } @@ -2900,7 +2899,8 @@ int CLI::run(int argc, char **argv) for (auto& model : m_models) for (ModelObject* o : model.objects) { - ModelObject* new_object = m.add_object(*o); + /* ModelObject* new_object = */ + m.add_object(*o); //BOOST_LOG_TRIVIAL(info) << "object "<name <<", id :" << o->id().id << "\n"; //orients_requirement.emplace(new_object->id().id, orients_requirement[o->id().id]); //orients_requirement.erase(o->id().id); @@ -3343,7 +3343,6 @@ int CLI::run(int argc, char **argv) BOOST_LOG_TRIVIAL(info) << boost::format("downward_check: all failed, size %1%")%downward_check_size; break; } - Slic3r::GUI::PartPlate* cur_plate = (Slic3r::GUI::PartPlate *)partplate_list.get_plate(index); Vec3d size = plate_obj_size_infos[index].obj_bbox.size(); for (int index2 = 0; index2 < downward_check_size; index2 ++) @@ -3393,7 +3392,6 @@ int CLI::run(int argc, char **argv) } // Loop through transform options. - bool user_center_specified = false; Points beds = get_bed_shape(m_print_config); ArrangeParams arrange_cfg; @@ -3417,7 +3415,6 @@ int CLI::run(int argc, char **argv) ModelObject* new_object = m.add_object(); new_object->name = _u8L("Assembly"); new_object->add_instance(); - int idx = 0; for (auto& model : m_models) for (ModelObject* o : model.objects) { for (auto volume : o->volumes) { @@ -3519,7 +3516,6 @@ int CLI::run(int argc, char **argv) } } } else if (opt_key == "center") { - user_center_specified = true; for (auto &model : m_models) { model.add_default_instances(); // this affects instances: @@ -3819,7 +3815,6 @@ int CLI::run(int argc, char **argv) { //do arrange for plate ArrangePolygons selected, unselected; - Model& model = m_models[0]; arrange_cfg = ArrangeParams(); // reset all params get_print_sequence(cur_plate, m_print_config, arrange_cfg.is_seq_print); @@ -3845,7 +3840,6 @@ int CLI::run(int argc, char **argv) if (!arrange_cfg.is_seq_print && assemble_plate.filaments_count > 1) { //prepare the wipe tower - int plate_count = partplate_list.get_plate_count(); auto printer_structure_opt = m_print_config.option>("printer_structure"); const float tower_brim_width = m_print_config.option("prime_tower_width", true)->value; @@ -4231,7 +4225,6 @@ int CLI::run(int argc, char **argv) //float depth = v * (filaments_cnt - 1) / (layer_height * w); Vec3d wipe_tower_size = cur_plate->estimate_wipe_tower_size(m_print_config, w, v, filaments_cnt); - Vec3d plate_origin = cur_plate->get_origin(); int plate_width, plate_depth, plate_height; partplate_list.get_plate_size(plate_width, plate_depth, plate_height); float depth = wipe_tower_size(1); @@ -4610,7 +4603,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 export_to_3mf = false, load_slicedata = false, export_slicedata = false; bool no_check = false; std::string export_3mf_file, load_slice_data_dir, export_slice_data_dir, export_stls_dir; std::vector calibration_thumbnails; @@ -5099,7 +5092,6 @@ int CLI::run(int argc, char **argv) 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); record_exit_reson(outfile_dir, ret, index+1, cli_errors[ret], sliced_info); @@ -5226,8 +5218,7 @@ int CLI::run(int argc, char **argv) bool need_regenerate_top_thumbnail = oriented_or_arranged || regenerate_thumbnails; bool need_create_thumbnail_group = false, need_create_no_light_group = false, need_create_top_group = false; - // get type and color for platedata - auto* filament_types = dynamic_cast(m_print_config.option("filament_type")); + // get color for platedata const ConfigOptionStrings* filament_color = dynamic_cast(m_print_config.option("filament_colour")); auto* filament_id = dynamic_cast(m_print_config.option("filament_ids")); const ConfigOptionFloats* nozzle_diameter_option = dynamic_cast(m_print_config.option("nozzle_diameter")); diff --git a/src/admesh/connect.cpp b/src/admesh/connect.cpp index 30a199120d1..4cf78f076a5 100644 --- a/src/admesh/connect.cpp +++ b/src/admesh/connect.cpp @@ -216,7 +216,7 @@ struct HashTableEdges { // This is a match. Record result in neighbors list. match_neighbors(edge, *link->next); // Delete the matched edge from the list. - HashEdge *temp = link->next; + // HashEdge *temp = link->next; link->next = link->next->next; // pool.destroy(temp); #ifndef NDEBUG diff --git a/src/admesh/normals.cpp b/src/admesh/normals.cpp index f74ba01b6da..02fb16bb809 100644 --- a/src/admesh/normals.cpp +++ b/src/admesh/normals.cpp @@ -193,7 +193,7 @@ void stl_fix_normal_directions(stl_file *stl) norm_sw[facet_num] = 1; // Record this one as being fixed. ++ checked; } - stl_normal *temp = head->next; // Delete this facet from the list. + // stl_normal *temp = head->next; // Delete this facet from the list. head->next = head->next->next; // pool.destroy(temp); } else { // If we ran out of facets to fix: All of the facets in this part have been fixed. diff --git a/src/imgui/imgui_widgets.cpp b/src/imgui/imgui_widgets.cpp index ded72f41788..054312cfc07 100644 --- a/src/imgui/imgui_widgets.cpp +++ b/src/imgui/imgui_widgets.cpp @@ -768,11 +768,9 @@ bool ImGui::BBLButtonEx(const char* label, const ImVec2& size_arg, ImGuiButtonFl bool hovered, held; bool pressed = ButtonBehavior(bb, id, &hovered, &held, flags); - bool b_hover = false; if (hovered) { PushStyleColor(ImGuiCol_Text,GetColorU32(ImGuiCol_CheckMark)); - b_hover = true; } // Render @@ -4167,8 +4165,6 @@ bool ImGui::BBLInputScalar(const char *label, ImGuiDataType data_type, void *p_d const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y * 2.0f)); // Tabbing or CTRL-clicking on Drag turns it into an InputText const bool hovered = ItemHoverable(frame_bb, id); - // We are only allowed to access the state if we are already the active widget. - ImGuiInputTextState *state = GetInputTextState(id); bool push_color_count = 0; if (hovered || g.ActiveId == id) { @@ -6298,9 +6294,9 @@ bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFl RenderFrameBorder(bb.Min, bb.Max, rounding); else #ifdef __APPLE__ - window->DrawList->AddRect(bb.Min - ImVec2(3, 3), bb.Max + ImVec2(3, 3), GetColorU32(ImGuiCol_FrameBg), rounding * 2,NULL,4.0f);; // Color button are often in need of some sort of border + window->DrawList->AddRect(bb.Min - ImVec2(3, 3), bb.Max + ImVec2(3, 3), GetColorU32(ImGuiCol_FrameBg), rounding * 2,0,4.0f);; // Color button are often in need of some sort of border #else - window->DrawList->AddRect(bb.Min - ImVec2(2, 2), bb.Max + ImVec2(2, 2), GetColorU32(ImGuiCol_FrameBg), rounding * 2,NULL,3.0f); // Color button are often in need of some sort of border + window->DrawList->AddRect(bb.Min - ImVec2(2, 2), bb.Max + ImVec2(2, 2), GetColorU32(ImGuiCol_FrameBg), rounding * 2,0,3.0f); // Color button are often in need of some sort of border #endif } @@ -7097,7 +7093,6 @@ bool ImGui::BBLImageSelectable(ImTextureID user_texture_id, const ImVec2& size_a // Text stays at the submission position, but bounding box may be extended on both sides const float arrow_size = (flags & ImGuiComboFlags_NoArrowButton) ? 0.0f : GetFrameHeight(); - const ImVec2 text_min = ImVec2(pos.x + arrow_size, pos.y); const ImVec2 text_max(min_x + size.x, pos.y + size.y); // Selectables are meant to be tightly packed together with no click-gap, so we extend their box to cover spacing between selectable. @@ -7209,7 +7204,6 @@ bool ImGui::BBLImageSelectable(ImTextureID user_texture_id, const ImVec2& size_a if (flags & ImGuiSelectableFlags_Disabled) PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); // Render - const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button); ImVec2 p_min = bb.Min + ImVec2(style.ItemInnerSpacing.x, (bb.Max.y - bb.Min.y - font_size.y) / 2); ImVec2 p_max = p_min + font_size; window->DrawList->AddImage(user_texture_id, p_min, p_max, uv0, uv1, selected || (held && hovered) ? GetColorU32(ImVec4(1.f, 1.f, 1.f, 1.f)) : GetColorU32(tint_col)); diff --git a/src/imguizmo/ImGuizmo.cpp b/src/imguizmo/ImGuizmo.cpp index 1acf8b63e45..0f717395f90 100644 --- a/src/imguizmo/ImGuizmo.cpp +++ b/src/imguizmo/ImGuizmo.cpp @@ -2807,7 +2807,6 @@ namespace IMGUIZMO_NAMESPACE { static bool isDraging = false; static bool isClicking = false; - static bool isInside = false; static vec_t interpolationUp; static vec_t interpolationDir; static int interpolationFrames = 0; @@ -3055,7 +3054,6 @@ namespace IMGUIZMO_NAMESPACE LookAt(&newEye.x, &camTarget.x, &newUp.x, view); viewUpdated = true; } - isInside = gContext.mbMouseOver && ImRect(position, position + size).Contains(io.MousePos); if (io.MouseDown[0] && (fabsf(io.MouseDelta[0]) || fabsf(io.MouseDelta[1])) && isClicking) { diff --git a/src/libnest2d/include/libnest2d/geometry_traits_nfp.hpp b/src/libnest2d/include/libnest2d/geometry_traits_nfp.hpp index ab5f7678fdb..4f8cf964b9c 100644 --- a/src/libnest2d/include/libnest2d/geometry_traits_nfp.hpp +++ b/src/libnest2d/include/libnest2d/geometry_traits_nfp.hpp @@ -182,7 +182,6 @@ inline TPoint referenceVertex(const RawShape& sh) template inline NfpResult nfpInnerRectBed(const RawBox &bed, const RawShape &other) { using Vertex = TPoint; - using Edge = _Segment; namespace sl = shapelike; auto sbox = sl::boundingBox(other); diff --git a/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp b/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp index 65a3344b046..ebe3da6c5dc 100644 --- a/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp +++ b/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp @@ -1119,7 +1119,6 @@ class _NofitPolyPlacer: public PlacerBoilerplate<_NofitPolyPlacer 1; std::vector objs,excludes; for (const Item &item : items_) { diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index 50f89935f02..054a09c4f72 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -18,9 +18,7 @@ #include #include #include -#include #include -#include #include #include #include @@ -83,6 +81,15 @@ std::string AppConfig::get_hms_host() // #endif } +bool AppConfig::get_stealth_mode() +{ + // always return true when user did not finish setup wizard yet + if (!get_bool("firstguide","finish")) { + return true; + } + return get_bool("stealth_mode"); +} + void AppConfig::reset() { m_storage.clear(); diff --git a/src/libslic3r/AppConfig.hpp b/src/libslic3r/AppConfig.hpp index f58cfedb65f..cf95b8ec8d3 100644 --- a/src/libslic3r/AppConfig.hpp +++ b/src/libslic3r/AppConfig.hpp @@ -45,6 +45,7 @@ class AppConfig std::string get_language_code(); std::string get_hms_host(); + bool get_stealth_mode(); // Clear and reset to defaults. void reset(); @@ -80,8 +81,10 @@ class AppConfig { std::string value; this->get(section, key, value); return value; } std::string get(const std::string &key) const { std::string value; this->get("app", key, value); return value; } + bool get_bool(const std::string §ion, const std::string &key) const + { return this->get(section, key) == "true" || this->get(key) == "1"; } bool get_bool(const std::string &key) const - { return this->get(key) == "true" || this->get(key) == "1"; } + { return this->get_bool("app", key); } void set(const std::string §ion, const std::string &key, const std::string &value) { #ifndef NDEBUG diff --git a/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategy.cpp b/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategy.cpp index b57c84d6398..6e344daf58e 100644 --- a/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategy.cpp +++ b/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategy.cpp @@ -1,7 +1,6 @@ //Copyright (c) 2022 Ultimaker B.V. //CuraEngine is released under the terms of the AGPLv3 or higher. -#include #include "BeadingStrategy.hpp" #include "Point.hpp" diff --git a/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.cpp b/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.cpp index 97acd271ac3..c42ef3d2f3e 100644 --- a/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.cpp +++ b/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.cpp @@ -9,7 +9,6 @@ #include "RedistributeBeadingStrategy.hpp" #include "OuterWallInsetBeadingStrategy.hpp" -#include #include namespace Slic3r::Arachne diff --git a/src/libslic3r/Arachne/BeadingStrategy/RedistributeBeadingStrategy.cpp b/src/libslic3r/Arachne/BeadingStrategy/RedistributeBeadingStrategy.cpp index 2b4dda02722..93ffdfb7500 100644 --- a/src/libslic3r/Arachne/BeadingStrategy/RedistributeBeadingStrategy.cpp +++ b/src/libslic3r/Arachne/BeadingStrategy/RedistributeBeadingStrategy.cpp @@ -3,7 +3,6 @@ #include "RedistributeBeadingStrategy.hpp" -#include #include namespace Slic3r::Arachne diff --git a/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp b/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp index 19d49c3e12f..9278fb49b7d 100644 --- a/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp +++ b/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp @@ -1595,7 +1595,6 @@ SkeletalTrapezoidation::edge_t* SkeletalTrapezoidation::getQuadMaxRedgeTo(edge_t void SkeletalTrapezoidation::propagateBeadingsUpward(std::vector& upward_quad_mids, ptr_vector_t& node_beadings) { - const auto _central_filter_dist = central_filter_dist(); for (auto upward_quad_mids_it = upward_quad_mids.rbegin(); upward_quad_mids_it != upward_quad_mids.rend(); ++upward_quad_mids_it) { edge_t* upward_edge = *upward_quad_mids_it; @@ -1612,7 +1611,7 @@ void SkeletalTrapezoidation::propagateBeadingsUpward(std::vector& upwar { // Only propagate to places where there is place continue; } - assert((upward_edge->from->data.distance_to_boundary != upward_edge->to->data.distance_to_boundary || shorter_then(upward_edge->to->p - upward_edge->from->p, _central_filter_dist)) && "zero difference R edges should always be central"); + assert((upward_edge->from->data.distance_to_boundary != upward_edge->to->data.distance_to_boundary || shorter_then(upward_edge->to->p - upward_edge->from->p, central_filter_dist())) && "zero difference R edges should always be central"); coord_t length = (upward_edge->to->p - upward_edge->from->p).cast().norm(); BeadingPropagation upper_beading = lower_beading; upper_beading.dist_to_bottom_source += length; diff --git a/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.cpp b/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.cpp index e87bc4db7c8..3909868beec 100644 --- a/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.cpp +++ b/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.cpp @@ -7,9 +7,6 @@ #include -#include "utils/linearAlg2D.hpp" -#include "../Line.hpp" - namespace Slic3r::Arachne { diff --git a/src/libslic3r/Arachne/utils/ExtrusionLine.cpp b/src/libslic3r/Arachne/utils/ExtrusionLine.cpp index ac7b88af833..b671b807350 100644 --- a/src/libslic3r/Arachne/utils/ExtrusionLine.cpp +++ b/src/libslic3r/Arachne/utils/ExtrusionLine.cpp @@ -4,7 +4,6 @@ #include #include "ExtrusionLine.hpp" -#include "linearAlg2D.hpp" #include "../../VariableWidth.hpp" namespace Slic3r::Arachne diff --git a/src/libslic3r/Arachne/utils/SquareGrid.cpp b/src/libslic3r/Arachne/utils/SquareGrid.cpp index ae899657954..856eb5968bc 100644 --- a/src/libslic3r/Arachne/utils/SquareGrid.cpp +++ b/src/libslic3r/Arachne/utils/SquareGrid.cpp @@ -2,7 +2,6 @@ //CuraEngine is released under the terms of the AGPLv3 or higher. #include "SquareGrid.hpp" -#include "../../Point.hpp" using namespace Slic3r::Arachne; diff --git a/src/libslic3r/Arrange.cpp b/src/libslic3r/Arrange.cpp index d82997aaa92..f9559ede248 100644 --- a/src/libslic3r/Arrange.cpp +++ b/src/libslic3r/Arrange.cpp @@ -199,23 +199,19 @@ void update_selected_items_axis_align(ArrangePolygons& selected, const DynamicPr } if (std::abs(a00) > EPSILON) { - double db1_2, db1_6, db1_12, db1_24, db1_20, db1_60; - double m00, m10, m01, m20, m11, m02, m30, m21, m12, m03; + double db1_2, db1_6, db1_12, db1_24; + double m00, m10, m01, m20, m11, m02; if (a00 > 0) { db1_2 = 0.5; db1_6 = 0.16666666666666666666666666666667; db1_12 = 0.083333333333333333333333333333333; db1_24 = 0.041666666666666666666666666666667; - db1_20 = 0.05; - db1_60 = 0.016666666666666666666666666666667; } else { db1_2 = -0.5; db1_6 = -0.16666666666666666666666666666667; db1_12 = -0.083333333333333333333333333333333; db1_24 = -0.041666666666666666666666666666667; - db1_20 = -0.05; - db1_60 = -0.016666666666666666666666666666667; } m00 = a00 * db1_2; m10 = a10 * db1_6; @@ -223,10 +219,6 @@ void update_selected_items_axis_align(ArrangePolygons& selected, const DynamicPr m20 = a20 * db1_12; m11 = a11 * db1_24; m02 = a02 * db1_12; - m30 = a30 * db1_20; - m21 = a21 * db1_60; - m12 = a12 * db1_60; - m03 = a03 * db1_20; double cx = m10 / m00; double cy = m01 / m00; diff --git a/src/libslic3r/BlacklistedLibraryCheck.cpp b/src/libslic3r/BlacklistedLibraryCheck.cpp index 938f5424977..2c9bf9b8e9a 100644 --- a/src/libslic3r/BlacklistedLibraryCheck.cpp +++ b/src/libslic3r/BlacklistedLibraryCheck.cpp @@ -1,6 +1,5 @@ #include "BlacklistedLibraryCheck.hpp" -#include #include #ifdef WIN32 diff --git a/src/libslic3r/Brim.cpp b/src/libslic3r/Brim.cpp index f59600971f8..089761cd183 100644 --- a/src/libslic3r/Brim.cpp +++ b/src/libslic3r/Brim.cpp @@ -576,7 +576,6 @@ double getadhesionCoeff(const PrintObject* printObject) auto& insts = printObject->instances(); auto objectVolumes = insts[0].model_instance->get_object()->volumes; - auto print = printObject->print(); std::vector extrudersFirstLayer; auto firstLayerRegions = printObject->layers().front()->regions(); if (!firstLayerRegions.empty()) { @@ -901,7 +900,6 @@ static ExPolygons outer_inner_brim_area(const Print& print, Polygons holes_object; Polygons holes_support; if (objectWithExtruder.second == extruderNo && brimToWrite.at(object->id()).obj) { - double deltaT = getTemperatureFromExtruder(object); double adhesion = getadhesionCoeff(object); double maxSpeed = Model::findMaxSpeed(object->model_object()); // BBS: brims are generated by volume groups @@ -1585,7 +1583,6 @@ static void make_inner_brim(const Print& print, const ConstPrintObjectPtrs& top_ //BBS: generate out brim by offseting ExPolygons 'islands_area_ex' Polygons tryExPolygonOffset(const ExPolygons islandAreaEx, const Print& print) { - const auto scaled_resolution = scaled(print.config().resolution.value); Polygons loops; ExPolygons islands_ex; Flow flow = print.brim_flow(); @@ -1660,7 +1657,6 @@ void make_brim(const Print& print, PrintTryCancel try_cancel, Polygons& islands_ std::map brimAreaMap; std::map supportBrimAreaMap; Flow flow = print.brim_flow(); - const auto scaled_resolution = scaled(print.config().resolution.value); ExPolygons islands_area_ex = outer_inner_brim_area(print, float(flow.scaled_spacing()), brimAreaMap, supportBrimAreaMap, objPrintVec, printExtruders); diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index 9897bdfe63a..52b38af4f88 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -156,6 +156,12 @@ set(lisbslic3r_sources GCode/RetractWhenCrossingPerimeters.hpp GCode/SmallAreaInfillFlowCompensator.cpp GCode/SmallAreaInfillFlowCompensator.hpp + GCode/PchipInterpolatorHelper.cpp + GCode/PchipInterpolatorHelper.hpp + GCode/AdaptivePAInterpolator.cpp + GCode/AdaptivePAInterpolator.hpp + GCode/AdaptivePAProcessor.cpp + GCode/AdaptivePAProcessor.hpp GCode/SpiralVase.cpp GCode/SpiralVase.hpp GCode/SeamPlacer.cpp diff --git a/src/libslic3r/CSGMesh/ModelToCSGMesh.hpp b/src/libslic3r/CSGMesh/ModelToCSGMesh.hpp index 5963b29109e..e5038df54be 100644 --- a/src/libslic3r/CSGMesh/ModelToCSGMesh.hpp +++ b/src/libslic3r/CSGMesh/ModelToCSGMesh.hpp @@ -28,7 +28,7 @@ bool model_to_csgmesh(const ModelObject &mo, { bool do_positives = parts_to_include & mpartsPositive; bool do_negatives = parts_to_include & mpartsNegative; - bool do_drillholes = parts_to_include & mpartsDrillHoles; + // bool do_drillholes = parts_to_include & mpartsDrillHoles; bool do_splits = parts_to_include & mpartsDoSplits; bool has_splitable_volume = false; diff --git a/src/libslic3r/Config.cpp b/src/libslic3r/Config.cpp index e826bb4c5b3..d74e5ef3bd8 100644 --- a/src/libslic3r/Config.cpp +++ b/src/libslic3r/Config.cpp @@ -775,10 +775,9 @@ ConfigSubstitutions ConfigBase::load(const std::string &file, ForwardCompatibili //BBS: add json support ConfigSubstitutions ConfigBase::load_from_json(const std::string &file, ForwardCompatibilitySubstitutionRule compatibility_rule, std::map& key_values, std::string& reason) { - int ret = 0; ConfigSubstitutionContext substitutions_ctxt(compatibility_rule); - ret = load_from_json(file, substitutions_ctxt, true, key_values, reason); + load_from_json(file, substitutions_ctxt, true, key_values, reason); return std::move(substitutions_ctxt.substitutions); } diff --git a/src/libslic3r/Extruder.cpp b/src/libslic3r/Extruder.cpp index 8f4be4e048b..b6fe4b842e8 100644 --- a/src/libslic3r/Extruder.cpp +++ b/src/libslic3r/Extruder.cpp @@ -9,7 +9,7 @@ double Extruder::m_share_retracted = 0.; Extruder::Extruder(unsigned int id, GCodeConfig *config, bool share_extruder) : m_id(id), m_config(config), - m_share_extruder(m_share_extruder) + m_share_extruder(share_extruder) { reset(); diff --git a/src/libslic3r/ExtrusionEntityCollection.cpp b/src/libslic3r/ExtrusionEntityCollection.cpp index 9a37ff3ac12..3383d0de34e 100644 --- a/src/libslic3r/ExtrusionEntityCollection.cpp +++ b/src/libslic3r/ExtrusionEntityCollection.cpp @@ -2,7 +2,6 @@ #include "ShortestPath.hpp" #include #include -#include namespace Slic3r { diff --git a/src/libslic3r/Fill/FillConcentricInternal.cpp b/src/libslic3r/Fill/FillConcentricInternal.cpp index d565992ea19..1deb99183a2 100644 --- a/src/libslic3r/Fill/FillConcentricInternal.cpp +++ b/src/libslic3r/Fill/FillConcentricInternal.cpp @@ -1,6 +1,3 @@ -#include "../ClipperUtils.hpp" -#include "../ExPolygon.hpp" -#include "../Surface.hpp" #include "../VariableWidth.hpp" #include "Arachne/WallToolPaths.hpp" diff --git a/src/libslic3r/Fill/FillCrossHatch.cpp b/src/libslic3r/Fill/FillCrossHatch.cpp index 10f421bef31..7b9f96fa781 100644 --- a/src/libslic3r/Fill/FillCrossHatch.cpp +++ b/src/libslic3r/Fill/FillCrossHatch.cpp @@ -1,6 +1,5 @@ #include "../ClipperUtils.hpp" #include "../ShortestPath.hpp" -#include "../Surface.hpp" #include #include "FillCrossHatch.hpp" @@ -65,7 +64,6 @@ static Polylines generate_transform_pattern(double inprogress, int direction, co odd_poly.points.reserve(num_of_cycle * one_cycle.size()); // replicate to odd line - Point translate = Point(0, 0); for (size_t i = 0; i < num_of_cycle; i++) { Polyline odd_points; odd_points = Polyline(one_cycle); @@ -152,7 +150,6 @@ static Polylines generate_infill_layers(coordf_t z_height, double repeat_ratio, coordf_t period = trans_layer_size + repeat_layer_size; coordf_t remains = z_height - std::floor(z_height / period) * period; coordf_t trans_z = remains - repeat_layer_size; // put repeat layer first. - coordf_t repeat_z = remains; int phase = fmod(z_height, period * 2) - (period - 1); // add epsilon int direction = phase <= 0 ? -1 : 1; diff --git a/src/libslic3r/Fill/Lightning/Generator.cpp b/src/libslic3r/Fill/Lightning/Generator.cpp index bf1142ee456..a0cbe2b21e0 100644 --- a/src/libslic3r/Fill/Lightning/Generator.cpp +++ b/src/libslic3r/Fill/Lightning/Generator.cpp @@ -4,7 +4,6 @@ #include "Generator.hpp" #include "TreeNode.hpp" -#include "../../ClipperUtils.hpp" #include "../../Layer.hpp" #include "../../Print.hpp" @@ -35,7 +34,7 @@ static std::string get_svg_filename(std::string layer_nr_or_z, std::string tag rand_init = true; } - int rand_num = rand() % 1000000; + // int rand_num = rand() % 1000000; //makedir("./SVG"); std::string prefix = "./SVG/"; std::string suffix = ".svg"; diff --git a/src/libslic3r/FlushVolCalc.cpp b/src/libslic3r/FlushVolCalc.cpp index 29cbcbe4012..c135b939485 100644 --- a/src/libslic3r/FlushVolCalc.cpp +++ b/src/libslic3r/FlushVolCalc.cpp @@ -1,5 +1,4 @@ #include -#include #include "slic3r/Utils/ColorSpaceConvert.hpp" #include "FlushVolCalc.hpp" diff --git a/src/libslic3r/Format/3mf.cpp b/src/libslic3r/Format/3mf.cpp index 894de0549b5..20007ee579a 100644 --- a/src/libslic3r/Format/3mf.cpp +++ b/src/libslic3r/Format/3mf.cpp @@ -298,7 +298,6 @@ bool PrusaFileParser::check_3mf_from_prusa(const std::string filename) const std::string model_file = "3D/3dmodel.model"; int model_file_index = mz_zip_reader_locate_file(&archive, model_file.c_str(), nullptr, 0); if (model_file_index != -1) { - int depth = 0; m_parser = XML_ParserCreate(nullptr); XML_SetUserData(m_parser, (void *) this); XML_SetElementHandler(m_parser, start_element_handler, nullptr); diff --git a/src/libslic3r/Format/OBJ.cpp b/src/libslic3r/Format/OBJ.cpp index abaae3692bf..f9a19d7a1b5 100644 --- a/src/libslic3r/Format/OBJ.cpp +++ b/src/libslic3r/Format/OBJ.cpp @@ -100,7 +100,6 @@ bool load_obj(const char *path, TriangleMesh *meshptr, ObjInfo& obj_info, std::s obj_info.is_single_mtl = data.usemtls.size() == 1 && mtl_data.new_mtl_unmap.size() == 1; obj_info.face_colors.reserve(num_faces + num_quads); } - bool has_color = data.has_vertex_color; for (size_t i = 0; i < num_vertices; ++ i) { size_t j = i * OBJ_VERTEX_LENGTH; its.vertices.emplace_back(data.coordinates[j], data.coordinates[j + 1], data.coordinates[j + 2]); diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 7df4fbca493..191246af74e 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -878,7 +878,6 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) bool extract_object_model() { mz_zip_archive archive; - mz_zip_archive_file_stat stat; mz_zip_zero_struct(&archive); if (!open_zip_reader(&archive, zip_path)) { @@ -1617,9 +1616,9 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) } else { _extract_xml_from_archive(archive, sub_rels, _handle_start_relationships_element, _handle_end_relationships_element); - int index = 0; #if 0 + int index = 0; for (auto path : m_sub_model_paths) { if (proFn) { proFn(IMPORT_STAGE_READ_FILES, ++index, 3 + m_sub_model_paths.size(), cb_cancel); @@ -2219,7 +2218,6 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) bool _BBS_3MF_Importer::_extract_from_archive(mz_zip_archive& archive, std::string const & path, std::function extract, bool restore) { - mz_uint num_entries = mz_zip_reader_get_num_files(&archive); mz_zip_archive_file_stat stat; std::string path2 = path; if (path2.front() == '/') path2 = path2.substr(1); @@ -3319,9 +3317,9 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) // Adjust backup object/volume id std::istringstream iss(m_curr_object->uuid); int backup_id; - bool need_replace = false; + // bool need_replace = false; if (iss >> std::hex >> backup_id) { - need_replace = (m_curr_object->id != backup_id); + // need_replace = (m_curr_object->id != backup_id); m_curr_object->id = backup_id; } if (!m_curr_object->components.empty()) @@ -4994,9 +4992,9 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) if (is_bbl_3mf && boost::ends_with(current_object->uuid, OBJECT_UUID_SUFFIX) && top_importer->m_load_restore) { std::istringstream iss(current_object->uuid); int backup_id; - bool need_replace = false; + // bool need_replace = false; if (iss >> std::hex >> backup_id) { - need_replace = (current_object->id != backup_id); + // need_replace = (current_object->id != backup_id); current_object->id = backup_id; } //if (need_replace) @@ -5991,8 +5989,6 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) auto src_gcode_file = plate_data->gcode_file; boost::filesystem::ifstream ifs(src_gcode_file, std::ios::binary); std::string buf(64 * 1024, 0); - const std::size_t & size = boost::filesystem::file_size(src_gcode_file); - std::size_t left_size = size; while (ifs) { ifs.read(buf.data(), buf.size()); int read_bytes = ifs.gcount(); @@ -6230,7 +6226,6 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) bool _BBS_3MF_Exporter::_add_bbox_file_to_archive(mz_zip_archive& archive, const PlateBBoxData& id_bboxes, int index) { - bool res = false; nlohmann::json j; id_bboxes.to_json(j); std::string out = j.dump(); @@ -6620,7 +6615,6 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) auto iter = objects_data.find(objects[i]); ObjectToObjectDataMap objects_data2; objects_data2.insert(*iter); - auto & object = *iter->second.object; mz_zip_archive archive; mz_zip_zero_struct(&archive); mz_zip_writer_init_heap(&archive, 0, 1024 * 1024); @@ -7537,7 +7531,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) if (!m_skip_model && instance_size > 0) { - for (unsigned int j = 0; j < instance_size; ++j) + for (int j = 0; j < instance_size; ++j) { stream << " <" << INSTANCE_TAG << ">\n"; int obj_id = plate_data->objects_and_instances[j].first; diff --git a/src/libslic3r/Format/svg.cpp b/src/libslic3r/Format/svg.cpp index 4a96274b99e..ed170cf5704 100644 --- a/src/libslic3r/Format/svg.cpp +++ b/src/libslic3r/Format/svg.cpp @@ -113,9 +113,6 @@ double get_profile_area(std::vector> profile_line_poin double area = 0; for (auto line_points : profile_line_points) { - bool flag = true; - if (line_points.second.Y() < line_points.first.Y()) flag = false; - area += (line_points.second.X() + line_points.first.X() - 2 * min_x) * (line_points.second.Y() - line_points.first.Y()) / 2; } @@ -137,8 +134,6 @@ bool get_svg_profile(const char *path, std::vector &element_infos, int name_index = 1; for (NSVGshape *shape = svg_data->shapes; shape; shape = shape->next) { - char * id = shape->id; - int interpolation_precision = 10; // Number of interpolation points float step = 1.0f / float(interpolation_precision - 1); @@ -384,7 +379,6 @@ bool load_svg(const char *path, Model *model, std::string &message) ModelObject *new_object = model->add_object(); // new_object->name ? new_object->input_file = path; - auto stage_unit3 = stl.size() / LOAD_STEP_STAGE_UNIT_NUM + 1; for (size_t i = 0; i < stl.size(); i++) { // BBS: maybe mesh is empty from step file. Don't add if (stl[i].stats.number_of_facets > 0) { diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index cdeaa1f159a..fc29347f9ab 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -116,7 +116,6 @@ static std::vector get_path_of_change_filament(const Print& print) if (excluse_area.size() != 4) return out_points; - double cutter_area_x = excluse_area[2].x() + 2; double cutter_area_y = excluse_area[2].y() + 2; double start_x_position = start_point.x(); @@ -256,27 +255,23 @@ static std::vector get_path_of_change_filament(const Print& print) { std::string gcode; - // move to the nearest standby point - if (!this->standby_points.empty()) { - // get current position in print coordinates - Vec3d writer_pos = gcodegen.writer().get_position(); - Point pos = Point::new_scale(writer_pos(0), writer_pos(1)); - - // find standby point - Point standby_point; - pos.nearest_point(this->standby_points, &standby_point); - - /* We don't call gcodegen.travel_to() because we don't need retraction (it was already - triggered by the caller) nor reduce_crossing_wall and also because the coordinates - of the destination point must not be transformed by origin nor current extruder offset. */ - gcode += gcodegen.writer().travel_to_xy(unscale(standby_point), - "move to standby position"); - } - - if (gcodegen.config().standby_temperature_delta.value != 0) { - // we assume that heating is always slower than cooling, so no need to block - gcode += gcodegen.writer().set_temperature - (this->_get_temp(gcodegen) + gcodegen.config().standby_temperature_delta.value, false, gcodegen.writer().extruder()->id()); + unsigned int extruder_id = gcodegen.writer().extruder()->id(); + const auto& filament_idle_temp = gcodegen.config().idle_temperature; + if (filament_idle_temp.get_at(extruder_id) == 0) { + // There is no idle temperature defined in filament settings. + // Use the delta value from print config. + if (gcodegen.config().standby_temperature_delta.value != 0) { + // we assume that heating is always slower than cooling, so no need to block + gcode += gcodegen.writer().set_temperature + (this->_get_temp(gcodegen) + gcodegen.config().standby_temperature_delta.value, false, extruder_id); + gcode.pop_back(); + gcode += " ;cooldown\n"; // this is a marker for GCodeProcessor, so it can supress the commands when needed + } + } else { + // Use the value from filament settings. That one is absolute, not delta. + gcode += gcodegen.writer().set_temperature(filament_idle_temp.get_at(extruder_id), false, extruder_id); + gcode.pop_back(); + gcode += " ;cooldown\n"; // this is a marker for GCodeProcessor, so it can supress the commands when needed } return gcode; @@ -289,14 +284,16 @@ static std::vector get_path_of_change_filament(const Print& print) std::string(); } - int - OozePrevention::_get_temp(GCode& gcodegen) + int OozePrevention::_get_temp(const GCode &gcodegen) const { - return (gcodegen.layer() != NULL && gcodegen.layer()->id() == 0) + // First layer temperature should be used when on the first layer (obviously) and when + // "other layers" is set to zero (which means it should not be used). + return (gcodegen.layer() == nullptr || gcodegen.layer()->id() == 0 + || gcodegen.config().nozzle_temperature.get_at(gcodegen.writer().extruder()->id()) == 0) ? gcodegen.config().nozzle_temperature_initial_layer.get_at(gcodegen.writer().extruder()->id()) : gcodegen.config().nozzle_temperature.get_at(gcodegen.writer().extruder()->id()); } - + // Orca: // Function to calculate the excess retraction length that should be retracted either before or after wiping // in order for the wipe operation to respect the filament retraction speed @@ -668,6 +665,9 @@ static std::vector get_path_of_change_filament(const Print& print) // SoftFever: set new PA for new filament if (gcodegen.config().enable_pressure_advance.get_at(new_extruder_id)) { gcode += gcodegen.writer().set_pressure_advance(gcodegen.config().pressure_advance.get_at(new_extruder_id)); + // Orca: Adaptive PA + // Reset Adaptive PA processor last PA value + gcodegen.m_pa_processor->resetPreviousPA(gcodegen.config().pressure_advance.get_at(new_extruder_id)); } // A phony move to the end position at the wipe tower. @@ -764,8 +764,13 @@ static std::vector get_path_of_change_filament(const Print& print) if (is_ramming) gcodegen.m_wipe.reset_path(); // We don't want wiping on the ramming lines. toolchange_gcode_str = gcodegen.set_extruder(new_extruder_id, tcr.print_z); // TODO: toolchange_z vs print_z - if (gcodegen.config().enable_prime_tower) - deretraction_str = gcodegen.unretract(); + if (gcodegen.config().enable_prime_tower) { + deretraction_str += gcodegen.writer().travel_to_z(z, "restore layer Z"); + Vec3d position{gcodegen.writer().get_position()}; + position.z() = z; + gcodegen.writer().set_position(position); + deretraction_str += gcodegen.unretract(); + } } // Insert the toolchange and deretraction gcode into the generated gcode. @@ -773,79 +778,9 @@ static std::vector get_path_of_change_filament(const Print& print) DynamicConfig config; config.set_key_value("change_filament_gcode", new ConfigOptionString(toolchange_gcode_str)); config.set_key_value("deretraction_from_wipe_tower_generator", new ConfigOptionString(deretraction_str)); - - int previous_extruder_id = gcodegen.writer().extruder() ? (int) gcodegen.writer().extruder()->id() : -1; - config.set_key_value("previous_extruder", new ConfigOptionInt(previous_extruder_id)); - config.set_key_value("next_extruder", new ConfigOptionInt((int) new_extruder_id)); config.set_key_value("layer_num", new ConfigOptionInt(gcodegen.m_layer_index)); config.set_key_value("layer_z", new ConfigOptionFloat(tcr.print_z)); config.set_key_value("toolchange_z", new ConfigOptionFloat(z)); - GCodeWriter &gcode_writer = gcodegen.m_writer; - FullPrintConfig &full_config = gcodegen.m_config; - float old_retract_length = gcode_writer.extruder() != nullptr ? full_config.retraction_length.get_at(previous_extruder_id) : 0; - float new_retract_length = full_config.retraction_length.get_at(new_extruder_id); - float old_retract_length_toolchange = gcode_writer.extruder() != nullptr ? - full_config.retract_length_toolchange.get_at(previous_extruder_id) : - 0; - float new_retract_length_toolchange = full_config.retract_length_toolchange.get_at(new_extruder_id); - int old_filament_temp = gcode_writer.extruder() != nullptr ? - (gcodegen.on_first_layer() ? full_config.nozzle_temperature_initial_layer.get_at(previous_extruder_id) : - full_config.nozzle_temperature.get_at(previous_extruder_id)) : - 210; - int new_filament_temp = gcodegen.on_first_layer() ? full_config.nozzle_temperature_initial_layer.get_at(new_extruder_id) : - full_config.nozzle_temperature.get_at(new_extruder_id); - Vec3d nozzle_pos = gcode_writer.get_position(); - - float purge_volume = tcr.purge_volume < EPSILON ? 0 : std::max(tcr.purge_volume, g_min_purge_volume); - float filament_area = float((M_PI / 4.f) * pow(full_config.filament_diameter.get_at(new_extruder_id), 2)); - float purge_length = purge_volume / filament_area; - - int old_filament_e_feedrate = gcode_writer.extruder() != nullptr ? - (int) (60.0 * full_config.filament_max_volumetric_speed.get_at(previous_extruder_id) / - filament_area) : - 200; - old_filament_e_feedrate = old_filament_e_feedrate == 0 ? 100 : old_filament_e_feedrate; - int new_filament_e_feedrate = (int) (60.0 * full_config.filament_max_volumetric_speed.get_at(new_extruder_id) / filament_area); - new_filament_e_feedrate = new_filament_e_feedrate == 0 ? 100 : new_filament_e_feedrate; - - config.set_key_value("max_layer_z", new ConfigOptionFloat(gcodegen.m_max_layer_z)); - config.set_key_value("relative_e_axis", new ConfigOptionBool(full_config.use_relative_e_distances)); - config.set_key_value("toolchange_count", new ConfigOptionInt((int) gcodegen.m_toolchange_count)); - config.set_key_value("fan_speed", new ConfigOptionInt((int) 0)); - config.set_key_value("old_retract_length", new ConfigOptionFloat(old_retract_length)); - config.set_key_value("new_retract_length", new ConfigOptionFloat(new_retract_length)); - config.set_key_value("old_retract_length_toolchange", new ConfigOptionFloat(old_retract_length_toolchange)); - config.set_key_value("new_retract_length_toolchange", new ConfigOptionFloat(new_retract_length_toolchange)); - config.set_key_value("old_filament_temp", new ConfigOptionInt(old_filament_temp)); - config.set_key_value("new_filament_temp", new ConfigOptionInt(new_filament_temp)); - config.set_key_value("x_after_toolchange", new ConfigOptionFloat(start_pos(0))); - config.set_key_value("y_after_toolchange", new ConfigOptionFloat(start_pos(1))); - config.set_key_value("z_after_toolchange", new ConfigOptionFloat(nozzle_pos(2))); - config.set_key_value("first_flush_volume", new ConfigOptionFloat(purge_length / 2.f)); - config.set_key_value("second_flush_volume", new ConfigOptionFloat(purge_length / 2.f)); - config.set_key_value("old_filament_e_feedrate", new ConfigOptionInt(old_filament_e_feedrate)); - config.set_key_value("new_filament_e_feedrate", new ConfigOptionInt(new_filament_e_feedrate)); - config.set_key_value("travel_point_1_x", new ConfigOptionFloat(float(travel_point_1.x()))); - config.set_key_value("travel_point_1_y", new ConfigOptionFloat(float(travel_point_1.y()))); - config.set_key_value("travel_point_2_x", new ConfigOptionFloat(float(travel_point_2.x()))); - config.set_key_value("travel_point_2_y", new ConfigOptionFloat(float(travel_point_2.y()))); - config.set_key_value("travel_point_3_x", new ConfigOptionFloat(float(travel_point_3.x()))); - config.set_key_value("travel_point_3_y", new ConfigOptionFloat(float(travel_point_3.y()))); - - int flush_count = std::min(g_max_flush_count, (int) std::round(purge_volume / g_purge_volume_one_time)); - float flush_unit = purge_length / flush_count; - int flush_idx = 0; - for (; flush_idx < flush_count; flush_idx++) { - char key_value[64] = {0}; - snprintf(key_value, sizeof(key_value), "flush_length_%d", flush_idx + 1); - config.set_key_value(key_value, new ConfigOptionFloat(flush_unit)); - } - - for (; flush_idx < g_max_flush_count; flush_idx++) { - char key_value[64] = {0}; - snprintf(key_value, sizeof(key_value), "flush_length_%d", flush_idx + 1); - config.set_key_value(key_value, new ConfigOptionFloat(0.f)); - } std::string tcr_gcode, tcr_escaped_gcode = gcodegen.placeholder_parser_process("tcr_rotated_gcode", tcr_rotated_gcode, new_extruder_id, &config); @@ -856,6 +791,9 @@ static std::vector get_path_of_change_filament(const Print& print) // SoftFever: set new PA for new filament if (new_extruder_id != -1 && gcodegen.config().enable_pressure_advance.get_at(new_extruder_id)) { gcode += gcodegen.writer().set_pressure_advance(gcodegen.config().pressure_advance.get_at(new_extruder_id)); + // Orca: Adaptive PA + // Reset Adaptive PA processor last PA value + gcodegen.m_pa_processor->resetPreviousPA(gcodegen.config().pressure_advance.get_at(new_extruder_id)); } // A phony move to the end position at the wipe tower. @@ -1107,14 +1045,14 @@ void GCode::PlaceholderParserIntegration::init(const GCodeWriter &writer) const std::vector &extruders = writer.extruders(); if (! extruders.empty()) { this->num_extruders = extruders.back().id() + 1; - this->e_retracted.assign(num_extruders, 0); - this->e_restart_extra.assign(num_extruders, 0); + this->e_retracted.assign(MAXIMUM_EXTRUDER_NUMBER, 0); + this->e_restart_extra.assign(MAXIMUM_EXTRUDER_NUMBER, 0); this->opt_e_retracted = new ConfigOptionFloats(e_retracted); this->opt_e_restart_extra = new ConfigOptionFloats(e_restart_extra); this->output_config.set_key_value("e_retracted", this->opt_e_retracted); this->output_config.set_key_value("e_restart_extra", this->opt_e_restart_extra); if (! writer.config.use_relative_e_distances) { - e_position.assign(num_extruders, 0); + e_position.assign(MAXIMUM_EXTRUDER_NUMBER, 0); opt_e_position = new ConfigOptionFloats(e_position); this->output_config.set_key_value("e_position", opt_e_position); } @@ -1146,8 +1084,8 @@ void GCode::PlaceholderParserIntegration::update_from_gcodewriter(const GCodeWri if (this->num_extruders > 0) { const std::vector &extruders = writer.extruders(); assert(! extruders.empty() && num_extruders == extruders.back().id() + 1); - this->e_retracted.assign(num_extruders, 0); - this->e_restart_extra.assign(num_extruders, 0); + this->e_retracted.assign(MAXIMUM_EXTRUDER_NUMBER, 0); + this->e_restart_extra.assign(MAXIMUM_EXTRUDER_NUMBER, 0); this->opt_extruded_volume->values.assign(num_extruders, 0); this->opt_extruded_weight->values.assign(num_extruders, 0); double total_volume = 0.; @@ -1167,7 +1105,7 @@ void GCode::PlaceholderParserIntegration::update_from_gcodewriter(const GCodeWri opt_e_retracted->values = this->e_retracted; opt_e_restart_extra->values = this->e_restart_extra; if (! writer.config.use_relative_e_distances) { - this->e_position.assign(num_extruders, 0); + this->e_position.assign(MAXIMUM_EXTRUDER_NUMBER, 0); for (const Extruder &e : extruders) this->e_position[e.id()] = e.position(); this->opt_e_position->values = this->e_position; @@ -1181,11 +1119,11 @@ void GCode::PlaceholderParserIntegration::validate_output_vector_variables() if (this->opt_position->values.size() != 3) throw Slic3r::RuntimeError("\"position\" output variable must not be resized by the script."); if (this->num_extruders > 0) { - if (this->opt_e_position && this->opt_e_position->values.size() != this->num_extruders) + if (this->opt_e_position && this->opt_e_position->values.size() != MAXIMUM_EXTRUDER_NUMBER) throw Slic3r::RuntimeError("\"e_position\" output variable must not be resized by the script."); - if (this->opt_e_retracted->values.size() != this->num_extruders) + if (this->opt_e_retracted->values.size() != MAXIMUM_EXTRUDER_NUMBER) throw Slic3r::RuntimeError("\"e_retracted\" output variable must not be resized by the script."); - if (this->opt_e_restart_extra->values.size() != this->num_extruders) + if (this->opt_e_restart_extra->values.size() != MAXIMUM_EXTRUDER_NUMBER) throw Slic3r::RuntimeError("\"e_restart_extra\" output variable must not be resized by the script."); } } @@ -1529,6 +1467,7 @@ void GCode::do_export(Print* print, const char* path, GCodeProcessorResult* resu path_tmp += ".tmp"; m_processor.initialize(path_tmp); + m_processor.set_print(print); GCodeOutputStream file(boost::nowide::fopen(path_tmp.c_str(), "wb"), m_processor); if (! file.is_open()) { BOOST_LOG_TRIVIAL(error) << std::string("G-code export to ") + path + " failed.\nCannot open the file for writing.\n" << std::endl; @@ -1721,34 +1660,7 @@ namespace DoExport { static void init_ooze_prevention(const Print &print, OozePrevention &ooze_prevention) { - // Calculate wiping points if needed - if (print.config().ooze_prevention.value && ! print.config().single_extruder_multi_material) { - Points skirt_points; - for (const ExtrusionEntity *ee : print.skirt().entities) - for (const ExtrusionPath &path : dynamic_cast(ee)->paths) - append(skirt_points, path.polyline.points); - if (! skirt_points.empty()) { - Polygon outer_skirt = Slic3r::Geometry::convex_hull(skirt_points); - Polygons skirts; - for (unsigned int extruder_id : print.extruders()) { - const Vec2d &extruder_offset = print.config().extruder_offset.get_at(extruder_id); - Polygon s(outer_skirt); - s.translate(Point::new_scale(-extruder_offset(0), -extruder_offset(1))); - skirts.emplace_back(std::move(s)); - } - ooze_prevention.enable = true; - ooze_prevention.standby_points = offset(Slic3r::Geometry::convex_hull(skirts), float(scale_(3.))).front().equally_spaced_points(float(scale_(10.))); - #if 0 - require "Slic3r/SVG.pm"; - Slic3r::SVG::output( - "ooze_prevention.svg", - red_polygons => \@skirts, - polygons => [$outer_skirt], - points => $gcodegen->ooze_prevention->standby_points, - ); - #endif - } - } + ooze_prevention.enable = print.config().ooze_prevention.value && ! print.config().single_extruder_multi_material; } // Fill in print_statistics and return formatted string containing filament statistics to be inserted into G-code comment section. @@ -1979,6 +1891,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato if (!print.config().small_area_infill_flow_compensation_model.empty()) m_small_area_infill_flow_compensator = make_unique(print.config()); + file.write_format("; HEADER_BLOCK_START\n"); // Write information on the generator. @@ -2169,16 +2082,13 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato // No object to print was found, cancel the G-code export. throw Slic3r::SlicingError(_(L("No object can be printed. Maybe too small"))); has_wipe_tower = print.has_wipe_tower() && tool_ordering.has_wipe_tower(); - // BBS: priming logic is removed, so 1st layer tool_ordering also respect the object tool sequence -#if 0 - initial_extruder_id = (has_wipe_tower && !print.config().single_extruder_multi_material_priming) ? + // Orca: support all extruder priming + initial_extruder_id = (!is_bbl_printers && has_wipe_tower && !print.config().single_extruder_multi_material_priming) ? // The priming towers will be skipped. tool_ordering.all_extruders().back() : // Don't skip the priming towers. tool_ordering.first_extruder(); -#else - initial_extruder_id = tool_ordering.first_extruder(); -#endif + //BBS: try to find the non-support filament extruder if is multi color and initial_extruder is support filament if (initial_extruder_id != static_cast(-1)) { initial_non_support_extruder_id = initial_extruder_id; @@ -2227,6 +2137,9 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato m_cooling_buffer = make_unique(*this); m_cooling_buffer->set_current_extruder(initial_extruder_id); + + // Orca: Initialise AdaptivePA processor filter + m_pa_processor = std::make_unique(*this, tool_ordering.all_extruders()); // Emit machine envelope limits for the Marlin firmware. this->print_machine_envelope(file, print); @@ -2247,9 +2160,11 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato this->placeholder_parser().set("initial_no_support_tool", initial_non_support_extruder_id); this->placeholder_parser().set("initial_no_support_extruder", initial_non_support_extruder_id); this->placeholder_parser().set("current_extruder", initial_extruder_id); - //set the key for compatibilty + //Orca: set the key for compatibilty this->placeholder_parser().set("retraction_distance_when_cut", m_config.retraction_distances_when_cut.get_at(initial_extruder_id)); this->placeholder_parser().set("long_retraction_when_cut", m_config.long_retractions_when_cut.get_at(initial_extruder_id)); + this->placeholder_parser().set("temperature", new ConfigOptionInts(print.config().nozzle_temperature)); + this->placeholder_parser().set("retraction_distances_when_cut", new ConfigOptionFloats(m_config.retraction_distances_when_cut)); this->placeholder_parser().set("long_retractions_when_cut",new ConfigOptionBools(m_config.long_retractions_when_cut)); @@ -2259,14 +2174,13 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato this->placeholder_parser().set("current_object_idx", 0); // For the start / end G-code to do the priming and final filament pull in case there is no wipe tower provided. this->placeholder_parser().set("has_wipe_tower", has_wipe_tower); - //this->placeholder_parser().set("has_single_extruder_multi_material_priming", has_wipe_tower && print.config().single_extruder_multi_material_priming); + this->placeholder_parser().set("has_single_extruder_multi_material_priming", !is_bbl_printers && has_wipe_tower && print.config().single_extruder_multi_material_priming); this->placeholder_parser().set("total_toolchanges", std::max(0, print.wipe_tower_data().number_of_toolchanges)); // Check for negative toolchanges (single extruder mode) and set to 0 (no tool change). + this->placeholder_parser().set("num_extruders", int(print.config().nozzle_diameter.values.size())); + this->placeholder_parser().set("retract_length", new ConfigOptionFloats(print.config().retraction_length)); - // PlaceholderParser currently substitues non-existent vector values with the zero'th value, which is harmful in the - // case of "is_extruder_used[]" as Slicer may lie about availability of such non-existent extruder. We rather - // sacrifice 256B of memory before we change the behavior of the PlaceholderParser, which should really only fill in - // the non-existent vector elements for filament parameters. - std::vector is_extruder_used(std::max(size_t(255), print.config().filament_diameter.size()), 0); + //Orca: support max MAXIMUM_EXTRUDER_NUMBER extruders/filaments + std::vector is_extruder_used(std::max(size_t(MAXIMUM_EXTRUDER_NUMBER), print.config().filament_diameter.size()), 0); for (unsigned int extruder : tool_ordering.all_extruders()) is_extruder_used[extruder] = true; this->placeholder_parser().set("is_extruder_used", new ConfigOptionBools(is_extruder_used)); @@ -2498,8 +2412,8 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato } } - // BBS: priming logic is removed, always set first extruer here. - //if (! (has_wipe_tower && print.config().single_extruder_multi_material_priming)) + // Orca: support extruder priming + if (is_bbl_printers || ! (has_wipe_tower && print.config().single_extruder_multi_material_priming)) { // Set initial extruder only after custom start G-code. // Ugly hack: Do not set the initial extruder if the extruder is primed using the MMU priming towers at the edge of the print bed. @@ -2577,7 +2491,6 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato m_avoid_crossing_perimeters.use_external_mp_once(); // BBS. change tool before moving to origin point. if (m_writer.need_toolchange(initial_extruder_id)) { - const PrintObjectConfig& object_config = object.config(); coordf_t initial_layer_print_height = print.config().initial_layer_print_height.value; file.write(this->set_extruder(initial_extruder_id, initial_layer_print_height, true)); prime_extruder = true; @@ -2629,8 +2542,8 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato m_wipe_tower.reset(new WipeTowerIntegration(print.config(), print.get_plate_index(), print.get_plate_origin(), * print.wipe_tower_data().priming.get(), print.wipe_tower_data().tool_changes, *print.wipe_tower_data().final_purge.get())); //BBS file.write(m_writer.travel_to_z(initial_layer_print_height + m_config.z_offset.value, "Move to the first layer height")); - #if 0 - if (print.config().single_extruder_multi_material_priming) { + + if (!is_bbl_printers && print.config().single_extruder_multi_material_priming) { file.write(m_wipe_tower->prime(*this)); // Verify, whether the print overaps the priming extrusions. BoundingBoxf bbox_print(get_print_extrusions_extents(print)); @@ -2654,19 +2567,17 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato file.write("M1 S10\n"); } } - //BBS: only support Marlin - //else { + else { // This is not Marlin, M1 command is probably not supported. - //if (overlap) { - // print.active_step_add_warning(PrintStateBase::WarningLevel::CRITICAL, - // _(L("Your print is very close to the priming regions. " - // "Make sure there is no collision."))); - //} else { - // // Just continue printing, no action necessary. - //} - //} + if (overlap) { + print.active_step_add_warning(PrintStateBase::WarningLevel::CRITICAL, + _(L("Your print is very close to the priming regions. " + "Make sure there is no collision."))); + } else { + // Just continue printing, no action necessary. + } + } } - #endif print.throw_if_canceled(); } // Process all layers of all objects (non-sequential mode) with a parallel pipeline: @@ -2870,6 +2781,12 @@ void GCode::process_layers( return in.gcode; return cooling_buffer.process_layer(std::move(in.gcode), in.layer_id, in.cooling_buffer_flush); }); + const auto pa_processor_filter = tbb::make_filter(slic3r_tbb_filtermode::serial_in_order, + [&pa_processor = *this->m_pa_processor](std::string in) -> std::string { + return pa_processor.process_layer(std::move(in)); + } + ); + const auto output = tbb::make_filter(slic3r_tbb_filtermode::serial_in_order, [&output_stream](std::string s) { output_stream.write(s); } ); @@ -2900,9 +2817,9 @@ void GCode::process_layers( else if (m_spiral_vase) tbb::parallel_pipeline(12, generator & spiral_mode & cooling & fan_mover & output); else if (m_pressure_equalizer) - tbb::parallel_pipeline(12, generator & pressure_equalizer & cooling & fan_mover & output); + tbb::parallel_pipeline(12, generator & pressure_equalizer & cooling & fan_mover & pa_processor_filter & output); else - tbb::parallel_pipeline(12, generator & cooling & fan_mover & output); + tbb::parallel_pipeline(12, generator & cooling & fan_mover & pa_processor_filter & output); } // Process all layers of a single object instance (sequential mode) with a parallel pipeline: @@ -3255,8 +3172,12 @@ void GCode::_print_first_layer_extruder_temperatures(GCodeOutputStream &file, Pr // Set temperatures of all the printing extruders. for (unsigned int tool_id : print.extruders()) { int temp = print.config().nozzle_temperature_initial_layer.get_at(tool_id); - if (print.config().ooze_prevention.value) - temp += print.config().standby_temperature_delta.value; + if (print.config().ooze_prevention.value) { + if (print.config().idle_temperature.get_at(tool_id) == 0) + temp += print.config().standby_temperature_delta.value; + else + temp = print.config().idle_temperature.get_at(tool_id); + } if (temp > 0) file.write(m_writer.set_temperature(temp, wait, tool_id)); } @@ -3354,14 +3275,17 @@ namespace ProcessLayer const PrintConfig &config) { std::string gcode; - // BBS - bool single_filament_print = config.filament_diameter.size() == 1; if (custom_gcode != nullptr) { // Extruder switches are processed by LayerTools, they should be filtered out. assert(custom_gcode->type != CustomGCode::ToolChange); CustomGCode::Type gcode_type = custom_gcode->type; + + //BBS: inserting color gcode is removed +#if 0 + // BBS + bool single_filament_print = config.filament_diameter.size() == 1; bool color_change = gcode_type == CustomGCode::ColorChange; bool tool_change = gcode_type == CustomGCode::ToolChange; // Tool Change is applied as Color Change for a single extruder printer only. @@ -3373,8 +3297,7 @@ namespace ProcessLayer m600_extruder_before_layer = custom_gcode->extruder - 1; else if (gcode_type == CustomGCode::PausePrint) pause_print_msg = custom_gcode->extra; - //BBS: inserting color gcode is removed -#if 0 + // we should add or not colorprint_change in respect to nozzle_diameter count instead of really used extruders count if (color_change || tool_change) { @@ -3437,8 +3360,8 @@ namespace Skirt { { // Prime all extruders printing over the 1st layer over the skirt lines. size_t n_loops = print.skirt().entities.size(); - size_t n_tools = layer_tools.extruders.size(); - size_t lines_per_extruder = (n_loops + n_tools - 1) / n_tools; + // size_t n_tools = layer_tools.extruders.size(); + // size_t lines_per_extruder = (n_loops + n_tools - 1) / n_tools; // BBS. Extrude skirt with first extruder if min_skirt_length is zero //ORCA: Always extrude skirt with first extruder, independantly of if the minimum skirt length is zero or not. The code below @@ -3764,7 +3687,8 @@ LayerResult GCode::process_layer( // Transition from 1st to 2nd layer. Adjust nozzle temperatures as prescribed by the nozzle dependent // nozzle_temperature_initial_layer vs. temperature settings. for (const Extruder &extruder : m_writer.extruders()) { - if (print.config().single_extruder_multi_material.value && extruder.id() != m_writer.extruder()->id()) + if ((print.config().single_extruder_multi_material.value || m_ooze_prevention.enable) && + extruder.id() != m_writer.extruder()->id()) // In single extruder multi material mode, set the temperature for the current extruder only. continue; int temperature = print.config().nozzle_temperature.get_at(extruder.id()); @@ -3793,7 +3717,8 @@ LayerResult GCode::process_layer( Skirt::make_skirt_loops_per_extruder_other_layers(print, layer_tools, m_skirt_done); // BBS: get next extruder according to flush and soluble - auto get_next_extruder = [&](int current_extruder,const std::vector&extruders) { + // Orca: Left unused due to removed code below +/* auto get_next_extruder = [&](int current_extruder,const std::vector&extruders) { std::vector flush_matrix(cast(m_config.flush_volumes_matrix.values)); const unsigned int number_of_extruders = (unsigned int)(sqrt(flush_matrix.size()) + EPSILON); // Extract purging volumes for each extruder pair: @@ -3811,7 +3736,7 @@ LayerResult GCode::process_layer( } } return next_extruder; - }; + }; */ if (m_config.enable_overhang_speed && !m_config.overhang_speed_classic) { for (const auto &layer_to_print : layers) { @@ -4064,7 +3989,7 @@ LayerResult GCode::process_layer( m_avoid_crossing_perimeters.use_external_mp(); Flow layer_skirt_flow = print.skirt_flow().with_height(float(m_skirt_done.back() - (m_skirt_done.size() == 1 ? 0. : m_skirt_done[m_skirt_done.size() - 2]))); double mm3_per_mm = layer_skirt_flow.mm3_per_mm(); - for (size_t i = loops.first; i < loops.second; ++i) { + for (size_t i = (layer.id() == 0) ? loops.first : loops.second - 1; i < loops.second; ++i) { // Adjust flow according to this layer's layer height. ExtrusionLoop loop = *dynamic_cast(print.skirt().entities[i]); for (ExtrusionPath &path : loop.paths) { @@ -4440,6 +4365,8 @@ void GCode::append_full_config(const Print &print, std::string &str) if (key == "wipe_tower_x" || key == "wipe_tower_y") { ss << std::fixed << std::setprecision(3) << "; " << key << " = " << dynamic_cast(cfg.option(key))->get_at(print.get_plate_index()) << "\n"; } + if(key == "extruder_colour") + ss << "; " << key << " = " << cfg.opt_serialize("filament_colour") << "\n"; else ss << "; " << key << " = " << cfg.opt_serialize(key) << "\n"; } @@ -4548,6 +4475,7 @@ static std::unique_ptr calculate_layer_edge_grid(const Layer& la std::string GCode::extrude_loop(ExtrusionLoop loop, std::string description, double speed, const ExtrusionEntitiesPtr& region_perimeters) { + // get a copy; don't modify the orientation of the original loop object otherwise // next copies (if any) would not detect the correct orientation @@ -4557,6 +4485,8 @@ std::string GCode::extrude_loop(ExtrusionLoop loop, std::string description, dou // if spiral vase, we have to ensure that all contour are in the same orientation. loop.make_counter_clockwise(); } + if (loop.loop_role() == elrSkirt && (this->m_layer->id() % 2 == 1)) + loop.reverse(); // find the point of the loop that is closest to the current extruder position // or randomize if requested @@ -4673,7 +4603,9 @@ std::string GCode::extrude_loop(ExtrusionLoop loop, std::string description, dou if(discoveredTouchingLines > 1){ // use extrude instead of travel_to_xy to trigger the unretract ExtrusionPath fake_path_wipe(Polyline{pt, current_point}, paths.front()); + fake_path_wipe.set_force_no_extrusion(true); fake_path_wipe.mm3_per_mm = 0; + //fake_path_wipe.set_extrusion_role(erExternalPerimeter); gcode += extrude_path(fake_path_wipe, "move inwards before retraction/seam", speed); } } @@ -4685,9 +4617,32 @@ std::string GCode::extrude_loop(ExtrusionLoop loop, std::string description, dou return is_small_peri ? small_peri_speed : speed; }; + + //Orca: Adaptive PA: calculate average mm3_per_mm value over the length of the loop. + //This is used for adaptive PA + m_multi_flow_segment_path_pa_set = false; // always emit PA on the first path of the loop + m_multi_flow_segment_path_average_mm3_per_mm = 0; + double weighted_sum_mm3_per_mm = 0.0; + double total_multipath_length = 0.0; + for (const ExtrusionPath& path : paths) { + if(!path.is_force_no_extrusion()){ + double path_length = unscale(path.length()); //path length in mm + weighted_sum_mm3_per_mm += path.mm3_per_mm * path_length; + total_multipath_length += path_length; + } + } + if (total_multipath_length > 0.0) + m_multi_flow_segment_path_average_mm3_per_mm = weighted_sum_mm3_per_mm / total_multipath_length; + // Orca: end of multipath average mm3_per_mm value calculation + if (!enable_seam_slope) { for (ExtrusionPaths::iterator path = paths.begin(); path != paths.end(); ++path) { gcode += this->_extrude(*path, description, speed_for_path(*path)); + // Orca: Adaptive PA - dont adapt PA after the first pultipath extrusion is completed + // as we have already set the PA value to the average flow over the totality of the path + // in the first extrude move + // TODO: testing is needed with slope seams and adaptive PA. + m_multi_flow_segment_path_pa_set = true; } } else { // Create seam slope @@ -4719,6 +4674,10 @@ std::string GCode::extrude_loop(ExtrusionLoop loop, std::string description, dou // Then extrude it for (const auto& p : new_loop.get_all_paths()) { gcode += this->_extrude(*p, description, speed_for_path(*p)); + // Orca: Adaptive PA - dont adapt PA after the first pultipath extrusion is completed + // as we have already set the PA value to the average flow over the totality of the path + // in the first extrude move + m_multi_flow_segment_path_pa_set = true; } // Fix path for wipe @@ -4790,8 +4749,31 @@ std::string GCode::extrude_multi_path(ExtrusionMultiPath multipath, std::string { // extrude along the path std::string gcode; - for (ExtrusionPath path : multipath.paths) + + //Orca: calculate multipath average mm3_per_mm value over the length of the path. + //This is used for adaptive PA + m_multi_flow_segment_path_pa_set = false; // always emit PA on the first path of the multi-path + m_multi_flow_segment_path_average_mm3_per_mm = 0; + double weighted_sum_mm3_per_mm = 0.0; + double total_multipath_length = 0.0; + for (const ExtrusionPath& path : multipath.paths) { + if(!path.is_force_no_extrusion()){ + double path_length = unscale(path.length()); //path length in mm + weighted_sum_mm3_per_mm += path.mm3_per_mm * path_length; + total_multipath_length += path_length; + } + } + if (total_multipath_length > 0.0) + m_multi_flow_segment_path_average_mm3_per_mm = weighted_sum_mm3_per_mm / total_multipath_length; + // Orca: end of multipath average mm3_per_mm value calculation + + for (ExtrusionPath path : multipath.paths){ gcode += this->_extrude(path, description, speed); + // Orca: Adaptive PA - dont adapt PA after the first pultipath extrusion is completed + // as we have already set the PA value to the average flow over the totality of the path + // in the first extrude move. + m_multi_flow_segment_path_pa_set = true; + } // BBS if (m_wipe.enable) { @@ -4825,7 +4807,10 @@ std::string GCode::extrude_entity(const ExtrusionEntity &entity, std::string des std::string GCode::extrude_path(ExtrusionPath path, std::string description, double speed) { -// description += ExtrusionEntity::role_to_string(path.role()); + // Orca: Reset average multipath flow as this is a single line, single extrude volumetric speed path + m_multi_flow_segment_path_pa_set = false; + m_multi_flow_segment_path_average_mm3_per_mm = 0; + // description += ExtrusionEntity::role_to_string(path.role()); std::string gcode = this->_extrude(path, description, speed); if (m_wipe.enable) { m_wipe.path = std::move(path.polyline); @@ -4886,8 +4871,8 @@ std::string GCode::extrude_support(const ExtrusionEntityCollection &support_fill std::string gcode; if (! support_fills.entities.empty()) { - const double support_speed = m_config.support_speed.value; - const double support_interface_speed = m_config.get_abs_value("support_interface_speed"); + // const double support_speed = m_config.support_speed.value; + // const double support_interface_speed = m_config.get_abs_value("support_interface_speed"); for (const ExtrusionEntity *ee : support_fills.entities) { ExtrusionRole role = ee->role(); assert(role == erSupportMaterial || role == erSupportMaterialInterface || role == erSupportTransition); @@ -5286,12 +5271,32 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, ref_speed, speed, m_config.slowdown_for_curled_perimeters); } variable_speed = std::any_of(new_points.begin(), new_points.end(), - [speed](const ProcessedPoint &p) { return fabs(double(p.speed) - speed) > EPSILON; }); - + [speed](const ProcessedPoint &p) { return fabs(double(p.speed) - speed) > 1; }); // Ignore small speed variations (under 1mm/sec) } double F = speed * 60; // convert mm/sec to mm/min - + + // Orca: Dynamic PA + // If adaptive PA is enabled, by default evaluate PA on all extrusion moves + bool evaluate_adaptive_pa = false; + bool role_change = (m_last_extrusion_role != path.role()); + if(EXTRUDER_CONFIG(adaptive_pressure_advance) && EXTRUDER_CONFIG(enable_pressure_advance)){ + evaluate_adaptive_pa = true; + // If we have already emmited a PA change because the m_multi_flow_segment_path_pa_set is set + // skip re-issuing the PA change tag. + if (m_multi_flow_segment_path_pa_set && evaluate_adaptive_pa) + evaluate_adaptive_pa = false; + // TODO: Explore forcing evaluation of PA if a role change is happening mid extrusion. + // TODO: This would enable adapting PA for overhang perimeters as they are part of the current loop + // TODO: The issue with simply enabling PA evaluation on a role change is that the speed change + // TODO: is issued before the overhang perimeter role change is triggered + // TODO: because for some reason (maybe path segmentation upstream?) there is a short path extruded + // TODO: with the overhang speed and flow before the role change is flagged in the path.role() function. + if(role_change) + evaluate_adaptive_pa = true; + } + // Orca: End of dynamic PA trigger flag segment + //Orca: process custom gcode for extrusion role change if (path.role() != m_last_extrusion_role && !m_config.change_extrusion_role_gcode.value.empty()) { DynamicConfig config; @@ -5347,6 +5352,45 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, sprintf(buf, ";%s%g\n", GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Height).c_str(), m_last_height); gcode += buf; } + + // Orca: Dynamic PA + // Post processor flag generation code segment when option to emit only at role changes is enabled + // Variables published to the post processor: + // 1) Tag to trigger a PA evaluation (because a role change was identified and the user has requested dynamic PA adjustments) + // 2) Current extruder ID (to identify the PA model for the currently used extruder) + // 3) mm3_per_mm value (to then multiply by the final model print speed after slowdown for cooling is applied) + // 4) the current acceleration (to pass to the model for evaluation) + // 5) whether this is an external perimeter (for future use) + // 6) whether this segment is triggered because of a role change (to aid in calculation of average speed for the role) + // This tag simplifies the creation of the gcode post processor while also keeping the feature decoupled from other tags. + if (evaluate_adaptive_pa) { + bool isOverhangPerimeter = (path.role() == erOverhangPerimeter); + if (m_multi_flow_segment_path_average_mm3_per_mm > 0) { + sprintf(buf, ";%sT%u MM3MM:%g ACCEL:%u BR:%d RC:%d OV:%d\n", + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::PA_Change).c_str(), + m_writer.extruder()->id(), + m_multi_flow_segment_path_average_mm3_per_mm, + acceleration_i, + ((path.role() == erBridgeInfill) ||(path.role() == erOverhangPerimeter)), + role_change, + isOverhangPerimeter); + gcode += buf; + } else if(_mm3_per_mm >0 ){ // Triggered when extruding a single segment path (like a line). + // Check if mm3_mm value is greater than zero as the wipe before external perimeter + // is a zero mm3_mm path to force de-retraction to happen and we dont want + // to issue a zero flow PA change command for this + sprintf(buf, ";%sT%u MM3MM:%g ACCEL:%u BR:%d RC:%d OV:%d\n", + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::PA_Change).c_str(), + m_writer.extruder()->id(), + _mm3_per_mm, + acceleration_i, + ((path.role() == erBridgeInfill) ||(path.role() == erOverhangPerimeter)), + role_change, + isOverhangPerimeter); + gcode += buf; + } + } + auto overhang_fan_threshold = EXTRUDER_CONFIG(overhang_fan_threshold); auto enable_overhang_bridge_fan = EXTRUDER_CONFIG(enable_overhang_bridge_fan); @@ -5397,6 +5441,54 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, if (!variable_speed) { // F is mm per minute. + if( (std::abs(writer().get_current_speed() - F) > EPSILON) || (std::abs(_mm3_per_mm - m_last_mm3_mm) > EPSILON) ){ + // ORCA: Adaptive PA code segment when adjusting PA within the same feature + // There is a speed change coming out of an overhang region + // or a flow change, so emit the flag to evaluate PA for the upcomming extrusion + // Emit tag before new speed is set so the post processor reads the next speed immediately and uses it. + // Dont emit tag if it has just already been emitted from a role change above + if(_mm3_per_mm >0 && + EXTRUDER_CONFIG(adaptive_pressure_advance) && + EXTRUDER_CONFIG(enable_pressure_advance) && + EXTRUDER_CONFIG(adaptive_pressure_advance_overhangs) && + !evaluate_adaptive_pa){ + if(writer().get_current_speed() > F){ // Ramping down speed - use overhang logic where the minimum speed is used between current and upcoming extrusion + if(m_config.gcode_comments){ + sprintf(buf, "; Ramp down-non-variable\n"); + gcode += buf; + } + sprintf(buf, ";%sT%u MM3MM:%g ACCEL:%u BR:%d RC:%d OV:%d\n", + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::PA_Change).c_str(), + m_writer.extruder()->id(), + _mm3_per_mm, + acceleration_i, + ((path.role() == erBridgeInfill) ||(path.role() == erOverhangPerimeter)), + 1, // Force a dummy "role change" & "overhang perimeter" for the post processor, as, while technically it is not a role change, + // the properties of the extrusion in the overhang are different so it behaves similarly to a role + // change for the Adaptive PA post processor. + 1); + }else{ // Ramping up speed - use baseline logic where max speed is used between current and upcoming extrusion + if(m_config.gcode_comments){ + sprintf(buf, "; Ramp up-non-variable\n"); + gcode += buf; + } + sprintf(buf, ";%sT%u MM3MM:%g ACCEL:%u BR:%d RC:%d OV:%d\n", + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::PA_Change).c_str(), + m_writer.extruder()->id(), + _mm3_per_mm, + acceleration_i, + ((path.role() == erBridgeInfill) ||(path.role() == erOverhangPerimeter)), + 1, // Force a dummy "role change" & "overhang perimeter" for the post processor, as, while technically it is not a role change, + // the properties of the extrusion in the overhang are different so it is technically similar to a role + // change for the Adaptive PA post processor. + 0); + } + gcode += buf; + m_last_mm3_mm = _mm3_per_mm; + } + // ORCA: End of adaptive PA code segment + } + gcode += m_writer.set_speed(F, "", comment); { if (m_enable_cooling_markers) { @@ -5591,9 +5683,59 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, continue; path_length += line_length; double new_speed = pre_processed_point.speed * 60.0; - if (last_set_speed != new_speed) { + + if ((std::abs(last_set_speed - new_speed) > EPSILON) || (std::abs(_mm3_per_mm - m_last_mm3_mm) > EPSILON)) { + // ORCA: Adaptive PA code segment when adjusting PA within the same feature + // There is a speed change or flow change so emit the flag to evaluate PA for the upcomming extrusion + // Emit tag before new speed is set so the post processor reads the next speed immediately and uses it. + if(_mm3_per_mm >0 && + EXTRUDER_CONFIG(adaptive_pressure_advance) && + EXTRUDER_CONFIG(enable_pressure_advance) && + EXTRUDER_CONFIG(adaptive_pressure_advance_overhangs) ){ + if(last_set_speed > new_speed){ // Ramping down speed - use overhang logic where the minimum speed is used between current and upcoming extrusion + if(m_config.gcode_comments) { + sprintf(buf, "; Ramp up-variable\n"); + gcode += buf; + } + sprintf(buf, ";%sT%u MM3MM:%g ACCEL:%u BR:%d RC:%d OV:%d\n", + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::PA_Change).c_str(), + m_writer.extruder()->id(), + _mm3_per_mm, + acceleration_i, + ((path.role() == erBridgeInfill) ||(path.role() == erOverhangPerimeter)), + 1, // Force a dummy "role change" & "overhang perimeter" for the post processor, as, while technically it is not a role change, + // the properties of the extrusion in the overhang are different so it is technically similar to a role + // change for the Adaptive PA post processor. + 1); + }else{ // Ramping up speed - use baseline logic where max speed is used between current and upcoming extrusion + if(m_config.gcode_comments) { + sprintf(buf, "; Ramp down-variable\n"); + gcode += buf; + } + sprintf(buf, ";%sT%u MM3MM:%g ACCEL:%u BR:%d RC:%d OV:%d\n", + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::PA_Change).c_str(), + m_writer.extruder()->id(), + _mm3_per_mm, + acceleration_i, + ((path.role() == erBridgeInfill) ||(path.role() == erOverhangPerimeter)), + 1, // Force a dummy "role change" & "overhang perimeter" for the post processor, as, while technically it is not a role change, + // the properties of the extrusion in the overhang are different so it is technically similar to a role + // change for the Adaptive PA post processor. + 0); + } + gcode += buf; + m_last_mm3_mm = _mm3_per_mm; + } + }// ORCA: End of adaptive PA code segment + + // Ignore small speed variations - emit speed change if the delta between current and new is greater than 60mm/min / 1mm/sec + // Reset speed to F if delta to F is less than 1mm/sec + if ((std::abs(last_set_speed - new_speed) > 60)) { gcode += m_writer.set_speed(new_speed, "", comment); last_set_speed = new_speed; + } else if ((std::abs(F - new_speed) <= 60)) { + gcode += m_writer.set_speed(F, "", comment); + last_set_speed = F; } auto dE = e_per_mm * line_length; if (!this->on_first_layer() && m_small_area_infill_flow_compensator @@ -5899,7 +6041,6 @@ bool GCode::needs_retraction(const Polyline &travel, ExtrusionRole role, LiftTyp for (int i = 0; i < m_config.z_hop.size(); i++) max_z_hop = std::max(max_z_hop, (float)m_config.z_hop.get_at(i)); float travel_len_thresh = scale_(max_z_hop / tan(this->writer().extruder()->travel_slope())); - float accum_len = 0.f; Polyline clipped_travel; clipped_travel.append(Polyline(travel.points[0], travel.points[1])); @@ -6001,7 +6142,6 @@ std::string GCode::retract(bool toolchange, bool is_last_retraction, LiftType li } if (needs_lift && can_lift) { - size_t extruder_id = m_writer.extruder()->id(); gcode += m_writer.lift(!m_spiral_vase ? lift_type : LiftType::NormalLift); } @@ -6016,19 +6156,29 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z, bool b // if we are running a single-extruder setup, just set the extruder and return nothing if (!m_writer.multiple_extruders) { this->placeholder_parser().set("current_extruder", extruder_id); - this->placeholder_parser().set("retraction_distance_when_cut", m_config.retraction_distances_when_cut.get_at(extruder_id)); - this->placeholder_parser().set("long_retraction_when_cut", m_config.long_retractions_when_cut.get_at(extruder_id)); std::string gcode; // Append the filament start G-code. const std::string &filament_start_gcode = m_config.filament_start_gcode.get_at(extruder_id); if (! filament_start_gcode.empty()) { // Process the filament_start_gcode for the filament. - gcode += this->placeholder_parser_process("filament_start_gcode", filament_start_gcode, extruder_id); + DynamicConfig config; + config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index)); + config.set_key_value("layer_z", new ConfigOptionFloat(this->writer().get_position().z() - m_config.z_offset.value)); + config.set_key_value("max_layer_z", new ConfigOptionFloat(m_max_layer_z)); + config.set_key_value("filament_extruder_id", new ConfigOptionInt(int(extruder_id))); + config.set_key_value("retraction_distance_when_cut", + new ConfigOptionFloat(m_config.retraction_distances_when_cut.get_at(extruder_id))); + config.set_key_value("long_retraction_when_cut", new ConfigOptionBool(m_config.long_retractions_when_cut.get_at(extruder_id))); + + gcode += this->placeholder_parser_process("filament_start_gcode", filament_start_gcode, extruder_id, &config); check_add_eol(gcode); } if (m_config.enable_pressure_advance.get_at(extruder_id)) { gcode += m_writer.set_pressure_advance(m_config.pressure_advance.get_at(extruder_id)); + // Orca: Adaptive PA + // Reset Adaptive PA processor last PA value + m_pa_processor->resetPreviousPA(m_config.pressure_advance.get_at(extruder_id)); } gcode += m_writer.toolchange(extruder_id); @@ -6054,7 +6204,12 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z, bool b unsigned int old_extruder_id = m_writer.extruder()->id(); const std::string &filament_end_gcode = m_config.filament_end_gcode.get_at(old_extruder_id); if (! filament_end_gcode.empty()) { - gcode += placeholder_parser_process("filament_end_gcode", filament_end_gcode, old_extruder_id); + DynamicConfig config; + config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index)); + config.set_key_value("layer_z", new ConfigOptionFloat(m_writer.get_position().z() - m_config.z_offset.value)); + config.set_key_value("max_layer_z", new ConfigOptionFloat(m_max_layer_z)); + config.set_key_value("filament_extruder_id", new ConfigOptionInt(int(old_extruder_id))); + gcode += placeholder_parser_process("filament_end_gcode", filament_end_gcode, old_extruder_id, &config); check_add_eol(gcode); } } @@ -6092,12 +6247,10 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z, bool b 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); - if (m_config.purge_in_prime_tower || is_BBL_Printer()) { - wipe_volume = flush_matrix[previous_extruder_id * number_of_extruders + extruder_id]; - wipe_volume *= m_config.flush_multiplier; - } else { - wipe_volume = m_config.prime_volume; - } + //Orca: always calculate wipe volume and hence provide correct flush_length, so that MMU devices with cutter and purge bin (e.g. ERCF_v2 with a filament cutter or Filametrix can take advantage of it) + wipe_volume = flush_matrix[previous_extruder_id * number_of_extruders + extruder_id]; + 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; //BBS: must clean m_start_gcode_filament @@ -6166,6 +6319,8 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z, bool b std::string toolchange_gcode_parsed; //Orca: Ignore change_filament_gcode if is the first call for a tool change and manual_filament_change is enabled if (!change_filament_gcode.empty() && !(m_config.manual_filament_change.value && m_toolchange_count == 1)) { + dyn_config.set_key_value("toolchange_z", new ConfigOptionFloat(print_z)); + 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; @@ -6216,7 +6371,12 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z, bool b const std::string &filament_start_gcode = m_config.filament_start_gcode.get_at(extruder_id); if (! filament_start_gcode.empty()) { // Process the filament_start_gcode for the new filament. - gcode += this->placeholder_parser_process("filament_start_gcode", filament_start_gcode, extruder_id); + DynamicConfig config; + config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index)); + config.set_key_value("layer_z", new ConfigOptionFloat(this->writer().get_position().z() - m_config.z_offset.value)); + config.set_key_value("max_layer_z", new ConfigOptionFloat(m_max_layer_z)); + config.set_key_value("filament_extruder_id", new ConfigOptionInt(int(extruder_id))); + gcode += this->placeholder_parser_process("filament_start_gcode", filament_start_gcode, extruder_id, &config); check_add_eol(gcode); } // Set the new extruder to the operating temperature. @@ -6304,10 +6464,12 @@ Vec2d GCode::point_to_gcode(const Point &point) const // convert a model-space scaled point into G-code coordinates Point GCode::gcode_to_point(const Vec2d &point) const { - Vec2d extruder_offset = EXTRUDER_CONFIG(extruder_offset); - return Point( - scale_(point(0) - m_origin(0) + extruder_offset(0)), - scale_(point(1) - m_origin(1) + extruder_offset(1))); + Vec2d pt = point - m_origin; + if (const Extruder *extruder = m_writer.extruder(); extruder) + // This function may be called at the very start from toolchange G-code when the extruder is not assigned yet. + pt += m_config.extruder_offset.get_at(extruder->id()); + return scaled(pt); + } Vec2d GCode::point_to_gcode_quantized(const Point& point) const diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp index 18ea653546a..256853c48cf 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -24,6 +24,8 @@ #include "GCode/PressureEqualizer.hpp" #include "GCode/SmallAreaInfillFlowCompensator.hpp" +// ORCA: post processor below used for Dynamic Pressure advance +#include "GCode/AdaptivePAProcessor.hpp" #include #include @@ -43,14 +45,13 @@ class ConstPrintObjectPtrsAdaptor; class OozePrevention { public: bool enable; - Points standby_points; OozePrevention() : enable(false) {} std::string pre_toolchange(GCode &gcodegen); std::string post_toolchange(GCode &gcodegen); private: - int _get_temp(GCode &gcodegen); + int _get_temp(const GCode &gcodegen) const; }; class Wipe { @@ -358,6 +359,19 @@ class GCode { std::string extrude_loop(ExtrusionLoop loop, std::string description, double speed = -1., const ExtrusionEntitiesPtr& region_perimeters = ExtrusionEntitiesPtr()); std::string extrude_multi_path(ExtrusionMultiPath multipath, std::string description = "", double speed = -1.); std::string extrude_path(ExtrusionPath path, std::string description = "", double speed = -1.); + + // Orca: Adaptive PA variables + // Used for adaptive PA when extruding paths with multiple, varying flow segments. + // This contains the sum of the mm3_per_mm values weighted by the length of each path segment. + // The m_multi_flow_segment_path_pa_set constrains the PA change request to the first extrusion segment. + // It sets the mm3_mm value for the adaptive PA post processor to be the average of that path + // as calculated and stored in the m_multi_segment_path_average_mm3_per_mm value + double m_multi_flow_segment_path_average_mm3_per_mm = 0; + bool m_multi_flow_segment_path_pa_set = false; + // Adaptive PA last set flow to enable issuing of PA change commands when adaptive PA for overhangs + // is enabled + double m_last_mm3_mm = 0; + // Orca: Adaptive PA code segment end // Extruding multiple objects with soluble / non-soluble / combined supports // on a multi-material printer, trying to minimize tool switches. @@ -540,11 +554,13 @@ class GCode { std::unique_ptr m_spiral_vase; std::unique_ptr m_pressure_equalizer; + + std::unique_ptr m_pa_processor; std::unique_ptr m_wipe_tower; std::unique_ptr m_small_area_infill_flow_compensator; - + // Heights (print_z) at which the skirt has already been extruded. std::vector m_skirt_done; // Has the brim been extruded already? Brim is being extruded only for the first object of a multi-object print. diff --git a/src/libslic3r/GCode/AdaptivePAInterpolator.cpp b/src/libslic3r/GCode/AdaptivePAInterpolator.cpp new file mode 100644 index 00000000000..2681ab13b21 --- /dev/null +++ b/src/libslic3r/GCode/AdaptivePAInterpolator.cpp @@ -0,0 +1,114 @@ +// AdaptivePAInterpolator.cpp +// OrcaSlicer +// +// Implementation file for the AdaptivePAInterpolator class, providing methods to parse data and perform PA interpolation. + +#include "AdaptivePAInterpolator.hpp" +#include +#include +#include +#include + +/** + * @brief Parses the input data and sets up the interpolators. + * @param data A string containing the data in CSV format (PA, flow rate, acceleration). + * @return 0 on success, -1 on error. + */ +int AdaptivePAInterpolator::parseAndSetData(const std::string& data) { + flow_interpolators_.clear(); + accelerations_.clear(); + + try { + std::istringstream ss(data); + std::string line; + std::map>> acc_to_flow_pa; + + while (std::getline(ss, line)) { + std::istringstream lineStream(line); + std::string value; + double paValue, flowRate, acceleration; + paValue = flowRate = acceleration = 0.f; // initialize all to zero. + + // Parse PA value + if (std::getline(lineStream, value, ',')) { + paValue = std::stod(value); + } + + // Parse flow rate value + if (std::getline(lineStream, value, ',')) { + flowRate = std::stod(value); + } + + // Parse acceleration value + if (std::getline(lineStream, value, ',')) { + acceleration = std::stod(value); + } + + // Store the parsed values in a map with acceleration as the key + acc_to_flow_pa[acceleration].emplace_back(flowRate, paValue); + } + + // Iterate through the map to set up the interpolators + for (const auto& kv : acc_to_flow_pa) { + double acceleration = kv.first; + const auto& data = kv.second; + + std::vector flowRates; + std::vector paValues; + + for (const auto& pair : data) { + flowRates.push_back(pair.first); + paValues.push_back(pair.second); + } + + // Only set up the interpolator if there are enough data points + if (flowRates.size() > 1) { + PchipInterpolatorHelper interpolator(flowRates, paValues); + flow_interpolators_[acceleration] = interpolator; + accelerations_.push_back(acceleration); + } + } + } catch (const std::exception&) { + m_isInitialised = false; + return -1; // Error: Exception during parsing + } + m_isInitialised = true; + return 0; // Success +} + +/** + * @brief Interpolates the PA value for the given flow rate and acceleration. + * @param flow_rate The flow rate at which to interpolate. + * @param acceleration The acceleration at which to interpolate. + * @return The interpolated PA value, or -1 if interpolation fails. + */ +double AdaptivePAInterpolator::operator()(double flow_rate, double acceleration) { + std::vector pa_values; + std::vector acc_values; + + // Estimate PA value for every flow to PA model for the given flow rate + for (const auto& kv : flow_interpolators_) { + double pa_value = kv.second.interpolate(flow_rate); + + // Check if the interpolated PA value is valid + if (pa_value != -1) { + pa_values.push_back(pa_value); + acc_values.push_back(kv.first); + } + } + + // Check if there are enough acceleration values for interpolation + if (acc_values.size() < 2) { + // Special case: Only one acceleration value + if (acc_values.size() == 1) { + return std::round(pa_values[0] * 1000.0) / 1000.0; // Rounded to 3 decimal places + } + return -1; // Error: Not enough data points for interpolation + } + + // Create a new PchipInterpolatorHelper for PA-acceleration interpolation + // Use the estimated PA values from the for loop above and their corresponding accelerations to + // generate the new PCHIP model. Then run this model to interpolate the PA value for the given acceleration value. + PchipInterpolatorHelper pa_accel_interpolator(acc_values, pa_values); + return std::round(pa_accel_interpolator.interpolate(acceleration) * 1000.0) / 1000.0; // Rounded to 3 decimal places +} diff --git a/src/libslic3r/GCode/AdaptivePAInterpolator.hpp b/src/libslic3r/GCode/AdaptivePAInterpolator.hpp new file mode 100644 index 00000000000..8303af5490d --- /dev/null +++ b/src/libslic3r/GCode/AdaptivePAInterpolator.hpp @@ -0,0 +1,54 @@ +// AdaptivePAInterpolator.hpp +// OrcaSlicer +// +// Header file for the AdaptivePAInterpolator class, responsible for interpolating pressure advance (PA) values based on flow rate and acceleration using PCHIP interpolation. + +#ifndef ADAPTIVEPAINTERPOLATOR_HPP +#define ADAPTIVEPAINTERPOLATOR_HPP + +#include +#include +#include +#include "PchipInterpolatorHelper.hpp" + +/** + * @class AdaptivePAInterpolator + * @brief A class to interpolate pressure advance (PA) values based on flow rate and acceleration using Piecewise Cubic Hermite Interpolating Polynomial (PCHIP) interpolation. + */ +class AdaptivePAInterpolator { +public: + /** + * @brief Default constructor. + */ + AdaptivePAInterpolator() : m_isInitialised(false) {} + + /** + * @brief Parses the input data and sets up the interpolators. + * @param data A string containing the data in CSV format (PA, flow rate, acceleration). + * @return 0 on success, -1 on error. + */ + int parseAndSetData(const std::string& data); + + /** + * @brief Interpolates the PA value for the given flow rate and acceleration. + * @param flow_rate The flow rate at which to interpolate. + * @param acceleration The acceleration at which to interpolate. + * @return The interpolated PA value, or -1 if interpolation fails. + */ + double operator()(double flow_rate, double acceleration); + + /** + * @brief Returns the initialization status. + * @return The value of m_isInitialised. + */ + bool isInitialised() const { + return m_isInitialised; + } + +private: + std::map flow_interpolators_; ///< Map each acceleration to a flow-rate-to-PA interpolator. + std::vector accelerations_; ///< Store unique accelerations. + bool m_isInitialised; +}; + +#endif // ADAPTIVEPAINTERPOLATOR_HPP diff --git a/src/libslic3r/GCode/AdaptivePAProcessor.cpp b/src/libslic3r/GCode/AdaptivePAProcessor.cpp new file mode 100644 index 00000000000..3d87a660adf --- /dev/null +++ b/src/libslic3r/GCode/AdaptivePAProcessor.cpp @@ -0,0 +1,285 @@ +// AdaptivePAProcessor.cpp +// OrcaSlicer +// +// Implementation of the AdaptivePAProcessor class, responsible for processing G-code layers with adaptive pressure advance. + +#include "../GCode.hpp" +#include "AdaptivePAProcessor.hpp" +#include +#include +#include + +namespace Slic3r { + +/** + * @brief Constructor for AdaptivePAProcessor. + * + * This constructor initializes the AdaptivePAProcessor with a reference to a GCode object. + * It also initializes the configuration reference, pressure advance interpolation object, + * and regular expression patterns used for processing the G-code. + * + * @param gcodegen A reference to the GCode object that generates the G-code. + */ +AdaptivePAProcessor::AdaptivePAProcessor(GCode &gcodegen, const std::vector &tools_used) + : m_gcodegen(gcodegen), + m_config(gcodegen.config()), + m_last_predicted_pa(0.0), + m_max_next_feedrate(0.0), + m_next_feedrate(0.0), + m_current_feedrate(0.0), + m_last_extruder_id(-1), + m_pa_change_pattern(R"(; PA_CHANGE:T(\d+) MM3MM:([0-9]*\.[0-9]+) ACCEL:(\d+) BR:(\d+) RC:(\d+) OV:(\d+))"), + m_g1_f_pattern(R"(G1 F([0-9]+))") +{ + // Constructor body can be used for further initialization if necessary + for (unsigned int tool : tools_used) { + // Only enable model for the tool if both PA and adaptive PA options are enabled + if(m_config.adaptive_pressure_advance.get_at(tool) && m_config.enable_pressure_advance.get_at(tool)){ + auto interpolator = std::make_unique(); + // Get calibration values from extruder + std::string pa_calibration_values = m_config.adaptive_pressure_advance_model.get_at(tool); + // Setup the model and store it in the tool-interpolation model map + interpolator->parseAndSetData(pa_calibration_values); + m_AdaptivePAInterpolators[tool] = std::move(interpolator); + } + } +} + +// Method to get the interpolator for a specific tool ID +AdaptivePAInterpolator* AdaptivePAProcessor::getInterpolator(unsigned int tool_id) { + auto it = m_AdaptivePAInterpolators.find(tool_id); + if (it != m_AdaptivePAInterpolators.end()) { + return it->second.get(); + } + return nullptr; // Handle the case where the tool_id is not found +} + +/** + * @brief Processes a layer of G-code and applies adaptive pressure advance. + * + * This method processes the G-code for a single layer, identifying the appropriate + * pressure advance settings and applying them based on the current state and configurations. + * + * @param gcode A string containing the G-code for the layer. + * @return A string containing the processed G-code with adaptive pressure advance applied. + */ +std::string AdaptivePAProcessor::process_layer(std::string &&gcode) { + std::istringstream stream(gcode); + std::string line; + std::ostringstream output; + double mm3mm_value = 0.0; + unsigned int accel_value = 0; + std::string pa_change_line; + bool wipe_command = false; + + // Iterate through each line of the layer G-code + while (std::getline(stream, line)) { + + // If a wipe start command is found, ignore all speed changes till the wipe end part is found + if (line.find("WIPE_START") != std::string::npos) { + wipe_command = true; + } + + // Update current feed rate (this is preceding an extrude or wipe command only). Ignore any speed changes that are emitted during a wipe move. + // Travel feedrate is output as part of a G1 X Y (Z) F command + if ( (line.find("G1 F") == 0) && (!wipe_command) ) { // prune lines quickly before running pattern matching + std::size_t pos = line.find('F'); + if (pos != std::string::npos){ + m_current_feedrate = std::stod(line.substr(pos + 1)) / 60.0; // Convert from mm/min to mm/s + } + } + + // Wipe end found, continue searching for current feed rate. + if (line.find("WIPE_END") != std::string::npos) { + wipe_command = false; + } + + // Reset next feedrate to zero enable searching for the first encountered + // feedrate change command after the PA change tag. + m_next_feedrate = 0; + + // Check for PA_CHANGE pattern in the line + // We will only find this pattern for extruders where adaptive PA is enabled. + // If there is mixed extruders in the layer (i.e. with adaptive PA on and off + // this will only update the extruders where the adaptive PA is enabled + // as these are the only ones where the PA pattern is output + // For a mixed extruder layer with both adaptive PA enabled and disabled when the new tool is selected + // the PA for that material is set. As no tag below will be found for this extruder, the original PA is retained. + if (line.find("; PA_CHANGE") == 0) { // prune lines quickly before running regex check as regex is more expensive to run + if (std::regex_search(line, m_match, m_pa_change_pattern)) { + int extruder_id = std::stoi(m_match[1].str()); + mm3mm_value = std::stod(m_match[2].str()); + accel_value = std::stod(m_match[3].str()); + int isBridge = std::stoi(m_match[4].str()); + int roleChange = std::stoi(m_match[5].str()); + int isOverhang = std::stoi(m_match[6].str()); + + // Check if the extruder ID has changed + bool extruder_changed = (extruder_id != m_last_extruder_id); + m_last_extruder_id = extruder_id; + + // Save the PA_CHANGE line to output later after finding feedrate + pa_change_line = line; + + // Look ahead for feedrate before any line containing both G and E commands + std::streampos current_pos = stream.tellg(); + std::string next_line; + double temp_feed_rate = 0; + bool extrude_move_found = false; + int line_counter = 0; + + // Carry on searching on the layer gcode lines to find the print speed + // If a G1 Fxxxx pattern is found, the new speed is identified + // Carry on searching for feedrates to find the maximum print speed + // until a feature change pattern or a wipe command is detected + while (std::getline(stream, next_line)) { + line_counter++; + // Found an extrude move, set extrude move found flag and move to the next line + if ((!extrude_move_found) && next_line.find("G1 ") == 0 && + next_line.find('X') != std::string::npos && + next_line.find('Y') != std::string::npos && + next_line.find('E') != std::string::npos) { + // Pattern matched, break the loop + extrude_move_found = true; + continue; + } + + // Found a travel move after we've found at least one extrude move + // We now need to stop searching for speeds as we're done printing this island + if (next_line.find("G1 ") == 0 && + next_line.find('X') != std::string::npos && // X is present + next_line.find('Y') != std::string::npos && // Y is present + next_line.find('E') == std::string::npos && // no "E" present + extrude_move_found) { // An extrude move has happened already + // First travel move after extrude move found. Stop searching + break; + } + + // Found a WIPE command + // If we have a wipe command, usually the wipe speed is different (larger) than the max print speed + // for that feature. So stop searching if a wipe command is found because we do not want to overwrite the + // speed used for PA calculation by the Wipe speed. + if (next_line.find("WIPE") != std::string::npos) { + break; // Stop searching if wipe command is found + } + + // Found another PA_CHANGE pattern + // If RC = 1, it means we have a role change, so stop trying to find the max speed for the feature. + // This is possibly redundant as a new feature would always have a travel move preceding it + // but check anyway. However check last so to not invoke it without reason... + if (next_line.find("; PA_CHANGE") == 0) { // prune lines quickly before running pattern matching + std::size_t rc_pos = next_line.rfind("RC:"); + if (rc_pos != std::string::npos) { + int rc_value = std::stoi(next_line.substr(rc_pos + 3)); + if (rc_value == 1) { + break; // Role change found, stop searching + } + } + } + + // Found a Feedrate change command + // If the new feedrate is greater than any feedrate encountered so far after the PA change command, use that to calculate the PA value + // Also if this is the first feedrate we encounter, store it as the next feedrate. + if (next_line.find("G1 F") == 0) { // prune lines quickly before running pattern matching + std::size_t pos = next_line.find('F'); + if (pos != std::string::npos) { + double feedrate = std::stod(next_line.substr(pos + 1)) / 60.0; // Convert from mm/min to mm/s + if(line_counter==1){ // this is the first command after the PA change pattern, and hence before any extrusion has happened. Reset + // the current speed to this one + m_current_feedrate = feedrate; + } + if (temp_feed_rate < feedrate) { + temp_feed_rate = feedrate; + } + if(m_next_feedrate < EPSILON){ // This the first feedrate found after the PA Change command + m_next_feedrate = feedrate; + } + } + continue; + } + } + + // If we found a new maximum feedrate after the PA change command, use it + if (temp_feed_rate > 0) { + m_max_next_feedrate = temp_feed_rate; + } else // If we didnt find a new feedrate at all after the PA change command, use the current feedrate. + m_max_next_feedrate = m_current_feedrate; + + // Restore stream position + stream.clear(); + stream.seekg(current_pos); + + // Calculate the predicted PA using the upcomming feature maximum feedrate + // Get the interpolator for the active tool + AdaptivePAInterpolator* interpolator = getInterpolator(m_last_extruder_id); + + double predicted_pa = 0; + double adaptive_PA_speed = 0; + + if(!interpolator){ // Tool not found in the interpolator map + // Tool not found in the PA interpolator to tool map + predicted_pa = m_config.enable_pressure_advance.get_at(m_last_extruder_id) ? m_config.pressure_advance.get_at(m_last_extruder_id) : 0; + if(m_config.gcode_comments) output << "; APA: Tool doesnt have APA enabled\n"; + } else if (!interpolator->isInitialised() || (!m_config.adaptive_pressure_advance.get_at(m_last_extruder_id)) ) + // Check if the model is not initialised by the constructor for the active extruder + // Also check that adaptive PA is enabled for that extruder. This should not be needed + // as the PA change flag should not be set upstream (in the GCode.cpp file) if adaptive PA is disabled + // however check for robustness sake. + { + // Model failed or adaptive pressure advance not enabled - use default value from m_config + predicted_pa = m_config.enable_pressure_advance.get_at(m_last_extruder_id) ? m_config.pressure_advance.get_at(m_last_extruder_id) : 0; + if(m_config.gcode_comments) output << "; APA: Interpolator setup failed, using default pressure advance\n"; + } else { // Model setup succeeded + // Proceed to identify the print speed to use to calculate the adaptive PA value + if(isOverhang > 0){ // If we are in an overhang area, use the minimum between current print speed + // and any speed immediately after + // In most cases the current speed is the minimum one; + // however if slowdown for layer cooling is enabled, the overhang + // may be slowed down more than the current speed. + adaptive_PA_speed = (m_current_feedrate == 0 || m_next_feedrate == 0) ? + std::max(m_current_feedrate, m_next_feedrate) : + std::min(m_current_feedrate, m_next_feedrate); + }else{ // If this is not an overhang area, use the maximum speed from the current and + // upcomming speeds for the island. + adaptive_PA_speed = std::max(m_max_next_feedrate,m_current_feedrate); + } + + // Calculate the adaptive PA value + predicted_pa = (*interpolator)(mm3mm_value * adaptive_PA_speed, accel_value); + + // This is a bridge, use the dedicated PA setting. + if(isBridge && m_config.adaptive_pressure_advance_bridges.get_at(m_last_extruder_id) > EPSILON) + predicted_pa = m_config.adaptive_pressure_advance_bridges.get_at(m_last_extruder_id); + + if (predicted_pa < 0) { // If extrapolation fails, fall back to the default PA for the extruder. + predicted_pa = m_config.enable_pressure_advance.get_at(m_last_extruder_id) ? m_config.pressure_advance.get_at(m_last_extruder_id) : 0; + if(m_config.gcode_comments) output << "; APA: Interpolation failed, using fallback pressure advance value\n"; + } + } + if(m_config.gcode_comments) { + // Output debug GCode comments + output << pa_change_line << '\n'; // Output PA change command tag + if(isBridge && m_config.adaptive_pressure_advance_bridges.get_at(m_last_extruder_id) > EPSILON) + output << "; APA Model Override (bridge)\n"; + output << "; APA Current Speed: " << std::to_string(m_current_feedrate) << "\n"; + output << "; APA Next Speed: " << std::to_string(m_next_feedrate) << "\n"; + output << "; APA Max Next Speed: " << std::to_string(m_max_next_feedrate) << "\n"; + output << "; APA Speed Used: " << std::to_string(adaptive_PA_speed) << "\n"; + output << "; APA Flow rate: " << std::to_string(mm3mm_value * m_max_next_feedrate) << "\n"; + output << "; APA Prev PA: " << std::to_string(m_last_predicted_pa) << " New PA: " << std::to_string(predicted_pa) << "\n"; + } + if (extruder_changed || std::fabs(predicted_pa - m_last_predicted_pa) > EPSILON) { + output << m_gcodegen.writer().set_pressure_advance(predicted_pa); // Use m_writer to set pressure advance + m_last_predicted_pa = predicted_pa; // Update the last predicted PA value + } + } + }else { + // Output the current line as this isn't a PA change tag + output << line << '\n'; + } + } + + return output.str(); +} + +} // namespace Slic3r diff --git a/src/libslic3r/GCode/AdaptivePAProcessor.hpp b/src/libslic3r/GCode/AdaptivePAProcessor.hpp new file mode 100644 index 00000000000..b9d2ef15fb3 --- /dev/null +++ b/src/libslic3r/GCode/AdaptivePAProcessor.hpp @@ -0,0 +1,85 @@ +// AdaptivePAProcessor.hpp +// OrcaSlicer +// +// Header file for the AdaptivePAProcessor class, responsible for processing G-code layers for the purposes of applying adaptive pressure advance. + +#ifndef ADAPTIVEPAPROCESSOR_H +#define ADAPTIVEPAPROCESSOR_H + +#include +#include +#include +#include +#include +#include +#include "AdaptivePAInterpolator.hpp" + +namespace Slic3r { + +// Forward declaration of GCode class +class GCode; + +/** + * @brief Class for processing G-code layers with adaptive pressure advance. + */ +class AdaptivePAProcessor { +public: + /** + * @brief Constructor for AdaptivePAProcessor. + * + * This constructor initializes the AdaptivePAProcessor with a reference to a GCode object. + * It also initializes the configuration reference, pressure advance interpolation object, + * and regular expression patterns used for processing the G-code. + * + * @param gcodegen A reference to the GCode object that generates the G-code. + */ + AdaptivePAProcessor(GCode &gcodegen, const std::vector &tools_used); + + /** + * @brief Processes a layer of G-code and applies adaptive pressure advance. + * + * This method processes the G-code for a single layer, identifying the appropriate + * pressure advance settings and applying them based on the current state and configurations. + * + * @param gcode A string containing the G-code for the layer. + * @return A string containing the processed G-code with adaptive pressure advance applied. + */ + std::string process_layer(std::string &&gcode); + + /** + * @brief Manually sets adaptive PA internal value. + * + * This method manually sets the adaptive PA internally held value. + * Call this when changing tools or in any other case where the internally assumed last PA value may be incorrect + */ + void resetPreviousPA(double PA){ m_last_predicted_pa = PA; }; + +private: + GCode &m_gcodegen; ///< Reference to the GCode object. + std::unordered_map> m_AdaptivePAInterpolators; ///< Map between Interpolator objects and tool ID's + const PrintConfig &m_config; ///< Reference to the print configuration. + double m_last_predicted_pa; ///< Last predicted pressure advance value. + double m_max_next_feedrate; ///< Maximum feed rate (speed) for the upcomming island. If no speed is found, the previous island speed is used. + double m_next_feedrate; ///< First feed rate (speed) for the upcomming island. + double m_current_feedrate; ///< Current, latest feedrate. + int m_last_extruder_id; ///< Last used extruder ID. + + std::regex m_pa_change_pattern; ///< Regular expression to detect PA_CHANGE pattern. + std::regex m_g1_f_pattern; ///< Regular expression to detect G1 F pattern. + std::smatch m_match; ///< Match results for regular expressions. + + /** + * @brief Get the PA interpolator attached to the specified tool ID. + * + * This method manually sets the adaptive PA internally held value. + * Call this when changing tools or in any other case where the internally assumed last PA value may be incorrect + * + * @param An integer with the tool ID for which the PA interpolation model is to be returned. + * @return The Adaptive PA Interpolator object corresponding to that tool. + */ + AdaptivePAInterpolator* getInterpolator(unsigned int tool_id); +}; + +} // namespace Slic3r + +#endif // ADAPTIVEPAPROCESSOR_H diff --git a/src/libslic3r/GCode/ConflictChecker.cpp b/src/libslic3r/GCode/ConflictChecker.cpp index fb69372a9af..8b8e43aea2c 100644 --- a/src/libslic3r/GCode/ConflictChecker.cpp +++ b/src/libslic3r/GCode/ConflictChecker.cpp @@ -28,7 +28,6 @@ inline Grids line_rasterization(const Line &line, int64_t xdist = scale_(1), int 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; diff --git a/src/libslic3r/GCode/ExtrusionProcessor.hpp b/src/libslic3r/GCode/ExtrusionProcessor.hpp index c6c1c102dea..64f7a718a21 100644 --- a/src/libslic3r/GCode/ExtrusionProcessor.hpp +++ b/src/libslic3r/GCode/ExtrusionProcessor.hpp @@ -38,7 +38,8 @@ template estimate_points_properties(const POINTS &input_points, const AABBTreeLines::LinesDistancer &unscaled_prev_layer, float flow_width, - float max_line_length = -1.0f) + float max_line_length = -1.0f, + float min_distance = -1.0f) { bool looped = input_points.front() == input_points.back(); std::function get_prev_index = [](size_t idx, size_t count) { @@ -118,7 +119,13 @@ std::vector estimate_points_properties(const POINTS if ((curr.distance > -boundary_offset && curr.distance < boundary_offset + 2.0f) || (next.distance > -boundary_offset && next.distance < boundary_offset + 2.0f)) { double line_len = (next.position - curr.position).norm(); - if (line_len > 4.0f) { + + // ORCA: Segment path to smaller lines by adding additional points only if the path has an overhang that + // will trigger a slowdown and the path is also reasonably large, i.e. 2mm in length or more + // If there is no overhang in the start/end point, dont segment it. + // Ignore this check if the control of segmentation for overhangs is disabled (min_distance=-1) + if ((min_distance > 0 && ((std::abs(curr.distance) > min_distance) || (std::abs(next.distance) > min_distance)) && line_len >= 2.f) || + (min_distance <= 0 && line_len > 4.0f)) { double a0 = std::clamp((curr.distance + 3 * boundary_offset) / line_len, 0.0, 1.0); double a1 = std::clamp(1.0f - (next.distance + 3 * boundary_offset) / line_len, 0.0, 1.0); double t0 = std::min(a0, a1); @@ -131,7 +138,11 @@ std::vector estimate_points_properties(const POINTS ExtendedPoint new_p{}; new_p.position = p0; new_p.distance = float(p0_dist + boundary_offset); - new_points.push_back(new_p); + if( (std::abs(p0_dist) > min_distance) || (min_distance<=0)){ + // ORCA: only create a new point in the path if the new point overhang distance will be used to generate a speed change + // or if this option is disabled (min_distance<=0) + new_points.push_back(new_p); + } } if (t1 > 0.0) { auto p1 = curr.position + t1 * (next.position - curr.position); @@ -140,7 +151,11 @@ std::vector estimate_points_properties(const POINTS ExtendedPoint new_p{}; new_p.position = p1; new_p.distance = float(p1_dist + boundary_offset); - new_points.push_back(new_p); + if( (std::abs(p1_dist) > min_distance) || (min_distance<=0)){ + // ORCA: only create a new point in the path if the new point overhang distance will be used to generate a speed change + // or if this option is disabled (min_distance<=0) + new_points.push_back(new_p); + } } } } @@ -300,9 +315,30 @@ class ExtrusionQualityEstimator last_section = section; } } + + // Orca: Find the smallest overhang distance where speed adjustments begin + float smallest_distance_with_lower_speed = std::numeric_limits::infinity(); // Initialize to a large value + bool found = false; + for (const auto& section : speed_sections) { + if (section.second <= original_speed) { + if (section.first < smallest_distance_with_lower_speed) { + smallest_distance_with_lower_speed = section.first; + found = true; + } + } + } - std::vector extended_points = - estimate_points_properties(path.polyline.points, prev_layer_boundaries[current_object], path.width); + // If a meaningful (i.e. needing slowdown) overhang distance was not found, then we shouldn't split the lines + if (!found) + smallest_distance_with_lower_speed=-1.f; + + // Orca: Pass to the point properties estimator the smallest ovehang distance that triggers a slowdown (smallest_distance_with_lower_speed) + std::vector extended_points = estimate_points_properties + (path.polyline.points, + prev_layer_boundaries[current_object], + path.width, + -1, + smallest_distance_with_lower_speed); const auto width_inv = 1.0f / path.width; std::vector processed_points; processed_points.reserve(extended_points.size()); @@ -323,7 +359,7 @@ class ExtrusionQualityEstimator // The whole segment gets slower unnecesarily. For these long lines, we do additional check whether it is worth slowing down. // NOTE that this is still quite rough approximation, e.g. we are still checking lines only near the middle point // TODO maybe split the lines into smaller segments before running this alg? but can be demanding, and GCode will be huge - if (len > 8) { + if (len > 2) { Vec2d dir = Vec2d(next.position - curr.position) / len; Vec2d right = Vec2d(-dir.y(), dir.x()); @@ -376,7 +412,7 @@ class ExtrusionQualityEstimator t = std::clamp(t, 0.0f, 1.0f); final_speed = (1.0f - t) * speed_sections[section_idx].second + t * speed_sections[section_idx + 1].second; } - return final_speed; + return round(final_speed); }; float extrusion_speed = std::min(calculate_speed(curr.distance), calculate_speed(next.distance)); diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index 648b570d827..c8d61bc4883 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -1,4 +1,5 @@ #include "ExtrusionEntity.hpp" +#include "GCodeWriter.hpp" #include "PrintConfig.hpp" #include "libslic3r/libslic3r.h" #include "libslic3r/Utils.hpp" @@ -20,6 +21,7 @@ #include #include #include +#include #include #if __has_include() @@ -68,7 +70,8 @@ const std::vector GCodeProcessor::Reserved_Tags = { " MANUAL_TOOL_CHANGE ", "_DURING_PRINT_EXHAUST_FAN", " WIPE_TOWER_START", - " WIPE_TOWER_END" + " WIPE_TOWER_END", + " PA_CHANGE:" }; const std::vector GCodeProcessor::Reserved_Tags_compatible = { @@ -88,7 +91,8 @@ const std::vector GCodeProcessor::Reserved_Tags_compatible = { " MANUAL_TOOL_CHANGE ", "_DURING_PRINT_EXHAUST_FAN", " WIPE_TOWER_START", - " WIPE_TOWER_END" + " WIPE_TOWER_END", + " PA_CHANGE:" }; @@ -369,7 +373,7 @@ void GCodeProcessor::TimeMachine::calculate_time(size_t keep_last_n_blocks, floa //BBS if (block.flags.prepare_stage) prepare_time += block_time; - g1_times_cache.push_back({ block.g1_line_id, time }); + g1_times_cache.push_back({ block.g1_line_id, block.remaining_internal_g1_lines, time }); // update times for remaining time to printer stop placeholders auto it_stop_time = std::lower_bound(stop_times.begin(), stop_times.end(), block.g1_line_id, [](const StopTime& t, unsigned int value) { return t.g1_line_id < value; }); @@ -693,7 +697,9 @@ void GCodeProcessor::TimeProcessor::post_process(const std::string& filename, st if (!disable_m73 && !processed &&!is_temporary_decoration(gcode_line) && (GCodeReader::GCodeLine::cmd_is(gcode_line, "G1") || GCodeReader::GCodeLine::cmd_is(gcode_line, "G2") || - GCodeReader::GCodeLine::cmd_is(gcode_line, "G3"))) { + GCodeReader::GCodeLine::cmd_is(gcode_line, "G3") || + GCodeReader::GCodeLine::cmd_is(gcode_line, "G10")|| + GCodeReader::GCodeLine::cmd_is(gcode_line, "G11"))) { // remove temporary lines, add lines M73 where needed unsigned int extra_lines_count = process_line_move(g1_lines_counter ++); if (extra_lines_count > 0) @@ -941,6 +947,7 @@ void GCodeProcessorResult::reset() { printable_height = 0.0f; settings_ids.reset(); extruders_count = 0; + backtrace_enabled = false; extruder_colors = std::vector(); filament_diameters = std::vector(MIN_EXTRUDERS_COUNT, DEFAULT_FILAMENT_DIAMETER); required_nozzle_HRC = std::vector(MIN_EXTRUDERS_COUNT, DEFAULT_FILAMENT_HRC); @@ -1048,10 +1055,20 @@ void GCodeProcessor::apply_config(const PrintConfig& config) m_flavor = config.gcode_flavor; - // BBS + m_single_extruder_multi_material = config.single_extruder_multi_material; + size_t extruders_count = config.filament_diameter.values.size(); m_result.extruders_count = extruders_count; + // Orca: + m_is_XL_printer = is_XL_printer(config); + m_preheat_time = config.preheat_time; + m_preheat_steps = config.preheat_steps; + // sanity check + if(m_preheat_steps < 1) + m_preheat_steps = 1; + m_result.backtrace_enabled = m_preheat_time > 0 && (m_is_XL_printer || (!m_single_extruder_multi_material && extruders_count > 1)); + m_extruder_offsets.resize(extruders_count); m_extruder_colors.resize(extruders_count); m_result.filament_diameters.resize(extruders_count); @@ -1061,11 +1078,19 @@ void GCodeProcessor::apply_config(const PrintConfig& config) m_result.filament_costs.resize(extruders_count); m_result.filament_flow_ratios.resize(extruders_count); m_extruder_temps.resize(extruders_count); + m_extruder_temps_config.resize(extruders_count); + m_extruder_temps_first_layer_config.resize(extruders_count); m_result.nozzle_hrc = static_cast(config.nozzle_hrc.getInt()); m_result.nozzle_type = config.nozzle_type; for (size_t i = 0; i < extruders_count; ++ i) { m_extruder_offsets[i] = to_3d(config.extruder_offset.get_at(i).cast().eval(), 0.f); m_extruder_colors[i] = static_cast(i); + m_extruder_temps_first_layer_config[i] = static_cast(config.nozzle_temperature_initial_layer.get_at(i)); + m_extruder_temps_config[i] = static_cast(config.nozzle_temperature.get_at(i)); + if (m_extruder_temps_config[i] == 0) { + // This means the value should be ignored and first layer temp should be used. + m_extruder_temps_config[i] = m_extruder_temps_first_layer_config[i]; + } m_result.filament_diameters[i] = static_cast(config.filament_diameter.get_at(i)); m_result.required_nozzle_HRC[i] = static_cast(config.required_nozzle_HRC.get_at(i)); m_result.filament_densities[i] = static_cast(config.filament_density.get_at(i)); @@ -1554,6 +1579,8 @@ void GCodeProcessor::reset() m_detect_layer_based_on_tag = false; m_seams_count = 0; + m_preheat_time = 0.f; + m_preheat_steps = 1; #if ENABLE_GCODE_VIEWER_DATA_CHECKING m_mm3_per_mm_compare.reset(); @@ -1716,6 +1743,9 @@ void GCodeProcessor::finalize(bool post_process) #endif // ENABLE_GCODE_VIEWER_STATISTICS //BBS: update slice warning update_slice_warnings(); + + if (post_process) + run_post_process(); } float GCodeProcessor::get_time(PrintEstimatedStatistics::ETimeMode mode) const @@ -2927,7 +2957,7 @@ void GCodeProcessor::process_G0(const GCodeReader::GCodeLine& line) process_G1(line); } -void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) +void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line, const std::optional& remaining_internal_g1_lines) { float filament_diameter = (static_cast(m_extruder_id) < m_result.filament_diameters.size()) ? m_result.filament_diameters[m_extruder_id] : m_result.filament_diameters.back(); float filament_flowratio = (static_cast(m_extruder_id) < m_result.filament_flow_ratios.size()) ? m_result.filament_flow_ratios[m_extruder_id] : m_result.filament_flow_ratios.back(); @@ -2959,7 +2989,7 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) type = (delta_pos[Z] == 0.0f) ? EMoveType::Unretract : EMoveType::Travel; else if (delta_pos[X] != 0.0f || delta_pos[Y] != 0.0f) type = EMoveType::Extrude; - } + } else if (delta_pos[X] != 0.0f || delta_pos[Y] != 0.0f || delta_pos[Z] != 0.0f) type = EMoveType::Travel; @@ -3109,6 +3139,7 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) block.role = (type != EMoveType::Travel || m_extrusion_role == erCustom) ? m_extrusion_role : erNone; block.distance = distance; block.g1_line_id = m_g1_line_id; + block.remaining_internal_g1_lines = remaining_internal_g1_lines.has_value() ? *remaining_internal_g1_lines : 0; block.layer_id = std::max(1, m_layer_id); block.flags.prepare_stage = m_processing_start_custom_gcode; @@ -3163,7 +3194,7 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) } // calculates block acceleration - float acceleration = + float acceleration = (type == EMoveType::Travel) ? get_travel_acceleration(static_cast(i)) : (is_extrusion_only_move(delta_pos) ? get_retract_acceleration(static_cast(i)) : @@ -3303,10 +3334,10 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line) if (!m_seams_detector.has_first_vertex()) { m_seams_detector.set_first_vertex(new_pos); } else if (m_detect_layer_based_on_tag) { - // We may have sloped loop, drop any previous start pos if we have z increment - const std::optional first_vertex = m_seams_detector.get_first_vertex(); - if (new_pos.z() > first_vertex->z()) { - m_seams_detector.set_first_vertex(new_pos); + // We may have sloped loop, drop any previous start pos if we have z increment + const std::optional first_vertex = m_seams_detector.get_first_vertex(); + if (new_pos.z() > first_vertex->z()) { + m_seams_detector.set_first_vertex(new_pos); } } } @@ -3450,7 +3481,6 @@ void GCodeProcessor::process_G2_G3(const GCodeReader::GCodeLine& line) arc_length = ((int)line.p()) * 2 * PI * (start_point - m_arc_center).norm(); //BBS: Attention! arc_onterpolation does not support P mode while P is not 1. arc_interpolation(start_point, end_point, m_arc_center, (m_move_path_type == EMovePathType::Arc_move_ccw)); - float radian = ArcSegment::calc_arc_radian(start_point, end_point, m_arc_center, (m_move_path_type == EMovePathType::Arc_move_ccw)); Vec3f start_dir = Circle::calc_tangential_vector(start_point, m_arc_center, (m_move_path_type == EMovePathType::Arc_move_ccw)); Vec3f end_dir = Circle::calc_tangential_vector(end_point, m_arc_center, (m_move_path_type == EMovePathType::Arc_move_ccw)); @@ -3811,14 +3841,18 @@ void GCodeProcessor::process_G29(const GCodeReader::GCodeLine& line) void GCodeProcessor::process_G10(const GCodeReader::GCodeLine& line) { - // stores retract move - store_move_vertex(EMoveType::Retract); + GCodeReader::GCodeLine g10; + g10.set(Axis::E, -this->m_parser.config().retraction_length.get_at(m_extruder_id)); + g10.set(Axis::F, this->m_parser.config().retraction_speed.get_at(m_extruder_id) * 60); + process_G1(g10); } void GCodeProcessor::process_G11(const GCodeReader::GCodeLine& line) { - // stores unretract move - store_move_vertex(EMoveType::Unretract); + GCodeReader::GCodeLine g11; + g11.set(Axis::E, this->m_parser.config().retraction_length.get_at(m_extruder_id) + this->m_parser.config().retract_restart_extra.get_at(m_extruder_id)); + g11.set(Axis::F, this->m_parser.config().deretraction_speed.get_at(m_extruder_id) * 60); + process_G1(g11); } void GCodeProcessor::process_G20(const GCodeReader::GCodeLine& line) @@ -4348,6 +4382,729 @@ void GCodeProcessor::process_T(const std::string_view command) } } } +static void update_lines_ends_and_out_file_pos(const std::string& out_string, std::vector& lines_ends, size_t* out_file_pos) +{ + for (size_t i = 0; i < out_string.size(); ++i) { + if (out_string[i] == '\n') + lines_ends.emplace_back((out_file_pos != nullptr) ? *out_file_pos + i + 1 : i + 1); + } + if (out_file_pos != nullptr) + *out_file_pos += out_string.size(); +} + +void GCodeProcessor::run_post_process() +{ + FilePtr in{ boost::nowide::fopen(m_result.filename.c_str(), "rb") }; + if (in.f == nullptr) + throw Slic3r::RuntimeError(std::string("GCode processor post process export failed.\nCannot open file for reading.\n")); + + // temporary file to contain modified gcode + std::string out_path = m_result.filename + ".postprocess"; + FilePtr out{ boost::nowide::fopen(out_path.c_str(), "wb") }; + if (out.f == nullptr) + throw Slic3r::RuntimeError(std::string("GCode processor post process export failed.\nCannot open file for writing.\n")); + + std::vector filament_mm(m_result.extruders_count, 0.0); + std::vector filament_cm3(m_result.extruders_count, 0.0); + std::vector filament_g(m_result.extruders_count, 0.0); + std::vector filament_cost(m_result.extruders_count, 0.0); + + double filament_total_g = 0.0; + double filament_total_cost = 0.0; + + for (const auto& [id, volume] : m_result.print_statistics.total_volumes_per_extruder) { + filament_mm[id] = volume / (static_cast(M_PI) * sqr(0.5 * m_result.filament_diameters[id])); + filament_cm3[id] = volume * 0.001; + filament_g[id] = filament_cm3[id] * double(m_result.filament_densities[id]); + filament_cost[id] = filament_g[id] * double(m_result.filament_costs[id]) * 0.001; + filament_total_g += filament_g[id]; + filament_total_cost += filament_cost[id]; + } + + double total_g_wipe_tower = m_print->print_statistics().total_wipe_tower_filament; + + + auto time_in_minutes = [](float time_in_seconds) { + assert(time_in_seconds >= 0.f); + return int((time_in_seconds + 0.5f) / 60.0f); + }; + + auto time_in_last_minute = [](float time_in_seconds) { + assert(time_in_seconds <= 60.0f); + return time_in_seconds / 60.0f; + }; + + auto format_line_M73_main = [](const std::string& mask, int percent, int time) { + char line_M73[64]; + sprintf(line_M73, mask.c_str(), + std::to_string(percent).c_str(), + std::to_string(time).c_str()); + return std::string(line_M73); + }; + + auto format_line_M73_stop_int = [](const std::string& mask, int time) { + char line_M73[64]; + sprintf(line_M73, mask.c_str(), std::to_string(time).c_str()); + return std::string(line_M73); + }; + + auto format_time_float = [](float time) { + return Slic3r::float_to_string_decimal_point(time, 2); + }; + + auto format_line_M73_stop_float = [format_time_float](const std::string& mask, float time) { + char line_M73[64]; + sprintf(line_M73, mask.c_str(), format_time_float(time).c_str()); + return std::string(line_M73); + }; + + std::string gcode_line; + size_t g1_lines_counter = 0; + // keeps track of last exported pair + std::array, static_cast(PrintEstimatedStatistics::ETimeMode::Count)> last_exported_main; + for (size_t i = 0; i < static_cast(PrintEstimatedStatistics::ETimeMode::Count); ++i) { + last_exported_main[i] = { 0, time_in_minutes(m_time_processor.machines[i].time) }; + } + + // keeps track of last exported remaining time to next printer stop + std::array(PrintEstimatedStatistics::ETimeMode::Count)> last_exported_stop; + for (size_t i = 0; i < static_cast(PrintEstimatedStatistics::ETimeMode::Count); ++i) { + last_exported_stop[i] = time_in_minutes(m_time_processor.machines[i].time); + } + + // Helper class to modify and export gcode to file + class ExportLines + { + public: + struct Backtrace + { + float time{ 60.0f }; + int steps{ 10 }; + float time_step() const { return time / float(steps); } + }; + + enum class EWriteType + { + BySize, + ByTime + }; + + private: + struct LineData + { + std::string line; + std::array(PrintEstimatedStatistics::ETimeMode::Count)> times{ 0.0f, 0.0f }; + }; + + enum ETimeMode + { + Normal = static_cast(PrintEstimatedStatistics::ETimeMode::Normal), + Stealth = static_cast(PrintEstimatedStatistics::ETimeMode::Stealth) + }; + +#ifndef NDEBUG + class Statistics + { + ExportLines& m_parent; + size_t m_max_size{ 0 }; + size_t m_lines_count{ 0 }; + size_t m_max_lines_count{ 0 }; + + public: + explicit Statistics(ExportLines& parent) + : m_parent(parent) + {} + + void add_line(size_t line_size) { + ++m_lines_count; + m_max_size = std::max(m_max_size, m_parent.get_size() + line_size); + m_max_lines_count = std::max(m_max_lines_count, m_lines_count); + } + + void remove_line() { --m_lines_count; } + void remove_all_lines() { m_lines_count = 0; } + }; + + Statistics m_statistics; +#endif // NDEBUG + + EWriteType m_write_type{ EWriteType::BySize }; + // Time machines containing g1 times cache + const std::array(PrintEstimatedStatistics::ETimeMode::Count)>& m_machines; + // Current time + std::array(PrintEstimatedStatistics::ETimeMode::Count)> m_times{ 0.0f, 0.0f }; + // Current size in bytes + size_t m_size{ 0 }; + + // gcode lines cache + std::deque m_lines; + size_t m_added_lines_counter{ 0 }; + // map of gcode line ids from original to final + // used to update m_result.moves[].gcode_id + std::vector> m_gcode_lines_map; + + size_t m_times_cache_id{ 0 }; + size_t m_out_file_pos{ 0 }; + + + public: + ExportLines(EWriteType type, + const std::array(PrintEstimatedStatistics::ETimeMode::Count)>& machines) +#ifndef NDEBUG + : m_statistics(*this), m_write_type(type), m_machines(machines) {} +#else + : m_write_type(type), m_machines(machines) {} +#endif // NDEBUG + + // return: number of internal G1 lines (from G2/G3 splitting) processed + unsigned int update(const std::string& line, size_t lines_counter, size_t g1_lines_counter) { + unsigned int ret = 0; + m_gcode_lines_map.push_back({ lines_counter, 0 }); + + if (GCodeReader::GCodeLine::cmd_is(line, "G0") || + GCodeReader::GCodeLine::cmd_is(line, "G1") || + GCodeReader::GCodeLine::cmd_is(line, "G2") || + GCodeReader::GCodeLine::cmd_is(line, "G3") || + GCodeReader::GCodeLine::cmd_is(line, "G28")) + ++g1_lines_counter; + else + return ret; + + auto init_it = m_machines[Normal].g1_times_cache.begin() + m_times_cache_id; + auto it = init_it; + while (it != m_machines[Normal].g1_times_cache.end() && it->id < g1_lines_counter) { + ++it; + ++m_times_cache_id; + } + + if (it == m_machines[Normal].g1_times_cache.end() || it->id > g1_lines_counter) + return ret; + + // search for internal G1 lines + if (GCodeReader::GCodeLine::cmd_is(line, "G2") || GCodeReader::GCodeLine::cmd_is(line, "G3")) { + while (it != m_machines[Normal].g1_times_cache.end() && it->remaining_internal_g1_lines > 0) { + ++it; + ++m_times_cache_id; + ++g1_lines_counter; + ++ret; + } + } + + if (it != m_machines[Normal].g1_times_cache.end() && it->id == g1_lines_counter) { + m_times[Normal] = it->elapsed_time; + if (!m_machines[Stealth].g1_times_cache.empty()) + m_times[Stealth] = (m_machines[Stealth].g1_times_cache.begin() + std::distance(m_machines[Normal].g1_times_cache.begin(), it))->elapsed_time; + } + + return ret; + } + + // add the given gcode line to the cache + void append_line(const std::string& line) { + m_lines.push_back({ line, m_times }); +#ifndef NDEBUG + m_statistics.add_line(line.length()); +#endif // NDEBUG + m_size += line.length(); + ++m_added_lines_counter; + assert(!m_gcode_lines_map.empty()); + m_gcode_lines_map.back().second = m_added_lines_counter; + } + + // Insert the gcode lines required by the command cmd by backtracing into the cache + void insert_lines(const Backtrace& backtrace, const std::string& cmd, + std::function&)> line_inserter, + std::function line_replacer) { + // Orca: find start pos by seaching G28/G29/PRINT_START/START_PRINT commands + auto is_start_pos = [](const std::string& curr_cmd) { + return boost::iequals(curr_cmd, "G28") + || boost::iequals(curr_cmd, "G29") + || boost::iequals(curr_cmd, "PRINT_START") + || boost::iequals(curr_cmd, "START_PRINT"); + }; + assert(!m_lines.empty()); + const float time_step = backtrace.time_step(); + size_t rev_it_dist = 0; // distance from the end of the cache of the starting point of the backtrace + float last_time_insertion = 0.0f; // used to avoid inserting two lines at the same time + for (int i = 0; i < backtrace.steps; ++i) { + const float backtrace_time_i = (i + 1) * time_step; + const float time_threshold_i = m_times[Normal] - backtrace_time_i; + auto rev_it = m_lines.rbegin() + rev_it_dist; + auto start_rev_it = rev_it; + + std::string curr_cmd = GCodeReader::GCodeLine::extract_cmd(rev_it->line); + // backtrace into the cache to find the place where to insert the line + while (rev_it != m_lines.rend() && rev_it->times[Normal] > time_threshold_i && curr_cmd != cmd && !is_start_pos(curr_cmd)) { + rev_it->line = line_replacer(rev_it->line); + ++rev_it; + if (rev_it != m_lines.rend()) + curr_cmd = GCodeReader::GCodeLine::extract_cmd(rev_it->line); + } + + // we met the previous evenience of cmd, or the start position, stop inserting lines + if (rev_it != m_lines.rend() && (curr_cmd == cmd || is_start_pos(curr_cmd))) + break; + + // insert the line for the current step + if (rev_it != m_lines.rend() && rev_it != start_rev_it && rev_it->times[Normal] != last_time_insertion) { + last_time_insertion = rev_it->times[Normal]; + std::vector time_diffs; + time_diffs.push_back(m_times[Normal] - last_time_insertion); + if (!m_machines[Stealth].g1_times_cache.empty()) + time_diffs.push_back(m_times[Stealth] - rev_it->times[Stealth]); + const std::string out_line = line_inserter(i + 1, time_diffs); + rev_it_dist = std::distance(m_lines.rbegin(), rev_it) + 1; + m_lines.insert(rev_it.base(), { out_line, rev_it->times }); +#ifndef NDEBUG + m_statistics.add_line(out_line.length()); +#endif // NDEBUG + m_size += out_line.length(); + // synchronize gcode lines map + for (auto map_it = m_gcode_lines_map.rbegin(); map_it != m_gcode_lines_map.rbegin() + rev_it_dist - 1; ++map_it) { + ++map_it->second; + } + + ++m_added_lines_counter; + } + } + } + + // write to file: + // m_write_type == EWriteType::ByTime - all lines older than m_time - backtrace_time + // m_write_type == EWriteType::BySize - all lines if current size is greater than 65535 bytes + void write(FilePtr& out, float backtrace_time, GCodeProcessorResult& result, const std::string& out_path) { + if (m_lines.empty()) + return; + + // collect lines to write into a single string + std::string out_string; + if (!m_lines.empty()) { + if (m_write_type == EWriteType::ByTime) { + while (m_lines.front().times[Normal] < m_times[Normal] - backtrace_time) { + const LineData& data = m_lines.front(); + out_string += data.line; + m_size -= data.line.length(); + m_lines.pop_front(); +#ifndef NDEBUG + m_statistics.remove_line(); +#endif // NDEBUG + } + } + else { + if (m_size > 65535) { + while (!m_lines.empty()) { + out_string += m_lines.front().line; + m_lines.pop_front(); + } + m_size = 0; +#ifndef NDEBUG + m_statistics.remove_all_lines(); +#endif // NDEBUG + } + } + } + + { + write_to_file(out, out_string, result, out_path); + update_lines_ends_and_out_file_pos(out_string, result.lines_ends, &m_out_file_pos); + } + } + + // flush the current content of the cache to file + void flush(FilePtr& out, GCodeProcessorResult& result, const std::string& out_path) { + // collect lines to flush into a single string + std::string out_string; + while (!m_lines.empty()) { + out_string += m_lines.front().line; + m_lines.pop_front(); + } + m_size = 0; +#ifndef NDEBUG + m_statistics.remove_all_lines(); +#endif // NDEBUG + + { + write_to_file(out, out_string, result, out_path); + update_lines_ends_and_out_file_pos(out_string, result.lines_ends, &m_out_file_pos); + } + } + + void synchronize_moves(GCodeProcessorResult& result) const { + auto it = m_gcode_lines_map.begin(); + for (GCodeProcessorResult::MoveVertex& move : result.moves) { + while (it != m_gcode_lines_map.end() && it->first < move.gcode_id) { + ++it; + } + if (it != m_gcode_lines_map.end() && it->first == move.gcode_id) + move.gcode_id = it->second; + } + } + + size_t get_size() const { return m_size; } + + private: + void write_to_file(FilePtr& out, const std::string& out_string, GCodeProcessorResult& result, const std::string& out_path) { + if (!out_string.empty()) { + if (true) { + fwrite((const void*)out_string.c_str(), 1, out_string.length(), out.f); + if (ferror(out.f)) { + out.close(); + boost::nowide::remove(out_path.c_str()); + throw Slic3r::RuntimeError("GCode processor post process export failed.\nIs the disk full?"); + } + } + } + } + }; + + ExportLines export_lines(m_result.backtrace_enabled ? ExportLines::EWriteType::ByTime : ExportLines::EWriteType::BySize, + m_time_processor.machines); + + // replace placeholder lines with the proper final value + // gcode_line is in/out parameter, to reduce expensive memory allocation + auto process_placeholders = [&](std::string& gcode_line) { + bool processed = false; + + // remove trailing '\n' + auto line = std::string_view(gcode_line).substr(0, gcode_line.length() - 1); + + if (line.length() > 1) { + line = line.substr(1); + if (true && + (line == reserved_tag(ETags::First_Line_M73_Placeholder) || line == reserved_tag(ETags::Last_Line_M73_Placeholder))) { + for (size_t i = 0; i < static_cast(PrintEstimatedStatistics::ETimeMode::Count); ++i) { + const TimeMachine& machine = m_time_processor.machines[i]; + if (machine.enabled) { + // export pair + export_lines.append_line(format_line_M73_main(machine.line_m73_main_mask.c_str(), + (line == reserved_tag(ETags::First_Line_M73_Placeholder)) ? 0 : 100, + (line == reserved_tag(ETags::First_Line_M73_Placeholder)) ? time_in_minutes(machine.time) : 0)); + processed = true; + + // export remaining time to next printer stop + if (line == reserved_tag(ETags::First_Line_M73_Placeholder) && !machine.stop_times.empty()) { + const int to_export_stop = time_in_minutes(machine.stop_times.front().elapsed_time); + export_lines.append_line(format_line_M73_stop_int(machine.line_m73_stop_mask.c_str(), to_export_stop)); + last_exported_stop[i] = to_export_stop; + } + } + } + } + else if (line == reserved_tag(ETags::Estimated_Printing_Time_Placeholder)) { + for (size_t i = 0; i < static_cast(PrintEstimatedStatistics::ETimeMode::Count); ++i) { + const TimeMachine& machine = m_time_processor.machines[i]; + PrintEstimatedStatistics::ETimeMode mode = static_cast(i); + if (mode == PrintEstimatedStatistics::ETimeMode::Normal || machine.enabled) { + char buf[128]; + sprintf(buf, "; estimated printing time (%s mode) = %s\n", + (mode == PrintEstimatedStatistics::ETimeMode::Normal) ? "normal" : "silent", + get_time_dhms(machine.time).c_str()); + export_lines.append_line(buf); + processed = true; + } + } + for (size_t i = 0; i < static_cast(PrintEstimatedStatistics::ETimeMode::Count); ++i) { + const TimeMachine& machine = m_time_processor.machines[i]; + PrintEstimatedStatistics::ETimeMode mode = static_cast(i); + if (mode == PrintEstimatedStatistics::ETimeMode::Normal || machine.enabled) { + char buf[128]; + sprintf(buf, "; estimated first layer printing time (%s mode) = %s\n", + (mode == PrintEstimatedStatistics::ETimeMode::Normal) ? "normal" : "silent", + get_time_dhms(machine.prepare_time).c_str()); + export_lines.append_line(buf); + processed = true; + } + } + } + } + + return processed; + }; + + auto process_used_filament = [&](std::string& gcode_line) { + // Prefilter for parsing speed. + if (gcode_line.size() < 8 || gcode_line[0] != ';' || gcode_line[1] != ' ') + return false; + if (const char c = gcode_line[2]; c != 'f' && c != 't') + return false; + auto process_tag = [](std::string& gcode_line, const std::string_view tag, const std::vector& values) { + if (boost::algorithm::starts_with(gcode_line, tag)) { + gcode_line = tag; + char buf[1024]; + for (size_t i = 0; i < values.size(); ++i) { + sprintf(buf, i == values.size() - 1 ? " %.2lf\n" : " %.2lf,", values[i]); + gcode_line += buf; + } + return true; + } + return false; + }; + + bool ret = false; + ret |= process_tag(gcode_line, PrintStatistics::FilamentUsedMmMask, filament_mm); + ret |= process_tag(gcode_line, PrintStatistics::FilamentUsedGMask, filament_g); + ret |= process_tag(gcode_line, PrintStatistics::TotalFilamentUsedGMask, { filament_total_g }); + ret |= process_tag(gcode_line, PrintStatistics::FilamentUsedCm3Mask, filament_cm3); + ret |= process_tag(gcode_line, PrintStatistics::FilamentCostMask, filament_cost); + ret |= process_tag(gcode_line, PrintStatistics::TotalFilamentCostMask, { filament_total_cost }); + return ret; + }; + + // check for temporary lines + auto is_temporary_decoration = [](const std::string_view gcode_line) { + // remove trailing '\n' + assert(!gcode_line.empty()); + assert(gcode_line.back() == '\n'); + + // return true for decorations which are used in processing the gcode but that should not be exported into the final gcode + // i.e.: + // bool ret = gcode_line.substr(0, gcode_line.length() - 1) == ";" + Layer_Change_Tag; + // ... + // return ret; + return false; + }; + + // Iterators for the normal and silent cached time estimate entry recently processed, used by process_line_G1. + auto g1_times_cache_it = Slic3r::reserve_vector::const_iterator>(m_time_processor.machines.size()); + for (const auto& machine : m_time_processor.machines) + g1_times_cache_it.emplace_back(machine.g1_times_cache.begin()); + + // add lines M73 to exported gcode + auto process_line_G1 = [this, + // Lambdas, mostly for string formatting, all with an empty capture block. + time_in_minutes, format_time_float, format_line_M73_main, format_line_M73_stop_int, format_line_M73_stop_float, time_in_last_minute, + // Caches, to be modified + &g1_times_cache_it, &last_exported_main, &last_exported_stop, + &export_lines] + (const size_t g1_lines_counter) { + if (true) { + for (size_t i = 0; i < static_cast(PrintEstimatedStatistics::ETimeMode::Count); ++i) { + const TimeMachine& machine = m_time_processor.machines[i]; + if (machine.enabled) { + // export pair + // Skip all machine.g1_times_cache below g1_lines_counter. + auto& it = g1_times_cache_it[i]; + while (it != machine.g1_times_cache.end() && it->id < g1_lines_counter) + ++it; + if (it != machine.g1_times_cache.end() && it->id == g1_lines_counter) { + std::pair to_export_main = { int(100.0f * it->elapsed_time / machine.time), + time_in_minutes(machine.time - it->elapsed_time) }; + if (last_exported_main[i] != to_export_main) { + export_lines.append_line(format_line_M73_main(machine.line_m73_main_mask.c_str(), + to_export_main.first, to_export_main.second)); + last_exported_main[i] = to_export_main; + } + // export remaining time to next printer stop + auto it_stop = std::upper_bound(machine.stop_times.begin(), machine.stop_times.end(), it->elapsed_time, + [](float value, const TimeMachine::StopTime& t) { return value < t.elapsed_time; }); + if (it_stop != machine.stop_times.end()) { + int to_export_stop = time_in_minutes(it_stop->elapsed_time - it->elapsed_time); + if (last_exported_stop[i] != to_export_stop) { + if (to_export_stop > 0) { + if (last_exported_stop[i] != to_export_stop) { + export_lines.append_line(format_line_M73_stop_int(machine.line_m73_stop_mask.c_str(), to_export_stop)); + last_exported_stop[i] = to_export_stop; + } + } + else { + bool is_last = false; + auto next_it = it + 1; + is_last |= (next_it == machine.g1_times_cache.end()); + + if (next_it != machine.g1_times_cache.end()) { + auto next_it_stop = std::upper_bound(machine.stop_times.begin(), machine.stop_times.end(), next_it->elapsed_time, + [](float value, const TimeMachine::StopTime& t) { return value < t.elapsed_time; }); + is_last |= (next_it_stop != it_stop); + + std::string time_float_str = format_time_float(time_in_last_minute(it_stop->elapsed_time - it->elapsed_time)); + std::string next_time_float_str = format_time_float(time_in_last_minute(it_stop->elapsed_time - next_it->elapsed_time)); + is_last |= (string_to_double_decimal_point(time_float_str) > 0. && string_to_double_decimal_point(next_time_float_str) == 0.); + } + + if (is_last) { + if (std::distance(machine.stop_times.begin(), it_stop) == static_cast(machine.stop_times.size() - 1)) + export_lines.append_line(format_line_M73_stop_int(machine.line_m73_stop_mask.c_str(), to_export_stop)); + else + export_lines.append_line(format_line_M73_stop_float(machine.line_m73_stop_mask.c_str(), time_in_last_minute(it_stop->elapsed_time - it->elapsed_time))); + + last_exported_stop[i] = to_export_stop; + } + } + } + } + } + } + } + } + }; + + // add lines M104 to exported gcode + auto process_line_T = [this, &export_lines](const std::string& gcode_line, const size_t g1_lines_counter, const ExportLines::Backtrace& backtrace) { + const std::string cmd = GCodeReader::GCodeLine::extract_cmd(gcode_line); + if (cmd.size() >= 2) { + std::stringstream ss(cmd.substr(1)); + int tool_number = -1; + ss >> tool_number; + if (tool_number != -1) { + if (tool_number < 0 || (int)m_extruder_temps_config.size() <= tool_number) { + // found an invalid value, clamp it to a valid one + tool_number = std::clamp(0, m_extruder_temps_config.size() - 1, tool_number); + // emit warning + std::string warning = "GCode Post-Processor encountered an invalid toolchange, maybe from a custom gcode:"; + warning += "\n> "; + warning += gcode_line; + warning += "Generated M104 lines may be incorrect."; + BOOST_LOG_TRIVIAL(error) << warning; + // Orca todo + if (m_print != nullptr) + m_print->active_step_add_warning(PrintStateBase::WarningLevel::CRITICAL, warning); + } + } + export_lines.insert_lines( + backtrace, cmd, + // line inserter + [tool_number, this](unsigned int id, const std::vector& time_diffs) { + const int temperature = int(m_layer_id != 1 ? m_extruder_temps_config[tool_number] : + m_extruder_temps_first_layer_config[tool_number]); + // Orca: M104.1 for XL printers, I can't find the documentation for this so I copied the C++ comments from + // Prusa-Firmware-Buddy here + /** + * M104.1: Early Set Hotend Temperature (preheat, and with stealth mode support) + * + * This GCode is used to tell the XL printer the time estimate when a tool will be used next, + * so that the printer can start preheating the tool in advance. + * + * ## Parameters + * - `P` - - time in seconds till the temperature S is required (in standard mode) + * - `Q` - - time in seconds till the temperature S is required (in stealth mode) + * The rest is same as M104 + */ + if (this->m_is_XL_printer) { + std::string out = "M104.1 T" + std::to_string(tool_number); + if (time_diffs.size() > 0) + out += " P" + std::to_string(int(std::round(time_diffs[0]))); + if (time_diffs.size() > 1) + out += " Q" + std::to_string(int(std::round(time_diffs[1]))); + out += " S" + std::to_string(temperature) + "\n"; + return out; + } else { + std::string comment = "preheat T" + std::to_string(tool_number) + + " time: " + std::to_string((int) std::round(time_diffs[0])) + "s"; + return GCodeWriter::set_temperature(temperature, this->m_flavor, false, tool_number, comment); + } + }, + // line replacer + [this, tool_number](const std::string& line) { + if (GCodeReader::GCodeLine::cmd_is(line, "M104")) { + GCodeReader::GCodeLine gline; + GCodeReader reader; + reader.parse_line(line, [&gline](GCodeReader& reader, const GCodeReader::GCodeLine& l) { gline = l; }); + + float val; + if (gline.has_value('T', val) && gline.raw().find("cooldown") != std::string::npos) { + if (static_cast(val) == tool_number) + return std::string("; removed M104\n"); + } + } + return line; + }); + } + }; + + m_result.lines_ends.clear(); + // m_result.lines_ends.emplace_back(std::vector()); + + unsigned int line_id = 0; + // Backtrace data for Tx gcode lines + const ExportLines::Backtrace backtrace_T = { m_preheat_time, m_preheat_steps }; + // In case there are multiple sources of backtracing, keeps track of the longest backtrack time needed + // to flush the backtrace cache accordingly + float max_backtrace_time = 120.0f; + + { + // Read the input stream 64kB at a time, extract lines and process them. + std::vector buffer(65536 * 10, 0); + // Line buffer. + assert(gcode_line.empty()); + for (;;) { + size_t cnt_read = ::fread(buffer.data(), 1, buffer.size(), in.f); + if (::ferror(in.f)) + throw Slic3r::RuntimeError(std::string("GCode processor post process export failed.\nError while reading from file.\n")); + bool eof = cnt_read == 0; + auto it = buffer.begin(); + auto it_bufend = buffer.begin() + cnt_read; + while (it != it_bufend || (eof && !gcode_line.empty())) { + // Find end of line. + bool eol = false; + auto it_end = it; + for (; it_end != it_bufend && !(eol = *it_end == '\r' || *it_end == '\n'); ++it_end); + // End of line is indicated also if end of file was reached. + eol |= eof && it_end == it_bufend; + gcode_line.insert(gcode_line.end(), it, it_end); + if (eol) { + ++line_id; + gcode_line += "\n"; + const unsigned int internal_g1_lines_counter = export_lines.update(gcode_line, line_id, g1_lines_counter); + // replace placeholder lines + bool processed = process_placeholders(gcode_line); + if (processed) + gcode_line.clear(); + if (!processed) + processed = process_used_filament(gcode_line); + if (!processed && !is_temporary_decoration(gcode_line)) { + if (GCodeReader::GCodeLine::cmd_is(gcode_line, "G0") || GCodeReader::GCodeLine::cmd_is(gcode_line, "G1")) { + export_lines.append_line(gcode_line); + // add lines M73 where needed + process_line_G1(g1_lines_counter++); + gcode_line.clear(); + } + else if (GCodeReader::GCodeLine::cmd_is(gcode_line, "G2") || GCodeReader::GCodeLine::cmd_is(gcode_line, "G3")) { + export_lines.append_line(gcode_line); + // add lines M73 where needed + process_line_G1(g1_lines_counter + internal_g1_lines_counter); + g1_lines_counter += (1 + internal_g1_lines_counter); + gcode_line.clear(); + } + else if (GCodeReader::GCodeLine::cmd_is(gcode_line, "G28")) { + ++g1_lines_counter; + } + else if (m_result.backtrace_enabled && GCodeReader::GCodeLine::cmd_starts_with(gcode_line, "T")) { + // add lines M104 where needed + process_line_T(gcode_line, g1_lines_counter, backtrace_T); + max_backtrace_time = std::max(max_backtrace_time, backtrace_T.time); + } + } + + if (!gcode_line.empty()) + export_lines.append_line(gcode_line); + export_lines.write(out, 1.1f * max_backtrace_time, m_result, out_path); + gcode_line.clear(); + } + // Skip EOL. + it = it_end; + if (it != it_bufend && *it == '\r') + ++it; + if (it != it_bufend && *it == '\n') + ++it; + } + if (eof) + break; + } + } + + export_lines.flush(out, m_result, out_path); + + + out.close(); + in.close(); + + const std::string result_filename = m_result.filename; + export_lines.synchronize_moves(m_result); + + if (rename_file(out_path, result_filename)) + throw Slic3r::RuntimeError(std::string("Failed to rename the output G-code file from ") + out_path + " to " + result_filename + '\n' + + "Is " + out_path + " locked?" + '\n'); +} void GCodeProcessor::store_move_vertex(EMoveType type, EMovePathType path_type) { diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index a1fd5237e3e..976f4541c59 100644 --- a/src/libslic3r/GCode/GCodeProcessor.hpp +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -17,6 +17,8 @@ namespace Slic3r { +class Print; + // slice warnings enum strings #define NOZZLE_HRC_CHECKER "the_actual_nozzle_hrc_smaller_than_the_required_nozzle_hrc" #define BED_TEMP_TOO_HIGH_THAN_FILAMENT "bed_temperature_too_high_than_filament" @@ -207,6 +209,7 @@ namespace Slic3r { float printable_height; SettingsIds settings_ids; size_t extruders_count; + bool backtrace_enabled; std::vector extruder_colors; std::vector filament_diameters; std::vector required_nozzle_HRC; @@ -291,6 +294,7 @@ namespace Slic3r { During_Print_Exhaust_Fan, Wipe_Tower_Start, Wipe_Tower_End, + PA_Change, }; static const std::string& reserved_tag(ETags tag) { return s_IsBBLPrinter ? Reserved_Tags[static_cast(tag)] : Reserved_Tags_compatible[static_cast(tag)]; } @@ -377,6 +381,7 @@ namespace Slic3r { EMoveType move_type{ EMoveType::Noop }; ExtrusionRole role{ erNone }; unsigned int g1_line_id{ 0 }; + unsigned int remaining_internal_g1_lines; unsigned int layer_id{ 0 }; float distance{ 0.0f }; // mm float acceleration{ 0.0f }; // mm/s^2 @@ -425,6 +430,7 @@ namespace Slic3r { struct G1LinesCacheItem { unsigned int id; + unsigned int remaining_internal_g1_lines; float elapsed_time; }; @@ -709,6 +715,9 @@ namespace Slic3r { unsigned char m_last_extruder_id; ExtruderColors m_extruder_colors; ExtruderTemps m_extruder_temps; + ExtruderTemps m_extruder_temps_config; + ExtruderTemps m_extruder_temps_first_layer_config; + bool m_is_XL_printer = false; int m_highest_bed_temp; float m_extruded_last_z; float m_first_layer_height; // mm @@ -722,6 +731,9 @@ namespace Slic3r { size_t m_last_default_color_id; bool m_detect_layer_based_on_tag {false}; int m_seams_count; + bool m_single_extruder_multi_material; + float m_preheat_time; + int m_preheat_steps; #if ENABLE_GCODE_VIEWER_STATISTICS std::chrono::time_point m_start_time; #endif // ENABLE_GCODE_VIEWER_STATISTICS @@ -746,6 +758,8 @@ namespace Slic3r { TimeProcessor m_time_processor; UsedFilaments m_used_filaments; + Print* m_print{ nullptr }; + GCodeProcessorResult m_result; static unsigned int s_result_id; @@ -759,6 +773,7 @@ namespace Slic3r { GCodeProcessor(); void apply_config(const PrintConfig& config); + void set_print(Print* print) { m_print = print; } void enable_stealth_time_estimator(bool enabled); bool is_stealth_time_estimator_enabled() const { return m_time_processor.machines[static_cast(PrintEstimatedStatistics::ETimeMode::Stealth)].enabled; @@ -815,7 +830,7 @@ namespace Slic3r { // Move void process_G0(const GCodeReader::GCodeLine& line); - void process_G1(const GCodeReader::GCodeLine& line); + void process_G1(const GCodeReader::GCodeLine& line, const std::optional& remaining_internal_g1_lines = std::nullopt); void process_G2_G3(const GCodeReader::GCodeLine& line); // BBS: handle delay command @@ -930,6 +945,11 @@ namespace Slic3r { void process_T(const GCodeReader::GCodeLine& line); void process_T(const std::string_view command); + // post process the file with the given filename to: + // 1) add remaining time lines M73 and update moves' gcode ids accordingly + // 2) update used filament data + void run_post_process(); + //BBS: different path_type is only used for arc move void store_move_vertex(EMoveType type, EMovePathType path_type = EMovePathType::Noop_move); @@ -943,7 +963,7 @@ namespace Slic3r { Vec3f get_xyz_max_jerk(PrintEstimatedStatistics::ETimeMode mode) const; float get_retract_acceleration(PrintEstimatedStatistics::ETimeMode mode) const; void set_retract_acceleration(PrintEstimatedStatistics::ETimeMode mode, float value); - float get_acceleration(PrintEstimatedStatistics::ETimeMode mode) const; + float get_acceleration(PrintEstimatedStatistics::ETimeMode mode) const; void set_acceleration(PrintEstimatedStatistics::ETimeMode mode, float value); float get_travel_acceleration(PrintEstimatedStatistics::ETimeMode mode) const; void set_travel_acceleration(PrintEstimatedStatistics::ETimeMode mode, float value); diff --git a/src/libslic3r/GCode/PchipInterpolatorHelper.cpp b/src/libslic3r/GCode/PchipInterpolatorHelper.cpp new file mode 100644 index 00000000000..44baa6cbf74 --- /dev/null +++ b/src/libslic3r/GCode/PchipInterpolatorHelper.cpp @@ -0,0 +1,100 @@ +// PchipInterpolatorHelper.cpp +// OrcaSlicer +// +// Implementation file for the PchipInterpolatorHelper class + +#include "PchipInterpolatorHelper.hpp" +#include +#include +#include + +/** + * @brief Constructs the PCHIP interpolator with given data points. + * @param x The x-coordinates of the data points. + * @param y The y-coordinates of the data points. + */ +PchipInterpolatorHelper::PchipInterpolatorHelper(const std::vector& x, const std::vector& y) { + setData(x, y); +} + +/** + * @brief Sets the data points for the interpolator. + * @param x The x-coordinates of the data points. + * @param y The y-coordinates of the data points. + * @throw std::invalid_argument if x and y have different sizes or if they contain fewer than two points. + */ +void PchipInterpolatorHelper::setData(const std::vector& x, const std::vector& y) { + if (x.size() != y.size() || x.size() < 2) { + throw std::invalid_argument("Input vectors must have the same size and contain at least two points."); + } + x_ = x; + y_ = y; + sortData(); + computePCHIP(); +} + +/** + * @brief Sorts the data points by x-coordinate. + */ +void PchipInterpolatorHelper::sortData() { + std::vector> data; + for (size_t i = 0; i < x_.size(); ++i) { + data.emplace_back(x_[i], y_[i]); + } + std::sort(data.begin(), data.end()); + + for (size_t i = 0; i < data.size(); ++i) { + x_[i] = data[i].first; + y_[i] = data[i].second; + } +} + +/** + * @brief Computes the PCHIP coefficients. + */ +void PchipInterpolatorHelper::computePCHIP() { + size_t n = x_.size() - 1; + h_.resize(n); + delta_.resize(n); + d_.resize(n+1); + + for (size_t i = 0; i < n; ++i) { + h_[i] = h(i); + delta_[i] = delta(i); + } + + d_[0] = delta_[0]; + d_[n] = delta_[n-1]; + for (size_t i = 1; i < n; ++i) { + if (delta_[i-1] * delta_[i] > 0) { + double w1 = 2 * h_[i] + h_[i-1]; + double w2 = h_[i] + 2 * h_[i-1]; + d_[i] = (w1 + w2) / (w1 / delta_[i-1] + w2 / delta_[i]); + } else { + d_[i] = 0; + } + } +} + +/** + * @brief Interpolates the value at a given point. + */ +double PchipInterpolatorHelper::interpolate(double xi) const { + if (xi <= x_.front()) return y_.front(); + if (xi >= x_.back()) return y_.back(); + + auto it = std::lower_bound(x_.begin(), x_.end(), xi); + size_t i = std::distance(x_.begin(), it) - 1; + + double h_i = h_[i]; + double t = (xi - x_[i]) / h_i; + double t2 = t * t; + double t3 = t2 * t; + + double h00 = 2 * t3 - 3 * t2 + 1; + double h10 = t3 - 2 * t2 + t; + double h01 = -2 * t3 + 3 * t2; + double h11 = t3 - t2; + + return h00 * y_[i] + h10 * h_i * d_[i] + h01 * y_[i+1] + h11 * h_i * d_[i+1]; +} diff --git a/src/libslic3r/GCode/PchipInterpolatorHelper.hpp b/src/libslic3r/GCode/PchipInterpolatorHelper.hpp new file mode 100644 index 00000000000..becfe282108 --- /dev/null +++ b/src/libslic3r/GCode/PchipInterpolatorHelper.hpp @@ -0,0 +1,76 @@ +// PchipInterpolatorHelper.hpp +// OrcaSlicer +// +// Header file for the PchipInterpolatorHelper class, responsible for performing Piecewise Cubic Hermite Interpolating Polynomial (PCHIP) interpolation on given data points. + +#ifndef PCHIPINTERPOLATORHELPER_HPP +#define PCHIPINTERPOLATORHELPER_HPP + +#include + +/** + * @class PchipInterpolatorHelper + * @brief A helper class to perform Piecewise Cubic Hermite Interpolating Polynomial (PCHIP) interpolation. + */ +class PchipInterpolatorHelper { +public: + /** + * @brief Default constructor. + */ + PchipInterpolatorHelper() = default; + + /** + * @brief Constructs the PCHIP interpolator with given data points. + * @param x The x-coordinates of the data points. + * @param y The y-coordinates of the data points. + */ + PchipInterpolatorHelper(const std::vector& x, const std::vector& y); + + /** + * @brief Sets the data points for the interpolator. + * @param x The x-coordinates of the data points. + * @param y The y-coordinates of the data points. + * @throw std::invalid_argument if x and y have different sizes or if they contain fewer than two points. + */ + void setData(const std::vector& x, const std::vector& y); + + /** + * @brief Interpolates the value at a given point. + * @param xi The x-coordinate at which to interpolate. + * @return The interpolated y-coordinate. + */ + double interpolate(double xi) const; + +private: + std::vector x_; ///< The x-coordinates of the data points. + std::vector y_; ///< The y-coordinates of the data points. + std::vector h_; ///< The differences between successive x-coordinates. + std::vector delta_; ///< The slopes of the segments between successive data points. + std::vector d_; ///< The derivatives at the data points. + + /** + * @brief Computes the PCHIP coefficients. + */ + void computePCHIP(); + + /** + * @brief Sorts the data points by x-coordinate. + */ + void sortData(); + + /** + * @brief Computes the difference between successive x-coordinates. + * @param i The index of the x-coordinate. + * @return The difference between x_[i+1] and x_[i]. + */ + double h(int i) const { return x_[i+1] - x_[i]; } + + /** + * @brief Computes the slope of the segment between successive data points. + * @param i The index of the segment. + * @return The slope of the segment between y_[i] and y_[i+1]. + */ + double delta(int i) const { return (y_[i+1] - y_[i]) / h(i); } +}; + +#endif // PCHIPINTERPOLATORHELPER_HPP diff --git a/src/libslic3r/GCode/RetractWhenCrossingPerimeters.cpp b/src/libslic3r/GCode/RetractWhenCrossingPerimeters.cpp index 776091adfbf..3043e091b51 100644 --- a/src/libslic3r/GCode/RetractWhenCrossingPerimeters.cpp +++ b/src/libslic3r/GCode/RetractWhenCrossingPerimeters.cpp @@ -1,6 +1,5 @@ #include "../ClipperUtils.hpp" #include "../Layer.hpp" -#include "../Polyline.hpp" #include "RetractWhenCrossingPerimeters.hpp" diff --git a/src/libslic3r/GCode/SmallAreaInfillFlowCompensator.hpp b/src/libslic3r/GCode/SmallAreaInfillFlowCompensator.hpp index 34c14864d14..e25c88522e4 100644 --- a/src/libslic3r/GCode/SmallAreaInfillFlowCompensator.hpp +++ b/src/libslic3r/GCode/SmallAreaInfillFlowCompensator.hpp @@ -9,6 +9,14 @@ namespace Slic3r { +#ifndef _WIN32 +// Currently on Linux/macOS, this class spits out large amounts of subobject linkage +// warnings because of the flowModel field. tk::spline is in an anonymous namespace which +// causes this issue. Until the issue can be solved, this is a temporary solution. +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsubobject-linkage" +#endif + class SmallAreaInfillFlowCompensator { public: @@ -31,6 +39,10 @@ class SmallAreaInfillFlowCompensator double max_modified_length() { return eLengths.back(); } }; +#ifndef _WIN32 +#pragma GCC diagnostic pop +#endif + } // namespace Slic3r #endif /* slic3r_GCode_SmallAreaInfillFlowCompensator_hpp_ */ diff --git a/src/libslic3r/GCode/SpiralVase.cpp b/src/libslic3r/GCode/SpiralVase.cpp index 8462e73111a..8ffe7ef95b8 100644 --- a/src/libslic3r/GCode/SpiralVase.cpp +++ b/src/libslic3r/GCode/SpiralVase.cpp @@ -131,7 +131,7 @@ std::string SpiralVase::process_layer(const std::string &gcode, bool last_layer) if (line.has_z() && !line.retracting(reader)) { // If this is the initial Z move of the layer, replace it with a // (redundant) move to the last Z of previous layer. - line.set(reader, Z, z); + line.set(Z, z); new_gcode += line.raw() + '\n'; return; } else { @@ -142,17 +142,17 @@ std::string SpiralVase::process_layer(const std::string &gcode, bool last_layer) float factor = len / total_layer_length; if (transition_in) // Transition layer, interpolate the amount of extrusion from zero to the final value. - line.set(reader, E, line.e() * factor, 5 /*decimal_digits*/); + line.set(E, line.e() * factor, 5 /*decimal_digits*/); else if (transition_out) { // We want the last layer to ramp down extrusion, but without changing z height! // So clone the line before we mess with its Z and duplicate it into a new layer that ramps down E // We add this new layer at the very end GCodeReader::GCodeLine transitionLine(line); - transitionLine.set(reader, E, line.e() * (1 - factor), 5 /*decimal_digits*/); + transitionLine.set(E, line.e() * (1 - factor), 5 /*decimal_digits*/); transition_gcode += transitionLine.raw() + '\n'; } // This line is the core of Spiral Vase mode, ramp up the Z smoothly - line.set(reader, Z, z + factor * layer_height); + line.set(Z, z + factor * layer_height); if (smooth_spiral) { // Now we also need to try to interpolate X and Y SpiralVase::SpiralPoint p(line.x(), line.y()); // Get current x/y coordinates @@ -171,10 +171,10 @@ std::string SpiralVase::process_layer(const std::string &gcode, bool last_layer) if (modified_dist_XY < 0.001) line.clear(); else { - line.set(reader, X, target.x); - line.set(reader, Y, target.y); + line.set(X, target.x); + line.set(Y, target.y); // Scale the extrusion amount according to change in length - line.set(reader, E, line.e() * modified_dist_XY / dist_XY, 5 /*decimal_digits*/); + line.set(E, line.e() * modified_dist_XY / dist_XY, 5 /*decimal_digits*/); last_point = target; } } else { diff --git a/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index e5c32600849..03a3c491e99 100644 --- a/src/libslic3r/GCode/ToolOrdering.cpp +++ b/src/libslic3r/GCode/ToolOrdering.cpp @@ -219,10 +219,14 @@ ToolOrdering::ToolOrdering(const PrintObject &object, unsigned int first_extrude // BBS // Reorder the extruders to minimize tool switches. - if (first_extruder == (unsigned int)-1) { - this->reorder_extruders(generate_first_layer_tool_order(object)); + std::vector first_layer_tool_order; + if (first_extruder == (unsigned int) -1) { + first_layer_tool_order = generate_first_layer_tool_order(object); } - else { + + if (!first_layer_tool_order.empty()) { + this->reorder_extruders(first_layer_tool_order); + } else { this->reorder_extruders(first_extruder); } @@ -307,7 +311,6 @@ ToolOrdering::ToolOrdering(const Print &print, unsigned int first_extruder, bool std::vector ToolOrdering::generate_first_layer_tool_order(const Print& print) { std::vector tool_order; - int initial_extruder_id = -1; std::map min_areas_per_extruder; for (auto object : print.objects()) { @@ -336,7 +339,6 @@ std::vector ToolOrdering::generate_first_layer_tool_order(const Pr } } - double max_minimal_area = 0.; for (auto ape : min_areas_per_extruder) { auto iter = tool_order.begin(); for (; iter != tool_order.end(); iter++) { @@ -369,7 +371,6 @@ std::vector ToolOrdering::generate_first_layer_tool_order(const Pr std::vector ToolOrdering::generate_first_layer_tool_order(const PrintObject& object) { std::vector tool_order; - int initial_extruder_id = -1; std::map min_areas_per_extruder; auto first_layer = object.get_layer(0); for (auto layerm : first_layer->regions()) { @@ -394,7 +395,6 @@ std::vector ToolOrdering::generate_first_layer_tool_order(const Pr } } - double max_minimal_area = 0.; for (auto ape : min_areas_per_extruder) { auto iter = tool_order.begin(); for (; iter != tool_order.end(); iter++) { @@ -875,7 +875,7 @@ void ToolOrdering::reorder_extruders_for_minimum_flush_volume() return false; }; - std::optionalcurrent_extruder_id; + std::optionalcurrent_extruder_id(-1); for (int i = 0; i < m_layer_tools.size(); ++i) { LayerTools& lt = m_layer_tools[i]; if (lt.extruders.empty()) diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index 39c603a4703..f18afb5d30f 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -1072,8 +1072,6 @@ void WipeTower::toolchange_Wipe( const float target_speed = is_first_layer() ? std::min(m_first_layer_speed * 60.f, 4800.f) : 4800.f; float wipe_speed = 0.33f * target_speed; - float start_y = writer.y(); - #if 0 // if there is less than 2.5*m_perimeter_width to the edge, advance straightaway (there is likely a blob anyway) if ((m_left_to_right ? xr-writer.x() : writer.x()-xl) < 2.5f*m_perimeter_width) { @@ -1132,8 +1130,6 @@ void WipeTower::toolchange_Wipe( m_left_to_right = !m_left_to_right; } - float end_y = writer.y(); - // 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()) @@ -1422,7 +1418,6 @@ void WipeTower::plan_tower() // If wipe tower height is between the current and next member, set the min_depth as linear interpolation between them auto next_height_to_depth = *iter; if (next_height_to_depth.first > m_wipe_tower_height) { - float height_base = curr_height_to_depth.first; float height_diff = next_height_to_depth.first - curr_height_to_depth.first; float min_depth_base = curr_height_to_depth.second; float depth_diff = next_height_to_depth.second - curr_height_to_depth.second; diff --git a/src/libslic3r/GCode/WipeTower2.cpp b/src/libslic3r/GCode/WipeTower2.cpp index 5b5a332419e..521dd9b746b 100644 --- a/src/libslic3r/GCode/WipeTower2.cpp +++ b/src/libslic3r/GCode/WipeTower2.cpp @@ -1,6 +1,4 @@ -// Orca: This file is ported from latest PrusaSlicer - -// Original PrusaSlicer Copyright: +// Orca: WipeTower2 for all non bbl printers, support all MMU device and toolchanger. #include "WipeTower2.hpp" #include @@ -26,6 +24,20 @@ namespace Slic3r { +// Calculates length of extrusion line to extrude given volume +static float volume_to_length(float volume, float line_width, float layer_height) +{ + return std::max(0.f, volume / (layer_height * (line_width - layer_height * (1.f - float(M_PI) / 4.f)))); +} + +static float length_to_volume(float length, float line_width, float layer_height) +{ + return std::max(0.f, length * layer_height * (line_width - layer_height * (1.f - float(M_PI) / 4.f))); +} + + + + class WipeTowerWriter2 { public: @@ -37,12 +49,9 @@ class WipeTowerWriter2 m_extrusion_flow(0.f), m_preview_suppressed(false), m_elapsed_time(0.f), -#if ENABLE_GCODE_VIEWER_DATA_CHECKING - m_default_analyzer_line_width(line_width), -#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING - m_gcode_flavor(flavor), - m_filpar(filament_parameters) - { + m_gcode_flavor(flavor), + m_filpar(filament_parameters) + { // ORCA: This class is only used by non BBL printers, so set the parameter appropriately. // This fixes an issue where the wipe tower was using BBL tags resulting in statistics for purging in the purge tower not being displayed. GCodeProcessor::s_IsBBLPrinter = false; @@ -62,18 +71,6 @@ class WipeTowerWriter2 return *this; } -#if ENABLE_GCODE_VIEWER_DATA_CHECKING - WipeTowerWriter2& change_analyzer_mm3_per_mm(float len, float e) { - static const float area = float(M_PI) * 1.75f * 1.75f / 4.f; - float mm3_per_mm = (len == 0.f ? 0.f : area * e / len); - // adds tag for processor: - std::stringstream str; - str << ";" << GCodeProcessor::Mm3_Per_Mm_Tag << mm3_per_mm << "\n"; - m_gcode += str.str(); - return *this; - } -#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING - WipeTowerWriter2& set_initial_position(const Vec2f &pos, float width = 0.f, float depth = 0.f, float internal_angle = 0.f) { m_wipe_tower_width = width; m_wipe_tower_depth = depth; @@ -109,16 +106,16 @@ class WipeTowerWriter2 return *this; } + WipeTowerWriter2& switch_filament_monitoring(bool enable) { + m_gcode += std::string("G4 S0\n") + "M591 " + (enable ? "R" : "S0") + "\n"; + return *this; + } + // Suppress / resume G-code preview in Slic3r. Slic3r will have difficulty to differentiate the various // filament loading and cooling moves from normal extrusion moves. Therefore the writer // is asked to suppres output of some lines, which look like extrusions. -#if ENABLE_GCODE_VIEWER_DATA_CHECKING - WipeTowerWriter2& suppress_preview() { change_analyzer_line_width(0.f); m_preview_suppressed = true; return *this; } - WipeTowerWriter2& resume_preview() { change_analyzer_line_width(m_default_analyzer_line_width); m_preview_suppressed = false; return *this; } -#else WipeTowerWriter2& suppress_preview() { m_preview_suppressed = true; return *this; } - WipeTowerWriter2& resume_preview() { m_preview_suppressed = false; return *this; } -#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING + WipeTowerWriter2& resume_preview() { m_preview_suppressed = false; return *this; } WipeTowerWriter2& feedrate(float f) { @@ -140,8 +137,8 @@ class WipeTowerWriter2 float get_and_reset_used_filament_length() { float temp = m_used_filament_length; m_used_filament_length = 0.f; return temp; } // Extrude with an explicitely provided amount of extrusion. - WipeTowerWriter2& extrude_explicit(float x, float y, float e, float f = 0.f, bool record_length = false, bool limit_volumetric_flow = true) - { + WipeTowerWriter2& extrude_explicit(float x, float y, float e, float f = 0.f, bool record_length = false, bool limit_volumetric_flow = true) + { if (x == m_current_pos.x() && y == m_current_pos.y() && e == 0.f && (f == 0.f || f == m_current_feedrate)) // Neither extrusion nor a travel move. return *this; @@ -157,12 +154,9 @@ class WipeTowerWriter2 Vec2f rot(this->rotate(Vec2f(x,y))); // this is where we want to go if (! m_preview_suppressed && e > 0.f && len > 0.f) { -#if ENABLE_GCODE_VIEWER_DATA_CHECKING - change_analyzer_mm3_per_mm(len, e); -#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING - // Width of a squished extrusion, corrected for the roundings of the squished extrusions. + // Width of a squished extrusion, corrected for the roundings of the squished extrusions. // This is left zero if it is a travel move. - float width = e * m_filpar[0].filament_area / (len * m_layer_height); + float width = e * m_filpar[0].filament_area / (len * m_layer_height); // Correct for the roundings of a squished extrusion. width += m_layer_height * float(1. - M_PI / 4.); if (m_extrusions.empty() || m_extrusions.back().pos != rotated_current_pos) @@ -204,17 +198,17 @@ class WipeTowerWriter2 return *this; } - WipeTowerWriter2& extrude_explicit(const Vec2f &dest, float e, float f = 0.f, bool record_length = false, bool limit_volumetric_flow = true) - { return extrude_explicit(dest.x(), dest.y(), e, f, record_length); } + WipeTowerWriter2& extrude_explicit(const Vec2f &dest, float e, float f = 0.f, bool record_length = false, bool limit_volumetric_flow = true) + { return extrude_explicit(dest.x(), dest.y(), e, f, record_length); } - // Travel to a new XY position. f=0 means use the current value. + // Travel to a new XY position. f=0 means use the current value. WipeTowerWriter2& travel(float x, float y, float f = 0.f) - { return extrude_explicit(x, y, 0.f, f); } + { return extrude_explicit(x, y, 0.f, f); } - WipeTowerWriter2& travel(const Vec2f &dest, float f = 0.f) - { return extrude_explicit(dest.x(), dest.y(), 0.f, f); } + WipeTowerWriter2& travel(const Vec2f &dest, float f = 0.f) + { return extrude_explicit(dest.x(), dest.y(), 0.f, f); } - // Extrude a line from current position to x, y with the extrusion amount given by m_extrusion_flow. + // Extrude a line from current position to x, y with the extrusion amount given by m_extrusion_flow. WipeTowerWriter2& extrude(float x, float y, float f = 0.f) { float dx = x - m_current_pos.x(); @@ -222,8 +216,8 @@ class WipeTowerWriter2 return extrude_explicit(x, y, std::sqrt(dx*dx+dy*dy) * m_extrusion_flow, f, true); } - WipeTowerWriter2& extrude(const Vec2f &dest, const float f = 0.f) - { return extrude(dest.x(), dest.y(), f); } + WipeTowerWriter2& extrude(const Vec2f &dest, const float f = 0.f) + { return extrude(dest.x(), dest.y(), f); } WipeTowerWriter2& rectangle(const Vec2f& ld,float width,float height,const float f = 0.f) { @@ -291,6 +285,25 @@ class WipeTowerWriter2 return extrude_explicit(end_point, y(), loading_dist, x_speed * 60.f, false, false); } + // Loads filament while also moving towards given point in x-axis. Unlike the previous function, this one respects + // both the loading_speed and x_speed. Can shorten the move. + WipeTowerWriter2& load_move_x_advanced_there_and_back(float farthest_x, float e_dist, float e_speed, float x_speed) + { + float old_x = x(); + float time = std::abs(e_dist / e_speed); // time that the whole move must take + float x_max_dist = std::abs(farthest_x - x()); // max x-distance that we can travel + float x_dist = x_speed * time; // totel x-distance to travel during the move + int n = int(x_dist / (2*x_max_dist) + 1.f); // how many there and back moves should we do + float r = 2*n*x_max_dist / x_dist; // actual/required dist if the move is not shortened + + float end_point = x() + (farthest_x > x() ? 1.f : -1.f) * x_max_dist / r; + for (int i=0; i& m_filpar; @@ -533,7 +544,9 @@ WipeTower2::WipeTower2(const PrintConfig& config, const PrintRegionConfig& defau m_wipe_tower_rotation_angle(float(config.wipe_tower_rotation_angle)), m_wipe_tower_brim_width(float(config.prime_tower_brim_width)), m_wipe_tower_cone_angle(float(config.wipe_tower_cone_angle)), - m_extra_spacing(float(config.wipe_tower_extra_spacing/100.)), + m_extra_flow(float(config.wipe_tower_extra_flow/100.)), + m_extra_spacing_wipe(float(config.wipe_tower_extra_spacing/100. * config.wipe_tower_extra_flow/100.)), + m_extra_spacing_ramming(float(config.wipe_tower_extra_spacing/100.)), m_y_shift(0.f), m_z_pos(0.f), m_bridging(float(config.wipe_tower_bridging)), @@ -571,6 +584,8 @@ WipeTower2::WipeTower2(const PrintConfig& config, const PrintRegionConfig& defau m_set_extruder_trimpot = config.high_current_on_filament_swap; } + m_is_mk4mmu3 = boost::icontains(config.printer_notes.value, "PRINTER_MODEL_MK4") && boost::icontains(config.printer_notes.value, "MMU"); + // Calculate where the priming lines should be - very naive test not detecting parallelograms etc. const std::vector& bed_points = config.printable_area.values; BoundingBoxf bb(bed_points); @@ -605,6 +620,7 @@ void WipeTower2::set_extruder(size_t idx, const PrintConfig& config) m_filpar[idx].is_soluble = config.filament_soluble.get_at(idx); m_filpar[idx].temperature = config.nozzle_temperature.get_at(idx); m_filpar[idx].first_layer_temperature = config.nozzle_temperature_initial_layer.get_at(idx); + m_filpar[idx].filament_minimal_purge_on_wipe_tower = config.filament_minimal_purge_on_wipe_tower.get_at(idx); // If this is a single extruder MM printer, we will use all the SE-specific config values. // Otherwise, the defaults will be used to turn off the SE stuff. @@ -617,6 +633,8 @@ void WipeTower2::set_extruder(size_t idx, const PrintConfig& config) m_filpar[idx].cooling_moves = config.filament_cooling_moves.get_at(idx); m_filpar[idx].cooling_initial_speed = float(config.filament_cooling_initial_speed.get_at(idx)); m_filpar[idx].cooling_final_speed = float(config.filament_cooling_final_speed.get_at(idx)); + m_filpar[idx].filament_stamping_loading_speed = float(config.filament_stamping_loading_speed.get_at(idx)); + m_filpar[idx].filament_stamping_distance = float(config.filament_stamping_distance.get_at(idx)); } m_filpar[idx].filament_area = float((M_PI/4.f) * pow(config.filament_diameter.get_at(idx), 2)); // all extruders are assumed to have the same filament diameter at this point @@ -730,7 +748,7 @@ std::vector WipeTower2::prime( toolchange_Wipe(writer, cleaning_box , 20.f); WipeTower::box_coordinates box = cleaning_box; box.translate(0.f, writer.y() - cleaning_box.ld.y() + m_perimeter_width); - toolchange_Unload(writer, box , m_filpar[m_current_tool].material, m_filpar[tools[idx_tool + 1]].first_layer_temperature); + toolchange_Unload(writer, box , m_filpar[m_current_tool].material, m_filpar[m_current_tool].first_layer_temperature, m_filpar[tools[idx_tool + 1]].first_layer_temperature); cleaning_box.translate(prime_section_width, 0.f); writer.travel(cleaning_box.ld, 7200); } @@ -777,7 +795,7 @@ WipeTower::ToolChangeResult WipeTower2::tool_change(size_t tool) for (const auto &b : m_layer_info->tool_changes) if ( b.new_tool == tool ) { wipe_volume = b.wipe_volume; - wipe_area = b.required_depth * m_layer_info->extra_spacing; + wipe_area = b.required_depth; break; } } @@ -797,10 +815,10 @@ WipeTower::ToolChangeResult WipeTower2::tool_change(size_t tool) .set_initial_tool(m_current_tool) .set_y_shift(m_y_shift + (tool!=(unsigned int)(-1) && (m_current_shape == SHAPE_REVERSED) ? m_layer_info->depth - m_layer_info->toolchanges_depth(): 0.f)) .append(";--------------------\n" - "; CP TOOLCHANGE START\n") - .comment_with_value(" toolchange #", m_num_tool_changes + 1); // the number is zero-based + "; CP TOOLCHANGE START\n"); if (tool != (unsigned)(-1)){ + writer.comment_with_value(" toolchange #", m_num_tool_changes + 1); // the number is zero-based writer.append(std::string("; material : " + (m_current_tool < m_filpar.size() ? m_filpar[m_current_tool].material : "(NONE)") + " -> " + m_filpar[tool].material + "\n").c_str()) .append(";--------------------\n"); writer.append(";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Wipe_Tower_Start) + "\n"); @@ -818,8 +836,10 @@ WipeTower::ToolChangeResult WipeTower2::tool_change(size_t tool) // Ram the hot material out of the melt zone, retract the filament into the cooling tubes and let it cool. if (tool != (unsigned int)-1){ // This is not the last change. + auto new_tool_temp = is_first_layer() ? m_filpar[tool].first_layer_temperature : m_filpar[tool].temperature; toolchange_Unload(writer, cleaning_box, m_filpar[m_current_tool].material, - is_first_layer() ? m_filpar[tool].first_layer_temperature : m_filpar[tool].temperature); + (is_first_layer() ? m_filpar[m_current_tool].first_layer_temperature : m_filpar[m_current_tool].temperature), + new_tool_temp); toolchange_Change(writer, tool, m_filpar[tool].material); // Change the tool, set a speed override for soluble and flex materials. toolchange_Load(writer, cleaning_box); writer.travel(writer.x(), writer.y()-m_perimeter_width); // cooling and loading were done a bit down the road @@ -827,7 +847,7 @@ WipeTower::ToolChangeResult WipeTower2::tool_change(size_t tool) writer.append(";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Wipe_Tower_End) + "\n"); ++ m_num_tool_changes; } else - toolchange_Unload(writer, cleaning_box, m_filpar[m_current_tool].material, m_filpar[m_current_tool].temperature); + toolchange_Unload(writer, cleaning_box, m_filpar[m_current_tool].material, m_filpar[m_current_tool].temperature, m_filpar[m_current_tool].temperature); m_depth_traversed += wipe_area; @@ -854,13 +874,14 @@ void WipeTower2::toolchange_Unload( WipeTowerWriter2 &writer, const WipeTower::box_coordinates &cleaning_box, const std::string& current_material, + const int old_temperature, const int new_temperature) { float xl = cleaning_box.ld.x() + 1.f * m_perimeter_width; float xr = cleaning_box.rd.x() - 1.f * m_perimeter_width; const float line_width = m_perimeter_width * m_filpar[m_current_tool].ramming_line_width_multiplicator; // desired ramming line thickness - const float y_step = line_width * m_filpar[m_current_tool].ramming_step_multiplicator * m_extra_spacing; // spacing between lines in mm + const float y_step = line_width * m_filpar[m_current_tool].ramming_step_multiplicator * m_extra_spacing_ramming; // spacing between lines in mm const Vec2f ramming_start_pos = Vec2f(xl, cleaning_box.ld.y() + m_depth_traversed + y_step/2.f); @@ -873,10 +894,14 @@ void WipeTower2::toolchange_Unload( float e_done = 0; // measures E move done from each segment const bool do_ramming = m_enable_filament_ramming && (m_semm || m_filpar[m_current_tool].multitool_ramming); + const bool cold_ramming = m_is_mk4mmu3; if (do_ramming) { writer.travel(ramming_start_pos); // move to starting position - writer.disable_linear_advance(); + if (! m_is_mk4mmu3) + writer.disable_linear_advance(); + if (cold_ramming) + writer.set_extruder_temp(old_temperature - 20); } else writer.set_position(ramming_start_pos); @@ -897,7 +922,7 @@ void WipeTower2::toolchange_Unload( if (tch.old_tool == m_current_tool) { sum_of_depths += tch.ramming_depth; float ramming_end_y = sum_of_depths; - ramming_end_y -= (y_step/m_extra_spacing-m_perimeter_width) / 2.f; // center of final ramming line + ramming_end_y -= (y_step/m_extra_spacing_ramming-m_perimeter_width) / 2.f; // center of final ramming line if ( (m_current_shape == SHAPE_REVERSED && ramming_end_y < sparse_beginning_y - 0.5f*m_perimeter_width ) || (m_current_shape == SHAPE_NORMAL && ramming_end_y > sparse_beginning_y + 0.5f*m_perimeter_width ) ) @@ -910,6 +935,11 @@ void WipeTower2::toolchange_Unload( sum_of_depths += tch.required_depth; } } + + if (m_is_mk4mmu3) { + writer.switch_filament_monitoring(false); + writer.wait(1.5f); + } // now the ramming itself: @@ -953,32 +983,70 @@ void WipeTower2::toolchange_Unload( .retract(0.10f * total_retraction_distance, 0.3f * m_filpar[m_current_tool].unloading_speed * 60.f) .resume_preview(); } + + const int& number_of_cooling_moves = m_filpar[m_current_tool].cooling_moves; + const bool cooling_will_happen = m_semm && number_of_cooling_moves > 0 && m_cooling_tube_length != 0; + bool change_temp_later = false; + // Wipe tower should only change temperature with single extruder MM. Otherwise, all temperatures should // be already set and there is no need to change anything. Also, the temperature could be changed // for wrong extruder. if (m_semm) { - if (new_temperature != 0 && (new_temperature != m_old_temperature || is_first_layer()) ) { // Set the extruder temperature, but don't wait. + if (new_temperature != 0 && (new_temperature != m_old_temperature || is_first_layer() || cold_ramming) ) { // Set the extruder temperature, but don't wait. // If the required temperature is the same as last time, don't emit the M104 again (if user adjusted the value, it would be reset) // However, always change temperatures on the first layer (this is to avoid issues with priming lines turned off). - writer.set_extruder_temp(new_temperature, false); + if (cold_ramming && cooling_will_happen) + change_temp_later = true; + else + writer.set_extruder_temp(new_temperature, false); m_old_temperature = new_temperature; } } // Cooling: - const int& number_of_moves = m_filpar[m_current_tool].cooling_moves; - if (m_semm && number_of_moves > 0 && m_cooling_tube_length != 0) { + if (cooling_will_happen) { writer.append("; Cooling\n"); const float& initial_speed = m_filpar[m_current_tool].cooling_initial_speed; const float& final_speed = m_filpar[m_current_tool].cooling_final_speed; - float speed_inc = (final_speed - initial_speed) / (2.f * number_of_moves - 1.f); + float speed_inc = (final_speed - initial_speed) / (2.f * number_of_cooling_moves - 1.f); + + if (m_is_mk4mmu3) + writer.disable_linear_advance(); writer.suppress_preview() .travel(writer.x(), writer.y() + y_step); old_x = writer.x(); turning_point = xr-old_x > old_x-xl ? xr : xl; - for (int i=0; i0 && m_filpar[m_current_tool].filament_stamping_distance != 0) { + + // Stamping turning point shall be no farther than 20mm from the current nozzle position: + float stamping_turning_point = std::clamp(old_x + 20.f * (turning_point - old_x > 0.f ? 1.f : -1.f), xl, xr); + + // Only last 5mm will be done with the fast x travel. The point is to spread possible blobs + // along the whole wipe tower. + if (stamping_dist_e > 5) { + float cent = writer.x(); + writer.load_move_x_advanced(stamping_turning_point, (stamping_dist_e - 5), m_filpar[m_current_tool].filament_stamping_loading_speed, 200); + writer.load_move_x_advanced(cent, 5, m_filpar[m_current_tool].filament_stamping_loading_speed, m_travel_speed); + writer.travel(cent, writer.y()); + } else + writer.load_move_x_advanced_there_and_back(stamping_turning_point, stamping_dist_e, m_filpar[m_current_tool].filament_stamping_loading_speed, m_travel_speed); + + // Retract while the print head is stationary, so if there is a blob, it is not dragged along. + writer.retract(stamping_dist_e, m_filpar[m_current_tool].unloading_speed * 60.f); + } + + if (i == number_of_cooling_moves - 1 && change_temp_later) { + // If cold_ramming, the temperature change should be done before the last cooling move. + writer.set_extruder_temp(new_temperature, false); + } + float speed = initial_speed + speed_inc * 2*i; writer.load_move_x_advanced(turning_point, m_cooling_tube_length, speed); speed += speed_inc; @@ -998,7 +1066,7 @@ void WipeTower2::toolchange_Unload( // this is to align ramming and future wiping extrusions, so the future y-steps can be uniform from the start: // the perimeter_width will later be subtracted, it is there to not load while moving over just extruded material - Vec2f pos = Vec2f(end_of_ramming.x(), end_of_ramming.y() + (y_step/m_extra_spacing-m_perimeter_width) / 2.f + m_perimeter_width); + Vec2f pos = Vec2f(end_of_ramming.x(), end_of_ramming.y() + (y_step/m_extra_spacing_ramming-m_perimeter_width) / 2.f + m_perimeter_width); if (do_ramming) writer.travel(pos, 2400.f); else @@ -1018,11 +1086,14 @@ void WipeTower2::toolchange_Change( if (m_current_tool < m_used_filament_length.size()) m_used_filament_length[m_current_tool] += writer.get_and_reset_used_filament_length(); - // This is where we want to place the custom gcodes. We will use placeholders for this. // These will be substituted by the actual gcodes when the gcode is generated. + //writer.append("[end_filament_gcode]\n"); writer.append("[change_filament_gcode]\n"); + if (m_is_mk4mmu3) + writer.switch_filament_monitoring(true); + // Travel to where we assume we are. Custom toolchange or some special T code handling (parking extruder etc) // gcode could have left the extruder somewhere, we cannot just start extruding. We should also inform the // postprocessor that we absolutely want to have this in the gcode, even if it thought it is the same as before. @@ -1030,10 +1101,11 @@ void WipeTower2::toolchange_Change( writer.feedrate(m_travel_speed * 60.f) // see https://github.com/prusa3d/PrusaSlicer/issues/5483 .append(std::string("G1 X") + Slic3r::float_to_string_decimal_point(current_pos.x()) + " Y" + Slic3r::float_to_string_decimal_point(current_pos.y()) - + never_skip_tag() + "\n"); + + never_skip_tag() + "\n" + ); + writer.append("[deretraction_from_wipe_tower_generator]"); - // Orca TODO: handle multi extruders // The toolchange Tn command will be inserted later, only in case that the user does // not provide a custom toolchange gcode. writer.set_tool(new_tool); // This outputs nothing, the writer just needs to know the tool has changed. @@ -1084,21 +1156,25 @@ void WipeTower2::toolchange_Wipe( const float& xl = cleaning_box.ld.x(); const float& xr = cleaning_box.rd.x(); + writer.set_extrusion_flow(m_extrusion_flow * m_extra_flow); + const float line_width = m_perimeter_width * m_extra_flow; + writer.change_analyzer_line_width(line_width); + // Variables x_to_wipe and traversed_x are here to be able to make sure it always wipes at least // the ordered volume, even if it means violating the box. This can later be removed and simply // wipe until the end of the assigned area. - float x_to_wipe = volume_to_length(wipe_volume, m_perimeter_width, m_layer_height) * (is_first_layer() ? m_extra_spacing : 1.f); - float dy = (is_first_layer() ? 1.f : m_extra_spacing) * m_perimeter_width; // Don't use the extra spacing for the first layer. + float x_to_wipe = volume_to_length(wipe_volume, m_perimeter_width, m_layer_height) / m_extra_flow; + float dy = (is_first_layer() ? m_extra_flow : m_extra_spacing_wipe) * m_perimeter_width; // Don't use the extra spacing for the first layer, but do use the spacing resulting from increased flow. // All the calculations in all other places take the spacing into account for all the layers. // If spare layers are excluded->if 1 or less toolchange has been done, it must be sill the first layer, too.So slow down. const float target_speed = is_first_layer() || (m_num_tool_changes <= 1 && m_no_sparse_layers) ? m_first_layer_speed * 60.f : std::min(m_wipe_tower_max_purge_speed * 60.f, m_infill_speed * 60.f); float wipe_speed = 0.33f * target_speed; - // if there is less than 2.5*m_perimeter_width to the edge, advance straightaway (there is likely a blob anyway) - if ((m_left_to_right ? xr-writer.x() : writer.x()-xl) < 2.5f*m_perimeter_width) { - writer.travel((m_left_to_right ? xr-m_perimeter_width : xl+m_perimeter_width),writer.y()+dy); + // if there is less than 2.5*line_width to the edge, advance straightaway (there is likely a blob anyway) + if ((m_left_to_right ? xr-writer.x() : writer.x()-xl) < 2.5f*line_width) { + writer.travel((m_left_to_right ? xr-line_width : xl+line_width),writer.y()+dy); m_left_to_right = !m_left_to_right; } @@ -1113,21 +1189,21 @@ void WipeTower2::toolchange_Wipe( float traversed_x = writer.x(); if (m_left_to_right) - writer.extrude(xr - (i % 4 == 0 ? 0 : 1.5f*m_perimeter_width), writer.y(), wipe_speed); + writer.extrude(xr - (i % 4 == 0 ? 0 : 1.5f*line_width), writer.y(), wipe_speed); else - writer.extrude(xl + (i % 4 == 1 ? 0 : 1.5f*m_perimeter_width), writer.y(), wipe_speed); + writer.extrude(xl + (i % 4 == 1 ? 0 : 1.5f*line_width), writer.y(), wipe_speed); - if (writer.y()+float(EPSILON) > cleaning_box.lu.y()-0.5f*m_perimeter_width) + if (writer.y()+float(EPSILON) > cleaning_box.lu.y()-0.5f*line_width) break; // in case next line would not fit traversed_x -= writer.x(); x_to_wipe -= std::abs(traversed_x); 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); + writer.travel(m_left_to_right ? xl + 1.5f*line_width : xr - 1.5f*line_width, writer.y(), 7200); break; } // stepping to the next line: - writer.extrude(writer.x() + (i % 4 == 0 ? -1.f : (i % 4 == 1 ? 1.f : 0.f)) * 1.5f*m_perimeter_width, writer.y() + dy); + writer.extrude(writer.x() + (i % 4 == 0 ? -1.f : (i % 4 == 1 ? 1.f : 0.f)) * 1.5f*line_width, writer.y() + dy); m_left_to_right = !m_left_to_right; } @@ -1141,6 +1217,7 @@ void WipeTower2::toolchange_Wipe( m_left_to_right = !m_left_to_right; writer.set_extrusion_flow(m_extrusion_flow); // Reset the extrusion flow. + writer.change_analyzer_line_width(m_perimeter_width); } @@ -1414,16 +1491,15 @@ std::vector> WipeTower2::extract_wipe_volumes(const PrintConf std::vector wiping_matrix(cast(config.flush_volumes_matrix.values)); auto scale = config.flush_multiplier; - // Orca todo: currently we only/always support SEMM. // The values shall only be used when SEMM is enabled. The purging for other printers // is determined by filament_minimal_purge_on_wipe_tower. - if (! config.purge_in_prime_tower.value) + if (! config.purge_in_prime_tower.value || ! config.single_extruder_multi_material.value) std::fill(wiping_matrix.begin(), wiping_matrix.end(), 0.f); // Extract purging volumes for each extruder pair: std::vector> wipe_volumes; const unsigned int number_of_extruders = (unsigned int)(sqrt(wiping_matrix.size())+EPSILON); - for (unsigned int i = 0; i(wiping_matrix.begin()+i*number_of_extruders, wiping_matrix.begin()+(i+1)*number_of_extruders)); // Also include filament_minimal_purge_on_wipe_tower. This is needed for the preview. @@ -1434,6 +1510,14 @@ std::vector> WipeTower2::extract_wipe_volumes(const PrintConf return wipe_volumes; } +static float get_wipe_depth(float volume, float layer_height, float perimeter_width, float extra_flow, float extra_spacing, float width) +{ + float length_to_extrude = (volume_to_length(volume, perimeter_width, layer_height)) / extra_flow; + length_to_extrude = std::max(length_to_extrude,0.f); + + return (int(length_to_extrude / width) + 1) * perimeter_width * extra_spacing; +} + // Appends a toolchange into m_plan and calculates neccessary depth of the corresponding box void WipeTower2::plan_toolchange(float z_par, float layer_height_par, unsigned int old_tool, unsigned int new_tool, float wipe_volume) @@ -1449,23 +1533,18 @@ void WipeTower2::plan_toolchange(float z_par, float layer_height_par, unsigned i if (old_tool == new_tool) // new layer without toolchanges - we are done return; - // this is an actual toolchange - let's calculate depth to reserve on the wipe tower - float depth = 0.f; - float width = m_wipe_tower_width - 3*m_perimeter_width; + // this is an actual toolchange - let's calculate depth to reserve on the wipe tower + float width = m_wipe_tower_width - 3*m_perimeter_width; float length_to_extrude = volume_to_length(0.25f * std::accumulate(m_filpar[old_tool].ramming_speed.begin(), m_filpar[old_tool].ramming_speed.end(), 0.f), m_perimeter_width * m_filpar[old_tool].ramming_line_width_multiplicator, layer_height_par); - depth = (int(length_to_extrude / width) + 1) * (m_perimeter_width * m_filpar[old_tool].ramming_line_width_multiplicator * m_filpar[old_tool].ramming_step_multiplicator); - float ramming_depth = depth; - length_to_extrude = width*((length_to_extrude / width)-int(length_to_extrude / width)) - width; - float first_wipe_line = -length_to_extrude; - length_to_extrude += volume_to_length(wipe_volume, m_perimeter_width, layer_height_par); - length_to_extrude = std::max(length_to_extrude,0.f); - - depth += (int(length_to_extrude / width) + 1) * m_perimeter_width; - depth *= m_extra_spacing; + float ramming_depth = (int(length_to_extrude / width) + 1) * (m_perimeter_width * m_filpar[old_tool].ramming_line_width_multiplicator * m_filpar[old_tool].ramming_step_multiplicator) * m_extra_spacing_ramming; + float first_wipe_line = - (width*((length_to_extrude / width)-int(length_to_extrude / width)) - width); - m_plan.back().tool_changes.push_back(WipeTowerInfo::ToolChange(old_tool, new_tool, depth, ramming_depth, first_wipe_line, wipe_volume)); + float first_wipe_volume = length_to_volume(first_wipe_line, m_perimeter_width * m_extra_flow, layer_height_par); + float wiping_depth = get_wipe_depth(wipe_volume - first_wipe_volume, layer_height_par, m_perimeter_width, m_extra_flow, m_extra_spacing_wipe, width); + + m_plan.back().tool_changes.push_back(WipeTowerInfo::ToolChange(old_tool, new_tool, ramming_depth + wiping_depth, ramming_depth, first_wipe_line, wipe_volume)); } @@ -1505,20 +1584,25 @@ void WipeTower2::save_on_last_wipe() // Which toolchange will finish_layer extrusions be subtracted from? int idx = first_toolchange_to_nonsoluble(m_layer_info->tool_changes); + if (idx == -1) { + // In this case, finish_layer will be called at the very beginning. + finish_layer().total_extrusion_length_in_plane(); + } + for (int i=0; itool_changes.size()); ++i) { auto& toolchange = m_layer_info->tool_changes[i]; tool_change(toolchange.new_tool); if (i == idx) { float width = m_wipe_tower_width - 3*m_perimeter_width; // width we draw into - float length_to_save = finish_layer().total_extrusion_length_in_plane(); - float length_to_wipe = volume_to_length(toolchange.wipe_volume, - m_perimeter_width, m_layer_info->height) - toolchange.first_wipe_line - length_to_save; - length_to_wipe = std::max(length_to_wipe,0.f); - float depth_to_wipe = m_perimeter_width * (std::floor(length_to_wipe/width) + ( length_to_wipe > 0.f ? 1.f : 0.f ) ) * m_extra_spacing; + float volume_to_save = length_to_volume(finish_layer().total_extrusion_length_in_plane(), m_perimeter_width, m_layer_info->height); + float volume_left_to_wipe = std::max(m_filpar[toolchange.new_tool].filament_minimal_purge_on_wipe_tower, toolchange.wipe_volume_total - volume_to_save); + float volume_we_need_depth_for = std::max(0.f, volume_left_to_wipe - length_to_volume(toolchange.first_wipe_line, m_perimeter_width*m_extra_flow, m_layer_info->height)); + float depth_to_wipe = get_wipe_depth(volume_we_need_depth_for, m_layer_info->height, m_perimeter_width, m_extra_flow, m_extra_spacing_wipe, width); toolchange.required_depth = toolchange.ramming_depth + depth_to_wipe; + toolchange.wipe_volume = volume_left_to_wipe; } } } @@ -1563,7 +1647,7 @@ void WipeTower2::generate(std::vector> return; plan_tower(); - for (int i=0;i<5;++i) { + for (int i = 0; i<5; ++i) { save_on_last_wipe(); plan_tower(); } @@ -1579,14 +1663,15 @@ void WipeTower2::generate(std::vector> } } - for (auto& used : m_used_filament_length) // reset used filament stats - used = 0.f; + m_used_filament_length.assign(m_used_filament_length.size(), 0.f); // reset used filament stats + assert(m_used_filament_length_until_layer.empty()); + m_used_filament_length_until_layer.emplace_back(0.f, m_used_filament_length); m_old_temperature = -1; // reset last temperature written in the gcode - std::vector layer_result; for (const WipeTower2::WipeTowerInfo& layer : m_plan) { + std::vector layer_result; set_layer(layer.z, layer.height, 0, false/*layer.z == m_plan.front().z*/, layer.z == m_plan.back().z); m_internal_rotation += 180.f; @@ -1623,6 +1708,10 @@ void WipeTower2::generate(std::vector> } result.emplace_back(std::move(layer_result)); + + if (m_used_filament_length_until_layer.empty() || m_used_filament_length_until_layer.back().first != layer.z) + m_used_filament_length_until_layer.emplace_back(); + m_used_filament_length_until_layer.back() = std::make_pair(layer.z, m_used_filament_length); } } diff --git a/src/libslic3r/GCode/WipeTower2.hpp b/src/libslic3r/GCode/WipeTower2.hpp index 58bdd6fc390..0f377d00f77 100644 --- a/src/libslic3r/GCode/WipeTower2.hpp +++ b/src/libslic3r/GCode/WipeTower2.hpp @@ -1,6 +1,5 @@ -// Orca: This file is ported from latest PrusaSlicer +// Orca: WipeTower2 for all non bbl printers, support all MMU device and toolchanger -// Original PrusaSlicer Copyright: #ifndef WipeTower2_ #define WipeTower2_ @@ -128,6 +127,7 @@ class WipeTower2 } std::vector get_used_filament() const { return m_used_filament_length; } + std::vector>> get_used_filament_until_layer() const { return m_used_filament_length_until_layer; } int get_number_of_toolchanges() const { return m_num_tool_changes; } struct FilamentParameters { @@ -140,6 +140,10 @@ class WipeTower2 float unloading_speed = 0.f; float unloading_speed_start = 0.f; float delay = 0.f ; + + float filament_stamping_loading_speed = 0.f; + float filament_stamping_distance = 0.f; + int cooling_moves = 0; float cooling_initial_speed = 0.f; float cooling_final_speed = 0.f; @@ -151,6 +155,7 @@ class WipeTower2 float filament_area; bool multitool_ramming; float multitool_ramming_time = 0.f; + float filament_minimal_purge_on_wipe_tower = 0.f; }; private: @@ -169,6 +174,7 @@ class WipeTower2 bool m_semm = true; // Are we using a single extruder multimaterial printer? bool m_enable_filament_ramming = true; + bool m_is_mk4mmu3 = false; Vec2f m_wipe_tower_pos; // Left front corner of the wipe tower in mm. float m_wipe_tower_width; // Width of the wipe tower. float m_wipe_tower_depth = 0.f; // Depth of the wipe tower @@ -219,8 +225,7 @@ class WipeTower2 // State of the wipe tower generator. unsigned int m_num_layer_changes = 0; // Layer change counter for the output statistics. unsigned int m_num_tool_changes = 0; // Tool change change counter for the output statistics. - ///unsigned int m_idx_tool_change_in_layer = 0; // Layer change counter in this layer. Counting up to m_max_color_changes. - bool m_print_brim = true; + // A fill-in direction (positive Y, negative Y) alternates with each layer. wipe_shape m_current_shape = SHAPE_NORMAL; size_t m_current_tool = 0; @@ -229,7 +234,9 @@ class WipeTower2 float m_depth_traversed = 0.f; // Current y position at the wipe tower. bool m_current_layer_finished = false; bool m_left_to_right = true; - float m_extra_spacing = 1.f; + float m_extra_flow = 1.f; + float m_extra_spacing_wipe = 1.f; + float m_extra_spacing_ramming = 1.f; bool is_first_layer() const { return size_t(m_layer_info - m_plan.begin()) == m_first_layer_idx; } @@ -241,21 +248,13 @@ class WipeTower2 return layer_height * ( m_perimeter_width - layer_height * (1.f-float(M_PI)/4.f)) / filament_area(); } - // Calculates length of extrusion line to extrude given volume - float volume_to_length(float volume, float line_width, float layer_height) const { - return std::max(0.f, volume / (layer_height * (line_width - layer_height * (1.f - float(M_PI) / 4.f)))); - } // Calculates depth for all layers and propagates them downwards void plan_tower(); - // Goes through m_plan and recalculates depths and width of the WT to make it exactly square - experimental - void make_wipe_tower_square(); - // Goes through m_plan, calculates border and finish_layer extrusions and subtracts them from last wipe void save_on_last_wipe(); - // to store information about tool changes for a given layer struct WipeTowerInfo{ struct ToolChange { @@ -265,19 +264,19 @@ class WipeTower2 float ramming_depth; float first_wipe_line; float wipe_volume; + float wipe_volume_total; ToolChange(size_t old, size_t newtool, float depth=0.f, float ramming_depth=0.f, float fwl=0.f, float wv=0.f) - : old_tool{old}, new_tool{newtool}, required_depth{depth}, ramming_depth{ramming_depth}, first_wipe_line{fwl}, wipe_volume{wv} {} + : old_tool{old}, new_tool{newtool}, required_depth{depth}, ramming_depth{ramming_depth}, first_wipe_line{fwl}, wipe_volume{wv}, wipe_volume_total{wv} {} }; float z; // z position of the layer float height; // layer height float depth; // depth of the layer based on all layers above - float extra_spacing; float toolchanges_depth() const { float sum = 0.f; for (const auto &a : tool_changes) sum += a.required_depth; return sum; } std::vector tool_changes; WipeTowerInfo(float z_par, float layer_height_par) - : z{z_par}, height{layer_height_par}, depth{0}, extra_spacing{1.f} {} + : z{z_par}, height{layer_height_par}, depth{0} {} }; std::vector m_plan; // Stores information about all layers and toolchanges for the future wipe tower (filled by plan_toolchange(...)) @@ -289,6 +288,7 @@ class WipeTower2 // Stores information about used filament length per extruder: std::vector m_used_filament_length; + std::vector>> m_used_filament_length_until_layer; // Return index of first toolchange that switches to non-soluble extruder // ot -1 if there is no such toolchange. @@ -299,6 +299,7 @@ class WipeTower2 WipeTowerWriter2 &writer, const WipeTower::box_coordinates &cleaning_box, const std::string& current_material, + const int old_temperature, const int new_temperature); void toolchange_Change( @@ -316,6 +317,9 @@ class WipeTower2 float wipe_volume); }; + + + } // namespace Slic3r -#endif // WipeTowerPrusaMM_hpp_ +#endif // slic3r_GCode_WipeTower_hpp_ diff --git a/src/libslic3r/GCodeReader.cpp b/src/libslic3r/GCodeReader.cpp index 11683782862..9889fe90cbf 100644 --- a/src/libslic3r/GCodeReader.cpp +++ b/src/libslic3r/GCodeReader.cpp @@ -275,7 +275,7 @@ bool GCodeReader::GCodeLine::has_value(char axis, float &value) const return false; } -void GCodeReader::GCodeLine::set(const GCodeReader &reader, const Axis axis, const float new_value, const int decimal_digits) +void GCodeReader::GCodeLine::set(const Axis axis, const float new_value, const int decimal_digits) { std::ostringstream ss; ss << std::fixed << std::setprecision(decimal_digits) << new_value; diff --git a/src/libslic3r/GCodeReader.hpp b/src/libslic3r/GCodeReader.hpp index 52a37dde55c..bcfabd7bbbd 100644 --- a/src/libslic3r/GCodeReader.hpp +++ b/src/libslic3r/GCodeReader.hpp @@ -50,7 +50,7 @@ class GCodeReader { bool extruding(const GCodeReader &reader) const { return (this->cmd_is("G1") || this->cmd_is("G2") || this->cmd_is("G3")) && this->dist_E(reader) > 0; } bool retracting(const GCodeReader &reader) const { return (this->cmd_is("G1") || this->cmd_is("G2") || this->cmd_is("G3")) && this->dist_E(reader) < 0; } bool travel() const { return (this->cmd_is("G1") || this->cmd_is("G2") || this->cmd_is("G3")) && ! this->has(E); } - void set(const GCodeReader &reader, const Axis axis, const float new_value, const int decimal_digits = 3); + void set(const Axis axis, const float new_value, const int decimal_digits = 3); bool has_x() const { return this->has(X); } bool has_y() const { return this->has(Y); } @@ -79,6 +79,16 @@ class GCodeReader { return strncmp(cmd, cmd_test, len) == 0 && GCodeReader::is_end_of_word(cmd[len]); } + static bool cmd_starts_with(const std::string& gcode_line, const char* cmd_test) { + return strncmp(GCodeReader::skip_whitespaces(gcode_line.c_str()), cmd_test, strlen(cmd_test)) == 0; + } + + static std::string extract_cmd(const std::string& gcode_line) { + GCodeLine temp; + temp.m_raw = gcode_line; + const std::string_view cmd = temp.cmd(); + return { cmd.begin(), cmd.end() }; + } private: std::string m_raw; float m_axis[NUM_AXES]; @@ -93,6 +103,7 @@ class GCodeReader { void reset() { memset(m_position, 0, sizeof(m_position)); } void apply_config(const GCodeConfig &config); void apply_config(const DynamicPrintConfig &config); + const GCodeConfig& config() { return m_config; }; template void parse_buffer(const std::string &buffer, Callback callback) diff --git a/src/libslic3r/GCodeWriter.cpp b/src/libslic3r/GCodeWriter.cpp index d4ebb643621..f60d81a95a9 100644 --- a/src/libslic3r/GCodeWriter.cpp +++ b/src/libslic3r/GCodeWriter.cpp @@ -90,48 +90,56 @@ std::string GCodeWriter::postamble() const return gcode.str(); } -std::string GCodeWriter::set_temperature(unsigned int temperature, bool wait, int tool) const -{ - if (wait && (FLAVOR_IS(gcfMakerWare) || FLAVOR_IS(gcfSailfish))) +std::string GCodeWriter::set_temperature(unsigned int temperature, GCodeFlavor flavor, bool wait, int tool, std::string comment){ + if (wait && (flavor == gcfMakerWare || flavor == gcfSailfish)) return ""; - - std::string code, comment; - if (wait && FLAVOR_IS_NOT(gcfTeacup) && FLAVOR_IS_NOT(gcfRepRapFirmware)) { - code = "M109"; - comment = "set nozzle temperature and wait for it to be reached"; + + std::string code; + if (wait && flavor != gcfTeacup && flavor != gcfRepRapFirmware) { + code = "M109"; + if(comment.empty()) + comment = "set nozzle temperature and wait for it to be reached"; } else { - if (FLAVOR_IS(gcfRepRapFirmware)) { // M104 is deprecated on RepRapFirmware + if (flavor == gcfRepRapFirmware) { // M104 is deprecated on RepRapFirmware code = "G10"; } else { code = "M104"; } - comment = "set nozzle temperature"; + if(comment.empty()) + comment = "set nozzle temperature"; } - + std::ostringstream gcode; gcode << code << " "; - if (FLAVOR_IS(gcfMach3) || FLAVOR_IS(gcfMachinekit)) { + if (flavor == gcfMach3 || flavor == gcfMachinekit) { gcode << "P"; } else { gcode << "S"; } gcode << temperature; - bool multiple_tools = this->multiple_extruders && ! m_single_extruder_multi_material; - if (tool != -1 && (multiple_tools || FLAVOR_IS(gcfMakerWare) || FLAVOR_IS(gcfSailfish)) ) { - if (FLAVOR_IS(gcfRepRapFirmware)) { + if (tool != -1) { + if (flavor == gcfRepRapFirmware) { gcode << " P" << tool; } else { gcode << " T" << tool; } } gcode << " ; " << comment << "\n"; - - if ((FLAVOR_IS(gcfTeacup) || FLAVOR_IS(gcfRepRapFirmware)) && wait) + + if ((flavor == gcfTeacup || flavor == gcfRepRapFirmware) && wait) gcode << "M116 ; wait for temperature to be reached\n"; - + return gcode.str(); } +std::string GCodeWriter::set_temperature(unsigned int temperature, bool wait, int tool) const +{ + // set tool to -1 to make sure we won't emit T parameter for single extruder or SEMM + if (!this->multiple_extruders || m_single_extruder_multi_material) + tool = -1; + return set_temperature(temperature, this->config.gcode_flavor, wait, tool); +} + // BBS std::string GCodeWriter::set_bed_temperature(int temperature, bool wait) { diff --git a/src/libslic3r/GCodeWriter.hpp b/src/libslic3r/GCodeWriter.hpp index 8e1effcc4ee..ccdd460fe07 100644 --- a/src/libslic3r/GCodeWriter.hpp +++ b/src/libslic3r/GCodeWriter.hpp @@ -43,6 +43,8 @@ class GCodeWriter { } std::string preamble(); std::string postamble() const; + static std::string set_temperature(unsigned int temperature, GCodeFlavor flavor, bool wait = false, int tool = -1, std::string comment = std::string()); + std::string set_temperature(unsigned int temperature, bool wait = false, int tool = -1) const; std::string set_bed_temperature(int temperature, bool wait = false); std::string set_chamber_temperature(int temperature, bool wait = false); @@ -80,7 +82,7 @@ class GCodeWriter { std::string lift(LiftType lift_type = LiftType::NormalLift, bool spiral_vase = false); std::string unlift(); Vec3d get_position() const { return m_pos; } - void set_position(const Vec3d& in) { m_pos = in; } + void set_position(const Vec3d& in) { m_pos = in; } double get_zhop() const { return m_lifted; } //BBS: set offset for gcode writer diff --git a/src/libslic3r/Geometry.cpp b/src/libslic3r/Geometry.cpp index 54dcb14cca3..62385a5018a 100644 --- a/src/libslic3r/Geometry.cpp +++ b/src/libslic3r/Geometry.cpp @@ -4,21 +4,14 @@ #include "ClipperUtils.hpp" #include "ExPolygon.hpp" #include "Line.hpp" -#include "clipper.hpp" -#include #include #include -#include -#include -#include -#include #include #include #include #include #include -#include #if defined(_MSC_VER) && defined(__clang__) #define BOOST_NO_CXX17_HDR_STRING_VIEW diff --git a/src/libslic3r/Geometry/Circle.cpp b/src/libslic3r/Geometry/Circle.cpp index 67966719549..d7279c3b1b4 100644 --- a/src/libslic3r/Geometry/Circle.cpp +++ b/src/libslic3r/Geometry/Circle.cpp @@ -1,7 +1,5 @@ #include "Circle.hpp" -#include "../Polygon.hpp" - #include #include #include diff --git a/src/libslic3r/Geometry/Voronoi.cpp b/src/libslic3r/Geometry/Voronoi.cpp index 0842ddc37bc..fc7ead40d02 100644 --- a/src/libslic3r/Geometry/Voronoi.cpp +++ b/src/libslic3r/Geometry/Voronoi.cpp @@ -2,7 +2,6 @@ #include "libslic3r/Arachne/utils/PolygonsSegmentIndex.hpp" #include "libslic3r/Geometry/VoronoiUtils.hpp" -#include "libslic3r/Geometry/VoronoiUtilsCgal.hpp" #include "libslic3r/MultiMaterialSegmentation.hpp" #include diff --git a/src/libslic3r/Geometry/VoronoiUtilsCgal.cpp b/src/libslic3r/Geometry/VoronoiUtilsCgal.cpp index a0e2191af59..60f66edbf69 100644 --- a/src/libslic3r/Geometry/VoronoiUtilsCgal.cpp +++ b/src/libslic3r/Geometry/VoronoiUtilsCgal.cpp @@ -1,4 +1,3 @@ -#include #include #include #include diff --git a/src/libslic3r/JumpPointSearch.cpp b/src/libslic3r/JumpPointSearch.cpp index f8ef2ff100b..a3b078127bf 100644 --- a/src/libslic3r/JumpPointSearch.cpp +++ b/src/libslic3r/JumpPointSearch.cpp @@ -1,26 +1,18 @@ #include "JumpPointSearch.hpp" #include "BoundingBox.hpp" -#include "ExPolygon.hpp" #include "Point.hpp" #include "libslic3r/AStar.hpp" #include "libslic3r/KDTreeIndirect.hpp" -#include "libslic3r/Polygon.hpp" #include "libslic3r/Polyline.hpp" #include "libslic3r/libslic3r.h" -#include -#include -#include #include #include #include #include #include -#include #include #include -#include - //#define DEBUG_FILES #ifdef DEBUG_FILES #include "libslic3r/SVG.hpp" diff --git a/src/libslic3r/Line.cpp b/src/libslic3r/Line.cpp index 7e75d563222..51c84a16f76 100644 --- a/src/libslic3r/Line.cpp +++ b/src/libslic3r/Line.cpp @@ -1,9 +1,7 @@ #include "Geometry.hpp" #include "Line.hpp" -#include "Polyline.hpp" #include #include -#include namespace Slic3r { diff --git a/src/libslic3r/MeshBoolean.cpp b/src/libslic3r/MeshBoolean.cpp index c412553a223..3cd0771962d 100644 --- a/src/libslic3r/MeshBoolean.cpp +++ b/src/libslic3r/MeshBoolean.cpp @@ -330,7 +330,7 @@ void segment(CGALMesh& src, std::vector& dst, double smoothing_alpha = // fill holes typedef boost::graph_traits<_EpicMesh>::halfedge_descriptor halfedge_descriptor; - typedef boost::graph_traits<_EpicMesh>::vertex_descriptor vertex_descriptor; +// typedef boost::graph_traits<_EpicMesh>::vertex_descriptor vertex_descriptor; std::vector border_cycles; CGAL::Polygon_mesh_processing::extract_boundary_cycles(out, std::back_inserter(border_cycles)); for (halfedge_descriptor h : border_cycles) @@ -693,7 +693,7 @@ bool do_boolean_single(McutMesh &srcMesh, const McutMesh &cutMesh, const std::st McutMesh outMesh; int N_vertices = 0; // traversal of all connected components - for (int n = 0; n < numConnComps; ++n) { + for (unsigned int n = 0; n < numConnComps; ++n) { // query the data of each connected component from MCUT McConnectedComponent connComp = connectedComponents[n]; diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index bb7c33e26bd..96136db395e 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -442,7 +442,7 @@ ModelObject* Model::add_object(const ModelObject &other) this->objects.push_back(new_object); // BBS: backup if (need_backup) { - if (auto model = other.get_model()) { + if (other.get_model()) { auto iter = object_backup_id_map.find(other.id().id); if (iter != object_backup_id_map.end()) { object_backup_id_map.emplace(new_object->id().id, iter->second); @@ -2615,7 +2615,7 @@ size_t ModelVolume::split(unsigned int max_extruders) size_t ivolume = std::find(this->object->volumes.begin(), this->object->volumes.end(), this) - this->object->volumes.begin(); const std::string name = this->name; - unsigned int extruder_counter = 0; + // unsigned int extruder_counter = 0; const Vec3d offset = this->get_offset(); for (TriangleMesh &mesh : meshes) { @@ -2930,9 +2930,6 @@ bool Model::obj_import_vertex_color_deal(const std::vector &verte std::cout << "error"; } }; - auto calc_tri_area = [](const Vec3f &v0, const Vec3f &v1, const Vec3f &v2) { - return std::abs((v0 - v1).cross(v0 - v2).norm()) / 2; - }; auto volume = obj->volumes[0]; volume->config.set("extruder", first_extruder_id); auto face_count = volume->mesh().its.indices.size(); @@ -3032,7 +3029,6 @@ bool Model::obj_import_face_color_deal(const std::vector &face_fi volume->mmu_segmentation_facets.reserve(face_count); if (volume->mesh().its.indices.size() != face_filament_ids.size()) { return false; } for (size_t i = 0; i < volume->mesh().its.indices.size(); i++) { - auto face = volume->mesh().its.indices[i]; auto filament_id = face_filament_ids[i]; if (filament_id <= 1) { continue; } std::string result; diff --git a/src/libslic3r/ModelArrange.cpp b/src/libslic3r/ModelArrange.cpp index 477509e69e9..f1f926fe6dc 100644 --- a/src/libslic3r/ModelArrange.cpp +++ b/src/libslic3r/ModelArrange.cpp @@ -167,7 +167,6 @@ ArrangePolygon get_instance_arrange_poly(ModelInstance* instance, const Slic3r:: auto support_type_ptr = obj->get_config_value>(config, "support_type"); auto support_type = support_type_ptr->value; auto enable_support = supp_type_ptr->getBool(); - int support_int = support_type_ptr->getInt(); if (enable_support && (support_type == stNormalAuto || support_type == stNormal)) ap.brim_width = 6.0; diff --git a/src/libslic3r/MultiMaterialSegmentation.cpp b/src/libslic3r/MultiMaterialSegmentation.cpp index 4fe0d6b4b16..c0476de6d97 100644 --- a/src/libslic3r/MultiMaterialSegmentation.cpp +++ b/src/libslic3r/MultiMaterialSegmentation.cpp @@ -338,7 +338,6 @@ static std::vector> get_all_next_arcs( if (arc.type == MMU_Graph::ARC_TYPE::BORDER && arc.color != color) continue; - Vec2d arc_line = graph.nodes[arc.to_idx].point - graph.nodes[arc.from_idx].point; next_continue_arc.emplace_back(&arc); all_next_arcs.emplace_back(next_continue_arc); } @@ -1286,7 +1285,6 @@ static void cut_segmented_layers(const std::vector &input_exp const std::function &throw_on_cancel_callback) { BOOST_LOG_TRIVIAL(debug) << "MM segmentation - cutting segmented layers in parallel - begin"; - const float interlocking_cut_width = interlocking_depth > 0.f ? std::max(cut_width - interlocking_depth, 0.f) : 0.f; tbb::parallel_for(tbb::blocked_range(0, segmented_regions.size()), [&segmented_regions, &input_expolygons, &cut_width, &interlocking_depth, &throw_on_cancel_callback](const tbb::blocked_range &range) { for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) { diff --git a/src/libslic3r/Orient.cpp b/src/libslic3r/Orient.cpp index ce448fc7e6c..2fcbb6389a2 100644 --- a/src/libslic3r/Orient.cpp +++ b/src/libslic3r/Orient.cpp @@ -138,8 +138,6 @@ class AutoOrienter { auto cost_items = get_features(orientation, params.min_volume); - float unprintability = target_function(cost_items, params.min_volume); - results[orientation] = cost_items; BOOST_LOG_TRIVIAL(info) << std::fixed << std::setprecision(4) << "orientation:" << orientation.transpose() << ", cost:" << std::fixed << std::setprecision(4) << cost_items.field_values(); @@ -230,10 +228,10 @@ class AutoOrienter { { std::unordered_map alignments; // init to 0 - for (size_t i = 0; i < areas_.size(); i++) + for (Eigen::Index i = 0; i < areas_.size(); i++) alignments.insert(std::pair(normals_.row(i), 0)); // cumulate areas - for (size_t i = 0; i < areas_.size(); i++) + for (Eigen::Index i = 0; i < areas_.size(); i++) { alignments[normals_.row(i)] += areas_(i); } @@ -257,11 +255,11 @@ class AutoOrienter { Vec3f n1 = { 0, 0, 0 }; std::vector current_areas = {0, 0}; // init to 0 - for (size_t i = 0; i < areas_.size(); i++) { + for (Eigen::Index i = 0; i < areas_.size(); i++) { alignments_.insert(std::pair(quantize_normals_.row(i), std::pair(current_areas, n1))); } // cumulate areas - for (size_t i = 0; i < areas_.size(); i++) + for (Eigen::Index i = 0; i < areas_.size(); i++) { alignments_[quantize_normals_.row(i)].first[1] += areas_(i); if (areas_(i) > alignments_[quantize_normals_.row(i)].first[0]){ @@ -339,7 +337,7 @@ class AutoOrienter { z_max_hull.resize(mesh_convex_hull.facets_count(), 1); its = mesh_convex_hull.its; - for (size_t i = 0; i < z_max_hull.rows(); i++) + for (Eigen::Index i = 0; i < z_max_hull.rows(); i++) { float z0 = its.get_vertex(i,0).dot(orientation); float z1 = its.get_vertex(i,1).dot(orientation); @@ -393,7 +391,7 @@ class AutoOrienter { // filter overhang Eigen::VectorXf normal_projection(normals.rows(), 1);// = this->normals.dot(orientation); - for (size_t i = 0; i < normals.rows(); i++) + for (Eigen::Index i = 0; i < normals.rows(); i++) { normal_projection(i) = normals.row(i).dot(orientation); } @@ -459,7 +457,6 @@ class AutoOrienter { cost = params.TAR_A * (overhang + params.TAR_B) + params.RELATIVE_F * (/*costs.volume/100*/overhang*params.TAR_C + params.TAR_D + params.TAR_LAF * costs.area_laf * params.use_low_angle_face) / (params.TAR_D + params.CONTOUR_F * costs.contour + params.BOTTOM_F * bottom + params.BOTTOM_HULL_F * bottom_hull + params.TAR_E * overhang + params.TAR_PROJ_AREA * costs.area_projected); } else { - float overhang = costs.overhang; cost = params.RELATIVE_F * (costs.overhang * params.TAR_C + params.TAR_D + params.TAR_LAF * costs.area_laf * params.use_low_angle_face) / (params.TAR_D + params.CONTOUR_F * costs.contour + params.BOTTOM_F * bottom + params.BOTTOM_HULL_F * bottom_hull + params.TAR_PROJ_AREA * costs.area_projected); } cost += (costs.bottom < params.BOTTOM_MIN) * 100;// +(costs.height_to_bottom_hull_ratio > params.height_to_bottom_hull_ratio_MIN) * 110; diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 439ef578748..941cdf8f42f 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -242,12 +242,10 @@ static std::deque split_polyline_by_degree(const Polyline &p Polyline right; Polyline temp_copy = polyline_with_insert_points; - size_t poly_size = polyline_with_insert_points.size(); // BBS: merge degree in limited range //find first degee base double degree_base = int(points_overhang[points_overhang.size() - 1] / min_degree_gap) * min_degree_gap + min_degree_gap; degree_base = degree_base > max_overhang_degree ? max_overhang_degree : degree_base; - double short_poly_len = 0; for (int point_idx = points_overhang.size() - 2; point_idx > 0; --point_idx) { double degree = points_overhang[point_idx]; @@ -940,7 +938,6 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p if (perimeter_generator.config->overhang_speed_classic && 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; @@ -2253,7 +2250,6 @@ void PerimeterGenerator::process_no_bridge(Surfaces& all_surfaces, coord_t perim if (!unsupported.empty()) { //only consider the part that can be bridged (really, by the bridge algorithm) //first, separate into islands (ie, each ExPlolygon) - int numploy = 0; //only consider the bottom layer that intersect unsupported, to be sure it's only on our island. ExPolygonCollection lower_island(support); //a detector per island @@ -2371,7 +2367,6 @@ void PerimeterGenerator::process_no_bridge(Surfaces& all_surfaces, coord_t perim //ExPolygons no_bridge = diff_ex(offset_ex(unbridgeable, ext_perimeter_width * 3 / 2), last); //bridges_temp = diff_ex(bridges_temp, no_bridge); coordf_t offset_to_do = bridged_infill_margin; - bool first = true; unbridgeable = diff_ex(unbridgeable, offset_ex(bridges_temp, ext_perimeter_width)); while (offset_to_do > ext_perimeter_width * 1.5) { unbridgeable = offset2_ex(unbridgeable, -ext_perimeter_width / 4, ext_perimeter_width * 2.25, ClipperLib::jtSquare); @@ -2379,7 +2374,6 @@ void PerimeterGenerator::process_no_bridge(Surfaces& all_surfaces, coord_t perim bridges_temp = offset_ex(bridges_temp, ext_perimeter_width, ClipperLib::jtMiter, 6.); unbridgeable = diff_ex(unbridgeable, offset_ex(bridges_temp, ext_perimeter_width)); offset_to_do -= ext_perimeter_width; - first = false; } unbridgeable = offset_ex(unbridgeable, ext_perimeter_width + offset_to_do, ClipperLib::jtSquare); bridges_temp = diff_ex(bridges_temp, unbridgeable); diff --git a/src/libslic3r/PlaceholderParser.cpp b/src/libslic3r/PlaceholderParser.cpp index 22ef3705d8d..04935ae481b 100644 --- a/src/libslic3r/PlaceholderParser.cpp +++ b/src/libslic3r/PlaceholderParser.cpp @@ -1,6 +1,7 @@ #include "PlaceholderParser.hpp" #include "Exception.hpp" #include "Flow.hpp" +#include "Utils.hpp" #include #include #include @@ -40,19 +41,11 @@ #include #include #include -#if BOOST_VERSION >= 107800 #include #include #include #include #include -#else -#include -#include -#include -#include -#include -#endif #include #include #include @@ -73,11 +66,6 @@ namespace Slic3r { -//! macro used to mark string used at localization, -//! return same string -#define L(s) (s) -#define _(s) Slic3r::I18N::translate(s) - PlaceholderParser::PlaceholderParser(const DynamicConfig *external_config) : m_external_config(external_config) { this->set("version", std::string(SoftFever_VERSION)); @@ -180,30 +168,35 @@ namespace px = boost::phoenix; namespace client { - template + using Iterator = std::string::const_iterator; + using IteratorRange = boost::iterator_range; + struct OptWithPos { OptWithPos() {} - OptWithPos(ConfigOptionConstPtr opt, boost::iterator_range it_range) : opt(opt), it_range(it_range) {} + OptWithPos(ConfigOptionConstPtr opt, IteratorRange it_range, bool writable = false) : opt(opt), it_range(it_range), writable(writable) {} ConfigOptionConstPtr opt { nullptr }; bool writable { false }; // -1 means it is a scalar variable, or it is a vector variable and index was not assigned yet or the whole vector is considered. int index { -1 }; - boost::iterator_range it_range; + IteratorRange it_range; + bool empty() const { return opt == nullptr; } bool has_index() const { return index != -1; } }; - template - std::ostream& operator<<(std::ostream& os, OptWithPos const& opt) + std::ostream& operator<<(std::ostream& os, OptWithPos const& opt) { os << std::string(opt.it_range.begin(), opt.it_range.end()); return os; } - template struct expr { expr() {} + expr(const expr &rhs) : m_type(rhs.type()), it_range(rhs.it_range) + { if (rhs.type() == TYPE_STRING) m_data.s = new std::string(*rhs.m_data.s); else m_data.set(rhs.m_data); } + expr(expr &&rhs) : expr(std::move(rhs), rhs.it_range.begin(), rhs.it_range.end()) {} + explicit expr(bool b) : m_type(TYPE_BOOL) { m_data.b = b; } explicit expr(bool b, const Iterator &it_begin, const Iterator &it_end) : m_type(TYPE_BOOL), it_range(it_begin, it_end) { m_data.b = b; } explicit expr(int i) : m_type(TYPE_INT) { m_data.i = i; } @@ -212,13 +205,11 @@ namespace client explicit expr(double d, const Iterator &it_begin, const Iterator &it_end) : m_type(TYPE_DOUBLE), it_range(it_begin, it_end) { m_data.d = d; } explicit expr(const char *s) : m_type(TYPE_STRING) { m_data.s = new std::string(s); } explicit expr(const std::string &s) : m_type(TYPE_STRING) { m_data.s = new std::string(s); } + explicit expr(std::string &&s) : m_type(TYPE_STRING) { m_data.s = new std::string(std::move(s)); } explicit expr(const std::string &s, const Iterator &it_begin, const Iterator &it_end) : m_type(TYPE_STRING), it_range(it_begin, it_end) { m_data.s = new std::string(s); } - expr(const expr &rhs) : m_type(rhs.type()), it_range(rhs.it_range) - { if (rhs.type() == TYPE_STRING) m_data.s = new std::string(*rhs.m_data.s); else m_data.set(rhs.m_data); } - explicit expr(expr &&rhs) : expr(rhs, rhs.it_range.begin(), rhs.it_range.end()) {} explicit expr(expr &&rhs, const Iterator &it_begin, const Iterator &it_end) : m_type(rhs.type()), it_range{ it_begin, it_end } - { + { m_data.set(rhs.m_data); rhs.m_type = TYPE_EMPTY; } @@ -304,6 +295,9 @@ namespace client { std::string out; switch (this->type()) { + case TYPE_EMPTY: + // Inside an if / else block to be skipped. + break; case TYPE_BOOL: out = this->b() ? "true" : "false"; break; case TYPE_INT: out = std::to_string(this->i()); break; case TYPE_DOUBLE: @@ -328,15 +322,18 @@ namespace client // Range of input iterators covering this expression. // Used for throwing parse exceptions. - boost::iterator_range it_range; + IteratorRange it_range; expr unary_minus(const Iterator start_pos) const { switch (this->type()) { + case TYPE_EMPTY: + // Inside an if / else block to be skipped. + return expr(); case TYPE_INT : - return expr(- this->i(), start_pos, this->it_range.end()); + return expr(- this->i(), start_pos, this->it_range.end()); case TYPE_DOUBLE: - return expr(- this->d(), start_pos, this->it_range.end()); + return expr(- this->d(), start_pos, this->it_range.end()); default: this->throw_exception("Cannot apply unary minus operator."); } @@ -348,10 +345,13 @@ namespace client expr unary_integer(const Iterator start_pos) const { switch (this->type()) { + case TYPE_EMPTY: + // Inside an if / else block to be skipped. + return expr(); case TYPE_INT: - return expr(this->i(), start_pos, this->it_range.end()); + return expr(this->i(), start_pos, this->it_range.end()); case TYPE_DOUBLE: - return expr(static_cast(this->d()), start_pos, this->it_range.end()); + return expr(static_cast(this->d()), start_pos, this->it_range.end()); default: this->throw_exception("Cannot convert to integer."); } @@ -363,10 +363,13 @@ namespace client expr round(const Iterator start_pos) const { switch (this->type()) { + case TYPE_EMPTY: + // Inside an if / else block to be skipped. + return expr(); case TYPE_INT: - return expr(this->i(), start_pos, this->it_range.end()); + return expr(this->i(), start_pos, this->it_range.end()); case TYPE_DOUBLE: - return expr(static_cast(std::round(this->d())), start_pos, this->it_range.end()); + return expr(static_cast(std::round(this->d())), start_pos, this->it_range.end()); default: this->throw_exception("Cannot round a non-numeric value."); } @@ -378,8 +381,11 @@ namespace client expr unary_not(const Iterator start_pos) const { switch (this->type()) { + case TYPE_EMPTY: + // Inside an if / else block to be skipped. + return expr(); case TYPE_BOOL: - return expr(! this->b(), start_pos, this->it_range.end()); + return expr(! this->b(), start_pos, this->it_range.end()); default: this->throw_exception("Cannot apply a not operator."); } @@ -390,7 +396,9 @@ namespace client expr &operator+=(const expr &rhs) { - if (this->type() == TYPE_STRING) { + if (this->type() == TYPE_EMPTY) { + // Inside an if / else block to be skipped. + } else if (this->type() == TYPE_STRING) { // Convert the right hand side to string and append. *m_data.s += rhs.to_string(); } else if (rhs.type() == TYPE_STRING) { @@ -405,78 +413,104 @@ namespace client else m_data.i += rhs.i(); } - this->it_range = boost::iterator_range(this->it_range.begin(), rhs.it_range.end()); + this->it_range = IteratorRange(this->it_range.begin(), rhs.it_range.end()); return *this; } expr &operator-=(const expr &rhs) { - const char *err_msg = "Cannot subtract non-numeric types."; - this->throw_if_not_numeric(err_msg); - rhs.throw_if_not_numeric(err_msg); - if (this->type() == TYPE_DOUBLE || rhs.type() == TYPE_DOUBLE) - this->set_d_lite(this->as_d() - rhs.as_d()); - else - m_data.i -= rhs.i(); - this->it_range = boost::iterator_range(this->it_range.begin(), rhs.it_range.end()); + if (this->type() == TYPE_EMPTY) { + // Inside an if / else block to be skipped. + this->reset(); + } else { + const char *err_msg = "Cannot subtract non-numeric types."; + this->throw_if_not_numeric(err_msg); + rhs.throw_if_not_numeric(err_msg); + if (this->type() == TYPE_DOUBLE || rhs.type() == TYPE_DOUBLE) + this->set_d_lite(this->as_d() - rhs.as_d()); + else + m_data.i -= rhs.i(); + this->it_range = IteratorRange(this->it_range.begin(), rhs.it_range.end()); + } return *this; } expr &operator*=(const expr &rhs) { - const char *err_msg = "Cannot multiply with non-numeric type."; - this->throw_if_not_numeric(err_msg); - rhs.throw_if_not_numeric(err_msg); - if (this->type() == TYPE_DOUBLE || rhs.type() == TYPE_DOUBLE) - this->set_d_lite(this->as_d() * rhs.as_d()); - else - m_data.i *= rhs.i(); - this->it_range = boost::iterator_range(this->it_range.begin(), rhs.it_range.end()); + if (this->type() == TYPE_EMPTY) { + // Inside an if / else block to be skipped. + this->reset(); + } else { + const char *err_msg = "Cannot multiply with non-numeric type."; + this->throw_if_not_numeric(err_msg); + rhs.throw_if_not_numeric(err_msg); + if (this->type() == TYPE_DOUBLE || rhs.type() == TYPE_DOUBLE) + this->set_d_lite(this->as_d() * rhs.as_d()); + else + m_data.i *= rhs.i(); + this->it_range = IteratorRange(this->it_range.begin(), rhs.it_range.end()); + } return *this; } expr &operator/=(const expr &rhs) { - this->throw_if_not_numeric("Cannot divide a non-numeric type."); - rhs.throw_if_not_numeric("Cannot divide with a non-numeric type."); - if (rhs.type() == TYPE_INT ? (rhs.i() == 0) : (rhs.d() == 0.)) - rhs.throw_exception("Division by zero"); - if (this->type() == TYPE_DOUBLE || rhs.type() == TYPE_DOUBLE) - this->set_d_lite(this->as_d() / rhs.as_d()); - else - m_data.i /= rhs.i(); - this->it_range = boost::iterator_range(this->it_range.begin(), rhs.it_range.end()); + if (this->type() == TYPE_EMPTY) { + // Inside an if / else block to be skipped. + this->reset(); + } else { + this->throw_if_not_numeric("Cannot divide a non-numeric type."); + rhs.throw_if_not_numeric("Cannot divide with a non-numeric type."); + if (rhs.type() == TYPE_INT ? (rhs.i() == 0) : (rhs.d() == 0.)) + rhs.throw_exception("Division by zero"); + if (this->type() == TYPE_DOUBLE || rhs.type() == TYPE_DOUBLE) + this->set_d_lite(this->as_d() / rhs.as_d()); + else + m_data.i /= rhs.i(); + this->it_range = IteratorRange(this->it_range.begin(), rhs.it_range.end()); + } return *this; } expr &operator%=(const expr &rhs) { - this->throw_if_not_numeric("Cannot divide a non-numeric type."); - rhs.throw_if_not_numeric("Cannot divide with a non-numeric type."); - if (rhs.type() == TYPE_INT ? (rhs.i() == 0) : (rhs.d() == 0.)) - rhs.throw_exception("Division by zero"); - if (this->type() == TYPE_DOUBLE || rhs.type() == TYPE_DOUBLE) - this->set_d_lite(std::fmod(this->as_d(), rhs.as_d())); - else - m_data.i %= rhs.i(); - this->it_range = boost::iterator_range(this->it_range.begin(), rhs.it_range.end()); + if (this->type() == TYPE_EMPTY) { + // Inside an if / else block to be skipped. + this->reset(); + } else { + this->throw_if_not_numeric("Cannot divide a non-numeric type."); + rhs.throw_if_not_numeric("Cannot divide with a non-numeric type."); + if (rhs.type() == TYPE_INT ? (rhs.i() == 0) : (rhs.d() == 0.)) + rhs.throw_exception("Division by zero"); + if (this->type() == TYPE_DOUBLE || rhs.type() == TYPE_DOUBLE) + this->set_d_lite(std::fmod(this->as_d(), rhs.as_d())); + else + m_data.i %= rhs.i(); + this->it_range = IteratorRange(this->it_range.begin(), rhs.it_range.end()); + } return *this; } static void to_string2(expr &self, std::string &out) { - out = self.to_string(); + if (self.type() != TYPE_EMPTY) + // Not inside an if / else block to be skipped + out = self.to_string(); } static void evaluate_boolean(expr &self, bool &out) { - if (self.type() != TYPE_BOOL) - self.throw_exception("Not a boolean expression"); - out = self.b(); + if (self.type() != TYPE_EMPTY) { + // Not inside an if / else block to be skipped + if (self.type() != TYPE_BOOL) + self.throw_exception("Not a boolean expression"); + out = self.b(); + } } static void evaluate_boolean_to_string(expr &self, std::string &out) { + assert(self.type() != TYPE_EMPTY); if (self.type() != TYPE_BOOL) self.throw_exception("Not a boolean expression"); out = self.b() ? "true" : "false"; @@ -485,6 +519,9 @@ namespace client // Is lhs==rhs? Store the result into lhs. static void compare_op(expr &lhs, expr &rhs, char op, bool invert) { + if (lhs.type() == TYPE_EMPTY) + // Inside an if / else block to be skipped + return; bool value = false; if (lhs.numeric_type() && rhs.numeric_type()) { // Both types are numeric. @@ -541,6 +578,9 @@ namespace client // Store the result into param1. static void function_2params(expr ¶m1, expr ¶m2, Function2ParamsType fun) { + if (param1.type() == TYPE_EMPTY) + // Inside an if / else block to be skipped + return; throw_if_not_numeric(param1); throw_if_not_numeric(param2); if (param1.type() == TYPE_DOUBLE || param2.type() == TYPE_DOUBLE) { @@ -568,6 +608,9 @@ namespace client // Store the result into param1. static void random(expr ¶m1, expr ¶m2, std::mt19937 &rng) { + if (param1.type() == TYPE_EMPTY) + // Inside an if / else block to be skipped + return; throw_if_not_numeric(param1); throw_if_not_numeric(param2); if (param1.type() == TYPE_DOUBLE || param2.type() == TYPE_DOUBLE) @@ -581,6 +624,9 @@ namespace client template static void digits(expr ¶m1, expr ¶m2, expr ¶m3) { + if (param1.type() == TYPE_EMPTY) + // Inside an if / else block to be skipped + return; throw_if_not_numeric(param1); if (param2.type() != TYPE_INT) param2.throw_exception("digits: second parameter must be integer"); @@ -600,8 +646,11 @@ namespace client param1.set_s(buf); } - static void regex_op(const expr &lhs, boost::iterator_range &rhs, char op, expr &out) + static void regex_op(const expr &lhs, IteratorRange &rhs, char op, expr &out) { + if (lhs.type() == TYPE_EMPTY) + // Inside an if / else block to be skipped + return; const std::string *subject = nullptr; if (lhs.type() == TYPE_STRING) { // One type is string, the other could be converted to string. @@ -622,14 +671,19 @@ namespace client } } - static void regex_matches (expr &lhs, boost::iterator_range &rhs) { return regex_op(lhs, rhs, '=', lhs); } - static void regex_doesnt_match(expr &lhs, boost::iterator_range &rhs) { return regex_op(lhs, rhs, '!', lhs); } + static void regex_matches (expr &lhs, IteratorRange &rhs) { return regex_op(lhs, rhs, '=', lhs); } + static void regex_doesnt_match(expr &lhs, IteratorRange &rhs) { return regex_op(lhs, rhs, '!', lhs); } static void one_of_test_init(expr &out) { out.set_b(false); } template static void one_of_test(const expr &match, const expr &pattern, expr &out) { + if (match.type() == TYPE_EMPTY) { + // Inside an if / else block to be skipped + out.reset(); + return; + } if (! out.b()) { if (match.type() != TYPE_STRING) match.throw_exception("one_of(): First parameter (the string to match against) has to be a string value"); @@ -646,7 +700,12 @@ namespace client out.set_b(match.s() == pattern.s()); } } - static void one_of_test_regex(const expr &match, boost::iterator_range &pattern, expr &out) { + static void one_of_test_regex(const expr &match, IteratorRange &pattern, expr &out) { + if (match.type() == TYPE_EMPTY) { + // Inside an if / else block to be skipped + out.reset(); + return; + } if (! out.b()) { if (match.type() != TYPE_STRING) match.throw_exception("one_of(): First parameter (the string to match against) has to be a string value"); @@ -656,6 +715,9 @@ namespace client static void logical_op(expr &lhs, expr &rhs, char op) { + if (lhs.type() == TYPE_EMPTY) + // Inside an if / else block to be skipped + return; bool value = false; if (lhs.type() == TYPE_BOOL && rhs.type() == TYPE_BOOL) { value = (op == '|') ? (lhs.b() || rhs.b()) : (lhs.b() && rhs.b()); @@ -668,24 +730,6 @@ namespace client static void logical_or (expr &lhs, expr &rhs) { logical_op(lhs, rhs, '|'); } static void logical_and(expr &lhs, expr &rhs) { logical_op(lhs, rhs, '&'); } - static void ternary_op(expr &lhs, expr &rhs1, expr &rhs2) - { - if (lhs.type() != TYPE_BOOL) - lhs.throw_exception("Not a boolean expression"); - if (lhs.b()) - lhs = std::move(rhs1); - else - lhs = std::move(rhs2); - } - - static void set_if(bool &cond, bool ¬_yet_consumed, std::string &str_in, std::string &str_out) - { - if (cond && not_yet_consumed) { - str_out = str_in; - not_yet_consumed = false; - } - } - void throw_exception(const char *message) const { boost::throw_exception(qi::expectation_failure( @@ -715,10 +759,9 @@ namespace client } m_data; }; - template - std::ostream& operator<<(std::ostream &os, const expr &expression) + std::ostream& operator<<(std::ostream &os, const expr &expression) { - typedef expr Expr; + typedef expr Expr; os << std::string(expression.it_range.begin(), expression.it_range.end()) << " - "; switch (expression.type()) { case Expr::TYPE_EMPTY: os << "empty"; break; @@ -732,11 +775,19 @@ namespace client } struct MyContext : public ConfigOptionResolver { + // Config provided as a parameter to PlaceholderParser invocation, overriding PlaceholderParser stored config. const DynamicConfig *external_config = nullptr; + // Config stored inside PlaceholderParser. const DynamicConfig *config = nullptr; + // Config provided as a parameter to PlaceholderParser invocation, evaluated after the two configs above. const DynamicConfig *config_override = nullptr; + // Config provided as a parameter to PlaceholderParser invocation, containing variables that will be read out + // and processed by the PlaceholderParser callee. mutable DynamicConfig *config_outputs = nullptr; + // Local variables, read / write + mutable DynamicConfig config_local; size_t current_extruder_id = 0; + // Random number generator and optionally global variables. PlaceholderParser::ContextData *context_data = nullptr; // If false, the macro_processor will evaluate a full macro. // If true, the macro processor will evaluate just a boolean condition using the full expressive power of the macro processor. @@ -746,7 +797,34 @@ namespace client // Table to translate symbol tag to a human readable error message. static std::map tag_to_error_message; - static void evaluate_full_macro(const MyContext *ctx, bool &result) { result = ! ctx->just_boolean_expression; } + // Should the parser consider the parsed string to be a macro or a boolean expression? + static bool evaluate_full_macro(const MyContext *ctx) { return ! ctx->just_boolean_expression; } + + // Entering a conditional block. + static void block_enter(const MyContext *ctx, const bool condition) + { + if (ctx->skipping() || ! condition) + ++ ctx->m_depth_suppressed; + } + // Exiting a conditional block. + static void block_exit(const MyContext *ctx, const bool condition, bool ¬_yet_consumed, std::string &data_in, std::string &data_out) + { + if (ctx->skipping()) + -- ctx->m_depth_suppressed; + else if (condition && not_yet_consumed) { + data_out = std::move(data_in); + not_yet_consumed = false; + } + } + static void block_exit_ternary(const MyContext* ctx, const bool condition, expr &data_in, expr &data_out) + { + if (ctx->skipping()) + -- ctx->m_depth_suppressed; + else if (condition) + data_out = std::move(data_in); + } + // Inside a block, which is conditionally suppressed? + bool skipping() const { return m_depth_suppressed > 0; } const ConfigOption* optptr(const t_config_option_key &opt_key) const override { @@ -761,14 +839,30 @@ namespace client } const ConfigOption* resolve_symbol(const std::string &opt_key) const { return this->optptr(opt_key); } - ConfigOption* resolve_output_symbol(const std::string &opt_key) const { return this->config_outputs ? this->config_outputs->optptr(opt_key, false) : nullptr; } + ConfigOption* resolve_output_symbol(const std::string &opt_key) const { + ConfigOption *out = nullptr; + if (this->config_outputs) + out = this->config_outputs->optptr(opt_key, false); + if (out == nullptr && this->context_data != nullptr && this->context_data->global_config) + out = this->context_data->global_config->optptr(opt_key); + if (out == nullptr) + out = this->config_local.optptr(opt_key); + return out; + } + void store_new_variable(const std::string &opt_key, std::unique_ptr &&opt, bool global_variable) { + assert(opt); + if (global_variable) { + assert(this->context_data != nullptr && this->context_data->global_config); + this->context_data->global_config->set_key_value(opt_key, opt.release()); + } else + this->config_local.set_key_value(opt_key, opt.release()); + } - template - static void legacy_variable_expansion( - const MyContext *ctx, - boost::iterator_range &opt_key, - std::string &output) + static void legacy_variable_expansion(const MyContext *ctx, IteratorRange &opt_key, std::string &output) { + if (ctx->skipping()) + return; + std::string opt_key_str(opt_key.begin(), opt_key.end()); const ConfigOption *opt = ctx->resolve_symbol(opt_key_str); size_t idx = ctx->current_extruder_id; @@ -783,29 +877,37 @@ namespace client char *endptr = nullptr; idx = strtol(opt_key_str.c_str() + idx + 1, &endptr, 10); if (endptr == nullptr || *endptr != 0) - ctx->throw_exception("Invalid vector index", boost::iterator_range(opt_key.begin() + idx + 1, opt_key.end())); + ctx->throw_exception("Invalid vector index", IteratorRange(opt_key.begin() + idx + 1, opt_key.end())); } } } if (opt == nullptr) - ctx->throw_exception("Variable does not exist", boost::iterator_range(opt_key.begin(), opt_key.end())); - if (opt->is_scalar()) + ctx->throw_exception("Variable does not exist", opt_key); + if (opt->is_scalar()) { + if (opt->is_nil()) + ctx->throw_exception("Trying to reference an undefined (nil) optional variable", opt_key); output = opt->serialize(); - else { + } else { const ConfigOptionVectorBase *vec = static_cast(opt); if (vec->empty()) ctx->throw_exception("Indexing an empty vector variable", opt_key); - output = vec->vserialize()[(idx >= vec->size()) ? 0 : idx]; + if (idx >= vec->size()) + idx = 0; + if (vec->is_nil(idx)) + ctx->throw_exception("Trying to reference an undefined (nil) element of vector of optional values", opt_key); + output = vec->vserialize()[idx]; } } - template static void legacy_variable_expansion2( - const MyContext *ctx, - boost::iterator_range &opt_key, - boost::iterator_range &opt_vector_index, - std::string &output) + const MyContext *ctx, + IteratorRange &opt_key, + IteratorRange &opt_vector_index, + std::string &output) { + if (ctx->skipping()) + return; + std::string opt_key_str(opt_key.begin(), opt_key.end()); const ConfigOption *opt = ctx->resolve_symbol(opt_key_str); if (opt == nullptr) { @@ -821,7 +923,7 @@ namespace client ctx->throw_exception("Trying to index a scalar variable", opt_key); const ConfigOptionVectorBase *vec = static_cast(opt); if (vec->empty()) - ctx->throw_exception("Indexing an empty vector variable", boost::iterator_range(opt_key.begin(), opt_key.end())); + ctx->throw_exception("Indexing an empty vector variable", opt_key); const ConfigOption *opt_index = ctx->resolve_symbol(std::string(opt_vector_index.begin(), opt_vector_index.end())); if (opt_index == nullptr) ctx->throw_exception("Variable does not exist", opt_key); @@ -830,133 +932,275 @@ namespace client int idx = opt_index->getInt(); if (idx < 0) ctx->throw_exception("Negative vector index", opt_key); - output = vec->vserialize()[(idx >= (int)vec->size()) ? 0 : idx]; + if (idx >= (int)vec->size()) + idx = 0; + if (vec->is_nil(idx)) + ctx->throw_exception("Trying to reference an undefined (nil) element of vector of optional values", opt_key); + output = vec->vserialize()[idx]; } - template static void resolve_variable( - const MyContext *ctx, - boost::iterator_range &opt_key, - OptWithPos &output) + const MyContext *ctx, + IteratorRange &opt_key, + OptWithPos &output) { - const ConfigOption *opt = ctx->resolve_symbol(std::string(opt_key.begin(), opt_key.end())); - if (opt == nullptr) { - opt = ctx->resolve_output_symbol(std::string(opt_key.begin(), opt_key.end())); - if (opt == nullptr) - ctx->throw_exception("Not a variable name", opt_key); - output.writable = true; + if (! ctx->skipping()) { + const std::string key{ opt_key.begin(), opt_key.end() }; + const ConfigOption *opt = ctx->resolve_symbol(key); + if (opt == nullptr) { + opt = ctx->resolve_output_symbol(key); + if (opt == nullptr) + ctx->throw_exception("Not a variable name", opt_key); + output.writable = true; + } + output.opt = opt; } - output.opt = opt; output.it_range = opt_key; } - template static void store_variable_index( - const MyContext *ctx, - OptWithPos &opt, - int index, - Iterator it_end, - OptWithPos &output) + const MyContext *ctx, + OptWithPos &opt, + int index, + Iterator it_end, + OptWithPos &output) { - if (! opt.opt->is_vector()) - ctx->throw_exception("Cannot index a scalar variable", opt.it_range); - if (index < 0) - ctx->throw_exception("Referencing a vector variable with a negative index", opt.it_range); - output = opt; - output.index = index; + if (! ctx->skipping()) { + if (! opt.opt->is_vector()) + ctx->throw_exception("Cannot index a scalar variable", opt.it_range); + if (index < 0) + ctx->throw_exception("Referencing a vector variable with a negative index", opt.it_range); + output = opt; + output.index = index; + } else + output = opt; output.it_range.end() = it_end; } - template - static void variable_value( - const MyContext *ctx, - OptWithPos &opt, - expr &output) + // Evaluating a scalar variable into expr, + // all possible ConfigOption types are supported. + static void scalar_variable_to_expr(const MyContext *ctx, OptWithPos &opt, expr &output) { - if (opt.opt->is_vector()) { - if (! opt.has_index()) - ctx->throw_exception("Referencing a vector variable when scalar is expected", opt.it_range); - const ConfigOptionVectorBase *vec = static_cast(opt.opt); - if (vec->empty()) - ctx->throw_exception("Indexing an empty vector variable", opt.it_range); - size_t idx = (opt.index < 0) ? 0 : (opt.index >= int(vec->size())) ? 0 : size_t(opt.index); - switch (opt.opt->type()) { - case coFloats: output.set_d(static_cast(opt.opt)->values[idx]); break; - case coInts: output.set_i(static_cast(opt.opt)->values[idx]); break; - case coStrings: output.set_s(static_cast(opt.opt)->values[idx]); break; - case coPercents: output.set_d(static_cast(opt.opt)->values[idx]); break; - case coPoints: output.set_s(to_string(static_cast(opt.opt)->values[idx])); break; - case coBools: output.set_b(static_cast(opt.opt)->values[idx] != 0); break; - // Orca: support enum vector variable type - case coEnums: output.set_i(static_cast(opt.opt)->values[idx]); break; - default: - ctx->throw_exception("Unknown vector variable type", opt.it_range); - } - } else { - assert(opt.opt->is_scalar()); - switch (opt.opt->type()) { - case coFloat: output.set_d(opt.opt->getFloat()); break; - case coInt: output.set_i(opt.opt->getInt()); break; - case coString: output.set_s(static_cast(opt.opt)->value); break; - case coPercent: output.set_d(opt.opt->getFloat()); break; - case coEnum: - case coPoint: output.set_s(opt.opt->serialize()); break; - case coBool: output.set_b(opt.opt->getBool()); break; - case coFloatOrPercent: - { - std::string opt_key(opt.it_range.begin(), opt.it_range.end()); - if (boost::ends_with(opt_key, "extrusion_width")) { - // Extrusion width supports defaults and a complex graph of dependencies. - output.set_d(Flow::extrusion_width(opt_key, *ctx, static_cast(ctx->current_extruder_id))); - } else if (! static_cast(opt.opt)->percent) { - // Not a percent, just return the value. - output.set_d(opt.opt->getFloat()); - } else { - // Resolve dependencies using the "ratio_over" link to a parent value. - const ConfigOptionDef *opt_def = print_config_def.get(opt_key); - assert(opt_def != nullptr); - double v = opt.opt->getFloat() * 0.01; // percent to ratio - for (;;) { - const ConfigOption *opt_parent = opt_def->ratio_over.empty() ? nullptr : ctx->resolve_symbol(opt_def->ratio_over); - if (opt_parent == nullptr) - ctx->throw_exception("FloatOrPercent variable failed to resolve the \"ratio_over\" dependencies", opt.it_range); - if (boost::ends_with(opt_def->ratio_over, "extrusion_width")) { - // Extrusion width supports defaults and a complex graph of dependencies. - assert(opt_parent->type() == coFloatOrPercent); - v *= Flow::extrusion_width(opt_def->ratio_over, static_cast(opt_parent), *ctx, static_cast(ctx->current_extruder_id)); - break; - } - if (opt_parent->type() == coFloat || opt_parent->type() == coFloatOrPercent) { - v *= opt_parent->getFloat(); - if (opt_parent->type() == coFloat || ! static_cast(opt_parent)->percent) - break; - v *= 0.01; // percent to ratio - } - // Continue one level up in the "ratio_over" hierarchy. - opt_def = print_config_def.get(opt_def->ratio_over); - assert(opt_def != nullptr); + if (ctx->skipping()) + return; + + assert(opt.opt->is_scalar()); + + if (opt.opt->is_nil()) + ctx->throw_exception("Trying to reference an undefined (nil) optional variable", opt.it_range); + + switch (opt.opt->type()) { + case coFloat: output.set_d(opt.opt->getFloat()); break; + case coInt: output.set_i(opt.opt->getInt()); break; + case coString: output.set_s(static_cast(opt.opt)->value); break; + case coPercent: output.set_d(opt.opt->getFloat()); break; + case coEnum: + case coPoint: output.set_s(opt.opt->serialize()); break; + case coBool: output.set_b(opt.opt->getBool()); break; + case coFloatOrPercent: + { + std::string opt_key(opt.it_range.begin(), opt.it_range.end()); + if (boost::ends_with(opt_key, "extrusion_width")) { + // Extrusion width supports defaults and a complex graph of dependencies. + output.set_d(Flow::extrusion_width(opt_key, *ctx, static_cast(ctx->current_extruder_id))); + } else if (! static_cast(opt.opt)->percent) { + // Not a percent, just return the value. + output.set_d(opt.opt->getFloat()); + } else { + // Resolve dependencies using the "ratio_over" link to a parent value. + const ConfigOptionDef *opt_def = print_config_def.get(opt_key); + assert(opt_def != nullptr); + double v = opt.opt->getFloat() * 0.01; // percent to ratio + for (;;) { + const ConfigOption *opt_parent = opt_def->ratio_over.empty() ? nullptr : ctx->resolve_symbol(opt_def->ratio_over); + if (opt_parent == nullptr) + ctx->throw_exception("FloatOrPercent variable failed to resolve the \"ratio_over\" dependencies", opt.it_range); + if (boost::ends_with(opt_def->ratio_over, "extrusion_width")) { + // Extrusion width supports defaults and a complex graph of dependencies. + assert(opt_parent->type() == coFloatOrPercent); + v *= Flow::extrusion_width(opt_def->ratio_over, static_cast(opt_parent), *ctx, static_cast(ctx->current_extruder_id)); + break; + } + if (opt_parent->type() == coFloat || opt_parent->type() == coFloatOrPercent) { + v *= opt_parent->getFloat(); + if (opt_parent->type() == coFloat || ! static_cast(opt_parent)->percent) + break; + v *= 0.01; // percent to ratio } - output.set_d(v); - } - break; - } - default: - ctx->throw_exception("Unknown scalar variable type", opt.it_range); - } + // Continue one level up in the "ratio_over" hierarchy. + opt_def = print_config_def.get(opt_def->ratio_over); + assert(opt_def != nullptr); + } + output.set_d(v); + } + break; + } + default: + ctx->throw_exception("Unsupported scalar variable type", opt.it_range); + } + } + + // Evaluating one element of a vector variable. + // all possible ConfigOption types are supported. + static void vector_element_to_expr(const MyContext *ctx, OptWithPos &opt, expr &output) + { + if (ctx->skipping()) + return; + + assert(opt.opt->is_vector()); + if (! opt.has_index()) + ctx->throw_exception("Referencing a vector variable when scalar is expected", opt.it_range); + const ConfigOptionVectorBase* vec = static_cast(opt.opt); + if (vec->empty()) + ctx->throw_exception("Indexing an empty vector variable", opt.it_range); + size_t idx = (opt.index < 0) ? 0 : (opt.index >= int(vec->size())) ? 0 : size_t(opt.index); + if (vec->is_nil(idx)) + ctx->throw_exception("Trying to reference an undefined (nil) element of vector of optional values", opt.it_range); + switch (opt.opt->type()) { + case coFloats: output.set_d(static_cast(opt.opt)->values[idx]); break; + case coInts: output.set_i(static_cast(opt.opt)->values[idx]); break; + case coStrings: output.set_s(static_cast(opt.opt)->values[idx]); break; + case coPercents: output.set_d(static_cast(opt.opt)->values[idx]); break; + case coPoints: output.set_s(to_string(static_cast(opt.opt)->values[idx])); break; + case coBools: output.set_b(static_cast(opt.opt)->values[idx] != 0); break; + case coEnums: output.set_i(static_cast(opt.opt)->values[idx]); break; + default: + ctx->throw_exception("Unsupported vector variable type", opt.it_range); + } + } + + static void check_writable(const MyContext *ctx, OptWithPos &opt) { + if (! opt.writable) + ctx->throw_exception("Cannot modify a read-only variable", opt.it_range); + } + + static void check_numeric(const expr ¶m) { + if (! param.numeric_type()) + param.throw_exception("Right side is not a numeric expression"); + }; + + static size_t evaluate_count(const expr &expr_count) { + if (expr_count.type() != expr::TYPE_INT) + expr_count.throw_exception("Expected number of elements to fill a vector with."); + int count = expr_count.i(); + if (count < 0) + expr_count.throw_exception("Negative number of elements specified."); + return size_t(count); + }; + + static void scalar_variable_assign_scalar(const MyContext *ctx, OptWithPos &lhs, const expr &rhs) + { + assert(! ctx->skipping()); + assert(lhs.opt->is_scalar()); + check_writable(ctx, lhs); + ConfigOption *wropt = const_cast(lhs.opt); + switch (wropt->type()) { + case coFloat: + check_numeric(rhs); + static_cast(wropt)->value = rhs.as_d(); + break; + case coInt: + check_numeric(rhs); + static_cast(wropt)->value = rhs.as_i(); + break; + case coString: + static_cast(wropt)->value = rhs.to_string(); + break; + case coPercent: + check_numeric(rhs); + static_cast(wropt)->value = rhs.as_d(); + break; + case coBool: + if (rhs.type() != expr::TYPE_BOOL) + ctx->throw_exception("Right side is not a boolean expression", rhs.it_range); + static_cast(wropt)->value = rhs.b(); + break; + default: + ctx->throw_exception("Unsupported output scalar variable type", lhs.it_range); + } + } + + static void vector_variable_element_assign_scalar(const MyContext *ctx, OptWithPos &lhs, const expr &rhs) + { + assert(! ctx->skipping()); + assert(lhs.opt->is_vector()); + check_writable(ctx, lhs); + if (! lhs.has_index()) + ctx->throw_exception("Referencing an output vector variable when scalar is expected", lhs.it_range); + ConfigOptionVectorBase *vec = const_cast(static_cast(lhs.opt)); + if (vec->empty()) + ctx->throw_exception("Indexing an empty vector variable", lhs.it_range); + if (lhs.index >= int(vec->size())) + ctx->throw_exception("Index out of range", lhs.it_range); + switch (lhs.opt->type()) { + case coFloats: + check_numeric(rhs); + static_cast(vec)->values[lhs.index] = rhs.as_d(); + break; + case coInts: + check_numeric(rhs); + static_cast(vec)->values[lhs.index] = rhs.as_i(); + break; + case coStrings: + static_cast(vec)->values[lhs.index] = rhs.to_string(); + break; + case coPercents: + check_numeric(rhs); + static_cast(vec)->values[lhs.index] = rhs.as_d(); + break; + case coBools: + if (rhs.type() != expr::TYPE_BOOL) + ctx->throw_exception("Right side is not a boolean expression", rhs.it_range); + static_cast(vec)->values[lhs.index] = rhs.b(); + break; + default: + ctx->throw_exception("Unsupported output vector variable type", lhs.it_range); + } + } + + static void vector_variable_assign_expr_with_count(const MyContext *ctx, OptWithPos &lhs, const expr &rhs_count, const expr &rhs_value) + { + assert(! ctx->skipping()); + size_t count = evaluate_count(rhs_count); + auto *opt = const_cast(lhs.opt); + switch (lhs.opt->type()) { + case coFloats: + check_numeric(rhs_value); + static_cast(opt)->values.assign(count, rhs_value.as_d()); + break; + case coInts: + check_numeric(rhs_value); + static_cast(opt)->values.assign(count, rhs_value.as_i()); + break; + case coStrings: + static_cast(opt)->values.assign(count, rhs_value.to_string()); + break; + case coBools: + if (rhs_value.type() != expr::TYPE_BOOL) + rhs_value.throw_exception("Right side is not a boolean expression"); + static_cast(opt)->values.assign(count, rhs_value.b()); + break; + default: assert(false); } + } + static void variable_value(const MyContext *ctx, OptWithPos &opt, expr &output) + { + if (! ctx->skipping()) { + if (opt.opt->is_vector()) + vector_element_to_expr(ctx, opt, output); + else + scalar_variable_to_expr(ctx, opt, output); + } output.it_range = opt.it_range; } // Return a boolean value, true if the scalar variable referenced by "opt" is nullable and it has a nil value. // Return a boolean value, true if an element of a vector variable referenced by "opt[index]" is nullable and it has a nil value. - template - static void is_nil_test( - const MyContext *ctx, - OptWithPos &opt, - expr &output) + static void is_nil_test(const MyContext *ctx, OptWithPos &opt, expr &output) { - if (opt.opt->is_vector()) { + if (ctx->skipping()) { + } else if (opt.opt->is_vector()) { if (! opt.has_index()) ctx->throw_exception("Referencing a vector variable when scalar is expected", opt.it_range); const ConfigOptionVectorBase *vec = static_cast(opt.opt); @@ -970,112 +1214,354 @@ namespace client output.it_range = opt.it_range; } + // Reference to an existing symbol, or a name of a new symbol. + struct NewOldVariable { + std::string name; + IteratorRange it_range; + ConfigOption *opt{ nullptr }; + }; + static void new_old_variable( + const MyContext *ctx, + bool global_variable, + const IteratorRange &it_range, + NewOldVariable &out) + { + if (! ctx->skipping()) { + t_config_option_key key(std::string(it_range.begin(), it_range.end())); + if (const ConfigOption* opt = ctx->resolve_symbol(key); opt) + ctx->throw_exception("Symbol is already defined in read-only system dictionary", it_range); + if (ctx->config_outputs && ctx->config_outputs->optptr(key)) + ctx->throw_exception("Symbol is already defined as system output variable", it_range); + bool has_global_dictionary = ctx->context_data != nullptr && ctx->context_data->global_config; + if (global_variable) { + if (! has_global_dictionary) + ctx->throw_exception("Global variables are not available in this context", it_range); + if (ctx->config_local.optptr(key)) + ctx->throw_exception("Variable name already defined in local scope", it_range); + out.opt = ctx->context_data->global_config->optptr(key); + } else { + if (has_global_dictionary && ctx->context_data->global_config->optptr(key)) + ctx->throw_exception("Variable name already defined in global scope", it_range); + out.opt = ctx->config_local.optptr(key); + } + out.name = std::move(key); + } + out.it_range = it_range; + } + // Decoding a scalar variable symbol "opt", assigning it a value of "param". - template - static void variable_assign( - const MyContext *ctx, - OptWithPos &opt, - expr ¶m, - // Not used, just clear it. - std::string &out) + static void scalar_variable_assign_scalar_expression(const MyContext *ctx, OptWithPos &opt, const expr ¶m) { - if (! opt.writable) - ctx->throw_exception("Cannot modify a read-only variable", opt.it_range); - auto check_numeric = [](const expr ¶m) { - if (! param.numeric_type()) - param.throw_exception("Right side is not a numeric expression"); + if (! ctx->skipping()) { + check_writable(ctx, opt); + if (opt.opt->is_vector()) + vector_variable_element_assign_scalar(ctx, opt, param); + else + scalar_variable_assign_scalar(ctx, opt, param); + } + } + + static void scalar_variable_new_from_scalar_expression( + const MyContext *ctx, + bool global_variable, + NewOldVariable &lhs, + const expr &rhs) + { + if (ctx->skipping()) { + } else if (lhs.opt) { + if (lhs.opt->is_vector()) + rhs.throw_exception("Cannot assign a scalar value to a vector variable."); + OptWithPos lhs_opt{ lhs.opt, lhs.it_range, true }; + scalar_variable_assign_scalar(ctx, lhs_opt, rhs); + } else { + std::unique_ptr opt_new; + switch (rhs.type()) { + case expr::TYPE_BOOL: opt_new = std::make_unique(rhs.b()); break; + case expr::TYPE_INT: opt_new = std::make_unique(rhs.i()); break; + case expr::TYPE_DOUBLE: opt_new = std::make_unique(rhs.d()); break; + case expr::TYPE_STRING: opt_new = std::make_unique(rhs.s()); break; + default: assert(false); + } + const_cast(ctx)->store_new_variable(lhs.name, std::move(opt_new), global_variable); + } + } + + static void vector_variable_new_from_array( + const MyContext *ctx, + bool global_variable, + NewOldVariable &lhs, + const expr &rhs_count, + const expr &rhs_value) + { + if (ctx->skipping()) { + } else if (lhs.opt) { + if (lhs.opt->is_scalar()) + rhs_value.throw_exception("Cannot assign a vector value to a scalar variable."); + OptWithPos lhs_opt{ lhs.opt, lhs.it_range, true }; + vector_variable_assign_expr_with_count(ctx, lhs_opt, rhs_count, rhs_value); + } else { + size_t count = evaluate_count(rhs_count); + std::unique_ptr opt_new; + switch (rhs_value.type()) { + case expr::TYPE_BOOL: opt_new = std::make_unique(count, rhs_value.b()); break; + case expr::TYPE_INT: opt_new = std::make_unique(count, rhs_value.i()); break; + case expr::TYPE_DOUBLE: opt_new = std::make_unique(count, rhs_value.d()); break; + case expr::TYPE_STRING: opt_new = std::make_unique(count, rhs_value.s()); break; + default: assert(false); + } + const_cast(ctx)->store_new_variable(lhs.name, std::move(opt_new), global_variable); + } + } + + static void vector_variable_assign_array( + const MyContext *ctx, + OptWithPos &lhs, + const expr &rhs_count, + const expr &rhs_value) + { + if (! ctx->skipping()) { + check_writable(ctx, lhs); + if (lhs.opt->is_scalar()) + rhs_value.throw_exception("Cannot assign a vector value to a scalar variable."); + vector_variable_assign_expr_with_count(ctx, lhs, rhs_count, rhs_value); + } + } + + template + static void fill_vector_from_initializer_list(ConfigOption *opt, const std::vector &il, RightValueEvaluate rv_eval) { + auto& out = static_cast(opt)->values; + out.clear(); + out.reserve(il.size()); + for (const expr& i : il) + out.emplace_back(rv_eval(i)); + } + + static void vector_variable_assign_initializer_list(const MyContext *ctx, OptWithPos &lhs, const std::vector &il) + { + if (ctx->skipping()) + return; + + check_writable(ctx, lhs); + + if (lhs.opt->is_scalar()) { + if (il.size() == 1) + // scalar_var = ( scalar ) + scalar_variable_assign_scalar_expression(ctx, lhs, il.front()); + else + // scalar_var = () + // or + // scalar_var = ( scalar, scalar, ... ) + ctx->throw_exception("Cannot assign a vector value to a scalar variable.", lhs.it_range); + } + + auto check_numeric_vector = [](const std::vector &il) { + for (auto &i : il) + if (! i.numeric_type()) + i.throw_exception("Right side is not a numeric expression"); }; - if (opt.opt->is_vector()) { - if (! opt.has_index()) - ctx->throw_exception("Referencing an output vector variable when scalar is expected", opt.it_range); - ConfigOptionVectorBase *vec = const_cast(static_cast(opt.opt)); - if (vec->empty()) - ctx->throw_exception("Indexing an empty vector variable", opt.it_range); - if (opt.index >= int(vec->size())) - ctx->throw_exception("Index out of range", opt.it_range); - switch (opt.opt->type()) { + + ConfigOption *opt = const_cast(lhs.opt); + switch (lhs.opt->type()) { + case coFloats: + check_numeric_vector(il); + fill_vector_from_initializer_list(opt, il, [](auto &v){ return v.as_d(); }); + break; + case coInts: + check_numeric_vector(il); + fill_vector_from_initializer_list(opt, il, [](auto &v){ return v.as_i(); }); + break; + case coStrings: + fill_vector_from_initializer_list(opt, il, [](auto &v){ return v.to_string(); }); + break; + case coBools: + for (auto &i : il) + if (i.type() != expr::TYPE_BOOL) + i.throw_exception("Right side is not a boolean expression"); + fill_vector_from_initializer_list(opt, il, [](auto &v){ return v.b(); }); + break; + default: assert(false); + } + } + + static void vector_variable_new_from_initializer_list( + const MyContext *ctx, + bool global_variable, + NewOldVariable &lhs, + const std::vector &il) + { + if (ctx->skipping()) + return; + + if (lhs.opt) { + // Assign to an existing vector variable. + OptWithPos lhs_opt{ lhs.opt, lhs.it_range, true }; + vector_variable_assign_initializer_list(ctx, lhs_opt, il); + } else { + if (il.empty()) + ctx->throw_exception("Cannot create vector variable from an empty initializer list, because its type cannot be deduced.", lhs.it_range); + // Allocate a new vector variable. + // First guesstimate type of the output vector. + size_t num_bool = 0; + size_t num_int = 0; + size_t num_double = 0; + size_t num_string = 0; + for (auto &i : il) + switch (i.type()) { + case expr::TYPE_BOOL: ++ num_bool; break; + case expr::TYPE_INT: ++ num_int; break; + case expr::TYPE_DOUBLE: ++ num_double; break; + case expr::TYPE_STRING: ++ num_string; break; + default: assert(false); + } + std::unique_ptr opt_new; + if (num_string > 0) + // Convert everything to strings. + opt_new = std::make_unique(); + else if (num_bool > 0) { + if (num_double + num_int > 0) + ctx->throw_exception("Right side is not valid: Mixing numeric and boolean types.", IteratorRange{ il.front().it_range.begin(), il.back().it_range.end() }); + opt_new = std::make_unique(); + } else { + // Output is numeric. + if (num_double == 0) + opt_new = std::make_unique(); + else + opt_new = std::make_unique(); + } + OptWithPos lhs_opt{ opt_new.get(), lhs.it_range, true }; + vector_variable_assign_initializer_list(ctx, lhs_opt, il); + const_cast(ctx)->store_new_variable(lhs.name, std::move(opt_new), global_variable); + } + } + + static bool is_vector_variable_reference(const OptWithPos &var) { + return ! var.empty() && ! var.has_index() && var.opt->is_vector(); + } + + // Called when checking whether the NewOldVariable could be assigned a vectir right hand side. + static bool could_be_vector_variable_reference(const NewOldVariable &var) { + return var.opt == nullptr || var.opt->is_vector(); + } + + static void copy_vector_variable_to_vector_variable(const MyContext *ctx, OptWithPos &lhs, const OptWithPos &rhs) + { + if (ctx->skipping()) + return; + + check_writable(ctx, lhs); + assert(lhs.opt->is_vector()); + if (rhs.has_index() || ! rhs.opt->is_vector()) + ctx->throw_exception("Cannot assign scalar to a vector", lhs.it_range); + if (rhs.opt->is_nil()) + ctx->throw_exception("Some elements of the right hand side vector variable of optional values are undefined (nil)", rhs.it_range); + if (lhs.opt->type() != rhs.opt->type()) { + // Vector types are not compatible. + switch (lhs.opt->type()) { case coFloats: - check_numeric(param); - static_cast(vec)->values[opt.index] = param.as_d(); - break; + ctx->throw_exception("Left hand side is a float vector, while the right hand side is not.", lhs.it_range); case coInts: - check_numeric(param); - static_cast(vec)->values[opt.index] = param.as_i(); - break; + ctx->throw_exception("Left hand side is an int vector, while the right hand side is not.", lhs.it_range); case coStrings: - static_cast(vec)->values[opt.index] = param.to_string(); - break; - case coPercents: - check_numeric(param); - static_cast(vec)->values[opt.index] = param.as_d(); - break; + ctx->throw_exception("Left hand side is a string vector, while the right hand side is not.", lhs.it_range); case coBools: - if (param.type() != expr::TYPE_BOOL) - ctx->throw_exception("Right side is not a boolean expression", param.it_range); - static_cast(vec)->values[opt.index] = param.b(); - break; + ctx->throw_exception("Left hand side is a bool vector, while the right hand side is not.", lhs.it_range); default: - ctx->throw_exception("Unsupported output vector variable type", opt.it_range); + ctx->throw_exception("Left hand side / right hand side vectors are not compatible.", lhs.it_range); } + } + const_cast(lhs.opt)->set(rhs.opt); + } + + static bool vector_variable_new_from_copy( + const MyContext *ctx, + bool global_variable, + NewOldVariable &lhs, + const OptWithPos &rhs) + { + if (ctx->skipping()) + // Skipping, continue parsing. + return true; + + if (lhs.opt) { + assert(lhs.opt->is_vector()); + OptWithPos lhs_opt{ lhs.opt, lhs.it_range, true }; + copy_vector_variable_to_vector_variable(ctx, lhs_opt, rhs); } else { - assert(opt.opt->is_scalar()); - ConfigOption *wropt = const_cast(opt.opt); - switch (wropt->type()) { - case coFloat: - check_numeric(param); - static_cast(wropt)->value = param.as_d(); - break; - case coInt: - check_numeric(param); - static_cast(wropt)->value = param.as_i(); - break; - case coString: - static_cast(wropt)->value = param.to_string(); - break; - case coPercent: - check_numeric(param); - static_cast(wropt)->value = param.as_d(); - break; - case coBool: - if (param.type() != expr::TYPE_BOOL) - ctx->throw_exception("Right side is not a boolean expression", param.it_range); - static_cast(wropt)->value = param.b(); - break; - default: - ctx->throw_exception("Unsupported output scalar variable type", opt.it_range); - } + if (rhs.has_index() || ! rhs.opt->is_vector()) + // Stop parsing, let the other rules resolve this case. + return false; + if (rhs.opt->is_nil()) + ctx->throw_exception("Some elements of the right hand side vector variable of optional values are undefined (nil)", rhs.it_range); + // Clone the vector variable. + std::unique_ptr opt_new; + if (one_of(rhs.opt->type(), { coFloats, coInts, coStrings, coBools })) + opt_new = std::unique_ptr(rhs.opt->clone()); + else if (rhs.opt->type() == coPercents) + opt_new = std::make_unique(static_cast(rhs.opt)->values); + else + ctx->throw_exception("Duplicating this type of vector variable is not supported", rhs.it_range); + const_cast(ctx)->store_new_variable(lhs.name, std::move(opt_new), global_variable); } - out.clear(); + // Continue parsing. + return true; + } + + static void initializer_list_append(std::vector &list, expr ¶m) + { + if (param.type() != expr::TYPE_EMPTY) + // not skipping + list.emplace_back(std::move(param)); + } + + static void is_vector_empty(const MyContext *ctx, OptWithPos &opt, expr &out) + { + if (! ctx->skipping()) { + if (opt.has_index() || ! opt.opt->is_vector()) + ctx->throw_exception("parameter of empty() is not a vector variable", opt.it_range); + out.set_b(static_cast(opt.opt)->size() == 0); + } + out.it_range = opt.it_range; + } + + static void vector_size(const MyContext *ctx, OptWithPos &opt, expr &out) + { + if (! ctx->skipping()) { + if (opt.has_index() || ! opt.opt->is_vector()) + ctx->throw_exception("parameter of size() is not a vector variable", opt.it_range); + out.set_i(int(static_cast(opt.opt)->size())); + } + out.it_range = opt.it_range; } // Verify that the expression returns an integer, which may be used // to address a vector. - template - static void evaluate_index(expr &expr_index, int &output) + static void evaluate_index(expr &expr_index, int &output) { - if (expr_index.type() != expr::TYPE_INT) - expr_index.throw_exception("Non-integer index is not allowed to address a vector variable."); - output = expr_index.i(); + if (expr_index.type() != expr::TYPE_EMPTY) { + if (expr_index.type() != expr::TYPE_INT) + expr_index.throw_exception("Non-integer index is not allowed to address a vector variable."); + output = expr_index.i(); + } } - template - static void random(const MyContext *ctx, expr ¶m1, expr ¶m2) + static void random(const MyContext *ctx, expr ¶m1, expr ¶m2) { + if (ctx->skipping()) + return; + if (ctx->context_data == nullptr) ctx->throw_exception("Random number generator not available in this context.", - boost::iterator_range(param1.it_range.begin(), param2.it_range.end())); - expr::random(param1, param2, ctx->context_data->rng); + IteratorRange(param1.it_range.begin(), param2.it_range.end())); + expr::random(param1, param2, ctx->context_data->rng); } - template - static void throw_exception(const std::string &msg, const boost::iterator_range &it_range) + static void throw_exception(const std::string &msg, const IteratorRange &it_range) { // An asterix is added to the start of the string to differentiate the boost::spirit::info::tag content // between the grammer terminal / non-terminal symbol name and a free-form error message. - boost::throw_exception(qi::expectation_failure(it_range.begin(), it_range.end(), spirit::info(std::string("*") + msg))); + boost::throw_exception(qi::expectation_failure(it_range.begin(), it_range.end(), spirit::info(std::string("*") + msg))); } - template static void process_error_message(const MyContext *context, const boost::spirit::info &info, const Iterator &it_begin, const Iterator &it_end, const Iterator &it_error) { std::string &msg = const_cast(context)->error_message; @@ -1122,37 +1608,48 @@ namespace client msg += ' '; msg += "^\n"; } + + private: + // For skipping execution of inactive conditional branches. + mutable int m_depth_suppressed{ 0 }; }; - template struct InterpolateTableContext { struct Item { - double x; - boost::iterator_range it_range_x; - double y; + double x; + IteratorRange it_range_x; + double y; }; std::vector table; - static void init(const expr &x) { - if (!x.numeric_type()) - x.throw_exception("Interpolation value must be a number."); + static void init(const expr &x) { + if (x.type() != expr::TYPE_EMPTY) { + if (!x.numeric_type()) + x.throw_exception("Interpolation value must be a number."); + } } - static void add_pair(const expr &x, const expr &y, InterpolateTableContext &table) { - if (! x.numeric_type()) - x.throw_exception("X value of a table point must be a number."); - if (! y.numeric_type()) - y.throw_exception("Y value of a table point must be a number."); - table.table.push_back({ x.as_d(), x.it_range, y.as_d() }); + static void add_pair(const expr &x, const expr &y, InterpolateTableContext &table) { + if (x.type() != expr::TYPE_EMPTY) { + if (! x.numeric_type()) + x.throw_exception("X value of a table point must be a number."); + if (! y.numeric_type()) + y.throw_exception("Y value of a table point must be a number."); + table.table.push_back({ x.as_d(), x.it_range, y.as_d() }); + } } - static void evaluate(const expr &expr_x, const InterpolateTableContext &table, expr &out) { + static void evaluate(const expr &expr_x, const InterpolateTableContext &table, expr &out) { + if (expr_x.type() == expr::TYPE_EMPTY) + return; + // Check whether the table X values are sorted. double x = expr_x.as_d(); + assert(! std::isnan(x)); bool evaluated = false; for (size_t i = 1; i < table.table.size(); ++i) { double x0 = table.table[i - 1].x; double x1 = table.table[i].x; if (x0 > x1) - boost::throw_exception(qi::expectation_failure( + boost::throw_exception(qi::expectation_failure( table.table[i - 1].it_range_x.begin(), table.table[i].it_range_x.end(), spirit::info("X coordinates of the table must be increasing"))); if (! evaluated && x >= x0 && x <= x1) { double y0 = table.table[i - 1].y; @@ -1170,9 +1667,9 @@ namespace client } if (! evaluated) { // Clamp x into the table range with EPSILON. - if (x > table.table.front().x - EPSILON) + if (double x0 = table.table.front().x; x > x0 - EPSILON && x < x0) out.set_d(table.table.front().y); - else if (x < table.table.back().x + EPSILON) + else if (double x1 = table.table.back().x; x > x1 && x < x1 + EPSILON) out.set_d(table.table.back().y); else // The value is really outside the table range. @@ -1181,8 +1678,7 @@ namespace client } }; - template - std::ostream& operator<<(std::ostream &os, const InterpolateTableContext &table_context) + std::ostream& operator<<(std::ostream &os, const InterpolateTableContext &table_context) { for (const auto &item : table_context.table) os << "(" << item.x << "," << item.y << ")"; @@ -1196,6 +1692,7 @@ namespace client { "text", "Invalid text." }, { "text_block", "Invalid text block." }, { "macro", "Invalid macro." }, + { "repeat", "Unknown syntax error" }, { "if_else_output", "Not an {if}{else}{endif} macro." }, { "switch_output", "Not a {switch} macro." }, { "legacy_variable_expansion", "Expecting a legacy variable expansion format" }, @@ -1212,14 +1709,12 @@ namespace client { "optional_parameter", "Expecting a closing brace or an optional parameter." }, { "one_of_list", "Expecting a list of string patterns (simple text or rexep)" }, { "variable_reference", "Expecting a variable reference."}, - { "is_nil_test", "Expecting a scalar variable reference."}, { "variable", "Expecting a variable name."}, { "regular_expression", "Expecting a regular expression."} }; // For debugging the boost::spirit parsers. Print out the string enclosed in it_range. - template - std::ostream& operator<<(std::ostream& os, const boost::iterator_range &it_range) + std::ostream& operator<<(std::ostream& os, const IteratorRange &it_range) { os << std::string(it_range.begin(), it_range.end()); return os; @@ -1234,7 +1729,7 @@ namespace client // This parser is to be used inside a raw[] directive to accept a single valid UTF-8 character. // If an invalid UTF-8 sequence is encountered, a qi::expectation_failure is thrown. - struct utf8_char_skipper_parser : qi::primitive_parser + struct utf8_char_parser : qi::primitive_parser { // Define the attribute type exposed by this parser component template @@ -1243,9 +1738,10 @@ namespace client typedef wchar_t type; }; - // This function is called during the actual parsing process + // This function is called during the actual parsing process to skip whitespaces. + // Also it throws if it encounters valid or invalid UTF-8 sequence. template - bool parse(Iterator& first, Iterator const& last, Context& context, Skipper const& skipper, Attribute& attr) const + bool parse(Iterator &first, Iterator const &last, Context &context, Skipper const &skipper, Attribute& attr) const { // The skipper shall always be empty, any white space will be accepted. // skip_over(first, last, skipper); @@ -1283,7 +1779,7 @@ namespace client first = it; return true; err: - MyContext::throw_exception("Invalid utf8 sequence", boost::iterator_range(first, last)); + MyContext::throw_exception("Invalid utf8 sequence", IteratorRange(first, last)); return false; } @@ -1295,12 +1791,131 @@ namespace client } }; + // This parser is to be used inside a raw[] directive to accept a single valid UTF-8 character. + // If an invalid UTF-8 sequence is encountered, a qi::expectation_failure is thrown. + struct ascii_char_skipper_parser : public utf8_char_parser + { + // This function is called during the actual parsing process + template + bool parse(Iterator &first, Iterator const &last, Context &context, Skipper const &skipper, Attribute &attr) const + { + Iterator it = first; + // Let the UTF-8 parser throw if it encounters an invalid UTF-8 sequence. + if (! utf8_char_parser::parse(it, last, context, skipper, attr)) + return false; + char c = *first; + if (it - first > 1 || c < 0) + MyContext::throw_exception("Non-ASCII7 characters are only allowed inside text blocks and string literals, not inside code blocks.", IteratorRange(first, it)); + if (c == '\r' || c == '\n' || c == '\t' || c == ' ') { + // Skip the whitespaces + ++ first; + return true; + } else + // Stop skipping, let this 7bit ASCII character be processed. + return false; + } + + // This function is called during error handling to create a human readable string for the error context. + template + spirit::info what(Context&) const + { + return spirit::info("ASCII7_char"); + } + }; + + struct FactorActions { + static void set_start_pos(Iterator &start_pos, expr &out) + { out.it_range = IteratorRange(start_pos, start_pos); } + static void int_(const MyContext *ctx, int &value, Iterator &end_pos, expr &out) { + if (ctx->skipping()) { + out.reset(); + out.it_range.end() = end_pos; + } else + out = expr(value, out.it_range.begin(), end_pos); + } + static void double_(const MyContext *ctx, double &value, Iterator &end_pos, expr &out) { + if (ctx->skipping()) { + out.reset(); + out.it_range.end() = end_pos; + } else + out = expr(value, out.it_range.begin(), end_pos); + } + static void bool_(const MyContext *ctx, bool &value, Iterator &end_pos, expr &out) { + if (ctx->skipping()) { + out.reset(); + out.it_range.end() = end_pos; + } else + out = expr(value, out.it_range.begin(), end_pos); + } + static void string_(const MyContext *ctx, IteratorRange &it_range, expr &out) { + if (ctx->skipping()) { + out.reset(); + out.it_range = it_range; + } else { + // Unescape the string, UTF-8 safe. + std::string s; + auto begin = std::next(it_range.begin()); + auto end = std::prev(it_range.end()); + assert(begin <= end); + { + // 1) Get the size of the string after unescaping. + size_t len = 0; + for (auto it = begin; it != end;) { + if (*it == '\\') { + if (++ it == end || + (*it != 'r' && *it != 'n' && *it != '"' && *it != '\\')) + ctx->throw_exception("Invalid escape sequence", {std::prev(it), std::next(it) }); + ++ len; + ++ it; + } else { + size_t n = get_utf8_sequence_length(&*it, end - it); + len += n; + it += n; + } + } + // and reserve the string. + s.reserve(len); + } + // 2) Copy & unescape the string. + for (auto it = begin; it != end;) { + if (*it == '\\') { + char c = *(++ it); + if (c == 'r') + c = '\r'; + else if (c == 'n') + c = '\n'; + s += c; + ++ it; + } else { + size_t n = get_utf8_sequence_length(&*it, end - it); + s.append(&*it, n); + it += n; + } + } + out = expr(std::move(s), it_range.begin(), it_range.end()); + } + } + static void expr_(expr &value, Iterator &end_pos, expr &out) + { auto begin_pos = out.it_range.begin(); out = expr(std::move(value), begin_pos, end_pos); } + static void minus_(expr &value, expr &out) + { out = value.unary_minus(out.it_range.begin()); } + static void not_(expr &value, expr &out) + { out = value.unary_not(out.it_range.begin()); } + static void to_int(expr &value, expr &out) + { out = value.unary_integer(out.it_range.begin()); } + static void round(expr &value, expr &out) + { out = value.round(out.it_range.begin()); } + // For indicating "no optional parameter". + static void noexpr(expr &out) { out.reset(); } + }; + + using skipper = ascii_char_skipper_parser; + /////////////////////////////////////////////////////////////////////////// // Our macro_processor grammar /////////////////////////////////////////////////////////////////////////// // Inspired by the C grammar rules https://www.lysator.liu.se/c/ANSI-C-grammar-y.html - template - struct macro_processor : qi::grammar, spirit_encoding::space_type> + struct macro_processor : qi::grammar, skipper> { macro_processor() : macro_processor::base_type(start) { @@ -1314,7 +1929,7 @@ namespace client qi::no_skip_type no_skip; qi::real_parser strict_double; spirit_encoding::char_type char_; - utf8_char_skipper_parser utf8char; + utf8_char_parser utf8char; spirit::bool_type bool_; spirit::int_type int_; spirit::double_type double_; @@ -1339,19 +1954,19 @@ namespace client // Also the start symbol switches between the "full macro syntax" and a "boolean expression only", // depending on the context->just_boolean_expression flag. This way a single static expression parser // could serve both purposes. - start = eps[px::bind(&MyContext::evaluate_full_macro, _r1, _a)] > - ( (eps(_a==true) > text_block(_r1) [_val=_1]) - | conditional_expression(_r1) [ px::bind(&expr::evaluate_boolean_to_string, _1, _val) ] + start = + ( (eps(px::bind(&MyContext::evaluate_full_macro, _r1)) > text_block(_r1) [_val=_1]) + | conditional_expression(_r1) [ px::bind(&expr::evaluate_boolean_to_string, _1, _val) ] ) > eoi; start.name("start"); - qi::on_error(start, px::bind(&MyContext::process_error_message, _r1, _4, _1, _2, _3)); + qi::on_error(start, px::bind(&MyContext::process_error_message, _r1, _4, _1, _2, _3)); text_block = *( text [_val+=_1] // Allow back tracking after '{' in case of a text_block embedded inside a condition. // In that case the inner-most {else} wins and the {if}/{elsif}/{else} shall be paired. // {elsif}/{else} without an {if} will be allowed to back track from the embedded text_block. - | (lit('{') >> macro(_r1) [_val+=_1] > '}') + | (lit('{') >> (macros(_r1)[_val += _1] > '}') | '}') | (lit('[') > legacy_variable_expansion(_r1) [_val+=_1] > ']') ); text_block.name("text_block"); @@ -1363,41 +1978,61 @@ namespace client // New style of macro expansion. // The macro expansion may contain numeric or string expressions, ifs and cases. - macro = - (kw["if"] > if_else_output(_r1) [_val = _1]) -// | (kw["switch"] > switch_output(_r1) [_val = _1]) - | (assignment_statement(_r1) [_val = _1]) - | (additive_expression(_r1) [ px::bind(&expr::to_string2, _1, _val) ]) + macros = + +(block(_r1)[_val += _1] | (statement(_r1) > (+lit(';') | &lit('}')))[_val += _1] | +lit(';')); + macros.name("macro"); + // if_macros and else_macros only differ by the look-ahead ending condition, which is to not have to repeat the last semicolon + // at the end of the block. + if_macros = kw["then"] > *(block(_r1)[_val += _1] | (statement(_r1) > (+lit(';') | &(kw["elsif"] | kw["else"] | kw["endif"])))[_val += _1] | +lit(';')); + if_macros.name("if_macros"); + else_macros = *(block(_r1)[_val += _1] | (statement(_r1) > (+lit(';') | &kw["endif"]))[_val += _1] | +lit(';')); + else_macros.name("else_macros"); + + // Blocks do not require a separating semicolon. + block = + (kw["if"] > if_else_output(_r1)[_val = _1]) + // (kw["switch"] ... + ; + block.name("block"); + + // Statements require a separating semicolon. + statement = + (assignment_statement(_r1) [_val = _1]) + | (new_variable_statement(_r1)[_val = _1]) + | (conditional_expression(_r1)[px::bind(&expr::to_string2, _1, _val)]) ; - macro.name("macro"); // An if expression enclosed in {} (the outmost {} are already parsed by the caller). + // Also }{ could be replaced with ; to simplify writing of pure code. if_else_output = - eps[_b=true] > - bool_expr_eval(_r1)[_a=_1] > '}' > - text_block(_r1)[px::bind(&expr::set_if, _a, _b, _1, _val)] > '{' > - *(kw["elsif"] > bool_expr_eval(_r1)[_a=_1] > '}' > - text_block(_r1)[px::bind(&expr::set_if, _a, _b, _1, _val)] > '{') > - -(kw["else"] > lit('}') > - text_block(_r1)[px::bind(&expr::set_if, _b, _b, _1, _val)] > '{') > + eps[_a=true] > + (bool_expr_eval(_r1)[px::bind(&MyContext::block_enter, _r1, _1)] > (if_text_block(_r1) | if_macros(_r1))) + [px::bind(&MyContext::block_exit, _r1, _1, _a, _2, _val)] > + *((kw["elsif"] > bool_expr_eval(_r1)[px::bind(&MyContext::block_enter, _r1, _1 && _a)] > (if_text_block(_r1) | if_macros(_r1))) + [px::bind(&MyContext::block_exit, _r1, _1, _a, _2, _val)]) > + -(kw["else"] > eps[px::bind(&MyContext::block_enter, _r1, _a)] > (if_text_block(_r1) | else_macros(_r1))) + [px::bind(&MyContext::block_exit, _r1, _a, _a, _1, _val)] > kw["endif"]; if_else_output.name("if_else_output"); + if_text_block = (lit('}') > text_block(_r1) > '{'); + if_text_block.name("if_text_block"); + // A switch expression enclosed in {} (the outmost {} are already parsed by the caller). /* switch_output = eps[_b=true] > - omit[expr(_r1)[_a=_1]] > '}' > text_block(_r1)[px::bind(&expr::set_if_equal, _a, _b, _1, _val)] > '{' > - *("elsif" > omit[bool_expr_eval(_r1)[_a=_1]] > '}' > text_block(_r1)[px::bind(&expr::set_if, _a, _b, _1, _val)]) >> - -("else" > '}' >> text_block(_r1)[px::bind(&expr::set_if, _b, _b, _1, _val)]) > + omit[expr(_r1)[_a=_1]] > '}' > text_block(_r1)[px::bind(&expr::set_if_equal, _a, _b, _1, _val)] > '{' > + *("elsif" > omit[bool_expr_eval(_r1)[_a=_1]] > '}' > text_block(_r1)[px::bind(&expr::set_if, _a, _b, _1, _val)]) >> + -("else" > '}' >> text_block(_r1)[px::bind(&expr::set_if, _b, _b, _1, _val)]) > "endif"; */ // Legacy variable expansion of the original Slic3r, in the form of [scalar_variable] or [vector_variable_index]. legacy_variable_expansion = (identifier >> &lit(']')) - [ px::bind(&MyContext::legacy_variable_expansion, _r1, _1, _val) ] + [ px::bind(&MyContext::legacy_variable_expansion, _r1, _1, _val) ] | (identifier > lit('[') > identifier > ']') - [ px::bind(&MyContext::legacy_variable_expansion2, _r1, _1, _2, _val) ] + [ px::bind(&MyContext::legacy_variable_expansion2, _r1, _1, _2, _val) ] ; legacy_variable_expansion.name("legacy_variable_expansion"); @@ -1407,41 +2042,44 @@ namespace client identifier.name("identifier"); conditional_expression = - logical_or_expression(_r1) [_val = _1] - >> -('?' > conditional_expression(_r1) > ':' > conditional_expression(_r1)) [px::bind(&expr::ternary_op, _val, _1, _2)]; + logical_or_expression(_r1) [_val = _1] + >> -('?' > eps[px::bind(&expr::evaluate_boolean, _val, _a)] > + eps[px::bind(&MyContext::block_enter, _r1, _a)] > conditional_expression(_r1)[px::bind(&MyContext::block_exit_ternary, _r1, _a, _1, _val)] + > ':' > + eps[px::bind(&MyContext::block_enter, _r1, ! _a)] > conditional_expression(_r1)[px::bind(&MyContext::block_exit_ternary, _r1, ! _a, _1, _val)]); conditional_expression.name("conditional_expression"); logical_or_expression = logical_and_expression(_r1) [_val = _1] - >> *( ((kw["or"] | "||") > logical_and_expression(_r1) ) [px::bind(&expr::logical_or, _val, _1)] ); + >> *( ((kw["or"] | "||") > logical_and_expression(_r1) ) [px::bind(&expr::logical_or, _val, _1)] ); logical_or_expression.name("logical_or_expression"); logical_and_expression = equality_expression(_r1) [_val = _1] - >> *( ((kw["and"] | "&&") > equality_expression(_r1) ) [px::bind(&expr::logical_and, _val, _1)] ); + >> *( ((kw["and"] | "&&") > equality_expression(_r1) ) [px::bind(&expr::logical_and, _val, _1)] ); logical_and_expression.name("logical_and_expression"); equality_expression = relational_expression(_r1) [_val = _1] - >> *( ("==" > relational_expression(_r1) ) [px::bind(&expr::equal, _val, _1)] - | ("!=" > relational_expression(_r1) ) [px::bind(&expr::not_equal, _val, _1)] - | ("<>" > relational_expression(_r1) ) [px::bind(&expr::not_equal, _val, _1)] - | ("=~" > regular_expression ) [px::bind(&expr::regex_matches, _val, _1)] - | ("!~" > regular_expression ) [px::bind(&expr::regex_doesnt_match, _val, _1)] + >> *( ("==" > relational_expression(_r1) ) [px::bind(&expr::equal, _val, _1)] + | ("!=" > relational_expression(_r1) ) [px::bind(&expr::not_equal, _val, _1)] + | ("<>" > relational_expression(_r1) ) [px::bind(&expr::not_equal, _val, _1)] + | ("=~" > regular_expression ) [px::bind(&expr::regex_matches, _val, _1)] + | ("!~" > regular_expression ) [px::bind(&expr::regex_doesnt_match, _val, _1)] ); equality_expression.name("bool expression"); // Evaluate a boolean expression stored as expr into a boolean value. // Throw if the equality_expression does not produce a expr of boolean type. - bool_expr_eval = conditional_expression(_r1) [ px::bind(&expr::evaluate_boolean, _1, _val) ]; + bool_expr_eval = conditional_expression(_r1) [ px::bind(&expr::evaluate_boolean, _1, _val) ]; bool_expr_eval.name("bool_expr_eval"); relational_expression = additive_expression(_r1) [_val = _1] - >> *( ("<=" > additive_expression(_r1) ) [px::bind(&expr::leq, _val, _1)] - | (">=" > additive_expression(_r1) ) [px::bind(&expr::geq, _val, _1)] - | (lit('<') > additive_expression(_r1) ) [px::bind(&expr::lower, _val, _1)] - | (lit('>') > additive_expression(_r1) ) [px::bind(&expr::greater, _val, _1)] + >> *( ("<=" > additive_expression(_r1) ) [px::bind(&expr::leq, _val, _1)] + | (">=" > additive_expression(_r1) ) [px::bind(&expr::geq, _val, _1)] + | (lit('<') > additive_expression(_r1) ) [px::bind(&expr::lower, _val, _1)] + | (lit('>') > additive_expression(_r1) ) [px::bind(&expr::greater, _val, _1)] ); relational_expression.name("relational_expression"); @@ -1461,71 +2099,83 @@ namespace client multiplicative_expression.name("multiplicative_expression"); assignment_statement = - (variable_reference(_r1) >> '=' > additive_expression(_r1)) - [px::bind(&MyContext::variable_assign, _r1, _1, _2, _val)]; - - struct FactorActions { - static void set_start_pos(Iterator &start_pos, expr &out) - { out.it_range = boost::iterator_range(start_pos, start_pos); } - static void int_(int &value, Iterator &end_pos, expr &out) - { out = expr(value, out.it_range.begin(), end_pos); } - static void double_(double &value, Iterator &end_pos, expr &out) - { out = expr(value, out.it_range.begin(), end_pos); } - static void bool_(bool &value, Iterator &end_pos, expr &out) - { out = expr(value, out.it_range.begin(), end_pos); } - static void string_(boost::iterator_range &it_range, expr &out) - { out = expr(std::string(it_range.begin() + 1, it_range.end() - 1), it_range.begin(), it_range.end()); } - static void expr_(expr &value, Iterator &end_pos, expr &out) - { auto begin_pos = out.it_range.begin(); out = expr(std::move(value), begin_pos, end_pos); } - static void minus_(expr &value, expr &out) - { out = value.unary_minus(out.it_range.begin()); } - static void not_(expr &value, expr &out) - { out = value.unary_not(out.it_range.begin()); } - static void to_int(expr &value, expr &out) - { out = value.unary_integer(out.it_range.begin()); } - static void round(expr &value, expr &out) - { out = value.round(out.it_range.begin()); } - // For indicating "no optional parameter". - static void noexpr(expr &out) { out.reset(); } - }; + (variable_reference(_r1)[_a = _1] >> '=') > + ( // Consumes also '(' conditional_expression ')', that means enclosing an expression into braces makes it a single value vector initializer. + initializer_list(_r1)[px::bind(&MyContext::vector_variable_assign_initializer_list, _r1, _a, _1)] + // Process it before conditional_expression, as conditional_expression requires a vector reference to be augmented with an index. + // Only process such variable references, which return a naked vector variable. + | eps(px::bind(&MyContext::is_vector_variable_reference, _a)) >> + variable_reference(_r1)[px::bind(&MyContext::copy_vector_variable_to_vector_variable, _r1, _a, _1)] + // Would NOT consume '(' conditional_expression ')' because such value was consumed with the expression above. + | conditional_expression(_r1) + [px::bind(&MyContext::scalar_variable_assign_scalar_expression, _r1, _a, _1)] + | (kw["repeat"] > "(" > additive_expression(_r1) > "," > conditional_expression(_r1) > ")") + [px::bind(&MyContext::vector_variable_assign_array, _r1, _a, _1, _2)] + ); + + new_variable_statement = + (kw["local"][_a = false] | kw["global"][_a = true]) > identifier[px::bind(&MyContext::new_old_variable, _r1, _a, _1, _b)] > lit('=') > + ( // Consumes also '(' conditional_expression ')', that means enclosing an expression into braces makes it a single value vector initializer. + initializer_list(_r1)[px::bind(&MyContext::vector_variable_new_from_initializer_list, _r1, _a, _b, _1)] + // Process it before conditional_expression, as conditional_expression requires a vector reference to be augmented with an index. + // Only process such variable references, which return a naked vector variable. + // Orca todo: following code cause strange build errors with MSVC C++17 + // | eps(px::bind(&MyContext::could_be_vector_variable_reference, _b)) >> + // variable_reference(_r1)[px::val(qi::_pass) = px::bind(&MyContext::vector_variable_new_from_copy, _r1, _a, _b, _1)] + // Would NOT consume '(' conditional_expression ')' because such value was consumed with the expression above. + | conditional_expression(_r1) + [px::bind(&MyContext::scalar_variable_new_from_scalar_expression, _r1, _a, _b, _1)] + | (kw["repeat"] > "(" > additive_expression(_r1) > "," > conditional_expression(_r1) > ")") + [px::bind(&MyContext::vector_variable_new_from_array, _r1, _a, _b, _1, _2)] + ); + initializer_list = lit('(') > + ( lit(')') | + ( conditional_expression(_r1)[px::bind(&MyContext::initializer_list_append, _val, _1)] > + *(lit(',') > conditional_expression(_r1)[px::bind(&MyContext::initializer_list_append, _val, _1)]) > + lit(')') + ) + ); + unary_expression = iter_pos[px::bind(&FactorActions::set_start_pos, _1, _val)] >> ( - variable_reference(_r1) [px::bind(&MyContext::variable_value, _r1, _1, _val)] + variable_reference(_r1) [px::bind(&MyContext::variable_value, _r1, _1, _val)] | (lit('(') > conditional_expression(_r1) > ')' > iter_pos) [ px::bind(&FactorActions::expr_, _1, _2, _val) ] | (lit('-') > unary_expression(_r1) ) [ px::bind(&FactorActions::minus_, _1, _val) ] | (lit('+') > unary_expression(_r1) > iter_pos) [ px::bind(&FactorActions::expr_, _1, _2, _val) ] | ((kw["not"] | '!') > unary_expression(_r1) > iter_pos) [ px::bind(&FactorActions::not_, _1, _val) ] | (kw["min"] > '(' > conditional_expression(_r1) [_val = _1] > ',' > conditional_expression(_r1) > ')') - [ px::bind(&expr::min, _val, _2) ] + [ px::bind(&expr::min, _val, _2) ] | (kw["max"] > '(' > conditional_expression(_r1) [_val = _1] > ',' > conditional_expression(_r1) > ')') - [ px::bind(&expr::max, _val, _2) ] + [ px::bind(&expr::max, _val, _2) ] | (kw["random"] > '(' > conditional_expression(_r1) [_val = _1] > ',' > conditional_expression(_r1) > ')') - [ px::bind(&MyContext::random, _r1, _val, _2) ] + [ px::bind(&MyContext::random, _r1, _val, _2) ] | (kw["digits"] > '(' > conditional_expression(_r1) [_val = _1] > ',' > conditional_expression(_r1) > optional_parameter(_r1)) - [ px::bind(&expr::template digits, _val, _2, _3) ] + [ px::bind(&expr::digits, _val, _2, _3) ] | (kw["zdigits"] > '(' > conditional_expression(_r1) [_val = _1] > ',' > conditional_expression(_r1) > optional_parameter(_r1)) - [ px::bind(&expr::template digits, _val, _2, _3) ] + [ px::bind(&expr::digits, _val, _2, _3) ] | (kw["int"] > '(' > conditional_expression(_r1) > ')') [ px::bind(&FactorActions::to_int, _1, _val) ] | (kw["round"] > '(' > conditional_expression(_r1) > ')') [ px::bind(&FactorActions::round, _1, _val) ] - | (kw["is_nil"] > '(' > is_nil_test(_r1) > ')') [ _val = _1 ] + | (kw["is_nil"] > '(' > variable_reference(_r1) > ')') [px::bind(&MyContext::is_nil_test, _r1, _1, _val)] | (kw["one_of"] > '(' > one_of(_r1) > ')') [ _val = _1 ] + | (kw["empty"] > '(' > variable_reference(_r1) > ')') [px::bind(&MyContext::is_vector_empty, _r1, _1, _val)] + | (kw["size"] > '(' > variable_reference(_r1) > ')') [px::bind(&MyContext::vector_size, _r1, _1, _val)] | (kw["interpolate_table"] > '(' > interpolate_table(_r1) > ')') [ _val = _1 ] - | (strict_double > iter_pos) [ px::bind(&FactorActions::double_, _1, _2, _val) ] - | (int_ > iter_pos) [ px::bind(&FactorActions::int_, _1, _2, _val) ] - | (kw[bool_] > iter_pos) [ px::bind(&FactorActions::bool_, _1, _2, _val) ] + | (strict_double > iter_pos) [ px::bind(&FactorActions::double_, _r1, _1, _2, _val) ] + | (int_ > iter_pos) [ px::bind(&FactorActions::int_, _r1, _1, _2, _val) ] + | (kw[bool_] > iter_pos) [ px::bind(&FactorActions::bool_, _r1, _1, _2, _val) ] | raw[lexeme['"' > *((utf8char - char_('\\') - char_('"')) | ('\\' > char_)) > '"']] - [ px::bind(&FactorActions::string_, _1, _val) ] + [ px::bind(&FactorActions::string_, _r1, _1, _val) ] ); unary_expression.name("unary_expression"); one_of = (unary_expression(_r1)[_a = _1] > one_of_list(_r1, _a))[_val = _2]; one_of.name("one_of"); one_of_list = - eps[px::bind(&expr::one_of_test_init, _val)] > + eps[px::bind(&expr::one_of_test_init, _val)] > ( ( ',' > *( ( - unary_expression(_r1)[px::bind(&expr::template one_of_test, _r2, _1, _val)] - | (lit('~') > unary_expression(_r1))[px::bind(&expr::template one_of_test, _r2, _1, _val)] - | regular_expression[px::bind(&expr::one_of_test_regex, _r2, _1, _val)] + unary_expression(_r1)[px::bind(&expr::one_of_test, _r2, _1, _val)] + | (lit('~') > unary_expression(_r1))[px::bind(&expr::one_of_test, _r2, _1, _val)] + | regular_expression[px::bind(&expr::one_of_test_regex, _r2, _1, _val)] ) >> -lit(',')) ) | eps @@ -1533,12 +2183,12 @@ namespace client one_of_list.name("one_of_list"); interpolate_table = (unary_expression(_r1)[_a = _1] > ',' > interpolate_table_list(_r1, _a)) - [px::bind(&InterpolateTableContext::evaluate, _a, _2, _val)]; + [px::bind(&InterpolateTableContext::evaluate, _a, _2, _val)]; interpolate_table.name("interpolate_table"); interpolate_table_list = - eps[px::bind(&InterpolateTableContext::init, _r2)] > + eps[px::bind(&InterpolateTableContext::init, _r2)] > ( *(( lit('(') > unary_expression(_r1) > ',' > unary_expression(_r1) > ')' ) - [px::bind(&InterpolateTableContext::add_pair, _1, _2, _val)] >> -lit(',')) ); + [px::bind(&InterpolateTableContext::add_pair, _1, _2, _val)] >> -lit(',')) ); interpolate_table.name("interpolate_table_list"); optional_parameter = iter_pos[px::bind(&FactorActions::set_start_pos, _1, _val)] >> ( @@ -1547,20 +2197,17 @@ namespace client ); optional_parameter.name("optional_parameter"); - is_nil_test = variable_reference(_r1)[px::bind(&MyContext::is_nil_test, _r1, _1, _val)]; - is_nil_test.name("is_nil test"); - variable_reference = variable(_r1)[_a=_1] >> ( - ('[' > additive_expression(_r1)[px::bind(&MyContext::evaluate_index, _1, _b)] > ']' > iter_pos) - [px::bind(&MyContext::store_variable_index, _r1, _a, _b, _2, _val)] + ('[' > additive_expression(_r1)[px::bind(&MyContext::evaluate_index, _1, _b)] > ']' > iter_pos) + [px::bind(&MyContext::store_variable_index, _r1, _a, _b, _2, _val)] | eps[_val=_a] ); variable_reference.name("variable reference"); - variable = identifier[ px::bind(&MyContext::resolve_variable, _r1, _1, _val) ]; - variable.name("variable reference"); + variable = identifier[ px::bind(&MyContext::resolve_variable, _r1, _1, _val) ]; + variable.name("variable name"); regular_expression = raw[lexeme['/' > *((utf8char - char_('\\') - char_('/')) | ('\\' > char_)) > '/']]; regular_expression.name("regular_expression"); @@ -1569,29 +2216,34 @@ namespace client ("and") ("digits") ("zdigits") + ("empty") ("if") ("int") ("is_nil") + ("local") //("inf") ("else") ("elsif") ("endif") ("false") + ("global") ("interpolate_table") ("min") ("max") ("random") + ("repeat") ("round") ("not") ("one_of") ("or") + ("size") ("true"); if (0) { debug(start); debug(text); debug(text_block); - debug(macro); + debug(macros); debug(if_else_output); debug(interpolate_table); // debug(switch_output); @@ -1613,28 +2265,27 @@ namespace client debug(optional_parameter); debug(variable_reference); debug(variable); - debug(is_nil_test); debug(regular_expression); } } - // Generic expression over expr. - typedef qi::rule(const MyContext*), spirit_encoding::space_type> RuleExpression; + // Generic expression over expr. + typedef qi::rule RuleExpression; // The start of the grammar. - qi::rule, spirit_encoding::space_type> start; + qi::rule, skipper> start; // A free-form text. - qi::rule text; + qi::rule text; // A free-form text, possibly empty, possibly containing macro expansions. - qi::rule text_block; + qi::rule text_block; // Statements enclosed in curely braces {} - qi::rule macro; + qi::rule block, statement, macros, if_text_block, if_macros, else_macros; // Legacy variable expansion of the original Slic3r, in the form of [scalar_variable] or [vector_variable_index]. - qi::rule legacy_variable_expansion; + qi::rule legacy_variable_expansion; // Parsed identifier name. - qi::rule(), spirit_encoding::space_type> identifier; + qi::rule identifier; // Ternary operator (?:) over logical_or_expression. - RuleExpression conditional_expression; + qi::rule, skipper> conditional_expression; // Logical or over logical_and_expressions. RuleExpression logical_or_expression; // Logical and over relational_expressions. @@ -1652,48 +2303,39 @@ namespace client // Accepting an optional parameter. RuleExpression optional_parameter; // Rule to capture a regular expression enclosed in //. - qi::rule(), spirit_encoding::space_type> regular_expression; + qi::rule regular_expression; // Evaluate boolean expression into bool. - qi::rule bool_expr_eval; + qi::rule bool_expr_eval; // Reference of a scalar variable, or reference to a field of a vector variable. - qi::rule(const MyContext*), qi::locals, int>, spirit_encoding::space_type> variable_reference; + qi::rule, skipper> variable_reference; // Rule to translate an identifier to a ConfigOption, or to fail. - qi::rule(const MyContext*), spirit_encoding::space_type> variable; + qi::rule variable; // Evaluating whether a nullable variable is nil. - qi::rule(const MyContext*), spirit_encoding::space_type> is_nil_test; + qi::rule is_nil_test; // Evaluating "one of" list of patterns. - qi::rule(const MyContext*), qi::locals>, spirit_encoding::space_type> one_of; - qi::rule(const MyContext*, const expr ¶m), spirit_encoding::space_type> one_of_list; + qi::rule, skipper> one_of; + qi::rule one_of_list; // Evaluating the "interpolate_table" expression. - qi::rule(const MyContext*), qi::locals>, spirit_encoding::space_type> interpolate_table; - qi::rule(const MyContext*, const expr ¶m), spirit_encoding::space_type> interpolate_table_list; + qi::rule, skipper> interpolate_table; + qi::rule interpolate_table_list; - qi::rule, spirit_encoding::space_type> if_else_output; - qi::rule, int>, spirit_encoding::space_type> assignment_statement; -// qi::rule, bool, std::string>, spirit_encoding::space_type> switch_output; + qi::rule, skipper> if_else_output; + qi::rule, skipper> assignment_statement; + // Allocating new local or global variables. + qi::rule, skipper> new_variable_statement; + qi::rule(const MyContext*), skipper> initializer_list; qi::symbols keywords; }; } +static const client::macro_processor g_macro_processor_instance; + static std::string process_macro(const std::string &templ, client::MyContext &context) { - typedef std::string::const_iterator iterator_type; - typedef client::macro_processor macro_processor; - - // Our whitespace skipper. - spirit_encoding::space_type space; - // Our grammar, statically allocated inside the method, meaning it will be allocated the first time - // PlaceholderParser::process() runs. - //FIXME this kind of initialization is not thread safe! - static macro_processor macro_processor_instance; - // Iterators over the source template. - std::string::const_iterator iter = templ.begin(); - std::string::const_iterator end = templ.end(); - // Accumulator for the processed template. - std::string output; - phrase_parse(iter, end, macro_processor_instance(&context), space, output); - if (!context.error_message.empty()) { + std::string output; + phrase_parse(templ.begin(), templ.end(), g_macro_processor_instance(&context), client::skipper{}, output); + if (! context.error_message.empty()) { if (context.error_message.back() != '\n' && context.error_message.back() != '\r') context.error_message += '\n'; throw Slic3r::PlaceholderParserError(context.error_message); diff --git a/src/libslic3r/Polygon.cpp b/src/libslic3r/Polygon.cpp index 5d3d6433498..1d93458166d 100644 --- a/src/libslic3r/Polygon.cpp +++ b/src/libslic3r/Polygon.cpp @@ -355,8 +355,6 @@ Polygon Polygon::transform(const Transform3d& trafo) const if (vertices_count == 0) return dstpoly; - unsigned int data_size = 3 * vertices_count * sizeof(float); - Eigen::MatrixXd src(3, vertices_count); for (size_t i = 0; i < vertices_count; i++) { diff --git a/src/libslic3r/Polyline.cpp b/src/libslic3r/Polyline.cpp index b30564f3c19..8a650c926bb 100644 --- a/src/libslic3r/Polyline.cpp +++ b/src/libslic3r/Polyline.cpp @@ -51,7 +51,6 @@ void Polyline::reverse() // removes the given distance from the end of the polyline void Polyline::clip_end(double distance) { - bool last_point_inserted = false; size_t remove_after_index = MultiPoint::size(); while (distance > 0) { Vec2d last_point = this->last_point().cast(); @@ -65,7 +64,6 @@ void Polyline::clip_end(double distance) double lsqr = v.squaredNorm(); if (lsqr > distance * distance) { this->points.emplace_back((last_point + v * (distance / sqrt(lsqr))).cast()); - last_point_inserted = true; break; } distance -= sqrt(lsqr); diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 05c34446b67..dcbe87b9e95 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -784,7 +784,7 @@ static std::vector s_Preset_print_options { "support_top_z_distance", "support_on_build_plate_only","support_critical_regions_only", "bridge_no_support", "thick_bridges", "thick_internal_bridges","dont_filter_internal_bridges", "max_bridge_length", "print_sequence", "print_order", "support_remove_small_overhang", "filename_format", "wall_filament", "support_bottom_z_distance", "sparse_infill_filament", "solid_infill_filament", "support_filament", "support_interface_filament","support_interface_not_for_body", - "ooze_prevention", "standby_temperature_delta", "interface_shells", "line_width", "initial_layer_line_width", + "ooze_prevention", "standby_temperature_delta", "preheat_time","preheat_steps", "interface_shells", "line_width", "initial_layer_line_width", "inner_wall_line_width", "outer_wall_line_width", "sparse_infill_line_width", "internal_solid_infill_line_width", "top_surface_line_width", "support_line_width", "infill_wall_overlap","top_bottom_infill_wall_overlap", "bridge_flow", "internal_bridge_flow", "elefant_foot_compensation", "elefant_foot_compensation_layers", "xy_contour_compensation", "xy_hole_compensation", "resolution", "enable_prime_tower", @@ -809,7 +809,7 @@ static std::vector s_Preset_print_options { "tree_support_brim_width", "gcode_comments", "gcode_label_objects", "initial_layer_travel_speed", "exclude_object", "slow_down_layers", "infill_anchor", "infill_anchor_max","initial_layer_min_bead_width", "make_overhang_printable", "make_overhang_printable_angle", "make_overhang_printable_hole_size" ,"notes", - "wipe_tower_cone_angle", "wipe_tower_extra_spacing","wipe_tower_max_purge_speed", "wipe_tower_extruder", "wiping_volumes_extruders","wipe_tower_bridging", "single_extruder_multi_material_priming", + "wipe_tower_cone_angle", "wipe_tower_extra_spacing","wipe_tower_max_purge_speed", "wipe_tower_filament", "wiping_volumes_extruders","wipe_tower_bridging", "wipe_tower_extra_flow","single_extruder_multi_material_priming", "wipe_tower_rotation_angle", "tree_support_branch_distance_organic", "tree_support_branch_diameter_organic", "tree_support_branch_angle_organic", "hole_to_polyhole", "hole_to_polyhole_threshold", "hole_to_polyhole_twisted", "mmu_segmented_region_max_width", "mmu_segmented_region_interlocking_depth", "small_area_infill_flow_compensation", "small_area_infill_flow_compensation_model", @@ -840,12 +840,12 @@ static std::vector s_Preset_filament_options { "filament_wipe_distance", "additional_cooling_fan_speed", "nozzle_temperature_range_low", "nozzle_temperature_range_high", //SoftFever - "enable_pressure_advance", "pressure_advance","chamber_temperature", "filament_shrink", "support_material_interface_fan_speed", "filament_notes" /*,"filament_seam_gap"*/, + "enable_pressure_advance", "pressure_advance","adaptive_pressure_advance","adaptive_pressure_advance_model","adaptive_pressure_advance_overhangs", "adaptive_pressure_advance_bridges","chamber_temperature", "filament_shrink", "support_material_interface_fan_speed", "filament_notes" /*,"filament_seam_gap"*/, "filament_loading_speed", "filament_loading_speed_start", "filament_load_time", - "filament_unloading_speed", "filament_unloading_speed_start", "filament_unload_time", "filament_toolchange_delay", "filament_cooling_moves", + "filament_unloading_speed", "filament_unloading_speed_start", "filament_unload_time", "filament_toolchange_delay", "filament_cooling_moves", "filament_stamping_loading_speed", "filament_stamping_distance", "filament_cooling_initial_speed", "filament_cooling_final_speed", "filament_ramming_parameters", "filament_multitool_ramming", "filament_multitool_ramming_volume", "filament_multitool_ramming_flow", "activate_chamber_temp_control", - "filament_long_retractions_when_cut","filament_retraction_distances_when_cut" + "filament_long_retractions_when_cut","filament_retraction_distances_when_cut", "idle_temperature" }; static std::vector s_Preset_machine_limits_options { @@ -1572,7 +1572,6 @@ bool PresetCollection::load_user_preset(std::string name, std::map presets_loaded; - int count = 0; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" enter, name %1% , total value counts %2%")%name %preset_values.size(); diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index b53ec6e354c..b45edc8a855 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -1853,7 +1853,7 @@ void PresetBundle::export_selections(AppConfig &config) // BBS void PresetBundle::set_num_filaments(unsigned int n, std::string new_color) { - int old_filament_count = this->filament_presets.size(); + size_t old_filament_count = this->filament_presets.size(); if (n > old_filament_count && old_filament_count != 0) filament_presets.resize(n, filament_presets.back()); else { @@ -1867,7 +1867,7 @@ void PresetBundle::set_num_filaments(unsigned int n, std::string new_color) //BBS set new filament color to new_color if (old_filament_count < n) { if (!new_color.empty()) { - for (int i = old_filament_count; i < n; i++) { + for (size_t i = old_filament_count; i < n; i++) { filament_color->values[i] = new_color; } } @@ -2054,7 +2054,7 @@ bool PresetBundle::check_filament_temp_equation_by_printer_type_and_nozzle_for_m //BBS: check whether this is the only edited filament bool PresetBundle::is_the_only_edited_filament(unsigned int filament_index) { - int n = this->filament_presets.size(); + size_t n = this->filament_presets.size(); if (filament_index >= n) return false; @@ -2117,7 +2117,6 @@ DynamicPrintConfig PresetBundle::full_fff_config() const // BBS size_t num_filaments = this->filament_presets.size(); - auto* extruder_diameter = dynamic_cast(out.option("nozzle_diameter")); // Collect the "compatible_printers_condition" and "inherits" values over all presets (print, filaments, printers) into a single vector. std::vector compatible_printers_condition; std::vector compatible_prints_condition; @@ -2472,7 +2471,7 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool std::vector filament_ids = std::move(config.option("filament_ids", true)->values); std::vector print_compatible_printers = std::move(config.option("print_compatible_printers", true)->values); //BBS: add different settings check logic - bool has_different_settings_to_system = config.option("different_settings_to_system")?true:false; + // bool has_different_settings_to_system = config.option("different_settings_to_system")?true:false; std::vector different_values = std::move(config.option("different_settings_to_system", true)->values); std::string &compatible_printers_condition = Preset::compatible_printers_condition(config); std::string &compatible_prints_condition = Preset::compatible_prints_condition(config); diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 43755c8ade3..b663f48976c 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -161,6 +161,8 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n "use_firmware_retraction", "slow_down_layer_time", "standby_temperature_delta", + "preheat_time", + "preheat_steps", "machine_start_gcode", "filament_start_gcode", "change_filament_gcode", @@ -252,6 +254,8 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n || opt_key == "filament_unloading_speed_start" || opt_key == "filament_toolchange_delay" || opt_key == "filament_cooling_moves" + || opt_key == "filament_stamping_loading_speed" + || opt_key == "filament_stamping_distance" || opt_key == "filament_cooling_initial_speed" || opt_key == "filament_cooling_final_speed" || opt_key == "filament_ramming_parameters" @@ -273,6 +277,7 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n || opt_key == "other_layers_print_sequence" || opt_key == "other_layers_print_sequence_nums" || opt_key == "wipe_tower_bridging" + || opt_key == "wipe_tower_extra_flow" || opt_key == "wipe_tower_no_sparse_layers" || opt_key == "flush_volumes_matrix" || opt_key == "prime_volume" @@ -284,10 +289,11 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n || opt_key == "initial_layer_speed" || opt_key == "initial_layer_travel_speed" || opt_key == "slow_down_layers" + || opt_key == "idle_temperature" || opt_key == "wipe_tower_cone_angle" || opt_key == "wipe_tower_extra_spacing" || opt_key == "wipe_tower_max_purge_speed" - || opt_key == "wipe_tower_extruder" + || opt_key == "wipe_tower_filament" || opt_key == "wiping_volumes_extruders" || opt_key == "enable_filament_ramming" || opt_key == "purge_in_prime_tower" @@ -493,7 +499,10 @@ std::vector Print::print_object_ids() const bool Print::has_infinite_skirt() const { - return (m_config.draft_shield == dsEnabled && m_config.skirt_loops > 0) || (m_config.ooze_prevention && this->extruders().size() > 1); + // Orca: unclear why (m_config.ooze_prevention && this->extruders().size() > 1) logic is here, removed. + // return (m_config.draft_shield == dsEnabled && m_config.skirt_loops > 0) || (m_config.ooze_prevention && this->extruders().size() > 1); + + return (m_config.draft_shield == dsEnabled && m_config.skirt_loops > 0); } bool Print::has_skirt() const @@ -823,7 +832,6 @@ StringObjectException Print::sequential_print_clearance_valid(const Print &print for (int i = k+1; i < print_instance_count; i++) { - auto& p = print_instance_with_bounding_box[i].print_instance; auto bbox2 = print_instance_with_bounding_box[i].bounding_box; auto py1 = bbox2.min.y(); auto py2 = bbox2.max.y(); @@ -1148,17 +1156,20 @@ StringObjectException Print::validate(StringObjectException *warning, Polygons* double nozzle_diam = m_config.nozzle_diameter.get_at(extruder_idx); double filament_diam = m_config.filament_diameter.get_at(extruder_idx); if (nozzle_diam - EPSILON > first_nozzle_diam || nozzle_diam + EPSILON < first_nozzle_diam - || std::abs((filament_diam - first_filament_diam) / first_filament_diam) > 0.1) - // BBS: remove L() - return { L("Different nozzle diameters and different filament diameters is not allowed when prime tower is enabled.") }; + || std::abs((filament_diam - first_filament_diam) / first_filament_diam) > 0.1) { + // return { L("Different nozzle diameters and different filament diameters may not work well when prime tower is enabled. It's very experimental, please proceed with caucious.") }; + warning->string = L("Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution."); + warning->opt_key = "nozzle_diameter"; + break; + } } if (! m_config.use_relative_e_distances) return { L("The Wipe Tower is currently only supported with the relative extruder addressing (use_relative_e_distances=1).") }; - if (m_config.ooze_prevention) - return { L("Ooze prevention is currently not supported with the prime tower enabled.") }; - // BBS: remove following logic and _L() + if (m_config.ooze_prevention && m_config.single_extruder_multi_material) + return {L("Ooze prevention is only supported with the wipe tower when 'single_extruder_multi_material' is off.")}; + #if 0 if (m_config.gcode_flavor != gcfRepRapSprinter && m_config.gcode_flavor != gcfRepRapFirmware && m_config.gcode_flavor != gcfRepetier && m_config.gcode_flavor != gcfMarlinLegacy && m_config.gcode_flavor != gcfMarlinFirmware) @@ -1391,32 +1402,30 @@ StringObjectException Print::validate(StringObjectException *warning, Polygons* const ConfigOptionDef* bed_type_def = print_config_def.get("curr_bed_type"); assert(bed_type_def != nullptr); - if (is_BBL_printer()) { + if (is_BBL_printer()) { const t_config_enum_values* bed_type_keys_map = bed_type_def->enum_keys_map; + const ConfigOptionInts* bed_temp_opt = m_config.option(get_bed_temp_key(m_config.curr_bed_type)); for (unsigned int extruder_id : extruders) { - const ConfigOptionInts* bed_temp_opt = m_config.option(get_bed_temp_key(m_config.curr_bed_type)); - for (unsigned int extruder_id : extruders) { - int curr_bed_temp = bed_temp_opt->get_at(extruder_id); - if (curr_bed_temp == 0 && bed_type_keys_map != nullptr) { - std::string bed_type_name; - for (auto item : *bed_type_keys_map) { - if (item.second == m_config.curr_bed_type) { - bed_type_name = item.first; - break; - } + int curr_bed_temp = bed_temp_opt->get_at(extruder_id); + if (curr_bed_temp == 0 && bed_type_keys_map != nullptr) { + std::string bed_type_name; + for (auto item : *bed_type_keys_map) { + if (item.second == m_config.curr_bed_type) { + bed_type_name = item.first; + break; } - - StringObjectException except; - except.string = Slic3r::format(L("Plate %d: %s does not support filament %s"), this->get_plate_index() + 1, L(bed_type_name), extruder_id + 1); - except.string += "\n"; - except.type = STRING_EXCEPT_FILAMENT_NOT_MATCH_BED_TYPE; - except.params.push_back(std::to_string(this->get_plate_index() + 1)); - except.params.push_back(L(bed_type_name)); - except.params.push_back(std::to_string(extruder_id+1)); - except.object = nullptr; - return except; - } - } + } + + StringObjectException except; + except.string = Slic3r::format(L("Plate %d: %s does not support filament %s"), this->get_plate_index() + 1, L(bed_type_name), extruder_id + 1); + except.string += "\n"; + except.type = STRING_EXCEPT_FILAMENT_NOT_MATCH_BED_TYPE; + except.params.push_back(std::to_string(this->get_plate_index() + 1)); + except.params.push_back(L(bed_type_name)); + except.params.push_back(std::to_string(extruder_id+1)); + except.object = nullptr; + return except; + } } } @@ -1433,7 +1442,7 @@ StringObjectException Print::validate(StringObjectException *warning, Polygons* } return warning_key; }; - auto check_motion_ability_region_setting = [&](const std::vector& keys_to_check, double limit) -> std::string { + /* auto check_motion_ability_region_setting = [&](const std::vector& keys_to_check, double limit) -> std::string { std::string warning_key; for (const auto& key : keys_to_check) { if (m_default_region_config.get_abs_value(key) > limit) { @@ -1442,7 +1451,7 @@ StringObjectException Print::validate(StringObjectException *warning, Polygons* } } return warning_key; - }; + }; */ std::string warning_key; // check jerk @@ -2035,7 +2044,6 @@ void Print::process(long long *time_cost_with_cache, bool use_cache) //BBS: get the objects' indices when GCodes are generated ToolOrdering tool_ordering; unsigned int initial_extruder_id = (unsigned int)-1; - unsigned int final_extruder_id = (unsigned int)-1; bool has_wipe_tower = false; std::vector print_object_instances_ordering; std::vector::const_iterator print_object_instance_sequential_active; @@ -2057,14 +2065,6 @@ void Print::process(long long *time_cost_with_cache, bool use_cache) tool_ordering = this->tool_ordering(); tool_ordering.assign_custom_gcodes(*this); has_wipe_tower = this->has_wipe_tower() && tool_ordering.has_wipe_tower(); - //BBS: have no single_extruder_multi_material_priming -#if 0 - initial_extruder_id = (has_wipe_tower && !this->config().single_extruder_multi_material_priming) ? - // The priming towers will be skipped. - tool_ordering.all_extruders().back() : - // Don't skip the priming towers. - tool_ordering.first_extruder(); -#endif initial_extruder_id = tool_ordering.first_extruder(); print_object_instances_ordering = chain_print_object_instances(*this); append(printExtruders, tool_ordering.tools_for_layer(layers_to_print.front().first).extruders); @@ -2404,14 +2404,24 @@ std::vector Print::first_layer_wipe_tower_corners(bool check_wipe_tower_e double width = m_config.prime_tower_width + 2*m_wipe_tower_data.brim_width; double depth = m_wipe_tower_data.depth + 2*m_wipe_tower_data.brim_width; Vec2d pt0(-m_wipe_tower_data.brim_width, -m_wipe_tower_data.brim_width); - for (Vec2d pt : { - pt0, - Vec2d(pt0.x()+width, pt0.y() ), - Vec2d(pt0.x()+width, pt0.y()+depth), - Vec2d(pt0.x(), pt0.y()+depth) - }) { + + // First the corners. + std::vector pts = { pt0, + Vec2d(pt0.x()+width, pt0.y()), + Vec2d(pt0.x()+width, pt0.y()+depth), + Vec2d(pt0.x(),pt0.y()+depth) + }; + + // Now the stabilization cone. + Vec2d center = (pts[0] + pts[2])/2.; + const auto [cone_R, cone_x_scale] = WipeTower2::get_wipe_tower_cone_base(m_config.prime_tower_width, m_wipe_tower_data.height, m_wipe_tower_data.depth, m_config.wipe_tower_cone_angle); + double r = cone_R + m_wipe_tower_data.brim_width; + for (double alpha = 0.; alpha<2*M_PI; alpha += M_PI/20.) + pts.emplace_back(center + r*Vec2d(std::cos(alpha)/cone_x_scale, std::sin(alpha))); + + for (Vec2d& pt : pts) { pt = Eigen::Rotation2Dd(Geometry::deg2rad(m_config.wipe_tower_rotation_angle.value)) * pt; - // BBS: add partplate logic + //Orca: offset the wipe tower to the plate origin pt += Vec2d(m_config.wipe_tower_x.get_at(m_plate_index) + m_origin(0), m_config.wipe_tower_y.get_at(m_plate_index) + m_origin(1)); corners.emplace_back(Point(scale_(pt.x()), scale_(pt.y()))); } @@ -2577,9 +2587,20 @@ void Print::_make_wipe_tower() for (unsigned int i = 0; i(flush_matrix.begin()+i*number_of_extruders, flush_matrix.begin()+(i+1)*number_of_extruders)); + const auto bUseWipeTower2 = is_BBL_printer() ? false : true; + // Orca: itertate over wipe_volumes and change the non-zero values to the prime_volume + if (!m_config.purge_in_prime_tower && !is_BBL_printer()) { + for (unsigned int i = 0; i < number_of_extruders; ++i) { + for (unsigned int j = 0; j < number_of_extruders; ++j) { + if (wipe_volumes[i][j] > 0) { + wipe_volumes[i][j] = m_config.prime_volume; + } + } + } + } + // Let the ToolOrdering class know there will be initial priming extrusions at the start of the print. - // BBS: priming logic is removed, so don't consider it in tool ordering - m_wipe_tower_data.tool_ordering = ToolOrdering(*this, (unsigned int)-1, false); + m_wipe_tower_data.tool_ordering = ToolOrdering(*this, (unsigned int) -1, bUseWipeTower2 ? true : false); if (!m_wipe_tower_data.tool_ordering.has_wipe_tower()) // Don't generate any wipe tower. @@ -2622,7 +2643,7 @@ void Print::_make_wipe_tower() } this->throw_if_canceled(); - if (is_BBL_printer()) { + if (!bUseWipeTower2) { // in BBL machine, wipe tower is only use to prime extruder. So just use a global wipe volume. WipeTower wipe_tower(m_config, m_plate_index, m_origin, m_config.prime_volume, m_wipe_tower_data.tool_ordering.first_extruder(), m_wipe_tower_data.tool_ordering.empty() ? 0.f : m_wipe_tower_data.tool_ordering.back().print_z); @@ -2646,7 +2667,7 @@ void Print::_make_wipe_tower() for (auto &layer_tools : m_wipe_tower_data.tool_ordering.layer_tools()) { // for all layers if (!layer_tools.has_wipe_tower) continue; - bool first_layer = &layer_tools == &m_wipe_tower_data.tool_ordering.front(); + // bool first_layer = &layer_tools == &m_wipe_tower_data.tool_ordering.front(); wipe_tower.plan_toolchange((float) layer_tools.print_z, (float) layer_tools.wipe_tower_layer_height, current_extruder_id, current_extruder_id); @@ -2730,13 +2751,13 @@ void Print::_make_wipe_tower() for (size_t i = 0; i < number_of_extruders; ++i) wipe_tower.set_extruder(i, m_config); - // m_wipe_tower_data.priming = Slic3r::make_unique>( - // wipe_tower.prime((float)this->skirt_first_layer_height(), m_wipe_tower_data.tool_ordering.all_extruders(), false)); + m_wipe_tower_data.priming = Slic3r::make_unique>( + wipe_tower.prime((float)this->skirt_first_layer_height(), m_wipe_tower_data.tool_ordering.all_extruders(), false)); // Lets go through the wipe tower layers and determine pairs of extruder changes for each // to pass to wipe_tower (so that it can use it for planning the layout of the tower) { - unsigned int current_extruder_id = m_wipe_tower_data.tool_ordering.first_extruder(); + unsigned int current_extruder_id = m_wipe_tower_data.tool_ordering.all_extruders().back(); for (auto &layer_tools : m_wipe_tower_data.tool_ordering.layer_tools()) { // for all layers if (!layer_tools.has_wipe_tower) continue; @@ -2744,7 +2765,7 @@ void Print::_make_wipe_tower() wipe_tower.plan_toolchange((float) layer_tools.print_z, (float) layer_tools.wipe_tower_layer_height, current_extruder_id, current_extruder_id, false); for (const auto extruder_id : layer_tools.extruders) { - if (/*(first_layer && extruder_id == m_wipe_tower_data.tool_ordering.all_extruders().back()) || */ extruder_id != + if ((first_layer && extruder_id == m_wipe_tower_data.tool_ordering.all_extruders().back()) || extruder_id != current_extruder_id) { float volume_to_wipe = m_config.prime_volume; if (m_config.purge_in_prime_tower) { @@ -2820,6 +2841,7 @@ std::string Print::output_filename(const std::string &filename_base) const // These values will be just propagated into the output file name. DynamicConfig config = this->finished() ? this->print_statistics().config() : this->print_statistics().placeholders(); config.set_key_value("num_filaments", new ConfigOptionInt((int)m_config.nozzle_diameter.size())); + config.set_key_value("num_extruders", new ConfigOptionInt((int) m_config.nozzle_diameter.size())); config.set_key_value("plate_name", new ConfigOptionString(get_plate_name())); config.set_key_value("plate_number", new ConfigOptionString(get_plate_number_formatted())); config.set_key_value("model_name", new ConfigOptionString(get_model_name())); @@ -2925,6 +2947,30 @@ std::string PrintStatistics::finalize_output_path(const std::string &path_in) co return final_path; } +const std::string PrintStatistics::FilamentUsedG = "filament used [g]"; +const std::string PrintStatistics::FilamentUsedGMask = "; filament used [g] ="; + +const std::string PrintStatistics::TotalFilamentUsedG = "total filament used [g]"; +const std::string PrintStatistics::TotalFilamentUsedGMask = "; total filament used [g] ="; +const std::string PrintStatistics::TotalFilamentUsedGValueMask = "; total filament used [g] = %.2lf\n"; + +const std::string PrintStatistics::FilamentUsedCm3 = "filament used [cm3]"; +const std::string PrintStatistics::FilamentUsedCm3Mask = "; filament used [cm3] ="; + +const std::string PrintStatistics::FilamentUsedMm = "filament used [mm]"; +const std::string PrintStatistics::FilamentUsedMmMask = "; filament used [mm] ="; + +const std::string PrintStatistics::FilamentCost = "filament cost"; +const std::string PrintStatistics::FilamentCostMask = "; filament cost ="; + +const std::string PrintStatistics::TotalFilamentCost = "total filament cost"; +const std::string PrintStatistics::TotalFilamentCostMask = "; total filament cost ="; +const std::string PrintStatistics::TotalFilamentCostValueMask = "; total filament cost = %.2lf\n"; + +const std::string PrintStatistics::TotalFilamentUsedWipeTower = "total filament used for wipe tower [g]"; +const std::string PrintStatistics::TotalFilamentUsedWipeTowerValueMask = "; total filament used for wipe tower [g] = %.2lf\n"; + + /*add json export/import related functions */ #define JSON_POLYGON_CONTOUR "contour" #define JSON_POLYGON_HOLES "holes" diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index bd7b867b99e..aebb46899f4 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -771,6 +771,23 @@ struct PrintStatistics initial_tool = 0; filament_stats.clear(); } + static const std::string FilamentUsedG; + static const std::string FilamentUsedGMask; + static const std::string TotalFilamentUsedG; + static const std::string TotalFilamentUsedGMask; + static const std::string TotalFilamentUsedGValueMask; + static const std::string FilamentUsedCm3; + static const std::string FilamentUsedCm3Mask; + static const std::string FilamentUsedMm; + static const std::string FilamentUsedMmMask; + static const std::string FilamentCost; + static const std::string FilamentCostMask; + static const std::string TotalFilamentCost; + static const std::string TotalFilamentCostMask; + static const std::string TotalFilamentCostValueMask; + static const std::string TotalFilamentUsedWipeTower; + static const std::string TotalFilamentUsedWipeTowerValueMask; + }; typedef std::vector PrintObjectPtrs; diff --git a/src/libslic3r/PrintBase.hpp b/src/libslic3r/PrintBase.hpp index aecef8a238c..b680ac274e4 100644 --- a/src/libslic3r/PrintBase.hpp +++ b/src/libslic3r/PrintBase.hpp @@ -583,7 +583,16 @@ class PrintBaseWithState : public PrintBase bool is_step_done(PrintStepEnum step) const { return m_state.is_done(step, this->state_mutex()); } PrintStateBase::StateWithTimeStamp step_state_with_timestamp(PrintStepEnum step) const { return m_state.state_with_timestamp(step, this->state_mutex()); } PrintStateBase::StateWithWarnings step_state_with_warnings(PrintStepEnum step) const { return m_state.state_with_warnings(step, this->state_mutex()); } - + // Add a slicing warning to the active Print step and send a status notification. + // This method could be called multiple times between this->set_started() and this->set_done(). + void active_step_add_warning(PrintStateBase::WarningLevel warning_level, const std::string &message, + PrintStateBase::SlicingNotificationType message_id = PrintStateBase::SlicingDefaultNotification) + { + std::pair active_step = m_state.active_step_add_warning(warning_level, message, (int)message_id, this->state_mutex()); + if (active_step.second) + // Update UI. + this->status_update_warnings(static_cast(active_step.first), warning_level, message, nullptr, message_id); + } protected: bool set_started(PrintStepEnum step) { return m_state.set_started(step, this->state_mutex(), [this](){ this->throw_if_canceled(); }); } PrintStateBase::TimeStamp set_done(PrintStepEnum step) { @@ -605,16 +614,6 @@ class PrintBaseWithState : public PrintBase bool is_step_started_unguarded(PrintStepEnum step) const { return m_state.is_started_unguarded(step); } bool is_step_done_unguarded(PrintStepEnum step) const { return m_state.is_done_unguarded(step); } - // Add a slicing warning to the active Print step and send a status notification. - // This method could be called multiple times between this->set_started() and this->set_done(). - void active_step_add_warning(PrintStateBase::WarningLevel warning_level, const std::string &message, - PrintStateBase::SlicingNotificationType message_id = PrintStateBase::SlicingDefaultNotification) - { - std::pair active_step = m_state.active_step_add_warning(warning_level, message, (int)message_id, this->state_mutex()); - if (active_step.second) - // Update UI. - this->status_update_warnings(static_cast(active_step.first), warning_level, message, nullptr, message_id); - } private: PrintState m_state; diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index ddcb4bcbf8f..b17746db4f5 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -1681,6 +1681,60 @@ void PrintConfigDef::init_fff_params() def->max = 2; def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloats { 0.02 }); + + // Orca: Adaptive pressure advance option and calibration values + def = this->add("adaptive_pressure_advance", coBools); + def->label = L("Enable adaptive pressure advance (beta)"); + def->tooltip = L("With increasing print speeds (and hence increasing volumetric flow through the nozzle) and increasing accelerations, " + "it has been observed that the effective PA value typically decreases. " + "This means that a single PA value is not always 100% optimal for all features and a compromise value is usually used " + "that does not cause too much bulging on features with lower flow speed and accelerations while also not causing gaps on faster features.\n\n" + "This feature aims to address this limitation by modeling the response of your printer's extrusion system depending " + "on the volumetric flow speed and acceleration it is printing at. Internally, it generates a fitted model that can extrapolate the needed pressure " + "advance for any given volumetric flow speed and acceleration, which is then emmited to the printer depending on the current print conditions.\n\n" + "When enabled, the pressure advance value above is overriden. However, a reasonable default value above is " + "strongly recomended to act as a fallback and for when tool changing.\n\n"); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionBools{ false }); + + // Orca: Adaptive pressure advance option and calibration values + def = this->add("adaptive_pressure_advance_model", coStrings); + def->label = L("Adaptive pressure advance measurements (beta)"); + def->tooltip = L("Add sets of pressure advance (PA) values, the volumetric flow speeds and accelerations they were measured at, separated by a comma. " + "One set of values per line. For example\n" + "0.04,3.96,3000\n0.033,3.96,10000\n0.029,7.91,3000\n0.026,7.91,10000\n\n" + "How to calibrate:\n" + "1. Run the pressure advance test for at least 3 speeds per acceleration value. It is recommended that the test is run " + "for at least the speed of the external perimeters, the speed of the internal perimeters and the fastest feature " + "print speed in your profile (usually its the sparse or solid infill). Then run them for the same speeds for the slowest and fastest print accelerations," + "and no faster than the recommended maximum acceleration as given by the klipper input shaper.\n" + "2. Take note of the optimal PA value for each volumetric flow speed and acceleration. You can find the flow number by selecting " + "flow from the color scheme drop down and move the horizontal slider over the PA pattern lines. The number should be visible " + "at the bottom of the page. The ideal PA value should be decreasing the higher the volumetric flow is. If it is not, confirm that your extruder is functioning correctly." + "The slower and with less acceleration you print, the larger the range of acceptable PA values. If no difference is visible, use the PA value from the faster test." + "3. Enter the triplets of PA values, Flow and Accelerations in the text box here and save your filament profile\n\n" + ""); + def->mode = comAdvanced; + //def->gui_flags = "serialized"; + def->multiline = true; + def->full_width = true; + def->height = 15; + def->set_default_value(new ConfigOptionStrings{"0,0,0\n0,0,0"}); + + def = this->add("adaptive_pressure_advance_overhangs", coBools); + def->label = L("Enable adaptive pressure advance for overhangs (beta)"); + def->tooltip = L("Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, " + "as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n"); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionBools{ false }); + + def = this->add("adaptive_pressure_advance_bridges", coFloats); + def->label = L("Pressure advance for bridges"); + def->tooltip = L("Pressure advance value for bridges. Set to 0 to disable. \n\n A lower PA value when printing bridges helps reduce the appearance of slight under extrusion " + "immediately after bridges. This is caused by the pressure drop in the nozzle when printing in the air and a lower PA helps counteract this."); + def->max = 2; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloats { 0.0 }); def = this->add("line_width", coFloatOrPercent); def->label = L("Default"); @@ -1882,6 +1936,21 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionInts { 4 }); + def = this->add("filament_stamping_loading_speed", coFloats); + def->label = L("Stamping loading speed"); + def->tooltip = L("Speed used for stamping."); + def->min = 0; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloats { 0. }); + + def = this->add("filament_stamping_distance", coFloats); + def->label = L("Stamping distance measured from the center of the cooling tube"); + def->tooltip = L("If set to nonzero value, filament is moved toward the nozzle between the individual cooling moves (\"stamping\"). " + "This option configures how long this movement should be before the filament is retracted again."); + def->min = 0; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloats { 0. }); + def = this->add("filament_cooling_initial_speed", coFloats); def->label = L("Speed of the first cooling move"); def->tooltip = L("Cooling moves are gradually accelerating beginning at this speed."); @@ -2714,6 +2783,7 @@ void PrintConfigDef::init_fff_params() def->set_default_value(new ConfigOptionBool(false)); def = this->add("sparse_infill_filament", coInt); + def->gui_type = ConfigOptionDef::GUIType::i_enum_open; def->label = L("Infill"); def->category = L("Extruders"); def->tooltip = L("Filament to print internal sparse infill."); @@ -2799,11 +2869,10 @@ void PrintConfigDef::init_fff_params() def = this->add("mmu_segmented_region_interlocking_depth", coFloat); def->label = L("Interlocking depth of a segmented region"); - //def->tooltip = L("Interlocking depth of a segmented region. It will be ignored if " - // "\"mmu_segmented_region_max_width\" is zero or if \"mmu_segmented_region_interlocking_depth\"" - // "is bigger then \"mmu_segmented_region_max_width\". Zero disables this feature."); - def->tooltip = L("Interlocking depth of a segmented region. Zero disables this feature."); - def->sidetext = L("mm"); //(zero to disable) + def->tooltip = L("Interlocking depth of a segmented region. It will be ignored if " + "\"mmu_segmented_region_max_width\" is zero or if \"mmu_segmented_region_interlocking_depth\"" + "is bigger then \"mmu_segmented_region_max_width\". Zero disables this feature."); + def->sidetext = L("mm"); def->min = 0; def->category = L("Advanced"); def->mode = comAdvanced; @@ -3339,10 +3408,8 @@ void PrintConfigDef::init_fff_params() def = this->add("ooze_prevention", coBool); def->label = L("Enable"); - //def->tooltip = L("This option will drop the temperature of the inactive extruders to prevent oozing. " - // "It will enable a tall skirt automatically and move extruders outside such " - // "skirt when changing temperatures."); - def->mode = comDevelop; + def->tooltip = L("This option will drop the temperature of the inactive extruders to prevent oozing."); + def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(false)); def = this->add("filename_format", coString); @@ -3390,14 +3457,12 @@ void PrintConfigDef::init_fff_params() def->set_default_value(new ConfigOptionBool(true)); def = this->add("wall_filament", coInt); - //def->label = L("Walls"); - //def->category = L("Extruders"); - //def->tooltip = L("Filament to print walls"); + def->gui_type = ConfigOptionDef::GUIType::i_enum_open; def->label = "Walls"; def->category = "Extruders"; def->tooltip = "Filament to print walls"; def->min = 1; - def->mode = comDevelop; + def->mode = comAdvanced; def->set_default_value(new ConfigOptionInt(1)); def = this->add("inner_wall_line_width", coFloatOrPercent); @@ -3983,14 +4048,12 @@ void PrintConfigDef::init_fff_params() def->set_default_value(new ConfigOptionFloat(15)); def = this->add("solid_infill_filament", coInt); - //def->label = L("Solid infill"); - //def->category = L("Extruders"); - //def->tooltip = L("Filament to print solid infill"); + def->gui_type = ConfigOptionDef::GUIType::i_enum_open; def->label = "Solid infill"; def->category = "Extruders"; def->tooltip = "Filament to print solid infill"; def->min = 1; - def->mode = comDevelop; + def->mode = comAdvanced; def->set_default_value(new ConfigOptionInt(1)); def = this->add("internal_solid_infill_line_width", coFloatOrPercent); @@ -4060,15 +4123,36 @@ void PrintConfigDef::init_fff_params() def = this->add("standby_temperature_delta", coInt); def->label = L("Temperature variation"); - //def->tooltip = L("Temperature difference to be applied when an extruder is not active. " - // "Enables a full-height \"sacrificial\" skirt on which the nozzles are periodically wiped."); + // TRN PrintSettings : "Ooze prevention" > "Temperature variation" + def->tooltip = L("Temperature difference to be applied when an extruder is not active. " + "The value is not used when 'idle_temperature' in filament settings " + "is set to non zero value."); def->sidetext = "∆°C"; def->min = -max_temp; def->max = max_temp; - //BBS - def->mode = comDevelop; + def->mode = comAdvanced; def->set_default_value(new ConfigOptionInt(-5)); + def = this->add("preheat_time", coFloat); + def->label = L("Preheat time"); + def->tooltip = L("To reduce the waiting time after tool change, Orca can preheat the next tool while the current tool is still in use. " + "This setting specifies the time in seconds to preheat the next tool. Orca will insert a M104 command to preheat the tool in advance."); + def->sidetext = "s"; + def->min = 0; + def->max = 120; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat(30.0)); + + def = this->add("preheat_steps", coInt); + def->label = L("Preheat steps"); + def->tooltip = L("Insert multiple preheat commands(e.g. M104.1). Only useful for Prusa XL. For other printers, please set it to 1."); + // def->sidetext = ""; + def->min = 1; + def->max = 10; + def->mode = comDevelop; + def->set_default_value(new ConfigOptionInt(1)); + + def = this->add("machine_start_gcode", coString); def->label = L("Start G-code"); def->tooltip = L("Start G-code when start the whole printing"); @@ -4091,7 +4175,6 @@ void PrintConfigDef::init_fff_params() def->label = L("Single Extruder Multi Material"); def->tooltip = L("Use single nozzle to print multi filament"); def->mode = comAdvanced; - def->readonly = true; def->set_default_value(new ConfigOptionBool(true)); def = this->add("manual_filament_change", coBool); @@ -4127,7 +4210,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Prime all printing extruders"); def->tooltip = L("If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print."); def->mode = comAdvanced; - def->set_default_value(new ConfigOptionBool(true)); + def->set_default_value(new ConfigOptionBool(false)); def = this->add("slice_closing_radius", coFloat); def->label = L("Slice gap closing radius"); @@ -4889,15 +4972,6 @@ void PrintConfigDef::init_fff_params() def->min = 0.; def->max = 90.; def->set_default_value(new ConfigOptionFloat(0.)); - - def = this->add("wipe_tower_extra_spacing", coPercent); - def->label = L("Wipe tower purge lines spacing"); - def->tooltip = L("Spacing of purge lines on the wipe tower."); - def->sidetext = L("%"); - def->mode = comAdvanced; - def->min = 100.; - def->max = 300.; - def->set_default_value(new ConfigOptionPercent(100.)); def = this->add("wipe_tower_max_purge_speed", coFloat); def->label = L("Maximum wipe tower print speed"); @@ -4912,8 +4986,9 @@ void PrintConfigDef::init_fff_params() def->min = 10; def->set_default_value(new ConfigOptionFloat(90.)); - def = this->add("wipe_tower_extruder", coInt); - def->label = L("Wipe tower extruder"); + def = this->add("wipe_tower_filament", coInt); + def->gui_type = ConfigOptionDef::GUIType::i_enum_open; + def->label = L("Wipe tower"); def->category = L("Extruders"); def->tooltip = L("The extruder to use when printing perimeter of the wipe tower. " "Set to 0 to use the one that is available (non-soluble would be preferred)."); @@ -4960,6 +5035,34 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(10.)); + def = this->add("wipe_tower_extra_spacing", coPercent); + def->label = L("Wipe tower purge lines spacing"); + def->tooltip = L("Spacing of purge lines on the wipe tower."); + def->sidetext = L("%"); + def->mode = comAdvanced; + def->min = 100.; + def->max = 300.; + def->set_default_value(new ConfigOptionPercent(100.)); + + def = this->add("wipe_tower_extra_flow", coPercent); + def->label = L("Extra flow for purging"); + def->tooltip = L("Extra flow used for the purging lines on the wipe tower. This makes the purging lines thicker or narrower " + "than they normally would be. The spacing is adjusted automatically."); + def->sidetext = L("%"); + def->mode = comAdvanced; + def->min = 100.; + def->max = 300.; + def->set_default_value(new ConfigOptionPercent(100.)); + + def = this->add("idle_temperature", coInts); + def->label = L("Idle temperature"); + def->tooltip = L("Nozzle temperature when the tool is currently not used in multi-tool setups." + "This is only used when 'Ooze prevention' is active in Print Settings. Set to 0 to disable."); + def->sidetext = L("°C"); + def->min = 0; + def->max = max_temp; + def->set_default_value(new ConfigOptionInts{0}); + def = this->add("xy_hole_compensation", coFloat); def->label = L("X-Y hole compensation"); def->category = L("Quality"); @@ -5920,7 +6023,9 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va opt_key = "solid_infill_filament"; }else if (opt_key == "perimeter_extruder") { opt_key = "wall_filament"; - } else if (opt_key == "support_material_extruder") { + }else if(opt_key == "wipe_tower_extruder") { + opt_key = "wipe_tower_filament"; + }else if (opt_key == "support_material_extruder") { opt_key = "support_filament"; } else if (opt_key == "support_material_interface_extruder") { opt_key = "support_interface_filament"; @@ -5987,8 +6092,6 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va } else { opt_key = "wall_sequence"; } - } else if(opt_key == "single_extruder_multi_material") { - value = "1"; } else if(opt_key == "ensure_vertical_shell_thickness") { if(value == "1") { @@ -7242,10 +7345,9 @@ ReadWriteSlicingStatesConfigDef::ReadWriteSlicingStatesConfigDef() def->label = L("Extra deretraction"); def->tooltip = L("Currently planned extra extruder priming after deretraction."); - // Options from PS not used in Orca -// def = this->add("e_position", coFloats); -// def->label = L("Absolute E position"); -// def->tooltip = L("Current position of the extruder axis. Only used with absolute extruder addressing."); + def = this->add("e_position", coFloats); + def->label = L("Absolute E position"); + def->tooltip = L("Current position of the extruder axis. Only used with absolute extruder addressing."); } OtherSlicingStatesConfigDef::OtherSlicingStatesConfigDef() @@ -7281,9 +7383,9 @@ OtherSlicingStatesConfigDef::OtherSlicingStatesConfigDef() // def->label = L("Initial filament type"); // def->tooltip = L("String containing filament type of the first used extruder."); - // def = this->add("has_single_extruder_multi_material_priming", coBool); - // def->label = L("Has single extruder MM priming"); - // def->tooltip = L("Are the extra multi-material priming regions used in this print?"); + def = this->add("has_single_extruder_multi_material_priming", coBool); + def->label = L("Has single extruder MM priming"); + def->tooltip = L("Are the extra multi-material priming regions used in this print?"); new_def("initial_no_support_extruder", coInt, "Initial no support extruder", "Zero-based index of the first extruder used for printing without support. Same as initial_no_support_tool."); new_def("in_head_wrap_detect_zone", coBool, "In head wrap detect zone", "Indicates if the first layer overlaps with the head wrap zone."); @@ -7487,10 +7589,9 @@ OtherPresetsConfigDef::OtherPresetsConfigDef() def->label = L("Physical printer name"); def->tooltip = L("Name of the physical printer used for slicing."); - // Options from PS not used in Orca - // def = this->add("num_extruders", coInt); - // def->label = L("Number of extruders"); - // def->tooltip = L("Total number of extruders, regardless of whether they are used in the current print."); + def = this->add("num_extruders", coInt); + def->label = L("Number of extruders"); + def->tooltip = L("Total number of extruders, regardless of whether they are used in the current print."); } @@ -7650,6 +7751,22 @@ bool has_skirt(const DynamicPrintConfig& cfg) float get_real_skirt_dist(const DynamicPrintConfig& cfg) { return has_skirt(cfg) ? cfg.opt_float("skirt_distance") : 0; } +static bool is_XL_printer(const std::string& printer_notes) +{ + return boost::algorithm::contains(printer_notes, "PRINTER_VENDOR_PRUSA3D") + && boost::algorithm::contains(printer_notes, "PRINTER_MODEL_XL"); +} + +bool is_XL_printer(const DynamicPrintConfig &cfg) +{ + auto *printer_notes = cfg.opt("printer_notes"); + return printer_notes && is_XL_printer(printer_notes->value); +} + +bool is_XL_printer(const PrintConfig &cfg) +{ + return is_XL_printer(cfg.printer_notes.value); +} } // namespace Slic3r #include diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 67cdfef9996..000559b765f 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -1031,6 +1031,12 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloats, filament_flow_ratio)) ((ConfigOptionBools, enable_pressure_advance)) ((ConfigOptionFloats, pressure_advance)) + // Orca: adaptive pressure advance and calibration model + ((ConfigOptionBools, adaptive_pressure_advance)) + ((ConfigOptionBools, adaptive_pressure_advance_overhangs)) + ((ConfigOptionStrings, adaptive_pressure_advance_model)) + ((ConfigOptionFloats, adaptive_pressure_advance_bridges)) + // ((ConfigOptionFloat, fan_kickstart)) ((ConfigOptionBool, fan_speedup_overhangs)) ((ConfigOptionFloat, fan_speedup_time)) @@ -1130,6 +1136,8 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionBools, filament_multitool_ramming)) ((ConfigOptionFloats, filament_multitool_ramming_volume)) ((ConfigOptionFloats, filament_multitool_ramming_flow)) + ((ConfigOptionFloats, filament_stamping_loading_speed)) + ((ConfigOptionFloats, filament_stamping_distance)) ((ConfigOptionBool, purge_in_prime_tower)) ((ConfigOptionBool, enable_filament_ramming)) ((ConfigOptionBool, support_multi_bed_types)) @@ -1223,6 +1231,8 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE( ((ConfigOptionBool, spiral_mode_smooth)) ((ConfigOptionFloatOrPercent, spiral_mode_max_xy_smoothing)) ((ConfigOptionInt, standby_temperature_delta)) + ((ConfigOptionFloat, preheat_time)) + ((ConfigOptionInt, preheat_steps)) ((ConfigOptionInts, nozzle_temperature)) ((ConfigOptionBools, wipe)) // BBS @@ -1238,15 +1248,18 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE( ((ConfigOptionFloat, wipe_tower_rotation_angle)) ((ConfigOptionFloat, prime_tower_brim_width)) ((ConfigOptionFloat, wipe_tower_bridging)) + ((ConfigOptionPercent, wipe_tower_extra_flow)) ((ConfigOptionFloats, flush_volumes_matrix)) ((ConfigOptionFloats, flush_volumes_vector)) // Orca: mmu support ((ConfigOptionFloat, wipe_tower_cone_angle)) ((ConfigOptionPercent, wipe_tower_extra_spacing)) - ((ConfigOptionFloat, wipe_tower_max_purge_speed)) - ((ConfigOptionInt, wipe_tower_extruder)) + ((ConfigOptionFloat, wipe_tower_max_purge_speed)) + ((ConfigOptionInt, wipe_tower_filament)) ((ConfigOptionFloats, wiping_volumes_extruders)) + ((ConfigOptionInts, idle_temperature)) + // BBS: wipe tower is only used for priming ((ConfigOptionFloat, prime_volume)) @@ -1646,6 +1659,9 @@ class DynamicPrintAndCLIConfig : public DynamicPrintConfig static PrintAndCLIConfigDef s_def; }; +bool is_XL_printer(const DynamicPrintConfig &cfg); +bool is_XL_printer(const PrintConfig &cfg); + Points get_bed_shape(const DynamicPrintConfig &cfg); Points get_bed_shape(const PrintConfig &cfg); Points get_bed_shape(const SLAPrinterConfig &cfg); diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 907cc9c2484..72efdb02a8e 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -677,7 +677,6 @@ void PrintObject::estimate_curled_extrusions() [](const PrintRegion *region) { return region->config().enable_overhang_speed.getBool(); })) { // Estimate curling of support material and add it to the malformaition lines of each layer - float support_flow_width = support_material_flow(this, this->config().layer_height).width(); SupportSpotsGenerator::Params params{this->print()->m_config.filament_type.values, float(this->print()->default_object_config().inner_wall_acceleration.getFloat()), this->config().raft_layers.getInt(), this->config().brim_type.value, @@ -2888,7 +2887,7 @@ static void apply_to_print_region_config(PrintRegionConfig &out, const DynamicPr // 1) Copy the "extruder key to sparse_infill_filament and wall_filament. auto *opt_extruder = in.opt(key_extruder); if (opt_extruder) - if (int extruder = opt_extruder->value; extruder != 0) { + if (int extruder = opt_extruder->value; extruder != 1) { // Not a default extruder. out.sparse_infill_filament .value = extruder; out.solid_infill_filament.value = extruder; @@ -2949,16 +2948,16 @@ struct POProfiler void PrintObject::generate_support_preview() { - POProfiler profiler; + // POProfiler profiler; - boost::posix_time::ptime ts1 = boost::posix_time::microsec_clock::local_time(); + // boost::posix_time::ptime ts1 = boost::posix_time::microsec_clock::local_time(); this->slice(); - boost::posix_time::ptime ts2 = boost::posix_time::microsec_clock::local_time(); - profiler.duration1 = (ts2 - ts1).total_milliseconds(); + // boost::posix_time::ptime ts2 = boost::posix_time::microsec_clock::local_time(); + // profiler.duration1 = (ts2 - ts1).total_milliseconds(); this->generate_support_material(); - boost::posix_time::ptime ts3 = boost::posix_time::microsec_clock::local_time(); - profiler.duration2 = (ts3 - ts2).total_milliseconds(); + // boost::posix_time::ptime ts3 = boost::posix_time::microsec_clock::local_time(); + // profiler.duration2 = (ts3 - ts2).total_milliseconds(); } void PrintObject::update_slicing_parameters() @@ -3668,7 +3667,6 @@ template void PrintObject::remove_bridges_from_contacts( SupportNecessaryType PrintObject::is_support_necessary() { - 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.; diff --git a/src/libslic3r/PrintObjectSlice.cpp b/src/libslic3r/PrintObjectSlice.cpp index 98f7d8b20e2..fd467e076f5 100644 --- a/src/libslic3r/PrintObjectSlice.cpp +++ b/src/libslic3r/PrintObjectSlice.cpp @@ -151,8 +151,8 @@ static std::vector slice_volumes_inner( params_base.mode_below = params_base.mode; // BBS - const size_t num_extruders = print_config.filament_diameter.size(); - const bool is_mm_painted = num_extruders > 1 && std::any_of(model_volumes.cbegin(), model_volumes.cend(), [](const ModelVolume *mv) { return mv->is_mm_painted(); }); + // const size_t num_extruders = print_config.filament_diameter.size(); + // const bool is_mm_painted = num_extruders > 1 && std::any_of(model_volumes.cbegin(), model_volumes.cend(), [](const ModelVolume *mv) { return mv->is_mm_painted(); }); // BBS: don't do size compensation when slice volume. // Will handle contour and hole size compensation seperately later. //const auto extra_offset = is_mm_painted ? 0.f : std::max(0.f, float(print_object_config.xy_contour_compensation.value)); @@ -336,7 +336,8 @@ static std::vector> slices_to_regions( }; // BBS - auto trim_overlap = [](ExPolygons& expolys_a, ExPolygons& expolys_b) { + // Orca: unused +/* auto trim_overlap = [](ExPolygons& expolys_a, ExPolygons& expolys_b) { ExPolygons trimming_a; ExPolygons trimming_b; @@ -361,7 +362,7 @@ static std::vector> slices_to_regions( expolys_a = diff_ex(expolys_a, trimming_a); expolys_b = diff_ex(expolys_b, trimming_b); - }; + }; */ std::vector temp_slices; for (size_t zs_complex_idx = range.begin(); zs_complex_idx < range.end(); ++ zs_complex_idx) { diff --git a/src/libslic3r/Shape/TextShape.cpp b/src/libslic3r/Shape/TextShape.cpp index dce731af191..58df800a51a 100644 --- a/src/libslic3r/Shape/TextShape.cpp +++ b/src/libslic3r/Shape/TextShape.cpp @@ -99,8 +99,6 @@ std::vector init_occt_fonts() 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"; Standard_CString aText = text; Font_BRepFont aFont; diff --git a/src/libslic3r/ShortEdgeCollapse.cpp b/src/libslic3r/ShortEdgeCollapse.cpp index 3397daf55cb..f19ff9f22e1 100644 --- a/src/libslic3r/ShortEdgeCollapse.cpp +++ b/src/libslic3r/ShortEdgeCollapse.cpp @@ -2,7 +2,6 @@ #include "libslic3r/NormalUtils.hpp" #include -#include #include #include diff --git a/src/libslic3r/SlicesToTriangleMesh.cpp b/src/libslic3r/SlicesToTriangleMesh.cpp index 3b55cf066b3..5740665ae27 100644 --- a/src/libslic3r/SlicesToTriangleMesh.cpp +++ b/src/libslic3r/SlicesToTriangleMesh.cpp @@ -1,8 +1,5 @@ -#include - #include "SlicesToTriangleMesh.hpp" -//#include "libslic3r/MTUtils.hpp" #include "libslic3r/Execution/ExecutionTBB.hpp" #include "libslic3r/ClipperUtils.hpp" #include "libslic3r/Tesselate.hpp" diff --git a/src/libslic3r/Support/OrganicSupport.cpp b/src/libslic3r/Support/OrganicSupport.cpp index 05e515d94ec..5543f76fd58 100644 --- a/src/libslic3r/Support/OrganicSupport.cpp +++ b/src/libslic3r/Support/OrganicSupport.cpp @@ -1,12 +1,6 @@ #include "OrganicSupport.hpp" #include "SupportCommon.hpp" - -#include "../AABBTreeLines.hpp" -#include "../ClipperUtils.hpp" -#include "../Polygon.hpp" -#include "../Polyline.hpp" #include "../MutablePolygon.hpp" -#include "../TriangleMeshSlicer.hpp" #include diff --git a/src/libslic3r/Support/SupportParameters.cpp b/src/libslic3r/Support/SupportParameters.cpp index 8508206cb9f..4af36e05aea 100644 --- a/src/libslic3r/Support/SupportParameters.cpp +++ b/src/libslic3r/Support/SupportParameters.cpp @@ -1,6 +1,4 @@ #include "../Print.hpp" -#include "../PrintConfig.hpp" -#include "../Slicing.hpp" #include "SupportParameters.hpp" namespace Slic3r::FFFSupport { diff --git a/src/libslic3r/SupportMaterial.cpp b/src/libslic3r/SupportMaterial.cpp index b022607bf75..e1c6c97cc1f 100644 --- a/src/libslic3r/SupportMaterial.cpp +++ b/src/libslic3r/SupportMaterial.cpp @@ -338,7 +338,7 @@ static std::string get_svg_filename(std::string layer_nr_or_z, std::string tag rand_init = true; } - int rand_num = rand() % 1000000; + // int rand_num = rand() % 1000000; //makedir("./SVG"); std::string prefix = "./SVG/"; std::string suffix = ".svg"; @@ -1554,7 +1554,6 @@ static inline ExPolygons detect_overhangs( 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); @@ -1577,7 +1576,6 @@ static inline ExPolygons 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(); // 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. @@ -1689,7 +1687,6 @@ static inline ExPolygons detect_overhangs( // 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; @@ -1734,7 +1731,6 @@ static inline std::tuple detect_contacts( Polygons enforcer_polygons; // BBS. - const bool auto_normal_support = object_config.support_type.value == stNormalAuto; const bool buildplate_only = !annotations.buildplate_covered.empty(); float no_interface_offset = 0.f; @@ -1748,8 +1744,6 @@ static inline std::tuple detect_contacts( // 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; - const ExPolygons& lower_layer_sharptails = lower_layer.sharp_tails; // Cache support trimming polygons derived from lower layer polygons, possible merged with "on build plate only" trimming polygons. auto slices_margin_update = @@ -2187,7 +2181,6 @@ struct OverhangCluster { 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_i = &clusters[i]; if (cluster_i->intersects(*overhang, layer_nr)) { @@ -3546,13 +3539,13 @@ std::pair 1. // Contact layer needs a base_interface layer, therefore run the following block if support_interface_top_layers > 0, has soluble support and extruders are different. - bool soluble_interface_non_soluble_base = - // Zero z-gap between the overhangs and the support interface. - m_slicing_params.soluble_interface && - // Interface extruder soluble. - m_object_config->support_interface_filament.value > 0 && m_print_config->filament_soluble.get_at(m_object_config->support_interface_filament.value - 1) && - // Base extruder: Either "print with active extruder" not soluble. - (m_object_config->support_filament.value == 0 || ! m_print_config->filament_soluble.get_at(m_object_config->support_filament.value - 1)); +// bool soluble_interface_non_soluble_base = +// // Zero z-gap between the overhangs and the support interface. +// m_slicing_params.soluble_interface && +// // Interface extruder soluble. +// m_object_config->support_interface_filament.value > 0 && m_print_config->filament_soluble.get_at(m_object_config->support_interface_filament.value - 1) && +// // Base extruder: Either "print with active extruder" not soluble. +// (m_object_config->support_filament.value == 0 || ! m_print_config->filament_soluble.get_at(m_object_config->support_filament.value - 1)); bool snug_supports = m_object_config->support_style.value == smsSnug; // BBS: if support interface and support base do not use the same filament, add a base layer to improve their adhesion bool differnt_support_interface_filament = m_object_config->support_interface_filament.value != m_object_config->support_filament.value; @@ -4628,7 +4621,6 @@ void PrintObjectSupportMaterial::generate_toolpaths( if (object_layer != nullptr) { float biggest_bridge_area = 0.f; - const Polygons& top_contact_polys = top_contact_layer.polygons_to_extrude(); for (auto layerm : object_layer->regions()) { for (auto bridge_surface : layerm->fill_surfaces.filter_by_type(stBottomBridge)) { float bs_area = bridge_surface->area(); diff --git a/src/libslic3r/TreeSupport.cpp b/src/libslic3r/TreeSupport.cpp index 71080cf20ea..364e1f37ebb 100644 --- a/src/libslic3r/TreeSupport.cpp +++ b/src/libslic3r/TreeSupport.cpp @@ -5,7 +5,6 @@ #include "Print.hpp" #include "Layer.hpp" #include "Fill/FillBase.hpp" -#include "Fill/FillConcentric.hpp" #include "CurveAnalyzer.hpp" #include "SVG.hpp" #include "ShortestPath.hpp" @@ -13,7 +12,6 @@ #include #include -#include #include #define _L(s) Slic3r::I18N::translate(s) @@ -469,7 +467,6 @@ static bool move_inside_expolys(const ExPolygons& polygons, Point& from, double Point ret = from; std::vector valid_pts; double bestDist2 = std::numeric_limits::max(); - unsigned int bestPoly = NO_INDEX; bool is_already_on_correct_side_of_boundary = false; // whether [from] is already on the right side of the boundary Point inward_dir; for (unsigned int poly_idx = 0; poly_idx < polygons.size(); poly_idx++) @@ -510,7 +507,6 @@ static bool move_inside_expolys(const ExPolygons& polygons, Point& from, double if (dist2 < bestDist2) { bestDist2 = dist2; - bestPoly = poly_idx; if (distance == 0) { ret = x; } else { @@ -547,7 +543,6 @@ static bool move_inside_expolys(const ExPolygons& polygons, Point& from, double if (dist2 < bestDist2) { bestDist2 = dist2; - bestPoly = poly_idx; if (distance == 0) { ret = x; } else { @@ -632,7 +627,6 @@ static bool is_inside_ex(const ExPolygons &polygons, const Point &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(polys_dilated, from);// find_closest_ex(from, polys_dilated); Point outward_dir = pt - from; @@ -734,16 +728,12 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) const coordf_t extrusion_width = config.get_abs_value("line_width", nozzle_diameter); const coordf_t extrusion_width_scaled = scale_(extrusion_width); const coordf_t max_bridge_length = scale_(config.max_bridge_length.value); - const bool bridge_no_support = max_bridge_length > 0; const bool support_critical_regions_only = config.support_critical_regions_only.value; const bool config_remove_small_overhangs = config.support_remove_small_overhang.value; const int enforce_support_layers = config.enforce_support_layers.value; const double area_thresh_well_supported = SQ(scale_(6)); const double length_thresh_well_supported = scale_(6); static const double sharp_tail_max_support_height = 16.f; - // 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(); // +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 @@ -883,7 +873,7 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) // 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)); + ExPolygons overhang_areas = 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(); }), @@ -1406,7 +1396,6 @@ void TreeSupport::generate_toolpaths() const PrintObjectConfig &object_config = m_object->config(); coordf_t support_extrusion_width = m_support_params.support_extrusion_width; coordf_t nozzle_diameter = print_config.nozzle_diameter.get_at(object_config.support_filament - 1); - coordf_t layer_height = object_config.layer_height.value; const size_t wall_count = object_config.tree_support_wall_count.value; // Check if set to zero, use default if so. @@ -1420,8 +1409,6 @@ void TreeSupport::generate_toolpaths() coordf_t interface_density = std::min(1., m_support_material_interface_flow.spacing() / interface_spacing); coordf_t bottom_interface_density = std::min(1., m_support_material_interface_flow.spacing() / bottom_interface_spacing); - const coordf_t branch_radius = object_config.tree_support_branch_diameter.value / 2; - const coordf_t branch_radius_scaled = scale_(branch_radius); if (m_object->support_layers().empty()) return; @@ -2126,7 +2113,6 @@ void TreeSupport::draw_circles(const std::vector>& contact_no const bool with_lightning_infill = m_support_params.base_fill_pattern == ipLightning; coordf_t support_extrusion_width = m_support_params.support_extrusion_width; - const size_t wall_count = config.tree_support_wall_count.value; const PrintObjectConfig& object_config = m_object->config(); BOOST_LOG_TRIVIAL(info) << "draw_circles for object: " << m_object->model_object()->name; @@ -2317,7 +2303,7 @@ void TreeSupport::draw_circles(const std::vector>& contact_no for (size_t i = 0; i <= bottom_gap_layers; i++) { const Layer* below_layer = m_object->get_layer(layer_nr - bottom_interface_layers - i); - ExPolygons bottom_interface = std::move(intersection_ex(base_areas, below_layer->lslices)); + ExPolygons bottom_interface = intersection_ex(base_areas, below_layer->lslices); floor_areas.insert(floor_areas.end(), bottom_interface.begin(), bottom_interface.end()); } } @@ -2329,7 +2315,7 @@ void TreeSupport::draw_circles(const std::vector>& contact_no } if (bottom_gap_layers > 0 && layer_nr > bottom_gap_layers) { const Layer* below_layer = m_object->get_layer(layer_nr - bottom_gap_layers); - ExPolygons bottom_gap_area = std::move(intersection_ex(floor_areas, below_layer->lslices)); + ExPolygons bottom_gap_area = intersection_ex(floor_areas, below_layer->lslices); if (!bottom_gap_area.empty()) { floor_areas = std::move(diff_ex(floor_areas, bottom_gap_area)); } @@ -2377,7 +2363,7 @@ void TreeSupport::draw_circles(const std::vector>& contact_no ExPolygons& base_areas = ts_layer->base_areas; int layer_nr_lower = layer_nr - 1; - for (layer_nr_lower; layer_nr_lower >= 0; layer_nr_lower--) { + for (;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; @@ -2467,7 +2453,7 @@ void TreeSupport::draw_circles(const std::vector>& contact_no if (ts_layer->area_groups.empty()) continue; int layer_nr_lower = layer_nr - 1; - for (layer_nr_lower; layer_nr_lower >= 0; layer_nr_lower--) { + for (;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; @@ -2582,15 +2568,10 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) const coordf_t radius_sample_resolution = m_ts_data->m_radius_sample_resolution; const bool support_on_buildplate_only = config.support_on_build_plate_only.value; const size_t bottom_interface_layers = config.support_interface_bottom_layers.value; - const size_t top_interface_layers = config.support_interface_top_layers.value; float DO_NOT_MOVER_UNDER_MM = is_slim ? 0 : 5; // do not move contact points under 5mm const auto nozzle_diameter = m_object->print()->config().nozzle_diameter.get_at(m_object->config().support_interface_filament-1); const auto support_line_width = config.support_line_width.get_abs_value(nozzle_diameter); - auto get_branch_angle = [this,&config](coordf_t radius) { - if (config.tree_support_branch_angle.value < 30.0) return config.tree_support_branch_angle.value; - return (radius - MIN_BRANCH_RADIUS) / (MAX_BRANCH_RADIUS - MIN_BRANCH_RADIUS) * (config.tree_support_branch_angle.value - 30.0) + 30.0; - }; auto get_max_move_dist = [this, &config, branch_radius, tip_layers, diameter_angle_scale_factor, wall_count, support_extrusion_width, support_line_width](const Node *node, int power = 1) { double move_dist = node->max_move_dist; if (node->max_move_dist == 0) { @@ -2678,7 +2659,7 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) m_object->print()->set_status(60, (boost::format(_L("Support: propagate branches at layer %d")) % layer_nr).str()); - Polygons layer_contours = std::move(m_ts_data->get_contours_with_holes(layer_nr)); + Polygons layer_contours = m_ts_data->get_contours_with_holes(layer_nr); //std::unordered_map& mst_line_x_layer_contour_cache = m_mst_line_x_layer_contour_caches[layer_nr]; std::unordered_map mst_line_x_layer_contour_cache; auto is_line_cut_by_contour = [&mst_line_x_layer_contour_cache,&layer_contours](Point a, Point b) @@ -3202,7 +3183,6 @@ void TreeSupport::adjust_layer_heights(std::vector>& contact_ const coordf_t layer_height = config.layer_height.value; const coordf_t max_layer_height = m_slicing_params.max_layer_height; const size_t bot_intf_layers = config.support_interface_bottom_layers.value; - const size_t top_intf_layers = config.support_interface_top_layers.value; // if already using max layer height, no need to adjust if (layer_height == max_layer_height) return; @@ -3324,7 +3304,6 @@ std::vector TreeSupport::plan_layer_heights(std::vectorsecond; } @@ -3698,7 +3677,7 @@ const ExPolygons& TreeSupportData::calculate_avoidance(const RadiusLayerPair& ke } layer_nr_next = layer_heights[layer_nr].next_layer_nr; - ExPolygons avoidance_areas = std::move(offset_ex(get_avoidance(radius, layer_nr_next, key.recursions+1), scale_(-m_max_move))); + ExPolygons avoidance_areas = 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)); @@ -3706,7 +3685,7 @@ const ExPolygons& TreeSupportData::calculate_avoidance(const RadiusLayerPair& ke //assert(ret.second); return ret.first->second; } else { - ExPolygons avoidance_areas = std::move(offset_ex(m_layer_outlines_below[layer_nr], scale_(m_xy_distance + radius))); + ExPolygons avoidance_areas = offset_ex(m_layer_outlines_below[layer_nr], scale_(m_xy_distance + radius)); auto ret = m_avoidance_cache.insert({ key, std::move(avoidance_areas) }); assert(ret.second); return ret.first->second; diff --git a/src/libslic3r/TriangleMeshSlicer.cpp b/src/libslic3r/TriangleMeshSlicer.cpp index 4e102887e32..b59e61032fc 100644 --- a/src/libslic3r/TriangleMeshSlicer.cpp +++ b/src/libslic3r/TriangleMeshSlicer.cpp @@ -173,7 +173,7 @@ static FacetSliceType slice_facet( // (external on the right of the line) for (int j = 0; j < 3; ++ j) { // loop through facet edges int edge_id; - const stl_vertex *a, *b, *c; + const stl_vertex *a, *b/* , *c */; int a_id, b_id; { int k = (idx_vertex_lowest + j) % 3; @@ -183,7 +183,7 @@ static FacetSliceType slice_facet( a = vertices + k; b_id = indices[l]; b = vertices + l; - c = vertices + (k + 2) % 3; + // c = vertices + (k + 2) % 3; } // Is edge or face aligned with the cutting plane? diff --git a/src/libslic3r/TriangleSetSampling.cpp b/src/libslic3r/TriangleSetSampling.cpp index bb03ff6d750..5333aaf7f10 100644 --- a/src/libslic3r/TriangleSetSampling.cpp +++ b/src/libslic3r/TriangleSetSampling.cpp @@ -2,7 +2,6 @@ #include #include #include -#include namespace Slic3r { diff --git a/src/libslic3r/TriangulateWall.cpp b/src/libslic3r/TriangulateWall.cpp index b8746ef0d29..133ca8236cd 100644 --- a/src/libslic3r/TriangulateWall.cpp +++ b/src/libslic3r/TriangulateWall.cpp @@ -1,5 +1,5 @@ -#include "TriangulateWall.hpp" -#include "MTUtils.hpp" +//#include "TriangulateWall.hpp" +//#include "MTUtils.hpp" namespace Slic3r { diff --git a/src/libslic3r/Triangulation.cpp b/src/libslic3r/Triangulation.cpp index f290442bf11..782553e2a7e 100644 --- a/src/libslic3r/Triangulation.cpp +++ b/src/libslic3r/Triangulation.cpp @@ -1,6 +1,10 @@ #include "Triangulation.hpp" #include "IntersectionPoints.hpp" + +#ifndef _WIN32 +// On linux and macOS, this include is required #include +#endif // _WIN32 #include #include #include diff --git a/src/libslic3r/calib.cpp b/src/libslic3r/calib.cpp index f3890dd6dca..141a2203ccf 100644 --- a/src/libslic3r/calib.cpp +++ b/src/libslic3r/calib.cpp @@ -465,8 +465,9 @@ std::string CalibPressureAdvanceLine::print_pa_lines(double start_x, double star const double e_per_mm = CalibPressureAdvance::e_per_mm(m_line_width, m_height_layer, m_nozzle_diameter, filament_diameter, print_flow_ratio); - const double thin_e_per_mm = CalibPressureAdvance::e_per_mm(m_thin_line_width, m_height_layer, m_nozzle_diameter, filament_diameter, - print_flow_ratio); + // Orca: Unused due to skip drawing indicator lines + // const double thin_e_per_mm = CalibPressureAdvance::e_per_mm(m_thin_line_width, m_height_layer, m_nozzle_diameter, filament_diameter, + // print_flow_ratio); const double number_e_per_mm = CalibPressureAdvance::e_per_mm(m_number_line_width, m_height_layer, m_nozzle_diameter, filament_diameter, print_flow_ratio); diff --git a/src/libslic3r/libslic3r.h b/src/libslic3r/libslic3r.h index 3e71ada5ab0..798ea77d760 100644 --- a/src/libslic3r/libslic3r.h +++ b/src/libslic3r/libslic3r.h @@ -61,6 +61,9 @@ static constexpr double SCALING_FACTOR_INTERNAL = 0.000001; static constexpr double SCALING_FACTOR_INTERNAL_LARGE_PRINTER = 0.00001; static constexpr double LARGE_BED_THRESHOLD = 2147; +// Orca: maximum number of extruders is 64. For SEMM printers, it defines maximum filament number. +static constexpr size_t MAXIMUM_EXTRUDER_NUMBER = 64; + extern double SCALING_FACTOR; // for creating circles (for brim_ear) #define POLY_SIDES 24 diff --git a/src/libslic3r/utils.cpp b/src/libslic3r/utils.cpp index 733ac626f41..362cc521b68 100644 --- a/src/libslic3r/utils.cpp +++ b/src/libslic3r/utils.cpp @@ -3,19 +3,12 @@ #include #include -#include #include #include #include "format.hpp" -#include "Platform.hpp" -#include "Time.hpp" #include "libslic3r.h" -#ifdef __APPLE__ -#include "MacUtils.hpp" -#endif - #ifdef WIN32 #include #include @@ -32,6 +25,7 @@ #ifdef __APPLE__ #include #include + #include "MacUtils.hpp" #endif #ifdef __linux__ #include @@ -39,6 +33,7 @@ #include #include #include + #include "Platform.hpp" #endif #endif @@ -59,7 +54,6 @@ #include #include #include -#include // We are using quite an old TBB 2017 U7, which does not support global control API officially. // Before we update our build servers, let's use the old API, which is deprecated in up to date TBB. @@ -1489,8 +1483,6 @@ bool bbl_calc_md5(std::string &filename, std::string &md5_out) MD5_Init(&ctx); boost::nowide::ifstream ifs(filename, std::ios::binary); std::string buf(64 * 1024, 0); - const std::size_t & size = boost::filesystem::file_size(filename); - std::size_t left_size = size; while (ifs) { ifs.read(buf.data(), buf.size()); int read_bytes = ifs.gcount(); diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp index 86ab5d2239e..e58b5c7eff2 100644 --- a/src/slic3r/GUI/3DScene.cpp +++ b/src/slic3r/GUI/3DScene.cpp @@ -241,7 +241,7 @@ float GLVolume::last_explosion_ratio = 1.0; void GLVolume::set_render_color() { - bool outside = is_outside || is_below_printbed(); + // bool outside = is_outside || is_below_printbed(); if (force_native_color || force_neutral_color) { #ifdef ENABBLE_OUTSIDE_COLOR @@ -859,7 +859,6 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab return; GLShaderProgram* sink_shader = GUI::wxGetApp().get_shader("flat"); - GLShaderProgram* edges_shader = GUI::wxGetApp().get_shader("flat"); if (type == ERenderType::Transparent) { glsafe(::glEnable(GL_BLEND)); @@ -1023,7 +1022,6 @@ bool GLVolumeCollection::check_outside_state(const BuildVolume &build_volume, Mo GUI::PartPlate* curr_plate = GUI::wxGetApp().plater()->get_partplate_list().get_selected_plate(); const Pointfs& pp_bed_shape = curr_plate->get_shape(); BuildVolume plate_build_volume(pp_bed_shape, build_volume.printable_height()); - const std::vector& exclude_areas = curr_plate->get_exclude_areas(); for (GLVolume* volume : this->volumes) { diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index f44dc199178..b4c5e956469 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -331,7 +331,6 @@ void AMSMaterialsSetting::create_panel_kn(wxWindow* parent) kn_val_sizer->Add(m_input_k_val, 0, wxALL | wxEXPAND | wxALIGN_CENTER_VERTICAL, FromDIP(0)); // n params input - wxBoxSizer* n_sizer = new wxBoxSizer(wxHORIZONTAL); m_n_param = new wxStaticText(parent, wxID_ANY, _L("Factor N"), wxDefaultPosition, wxDefaultSize, 0); m_n_param->SetFont(::Label::Body_13); m_n_param->SetForegroundColour(wxColour(50, 58, 61)); @@ -357,7 +356,7 @@ void AMSMaterialsSetting::paintEvent(wxPaintEvent &evt) { auto size = GetSize(); wxPaintDC dc(this); - dc.SetPen(wxPen(StateColor::darkModeColorFor(wxColour("#000000")), 1, wxSOLID)); + dc.SetPen(wxPen(StateColor::darkModeColorFor(wxColour("#000000")), 1, wxPENSTYLE_SOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); dc.DrawRectangle(0, 0, size.x, size.y); } diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp index f4e69dd5877..52d04bed548 100644 --- a/src/slic3r/GUI/AboutDialog.cpp +++ b/src/slic3r/GUI/AboutDialog.cpp @@ -339,7 +339,7 @@ AboutDialog::AboutDialog() (boost::format( "" "" - "

https://github.com/SoftFever/Orcaslicer

" + "

https://github.com/SoftFever/Orcaslicer

" "" "") ).str()); diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index 492926b9526..41abe5a4717 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -366,7 +366,6 @@ void MaterialItem::doRender(wxDC &dc) wxString out_txt = m_msg; wxString count_txt = ""; - int new_line_pos = 0; for (int i = 0; i < m_msg.length(); i++) { auto text_size = m_warning_text->GetTextExtent(count_txt); @@ -402,7 +401,6 @@ void AmsMapingPopup::on_left_down(wxMouseEvent &evt) auto pos = ClientToScreen(evt.GetPosition()); for (MappingItem *item : m_mapping_item_list) { auto p_rect = item->ClientToScreen(wxPoint(0, 0)); - auto left = item->GetSize(); if (pos.x > p_rect.x && pos.y > p_rect.y && pos.x < (p_rect.x + item->GetSize().x) && pos.y < (p_rect.y + item->GetSize().y)) { if (item->m_tray_data.type == TrayType::NORMAL && !is_match_material(item->m_tray_data.filament_type)) return; @@ -1524,9 +1522,6 @@ void AmsRMGroup::on_mouse_move(wxMouseEvent& evt) std::string tray_name = iter->first; wxColour tray_color = iter->second; - int x = size.x / 2; - int y = size.y / 2; - int radius = size.x / 2; endAngle += ev_angle; if (click_angle >= startAngle && click_angle < endAngle) { diff --git a/src/slic3r/GUI/Auxiliary.cpp b/src/slic3r/GUI/Auxiliary.cpp index c28457ea030..5bc3280e758 100644 --- a/src/slic3r/GUI/Auxiliary.cpp +++ b/src/slic3r/GUI/Auxiliary.cpp @@ -843,6 +843,7 @@ void AuxiliaryPanel::init_tabpanel() auto back_btn = new Button(this, _L("return"), "assemble_return", wxBORDER_NONE | wxBU_LEFT | wxBU_EXACTFIT); back_btn->SetSize(wxSize(FromDIP(220), FromDIP(18))); back_btn->SetBackgroundColor(btn_bg_green); + back_btn->SetTextColor(StateColor (std::pair(wxColour("#FDFFFD"), StateColor::Normal))); // ORCA fixes color change on text. icon stays white color but text changes to black without this back_btn->SetCornerRadius(0); back_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](wxEvent& e) { auto event = wxCommandEvent(EVT_AUXILIARY_DONE); @@ -988,7 +989,7 @@ void AuxiliaryPanel::create_folder(wxString name) fs::path bfs_path((m_root_dir + "/" + folder_name).ToStdWstring()); if (fs::exists(bfs_path)) { try { - bool is_done = fs::remove_all(bfs_path); + fs::remove_all(bfs_path); } catch (...) { BOOST_LOG_TRIVIAL(error) << "Failed removing the auxiliary directory " << m_root_dir.c_str(); } diff --git a/src/slic3r/GUI/Auxiliary.hpp b/src/slic3r/GUI/Auxiliary.hpp index b1378d08785..878f032b9a7 100644 --- a/src/slic3r/GUI/Auxiliary.hpp +++ b/src/slic3r/GUI/Auxiliary.hpp @@ -52,7 +52,7 @@ #define AUFILE_GREY300 wxColour(238, 238, 238) #define AUFILE_GREY200 wxColour(248, 248, 248) #define AUFILE_BRAND wxColour(0, 150, 136) -#define AUFILE_BRAND_TRANSPARENT wxColour(215, 232, 222) +#define AUFILE_BRAND_TRANSPARENT wxColour("#E5F0EE") // ORCA color with %10 opacity //#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)) diff --git a/src/slic3r/GUI/AuxiliaryDataViewModel.cpp b/src/slic3r/GUI/AuxiliaryDataViewModel.cpp index 50368b85443..cad5cf5455d 100644 --- a/src/slic3r/GUI/AuxiliaryDataViewModel.cpp +++ b/src/slic3r/GUI/AuxiliaryDataViewModel.cpp @@ -337,7 +337,7 @@ wxDataViewItemArray AuxiliaryModel::ImportFile(AuxiliaryModelNode* sel, wxArrayS dir_path += "\\" + src_bfs_path.filename().generic_wstring(); boost::system::error_code ec; - if (!fs::copy_file(src_bfs_path, fs::path(dir_path.ToStdWstring()), fs::copy_option::overwrite_if_exists, ec)) + if (!fs::copy_file(src_bfs_path, fs::path(dir_path.ToStdWstring()), fs::copy_options::overwrite_existing, ec)) continue; // Update model data diff --git a/src/slic3r/GUI/BBLStatusBar.cpp b/src/slic3r/GUI/BBLStatusBar.cpp index 7c3d640d6e4..b0d3513f59b 100644 --- a/src/slic3r/GUI/BBLStatusBar.cpp +++ b/src/slic3r/GUI/BBLStatusBar.cpp @@ -3,8 +3,6 @@ #include #include #include -#include -#include #include "GUI_App.hpp" diff --git a/src/slic3r/GUI/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index 0bf251d7292..30d4878ddfb 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -230,7 +230,7 @@ void BBLTopbar::Init(wxFrame* parent) this->AddSpacer(FromDIP(10)); wxBitmap save_bitmap = create_scaled_bitmap("topbar_save", nullptr, TOPBAR_ICON_SIZE); - wxAuiToolBarItem* save_btn = this->AddTool(wxID_SAVE, "", save_bitmap); + this->AddTool(wxID_SAVE, "", save_bitmap); this->AddSpacer(FromDIP(10)); @@ -278,7 +278,7 @@ void BBLTopbar::Init(wxFrame* parent) this->AddSpacer(FromDIP(4)); wxBitmap iconize_bitmap = create_scaled_bitmap("topbar_min", nullptr, TOPBAR_ICON_SIZE); - wxAuiToolBarItem* iconize_btn = this->AddTool(wxID_ICONIZE_FRAME, "", iconize_bitmap); + this->AddTool(wxID_ICONIZE_FRAME, "", iconize_bitmap); this->AddSpacer(FromDIP(4)); @@ -294,7 +294,7 @@ void BBLTopbar::Init(wxFrame* parent) this->AddSpacer(FromDIP(4)); wxBitmap close_bitmap = create_scaled_bitmap("topbar_close", nullptr, TOPBAR_ICON_SIZE); - wxAuiToolBarItem* close_btn = this->AddTool(wxID_CLOSE_FRAME, "", close_bitmap); + this->AddTool(wxID_CLOSE_FRAME, "", close_bitmap); Realize(); // m_toolbar_h = this->GetSize().GetHeight(); @@ -466,7 +466,6 @@ void BBLTopbar::UpdateToolbarWidth(int width) } void BBLTopbar::Rescale() { - int em = em_unit(this); wxAuiToolBarItem* item; /*item = this->FindTool(ID_LOGO); @@ -496,7 +495,7 @@ void BBLTopbar::Rescale() { item->SetBitmap(create_scaled_bitmap("calib_sf", nullptr, TOPBAR_ICON_SIZE)); item->SetDisabledBitmap(create_scaled_bitmap("calib_sf_inactive", nullptr, TOPBAR_ICON_SIZE)); - item = this->FindTool(ID_TITLE); + // item = this->FindTool(ID_TITLE); /*item = this->FindTool(ID_PUBLISH); item->SetBitmap(create_scaled_bitmap("topbar_publish", this, TOPBAR_ICON_SIZE)); @@ -548,14 +547,14 @@ void BBLTopbar::OnCloseFrame(wxAuiToolBarEvent& event) void BBLTopbar::OnMouseLeftDClock(wxMouseEvent& mouse) { - wxPoint mouse_pos = ::wxGetMousePosition(); // check whether mouse is not on any tool item if (this->FindToolByCurrentPosition() != NULL && this->FindToolByCurrentPosition() != m_title_item) { mouse.Skip(); return; } -#ifdef __W1XMSW__ +#ifdef __WXMSW__ + wxPoint mouse_pos = ::wxGetMousePosition(); ::PostMessage((HWND) m_frame->GetHandle(), WM_NCLBUTTONDBLCLK, HTCAPTION, MAKELPARAM(mouse_pos.x, mouse_pos.y)); return; #endif // __WXMSW__ @@ -637,7 +636,6 @@ void BBLTopbar::OnMouseLeftDown(wxMouseEvent& event) void BBLTopbar::OnMouseLeftUp(wxMouseEvent& event) { - wxPoint mouse_pos = ::wxGetMousePosition(); if (HasCapture()) { ReleaseMouse(); diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp index ca8c7a16630..1f6c9e4b94e 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp @@ -5,13 +5,9 @@ #include "format.hpp" #include -#include -#include // For zipped archive creation -#include #include -#include #include @@ -20,23 +16,18 @@ #include "libslic3r/SLAPrint.hpp" #include "libslic3r/Utils.hpp" #include "libslic3r/GCode/PostProcessor.hpp" -#include "libslic3r/Format/SL1.hpp" #include "libslic3r/Thread.hpp" #include "libslic3r/libslic3r.h" #include #include -#include #include #include #include -#include #include "I18N.hpp" //#include "RemovableDriveManager.hpp" -#include "slic3r/GUI/Plater.hpp" - namespace Slic3r { bool SlicingProcessCompletedEvent::critical_error() const diff --git a/src/slic3r/GUI/BindDialog.cpp b/src/slic3r/GUI/BindDialog.cpp index 134d91e7c54..28360f0d7a4 100644 --- a/src/slic3r/GUI/BindDialog.cpp +++ b/src/slic3r/GUI/BindDialog.cpp @@ -67,7 +67,6 @@ PingCodeBindDialog::PingCodeBindDialog(Plater* plater /*= nullptr*/) SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); SetBackgroundColour(*wxWHITE); - wxBoxSizer* m_sizer_main = new wxBoxSizer(wxVERTICAL); auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); diff --git a/src/slic3r/GUI/BitmapCache.cpp b/src/slic3r/GUI/BitmapCache.cpp index ae0678f6b1c..db334cd998c 100644 --- a/src/slic3r/GUI/BitmapCache.cpp +++ b/src/slic3r/GUI/BitmapCache.cpp @@ -336,7 +336,7 @@ wxBitmap* BitmapCache::load_svg(const std::string &bitmap_name, unsigned target_ replaces["\"#00FF00\""] = "\"#FF0000\""; replaces["\"#009688\""] = "\"#00675b\""; replaces["#DBDBDB"] = "#4A4A51"; // ORCA border color - replaces["#F0F0F1"] = "#404040"; // ORCA disabled background color + replaces["#F0F0F1"] = "#333337"; // ORCA disabled background color replaces["#262E30"] = "#EFEFF0"; // ORCA } else { replaces["#949494"] = "#7C8282"; // ORCA replace icon line color for light theme diff --git a/src/slic3r/GUI/CalibrationPanel.cpp b/src/slic3r/GUI/CalibrationPanel.cpp index 9a16c133222..94a3186721a 100644 --- a/src/slic3r/GUI/CalibrationPanel.cpp +++ b/src/slic3r/GUI/CalibrationPanel.cpp @@ -226,7 +226,7 @@ SelectMObjectPopup::SelectMObjectPopup(wxWindow* parent) m_refresh_timer = new wxTimer(); m_refresh_timer->SetOwner(this); Bind(EVT_UPDATE_USER_MLIST, &SelectMObjectPopup::update_machine_list, this); - Bind(wxEVT_TIMER, &SelectMObjectPopup::on_timer, this); + Bind(wxEVT_TIMER, [this](wxTimerEvent&) { on_timer(); }); Bind(EVT_DISSMISS_MACHINE_LIST, &SelectMObjectPopup::on_dissmiss_win, this); } @@ -265,7 +265,7 @@ void SelectMObjectPopup::Popup(wxWindow* WXUNUSED(focus)) } } - wxPostEvent(this, wxTimerEvent()); + on_timer(); PopupWindow::Popup(); } @@ -304,7 +304,7 @@ bool SelectMObjectPopup::Show(bool show) { return PopupWindow::Show(show); } -void SelectMObjectPopup::on_timer(wxTimerEvent& event) +void SelectMObjectPopup::on_timer() { BOOST_LOG_TRIVIAL(trace) << "SelectMObjectPopup on_timer"; wxGetApp().reset_to_active(); @@ -459,7 +459,7 @@ CalibrationPanel::CalibrationPanel(wxWindow* parent, wxWindowID id, const wxPoin Layout(); init_timer(); - Bind(wxEVT_TIMER, &CalibrationPanel::on_timer, this); + Bind(wxEVT_TIMER, [this](wxTimerEvent&) { on_timer(); }); } void CalibrationPanel::init_tabpanel() { @@ -502,10 +502,10 @@ void CalibrationPanel::init_timer() m_refresh_timer = new wxTimer(); m_refresh_timer->SetOwner(this); m_refresh_timer->Start(REFRESH_INTERVAL); - wxPostEvent(this, wxTimerEvent()); + on_timer(); } -void CalibrationPanel::on_timer(wxTimerEvent& event) { +void CalibrationPanel::on_timer() { update_all(); } @@ -644,7 +644,7 @@ bool CalibrationPanel::Show(bool show) { m_refresh_timer->Stop(); m_refresh_timer->SetOwner(this); m_refresh_timer->Start(REFRESH_INTERVAL); - wxPostEvent(this, wxTimerEvent()); + on_timer(); DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (dev) { @@ -670,9 +670,6 @@ bool CalibrationPanel::Show(bool show) { void CalibrationPanel::on_printer_clicked(wxMouseEvent& event) { - auto mouse_pos = ClientToScreen(event.GetPosition()); - wxPoint rect = m_side_tools->ClientToScreen(wxPoint(0, 0)); - if (!m_side_tools->is_in_interval()) { wxPoint pos = m_side_tools->ClientToScreen(wxPoint(0, 0)); pos.y += m_side_tools->GetRect().height; diff --git a/src/slic3r/GUI/CalibrationPanel.hpp b/src/slic3r/GUI/CalibrationPanel.hpp index a993ff28869..7b56abd8e7d 100644 --- a/src/slic3r/GUI/CalibrationPanel.hpp +++ b/src/slic3r/GUI/CalibrationPanel.hpp @@ -94,7 +94,7 @@ class SelectMObjectPopup : public PopupWindow private: void OnLeftUp(wxMouseEvent& event); - void on_timer(wxTimerEvent& event); + void on_timer(); void update_user_devices(); void on_dissmiss_win(wxCommandEvent& event); }; @@ -117,7 +117,7 @@ class CalibrationPanel : public wxPanel protected: void init_tabpanel(); void init_timer(); - void on_timer(wxTimerEvent& event); + void on_timer(); int last_status; diff --git a/src/slic3r/GUI/CalibrationWizard.cpp b/src/slic3r/GUI/CalibrationWizard.cpp index f6cbbc3065b..6280c96402f 100644 --- a/src/slic3r/GUI/CalibrationWizard.cpp +++ b/src/slic3r/GUI/CalibrationWizard.cpp @@ -1126,7 +1126,6 @@ void FlowRateWizard::on_cali_save() } std::string old_preset_name; - CalibrationPresetPage* preset_page = (static_cast(preset_step->page)); std::map selected_filaments = get_cached_selected_filament(curr_obj); if (!selected_filaments.empty()) { old_preset_name = selected_filaments.begin()->second->name; @@ -1173,7 +1172,6 @@ void FlowRateWizard::on_cali_save() return; std::string old_preset_name; - CalibrationPresetPage* preset_page = (static_cast(preset_step->page)); std::map selected_filaments = get_cached_selected_filament(curr_obj); if (!selected_filaments.empty()) { old_preset_name = selected_filaments.begin()->second->name; @@ -1443,7 +1441,6 @@ void MaxVolumetricSpeedWizard::on_cali_save() std::string old_preset_name; std::string new_preset_name; - CalibrationPresetPage *preset_page = (static_cast(preset_step->page)); std::map selected_filaments = get_cached_selected_filament(curr_obj); if (!selected_filaments.empty()) { old_preset_name = selected_filaments.begin()->second->name; diff --git a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp index 482ce61a128..f972d229885 100644 --- a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp +++ b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp @@ -790,7 +790,6 @@ wxString CalibrationPresetPage::format_text(wxString& m_msg) wxString out_txt = m_msg; wxString count_txt = ""; - int new_line_pos = 0; for (int i = 0; i < m_msg.length(); i++) { auto text_size = m_statictext_printer_msg->GetTextExtent(count_txt); diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index baa53d4564a..9893ee5efcc 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -282,7 +282,6 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con } double sparse_infill_density = config->option("sparse_infill_density")->value; - auto timelapse_type = config->opt_enum("timelapse_type"); if (!is_plate_config && config->opt_bool("spiral_mode") && @@ -298,7 +297,6 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con { DynamicPrintConfig new_conf = *config; auto answer = show_spiral_mode_settings_dialog(is_object_config); - bool support = true; if (answer == wxID_YES) { new_conf.set_key_value("wall_loops", new ConfigOptionInt(1)); new_conf.set_key_value("top_shell_layers", new ConfigOptionInt(0)); @@ -310,8 +308,6 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con new_conf.set_key_value("wall_direction", new ConfigOptionEnum(WallDirection::Auto)); new_conf.set_key_value("timelapse_type", new ConfigOptionEnum(tlTraditional)); sparse_infill_density = 0; - timelapse_type = TimelapseType::tlTraditional; - support = false; } else { new_conf.set_key_value("spiral_mode", new ConfigOptionBool(false)); @@ -665,20 +661,35 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co // for (auto el : { "extruder_clearance_radius", "extruder_clearance_height_to_rod", "extruder_clearance_height_to_lid" }) // toggle_field(el, have_sequential_printing); toggle_field("print_order", !have_sequential_printing); + + toggle_field("single_extruder_multi_material", !is_BBL_Printer); + auto bSEMM = preset_bundle->printers.get_edited_preset().config.opt_bool("single_extruder_multi_material"); + + toggle_field("ooze_prevention", !bSEMM); bool have_ooze_prevention = config->opt_bool("ooze_prevention"); - toggle_field("standby_temperature_delta", have_ooze_prevention); - + toggle_line("standby_temperature_delta", have_ooze_prevention); + toggle_line("preheat_time", have_ooze_prevention); + int preheat_steps = config->opt_int("preheat_steps"); + toggle_line("preheat_steps", have_ooze_prevention && (preheat_steps > 0)); + bool have_prime_tower = config->opt_bool("enable_prime_tower"); for (auto el : { "prime_tower_width", "prime_tower_brim_width"}) toggle_line(el, have_prime_tower); - + + for (auto el : {"wall_filament", "sparse_infill_filament", "solid_infill_filament", "wipe_tower_filament"}) + toggle_line(el, !bSEMM); + bool purge_in_primetower = preset_bundle->printers.get_edited_preset().config.opt_bool("purge_in_prime_tower"); - - for (auto el : {"wipe_tower_rotation_angle", "wipe_tower_cone_angle", "wipe_tower_extra_spacing", "wipe_tower_max_purge_speed", "wipe_tower_bridging", "wipe_tower_no_sparse_layers"}) - toggle_line(el, have_prime_tower && purge_in_primetower); - - toggle_line("prime_volume",have_prime_tower && !purge_in_primetower); + + for (auto el : {"wipe_tower_rotation_angle", "wipe_tower_cone_angle", + "wipe_tower_extra_spacing", "wipe_tower_max_purge_speed", + "wipe_tower_bridging", "wipe_tower_extra_flow", + "wipe_tower_no_sparse_layers", + "single_extruder_multi_material_priming"}) + toggle_line(el, have_prime_tower && !is_BBL_Printer); + + toggle_line("prime_volume",have_prime_tower && (!purge_in_primetower || !bSEMM)); for (auto el : {"flush_into_infill", "flush_into_support", "flush_into_objects"}) toggle_field(el, have_prime_tower); diff --git a/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp index 1768d8cd473..fd00db7f78e 100644 --- a/src/slic3r/GUI/ConfigWizard.cpp +++ b/src/slic3r/GUI/ConfigWizard.cpp @@ -2438,7 +2438,7 @@ bool ConfigWizard::priv::apply_config(AppConfig *app_config, PresetBundle *prese header = _L_PLURAL("A new vendor was installed and one of its printers will be activated", "New vendors were installed and one of theirs printers will be activated", install_bundles.size()); // Decide whether to create snapshot based on run_reason and the reset profile checkbox - bool snapshot = true; + /*bool snapshot = true; Snapshot::Reason snapshot_reason = Snapshot::SNAPSHOT_UPGRADE; switch (run_reason) { case ConfigWizard::RR_DATA_EMPTY: @@ -2456,7 +2456,7 @@ bool ConfigWizard::priv::apply_config(AppConfig *app_config, PresetBundle *prese snapshot = false; snapshot_reason = Snapshot::SNAPSHOT_USER; break; - } + }*/ //BBS: remove snapshot logic /*if (snapshot && ! take_config_snapshot_cancel_on_error(*app_config, snapshot_reason, "", _u8L("Do you want to continue changing the configuration?"))) @@ -2701,8 +2701,7 @@ ConfigWizard::ConfigWizard(wxWindow *parent) //BBS: add BBL as default const auto bbl_it = p->bundles.find("BBL"); wxCHECK_RET(bbl_it != p->bundles.cend(), "Vendor BambooLab not found"); - const VendorProfile * vendor_bbl = bbl_it->second.vendor_profile; - + p->only_sla_mode = false; p->any_sla_selected = p->check_sla_selected(); if (p->only_sla_mode) diff --git a/src/slic3r/GUI/CreatePresetsDialog.cpp b/src/slic3r/GUI/CreatePresetsDialog.cpp index 22ddd98e4b4..0166238cab9 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.cpp +++ b/src/slic3r/GUI/CreatePresetsDialog.cpp @@ -47,22 +47,22 @@ static const std::vector filament_vendors = "Duramic", "ELEGOO", "Eryone", "Essentium", "eSUN", "Extrudr", "Fiberforce", "Fiberlogy", "FilaCube", "Filamentive", "Fillamentum", "FLASHFORGE", "Formfutura", "Francofil", "FilamentOne", - "GEEETECH", "Giantarm", "Gizmo Dorks", "GreenGate3D", "HATCHBOX", - "Hello3D", "IC3D", "IEMAI", "IIID Max", "INLAND", - "iProspect", "iSANMATE", "Justmaker", "Keene Village Plastics", "Kexcelled", - "MakerBot", "MatterHackers", "MIKA3D", "NinjaTek", "Nobufil", - "Novamaker", "OVERTURE", "OVVNYXE", "Polymaker", "Priline", - "Printed Solid", "Protopasta", "Prusament", "Push Plastic", "R3D", - "Re-pet3D", "Recreus", "Regen", "Sain SMART", "SliceWorx", - "Snapmaker", "SnoLabs", "Spectrum", "SUNLU", "TTYT3D", - "Tianse", "UltiMaker", "Valment", "Verbatim", "VO3D", - "Voxelab", "VOXELPLA", "YOOPAI", "Yousu", "Ziro", - "Zyltech"}; + "Fil X", "GEEETECH", "Giantarm", "Gizmo Dorks", "GreenGate3D", + "HATCHBOX", "Hello3D", "IC3D", "IEMAI", "IIID Max", + "INLAND", "iProspect", "iSANMATE", "Justmaker", "Keene Village Plastics", + "Kexcelled", "MakerBot", "MatterHackers", "MIKA3D", "NinjaTek", + "Nobufil", "Novamaker", "OVERTURE", "OVVNYXE", "Polymaker", + "Priline", "Printed Solid", "Protopasta", "Prusament", "Push Plastic", + "R3D", "Re-pet3D", "Recreus", "Regen", "Sain SMART", + "SliceWorx", "Snapmaker", "SnoLabs", "Spectrum", "SUNLU", + "TTYT3D", "Tianse", "UltiMaker", "Valment", "Verbatim", + "VO3D", "Voxelab", "VOXELPLA", "YOOPAI", "Yousu", + "Ziro", "Zyltech"}; static const std::vector filament_types = {"PLA", "rPLA", "PLA+", "PLA Tough", "PETG", "ABS", "ASA", "FLEX", "HIPS", "PA", "PACF", "NYLON", "PVA", "PVB", "PC", "PCABS", "PCTG", "PCCF", "PHA", "PP", "PEI", "PET", "PETG", "PETGCF", "PTBA", "PTBA90A", "PEEK", "TPU93A", "TPU75D", "TPU", "TPU92A", "TPU98A", "Misc", - "TPE", "GLAZE", "Nylon", "CPE", "METAL", "ABST", "Carbon Fiber"}; + "TPE", "GLAZE", "Nylon", "CPE", "METAL", "ABST", "Carbon Fiber", "SBS"}; static const std::vector printer_vendors = {"Anker", "Anycubic", "Artillery", "Bambulab", "BIQU", @@ -315,7 +315,7 @@ static wxBoxSizer *create_preset_tree(wxWindow *parent, std::pair preset : printer_and_preset.second) { wxString preset_name = wxString::FromUTF8(preset->name); - wxTreeItemId childId1 = treeCtrl->AppendItem(rootId, preset_name); + treeCtrl->AppendItem(rootId, preset_name); row++; } @@ -671,8 +671,6 @@ bool CreateFilamentPresetDialog::is_check_box_selected() wxBoxSizer *CreateFilamentPresetDialog::create_item(FilamentOptionType option_type) { - - wxSizer *item = nullptr; switch (option_type) { case VENDOR: return create_vendor_item(); case TYPE: return create_type_item(); @@ -3092,10 +3090,6 @@ bool CreatePrinterPresetDialog::check_printable_area() { if (x == 0 || y == 0) { return false; } - double x0 = 0.0; - double y0 = 0.0; - double x1 = x; - double y1 = y; if (dx >= x || dy >= y) { return false; } @@ -4633,7 +4627,6 @@ wxBoxSizer *EditFilamentPresetDialog::create_button_sizer() WarningDialog dlg(this, _L("All the filament presets belong to this filament would be deleted. \nIf you are using this filament on your printer, please reset the filament information for that slot."), _L("Delete filament"), wxYES | wxCANCEL | wxCANCEL_DEFAULT | wxCENTRE); int res = dlg.ShowModal(); if (wxID_YES == res) { - PresetBundle *preset_bundle = wxGetApp().preset_bundle; std::set> inherit_preset_names; std::set> root_preset_names; for (std::pair>> printer_and_preset : m_printer_compatible_presets) { diff --git a/src/slic3r/GUI/DailyTips.cpp b/src/slic3r/GUI/DailyTips.cpp index 2e5b99e8b29..ba4427964e8 100644 --- a/src/slic3r/GUI/DailyTips.cpp +++ b/src/slic3r/GUI/DailyTips.cpp @@ -89,7 +89,6 @@ void DailyTipsDataRenderer::open_wiki() const void DailyTipsDataRenderer::render(const ImVec2& pos, const ImVec2& size) const { - ImGuiWrapper& imgui = *wxGetApp().imgui(); ImGuiWindow* parent_window = ImGui::GetCurrentWindow(); int window_flags = parent_window->Flags; window_flags &= ~ImGuiWindowFlags_NoScrollbar; @@ -190,7 +189,6 @@ void DailyTipsDataRenderer::render_text(const ImVec2& start_pos, const ImVec2& s std::string tips_line = _u8L("For more information, please check out Wiki"); std::string wiki_part_text = _u8L("Wiki"); std::string first_part_text = tips_line.substr(0, tips_line.find(wiki_part_text)); - ImVec2 wiki_part_size = ImGui::CalcTextSize(wiki_part_text.c_str()); ImVec2 first_part_size = ImGui::CalcTextSize(first_part_text.c_str()); //text @@ -200,7 +198,6 @@ void DailyTipsDataRenderer::render_text(const ImVec2& start_pos, const ImVec2& s ImColor HyperColor = ImColor(31, 142, 234, (int)(255 * m_fade_opacity)).Value; ImVec2 wiki_part_rect_min = ImVec2(link_start_pos.x + first_part_size.x, link_start_pos.y); - ImVec2 wiki_part_rect_max = wiki_part_rect_min + wiki_part_size; ImGui::PushStyleColor(ImGuiCol_Text, HyperColor.Value); ImGui::SetCursorScreenPos(wiki_part_rect_min); imgui.text(wiki_part_text.c_str()); @@ -264,9 +261,6 @@ ImVec2 DailyTipsPanel::get_size() void DailyTipsPanel::render() { - ImGuiWrapper& imgui = *wxGetApp().imgui(); - float scale = imgui.get_font_size() / 15.0f; - if (!m_first_enter) { retrieve_data_from_hint_database(HintDataNavigation::Curr); m_first_enter = true; diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index a79dd0a027e..28a5523b224 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -1007,17 +1007,17 @@ int MachineObject::ams_filament_mapping(std::vector filaments, std reset_mapping_result(result); try { // try to use ordering ams mapping - bool order_mapping_result = true; + // bool order_mapping_result = true; for (int i = 0; i < filaments.size(); i++) { if (i >= tray_info_list.size()) { - order_mapping_result = false; + // order_mapping_result = false; break; } if (tray_info_list[i].tray_id == -1) { result[i].tray_id = tray_info_list[i].tray_id; } else { if (!tray_info_list[i].type.empty() && tray_info_list[i].type != filaments[i].type) { - order_mapping_result = false; + // order_mapping_result = false; break; } else { result[i].tray_id = tray_info_list[i].tray_id; @@ -1319,7 +1319,6 @@ wxString MachineObject::get_curr_stage() int MachineObject::get_curr_stage_idx() { - int result = -1; for (int i = 0; i < stage_list_info.size(); i++) { if (stage_list_info[i] == stage_curr) { return i; @@ -2349,8 +2348,6 @@ int MachineObject::command_xcam_control(std::string module_name, bool on_off, st int MachineObject::command_xcam_control_ai_monitoring(bool on_off, std::string lvl) { - bool print_halt = (lvl == "never_halt") ? false:true; - xcam_ai_monitoring = on_off; xcam_ai_monitoring_hold_count = HOLD_COUNT_MAX; xcam_ai_monitoring_sensitivity = lvl; @@ -5662,9 +5659,7 @@ void DeviceManager::parse_user_print_info(std::string body) } } } - catch (std::exception& e) { - ; - } + catch (std::exception&) {} } void DeviceManager::update_user_machine_list_info() diff --git a/src/slic3r/GUI/DownloadProgressDialog.cpp b/src/slic3r/GUI/DownloadProgressDialog.cpp index 542db08561c..425c2deb3b5 100644 --- a/src/slic3r/GUI/DownloadProgressDialog.cpp +++ b/src/slic3r/GUI/DownloadProgressDialog.cpp @@ -128,7 +128,6 @@ wxString DownloadProgressDialog::format_text(wxStaticText* st, wxString str, int wxString out_txt = str; wxString count_txt = ""; - int new_line_pos = 0; for (int i = 0; i < str.length(); i++) { auto text_size = st->GetTextExtent(count_txt); diff --git a/src/slic3r/GUI/ExtrusionCalibration.cpp b/src/slic3r/GUI/ExtrusionCalibration.cpp index 26216edc936..eda9da58579 100644 --- a/src/slic3r/GUI/ExtrusionCalibration.cpp +++ b/src/slic3r/GUI/ExtrusionCalibration.cpp @@ -626,7 +626,6 @@ void ExtrusionCalibration::update_combobox_filaments() { m_comboBox_filament->SetValue(wxEmptyString); user_filaments.clear(); - int selection_idx = -1; int filament_index = -1; int curr_selection = -1; wxArrayString filament_items; diff --git a/src/slic3r/GUI/FileArchiveDialog.cpp b/src/slic3r/GUI/FileArchiveDialog.cpp index 2cd84b6acdc..689b31598d1 100644 --- a/src/slic3r/GUI/FileArchiveDialog.cpp +++ b/src/slic3r/GUI/FileArchiveDialog.cpp @@ -2,7 +2,6 @@ #include "I18N.hpp" #include "GUI_App.hpp" -#include "GUI.hpp" #include "MainFrame.hpp" #include "ExtraRenderers.hpp" #include "format.hpp" diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index e2a4f00a56e..b35ade0be4a 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -1447,9 +1447,6 @@ void GCodeViewer::_render_calibration_thumbnail_internal(ThumbnailData& thumbnai //shader->set_uniform("emission_factor", 0.0f); } else { - switch (buffer.render_primitive_type) { - default: break; - } int uniform_color = shader->get_uniform_location("uniform_color"); auto it_path = buffer.render_paths.begin(); for (unsigned int ibuffer_id = 0; ibuffer_id < static_cast(buffer.indices.size()); ++ibuffer_id) { @@ -1747,10 +1744,10 @@ void GCodeViewer::update_layers_slider_mode() // true -> single-extruder printer profile OR // multi-extruder printer profile , but whole model is printed by only one extruder // false -> multi-extruder printer profile , and model is printed by several extruders - bool one_extruder_printed_model = true; + // bool one_extruder_printed_model = true; // extruder used for whole model for multi-extruder printer profile - int only_extruder = -1; + // int only_extruder = -1; // BBS if (wxGetApp().filaments_cnt() > 1) { @@ -1773,10 +1770,10 @@ void GCodeViewer::update_layers_slider_mode() return true; }; - if (is_one_extruder_printed_model()) - only_extruder = extruder; - else - one_extruder_printed_model = false; + // if (is_one_extruder_printed_model()) + // only_extruder = extruder; + // else + // one_extruder_printed_model = false; } } @@ -3247,12 +3244,6 @@ void GCodeViewer::refresh_render_paths(bool keep_sequential_current_first, bool return in_layers_range(path.sub_paths.front().first.s_id) && in_layers_range(path.sub_paths.back().last.s_id); }; - //BBS - auto is_extruder_in_layer_range = [this](const Path& path, size_t extruder_id) { - return path.extruder_id == extruder_id; - }; - - auto is_travel_in_layers_range = [this](size_t path_id, size_t min_id, size_t max_id) { const TBuffer& buffer = m_buffers[buffer_id(EMoveType::Travel)]; if (path_id >= buffer.paths.size()) @@ -4097,7 +4088,6 @@ void GCodeViewer::render_all_plates_stats(const std::vector support_used_filaments_g_all_plates; float total_time_all_plates = 0.0f; float total_cost_all_plates = 0.0f; - bool show_detailed_statistics_page = false; struct ColumnData { enum { Model = 1, @@ -4399,7 +4389,6 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv const float icon_size = ImGui::GetTextLineHeight() * 0.7; //BBS GUI refactor //const float percent_bar_size = 2.0f * ImGui::GetTextLineHeight(); - const float percent_bar_size = 0; bool imperial_units = wxGetApp().app_config->get("use_inches") == "1"; ImDrawList* draw_list = ImGui::GetWindowDrawList(); @@ -4511,7 +4500,6 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv append_range_item(0, range.min, decimals); } else { - const float step_size = range.step_size(); for (int i = static_cast(Range_Colors.size()) - 1; i >= 0; --i) { append_range_item(i, range.get_value_at_step(i), decimals); } @@ -4547,7 +4535,6 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv const auto preferred_offset = ImGui::GetWindowWidth() - ImGui::CalcTextSize(_u8L("Display").c_str()).x - ImGui::GetFrameHeight() / 2 - 2 * window_padding - ImGui::GetStyle().ScrollbarSize; if (preferred_offset > offsets.back()) { offsets.back() = preferred_offset; - imgui.set_requires_extra_frame(); } } @@ -4561,7 +4548,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv return ret; }; - auto color_print_ranges = [this](unsigned char extruder_id, const std::vector& custom_gcode_per_print_z) { + /*auto color_print_ranges = [this](unsigned char extruder_id, const std::vector& custom_gcode_per_print_z) { std::vector>> ret; ret.reserve(custom_gcode_per_print_z.size()); @@ -4590,27 +4577,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv } return ret; - }; - - auto upto_label = [](double z) { - char buf[64]; - ::sprintf(buf, "%.2f", z); - return _u8L("up to") + " " + std::string(buf) + " " + _u8L("mm"); - }; - - auto above_label = [](double z) { - char buf[64]; - ::sprintf(buf, "%.2f", z); - return _u8L("above") + " " + std::string(buf) + " " + _u8L("mm"); - }; - - auto fromto_label = [](double z1, double z2) { - char buf1[64]; - ::sprintf(buf1, "%.2f", z1); - char buf2[64]; - ::sprintf(buf2, "%.2f", z2); - return _u8L("from") + " " + std::string(buf1) + " " + _u8L("to") + " " + std::string(buf2) + " " + _u8L("mm"); - }; + };*/ auto role_time_and_percent = [time_mode](ExtrusionRole role) { auto it = std::find_if(time_mode.roles_times.begin(), time_mode.roles_times.end(), [role](const std::pair& item) { return role == item.first; }); @@ -5107,7 +5074,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv ImGuiWindow* window = ImGui::GetCurrentWindow(); const ImRect separator(ImVec2(window->Pos.x + window_padding * 3, window->DC.CursorPos.y), ImVec2(window->Pos.x + window->Size.x - window_padding * 3, window->DC.CursorPos.y + 1.0f)); ImGui::ItemSize(ImVec2(0.0f, 0.0f)); - const bool item_visible = ImGui::ItemAdd(separator, 0); + ImGui::ItemAdd(separator, 0); window->DrawList->AddLine(separator.Min, ImVec2(separator.Max.x, separator.Min.y), ImGui::GetColorU32(ImGuiCol_Separator)); std::vector> columns_offsets; @@ -5229,7 +5196,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv return items; }; - auto append_color_change = [&imgui](const ColorRGBA& color1, const ColorRGBA& color2, const std::array& offsets, const Times& times) { + /*auto append_color_change = [&imgui](const ColorRGBA& color1, const ColorRGBA& color2, const std::array& offsets, const Times& times) { imgui.text(_u8L("Color change")); ImGui::SameLine(); @@ -5246,9 +5213,9 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv ImGui::SameLine(offsets[0]); imgui.text(short_time(get_time_dhms(times.second - times.first))); - }; + };*/ - auto append_print = [&imgui, imperial_units](const ColorRGBA& color, const std::array& offsets, const Times& times, std::pair used_filament) { + /*auto append_print = [&imgui, imperial_units](const ColorRGBA& color, const std::array& offsets, const Times& times, std::pair used_filament) { imgui.text(_u8L("Print")); ImGui::SameLine(); @@ -5274,7 +5241,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv ::sprintf(buffer, "%.2f g", used_filament.second); imgui.text(buffer); } - }; + };*/ PartialTimes partial_times = generate_partial_times(time_mode.custom_gcode_times, m_print_statistics.volumes_per_color_change); if (!partial_times.empty()) { @@ -5381,7 +5348,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv // } //} - auto any_option_available = [this]() { +/* auto any_option_available = [this]() { auto available = [this](EMoveType type) { const TBuffer& buffer = m_buffers[buffer_id(type)]; return buffer.visible && buffer.has_data(); @@ -5394,7 +5361,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv available(EMoveType::Tool_change) || available(EMoveType::Unretract) || available(EMoveType::Seam); - }; + };*/ //auto add_option = [this, append_item](EMoveType move_type, EOptionsColors color, const std::string& text) { // const TBuffer& buffer = m_buffers[buffer_id(move_type)]; diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index a378f639701..bf791cdec66 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -383,7 +383,7 @@ std::string GLCanvas3D::LayersEditing::get_tooltip(const GLCanvas3D& canvas) con } } if (h > 0.0f) - ret = std::to_string(h); + ret = wxString::Format("%.3f",h).ToStdString(); } } return ret; @@ -2773,7 +2773,7 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re ModelInstanceEPrintVolumeState state; const bool contained_min_one = m_volumes.check_outside_state(m_bed.build_volume(), &state); const bool partlyOut = (state == ModelInstanceEPrintVolumeState::ModelInstancePVS_Partly_Outside); - const bool fullyOut = (state == ModelInstanceEPrintVolumeState::ModelInstancePVS_Fully_Outside); + // const bool fullyOut = (state == ModelInstanceEPrintVolumeState::ModelInstancePVS_Fully_Outside); _set_warning_notification(EWarning::ObjectClashed, partlyOut); //BBS: turn off the warning when fully outside @@ -4080,12 +4080,12 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) // Set focus in order to remove it from sidebar fields if (m_canvas != nullptr) { // Only set focus, if the top level window of this canvas is active. - auto p = dynamic_cast(evt.GetEventObject()); - while (p->GetParent()) - 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(); +// auto p = dynamic_cast(evt.GetEventObject()); +// while (p->GetParent()) +// 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_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 @@ -5085,7 +5085,6 @@ std::vector GLCanvas3D::get_empty_cells(const Vec2f start_point, const Ve } for (size_t i = 0; i < m_model->objects.size(); ++i) { ModelObject* model_object = m_model->objects[i]; - auto id = model_object->id().id; ModelInstance* model_instance0 = model_object->instances.front(); Polygon hull_2d = 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())); @@ -5356,7 +5355,6 @@ void GLCanvas3D::update_sequential_clearance() for (int i = k+1; i < bounding_box_count; i++) { - Polygon& next_convex = convex_and_bounding_boxes[i].hull_polygon; BoundingBox& next_bbox = convex_and_bounding_boxes[i].bounding_box; auto py1 = next_bbox.min.y(); auto py2 = next_bbox.max.y(); @@ -5417,7 +5415,6 @@ bool GLCanvas3D::_render_orient_menu(float left, float right, float bottom, floa ImGuiWrapper* imgui = wxGetApp().imgui(); auto canvas_w = float(get_canvas_size().get_width()); - auto canvas_h = float(get_canvas_size().get_height()); //BBS: GUI refactor: move main toolbar to the right //original use center as {0.0}, and top is (canvas_h/2), bottom is (-canvas_h/2), also plus inv_camera //now change to left_up as {0,0}, and top is 0, bottom is canvas_h @@ -5426,6 +5423,7 @@ bool GLCanvas3D::_render_orient_menu(float left, float right, float bottom, floa ImGuiWrapper::push_toolbar_style(get_scale()); imgui->set_next_window_pos(x, m_main_toolbar.get_height(), ImGuiCond_Always, 0.5f, 0.0f); #else + auto canvas_h = float(get_canvas_size().get_height()); const float x = canvas_w - m_main_toolbar.get_width(); const float y = 0.5f * canvas_h - top * float(wxGetApp().plater()->get_camera().get_zoom()); imgui->set_next_window_pos(x, y, ImGuiCond_Always, 1.0f, 0.0f); @@ -5440,13 +5438,13 @@ bool GLCanvas3D::_render_orient_menu(float left, float right, float bottom, floa PrinterTechnology ptech = current_printer_technology(); bool settings_changed = false; - float angle_min = 45.f; + // float angle_min = 45.f; std::string angle_key = "overhang_angle", rot_key = "enable_rotation"; std::string key_min_area = "min_area"; std::string postfix = "_fff"; if (ptech == ptSLA) { - angle_min = 45.f; + // angle_min = 45.f; postfix = "_sla"; } @@ -5502,7 +5500,6 @@ bool GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, flo ImGuiWrapper *imgui = wxGetApp().imgui(); auto canvas_w = float(get_canvas_size().get_width()); - auto canvas_h = float(get_canvas_size().get_height()); //BBS: GUI refactor: move main toolbar to the right //original use center as {0.0}, and top is (canvas_h/2), bottom is (-canvas_h/2), also plus inv_camera //now change to left_up as {0,0}, and top is 0, bottom is canvas_h @@ -5510,8 +5507,8 @@ bool GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, flo float left_pos = m_main_toolbar.get_item("arrange")->render_left_pos; const float x = (1 + left_pos) * canvas_w / 2; imgui->set_next_window_pos(x, m_main_toolbar.get_height(), ImGuiCond_Always, 0.0f, 0.0f); - #else + auto canvas_h = float(get_canvas_size().get_height()); const float x = canvas_w - m_main_toolbar.get_width(); const float y = 0.5f * canvas_h - top * float(wxGetApp().plater()->get_camera().get_zoom()); imgui->set_next_window_pos(x, y, ImGuiCond_Always, 1.0f, 0.0f); @@ -7852,7 +7849,7 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() 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)); //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_Text, m_is_dark ? ImVec4(.9f, .9f, .9f, 1) : ImVec4(.3f, .3f, .3f, 1)); // ORCA Plate number text > Add support for dark mode ImGui::PushStyleColor(ImGuiCol_WindowBg, window_bg); ImGui::PushStyleColor(ImGuiCol_ScrollbarBg, ImVec4(0.f, 0.f, 0.f, 0.f)); // ORCA using background color with opacity creates a second color. This prevents secondary color ImGui::PushStyleColor(ImGuiCol_ScrollbarGrabActive, scroll_col); @@ -8044,7 +8041,7 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() } // draw text - ImVec2 text_start_pos = ImVec2(start_pos.x + 10.0f, start_pos.y + 8.0f); + ImVec2 text_start_pos = ImVec2(start_pos.x + 4.0f, start_pos.y + 2.0f); // ORCA move close to corner to prevent overlapping with preview ImGui::RenderText(text_start_pos, std::to_string(i + 1).c_str()); ImGui::PopID(); @@ -8091,16 +8088,13 @@ void GLCanvas3D::_render_return_toolbar() const ImVec2 button_icon_size = ImVec2(font_size * 1.3, font_size * 1.3); ImGuiWrapper& imgui = *wxGetApp().imgui(); - Size cnv_size = get_canvas_size(); - auto canvas_w = float(cnv_size.get_width()); - auto canvas_h = float(cnv_size.get_height()); - float window_width = real_size.x + button_icon_size.x + imgui.scaled(2.0f); - float window_height = button_icon_size.y + imgui.scaled(2.0f); float window_pos_x = 30.0f + (is_collapse_toolbar_on_left() ? (get_collapse_toolbar_width() + 5.f) : 0); float window_pos_y = 14.0f; imgui.set_next_window_pos(window_pos_x, window_pos_y, ImGuiCond_Always, 0, 0); #ifdef __WINDOWS__ + float window_width = real_size.x + button_icon_size.x + imgui.scaled(2.0f); + float window_height = button_icon_size.y + imgui.scaled(2.0f); imgui.set_next_window_size(window_width, window_height, ImGuiCond_Always); #endif @@ -8114,9 +8108,6 @@ void GLCanvas3D::_render_return_toolbar() const imgui.begin(_L("Assembly Return"), ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse); - float button_width = 20; - float button_height = 20; - ImVec2 size = ImVec2(button_width, button_height); // Size of the image we want to make visible ImVec2 uv0 = ImVec2(0.0f, 0.0f); ImVec2 uv1 = ImVec2(1.0f, 1.0f); @@ -8392,11 +8383,11 @@ void GLCanvas3D::_render_assemble_control() const ImGui::SameLine(window_padding.x + 2 * text_size_x + slider_width + item_spacing * 7 + value_size); ImGui::PushItemWidth(slider_width); - bool explosion_slider_changed = imgui->bbl_slider_float_style("##ratio_slider", &m_explosion_ratio, 1.0f, 3.0f, "%1.2f"); + imgui->bbl_slider_float_style("##ratio_slider", &m_explosion_ratio, 1.0f, 3.0f, "%1.2f"); ImGui::SameLine(window_padding.x + 2 * text_size_x + 2 * slider_width + item_spacing * 8 + value_size); ImGui::PushItemWidth(value_size); - bool explosion_input_changed = ImGui::BBLDragFloat("##ratio_input", &m_explosion_ratio, 0.1f, 1.0f, 3.0f, "%1.2f"); + ImGui::BBLDragFloat("##ratio_input", &m_explosion_ratio, 0.1f, 1.0f, 3.0f, "%1.2f"); } imgui->end(); @@ -8426,7 +8417,6 @@ void GLCanvas3D::_render_assemble_info() const auto canvas_h = float(get_canvas_size().get_height()); 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]; ImGuiIO& io = ImGui::GetIO(); ImFont* font = io.Fonts->Fonts[0]; @@ -9186,8 +9176,6 @@ void GLCanvas3D::_load_wipe_tower_toolpaths(const BuildVolume& build_volume, con ctxt.print = print; ctxt.tool_colors = tool_colors.empty() ? nullptr : &tool_colors; - //BBS: has no single_extruder_multi_material_priming - //if (print->wipe_tower_data().priming && print->config().single_extruder_multi_material_priming) if (print->wipe_tower_data().priming) for (int i=0; i<(int)print->wipe_tower_data().priming.get()->size(); ++i) ctxt.priming.emplace_back(print->wipe_tower_data().priming.get()->at(i)); diff --git a/src/slic3r/GUI/GLTexture.cpp b/src/slic3r/GUI/GLTexture.cpp index 79cbb773708..be0b4026538 100644 --- a/src/slic3r/GUI/GLTexture.cpp +++ b/src/slic3r/GUI/GLTexture.cpp @@ -470,7 +470,6 @@ void GLTexture::reset() bool GLTexture::generate_from_text_string(const std::string& text_str, wxFont &font, wxColor background, wxColor foreground) { - int w,h,hl; return generate_from_text(text_str, font, background, foreground); } diff --git a/src/slic3r/GUI/GLToolbar.cpp b/src/slic3r/GUI/GLToolbar.cpp index be97e52e84a..6b14f3cf2f5 100644 --- a/src/slic3r/GUI/GLToolbar.cpp +++ b/src/slic3r/GUI/GLToolbar.cpp @@ -1466,7 +1466,6 @@ void GLToolbar::render_vertical(const GLCanvas3D& parent) int tex_width, tex_height; if (item->is_action_with_text_image()) { float scaled_text_size = m_layout.text_size * m_layout.scale * inv_cnv_w; - float scaled_text_width = item->get_extra_size_ratio() * icons_size_x; float scaled_text_border = 2.5 * m_layout.scale * inv_cnv_h; float scaled_text_height = icons_size_y / 2.0f; item->render_text(left, left + scaled_text_size, top - scaled_text_border - scaled_text_height, top - scaled_text_border); diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 842909985b3..7dc8f102713 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -301,7 +301,6 @@ class SplashScreen : public wxSplashScreen memDC.SetTextForeground(StateColor::darkModeColorFor(wxColour(144, 144, 144))); int width = bitmap.GetWidth(); int text_height = memDC.GetTextExtent(text).GetHeight(); - int text_width = memDC.GetTextExtent(text).GetWidth(); wxRect text_rect(wxPoint(0, m_action_line_y_position), wxPoint(width, m_action_line_y_position + text_height)); memDC.DrawLabel(text, text_rect, wxALIGN_CENTER); @@ -941,7 +940,7 @@ void GUI_App::post_init() } #endif - if (app_config->get("stealth_mode") == "false") + if (!app_config->get_stealth_mode()) hms_query = new HMSQuery(); m_show_gcode_window = app_config->get_bool("show_gcode_window"); @@ -963,7 +962,7 @@ void GUI_App::post_init() // Neither wxShowEvent nor wxWindowCreateEvent work reliably. if (this->preset_updater) { // G-Code Viewer does not initialize preset_updater. CallAfter([this] { - bool cw_showed = this->config_wizard_startup(); + this->config_wizard_startup(); std::string http_url = get_http_url(app_config->get_country_code()); std::string language = GUI::into_u8(current_language_code()); @@ -972,7 +971,7 @@ void GUI_App::post_init() this->preset_updater->sync(http_url, language, network_ver, sys_preset ? preset_bundle : nullptr); this->check_new_version_sf(); - if (is_user_login() && app_config->get("stealth_mode") == "false") { + if (is_user_login() && !app_config->get_stealth_mode()) { // this->check_privacy_version(0); request_user_handle(0); } @@ -1026,8 +1025,7 @@ void GUI_App::post_init() try { std::time_t lw_t = boost::filesystem::last_write_time(temp_path) ; files_vec.push_back({ lw_t, temp_path.filename().string() }); - } catch (const std::exception &ex) { - } + } catch (std::exception&) {} } std::sort(files_vec.begin(), files_vec.end(), []( std::pair &a, std::pair &b) { @@ -1317,7 +1315,6 @@ int GUI_App::download_plugin(std::string name, std::string package_name, Install .on_complete([&pro_fn, tmp_path, target_file_path](std::string body, unsigned status) { BOOST_LOG_TRIVIAL(info) << "[download_plugin 2] completed"; bool cancel = false; - int percent = 0; fs::fstream file(tmp_path, std::ios::out | std::ios::binary | std::ios::trunc); file.write(body.c_str(), body.size()); file.close(); @@ -1927,8 +1924,13 @@ void GUI_App::init_app_config() boost::filesystem::create_directory(data_dir_path); } - // Change current dirtory of application - chdir(encode_path((Slic3r::data_dir() + "/log").c_str()).c_str()); + // Change current directory of application + auto path = encode_path((Slic3r::data_dir() + "/log").c_str()); +#ifdef _WIN32 + _chdir(path.c_str()); +#else + chdir(path.c_str()); +#endif } else { m_datadir_redefined = true; } @@ -2876,7 +2878,7 @@ void GUI_App::init_label_colours() #if defined(_WIN32) || defined(__linux__) || defined(__APPLE__) 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_highlight_default = is_dark_mode ? wxColour("#36363B") : wxColour("#F1F1F1"); // ORCA row highlighting 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); @@ -3365,7 +3367,7 @@ if (res) { mainframe->refresh_plugin_tips(); // BBS: remove SLA related message } - } catch (std::exception &e) { + } catch (std::exception&) { // wxMessageBox(e.what(), "", MB_OK); } } @@ -3379,9 +3381,7 @@ void GUI_App::ShowDownNetPluginDlg() { return; DownloadProgressDialog dlg(_L("Downloading Bambu Network Plug-in")); dlg.ShowModal(); - } catch (std::exception &e) { - ; - } + } catch (std::exception&) {} } void GUI_App::ShowUserLogin(bool show) @@ -3396,9 +3396,7 @@ void GUI_App::ShowUserLogin(bool show) login_dlg = new ZUserLogin(); } login_dlg->ShowModal(); - } catch (std::exception &e) { - ; - } + } catch (std::exception&) {} } else { if (login_dlg) login_dlg->EndModal(wxID_OK); @@ -3418,7 +3416,7 @@ void GUI_App::ShowOnlyFilament() { // BBS: remove SLA related message } - } catch (std::exception &e) { + } catch (std::exception&) { // wxMessageBox(e.what(), "", MB_OK); } } @@ -3830,10 +3828,10 @@ std::string GUI_App::handle_web_request(std::string cmd) auto keyCode = key_event_node.get("key"); auto ctrlKey = key_event_node.get("ctrl"); auto shiftKey = key_event_node.get("shift"); - auto cmdKey = key_event_node.get("cmd"); wxKeyEvent e(wxEVT_CHAR_HOOK); #ifdef __APPLE__ + auto cmdKey = key_event_node.get("cmd"); e.SetControlDown(cmdKey); e.SetRawControlDown(ctrlKey); #else @@ -3982,16 +3980,18 @@ void GUI_App::on_http_error(wxCommandEvent &evt) wxString result; if (status >= 400 && status < 500) { try { - json j = json::parse(evt.GetString()); - if (j.contains("code")) { - if (!j["code"].is_null()) - code = j["code"].get(); - } - if (j.contains("error")) - if (!j["error"].is_null()) - error = j["error"].get(); + auto evt_str = evt.GetString(); + if (!evt_str.empty()) { + json j = json::parse(evt_str); + if (j.contains("code")) { + if (!j["code"].is_null()) + code = j["code"].get(); + } + if (j.contains("error")) + if (!j["error"].is_null()) + error = j["error"].get(); } - catch (...) {} + } catch (...) {} } // Version limit @@ -4141,6 +4141,7 @@ void GUI_App::check_update(bool show_tips, int by_user) void GUI_App::check_new_version(bool show_tips, int by_user) { + return; // orca: not used, see check_new_version_sf std::string platform = "windows"; #ifdef __WINDOWS__ @@ -4674,7 +4675,7 @@ void GUI_App::sync_preset(Preset* preset) void GUI_App::start_sync_user_preset(bool with_progress_dlg) { - if (app_config->get("stealth_mode") == "true") + if (app_config->get_stealth_mode()) return; if (!m_agent || !m_agent->is_user_login()) return; @@ -4786,8 +4787,6 @@ void GUI_App::start_sync_user_preset(bool with_progress_dlg) }); } - unsigned int http_code = 200; - /* get list witch need to be deleted*/ std::vector delete_cache_presets = get_delete_cache_presets_lock(); for (auto it = delete_cache_presets.begin(); it != delete_cache_presets.end();) { @@ -5256,6 +5255,8 @@ void GUI_App::update_mode() mainframe->m_param_panel->update_mode(); if (mainframe->m_param_dialog) mainframe->m_param_dialog->panel()->update_mode(); + if (mainframe->m_printer_view) + mainframe->m_printer_view->update_mode(); mainframe->m_webview->update_mode(); #ifdef _MSW_DARK_MODE @@ -5275,6 +5276,8 @@ void GUI_App::update_mode() void GUI_App::update_internal_development() { mainframe->m_webview->update_mode(); + if (mainframe->m_printer_view) + mainframe->m_printer_view->update_mode(); } void GUI_App::show_ip_address_enter_dialog(wxString title) @@ -5467,7 +5470,7 @@ void GUI_App::show_ip_address_enter_dialog_handler(wxCommandEvent& evt) void GUI_App::open_preferences(size_t open_on_tab, const std::string& highlight_option) { - bool app_layout_changed = false; + // bool app_layout_changed = false; { // the dialog needs to be destroyed before the call to recreate_GUI() // or sometimes the application crashes into wxDialogBase() destructor @@ -6500,8 +6503,6 @@ static bool del_win_registry(HKEY hkeyHive, const wchar_t *pszVar, const wchar_t return false; if (!bDidntExist) { - DWORD dwDisposition; - HKEY hkey; iRC = ::RegDeleteKeyExW(hkeyHive, pszVar, KEY_ALL_ACCESS, 0); if (iRC == ERROR_SUCCESS) { return true; diff --git a/src/slic3r/GUI/GUI_AuxiliaryList.cpp b/src/slic3r/GUI/GUI_AuxiliaryList.cpp index 1fa5b194ec6..5e0d0dcd217 100644 --- a/src/slic3r/GUI/GUI_AuxiliaryList.cpp +++ b/src/slic3r/GUI/GUI_AuxiliaryList.cpp @@ -3,8 +3,6 @@ #include "I18N.hpp" #include "wxExtensions.hpp" -#include - #include "GUI_App.hpp" #include "Plater.hpp" #include "libslic3r/Model.hpp" diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index 067fd45e350..334705618ed 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -711,9 +711,9 @@ wxMenuItem* MenuFactory::append_menu_item_settings(wxMenu* menu_) // Create new items for settings popupmenu - if (printer_technology() == ptFFF || - (menu->GetMenuItems().size() > 0 && !menu->GetMenuItems().back()->IsSeparator())) - ;// menu->SetFirstSeparator(); +// if (printer_technology() == ptFFF || +// (menu->GetMenuItems().size() > 0 && !menu->GetMenuItems().back()->IsSeparator())) + // menu->SetFirstSeparator(); // detect itemm for adding of the setting ObjectList* object_list = obj_list(); @@ -1339,7 +1339,7 @@ void MenuFactory::create_extra_object_menu() m_object_menu.AppendSeparator(); // Set filament insert menu item here // Set Printable - wxMenuItem* menu_item_printable = append_menu_item_printable(&m_object_menu); + append_menu_item_printable(&m_object_menu); append_menu_item_per_object_process(&m_object_menu); // Enter per object parameters append_menu_item_per_object_settings(&m_object_menu); @@ -1493,8 +1493,6 @@ void MenuFactory::create_plate_menu() // arrange objects on current plate append_menu_item(menu, wxID_ANY, _L("Arrange"), _L("arrange current plate"), [](wxCommandEvent&) { - PartPlate* plate = plater()->get_partplate_list().get_selected_plate(); - assert(plate); plater()->set_prepare_state(Job::PREPARE_STATE_MENU); plater()->arrange(); }, "", nullptr, @@ -1507,8 +1505,6 @@ void MenuFactory::create_plate_menu() append_menu_item( menu, wxID_ANY, _L("Reload All"), _L("reload all from disk"), [](wxCommandEvent&) { - PartPlate* plate = plater()->get_partplate_list().get_selected_plate(); - assert(plate); plater()->set_prepare_state(Job::PREPARE_STATE_MENU); plater()->reload_all_from_disk(); }, @@ -1517,8 +1513,6 @@ void MenuFactory::create_plate_menu() // orient objects on current plate append_menu_item(menu, wxID_ANY, _L("Auto Rotate"), _L("auto rotate current plate"), [](wxCommandEvent&) { - PartPlate* plate = plater()->get_partplate_list().get_selected_plate(); - assert(plate); //BBS TODO call auto rotate for current plate plater()->set_prepare_state(Job::PREPARE_STATE_MENU); plater()->orient(); @@ -1801,7 +1795,7 @@ void MenuFactory::append_menu_item_clone(wxMenu* menu) void MenuFactory::append_menu_item_simplify(wxMenu* menu) { - wxMenuItem* menu_item = append_menu_item(menu, wxID_ANY, _L("Simplify Model"), "", + append_menu_item(menu, wxID_ANY, _L("Simplify Model"), "", [](wxCommandEvent&) { obj_list()->simplify(); }, "", menu, []() {return plater()->can_simplify(); }, m_parent); } @@ -1899,16 +1893,16 @@ void MenuFactory::append_menu_item_change_filament(wxMenu* menu) wxMenu* extruder_selection_menu = new wxMenu(); const wxString& name = sels.Count() == 1 ? names[0] : names[1]; - int initial_extruder = -1; // negative value for multiple object/part selection - if (sels.Count() == 1) { - const ModelConfig& config = obj_list()->get_item_config(sels[0]); - // BBS - const auto sel_vol = obj_list()->get_selected_model_volume(); - if (sel_vol && sel_vol->type() == ModelVolumeType::PARAMETER_MODIFIER) - initial_extruder = config.has("extruder") ? config.extruder() : 0; - else - initial_extruder = config.has("extruder") ? config.extruder() : 1; - } + // int initial_extruder = -1; // negative value for multiple object/part selection + // if (sels.Count() == 1) { + // const ModelConfig& config = obj_list()->get_item_config(sels[0]); + // // BBS + // const auto sel_vol = obj_list()->get_selected_model_volume(); + // if (sel_vol && sel_vol->type() == ModelVolumeType::PARAMETER_MODIFIER) + // initial_extruder = config.has("extruder") ? config.extruder() : 0; + // else + // initial_extruder = config.has("extruder") ? config.extruder() : 1; + // } // BBS bool has_modifier = false; @@ -1949,7 +1943,6 @@ void MenuFactory::append_menu_item_change_filament(wxMenu* menu) void MenuFactory::append_menu_item_set_printable(wxMenu* menu) { - const Selection& selection = plater()->canvas3D()->get_selection(); bool all_printable = true; ObjectList* list = obj_list(); wxDataViewItemArray sels; @@ -1957,7 +1950,6 @@ void MenuFactory::append_menu_item_set_printable(wxMenu* menu) for (wxDataViewItem item : sels) { ItemType type = list->GetModel()->GetItemType(item); - bool check; if (type != itInstance && type != itObject) continue; else { @@ -2000,8 +1992,8 @@ void MenuFactory::append_menu_item_locked(wxMenu* menu) }, "", nullptr, []() { return true; }, m_parent); m_parent->Bind(wxEVT_UPDATE_UI, [](wxUpdateUIEvent& evt) { - PartPlate* plate = plater()->get_partplate_list().get_selected_plate(); - assert(plate); + // PartPlate* plate = plater()->get_partplate_list().get_selected_plate(); + // assert(plate); //bool check = plate->is_locked(); //evt.Check(check); plater()->set_current_canvas_as_dirty(); @@ -2037,8 +2029,6 @@ void MenuFactory::append_menu_item_plate_name(wxMenu *menu) m_parent->Bind( wxEVT_UPDATE_UI, [](wxUpdateUIEvent &evt) { - PartPlate *plate = plater()->get_partplate_list().get_selected_plate(); - assert(plate); plater()->set_current_canvas_as_dirty(); }, item->GetId()); diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 30846abf51b..d7d083f35fd 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -713,7 +713,6 @@ void ObjectList::update_plate_values_for_items() Unselect(item); bool is_old_parent_expanded = IsExpanded(old_parent); - bool is_expanded = IsExpanded(item); m_objects_model->OnPlateChange(plate_idx, item); if (is_old_parent_expanded) Expand(old_parent); @@ -739,7 +738,6 @@ void ObjectList::object_config_options_changed(const ObjectVolumeID& ov_id) if (ov_id.object == nullptr) return; - ModelObjectPtrs& objects = wxGetApp().model().objects; ModelObject* mo = ov_id.object; ModelVolume* mv = ov_id.volume; @@ -846,8 +844,6 @@ void ObjectList::update_filament_colors() void ObjectList::update_name_column_width() const { wxSize client_size = this->GetClientSize(); - bool p_vbar = this->GetParent()->HasScrollbar(wxVERTICAL); - bool p_hbar = this->GetParent()->HasScrollbar(wxHORIZONTAL); auto em = em_unit(const_cast(this)); // BBS: walkaround for wxDataViewCtrl::HasScrollbar() does not return correct status @@ -936,7 +932,6 @@ void ObjectList::update_name_in_model(const wxDataViewItem& item) const if (m_objects_model->GetItemType(item) & itPlate) { std::string name = m_objects_model->GetName(item).ToUTF8().data(); int plate_idx = -1; - const ItemType type0 = m_objects_model->GetItemType(item, plate_idx); if (plate_idx >= 0) { auto plate = wxGetApp().plater()->get_partplate_list().get_plate(plate_idx); if (plate->get_plate_name() != name) { @@ -1351,8 +1346,7 @@ void ObjectList::show_context_menu(const bool evt_context_menu) plater->SetPlateIndexByRightMenuInLeftUI(-1); if (type & itPlate) { int plate_idx = -1; - const ItemType type0 = m_objects_model->GetItemType(item, plate_idx); - if (plate_idx >= 0) { + if (plate_idx >= 0) { plater->SetPlateIndexByRightMenuInLeftUI(plate_idx); } } @@ -2006,7 +2000,7 @@ void ObjectList::load_modifier(const wxArrayString& input_files, ModelObject& mo try { model = Model::read_from_file(input_file, nullptr, nullptr, LoadStrategy::LoadModel); } - catch (std::exception& e) { + catch (std::exception&) { // auto msg = _L("Error!") + " " + input_file + " : " + e.what() + "."; auto msg = _L("Error!") + " " + _L("Failed to get the model data in the current file."); show_error(parent, msg); @@ -2905,7 +2899,7 @@ void ObjectList::boolean() new_object->config.assign_config(object->config); if (new_object->instances.empty()) new_object->add_instance(); - ModelVolume* new_volume = new_object->add_volume(mesh); + new_object->add_volume(mesh); // BBS: ensure on bed but no need to ensure locate in the center around origin new_object->ensure_on_bed(); @@ -2952,9 +2946,9 @@ DynamicPrintConfig ObjectList::get_default_layer_config(const int obj_idx) wxGetApp().preset_bundle->prints.get_edited_preset().config.opt_float("layer_height"); config.set_key_value("layer_height",new ConfigOptionFloat(layer_height)); // BBS - int extruder = object(obj_idx)->config.has("extruder") ? - object(obj_idx)->config.opt_int("extruder") : - wxGetApp().preset_bundle->prints.get_edited_preset().config.opt_float("extruder"); + // int extruder = object(obj_idx)->config.has("extruder") ? + // object(obj_idx)->config.opt_int("extruder") : + // wxGetApp().preset_bundle->prints.get_edited_preset().config.opt_float("extruder"); config.set_key_value("extruder", new ConfigOptionInt(0)); return config; @@ -3176,8 +3170,8 @@ 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 enable_manipulation{true}; Orca: Removed because not used + // bool disable_ss_manipulation{false}; Orca: Removed because not used bool disable_ununiform_scale{false}; const auto item = GetSelection(); @@ -3185,7 +3179,7 @@ void ObjectList::part_selection_changed() og_name = _L("Cut Connectors information"); update_and_show_manipulations = true; - enable_manipulation = false; + // enable_manipulation = false; disable_ununiform_scale = true; } else if (item && (m_objects_model->GetItemType(item) & itPlate)) { @@ -3202,7 +3196,7 @@ void ObjectList::part_selection_changed() obj_idx = selection.get_object_idx(); ModelObject *object = (*m_objects)[obj_idx]; m_config = &object->config; - disable_ss_manipulation = object->is_cut(); + // disable_ss_manipulation = object->is_cut(); } else { og_name = _L("Group manipulation"); @@ -3211,17 +3205,17 @@ void ObjectList::part_selection_changed() 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(); + // 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(); + // 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; @@ -3240,7 +3234,7 @@ void ObjectList::part_selection_changed() // 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; + // disable_ss_manipulation = true; break; } disable_ununiform_scale = !cut_objects.empty(); @@ -3288,7 +3282,7 @@ 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(); + // disable_ss_manipulation = (*m_objects)[obj_idx]->is_cut(); } } else { @@ -3316,8 +3310,8 @@ void ObjectList::part_selection_changed() 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())); + // 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"); @@ -3325,7 +3319,7 @@ void ObjectList::part_selection_changed() // fill m_config by object's values m_config = &(*m_objects)[obj_idx]->config; - disable_ss_manipulation = (*m_objects)[obj_idx]->is_cut(); + // disable_ss_manipulation = (*m_objects)[obj_idx]->is_cut(); } else if (type & (itLayerRoot | itLayer)) { og_name = type & itLayerRoot ? _L("Height ranges") : _L("Settings for height range"); @@ -3368,7 +3362,7 @@ void ObjectList::part_selection_changed() if (printer_technology() == ptSLA) update_and_show_layers = false; else if (update_and_show_layers) { - ;//wxGetApp().obj_layers()->get_og()->set_name(" " + og_name + " "); + //wxGetApp().obj_layers()->get_og()->set_name(" " + og_name + " "); } update_min_height(); @@ -3400,7 +3394,6 @@ 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); @@ -4689,8 +4682,6 @@ void ObjectList::select_item(const ObjectVolumeID& ov_id) void ObjectList::select_items(const std::vector& ov_ids) { - ModelObjectPtrs& objects = wxGetApp().model().objects; - wxDataViewItemArray sel_items; for (auto ov_id : ov_ids) { if (ov_id.object == nullptr) @@ -5695,7 +5686,7 @@ void ObjectList::set_extruder_for_selected_items(const int extruder) void ObjectList::on_plate_added(PartPlate* part_plate) { - wxDataViewItem plate_item = m_objects_model->AddPlate(part_plate); + m_objects_model->AddPlate(part_plate); } void ObjectList::on_plate_deleted(int plate_idx) diff --git a/src/slic3r/GUI/GUI_ObjectSettings.cpp b/src/slic3r/GUI/GUI_ObjectSettings.cpp index 09ca8c64a87..a0e0da3ea50 100644 --- a/src/slic3r/GUI/GUI_ObjectSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectSettings.cpp @@ -205,7 +205,7 @@ bool ObjectSettings::update_settings_list() bool is_object_settings = false; bool is_volume_settings = false; bool is_layer_range_settings = false; - bool is_layer_root = false; + // bool is_layer_root = false; ModelObject * parent_object = nullptr; for (auto item : items) { auto type = objects_model->GetItemType(item); @@ -255,9 +255,9 @@ bool ObjectSettings::update_settings_list() 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; - } + // else if (type == itLayerRoot) { + // is_layer_root = true; + // } } auto tab_plate = dynamic_cast(wxGetApp().get_plate_tab()); diff --git a/src/slic3r/GUI/GUI_ObjectTable.cpp b/src/slic3r/GUI/GUI_ObjectTable.cpp index 56c1550c46c..7bc925e2844 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.cpp +++ b/src/slic3r/GUI/GUI_ObjectTable.cpp @@ -280,7 +280,6 @@ wxGridActivationResult GridCellFilamentsEditor::TryActivate(int row, int col, wx { ObjectGridTable *table = dynamic_cast(grid->GetTable()); ObjectGridTable::ObjectGridCol* grid_col = table->get_grid_col(col); - ObjectGridTable::ObjectGridRow* grid_row = table->get_grid_row(row - 1); if ( actSource.GetOrigin() == wxGridActivationSource::Key ) { const wxKeyEvent& key_event = actSource.GetKeyEvent(); @@ -316,7 +315,6 @@ void GridCellFilamentsEditor::DoActivate(int row, int col, wxGrid* grid) if (m_cached_value != -1) { ObjectGridTable *table = dynamic_cast(grid->GetTable()); ObjectGridTable::ObjectGridCol* grid_col = table->get_grid_col(col); - ObjectGridTable::ObjectGridRow* grid_row = table->get_grid_row(row - 1); if (m_cached_value <= grid_col->choice_count) { wxString choice = grid_col->choices[m_cached_value-1]; table->SetValue(row, col, choice); @@ -332,7 +330,6 @@ void GridCellFilamentsRenderer::Draw(wxGrid &grid, wxGridCellAttr &attr, wxDC &d wxRect text_rect = rect; if (table) { - ObjectGridTable::ObjectGridCol *grid_col = table->get_grid_col(col); ObjectGridTable::ObjectGridRow *grid_row = table->get_grid_row(row - 1); ConfigOptionInt & cur_option = dynamic_cast((*grid_row)[(ObjectGridTable::GridColType) col]); @@ -472,7 +469,6 @@ wxGridActivationResult GridCellChoiceEditor::TryActivate(int row, int col, wxGri { ObjectGridTable * table = dynamic_cast(grid->GetTable()); ObjectGridTable::ObjectGridCol *grid_col = table->get_grid_col(col); - ObjectGridTable::ObjectGridRow *grid_row = table->get_grid_row(row - 1); if (actSource.GetOrigin() == wxGridActivationSource::Key) { const wxKeyEvent &key_event = actSource.GetKeyEvent(); @@ -505,7 +501,6 @@ void GridCellChoiceEditor::DoActivate(int row, int col, wxGrid *grid) if (m_cached_value != -1) { ObjectGridTable * table = dynamic_cast(grid->GetTable()); ObjectGridTable::ObjectGridCol *grid_col = table->get_grid_col(col); - ObjectGridTable::ObjectGridRow *grid_row = table->get_grid_row(row - 1); if (m_cached_value <= grid_col->choice_count) { wxString choice = grid_col->choices[m_cached_value - 1]; table->SetValue(row, col, choice); @@ -521,7 +516,6 @@ void GridCellComboBoxRenderer::Draw(wxGrid &grid, wxGridCellAttr &attr, wxDC &dc wxRect text_rect = rect; if (table) { - ObjectGridTable::ObjectGridCol *grid_col = table->get_grid_col(col); ObjectGridTable::ObjectGridRow *grid_row = table->get_grid_row(row - 1); ConfigOptionInt & cur_option = dynamic_cast((*grid_row)[(ObjectGridTable::GridColType) col]); @@ -561,7 +555,6 @@ wxString GridCellSupportEditor::ms_stringValues[2] = { wxT(""), wxT("") }; void GridCellSupportEditor::DoActivate(int row, int col, wxGrid* grid) { - ObjectGrid* local_table = dynamic_cast(grid); wxGridBlocks cell_array = grid->GetSelectedBlocks(); auto left_col = cell_array.begin()->GetLeftCol(); @@ -691,7 +684,6 @@ void GridCellSupportRenderer::Draw(wxGrid& grid, //wxGridCellBoolRenderer::Draw(grid, attr, dc, rect, row, col, isSelected); ObjectGridTable * table = dynamic_cast(grid.GetTable()); - ObjectGridTable::ObjectGridCol *grid_col = table->get_grid_col(col); ObjectGridTable::ObjectGridRow *grid_row = table->get_grid_row(row - 1); ConfigOptionBool & cur_option = dynamic_cast((*grid_row)[(ObjectGridTable::GridColType) col]); @@ -891,7 +883,6 @@ void ObjectGrid::OnKeyDown( wxKeyEvent& event ) // see include/wx/defs.h enum wxKeyCode int keyCode = event.GetKeyCode(); int ctrlMask = wxMOD_CONTROL; - int shiftMask = wxMOD_SHIFT; // Coordinates of the selected block to copy to clipboard. wxGridBlockCoords selection; wxTextDataObject text_data; @@ -1544,7 +1535,6 @@ void ObjectGridTable::SetValue( int row, int col, const wxString& value ) return; ObjectGridRow* grid_row = m_grid_data[row - 1]; ObjectGridCol* grid_col = m_col_data[col]; - ObjectList* obj_list = wxGetApp().obj_list(); if (grid_col->type == coEnum) { int enum_value = 0; for (int i = 0; i < grid_col->choice_count; i++) @@ -1812,9 +1802,6 @@ wxString ObjectGridTable::convert_filament_string(int index, wxString& filament_ void ObjectGridTable::init_cols(ObjectGrid *object_grid) { - const float font_size = 1.5f * wxGetApp().em_unit(); - - // printable for object ObjectGridCol *col = new ObjectGridCol(coBool, "printable", ObjectGridTable::category_all, true, false, true, false, wxALIGN_CENTRE); col->size = object_grid->GetTextExtent(L("Printable")).x; @@ -1910,7 +1897,6 @@ void ObjectGridTable::init_cols(ObjectGrid *object_grid) col = new ObjectGridCol(coFloat, "inner_wall_speed_reset", L("Speed"), false, true, false, false, wxALIGN_LEFT); m_col_data.push_back(col); - return; } void ObjectGridTable::construct_object_configs(ObjectGrid *object_grid) @@ -1929,8 +1915,8 @@ void ObjectGridTable::construct_object_configs(ObjectGrid *object_grid) int object_count = m_panel->m_model->objects.size(); PartPlateList& partplate_list = m_panel->m_plater->get_partplate_list(); DynamicPrintConfig& global_config = wxGetApp().preset_bundle->prints.get_edited_preset().config; - const DynamicPrintConfig* plater_config = m_panel->m_plater->config(); - const DynamicPrintConfig& filament_config = *plater_config; + // const DynamicPrintConfig* plater_config = m_panel->m_plater->config(); + // const DynamicPrintConfig& filament_config = *plater_config; for (int i = 0; i < object_count; i++) { @@ -2826,7 +2812,7 @@ int ObjectTablePanel::init_filaments_and_colors() BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", invalid color count:%1%, extruder count: %2%") %color_count %m_filaments_count; } - unsigned int i = 0; + int i = 0; ColorRGB rgb; while (i < m_filaments_count) { const std::string& txt_color = global_config->opt_string("filament_colour", i); @@ -3032,7 +3018,6 @@ void ObjectTablePanel::load_data() { ObjectGridTable::ObjectGridCol *grid_col = m_object_grid_table->get_grid_col(i); if (grid_col->size > 0) { - int fit_size1 = m_object_grid->GetColSize(i); m_object_grid->SetColSize(i, grid_col->size); } } @@ -3173,7 +3158,7 @@ void ObjectTablePanel::OnRowSize( wxGridSizeEvent& ev) g_dialog_max_height =(panel_size.GetHeight() > g_max_size_from_parent.GetHeight())?g_max_size_from_parent.GetHeight():panel_size.GetHeight(); this->SetMaxSize(wxSize(g_dialog_max_width, g_dialog_max_height)); - wxSize current_size = GetParent()->GetSize(); + // wxSize current_size = GetParent()->GetSize(); //if (current_size.GetHeight() < g_dialog_max_height) GetParent()->SetMaxSize(wxSize(g_dialog_max_width, g_dialog_max_height)); GetParent()->SetSize(wxSize(g_dialog_max_width, g_dialog_max_height)); @@ -3187,7 +3172,7 @@ void ObjectTablePanel::OnColSize( wxGridSizeEvent& ev) g_dialog_max_height =(panel_size.GetHeight() > g_max_size_from_parent.GetHeight())?g_max_size_from_parent.GetHeight():panel_size.GetHeight(); this->SetMaxSize(wxSize(g_dialog_max_width, g_dialog_max_height)); - wxSize current_size = GetParent()->GetSize(); + // wxSize current_size = GetParent()->GetSize(); //if (current_size.GetWidth() < g_dialog_max_width) GetParent()->SetMaxSize(wxSize(g_dialog_max_width, g_dialog_max_height)); GetParent()->SetSize(wxSize(g_dialog_max_width, g_dialog_max_height)); @@ -3471,8 +3456,6 @@ void GridCellTextEditor::SetSize(const wxRect &rect) { wxGridCellTextEditor::Set void GridCellTextEditor::BeginEdit(int row, int col, wxGrid *grid) { ObjectGridTable * table = dynamic_cast(grid->GetTable()); - ObjectGridTable::ObjectGridCol *grid_col = table->get_grid_col(col); - ObjectGridTable::ObjectGridRow *grid_row = table->get_grid_row(row - 1); auto val = table->GetValue(row, col); @@ -3506,10 +3489,6 @@ void GridCellTextEditor::BeginEdit(int row, int col, wxGrid *grid) bool GridCellTextEditor::EndEdit(int row, int col, const wxGrid *grid, const wxString &WXUNUSED(oldval), wxString *newval) { - ObjectGridTable * table = dynamic_cast(grid->GetTable()); - ObjectGridTable::ObjectGridCol *grid_col = table->get_grid_col(col); - ObjectGridTable::ObjectGridRow *grid_row = table->get_grid_row(row - 1); - wxCHECK_MSG(m_control, false, "wxGridCellTextEditor must be created first!"); const wxString value = Text()->GetTextCtrl()->GetValue(); diff --git a/src/slic3r/GUI/GUI_ObjectTableSettings.cpp b/src/slic3r/GUI/GUI_ObjectTableSettings.cpp index 10578be691b..5e9dfd0f64c 100644 --- a/src/slic3r/GUI/GUI_ObjectTableSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectTableSettings.cpp @@ -108,7 +108,6 @@ bool ObjectTableSettings::update_settings_list(bool is_object, bool is_multiple_ //SettingsFactory::Bundle cat_options = SettingsFactory::get_bundle(&config->get(), is_object); std::map> cat_options; std::vector category_settings = SettingsFactory::get_visible_options(category, !is_object); - bool display_multiple = false; auto is_option_modified = [this](std::string key) { ConfigOption* config_option1 = m_origin_config.option(key); ConfigOption* config_option2 = m_current_config.option(key); @@ -147,7 +146,6 @@ bool ObjectTableSettings::update_settings_list(bool is_object, bool is_multiple_ else it1 = cat_options.erase(it1); } - display_multiple = true; } else { cat_options.emplace(category, category_settings); diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index 91254111cf4..13e67556e68 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -6,7 +6,6 @@ #include "GUI_App.hpp" #include "GUI.hpp" #include "I18N.hpp" -#include "3DScene.hpp" #include "BackgroundSlicingProcess.hpp" #include "OpenGLManager.hpp" #include "GLCanvas3D.hpp" @@ -15,19 +14,11 @@ #include "MainFrame.hpp" #include "format.hpp" -#include -#include #include #include -#include -#include -#include -#include -#include // this include must follow the wxWidgets ones or it won't compile on Windows -> see http://trac.wxwidgets.org/ticket/2421 #include "libslic3r/Print.hpp" -#include "libslic3r/SLAPrint.hpp" #include "NotificationManager.hpp" #ifdef _WIN32 @@ -536,7 +527,6 @@ void Preview::update_layers_slider_from_canvas(wxKeyEvent &event) const auto key = event.GetKeyCode(); IMSlider *m_layers_slider = m_canvas->get_gcode_viewer().get_layers_slider(); - IMSlider *m_moves_slider = m_canvas->get_gcode_viewer().get_moves_slider(); if (key == 'L') { if(!m_layers_slider->switch_one_layer_mode()) event.Skip(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp index bee454af284..c9c324222db 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp @@ -3057,7 +3057,7 @@ bool GLGizmoEmboss::choose_font_by_wxdialog() } #endif // ALLOW_ADD_FONT_BY_OS_SELECTOR -#if defined ALLOW_ADD_FONT_BY_FILE or defined ALLOW_DEBUG_MODE +#if defined(ALLOW_ADD_FONT_BY_FILE) || defined(ALLOW_DEBUG_MODE) namespace priv { static std::string get_file_name(const std::string &file_path) { @@ -3693,7 +3693,6 @@ GuiCfg create_gui_configuration() cfg.height_of_volume_type_selector = separator_height + line_height_with_spacing + input_height; int max_style_image_width = static_cast(std::round(cfg.max_style_name_width/2 - 2 * style.FramePadding.x)); - int max_style_image_height = static_cast(std::round(input_height)); cfg.max_style_image_size = Vec2i32(max_style_image_width, line_height); cfg.face_name_size = Vec2i32(cfg.input_width, line_height_with_spacing); cfg.face_name_texture_offset_x = cfg.face_name_size.x() + space; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp index 0329d7c5085..220032826a1 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp @@ -101,7 +101,7 @@ bool GLGizmoFdmSupports::on_init() m_desc["smart_fill_angle"] = _L("Smart fill angle"); m_desc["on_overhangs_only"] = _L("On overhangs only"); - memset(&m_print_instance, sizeof(m_print_instance), 0); + memset(&m_print_instance, 0, sizeof(m_print_instance)); return true; } @@ -245,17 +245,10 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l const float gap_fill_slider_left = m_imgui->calc_text_size(m_desc.at("gap_fill")).x + m_imgui->scaled(1.5f); const float highlight_slider_left = m_imgui->calc_text_size(m_desc.at("highlight_by_angle")).x + m_imgui->scaled(1.5f); const float reset_button_slider_left = m_imgui->calc_text_size(m_desc.at("reset_direction")).x + m_imgui->scaled(1.5f) + ImGui::GetStyle().FramePadding.x * 2; - const float on_overhangs_only_width = m_imgui->calc_text_size(m_desc["on_overhangs_only"]).x + m_imgui->scaled(1.5f); - const float remove_btn_width = m_imgui->calc_text_size(m_desc.at("remove_all")).x + m_imgui->scaled(1.5f); - const float filter_btn_width = m_imgui->calc_text_size(m_desc.at("perform")).x + m_imgui->scaled(1.5f); const float gap_area_txt_width = m_imgui->calc_text_size(m_desc.at("gap_area")).x + m_imgui->scaled(1.5f); const float smart_fill_angle_txt_width = m_imgui->calc_text_size(m_desc.at("smart_fill_angle")).x + m_imgui->scaled(1.5f); - const float buttons_width = remove_btn_width + filter_btn_width + m_imgui->scaled(1.5f); const float empty_button_width = m_imgui->calc_button_size("").x; - const float tips_width = m_imgui->calc_text_size(_L("Auto support threshold angle: ") + " 90 ").x + m_imgui->scaled(1.5f); - const float minimal_slider_width = m_imgui->scaled(4.f); - float caption_max = 0.f; float total_text_max = 0.f; for (const auto &t : std::array{"enforce", "block", "remove", "cursor_size", "clipping_of_view"}) { @@ -272,8 +265,6 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l const float sliders_width = m_imgui->scaled(7.0f); const float drag_left_width = ImGui::GetStyle().WindowPadding.x + sliders_left_width + sliders_width - space_size; - float drag_pos_times = 0.7; - ImGui::AlignTextToFramePadding(); m_imgui->text(m_desc.at("tool_type")); std::array tool_ids = { ImGui::CircleButtonIcon, ImGui::SphereButtonIcon, ImGui::FillButtonIcon, ImGui::GapFillIcon }; @@ -291,12 +282,13 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l if (i != 0) ImGui::SameLine((empty_button_width + m_imgui->scaled(1.75f)) * i + m_imgui->scaled(1.3f)); ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f)); // ORCA: Fixes icon rendered without colors while using Light theme + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.f, 0.f, 0.f)); // ORCA Removes button background on dark mode + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f)); // ORCA: Fixes icon rendered without colors while using Light theme if (m_current_tool == tool_ids[i]) { - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush - ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.f, 0.59f, 0.53f, 0.30f)); // ORCA use orca color for selected tool / brush - ImGui::PushStyleColor(ImGuiCol_Border, ImGuiWrapper::COL_ORCA); // ORCA use orca color for border on selected tool / brush + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.f, 0.59f, 0.53f, 0.30f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_Border, ImGuiWrapper::COL_ORCA); // ORCA use orca color for border on selected tool / brush ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0); } @@ -306,7 +298,7 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l ImGui::PopStyleColor(4); ImGui::PopStyleVar(2); } - ImGui::PopStyleColor(1); + ImGui::PopStyleColor(2); ImGui::PopStyleVar(1); if (btn_clicked && m_current_tool != tool_ids[i]) { @@ -696,7 +688,6 @@ wxString GLGizmoFdmSupports::handle_snapshot_action_name(bool shift_down, GLGizm void GLGizmoFdmSupports::init_print_instance() { const PrintObject* print_object = NULL; - PrintInstance print_instance = { 0 }; const Print *print = m_parent.fff_print(); if (!m_c->selection_info() || (m_print_instance.print_object)) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp index ee9c7794645..cb791597e68 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp @@ -138,8 +138,6 @@ void GLGizmoMeshBoolean::on_render() BoundingBoxf3 src_bb; BoundingBoxf3 tool_bb; - const ModelObject* mo = m_c->selection_info()->model_object(); - const ModelInstance* mi = mo->instances[m_parent.get_selection().get_instance_idx()]; const Selection& selection = m_parent.get_selection(); const Selection::IndicesList& idxs = selection.get_volume_idxs(); for (unsigned int i : idxs) { @@ -163,16 +161,12 @@ void GLGizmoMeshBoolean::on_set_state() if (m_state == EState::On) { m_src.reset(); m_tool.reset(); - bool m_diff_delete_input = false; - bool m_inter_delete_input = false; m_operation_mode = MeshBooleanOperation::Union; m_selecting_state = MeshBooleanSelectingState::SelectSource; } else if (m_state == EState::Off) { m_src.reset(); m_tool.reset(); - bool m_diff_delete_input = false; - bool m_inter_delete_input = false; m_operation_mode = MeshBooleanOperation::Undef; m_selecting_state = MeshBooleanSelectingState::Undef; wxGetApp().notification_manager()->close_plater_warning_notification(warning_text); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp index 283ccacb10c..4193ba885f1 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp @@ -403,7 +403,6 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott const float filter_btn_width = m_imgui->calc_text_size(m_desc.at("perform")).x + m_imgui->scaled(1.f); const float buttons_width = remove_btn_width + filter_btn_width + m_imgui->scaled(1.f); const float minimal_slider_width = m_imgui->scaled(4.f); - const float color_button_width = m_imgui->calc_text_size(std::string_view{""}).x + m_imgui->scaled(1.75f); float caption_max = 0.f; float total_text_max = 0.f; @@ -444,7 +443,6 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott float start_pos_x = ImGui::GetCursorPos().x; const ImVec2 max_label_size = ImGui::CalcTextSize("99", NULL, true); - const float item_spacing = m_imgui->scaled(0.8f); size_t n_extruder_colors = std::min((size_t)EnforcerBlockerType::ExtruderMax, m_extruders_colors.size()); for (int extruder_idx = 0; extruder_idx < n_extruder_colors; extruder_idx++) { const ColorRGBA &extruder_color = m_extruders_colors[extruder_idx]; @@ -514,12 +512,13 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott if (i != 0) ImGui::SameLine((empty_button_width + m_imgui->scaled(1.75f)) * i + m_imgui->scaled(1.5f)); ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f)); // ORCA: Fixes icon rendered without colors while using Light theme + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.f, 0.f, 0.f)); // ORCA Removes button background on dark mode + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f)); // ORCA Fixes icon rendered without colors while using Light theme if (m_current_tool == tool_ids[i]) { - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush - ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.f, 0.59f, 0.53f, 0.30f)); // ORCA use orca color for selected tool / brush - ImGui::PushStyleColor(ImGuiCol_Border, ImGuiWrapper::COL_ORCA); // ORCA use orca color for border on selected tool / brush + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.f, 0.59f, 0.53f, 0.30f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_Border, ImGuiWrapper::COL_ORCA); // ORCA use orca color for border on selected tool / brush ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0); } @@ -529,7 +528,7 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott ImGui::PopStyleColor(4); ImGui::PopStyleVar(2); } - ImGui::PopStyleColor(1); + ImGui::PopStyleColor(2); ImGui::PopStyleVar(1); if (btn_clicked && m_current_tool != tool_ids[i]) { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp index 2dbf7778e0a..cf512cd88e9 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp @@ -527,21 +527,10 @@ std::vector GLGizmoPainterBase::get_pr if (m_rr.mesh_id == -1) return hit_triangles_by_mesh; - ProjectedMousePosition mesh_hit_point = { m_rr.hit, m_rr.mesh_id, m_rr.facet }; float z_bot_world= (trafo_matrices[m_rr.mesh_id] * Vec3d(m_rr.hit(0), m_rr.hit(1), m_rr.hit(2))).z(); float z_top_world = z_bot_world+ m_cursor_height; hit_triangles_by_mesh.push_back({ z_bot_world, m_rr.mesh_id, size_t(m_rr.facet) }); - const Selection& selection = m_parent.get_selection(); - const ModelObject* mo = m_c->selection_info()->model_object(); - const ModelInstance* mi = mo->instances[selection.get_instance_idx()]; - const Transform3d instance_trafo = m_parent.get_canvas_type() == GLCanvas3D::CanvasAssembleView ? - mi->get_assemble_transformation().get_matrix() : - mi->get_transformation().get_matrix(); - const Transform3d instance_trafo_not_translate = m_parent.get_canvas_type() == GLCanvas3D::CanvasAssembleView ? - mi->get_assemble_transformation().get_matrix_no_offset() : - mi->get_transformation().get_matrix_no_offset(); - for (int mesh_idx = 0; mesh_idx < part_volumes.size(); mesh_idx++) { if (mesh_idx == m_rr.mesh_id) continue; @@ -712,7 +701,6 @@ bool GLGizmoPainterBase::gizmo_event(SLAGizmoEventType action, const Vec2d& mous // The mouse button click detection is enabled when there is a valid hit. // Missing the object entirely // shall not capture the mouse. - const bool dragging_while_painting = (action == SLAGizmoEventType::Dragging && m_button_down != Button::None); if (mesh_idx != -1 && m_button_down == Button::None) m_button_down = ((action == SLAGizmoEventType::LeftDown) ? Button::Left : Button::Right); @@ -1063,7 +1051,7 @@ void GLGizmoPainterBase::on_set_state() if (m_state == On && m_old_state != On) { // the gizmo was just turned on on_opening(); - const Selection& selection = m_parent.get_selection(); + // const Selection& selection = m_parent.get_selection(); //Camera& camera = wxGetApp().plater()->get_camera(); //Vec3d rotate_target = selection.get_bounding_box().center(); //rotate_target(2) = 0.f; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp index 935a76ca0f0..0f903a0aad9 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp @@ -240,12 +240,13 @@ void GLGizmoSeam::on_render_input_window(float x, float y, float bottom_limit) if (i != 0) ImGui::SameLine((empty_button_width + m_imgui->scaled(1.75f)) * i + m_imgui->scaled(1.3f)); ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f)); // ORCA: Fixes icon rendered without colors while using Light theme + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.f, 0.f, 0.f)); // ORCA Removes button background on dark mode + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f)); // ORCA: Fixes icon rendered without colors while using Light theme if (m_current_tool == tool_ids[i]) { - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush - ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.f, 0.59f, 0.53f, 0.30f)); // ORCA use orca color for selected tool / brush - ImGui::PushStyleColor(ImGuiCol_Border, ImGuiWrapper::COL_ORCA); // ORCA use orca color for border on selected tool / brush + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.f, 0.59f, 0.53f, 0.30f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_Border, ImGuiWrapper::COL_ORCA); // ORCA use orca color for border on selected tool / brush ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0); } @@ -255,7 +256,7 @@ void GLGizmoSeam::on_render_input_window(float x, float y, float bottom_limit) ImGui::PopStyleColor(4); ImGui::PopStyleVar(2); } - ImGui::PopStyleColor(1); + ImGui::PopStyleColor(2); ImGui::PopStyleVar(1); if (btn_clicked && m_current_tool != tool_ids[i]) { m_current_tool = tool_ids[i]; diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index 319c5c75f28..cf8b5601983 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -186,7 +186,7 @@ bool GLGizmosManager::init() // Order of gizmos in the vector must match order in EType! //BBS: GUI refactor: add obj manipulation m_gizmos.clear(); - unsigned int sprite_id = 0; + // unsigned int sprite_id = 0; m_gizmos.emplace_back(new GLGizmoMove3D(m_parent, m_is_dark ? "toolbar_move_dark.svg" : "toolbar_move.svg", EType::Move, &m_object_manipulation)); m_gizmos.emplace_back(new GLGizmoRotate3D(m_parent, m_is_dark ? "toolbar_rotate_dark.svg" : "toolbar_rotate.svg", EType::Rotate, &m_object_manipulation)); m_gizmos.emplace_back(new GLGizmoScale3D(m_parent, m_is_dark ? "toolbar_scale_dark.svg" : "toolbar_scale.svg", EType::Scale, &m_object_manipulation)); @@ -1042,11 +1042,7 @@ void GLGizmosManager::render_arrow(const GLCanvas3D& parent, EType highlighted_t for (size_t idx : selectable_idxs) { if (idx == highlighted_type) { - int tex_width = m_icons_texture.get_width(); - int tex_height = m_icons_texture.get_height(); unsigned int tex_id = m_arrow_texture.get_id(); - float inv_tex_width = (tex_width != 0.0f) ? 1.0f / tex_width : 0.0f; - float inv_tex_height = (tex_height != 0.0f) ? 1.0f / tex_height : 0.0f; const float left_uv = 0.0f; const float right_uv = 1.0f; diff --git a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp index a1490ebc70c..57934b149d0 100644 --- a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp +++ b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp @@ -591,7 +591,6 @@ void GizmoObjectManipulation::do_render_move_window(ImGuiWrapper *imgui_wrapper, float World_size = imgui_wrapper->calc_text_size(position_title).x + space_size; float caption_max = std::max(position_size, World_size) + 2 * space_size; - float end_text_size = imgui_wrapper->calc_text_size(this->m_new_unit_string).x; // position Vec3d original_position; @@ -601,8 +600,6 @@ void GizmoObjectManipulation::do_render_move_window(ImGuiWrapper *imgui_wrapper, original_position = this->m_new_position; Vec3d display_position = m_buffered_position; - // Rotation - Vec3d rotation = this->m_buffered_rotation; float unit_size = imgui_wrapper->calc_text_size(MAX_SIZE).x + space_size; int index = 1; int index_unit = 1; @@ -708,13 +705,6 @@ void GizmoObjectManipulation::do_render_rotate_window(ImGuiWrapper *imgui_wrappe float caption_max = std::max(position_size, World_size) + 2 * space_size; float end_text_size = imgui_wrapper->calc_text_size(this->m_new_unit_string).x; - // position - Vec3d original_position; - if (this->m_imperial_units) - original_position = this->m_new_position * this->mm_to_in; - else - original_position = this->m_new_position; - Vec3d display_position = m_buffered_position; // Rotation Vec3d rotation = this->m_buffered_rotation; @@ -835,10 +825,7 @@ void GizmoObjectManipulation::do_render_scale_input_window(ImGuiWrapper* imgui_w Vec3d scale = m_buffered_scale; Vec3d display_size = m_buffered_size; - Vec3d display_position = m_buffered_position; - float unit_size = imgui_wrapper->calc_text_size(MAX_SIZE).x + space_size; - bool imperial_units = this->m_imperial_units; int index = 2; int index_unit = 1; diff --git a/src/slic3r/GUI/HintNotification.cpp b/src/slic3r/GUI/HintNotification.cpp index c431e0fafb1..a102f400e27 100644 --- a/src/slic3r/GUI/HintNotification.cpp +++ b/src/slic3r/GUI/HintNotification.cpp @@ -499,8 +499,7 @@ HintData* HintDatabase::get_hint(HintDataNavigation nav) m_hint_id = get_next_hint_id(); if(nav == HintDataNavigation::Prev) m_hint_id = get_prev_hint_id(); - if (nav == HintDataNavigation::Curr) - ; +// if (nav == HintDataNavigation::Curr) if (nav == HintDataNavigation::Random) init_random_hint_id(); } diff --git a/src/slic3r/GUI/IMSlider.cpp b/src/slic3r/GUI/IMSlider.cpp index a0f15066b11..538166f1d8e 100644 --- a/src/slic3r/GUI/IMSlider.cpp +++ b/src/slic3r/GUI/IMSlider.cpp @@ -231,7 +231,7 @@ void IMSlider::SetTicksValues(const Info &custom_gcode_per_print_z) static bool last_spiral_vase_status = false; - const bool was_empty = m_ticks.empty(); + // const bool was_empty = m_ticks.empty(); m_ticks.ticks.clear(); const std::vector &heights = custom_gcode_per_print_z.gcodes; @@ -240,9 +240,9 @@ void IMSlider::SetTicksValues(const Info &custom_gcode_per_print_z) if (tick >= 0) m_ticks.ticks.emplace(TickCode{tick, h.type, h.extruder, h.color, h.extra}); } - if (!was_empty && m_ticks.empty()) +// if (!was_empty && m_ticks.empty()) // Switch to the "Feature type"/"Tool" from the very beginning of a new object slicing after deleting of the old one - ;// post_ticks_changed_event(); + // post_ticks_changed_event(); if (m_ticks.has_tick_with_code(ToolChange) && !m_can_change_color) { if (!wxGetApp().plater()->only_gcode_mode() && !wxGetApp().plater()->using_exported_file()) @@ -1034,8 +1034,6 @@ bool IMSlider::vertical_slider(const char* str_id, int* higher_value, int* lower context.IO.MouseClicked[0]) m_show_menu = false; - ImVec2 bar_center = higher_handle.GetCenter(); - // draw ticks draw_ticks(one_slideable_region); // draw colored band diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 6240d73c30d..f6ba5270b6f 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -163,7 +163,7 @@ const ImVec4 ImGuiWrapper::COL_BUTTON_ACTIVE = COL_BUTTON_HOVERED; //BBS const ImVec4 ImGuiWrapper::COL_BLUE_LIGHT = ImVec4(0.122f, 0.557f, 0.918f, 1.0f); -const ImVec4 ImGuiWrapper::COL_GREEN_LIGHT = ImVec4(0.86f, 0.99f, 0.91f, 1.0f); +const ImVec4 ImGuiWrapper::COL_GREEN_LIGHT = { 0.f, 156 / 255.f, 136 / 255.f, 0.25f }; // ORCA used on various places like text selection bg. Replaced with orca color const ImVec4 ImGuiWrapper::COL_HOVER = { 0.933f, 0.933f, 0.933f, 1.0f }; const ImVec4 ImGuiWrapper::COL_ACTIVE = { 0.675f, 0.675f, 0.675f, 1.0f }; const ImVec4 ImGuiWrapper::COL_SEPARATOR = { 0.93f, 0.93f, 0.93f, 1.0f }; @@ -182,8 +182,6 @@ int ImGuiWrapper::TOOLBAR_WINDOW_FLAGS = ImGuiWindowFlags_AlwaysAutoResize bool get_data_from_svg(const std::string &filename, unsigned int max_size_px, ThumbnailData &thumbnail_data) { - bool compression_enabled = false; - NSVGimage *image = nsvgParseFromFile(filename.c_str(), "px", 96.0f); if (image == nullptr) { return false; } @@ -236,7 +234,6 @@ bool get_data_from_svg(const std::string &filename, unsigned int max_size_px, Th bool slider_behavior(ImGuiID id, const ImRect& region, const ImS32 v_min, const ImS32 v_max, ImS32* out_value, ImRect* out_handle, ImGuiSliderFlags flags/* = 0*/, const int fixed_value/* = -1*/, const ImVec4& fixed_rect/* = ImRect()*/) { ImGuiContext& context = *GImGui; - ImGuiIO& io = ImGui::GetIO(); const ImGuiAxis axis = (flags & ImGuiSliderFlags_Vertical) ? ImGuiAxis_Y : ImGuiAxis_X; @@ -1793,7 +1790,7 @@ void ImGuiWrapper::search_list(const ImVec2& size_, bool (*items_getter)(int, co ImGui::ListBoxFooter(); - auto check_box = [&edited, this](const wxString& label, bool& check) { + /*auto check_box = [&edited, this](const wxString& label, bool& check) { ImGui::SameLine(); bool ch = check; checkbox(label, ch); @@ -1801,7 +1798,7 @@ void ImGuiWrapper::search_list(const ImVec2& size_, bool (*items_getter)(int, co check = !check; edited = true; } - }; + };*/ ImGui::AlignTextToFramePadding(); @@ -2585,20 +2582,20 @@ void ImGuiWrapper::push_combo_style(const float scale) 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, COL_ORCA); - ImGui::PushStyleColor(ImGuiCol_HeaderHovered, to_ImVec4(to_rgba(ColorRGB::ORCA(), 0.5f))); + ImGui::PushStyleColor(ImGuiCol_BorderActive, ImVec4(0.f, 150.f / 255.f, 136.f / 255.f, 0.6f)); // ORCA hovered item border color + ImGui::PushStyleColor(ImGuiCol_HeaderHovered, {0.f, 0.f, 0.f, 0.f}); // ORCA hovered item background color ImGui::PushStyleColor(ImGuiCol_HeaderActive, COL_ORCA); - ImGui::PushStyleColor(ImGuiCol_Header, COL_ORCA); + ImGui::PushStyleColor(ImGuiCol_Header, ImVec4(0.f, 150.f / 255.f, 136.f / 255.f, 0.25f)); // ORCA active item background color 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, COL_ORCA); - ImGui::PushStyleColor(ImGuiCol_HeaderHovered, to_ImVec4(to_rgba(ColorRGB::ORCA(), 0.5f))); + ImGui::PushStyleColor(ImGuiCol_BorderActive, ImVec4(0.f, 150.f / 255.f, 136.f / 255.f, 0.6f)); // ORCA hovered item border color + ImGui::PushStyleColor(ImGuiCol_HeaderHovered, {0.f, 0.f, 0.f, 0.f}); // ORCA hovered item background color ImGui::PushStyleColor(ImGuiCol_HeaderActive, COL_ORCA); - ImGui::PushStyleColor(ImGuiCol_Header, COL_ORCA); + ImGui::PushStyleColor(ImGuiCol_Header, ImVec4(0.f, 150.f / 255.f, 136.f / 255.f, 0.25f)); // ORCA active item background color ImGui::PushStyleColor(ImGuiCol_ScrollbarBg, ImGuiWrapper::COL_WINDOW_BG); ImGui::PushStyleColor(ImGuiCol_Button, {1.00f, 1.00f, 1.00f, 0.0f}); } @@ -3149,7 +3146,6 @@ bool IMTexture::load_from_svg_file(const std::string& filename, unsigned width, std::vector data(n_pixels * 4, 0); nsvgRasterize(rast, image, 0, 0, scale, data.data(), width, height, width * 4); - bool compress = false; GLint last_texture; unsigned m_image_texture{ 0 }; unsigned char* pixels = (unsigned char*)(&data[0]); diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index 6648b0e6328..f0d82e3d30b 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -136,7 +136,6 @@ void ArrangeJob::prepare_selected() { inst_sel[size_t(inst_id)] = true; for (size_t i = 0; i < inst_sel.size(); ++i) { - ModelInstance* mi = mo->instances[i]; ArrangePolygon&& ap = prepare_arrange_polygon(mo->instances[i]); //BBS: partplate_list preprocess //remove the locked plate's instances, neither in selected, nor in un-selected @@ -208,7 +207,6 @@ void ArrangeJob::prepare_all() { ModelObject *mo = model.objects[oidx]; for (size_t i = 0; i < mo->instances.size(); ++i) { - ModelInstance * mi = mo->instances[i]; ArrangePolygon&& ap = prepare_arrange_polygon(mo->instances[i]); //BBS: partplate_list preprocess //remove the locked plate's instances, neither in selected, nor in un-selected @@ -324,7 +322,6 @@ void ArrangeJob::prepare_wipe_tower() 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()); std::set extruder_ids; PartPlateList& ppl = wxGetApp().plater()->get_partplate_list(); @@ -530,7 +527,6 @@ void ArrangeJob::process(Ctl &ctl) auto & partplate_list = m_plater->get_partplate_list(); const Slic3r::DynamicPrintConfig& global_config = wxGetApp().preset_bundle->full_config(); - PresetBundle* preset_bundle = wxGetApp().preset_bundle; const bool is_bbl = wxGetApp().preset_bundle->is_bbl_vendor(); if (is_bbl && params.avoid_extrusion_cali_region && global_config.opt_bool("scan_first_layer")) partplate_list.preprocess_nonprefered_areas(m_unselected, MAX_NUM_PLATES); diff --git a/src/slic3r/GUI/Jobs/FillBedJob.cpp b/src/slic3r/GUI/Jobs/FillBedJob.cpp index e594f98ae1e..d9af3631c78 100644 --- a/src/slic3r/GUI/Jobs/FillBedJob.cpp +++ b/src/slic3r/GUI/Jobs/FillBedJob.cpp @@ -127,8 +127,8 @@ void FillBedJob::prepare() m_bedpts = get_bed_shape(*m_plater->config()); - auto &objects = m_plater->model().objects; - /*BoundingBox bedbb = get_extents(m_bedpts); + /*auto &objects = m_plater->model().objects; + BoundingBox bedbb = get_extents(m_bedpts); for (size_t idx = 0; idx < objects.size(); ++idx) if (int(idx) != m_object_idx) @@ -209,9 +209,7 @@ void FillBedJob::process(Ctl &ctl) m_bedpts = get_shrink_bedpts(m_plater->config(), params); auto &partplate_list = m_plater->get_partplate_list(); - auto &print = wxGetApp().plater()->get_partplate_list().get_current_fff_print(); const Slic3r::DynamicPrintConfig& global_config = wxGetApp().preset_bundle->full_config(); - PresetBundle* preset_bundle = wxGetApp().preset_bundle; const bool is_bbl = wxGetApp().preset_bundle->is_bbl_vendor(); if (is_bbl && params.avoid_extrusion_cali_region && global_config.opt_bool("scan_first_layer")) partplate_list.preprocess_nonprefered_areas(m_unselected, MAX_NUM_PLATES); @@ -275,8 +273,6 @@ void FillBedJob::finalize(bool canceled, std::exception_ptr &eptr) int plate_cols = plate_list.get_plate_cols(); int cur_plate = plate_list.get_curr_plate_index(); - size_t inst_cnt = model_object->instances.size(); - int added_cnt = std::accumulate(m_selected.begin(), m_selected.end(), 0, [](int s, auto &ap) { return s + int(ap.priority == 0 && ap.bed_idx == 0); }); diff --git a/src/slic3r/GUI/Jobs/OrientJob.cpp b/src/slic3r/GUI/Jobs/OrientJob.cpp index be59225d8d5..27dac69b565 100644 --- a/src/slic3r/GUI/Jobs/OrientJob.cpp +++ b/src/slic3r/GUI/Jobs/OrientJob.cpp @@ -46,7 +46,6 @@ void OrientJob::prepare_selection(std::vector obj_sel, bool only_one_plate ModelInstance* mi = mo->instances[inst_idx]; OrientMesh&& om = get_orient_mesh(mi); - bool locked = false; if (!only_one_plate) { int plate_index = plate_list.find_instance(oidx, inst_idx); if ((plate_index >= 0)&&(plate_index < plate_list.get_plate_count())) { diff --git a/src/slic3r/GUI/Jobs/PrintJob.cpp b/src/slic3r/GUI/Jobs/PrintJob.cpp index a54310c2346..53fad3dbdd9 100644 --- a/src/slic3r/GUI/Jobs/PrintJob.cpp +++ b/src/slic3r/GUI/Jobs/PrintJob.cpp @@ -103,9 +103,6 @@ wxString PrintJob::get_http_error_msg(unsigned int status, std::string body) if (!j["message"].is_null()) message = j["message"].get(); } - switch (status) { - ; - } } catch (...) { ; @@ -137,7 +134,6 @@ void PrintJob::process(Ctl &ctl) wxString error_str; int curr_percent = 10; NetworkAgent* m_agent = wxGetApp().getAgent(); - AppConfig* config = wxGetApp().app_config; if (this->connection_type == "lan") { msg = _u8L("Sending print job over LAN"); @@ -150,12 +146,9 @@ void PrintJob::process(Ctl &ctl) ctl.call_on_main_thread([this] { prepare(); }).wait(); int result = -1; - unsigned int http_code; std::string http_body; - int total_plate_num = plate_data.plate_count; if (!plate_data.is_valid) { - total_plate_num = m_plater->get_partplate_list().get_plate_count(); 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(); @@ -312,7 +305,7 @@ void PrintJob::process(Ctl &ctl) try { stl_design_id = std::stoi(wxGetApp().model().stl_design_id); } - catch (const std::exception& e) { + catch (std::exception&) { stl_design_id = 0; } params.stl_design_id = stl_design_id; @@ -447,7 +440,7 @@ void PrintJob::process(Ctl &ctl) std::string curr_job_id; json job_info_j; try { - job_info_j.parse(job_info); + job_info_j = json::parse(job_info); if (job_info_j.contains("job_id")) { curr_job_id = job_info_j["job_id"].get(); } diff --git a/src/slic3r/GUI/Jobs/RotoptimizeJob.cpp b/src/slic3r/GUI/Jobs/RotoptimizeJob.cpp index 263273984b7..3fd2b375bf2 100644 --- a/src/slic3r/GUI/Jobs/RotoptimizeJob.cpp +++ b/src/slic3r/GUI/Jobs/RotoptimizeJob.cpp @@ -57,8 +57,7 @@ void RotoptimizeJob::process(Ctl &ctl) .print_config(&m_default_print_cfg) .statucb([this, &prev_status, &ctl/*, &statustxt*/](int s) { - if (s > 0 && s < 100) - ; +// if (s > 0 && s < 100) // ctl.update_status(prev_status + s / m_selected_object_ids.size(), // statustxt); diff --git a/src/slic3r/GUI/Jobs/SendJob.cpp b/src/slic3r/GUI/Jobs/SendJob.cpp index 65660605460..cb9f87e95a1 100644 --- a/src/slic3r/GUI/Jobs/SendJob.cpp +++ b/src/slic3r/GUI/Jobs/SendJob.cpp @@ -67,9 +67,6 @@ wxString SendJob::get_http_error_msg(unsigned int status, std::string body) if (!j["message"].is_null()) message = j["message"].get(); } - switch (status) { - ; - } } catch (...) { ; @@ -109,9 +106,7 @@ void SendJob::process(Ctl &ctl) std::string msg; int curr_percent = 10; NetworkAgent* m_agent = wxGetApp().getAgent(); - AppConfig* config = wxGetApp().app_config; int result = -1; - unsigned int http_code; std::string http_body; if (this->connection_type == "lan") { diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp index bda65536b54..56a575a3503 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.cpp +++ b/src/slic3r/GUI/KBShortcutsDialog.cpp @@ -95,8 +95,8 @@ void KBShortcutsDialog::OnSelectTabel(wxCommandEvent &event) while (i != m_hash_selector.end()) { Select *sel = i->second; if (id == sel->m_index) { - sel->m_tab_button->SetBackgroundColour(StateColor::darkModeColorFor(wxColour("#FFFFFF"))); - sel->m_tab_text->SetBackgroundColour(StateColor::darkModeColorFor(wxColour("#FFFFFF"))); + sel->m_tab_button->SetBackgroundColour(StateColor::darkModeColorFor(wxColour("#BFE1DE"))); // ORCA color for selected tab background + sel->m_tab_text->SetBackgroundColour(StateColor::darkModeColorFor(wxColour("#BFE1DE"))); // ORCA color for selected tab background sel->m_tab_text->SetFont(::Label::Head_13); sel->m_tab_button->Refresh(); sel->m_tab_text->Refresh(); @@ -183,11 +183,7 @@ 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 + { ctrl + L("Shift+G"), L("Print plate")}, // Edit { ctrl + "X", L("Cut") }, @@ -226,16 +222,9 @@ void KBShortcutsDialog::fill_shortcuts() {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.")}, {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")}, - {L("⌘+Left mouse button"), L("Select multiple objects")}, - #else - {L("Ctrl+Any arrow"), L("Movement in camera space")}, - {L("Alt+Left mouse button"), L("Select a part")}, - {L("Ctrl+Left mouse button"), L("Select multiple objects")}, - - #endif + { ctrl + L("Any arrow"), L("Movement in camera space")}, + { alt + L("Left mouse button"), L("Select a part")}, + { ctrl + L("Left mouse button"), L("Select multiple objects")}, {L("Shift+Left mouse button"), L("Select objects by rectangle")}, {L("Arrow Up"), L("Move selection 10 mm in positive Y direction")}, {L("Arrow Down"), L("Move selection 10 mm in negative Y direction")}, @@ -274,13 +263,8 @@ void KBShortcutsDialog::fill_shortcuts() Shortcuts gizmos_shortcuts = { {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")}, - #else - {L("Ctrl+Mouse wheel"), L("Support/Color Painting: adjust pen radius")}, - {L("Alt+Mouse wheel"), L("Support/Color Painting: adjust section position")}, - #endif + { ctrl + L("Mouse wheel"), L("Support/Color Painting: adjust pen radius")}, + { alt + L("Mouse wheel"), L("Support/Color Painting: adjust section position")}, }; m_full_shortcuts.push_back({{_L("Gizmo"), ""}, gizmos_shortcuts}); @@ -311,13 +295,8 @@ void KBShortcutsDialog::fill_shortcuts() { "Tab", L("Switch between Prepare/Preview") }, {L("Shift+Any arrow"), L("Move slider 5x faster")}, {L("Shift+Mouse wheel"), L("Move slider 5x faster")}, - #ifdef __APPLE__ - {L("⌘+Any arrow"), L("Move slider 5x faster")}, - {L("⌘+Mouse wheel"), L("Move slider 5x faster")}, - #else - {L("Ctrl+Any arrow"), L("Move slider 5x faster")}, - {L("Ctrl+Mouse wheel"), L("Move slider 5x faster")}, - #endif + { ctrl + L("Any arrow"), L("Move slider 5x faster")}, + { ctrl + L("Mouse wheel"), L("Move slider 5x faster")}, { L("Home"), L("Horizontal slider - Move to start position")}, { L("End"), L("Horizontal slider - Move to last position")}, }; diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 2f59daffbb3..9a48e320d1b 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -743,7 +743,6 @@ void MainFrame::update_layout() if (m_layout != ESettingsLayout::Unknown) restore_to_creation(); - ESettingsLayout old_layout = m_layout; m_layout = layout; // From the very beginning the Print settings should be selected @@ -1488,7 +1487,6 @@ bool MainFrame::can_reslice() const wxBoxSizer* MainFrame::create_side_tools() { enable_multi_machine = wxGetApp().is_enable_multi_machine(); - int em = em_unit(); wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL); m_slice_select = eSlicePlate; @@ -1779,7 +1777,7 @@ wxBoxSizer* MainFrame::create_side_tools() aux_btn->Bind(wxEVT_BUTTON, [](auto e) { wxGetApp().sidebar().show_auxiliary_dialog(); }); - sizer->Add(aux_btn, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, 1 * em / 10); + sizer->Add(aux_btn, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, 1 * em_unit() / 10); */ sizer->Add(FromDIP(19), 0, 0, 0, 0); @@ -1924,9 +1922,6 @@ bool MainFrame::get_enable_print_status() void MainFrame::update_side_button_style() { - // BBS - int em = em_unit(); - /*m_slice_btn->SetLayoutStyle(1); m_slice_btn->SetTextLayout(SideButton::EHorizontalOrientation::HO_Center, FromDIP(15)); m_slice_btn->SetMinSize(wxSize(-1, FromDIP(24))); @@ -2188,9 +2183,6 @@ static void add_common_publish_menu_items(wxMenu* publish_menu, MainFrame* mainF return; } - json j; - NetworkAgent* agent = GUI::wxGetApp().getAgent(); - //if (GUI::wxGetApp().plater()->model().objects.empty()) return; wxGetApp().open_publish_page_dialog(); }); @@ -2588,13 +2580,13 @@ void MainFrame::init_menubar_as_editor() //BBS perspective view wxWindowID camera_id_base = wxWindow::NewControlId(int(wxID_CAMERA_COUNT)); - auto perspective_item = append_menu_radio_item(viewMenu, wxID_CAMERA_PERSPECTIVE + camera_id_base, _L("Use Perspective View"), _L("Use Perspective View"), + append_menu_radio_item(viewMenu, wxID_CAMERA_PERSPECTIVE + camera_id_base, _L("Use Perspective View"), _L("Use Perspective View"), [this](wxCommandEvent&) { wxGetApp().app_config->set_bool("use_perspective_camera", true); wxGetApp().update_ui_from_settings(); }, nullptr); //BBS orthogonal view - auto orthogonal_item = append_menu_radio_item(viewMenu, wxID_CAMERA_ORTHOGONAL + camera_id_base, _L("Use Orthogonal View"), _L("Use Orthogonal View"), + append_menu_radio_item(viewMenu, wxID_CAMERA_ORTHOGONAL + camera_id_base, _L("Use Orthogonal View"), _L("Use Orthogonal View"), [this](wxCommandEvent&) { wxGetApp().app_config->set_bool("use_perspective_camera", false); wxGetApp().update_ui_from_settings(); @@ -2669,7 +2661,8 @@ void MainFrame::init_menubar_as_editor() //auto preference_item = new wxMenuItem(parent_menu, OrcaSlicerMenuPreferences + 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") + "\t" + ctrl + "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"), ""); @@ -3100,10 +3093,6 @@ void MainFrame::init_menubar_as_gcodeviewer() void MainFrame::update_menubar() { - if (wxGetApp().is_gcode_viewer()) - return; - - const bool is_fff = plater()->printer_technology() == ptFFF; } void MainFrame::reslice_now() @@ -3179,7 +3168,6 @@ void MainFrame::load_config_file() cfiles.push_back(into_u8(file)); m_last_config = file; } - bool update = false; wxGetApp().preset_bundle->import_presets(cfiles, [this](std::string const & name) { ConfigsOverwriteConfirmDialog dlg(this, from_u8(name), false); int res = dlg.ShowModal(); @@ -3749,7 +3737,6 @@ void MainFrame::on_select_default_preset(SimpleEvent& evt) wxICON_INFORMATION); /* get setting list */ - NetworkAgent* agent = wxGetApp().getAgent(); switch ( dialog.ShowModal() ) { case wxID_YES: { diff --git a/src/slic3r/GUI/MediaFilePanel.cpp b/src/slic3r/GUI/MediaFilePanel.cpp index b2032b09adc..faa694090b1 100644 --- a/src/slic3r/GUI/MediaFilePanel.cpp +++ b/src/slic3r/GUI/MediaFilePanel.cpp @@ -328,7 +328,6 @@ void MediaFilePanel::SetMachineObject(MachineObject* obj) MessageDialog(this, m, _L("Download failed"), wxOK | wxICON_ERROR).ShowModal(); }); - NetworkAgent* agent = wxGetApp().getAgent(); if (result > 1 || result == 0) { json j; j["code"] = result; @@ -576,7 +575,7 @@ void MediaFilePanel::doAction(size_t index, int action) } else { MessageDialog dlg(this, _L("The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer and export a new .gcode.3mf file."), wxEmptyString, wxICON_WARNING | wxOK); - auto res = dlg.ShowModal(); + dlg.ShowModal(); } }); diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp index 36500f69fa0..da70eeff654 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.cpp +++ b/src/slic3r/GUI/MediaPlayCtrl.cpp @@ -67,7 +67,7 @@ MediaPlayCtrl::MediaPlayCtrl(wxWindow *parent, wxMediaCtrl2 *media_ctrl, const w auto ip = str.find(' ', ik); if (ip == wxString::npos) ip = str.Length(); auto v = str.Mid(ik, ip - ik); - if (k == "T:" && v.Length() == 8) { + if (strcmp(k, "T:") == 0 && v.Length() == 8) { long h = 0,m = 0,s = 0; v.Left(2).ToLong(&h); v.Mid(3, 2).ToLong(&m); @@ -389,7 +389,7 @@ void MediaPlayCtrl::Stop(wxString const &msg) } auto tunnel = m_url.empty() ? "" : into_u8(wxURI(m_url).GetPath()).substr(1); - if (auto n = tunnel.find_first_of('/_'); n != std::string::npos) + if (auto n = tunnel.find_first_of("/_"); n != std::string::npos) tunnel = tunnel.substr(0, n); if (last_state != wxMEDIASTATE_PLAYING && m_failed_code != 0 && m_last_failed_codes.find(m_failed_code) == m_last_failed_codes.end() @@ -734,7 +734,7 @@ bool MediaPlayCtrl::start_stream_service(bool *need_install) auto file_dll = tools_dir + dll; auto file_dll2 = plugins_dir + dll; if (!boost::filesystem::exists(file_dll) || boost::filesystem::last_write_time(file_dll) != boost::filesystem::last_write_time(file_dll2)) - boost::filesystem::copy_file(file_dll2, file_dll, boost::filesystem::copy_option::overwrite_if_exists); + boost::filesystem::copy_file(file_dll2, file_dll, boost::filesystem::copy_options::overwrite_existing); } boost::process::child process_source(file_source, file_url2.ToStdWstring(), boost::process::start_dir(tools_dir), boost::process::windows::create_no_window, diff --git a/src/slic3r/GUI/ModelMall.cpp b/src/slic3r/GUI/ModelMall.cpp index f14de1ebf0b..45833ba80c0 100644 --- a/src/slic3r/GUI/ModelMall.cpp +++ b/src/slic3r/GUI/ModelMall.cpp @@ -133,7 +133,7 @@ namespace GUI { } } - catch (std::exception& e) { + catch (std::exception&) { // wxMessageBox(e.what(), "json Exception", MB_OK); } } diff --git a/src/slic3r/GUI/Monitor.cpp b/src/slic3r/GUI/Monitor.cpp index 333f4d3de00..3bcc0ce224a 100644 --- a/src/slic3r/GUI/Monitor.cpp +++ b/src/slic3r/GUI/Monitor.cpp @@ -114,7 +114,7 @@ AddMachinePanel::~AddMachinePanel() { m_side_tools->get_panel()->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(MonitorPanel::on_printer_clicked), NULL, this); - Bind(wxEVT_TIMER, &MonitorPanel::on_timer, this); + Bind(wxEVT_TIMER, [this](wxTimerEvent&) { on_timer(); }); Bind(wxEVT_SIZE, &MonitorPanel::on_size, this); Bind(wxEVT_COMMAND_CHOICE_SELECTED, &MonitorPanel::on_select_printer, this); @@ -160,7 +160,7 @@ MonitorPanel::~MonitorPanel() m_refresh_timer = new wxTimer(); m_refresh_timer->SetOwner(this); m_refresh_timer->Start(REFRESH_INTERVAL); - wxPostEvent(this, wxTimerEvent()); + on_timer(); Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (!dev) return; @@ -272,7 +272,7 @@ void MonitorPanel::on_update_all(wxMouseEvent &event) } } - void MonitorPanel::on_timer(wxTimerEvent& event) +void MonitorPanel::on_timer() { if (update_flag) { update_all(); @@ -306,9 +306,6 @@ void MonitorPanel::on_update_all(wxMouseEvent &event) void MonitorPanel::on_printer_clicked(wxMouseEvent &event) { - auto mouse_pos = ClientToScreen(event.GetPosition()); - wxPoint rect = m_side_tools->ClientToScreen(wxPoint(0, 0)); - if (!m_side_tools->is_in_interval()) { wxPoint pos = m_side_tools->ClientToScreen(wxPoint(0, 0)); pos.y += m_side_tools->GetRect().height; @@ -434,7 +431,6 @@ bool MonitorPanel::Show(bool show) wxGetApp().mainframe->SetMinSize(wxGetApp().plater()->GetMinSize()); #endif - NetworkAgent* m_agent = wxGetApp().getAgent(); DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (show) { start_update(); @@ -442,7 +438,7 @@ bool MonitorPanel::Show(bool show) m_refresh_timer->Stop(); m_refresh_timer->SetOwner(this); m_refresh_timer->Start(REFRESH_INTERVAL); - wxPostEvent(this, wxTimerEvent()); + on_timer(); if (dev) { //set a default machine when obj is null @@ -485,7 +481,6 @@ void MonitorPanel::show_status(int status) if (!m_initialized) return; 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) { diff --git a/src/slic3r/GUI/Monitor.hpp b/src/slic3r/GUI/Monitor.hpp index 8da56ddc3b8..761b059a0a5 100644 --- a/src/slic3r/GUI/Monitor.hpp +++ b/src/slic3r/GUI/Monitor.hpp @@ -133,7 +133,7 @@ class MonitorPanel : public wxPanel StatusPanel* get_status_panel() {return m_status_info_panel;}; void select_machine(std::string machine_sn); void on_update_all(wxMouseEvent &event); - void on_timer(wxTimerEvent& event); + void on_timer(); void on_select_printer(wxCommandEvent& event); void on_printer_clicked(wxMouseEvent &event); void on_size(wxSizeEvent &event); diff --git a/src/slic3r/GUI/MonitorBasePanel.cpp b/src/slic3r/GUI/MonitorBasePanel.cpp index 553b8f0993f..24760577a6b 100644 --- a/src/slic3r/GUI/MonitorBasePanel.cpp +++ b/src/slic3r/GUI/MonitorBasePanel.cpp @@ -6,7 +6,6 @@ /////////////////////////////////////////////////////////////////////////// #include "MonitorBasePanel.h" -#include "Printer/PrinterFileSystem.h" #include "Widgets/Label.hpp" /////////////////////////////////////////////////////////////////////////// @@ -21,7 +20,7 @@ MonitorBasePanel::MonitorBasePanel(wxWindow* parent, wxWindowID id, const wxPoin m_splitter = new wxSplitterWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D | wxSP_BORDER); m_splitter->SetSashGravity(0); - m_splitter->SetSashSize(0); + m_splitter->SetSashInvisible(); m_splitter->Connect(wxEVT_IDLE, wxIdleEventHandler(MonitorBasePanel::m_splitterOnIdle), NULL, this); m_splitter->SetMinimumPaneSize(182); @@ -281,7 +280,7 @@ VideoMonitoringBasePanel::~VideoMonitoringBasePanel() // PLEASE DO *NOT* EDIT THIS FILE! /////////////////////////////////////////////////////////////////////////// -#include "MonitorBasePanel.h" +//#include "MonitorBasePanel.h" /////////////////////////////////////////////////////////////////////////// using namespace Slic3r::GUI; diff --git a/src/slic3r/GUI/MultiMachine.hpp b/src/slic3r/GUI/MultiMachine.hpp index 48a6ed41806..04ff304bca7 100644 --- a/src/slic3r/GUI/MultiMachine.hpp +++ b/src/slic3r/GUI/MultiMachine.hpp @@ -9,16 +9,16 @@ namespace Slic3r { namespace GUI { -#define DEVICE_ITEM_MAX_WIDTH 900 -#define SEND_ITEM_MAX_HEIGHT 30 -#define DEVICE_ITEM_MAX_HEIGHT 50 +#define DEVICE_ITEM_MAX_WIDTH 900 +#define SEND_ITEM_MAX_HEIGHT 30 +#define DEVICE_ITEM_MAX_HEIGHT 50 #define TABLE_HEAR_NORMAL_COLOUR wxColour(238, 238, 238) #define TABLE_HEAD_PRESSED_COLOUR wxColour(150, 150, 150) #define CTRL_BUTTON_NORMAL_COLOUR wxColour(255, 255, 255) #define CTRL_BUTTON_PRESSEN_COLOUR wxColour(150, 150, 150) #define TABLE_HEAD_FONT Label::Body_13 -#define ICON_SIZE FromDIP(16) +#define MM_ICON_SIZE FromDIP(16) class DeviceItem : public wxWindow { diff --git a/src/slic3r/GUI/MultiMachineManagerPage.cpp b/src/slic3r/GUI/MultiMachineManagerPage.cpp index b37810f07f4..9a112d32c35 100644 --- a/src/slic3r/GUI/MultiMachineManagerPage.cpp +++ b/src/slic3r/GUI/MultiMachineManagerPage.cpp @@ -320,7 +320,7 @@ MultiMachineManagerPage::MultiMachineManagerPage(wxWindow* parent) m_table_head_panel->SetBackgroundColour(TABLE_HEAR_NORMAL_COLOUR); m_table_head_sizer = new wxBoxSizer(wxHORIZONTAL); - m_printer_name = new Button(m_table_head_panel, _L("Device Name"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_printer_name = new Button(m_table_head_panel, _L("Device Name"), "toolbar_double_directional_arrow", wxNO_BORDER, MM_ICON_SIZE); m_printer_name->SetBackgroundColor(head_bg); m_printer_name->SetFont(TABLE_HEAD_FONT); m_printer_name->SetCornerRadius(0); @@ -343,7 +343,7 @@ MultiMachineManagerPage::MultiMachineManagerPage(wxWindow* parent) }); - m_task_name = new Button(m_table_head_panel, _L("Task Name"), "", wxNO_BORDER, ICON_SIZE); + m_task_name = new Button(m_table_head_panel, _L("Task Name"), "", wxNO_BORDER, MM_ICON_SIZE); m_task_name->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); m_task_name->SetFont(TABLE_HEAD_FONT); m_task_name->SetCornerRadius(0); @@ -353,7 +353,7 @@ MultiMachineManagerPage::MultiMachineManagerPage(wxWindow* parent) - m_status = new Button(m_table_head_panel, _L("Device Status"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_status = new Button(m_table_head_panel, _L("Device Status"), "toolbar_double_directional_arrow", wxNO_BORDER, MM_ICON_SIZE); m_status->SetBackgroundColor(head_bg); m_status->SetFont(TABLE_HEAD_FONT); m_status->SetCornerRadius(0); @@ -376,7 +376,7 @@ MultiMachineManagerPage::MultiMachineManagerPage(wxWindow* parent) }); - m_action = new Button(m_table_head_panel, _L("Actions"), "", wxNO_BORDER, ICON_SIZE, false); + m_action = new Button(m_table_head_panel, _L("Actions"), "", wxNO_BORDER, MM_ICON_SIZE, false); m_action->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); m_action->SetFont(TABLE_HEAD_FONT); m_action->SetCornerRadius(0); @@ -523,7 +523,7 @@ MultiMachineManagerPage::MultiMachineManagerPage(wxWindow* parent) Layout(); Fit(); - Bind(wxEVT_TIMER, &MultiMachineManagerPage::on_timer, this); + Bind(wxEVT_TIMER, [this](wxTimerEvent&) { on_timer(); }); } void MultiMachineManagerPage::update_page() @@ -676,7 +676,7 @@ void MultiMachineManagerPage::start_timer() m_flipping_timer->SetOwner(this); m_flipping_timer->Start(1000); - wxPostEvent(this, wxTimerEvent()); + on_timer(); } void MultiMachineManagerPage::update_page_number() @@ -688,7 +688,7 @@ void MultiMachineManagerPage::update_page_number() st_page_number->SetLabel(number); } -void MultiMachineManagerPage::on_timer(wxTimerEvent& event) +void MultiMachineManagerPage::on_timer() { m_flipping_timer->Stop(); if (btn_last_page) diff --git a/src/slic3r/GUI/MultiMachineManagerPage.hpp b/src/slic3r/GUI/MultiMachineManagerPage.hpp index c1086b47211..55eb500540d 100644 --- a/src/slic3r/GUI/MultiMachineManagerPage.hpp +++ b/src/slic3r/GUI/MultiMachineManagerPage.hpp @@ -55,7 +55,7 @@ class MultiMachineManagerPage : public wxPanel void start_timer(); void update_page_number(); - void on_timer(wxTimerEvent& event); + void on_timer(); void clear_page(); void page_num_enter_evt(); diff --git a/src/slic3r/GUI/MultiMachinePage.cpp b/src/slic3r/GUI/MultiMachinePage.cpp index 9aed022ba33..cb1fea926d6 100644 --- a/src/slic3r/GUI/MultiMachinePage.cpp +++ b/src/slic3r/GUI/MultiMachinePage.cpp @@ -19,7 +19,7 @@ MultiMachinePage::MultiMachinePage(wxWindow* parent, wxWindowID id, const wxPoin wxGetApp().UpdateDarkUIWin(this); init_timer(); - Bind(wxEVT_TIMER, &MultiMachinePage::on_timer, this); + Bind(wxEVT_TIMER, [this](wxTimerEvent&) { on_timer(); }); } MultiMachinePage::~MultiMachinePage() @@ -59,7 +59,7 @@ bool MultiMachinePage::Show(bool show) m_refresh_timer->Stop(); m_refresh_timer->SetOwner(this); m_refresh_timer->Start(2000); - wxPostEvent(this, wxTimerEvent()); + on_timer(); } else { m_refresh_timer->Stop(); @@ -97,7 +97,7 @@ void MultiMachinePage::init_timer() //wxPostEvent(this, wxTimerEvent()); } -void MultiMachinePage::on_timer(wxTimerEvent& event) +void MultiMachinePage::on_timer() { m_local_task_manager->update_page(); m_cloud_task_manager->update_page(); diff --git a/src/slic3r/GUI/MultiMachinePage.hpp b/src/slic3r/GUI/MultiMachinePage.hpp index 0572c30d1be..7e948fa4790 100644 --- a/src/slic3r/GUI/MultiMachinePage.hpp +++ b/src/slic3r/GUI/MultiMachinePage.hpp @@ -41,7 +41,7 @@ class MultiMachinePage : public wxPanel void init_tabpanel(); void init_timer(); - void on_timer(wxTimerEvent& event); + void on_timer(); void clear_page(); }; diff --git a/src/slic3r/GUI/MultiTaskManagerPage.cpp b/src/slic3r/GUI/MultiTaskManagerPage.cpp index f2d159a7dea..3d295eb97c0 100644 --- a/src/slic3r/GUI/MultiTaskManagerPage.cpp +++ b/src/slic3r/GUI/MultiTaskManagerPage.cpp @@ -4,7 +4,6 @@ #include "GUI_App.hpp" #include "MainFrame.hpp" #include "Widgets/RadioBox.hpp" -#include #include namespace Slic3r { @@ -574,7 +573,7 @@ LocalTaskManagerPage::LocalTaskManagerPage(wxWindow* parent) }); - m_task_name = new Button(m_table_head_panel, _L("Task Name"), "", wxNO_BORDER, ICON_SIZE); + m_task_name = new Button(m_table_head_panel, _L("Task Name"), "", wxNO_BORDER, MM_ICON_SIZE); m_task_name->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); m_task_name->SetFont(TABLE_HEAD_FONT); m_task_name->SetCornerRadius(0); @@ -583,7 +582,7 @@ LocalTaskManagerPage::LocalTaskManagerPage(wxWindow* parent) m_task_name->SetCenter(false); m_table_head_sizer->Add(m_task_name, 0, wxALIGN_CENTER_VERTICAL, 0); - m_printer_name = new Button(m_table_head_panel, _L("Device Name"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_printer_name = new Button(m_table_head_panel, _L("Device Name"), "toolbar_double_directional_arrow", wxNO_BORDER, MM_ICON_SIZE); m_printer_name->SetBackgroundColor(head_bg); m_printer_name->SetFont(TABLE_HEAD_FONT); m_printer_name->SetCornerRadius(0); @@ -603,7 +602,7 @@ LocalTaskManagerPage::LocalTaskManagerPage(wxWindow* parent) }); m_table_head_sizer->Add(m_printer_name, 0, wxALIGN_CENTER_VERTICAL, 0); - m_status = new Button(m_table_head_panel, _L("Task Status"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_status = new Button(m_table_head_panel, _L("Task Status"), "toolbar_double_directional_arrow", wxNO_BORDER, MM_ICON_SIZE); m_status->SetBackgroundColor(head_bg); m_status->SetFont(TABLE_HEAD_FONT); m_status->SetCornerRadius(0); @@ -623,7 +622,7 @@ LocalTaskManagerPage::LocalTaskManagerPage(wxWindow* parent) }); m_table_head_sizer->Add(m_status, 0, wxALIGN_CENTER_VERTICAL, 0); - m_info = new Button(m_table_head_panel, _L("Info"), "", wxNO_BORDER, ICON_SIZE); + m_info = new Button(m_table_head_panel, _L("Info"), "", wxNO_BORDER, MM_ICON_SIZE); m_info->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); m_info->SetFont(TABLE_HEAD_FONT); m_info->SetCornerRadius(0); @@ -632,7 +631,7 @@ LocalTaskManagerPage::LocalTaskManagerPage(wxWindow* parent) m_info->SetCenter(false); m_table_head_sizer->Add(m_info, 0, wxALIGN_CENTER_VERTICAL, 0); - m_send_time = new Button(m_table_head_panel, _L("Sent Time"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE, false); + m_send_time = new Button(m_table_head_panel, _L("Sent Time"), "toolbar_double_directional_arrow", wxNO_BORDER, MM_ICON_SIZE, false); m_send_time->SetBackgroundColor(head_bg); m_send_time->SetFont(TABLE_HEAD_FONT); m_send_time->SetCornerRadius(0); @@ -652,7 +651,7 @@ LocalTaskManagerPage::LocalTaskManagerPage(wxWindow* parent) }); m_table_head_sizer->Add(m_send_time, 0, wxALIGN_CENTER_VERTICAL, 0); - m_action = new Button(m_table_head_panel, _L("Actions"), "", wxNO_BORDER, ICON_SIZE, false); + m_action = new Button(m_table_head_panel, _L("Actions"), "", wxNO_BORDER, MM_ICON_SIZE, false); m_action->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); m_action->SetFont(TABLE_HEAD_FONT); m_action->SetCornerRadius(0); @@ -946,7 +945,7 @@ CloudTaskManagerPage::CloudTaskManagerPage(wxWindow* parent) - m_task_name = new Button(m_table_head_panel, _L("Task Name"), "", wxNO_BORDER, ICON_SIZE); + m_task_name = new Button(m_table_head_panel, _L("Task Name"), "", wxNO_BORDER, MM_ICON_SIZE); m_task_name->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); m_task_name->SetFont(TABLE_HEAD_FONT); m_task_name->SetCornerRadius(0); @@ -955,7 +954,7 @@ CloudTaskManagerPage::CloudTaskManagerPage(wxWindow* parent) m_task_name->SetCenter(false); m_table_head_sizer->Add(m_task_name, 0, wxALIGN_CENTER_VERTICAL, 0); - m_printer_name = new Button(m_table_head_panel, _L("Device Name"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_printer_name = new Button(m_table_head_panel, _L("Device Name"), "toolbar_double_directional_arrow", wxNO_BORDER, MM_ICON_SIZE); m_printer_name->SetBackgroundColor(head_bg); m_printer_name->SetFont(TABLE_HEAD_FONT); m_printer_name->SetCornerRadius(0); @@ -975,7 +974,7 @@ CloudTaskManagerPage::CloudTaskManagerPage(wxWindow* parent) }); m_table_head_sizer->Add(m_printer_name, 0, wxALIGN_CENTER_VERTICAL, 0); - m_status = new Button(m_table_head_panel, _L("Task Status"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_status = new Button(m_table_head_panel, _L("Task Status"), "toolbar_double_directional_arrow", wxNO_BORDER, MM_ICON_SIZE); m_status->SetBackgroundColor(head_bg); m_status->SetFont(TABLE_HEAD_FONT); m_status->SetCornerRadius(0); @@ -995,7 +994,7 @@ CloudTaskManagerPage::CloudTaskManagerPage(wxWindow* parent) }); m_table_head_sizer->Add(m_status, 0, wxALIGN_CENTER_VERTICAL, 0); - m_info = new Button(m_table_head_panel, _L("Info"), "", wxNO_BORDER, ICON_SIZE); + m_info = new Button(m_table_head_panel, _L("Info"), "", wxNO_BORDER, MM_ICON_SIZE); m_info->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); m_info->SetFont(TABLE_HEAD_FONT); m_info->SetCornerRadius(0); @@ -1004,7 +1003,7 @@ CloudTaskManagerPage::CloudTaskManagerPage(wxWindow* parent) m_info->SetCenter(false); m_table_head_sizer->Add(m_info, 0, wxALIGN_CENTER_VERTICAL, 0); - m_send_time = new Button(m_table_head_panel, _L("Sent Time"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE, false); + m_send_time = new Button(m_table_head_panel, _L("Sent Time"), "toolbar_double_directional_arrow", wxNO_BORDER, MM_ICON_SIZE, false); m_send_time->SetBackgroundColor(head_bg); m_send_time->SetFont(TABLE_HEAD_FONT); m_send_time->SetCornerRadius(0); @@ -1024,7 +1023,7 @@ CloudTaskManagerPage::CloudTaskManagerPage(wxWindow* parent) }); m_table_head_sizer->Add(m_send_time, 0, wxALIGN_CENTER_VERTICAL, 0); - m_action = new Button(m_table_head_panel, _L("Actions"), "", wxNO_BORDER, ICON_SIZE, false); + m_action = new Button(m_table_head_panel, _L("Actions"), "", wxNO_BORDER, MM_ICON_SIZE, false); m_action->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); m_action->SetFont(TABLE_HEAD_FONT); m_action->SetCornerRadius(0); @@ -1183,7 +1182,7 @@ CloudTaskManagerPage::CloudTaskManagerPage(wxWindow* parent) page_sizer = new wxBoxSizer(wxVERTICAL); page_sizer->Add(m_main_panel, 1, wxALL | wxEXPAND, FromDIP(25)); - Bind(wxEVT_TIMER, &CloudTaskManagerPage::on_timer, this); + Bind(wxEVT_TIMER, [this](wxTimerEvent&) { on_timer(); }); wxGetApp().UpdateDarkUIWin(this); @@ -1400,10 +1399,10 @@ void CloudTaskManagerPage::start_timer() m_flipping_timer->SetOwner(this); m_flipping_timer->Start(1000); - wxPostEvent(this, wxTimerEvent()); + on_timer(); } -void CloudTaskManagerPage::on_timer(wxTimerEvent& event) +void CloudTaskManagerPage::on_timer() { m_flipping_timer->Stop(); enable_buttons(true); diff --git a/src/slic3r/GUI/MultiTaskManagerPage.hpp b/src/slic3r/GUI/MultiTaskManagerPage.hpp index 0f676d06b3f..b32c670d5e1 100644 --- a/src/slic3r/GUI/MultiTaskManagerPage.hpp +++ b/src/slic3r/GUI/MultiTaskManagerPage.hpp @@ -135,7 +135,7 @@ class CloudTaskManagerPage : public wxPanel bool Show(bool show); void update_page_number(); void start_timer(); - void on_timer(wxTimerEvent& event); + void on_timer(); void pause_all(wxCommandEvent& evt); void resume_all(wxCommandEvent& evt); diff --git a/src/slic3r/GUI/Notebook.hpp b/src/slic3r/GUI/Notebook.hpp index 7e6e94da3a2..5ef90a97021 100644 --- a/src/slic3r/GUI/Notebook.hpp +++ b/src/slic3r/GUI/Notebook.hpp @@ -194,8 +194,6 @@ class Notebook: public wxBookCtrlBase // check that only the selected page is visible and others are hidden: for (size_t page = 0; page < m_pages.size(); page++) { - wxWindow* win_a = GetPage(page); - wxWindow* win_b = GetPage(n); if (page != n && GetPage(page) != GetPage(n)) { m_pages[page]->Hide(); } diff --git a/src/slic3r/GUI/NotificationManager.cpp b/src/slic3r/GUI/NotificationManager.cpp index 08ef8c7493b..685058bbb33 100644 --- a/src/slic3r/GUI/NotificationManager.cpp +++ b/src/slic3r/GUI/NotificationManager.cpp @@ -857,7 +857,7 @@ void NotificationManager::PopNotification::bbl_render_block_notif_buttons(ImGuiW void NotificationManager::PopNotification::bbl_render_block_notif_left_sign(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) { - auto window = ImGui::GetCurrentWindow(); + // auto window = ImGui::GetCurrentWindow(); //window->DrawList->AddImage(user_texture_id, bb.Min + padding + margin, bb.Max - padding - margin, uv0, uv1, ImGui::GetColorU32(tint_col)); std::wstring text; diff --git a/src/slic3r/GUI/OG_CustomCtrl.cpp b/src/slic3r/GUI/OG_CustomCtrl.cpp index dadde84ebcf..6fa75d7895f 100644 --- a/src/slic3r/GUI/OG_CustomCtrl.cpp +++ b/src/slic3r/GUI/OG_CustomCtrl.cpp @@ -405,7 +405,6 @@ void OG_CustomCtrl::OnMotion(wxMouseEvent& event) // Set tooltips with information for each icon // BBS: markdown tip if (!markdowntip.empty()) { - wxWindow* window = GetGrandParent(); assert(focusedLine); wxPoint pos2 = { 250, focusedLine->rect_label.y }; pos2 = ClientToScreen(pos2); diff --git a/src/slic3r/GUI/ObjColorDialog.cpp b/src/slic3r/GUI/ObjColorDialog.cpp index 648faffbf9c..7ac8d20bd32 100644 --- a/src/slic3r/GUI/ObjColorDialog.cpp +++ b/src/slic3r/GUI/ObjColorDialog.cpp @@ -1,9 +1,6 @@ #include -#include -//#include "libslic3r/FlushVolCalc.hpp" #include "ObjColorDialog.hpp" #include "BitmapCache.hpp" -#include "GUI.hpp" #include "I18N.hpp" #include "GUI_App.hpp" #include "MsgDialog.hpp" @@ -244,7 +241,6 @@ ObjColorPanel::ObjColorPanel(wxWindow * parent, } //end first cluster //draw ui - auto sizer_width = FromDIP(300); // Create two switched panels with their own sizers m_sizer_simple = new wxBoxSizer(wxVERTICAL); m_page_simple = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); @@ -674,7 +670,6 @@ void ObjColorPanel::draw_table() m_scrolledWindow->SetSizer(m_gridsizer); int totalHeight = row_height *(row+1) * 2; m_scrolledWindow->SetVirtualSize(MIN_OBJCOLOR_DIALOG_WIDTH, totalHeight); - auto look = FIX_SCROLL_HEIGTH; if (totalHeight > FIX_SCROLL_HEIGTH) { m_scrolledWindow->SetMinSize(wxSize(MIN_OBJCOLOR_DIALOG_WIDTH, FIX_SCROLL_HEIGTH)); m_scrolledWindow->SetMaxSize(wxSize(MIN_OBJCOLOR_DIALOG_WIDTH, FIX_SCROLL_HEIGTH)); diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp index 4a1299b119b..febc326dff8 100644 --- a/src/slic3r/GUI/OptionsGroup.cpp +++ b/src/slic3r/GUI/OptionsGroup.cpp @@ -9,12 +9,8 @@ #include "Widgets/StaticLine.hpp" #include -#include #include -#include -#include #include "libslic3r/Exception.hpp" -#include "libslic3r/Utils.hpp" #include "libslic3r/AppConfig.hpp" #include "I18N.hpp" #include @@ -483,7 +479,7 @@ bool OptionsGroup::activate(std::function throw_if_canceled/* = [](){}*/ // BBS: new layout ::StaticLine* stl = new ::StaticLine(m_parent, false, _(title), icon); stl->SetFont(Label::Head_14); - stl->SetForegroundColour("#262E30"); + stl->SetForegroundColour("#363636"); // ORCA Match Parameters title color with tab title color sizer = new wxBoxSizer(wxVERTICAL); if (title.IsEmpty()) { stl->Hide(); diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index c4dfc651b96..99ec73a42a9 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -1536,9 +1536,6 @@ std::vector PartPlate::get_extruders_without_support(bool conside_custom_gc return plate_extruders; } - // if 3mf file - const DynamicPrintConfig& glb_config = wxGetApp().preset_bundle->prints.get_edited_preset().config; - for (int obj_idx = 0; obj_idx < m_model->objects.size(); obj_idx++) { if (!contain_instance_totally(obj_idx, 0)) continue; @@ -1597,14 +1594,14 @@ Vec3d PartPlate::estimate_wipe_tower_size(const DynamicPrintConfig & config, con { Vec3d wipe_tower_size; - double layer_height = 0.08f; // hard code layer height + // double layer_height = 0.08f; // hard code layer height double max_height = 0.f; wipe_tower_size.setZero(); wipe_tower_size(0) = w; - const ConfigOption* layer_height_opt = config.option("layer_height"); - if (layer_height_opt) - layer_height = layer_height_opt->getFloat(); + // const ConfigOption* layer_height_opt = config.option("layer_height"); + // if (layer_height_opt) + // layer_height = layer_height_opt->getFloat(); // empty plate if (plate_extruder_size == 0) @@ -1652,7 +1649,6 @@ Vec3d PartPlate::estimate_wipe_tower_size(const DynamicPrintConfig & config, con // If wipe tower height is between the current and next member, set the min_depth as linear interpolation between them auto next_height_to_depth = *iter; if (next_height_to_depth.first > max_height) { - float height_base = curr_height_to_depth.first; float height_diff = next_height_to_depth.first - curr_height_to_depth.first; float min_depth_base = curr_height_to_depth.second; float depth_diff = next_height_to_depth.second - curr_height_to_depth.second; @@ -2041,7 +2037,6 @@ bool PartPlate::intersect_instance(int obj_id, int instance_id, BoundingBoxf3* b if (m_printable) { ModelObject* object = m_model->objects[obj_id]; - ModelInstance* instance = object->instances[instance_id]; BoundingBoxf3 instance_box = bounding_box? *bounding_box: object->instance_convex_hull_bounding_box(instance_id); result = get_plate_box().intersects(instance_box); } @@ -2065,7 +2060,6 @@ bool PartPlate::is_left_top_of(int obj_id, int instance_id) } ModelObject* object = m_model->objects[obj_id]; - ModelInstance* instance = object->instances[instance_id]; std::pair pair(obj_id, instance_id); BoundingBoxf3 instance_box = object->instance_convex_hull_bounding_box(instance_id); @@ -2461,7 +2455,7 @@ void PartPlate::generate_print_polygon(ExPolygon &print_polygon) { auto compute_points = [&print_polygon](Vec2d& center, double radius, double start_angle, double stop_angle, int count) { - double angle, angle_steps; + double angle_steps; angle_steps = (stop_angle - start_angle) / (count - 1); for(int j = 0; j < count; j++ ) { @@ -2480,7 +2474,7 @@ void PartPlate::generate_print_polygon(ExPolygon &print_polygon) { const Vec2d& p = m_shape[i]; Vec2d center; - double start_angle, stop_angle, angle_steps, radius_x, radius_y, radius; + double start_angle, stop_angle, radius_x, radius_y, radius; switch (i) { case 0: radius = 5.f; @@ -2531,7 +2525,7 @@ void PartPlate::generate_exclude_polygon(ExPolygon &exclude_polygon) { auto compute_exclude_points = [&exclude_polygon](Vec2d& center, double radius, double start_angle, double stop_angle, int count) { - double angle, angle_steps; + double angle_steps; angle_steps = (stop_angle - start_angle) / (count - 1); for(int j = 0; j < count; j++ ) { @@ -2550,7 +2544,7 @@ void PartPlate::generate_exclude_polygon(ExPolygon &exclude_polygon) { const Vec2d& p = m_exclude_area[i]; Vec2d center; - double start_angle, stop_angle, angle_steps, radius_x, radius_y, radius; + double start_angle, stop_angle, radius; switch (i) { case 0: radius = 5.f; @@ -3065,7 +3059,7 @@ void PartPlate::update_first_layer_print_sequence(size_t filament_nums) void PartPlate::print() const { - unsigned int count=0; + // unsigned int count=0; BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << boost::format(": plate index %1%, pointer %2%, print_index %3% print pointer %4%") % m_plate_index % this % m_print_index % m_print; BOOST_LOG_TRIVIAL(trace) << boost::format("\t origin {%1%,%2%,%3%}, width %4%, depth %5%, height %6%") % m_origin.x() % m_origin.y() % m_origin.z() % m_width % m_depth % m_height; @@ -4092,8 +4086,7 @@ int PartPlateList::find_instance_belongs(int obj_id, int instance_id) //newly added or modified int PartPlateList::notify_instance_update(int obj_id, int instance_id, bool is_new) { - int ret = 0, index; - PartPlate* plate = NULL; + int index; ModelObject* object = NULL; if ((obj_id >= 0) && (obj_id < m_model->objects.size())) @@ -4122,7 +4115,7 @@ int PartPlateList::notify_instance_update(int obj_id, int instance_id, bool is_n { //found it added before BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": found it in previous plate %1%") % index; - plate = m_plate_list[index]; + PartPlate* plate = m_plate_list[index]; if (!plate->intersect_instance(obj_id, instance_id, &boundingbox)) { //not include anymore, remove it from original plate @@ -4227,7 +4220,7 @@ int PartPlateList::notify_instance_update(int obj_id, int instance_id, bool is_n //notify instance is removed int PartPlateList::notify_instance_removed(int obj_id, int instance_id) { - int ret = 0, index, instance_to_delete = instance_id; + int index, instance_to_delete = instance_id; PartPlate* plate = NULL; BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": obj_id %1%, instance_id %2%") % obj_id % instance_id; @@ -4325,7 +4318,6 @@ int PartPlateList::reload_all_objects(bool except_locked, int plate_index) ModelObject* object = m_model->objects[i]; for (j = 0; j < (unsigned int)object->instances.size(); ++j) { - ModelInstance* instance = object->instances[j]; BoundingBoxf3 boundingbox = object->instance_convex_hull_bounding_box(j); for (k = 0; k < (unsigned int)m_plate_list.size(); ++k) { @@ -4376,9 +4368,7 @@ int PartPlateList::construct_objects_list_for_new_plate(int plate_index) ModelObject* object = m_model->objects[i]; for (j = 0; j < (unsigned int)object->instances.size(); ++j) { - ModelInstance* instance = object->instances[j]; already_included = false; - for (k = 0; k < (unsigned int)plate_index; ++k) { PartPlate* plate = m_plate_list[k]; @@ -4552,7 +4542,6 @@ bool PartPlateList::preprocess_nonprefered_areas(arrangement::ArrangePolygons& r nonprefered_regions.emplace_back(Vec2d{ 18,0 }, Vec2d{ 240,15 }); // new extrusion & hand-eye calibration region //has exclude areas - PartPlate* plate = m_plate_list[0]; for (int index = 0; index < nonprefered_regions.size(); index++) { Polygon ap = scaled(nonprefered_regions[index]).polygon(); @@ -4779,11 +4768,8 @@ void PartPlateList::set_render_option(bool bedtype_texture, bool plate_settings) int PartPlateList::select_plate_by_obj(int obj_index, int instance_index) { - int ret = 0, index; - PartPlate* plate = NULL; - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": obj_id %1%, instance_id %2%") % obj_index % instance_index; - index = find_instance(obj_index, instance_index); + int index = find_instance(obj_index, instance_index); if (index != -1) { //found it in plate @@ -4821,8 +4807,6 @@ bool PartPlateList::set_shapes(const Pointfs& shape, const Pointfs& exclude_area m_height_to_lid = height_to_lid; m_height_to_rod = height_to_rod; - double stride_x = plate_stride_x(); - double stride_y = plate_stride_y(); for (unsigned int i = 0; i < (unsigned int)m_plate_list.size(); ++i) { PartPlate* plate = m_plate_list[i]; @@ -5384,14 +5368,12 @@ void PartPlateList::BedTextureInfo::TexturePart::update_buffer() rectangle.push_back(Vec2d(x, y+h)); ExPolygon poly; - for (int i = 0; i < 4; i++) { - const Vec2d & p = rectangle[i]; - for (auto& p : rectangle) { - Vec2d pp = Vec2d(p.x() + offset.x(), p.y() + offset.y()); - poly.contour.append({ scale_(pp(0)), scale_(pp(1)) }); - } + for (const auto& p : rectangle) { + Vec2d pp = Vec2d(p.x() + offset.x(), p.y() + offset.y()); + poly.contour.append({ scale_(pp(0)), scale_(pp(1)) }); } + if (!buffer) buffer = new GLModel(); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index e810c4d7f71..7de59dee2af 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -396,10 +396,9 @@ Sidebar::priv::~priv() void Sidebar::priv::show_preset_comboboxes() { - const bool showSLA = wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() == ptSLA; - //BBS #if 0 + const bool showSLA = wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() == ptSLA; for (size_t i = 0; i < 4; ++i) sizer_presets->Show(i, !showSLA); @@ -545,7 +544,7 @@ std::vector get_min_flush_volumes(const DynamicPrintConfig& full_config) // Sidebar / public -static struct DynamicFilamentList : DynamicList +struct DynamicFilamentList : DynamicList { std::vector> items; @@ -590,13 +589,69 @@ static struct DynamicFilamentList : DynamicList } DynamicList::update(); } -} dynamic_filament_list; +}; + +struct DynamicFilamentList1Based : DynamicFilamentList +{ + void apply_on(Choice *c) override + { + if (items.empty()) + update(true); + auto cb = dynamic_cast(c->window); + auto n = cb->GetSelection(); + cb->Clear(); + for (auto i : items) { + cb->Append(i.first, *i.second); + } + if (n < cb->GetCount()) + cb->SetSelection(n); + } + wxString get_value(int index) override + { + wxString str; + str << index+1; + return str; + } + int index_of(wxString value) override + { + long n = 0; + if(!value.ToLong(&n)) + return -1; + --n; + return (n >= 0 && n <= items.size()) ? int(n) : -1; + } + void update(bool force = false) + { + items.clear(); + if (!force && m_choices.empty()) + return; + auto icons = get_extruder_color_icons(true); + auto presets = wxGetApp().preset_bundle->filament_presets; + for (int i = 0; i < presets.size(); ++i) { + wxString str; + std::string type; + wxGetApp().preset_bundle->filaments.find_preset(presets[i])->get_filament_type(type); + str << type; + items.push_back({str, icons[i]}); + } + DynamicList::update(); + } + +}; + + +static DynamicFilamentList dynamic_filament_list; +static DynamicFilamentList1Based dynamic_filament_list_1_based; Sidebar::Sidebar(Plater *parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(42 * wxGetApp().em_unit(), -1)), p(new priv(parent)) { Choice::register_dynamic_list("support_filament", &dynamic_filament_list); Choice::register_dynamic_list("support_interface_filament", &dynamic_filament_list); + Choice::register_dynamic_list("wall_filament", &dynamic_filament_list_1_based); + Choice::register_dynamic_list("sparse_infill_filament", &dynamic_filament_list_1_based); + Choice::register_dynamic_list("solid_infill_filament", &dynamic_filament_list_1_based); + Choice::register_dynamic_list("wipe_tower_filament", &dynamic_filament_list); p->scrolled = new wxPanel(this); // p->scrolled->SetScrollbars(0, 100, 1, 2); // ys_DELETE_after_testing. pixelsPerUnitY = 100 @@ -834,7 +889,7 @@ Sidebar::Sidebar(Plater *parent) p->m_flushing_volume_btn->SetPaddingSize(wxSize(FromDIP(8),FromDIP(3))); p->m_flushing_volume_btn->SetCornerRadius(FromDIP(8)); - StateColor flush_bg_col(std::pair(wxColour(219, 253, 231), StateColor::Pressed), + StateColor flush_bg_col(std::pair(wxColour("#BFE1DE"), StateColor::Pressed), // ORCA std::pair(wxColour(238, 238, 238), StateColor::Hovered), std::pair(wxColour(238, 238, 238), StateColor::Normal)); @@ -886,8 +941,8 @@ Sidebar::Sidebar(Plater *parent) ScalableButton* add_btn = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "add_filament"); add_btn->SetToolTip(_L("Add one filament")); add_btn->Bind(wxEVT_BUTTON, [this, scrolled_sizer](wxCommandEvent& e){ - // Orca: limit filament choices to 64 - if (p->combos_filament.size() >= 64) + // Orca: limit filament choices to MAXIMUM_EXTRUDER_NUMBER + if (p->combos_filament.size() >= MAXIMUM_EXTRUDER_NUMBER) return; int filament_count = p->combos_filament.size() + 1; @@ -1102,7 +1157,7 @@ void Sidebar::init_filament_combo(PlaterPresetComboBox **combo, const int filame auto combo_and_btn_sizer = new wxBoxSizer(wxHORIZONTAL); // BBS: filament double columns - int em = wxGetApp().em_unit(); + // int em = wxGetApp().em_unit(); combo_and_btn_sizer->Add(FromDIP(8), 0, 0, 0, 0 ); (*combo)->clr_picker->SetLabel(wxString::Format("%d", filament_idx + 1)); combo_and_btn_sizer->Add((*combo)->clr_picker, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(3)); @@ -1224,6 +1279,8 @@ void Sidebar::update_all_preset_comboboxes() p->m_filament_icon->SetBitmap_("filament"); } + show_SEMM_buttons(cfg.opt_bool("single_extruder_multi_material")); + //p->m_staticText_filament_settings->Update(); @@ -1268,7 +1325,6 @@ void Sidebar::update_all_preset_comboboxes() void Sidebar::update_presets(Preset::Type preset_type) { PresetBundle &preset_bundle = *wxGetApp().preset_bundle; - const auto print_tech = preset_bundle.printers.get_edited_preset().printer_technology(); BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": enter, preset_type %1%")%preset_type; switch (preset_type) { @@ -1276,6 +1332,7 @@ void Sidebar::update_presets(Preset::Type preset_type) { // BBS #if 0 + const auto print_tech = preset_bundle.printers.get_edited_preset().printer_technology(); const size_t extruder_cnt = print_tech != ptFFF ? 1 : dynamic_cast(preset_bundle.printers.get_edited_preset().config.option("nozzle_diameter"))->values.size(); const size_t filament_cnt = p->combos_filament.size() > extruder_cnt ? extruder_cnt : p->combos_filament.size(); @@ -1328,6 +1385,7 @@ void Sidebar::update_presets(Preset::Type preset_type) Tab* printer_tab = wxGetApp().get_tab(Preset::TYPE_PRINTER); if (printer_tab) { printer_tab->update(); + printer_tab->on_preset_loaded(); } Preset& printer_preset = wxGetApp().preset_bundle->printers.get_edited_preset(); @@ -1583,8 +1641,7 @@ void Sidebar::on_filaments_change(size_t num_filaments) } void Sidebar::add_filament() { - // BBS: limit filament choices to 16 - if (p->combos_filament.size() >= 16) return; + if (p->combos_filament.size() >= MAXIMUM_EXTRUDER_NUMBER) return; wxColour new_col = Plater::get_next_color_for_filament(); add_custom_filament(new_col); } @@ -1608,7 +1665,7 @@ void Sidebar::delete_filament() { } void Sidebar::add_custom_filament(wxColour new_col) { - if (p->combos_filament.size() >= 16) return; + if (p->combos_filament.size() >= MAXIMUM_EXTRUDER_NUMBER) return; int filament_count = p->combos_filament.size() + 1; std::string new_color = new_col.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(); @@ -1731,7 +1788,7 @@ void Sidebar::sync_ams_list() // BBS:Record consumables information before synchronization std::vector color_before_sync; - std::vector is_support_before; + std::vector is_support_before; DynamicPrintConfig& project_config = wxGetApp().preset_bundle->project_config; ConfigOptionStrings* color_opt = project_config.option("filament_colour"); for (int i = 0; i < p->combos_filament.size(); ++i) { @@ -1786,6 +1843,17 @@ void Sidebar::sync_ams_list() Layout(); } +void Sidebar::show_SEMM_buttons(bool bshow) +{ + if(p->m_bpButton_add_filament) + p->m_bpButton_add_filament->Show(bshow); + if(p->m_bpButton_del_filament) + p->m_bpButton_del_filament->Show(bshow); + if (p->m_flushing_volume_btn) + p->m_flushing_volume_btn->Show(bshow); + Layout(); +} + ObjectList* Sidebar::obj_list() { // BBS @@ -1953,18 +2021,13 @@ void Sidebar::auto_calc_flushing_volumes(const int modify_id) { auto& preset_bundle = wxGetApp().preset_bundle; auto& project_config = preset_bundle->project_config; - auto& printer_config = preset_bundle->printers.get_edited_preset().config; const auto& full_config = wxGetApp().preset_bundle->full_config(); auto& ams_multi_color_filament = preset_bundle->ams_multi_color_filment; - auto& ams_filament_list = preset_bundle->filament_ams_list; const std::vector& init_matrix = (project_config.option("flush_volumes_matrix"))->values; - const std::vector& init_extruders = (project_config.option("flush_volumes_vector"))->values; const std::vector& min_flush_volumes= get_min_flush_volumes(full_config); - ConfigOptionFloat* flush_multi_opt = project_config.option("flush_multiplier"); - float flush_multiplier = flush_multi_opt ? flush_multi_opt->getFloat() : 1.f; std::vector matrix = init_matrix; int m_max_flush_volume = Slic3r::g_max_flush_volume; unsigned int m_number_of_extruders = (int)(sqrt(init_matrix.size()) + 0.001); @@ -2703,7 +2766,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) "brim_width", "wall_loops", "wall_filament", "sparse_infill_density", "sparse_infill_filament", "top_shell_layers", "enable_support", "support_filament", "support_interface_filament", "support_top_z_distance", "support_bottom_z_distance", "raft_layers", - "wipe_tower_rotation_angle", "wipe_tower_cone_angle", "wipe_tower_extra_spacing","wipe_tower_max_purge_speed", "wipe_tower_extruder", + "wipe_tower_rotation_angle", "wipe_tower_cone_angle", "wipe_tower_extra_spacing", "wipe_tower_extra_flow", "wipe_tower_max_purge_speed", "wipe_tower_filament", "best_object_pos" })) , sidebar(new Sidebar(q)) @@ -2861,7 +2924,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) wxGLCanvas* view3D_canvas = view3D->get_wxglcanvas(); //BBS: GUI refactor - wxGLCanvas* preview_canvas = preview->get_wxglcanvas(); + // wxGLCanvas* preview_canvas = preview->get_wxglcanvas(); if (wxGetApp().is_editor()) { // 3DScene events: @@ -3579,11 +3642,8 @@ std::vector Plater::priv::load_files(const std::vector& input_ std::string designer_model_id; std::string designer_country_code; - int answer_convert_from_meters = wxOK_DEFAULT; - int answer_convert_from_imperial_units = wxOK_DEFAULT; int tolal_model_count = 0; - int progress_percent = 0; int total_files = input_files.size(); const int stage_percent[IMPORT_STAGE_MAX+1] = { 5, // IMPORT_STAGE_RESTORE @@ -3693,7 +3753,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ int size = extruderIds.size() == 0 ? 0 : *(extruderIds.rbegin()); int filament_size = sidebar->combos_filament().size(); - while (filament_size < 16 && filament_size < size) { + while (filament_size < MAXIMUM_EXTRUDER_NUMBER && filament_size < size) { int filament_count = filament_size + 1; wxColour new_col = Plater::get_next_color_for_filament(); std::string new_color = new_col.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(); @@ -3750,7 +3810,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ wxString text = wxString::Format(_L("The 3mf's version %s is newer than %s's version %s, Found following keys unrecognized:"), file_version.to_string(), std::string(SLIC3R_APP_FULL_NAME), app_version.to_string()); text += "\n"; - bool first = true; + // bool first = true; // std::string context = into_u8(text); wxString context = text; // if (wxGetApp().app_config->get("user_mode") == "develop") { @@ -3856,7 +3916,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ } // Based on the printer technology field found in the loaded config, select the base for the config, - PrinterTechnology printer_technology = Preset::printer_technology(config_loaded); + // PrinterTechnology printer_technology = Preset::printer_technology(config_loaded); config.apply(static_cast(FullPrintConfig::defaults())); // and place the loaded config over the base. @@ -3911,7 +3971,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ MessageDialog dlg(q, _L("The 3mf has following modified G-codes in filament or printer presets:") + warning_message+ _L("Please confirm that these modified G-codes are safe to prevent any damage to the machine!"), _L("Modified G-codes")); dlg.show_dsa_button(); - auto res = dlg.ShowModal(); + dlg.ShowModal(); if (dlg.get_checkbox_state()) wxGetApp().app_config->set("no_warn_when_modified_gcodes", "true"); } @@ -3924,7 +3984,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ //show_info(q, _L("The 3mf has following customized filament or printer presets:") + warning_message + _L("Please confirm that the G-codes within these presets are safe to prevent any damage to the machine!"), _L("Customized Preset")); MessageDialog dlg(q, _L("The 3mf has following customized filament or printer presets:") + from_u8(warning_message)+ _L("Please confirm that the G-codes within these presets are safe to prevent any damage to the machine!"), _L("Customized Preset")); dlg.show_dsa_button(); - auto res = dlg.ShowModal(); + dlg.ShowModal(); if (dlg.get_checkbox_state()) wxGetApp().app_config->set("no_warn_when_modified_gcodes", "true"); } @@ -4427,7 +4487,7 @@ std::vector Plater::priv::load_model_objects(const ModelObjectPtrs& mode #ifndef AUTOPLACEMENT_ON_LOAD // bool need_arrange = false; #endif /* AUTOPLACEMENT_ON_LOAD */ - bool scaled_down = false; + // bool scaled_down = false; std::vector obj_idxs; unsigned int obj_count = model.objects.size(); @@ -4464,15 +4524,15 @@ std::vector Plater::priv::load_model_objects(const ModelObjectPtrs& mode const Vec3d ratio = size.cwiseQuotient(bed_size); const double max_ratio = std::max(ratio(0), ratio(1)); if (max_ratio > 10000) { - MessageDialog dlg(q, _L("Your object appears to be too large, Do you want to scale it down to fit the heat bed automatically?"), _L("Object too large"), - wxICON_QUESTION | wxYES); - int answer = dlg.ShowModal(); + MessageDialog dlg(q, _L("Your object appears to be too large. It will be scaled down to fit the heat bed automatically."), _L("Object too large"), + wxICON_QUESTION | wxOK); + dlg.ShowModal(); // the size of the object is too big -> this could lead to overflow when moving to clipper coordinates, // so scale down the mesh object->scale_mesh_after_creation(1. / max_ratio); object->origin_translation = Vec3d::Zero(); object->center_around_origin(); - scaled_down = true; + // scaled_down = true; break; } else if (max_ratio > 10) { @@ -4481,7 +4541,7 @@ std::vector Plater::priv::load_model_objects(const ModelObjectPtrs& mode int answer = dlg.ShowModal(); if (answer == wxID_YES) { instance->set_scaling_factor(instance->get_scaling_factor() / max_ratio); - scaled_down = true; + // scaled_down = true; } } } @@ -5230,7 +5290,7 @@ unsigned int Plater::priv::update_background_process(bool force_validation, bool process_validation_warning(warning); return_state |= UPDATE_BACKGROUND_PROCESS_INVALID; if (printer_technology == ptFFF) { - const Print* print = background_process.fff_print(); + // const Print* print = background_process.fff_print(); //Polygons polygons; //if (print->config().print_sequence == PrintSequence::ByObject) // Print::sequential_print_clearance_valid(*print, &polygons); @@ -6374,7 +6434,6 @@ void Plater::priv::on_select_bed_type(wxCommandEvent &evt) int selection = combo->GetSelection(); std::string bed_type_name = print_config_def.get("curr_bed_type")->enum_values[selection]; - PresetBundle& preset_bundle = *wxGetApp().preset_bundle; DynamicPrintConfig& proj_config = wxGetApp().preset_bundle->project_config; const t_config_enum_values* keys_map = print_config_def.get("curr_bed_type")->enum_keys_map; @@ -8213,7 +8272,7 @@ void Plater::priv::on_create_filament(SimpleEvent &) update_ui_from_settings(); sidebar->update_all_preset_comboboxes(); CreatePresetSuccessfulDialog success_dlg(wxGetApp().mainframe, SuccessType::FILAMENT); - int res = success_dlg.ShowModal(); + success_dlg.ShowModal(); } } @@ -8325,7 +8384,7 @@ void Plater::priv::take_snapshot(const std::string& snapshot_name, const UndoRed // This is a workaround until we refactor the Wipe Tower position / orientation to live solely inside the Model, not in the Print config. // BBS: add partplate logic if (this->printer_technology == ptFFF) { - const DynamicPrintConfig& config = wxGetApp().preset_bundle->prints.get_edited_preset().config; + // const DynamicPrintConfig& config = wxGetApp().preset_bundle->prints.get_edited_preset().config; const DynamicPrintConfig& proj_cfg = wxGetApp().preset_bundle->project_config; const ConfigOptionFloats* tower_x_opt = proj_cfg.option("wipe_tower_x"); const ConfigOptionFloats* tower_y_opt = proj_cfg.option("wipe_tower_y"); @@ -8435,7 +8494,7 @@ void Plater::priv::undo_redo_to(std::vector::const_iterator // This is a workaround until we refactor the Wipe Tower position / orientation to live solely inside the Model, not in the Print config. // BBS: add partplate logic if (this->printer_technology == ptFFF) { - const DynamicPrintConfig& config = wxGetApp().preset_bundle->prints.get_edited_preset().config; + // const DynamicPrintConfig& config = wxGetApp().preset_bundle->prints.get_edited_preset().config; const DynamicPrintConfig& proj_cfg = wxGetApp().preset_bundle->project_config; const ConfigOptionFloats* tower_x_opt = proj_cfg.option("wipe_tower_x"); const ConfigOptionFloats* tower_y_opt = proj_cfg.option("wipe_tower_y"); @@ -8502,7 +8561,7 @@ void Plater::priv::undo_redo_to(std::vector::const_iterator // This is a workaround until we refactor the Wipe Tower position / orientation to live solely inside the Model, not in the Print config. // BBS: add partplate logic if (this->printer_technology == ptFFF) { - const DynamicPrintConfig& config = wxGetApp().preset_bundle->prints.get_edited_preset().config; + // const DynamicPrintConfig& config = wxGetApp().preset_bundle->prints.get_edited_preset().config; const DynamicPrintConfig& proj_cfg = wxGetApp().preset_bundle->project_config; ConfigOptionFloats* tower_x_opt = const_cast(proj_cfg.option("wipe_tower_x")); ConfigOptionFloats* tower_y_opt = const_cast(proj_cfg.option("wipe_tower_y")); @@ -8683,7 +8742,6 @@ void Plater::priv::record_start_print_preset(std::string action) { } j["record_event"] = action; - NetworkAgent* agent = wxGetApp().getAgent(); } catch (...) { return; @@ -8886,7 +8944,7 @@ void Plater::load_project(wxString const& filename2, // if res is empty no data has been loaded if (!res.empty() && (load_restore || !(strategy & LoadStrategy::Silence))) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " call set_project_filename: " << load_restore ? originfile : filename; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " call set_project_filename: " << (load_restore ? originfile : filename); p->set_project_filename(load_restore ? originfile : filename); if (load_restore && originfile.IsEmpty()) { p->set_project_name(_L("Untitled")); @@ -8968,8 +9026,6 @@ int Plater::save_project(bool saveAs) boost::uintmax_t size = boost::filesystem::file_size(into_path(filename)); j["file_size"] = size; j["file_name"] = std::string(filename.mb_str()); - - NetworkAgent* agent = wxGetApp().getAgent(); } catch (...) {} @@ -9002,7 +9058,7 @@ void Plater::import_model_id(wxString download_info) } } - catch (const std::exception& error) + catch (std::exception&) { //wxString sError = error.what(); } @@ -9043,8 +9099,6 @@ void Plater::import_model_id(wxString download_info) // NetworkAgent* m_agent = Slic3r::GUI::wxGetApp().getAgent(); // if (!m_agent) return; - int res = 0; - unsigned int http_code; std::string http_body; msg = _L("prepare 3mf file..."); @@ -9083,7 +9137,7 @@ void Plater::import_model_id(wxString download_info) if (sFile == filename) is_already_exist = true; } } - catch (const std::exception& error) + catch (std::exception&) { //wxString sError = error.what(); } @@ -9796,7 +9850,6 @@ void Plater::calib_retraction(const Calib_Params& params) add_model(false, Slic3r::resources_dir() + "/calib/retraction/retraction_tower.stl"); auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config; - auto filament_config = &wxGetApp().preset_bundle->filaments.get_edited_preset().config; auto printer_config = &wxGetApp().preset_bundle->printers.get_edited_preset().config; auto obj = model().objects[0]; @@ -10127,7 +10180,7 @@ bool Plater::preview_zip_archive(const boost::filesystem::path& archive_path) std::replace(name.begin(), name.end(), '\\', '/'); // rename if file exists std::string filename = path.filename().string(); - std::string extension = boost::filesystem::extension(path); + std::string extension = path.extension().string(); std::string just_filename = filename.substr(0, filename.size() - extension.size()); std::string final_filename = just_filename; @@ -10433,7 +10486,6 @@ ProjectDropDialog::ProjectDropDialog(const std::string &filename) auto limit_width = m_fname_f->GetSize().GetWidth() - 2; auto current_width = 0; - auto cut_index = 0; auto fstring = wxString(""); auto bstring = wxString(""); @@ -10441,7 +10493,6 @@ ProjectDropDialog::ProjectDropDialog(const std::string &filename) auto file_name = wxString(filename); for (int x = 0; x < file_name.length(); x++) { current_width += m_fname_s->GetTextExtent(file_name[x]).GetWidth(); - cut_index = x; if (current_width > limit_width) { bstring += file_name[x]; @@ -11344,7 +11395,6 @@ void Plater::export_gcode(bool prefer_removable) if (preset_bundle) { j["gcode_printer_model"] = preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle); } - NetworkAgent *agent = wxGetApp().getAgent(); } catch (...) {} } @@ -11454,7 +11504,7 @@ TriangleMesh Plater::combine_mesh_fff(const ModelObject& mo, int instance_id, st std::vector csgmesh; csgmesh.reserve(2 * mo.volumes.size()); - bool has_splitable_volume = csg::model_to_csgmesh(mo, Transform3d::Identity(), std::back_inserter(csgmesh), + csg::model_to_csgmesh(mo, Transform3d::Identity(), std::back_inserter(csgmesh), csg::mpartsPositive | csg::mpartsNegative); std::string fail_msg = _u8L("Unable to perform boolean operation on model meshes. " @@ -11534,9 +11584,9 @@ void Plater::export_stl(bool extended, bool selection_only, bool multi_stls) wxBusyCursor wait; const auto& selection = p->get_selection(); - const auto obj_idx = selection.get_object_idx(); #if EXPORT_WITH_BOOLEAN + const auto obj_idx = selection.get_object_idx(); if (selection_only && (obj_idx == -1 || selection.is_wipe_tower())) return; #else @@ -12299,7 +12349,6 @@ void Plater::record_slice_preset(std::string action) } j["record_event"] = action; - NetworkAgent* agent = wxGetApp().getAgent(); } catch (...) { @@ -12482,7 +12531,7 @@ int Plater::send_gcode(int plate_idx, Export3mfProgressFn proFn) p->m_print_job_data._3mf_path = fs::path(plate->get_tmp_gcode_path()); p->m_print_job_data._3mf_path.replace_extension("3mf"); } - catch (std::exception& e) { + catch (std::exception&) { BOOST_LOG_TRIVIAL(error) << "generate 3mf path failed"; return -1; } @@ -12515,7 +12564,7 @@ int Plater::export_config_3mf(int plate_idx, Export3mfProgressFn proFn) try { p->m_print_job_data._3mf_config_path = fs::path(plate->get_temp_config_3mf_path()); } - catch (std::exception& e) { + catch (std::exception&) { BOOST_LOG_TRIVIAL(error) << "generate 3mf path failed"; return -1; } diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index bda2ab61106..52f0706e897 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -148,6 +148,8 @@ class Sidebar : public wxPanel void load_ams_list(std::string const & device, MachineObject* obj); std::map build_filament_ams_list(MachineObject* obj); void sync_ams_list(); + // Orca + void show_SEMM_buttons(bool bshow); ObjectList* obj_list(); ObjectSettings* obj_settings(); diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 0ba2af116c5..2dad186e464 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -228,13 +228,13 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox( } } - auto check = [this](bool yes_or_no) { + /*auto check = [this](bool yes_or_no) { // if (yes_or_no) // return true; int act_btns = ActionButtons::SAVE; return wxGetApp().check_and_keep_current_preset_changes(_L("Switching application language"), _L("Switching application language while some presets are modified."), act_btns); - }; + };*/ m_current_language_selected = combobox->GetSelection(); if (m_current_language_selected >= 0 && m_current_language_selected < vlist.size()) { @@ -1004,7 +1004,7 @@ void PreferencesDialog::create() SetSizer(main_sizer); Layout(); Fit(); - int screen_height = wxGetDisplaySize().GetY(); + int screen_height = wxDisplay(m_parent).GetClientArea().GetHeight(); if (this->GetSize().GetY() > screen_height) this->SetSize(this->GetSize().GetX() + FromDIP(40), screen_height * 4 / 5); diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp index e634c4fe1a3..a710668d713 100644 --- a/src/slic3r/GUI/PresetComboBoxes.cpp +++ b/src/slic3r/GUI/PresetComboBoxes.cpp @@ -401,7 +401,7 @@ void PresetComboBox::add_ams_filaments(std::string selected, bool alias_name) auto color = tray.opt_string("filament_colour", 0u); auto name = tray.opt_string("tray_name", 0u); wxBitmap bmp(*get_extruder_color_icon(color, name, 24, 16)); - int item_id = Append(get_preset_name(*iter), bmp.ConvertToImage(), &m_first_ams_filament + entry.first); + Append(get_preset_name(*iter), bmp.ConvertToImage(), &m_first_ams_filament + entry.first); //validate_selection(id->value == selected); // can not select } m_last_ams_filament = GetCount(); @@ -668,7 +668,6 @@ PlaterPresetComboBox::PlaterPresetComboBox(wxWindow *parent, Preset::Type preset // BBS if (m_type == Preset::TYPE_FILAMENT) { - int em = wxGetApp().em_unit(); clr_picker = new wxBitmapButton(parent, wxID_ANY, {}, wxDefaultPosition, wxSize(FromDIP(20), FromDIP(20)), wxBU_EXACTFIT | wxBU_AUTODRAW | wxBORDER_NONE); clr_picker->SetToolTip(_L("Click to pick filament color")); clr_picker->Bind(wxEVT_BUTTON, [this](wxCommandEvent& e) { @@ -803,7 +802,6 @@ bool PlaterPresetComboBox::switch_to_tab() wxGetApp().params_dialog()->Popup(); tab->restore_last_select_item(); - const Preset* selected_filament_preset = nullptr; if (m_type == Preset::TYPE_FILAMENT) { const std::string& selected_preset = GetString(GetSelection()).ToUTF8().data(); @@ -983,7 +981,6 @@ void PlaterPresetComboBox::update() if (!preset.is_visible || (!preset.is_compatible && !is_selected)) continue; - bool single_bar = false; if (m_type == Preset::TYPE_FILAMENT) { #if 0 @@ -991,7 +988,7 @@ void PlaterPresetComboBox::update() filament_rgb = is_selected ? selected_filament_preset->config.opt_string("filament_colour", 0) : preset.config.opt_string("filament_colour", 0); extruder_rgb = (is_selected && !filament_color.empty()) ? filament_color : filament_rgb; - single_bar = filament_rgb == extruder_rgb; + bool single_bar = filament_rgb == extruder_rgb; bitmap_key += single_bar ? filament_rgb : filament_rgb + extruder_rgb; #endif @@ -1479,8 +1476,6 @@ void GUI::CalibrateFilamentComboBox::update() this->Clear(); invalidate_selection(); - const Preset* selected_filament_preset = nullptr; - m_nonsys_presets.clear(); m_system_presets.clear(); diff --git a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp index 8d272057f8d..f406553b0c2 100644 --- a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp +++ b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp @@ -548,7 +548,6 @@ 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) diff --git a/src/slic3r/GUI/PrinterWebView.cpp b/src/slic3r/GUI/PrinterWebView.cpp index b67a8dc34a6..952cf892de1 100644 --- a/src/slic3r/GUI/PrinterWebView.cpp +++ b/src/slic3r/GUI/PrinterWebView.cpp @@ -1,11 +1,9 @@ #include "PrinterWebView.hpp" #include "I18N.hpp" -#include "slic3r/GUI/PrinterWebView.hpp" #include "slic3r/GUI/wxExtensions.hpp" #include "slic3r/GUI/GUI_App.hpp" #include "slic3r/GUI/MainFrame.hpp" -#include "libslic3r_version.h" #include #include @@ -40,6 +38,8 @@ PrinterWebView::PrinterWebView(wxWindow *parent) topsizer->Add(m_browser, wxSizerFlags().Expand().Proportion(1)); + update_mode(); + // Log backend information /* m_browser->GetUserAgent() may lead crash if (wxGetApp().get_mode() == comDevelop) { @@ -85,6 +85,12 @@ void PrinterWebView::reload() { m_browser->Reload(); } + +void PrinterWebView::update_mode() +{ + m_browser->EnableAccessToDevTools(wxGetApp().app_config->get_bool("developer_mode")); +} + /** * Method that retrieves the current state from the web control and updates the * GUI the reflect this current state. diff --git a/src/slic3r/GUI/PrinterWebView.hpp b/src/slic3r/GUI/PrinterWebView.hpp index 070bd4ea978..4b2702a4c89 100644 --- a/src/slic3r/GUI/PrinterWebView.hpp +++ b/src/slic3r/GUI/PrinterWebView.hpp @@ -42,6 +42,7 @@ class PrinterWebView : public wxPanel { void OnError(wxWebViewEvent& evt); void OnLoaded(wxWebViewEvent& evt); void reload(); + void update_mode(); private: void SendAPIKey(); diff --git a/src/slic3r/GUI/Project.cpp b/src/slic3r/GUI/Project.cpp index 003d0e4cdde..e69ba143db9 100644 --- a/src/slic3r/GUI/Project.cpp +++ b/src/slic3r/GUI/Project.cpp @@ -266,7 +266,7 @@ void ProjectPanel::OnScriptMessage(wxWebViewEvent& evt) } } - catch (std::exception& e) { + catch (std::exception&) { // wxMessageBox(e.what(), "json Exception", MB_OK); } } diff --git a/src/slic3r/GUI/Project.hpp b/src/slic3r/GUI/Project.hpp index 99b081527a3..0071685e7d1 100644 --- a/src/slic3r/GUI/Project.hpp +++ b/src/slic3r/GUI/Project.hpp @@ -39,7 +39,7 @@ #define AUFILE_GREY300 wxColour(238, 238, 238) #define AUFILE_GREY200 wxColour(248, 248, 248) #define AUFILE_BRAND wxColour(0, 150, 136) -#define AUFILE_BRAND_TRANSPARENT wxColour(215, 232, 222) +#define AUFILE_BRAND_TRANSPARENT wxColour("#E5F0EE") // ORCA color with %10 opacity //#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)) diff --git a/src/slic3r/GUI/RecenterDialog.cpp b/src/slic3r/GUI/RecenterDialog.cpp index 69477638904..2a923fb1812 100644 --- a/src/slic3r/GUI/RecenterDialog.cpp +++ b/src/slic3r/GUI/RecenterDialog.cpp @@ -86,8 +86,6 @@ void RecenterDialog::OnPaint(wxPaintEvent& event){ } void RecenterDialog::render(wxDC& dc) { - wxSize size = GetSize(); - dc.SetFont(Label::Body_14); dc.SetTextForeground(text_color); wxPoint pos_start = wxPoint(BORDER, BORDER); diff --git a/src/slic3r/GUI/ReleaseNote.cpp b/src/slic3r/GUI/ReleaseNote.cpp index 617397f32f1..5937ff9d375 100644 --- a/src/slic3r/GUI/ReleaseNote.cpp +++ b/src/slic3r/GUI/ReleaseNote.cpp @@ -1375,7 +1375,6 @@ wxString ConfirmBeforeSendDialog::format_text(wxString str, int warp) Label st (this, str); wxString out_txt = str; wxString count_txt = ""; - int new_line_pos = 0; for (int i = 0; i < str.length(); i++) { auto text_size = st.GetTextExtent(count_txt); diff --git a/src/slic3r/GUI/RemovableDriveManager.cpp b/src/slic3r/GUI/RemovableDriveManager.cpp index a26e13448da..a0a68eb05bd 100644 --- a/src/slic3r/GUI/RemovableDriveManager.cpp +++ b/src/slic3r/GUI/RemovableDriveManager.cpp @@ -6,13 +6,9 @@ #include #if _WIN32 -#include #include #include #include - -#include - #else // unix, linux & OSX includes #include diff --git a/src/slic3r/GUI/Search.cpp b/src/slic3r/GUI/Search.cpp index 5579fb7bcff..05958f7ac81 100644 --- a/src/slic3r/GUI/Search.cpp +++ b/src/slic3r/GUI/Search.cpp @@ -435,8 +435,6 @@ void SearchItem::OnPaint(wxPaintEvent &event) auto bold_pair = std::vector>(); - auto index = 0; - auto b_first_list = std::vector(); auto b_second_list = std::vector(); @@ -494,7 +492,7 @@ void SearchItem::OnPaint(wxPaintEvent &event) void SearchItem::on_mouse_enter(wxMouseEvent &evt) { - SetBackgroundColour(StateColor::darkModeColorFor(wxColour(238, 238, 238))); + SetBackgroundColour(StateColor::darkModeColorFor(wxColour("#BFE1DE"))); // ORCA color with %25 opacity Refresh(); } @@ -506,7 +504,7 @@ void SearchItem::on_mouse_leave(wxMouseEvent &evt) void SearchItem::on_mouse_left_down(wxMouseEvent &evt) { - SetBackgroundColour(StateColor::darkModeColorFor(wxColour(228, 228, 228))); + SetBackgroundColour(StateColor::darkModeColorFor(wxColour("#BFE1DE"))); // ORCA color with %25 opacity Refresh(); } @@ -815,9 +813,9 @@ void SearchDialog::OnCheck(wxCommandEvent &event) void SearchDialog::OnMotion(wxMouseEvent &event) { - wxDataViewItem item; - wxDataViewColumn *col; - wxWindow * win = this; + // wxDataViewItem item; + // wxDataViewColumn *col; + // wxWindow * win = this; // search_list->HitTest(wxGetMousePosition() - win->GetScreenPosition(), item, col); // search_list->Select(item); diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 4638a9a4f84..f641769b45a 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -421,7 +421,7 @@ SelectMachinePopup::SelectMachinePopup(wxWindow *parent) m_refresh_timer = new wxTimer(); m_refresh_timer->SetOwner(this); Bind(EVT_UPDATE_USER_MACHINE_LIST, &SelectMachinePopup::update_machine_list, this); - Bind(wxEVT_TIMER, &SelectMachinePopup::on_timer, this); + Bind(wxEVT_TIMER, [this](wxTimerEvent&) { on_timer(); }); Bind(EVT_DISSMISS_MACHINE_LIST, &SelectMachinePopup::on_dissmiss_win, this); } @@ -459,7 +459,7 @@ void SelectMachinePopup::Popup(wxWindow *WXUNUSED(focus)) } } - wxPostEvent(this, wxTimerEvent()); + on_timer(); PopupWindow::Popup(); } @@ -529,7 +529,7 @@ wxWindow *SelectMachinePopup::create_title_panel(wxString text) return m_panel_title_own; } -void SelectMachinePopup::on_timer(wxTimerEvent &event) +void SelectMachinePopup::on_timer() { BOOST_LOG_TRIVIAL(trace) << "SelectMachinePopup on_timer"; wxGetApp().reset_to_active(); @@ -933,7 +933,6 @@ wxString SelectMachineDialog::format_text(wxString &m_msg) wxString out_txt = m_msg; wxString count_txt = ""; - int new_line_pos = 0; for (int i = 0; i < m_msg.length(); i++) { auto text_size = m_statictext_ams_msg->GetTextExtent(count_txt); @@ -2461,9 +2460,6 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) //check blacklist 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); std::string filament_brand; @@ -3319,7 +3315,7 @@ void SelectMachineDialog::on_selection_changed(wxCommandEvent &event) if (m_list[i]->is_lan_mode_printer() && !m_list[i]->has_access_right()) { ConnectPrinterDialog dlg(wxGetApp().mainframe, wxID_ANY, _L("Input access code")); dlg.set_machine_object(m_list[i]); - auto res = dlg.ShowModal(); + dlg.ShowModal(); m_printer_last_select = ""; m_comboBox_printer->SetSelection(-1); m_comboBox_printer->Refresh(); @@ -3369,7 +3365,6 @@ void SelectMachineDialog::on_selection_changed(wxCommandEvent &event) void SelectMachineDialog::update_flow_cali_check(MachineObject* obj) { - auto bed_type = m_plater->get_partplate_list().get_curr_plate()->get_bed_type(true); auto show_cali_tips = true; if (obj && obj->get_printer_arch() == PrinterArch::ARCH_I3) { show_cali_tips = false; } @@ -3706,7 +3701,6 @@ void SelectMachineDialog::reset_ams_material() { MaterialHash::iterator iter = m_materialList.begin(); while (iter != m_materialList.end()) { - int id = iter->first; Material* item = iter->second; MaterialItem* m = item->item; wxString ams_id = "-"; @@ -3988,7 +3982,6 @@ void SelectMachineDialog::reset_and_sync_ams_list() BitmapCache bmcache; MaterialHash::iterator iter = m_materialList.begin(); while (iter != m_materialList.end()) { - int id = iter->first; Material *item = iter->second; item->item->Destroy(); delete item; @@ -4015,7 +4008,6 @@ void SelectMachineDialog::reset_and_sync_ams_list() item->Bind(wxEVT_LEFT_DOWN, [this, item, materials, extruder](wxMouseEvent &e) { MaterialHash::iterator iter = m_materialList.begin(); while (iter != m_materialList.end()) { - int id = iter->first; Material * item = iter->second; MaterialItem *m = item->item; m->on_normal(); @@ -4025,9 +4017,6 @@ void SelectMachineDialog::reset_and_sync_ams_list() m_current_filament_id = extruder; item->on_selected(); - auto mouse_pos = ClientToScreen(e.GetPosition()); - wxPoint rect = item->ClientToScreen(wxPoint(0, 0)); - // update ams data DeviceManager *dev_manager = Slic3r::GUI::wxGetApp().getDeviceManager(); if (!dev_manager) return; @@ -4247,7 +4236,6 @@ void SelectMachineDialog::unify_deal_thumbnail_data(ThumbnailData &input_data, T MaterialHash::iterator iter = m_materialList.begin(); bool is_connect_printer = true; while (iter != m_materialList.end()) { - int id = iter->first; Material * item = iter->second; MaterialItem *m = item->item; if (m->m_ams_name == "-") { @@ -4359,10 +4347,10 @@ void SelectMachineDialog::set_default_normal(const ThumbnailData &data) MachineObject* obj_ = dev_manager->get_selected_machine(); update_flow_cali_check(obj_); +#ifdef __WINDOWS__ wxSize screenSize = wxGetDisplaySize(); auto dialogSize = this->GetSize(); -#ifdef __WINDOWS__ if (screenSize.GetHeight() < dialogSize.GetHeight()) { m_need_adaptation_screen = true; m_scrollable_view->SetScrollRate(0, 5); @@ -4423,7 +4411,6 @@ void SelectMachineDialog::set_default_from_sdcard() //init MaterialItem MaterialHash::iterator iter = m_materialList.begin(); while (iter != m_materialList.end()) { - int id = iter->first; Material* item = iter->second; item->item->Destroy(); delete item; @@ -4446,7 +4433,6 @@ void SelectMachineDialog::set_default_from_sdcard() item->Bind(wxEVT_LEFT_DOWN, [this, item, materials, fo](wxMouseEvent& e) { MaterialHash::iterator iter = m_materialList.begin(); while (iter != m_materialList.end()) { - int id = iter->first; Material* item = iter->second; MaterialItem* m = item->item; m->on_normal(); @@ -4459,9 +4445,6 @@ void SelectMachineDialog::set_default_from_sdcard() catch (...) {} item->on_selected(); - - auto mouse_pos = ClientToScreen(e.GetPosition()); - wxPoint rect = item->ClientToScreen(wxPoint(0, 0)); // update ams data DeviceManager* dev_manager = Slic3r::GUI::wxGetApp().getDeviceManager(); if (!dev_manager) return; @@ -4485,7 +4468,7 @@ void SelectMachineDialog::set_default_from_sdcard() m_mapping_popup.Popup(); } } - }); + }); Material* material_item = new Material(); material_item->id = fo.id; @@ -4512,10 +4495,9 @@ void SelectMachineDialog::set_default_from_sdcard() set_flow_calibration_state(true); +#ifdef __WINDOWS__ wxSize screenSize = wxGetDisplaySize(); auto dialogSize = this->GetSize(); - -#ifdef __WINDOWS__ if (screenSize.GetHeight() < dialogSize.GetHeight()) { m_need_adaptation_screen = true; m_scrollable_view->SetScrollRate(0, 5); @@ -4901,7 +4883,7 @@ void EditDevNameDialog::on_edit_name(wxCommandEvent &e) auto size = GetSize(); dc.DrawBitmap(m_bitmap.bmp(), wxPoint(FromDIP(20), (size.y - m_bitmap.GetBmpSize().y) / 2)); dc.SetFont(::Label::Head_13); - dc.SetTextForeground(wxColour(38, 46, 48)); + dc.SetTextForeground(StateColor::darkModeColorFor(wxColour("#262E30"))); // ORCA fix text not visible on dark theme wxString txt = _L("Bind with Pin Code"); auto txt_size = dc.GetTextExtent(txt); dc.DrawText(txt, wxPoint(FromDIP(40), (size.y - txt_size.y) / 2)); diff --git a/src/slic3r/GUI/SelectMachine.hpp b/src/slic3r/GUI/SelectMachine.hpp index 16da5e05d57..dadc3be6132 100644 --- a/src/slic3r/GUI/SelectMachine.hpp +++ b/src/slic3r/GUI/SelectMachine.hpp @@ -278,7 +278,7 @@ class SelectMachinePopup : public PopupWindow private: void OnLeftUp(wxMouseEvent &event); - void on_timer(wxTimerEvent &event); + void on_timer(); void update_other_devices(); void update_user_devices(); diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index b952420b0d8..baf0773ce7e 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -1104,7 +1104,6 @@ void Selection::move_to_center(const Vec3d& displacement, bool local) if (!m_valid) return; - EMode translation_type = m_mode; //BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": %1%, displacement {%2%, %3%, %4%}") % __LINE__ % displacement(X) % displacement(Y) % displacement(Z); set_caches(); @@ -1125,7 +1124,6 @@ void Selection::move_to_center(const Vec3d& displacement, bool local) else { const Vec3d local_displacement = (m_cache.volumes_data[i].get_instance_rotation_matrix() * m_cache.volumes_data[i].get_instance_scale_matrix() * m_cache.volumes_data[i].get_instance_mirror_matrix()).inverse() * displacement; v.set_volume_offset(m_cache.volumes_data[i].get_volume_position() + local_displacement); - translation_type = Volume; } } } @@ -2179,7 +2177,8 @@ void Selection::update_type() obj_it->second.insert(inst_idx); } - bool requires_disable = false; + // BBL removed functionality below + // bool requires_disable = false; if (!m_valid) m_type = Invalid; @@ -2195,7 +2194,7 @@ void Selection::update_type() else if (first->is_modifier) { m_type = SingleModifier; - requires_disable = true; + // requires_disable = true; } else { @@ -2217,7 +2216,7 @@ void Selection::update_type() else { m_type = SingleVolume; - requires_disable = true; + // requires_disable = true; } } } @@ -2265,7 +2264,7 @@ void Selection::update_type() else if (modifiers_count == (unsigned int)m_list.size()) m_type = MultipleModifier; - requires_disable = true; + // requires_disable = true; } } else if ((selected_instances_count > 1) && (selected_instances_count * model_volumes_count + sla_volumes_count == (unsigned int)m_list.size())) diff --git a/src/slic3r/GUI/SendMultiMachinePage.cpp b/src/slic3r/GUI/SendMultiMachinePage.cpp index bf766d78d02..036409f4d9d 100644 --- a/src/slic3r/GUI/SendMultiMachinePage.cpp +++ b/src/slic3r/GUI/SendMultiMachinePage.cpp @@ -300,7 +300,7 @@ SendMultiMachinePage::SendMultiMachinePage(Plater* plater) m_main_scroll->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {check_fcous_state(this); e.Skip(); }); init_timer(); - Bind(wxEVT_TIMER, &SendMultiMachinePage::on_timer, this); + Bind(wxEVT_TIMER, [this](wxTimerEvent&) { on_timer(); }); wxGetApp().UpdateDlgDarkUI(this); } @@ -451,8 +451,6 @@ BBL::PrintParams SendMultiMachinePage::request_params(MachineObject* obj) auto use_ams = false; AmsRadioSelectorList::Node* node = m_radio_group.GetFirst(); - auto groupid = 0; - while (node) { AmsRadioSelector* rs = node->GetData(); @@ -472,13 +470,11 @@ BBL::PrintParams SendMultiMachinePage::request_params(MachineObject* obj) PrintPrepareData job_data; m_plater->get_print_job_data(&job_data); - - if (&job_data) { - std::string temp_file = Slic3r::resources_dir() + "/check_access_code.txt"; - auto check_access_code_path = temp_file.c_str(); - BOOST_LOG_TRIVIAL(trace) << "sned_job: check_access_code_path = " << check_access_code_path; - job_data._temp_path = fs::path(check_access_code_path); - } + + std::string temp_file = Slic3r::resources_dir() + "/check_access_code.txt"; + auto check_access_code_path = temp_file.c_str(); + BOOST_LOG_TRIVIAL(trace) << "sned_job: check_access_code_path = " << check_access_code_path; + job_data._temp_path = fs::path(check_access_code_path); int curr_plate_idx; if (job_data.plate_idx >= 0) @@ -639,7 +635,7 @@ void SendMultiMachinePage::on_send(wxCommandEvent& event) int result = m_plater->send_gcode(m_print_plate_idx, [this](int export_stage, int current, int total, bool& cancel) { if (m_is_canceled) return; - bool cancelled = false; + // bool cancelled = false; wxString msg = _L("Preparing print job"); //m_status_bar->update_status(msg, cancelled, 10, true); //m_export_3mf_cancel = cancel = cancelled; @@ -738,7 +734,7 @@ bool SendMultiMachinePage::Show(bool show) m_refresh_timer->Stop(); m_refresh_timer->SetOwner(this); m_refresh_timer->Start(4000); - wxPostEvent(this, wxTimerEvent()); + on_timer(); } else { m_refresh_timer->Stop(); @@ -935,7 +931,6 @@ void SendMultiMachinePage::on_set_finish_mapping(wxCommandEvent& evt) if (selection_data_arr.size() == 6) { auto ams_colour = wxColour(wxAtoi(selection_data_arr[0]), wxAtoi(selection_data_arr[1]), wxAtoi(selection_data_arr[2]), wxAtoi(selection_data_arr[3])); - int old_filament_id = (int)wxAtoi(selection_data_arr[5]); int ctype = 0; std::vector material_cols; @@ -1147,7 +1142,7 @@ wxPanel* SendMultiMachinePage::create_page() e.Skip(); }); - m_printer_name = new Button(m_table_head_panel, _L("Device Name"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_printer_name = new Button(m_table_head_panel, _L("Device Name"), "toolbar_double_directional_arrow", wxNO_BORDER, MM_ICON_SIZE); m_printer_name->SetBackgroundColor(head_bg); m_printer_name->SetCornerRadius(0); m_printer_name->SetFont(TABLE_HEAD_FONT); @@ -1169,7 +1164,7 @@ wxPanel* SendMultiMachinePage::create_page() m_table_head_sizer->Add( 0, 0, 0, wxLEFT, FromDIP(10) ); m_table_head_sizer->Add(m_printer_name, 0, wxALIGN_CENTER_VERTICAL, 0); - m_device_status = new Button(m_table_head_panel, _L("Device Status"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_device_status = new Button(m_table_head_panel, _L("Device Status"), "toolbar_double_directional_arrow", wxNO_BORDER, MM_ICON_SIZE); m_device_status->SetBackgroundColor(head_bg); m_device_status->SetFont(TABLE_HEAD_FONT); m_device_status->SetCornerRadius(0); @@ -1212,7 +1207,7 @@ wxPanel* SendMultiMachinePage::create_page() //m_table_head_sizer->Add(m_task_status, 0, wxALIGN_CENTER_VERTICAL, 0); - m_ams = new Button(m_table_head_panel, _L("Ams Status"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE, false); + m_ams = new Button(m_table_head_panel, _L("Ams Status"), "toolbar_double_directional_arrow", wxNO_BORDER, MM_ICON_SIZE, false); m_ams->SetBackgroundColor(head_bg); m_ams->SetCornerRadius(0); m_ams->SetFont(TABLE_HEAD_FONT); @@ -1233,7 +1228,7 @@ wxPanel* SendMultiMachinePage::create_page() }); m_table_head_sizer->Add(m_ams, 0, wxALIGN_CENTER_VERTICAL, 0); - m_refresh_button = new Button(m_table_head_panel, "", "mall_control_refresh", wxNO_BORDER, ICON_SIZE, false); + m_refresh_button = new Button(m_table_head_panel, "", "mall_control_refresh", wxNO_BORDER, MM_ICON_SIZE, false); m_refresh_button->SetBackgroundColor(head_bg); m_refresh_button->SetCornerRadius(0); m_refresh_button->SetFont(TABLE_HEAD_FONT); @@ -1385,7 +1380,6 @@ void SendMultiMachinePage::sync_ams_list() BitmapCache bmcache; MaterialHash::iterator iter = m_material_list.begin(); while (iter != m_material_list.end()) { - int id = iter->first; Material* item = iter->second; item->item->Destroy(); delete item; @@ -1414,7 +1408,6 @@ void SendMultiMachinePage::sync_ams_list() item->Bind(wxEVT_LEFT_DOWN, [this, item, materials, extruder](wxMouseEvent& e) { MaterialHash::iterator iter = m_material_list.begin(); while (iter != m_material_list.end()) { - int id = iter->first; Material* item = iter->second; MaterialItem* m = item->item; m->on_normal(); @@ -1424,9 +1417,6 @@ void SendMultiMachinePage::sync_ams_list() m_current_filament_id = extruder; item->on_selected(); - auto mouse_pos = ClientToScreen(e.GetPosition()); - wxPoint rect = item->ClientToScreen(wxPoint(0, 0)); - // update ams data if (get_value_radio("use_ams")) { if (m_mapping_popup->IsShown()) return; @@ -1656,7 +1646,7 @@ void SendMultiMachinePage::init_timer() m_refresh_timer = new wxTimer(); } -void SendMultiMachinePage::on_timer(wxTimerEvent& event) +void SendMultiMachinePage::on_timer() { for (auto it = m_device_items.begin(); it != m_device_items.end(); it++) { it->second->sync_state(); diff --git a/src/slic3r/GUI/SendMultiMachinePage.hpp b/src/slic3r/GUI/SendMultiMachinePage.hpp index 58014f065c8..c6935f2d644 100644 --- a/src/slic3r/GUI/SendMultiMachinePage.hpp +++ b/src/slic3r/GUI/SendMultiMachinePage.hpp @@ -194,7 +194,7 @@ class SendMultiMachinePage : public DPIDialog void on_set_finish_mapping(wxCommandEvent& evt); void on_rename_click(wxCommandEvent& event); - void on_timer(wxTimerEvent& event); + void on_timer(); void init_timer(); private: diff --git a/src/slic3r/GUI/SendSystemInfoDialog.cpp b/src/slic3r/GUI/SendSystemInfoDialog.cpp index 73de9101c42..3740cbb6903 100644 --- a/src/slic3r/GUI/SendSystemInfoDialog.cpp +++ b/src/slic3r/GUI/SendSystemInfoDialog.cpp @@ -443,7 +443,7 @@ static std::string generate_system_info_json() pt::ptree hw_node; { - hw_node.put("ArchName", wxPlatformInfo::Get().GetArchName()); + hw_node.put("ArchName", wxPlatformInfo::Get().GetBitnessName()); size_t num = std::round(Slic3r::total_physical_memory()/107374100.); hw_node.put("RAM_GiB", std::to_string(num / 10) + "." + std::to_string(num % 10)); } diff --git a/src/slic3r/GUI/SendToPrinter.cpp b/src/slic3r/GUI/SendToPrinter.cpp index 7d0fb5663cd..51b6797a5f6 100644 --- a/src/slic3r/GUI/SendToPrinter.cpp +++ b/src/slic3r/GUI/SendToPrinter.cpp @@ -59,7 +59,6 @@ wxString SendToPrinterDialog::format_text(wxString &m_msg) wxString out_txt = m_msg; wxString count_txt = ""; - int new_line_pos = 0; for (int i = 0; i < m_msg.length(); i++) { auto text_size = m_statictext_printer_msg->GetTextExtent(count_txt); @@ -1338,11 +1337,6 @@ void SendToPrinterDialog::set_default() Layout(); Fit(); - - wxSize screenSize = wxGetDisplaySize(); - auto dialogSize = this->GetSize(); - - // basic info auto aprint_stats = m_plater->get_partplate_list().get_current_fff_print().print_statistics(); wxString time; diff --git a/src/slic3r/GUI/SlicingProgressNotification.cpp b/src/slic3r/GUI/SlicingProgressNotification.cpp index bedcbc2eb7c..219950ceff2 100644 --- a/src/slic3r/GUI/SlicingProgressNotification.cpp +++ b/src/slic3r/GUI/SlicingProgressNotification.cpp @@ -224,8 +224,8 @@ void NotificationManager::SlicingProgressNotification::render(GLCanvas3D& canvas const float progress_panel_width = (m_window_width - 2 * progress_child_window_padding.x); const float progress_panel_height = (58.0f * scale); const float dailytips_panel_width = (m_window_width - 2 * dailytips_child_window_padding.x); - const float gcodeviewer_height = wxGetApp().plater()->get_preview_canvas3D()->get_gcode_viewer().get_legend_height(); - //const float dailytips_panel_height = std::min(380.0f * scale, std::max(90.0f, (cnv_size.get_height() - gcodeviewer_height - progress_panel_height - dailytips_child_window_padding.y - initial_y - m_line_height * 4))); + // const float gcodeviewer_height = wxGetApp().plater()->get_preview_canvas3D()->get_gcode_viewer().get_legend_height(); + // const float dailytips_panel_height = std::min(380.0f * scale, std::max(90.0f, (cnv_size.get_height() - gcodeviewer_height - progress_panel_height - dailytips_child_window_padding.y - initial_y - m_line_height * 4))); const float dailytips_panel_height = 125.0f * scale; float right_gap = right_margin + (move_from_overlay ? overlay_width + m_line_height * 5 : 0); diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 2a7ff21b767..d4b1148df34 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -291,7 +291,6 @@ void PrintingTaskPanel::create_panel(wxWindow* parent) }); m_button_pause_resume->Bind(wxEVT_LEAVE_WINDOW, [this](auto &e) { - auto buf = m_button_pause_resume->GetClientData(); if (m_button_pause_resume->GetToolTipText() == _L("Pause")) { m_button_pause_resume->SetBitmap_("print_control_pause"); } @@ -2528,7 +2527,7 @@ void StatusPanel::update_misc_ctrl(MachineObject *obj) } bool light_on = obj->chamber_light != MachineObject::LIGHT_EFFECT::LIGHT_EFFECT_OFF; - BOOST_LOG_TRIVIAL(trace) << "light: " << light_on ? "on" : "off"; + BOOST_LOG_TRIVIAL(trace) << "light: " << (light_on ? "on" : "off"); if (m_switch_lamp_timeout > 0) m_switch_lamp_timeout--; else { @@ -2592,7 +2591,6 @@ void StatusPanel::update_ams(MachineObject *obj) } bool is_support_virtual_tray = obj->ams_support_virtual_tray; - bool is_support_filament_backup = obj->is_support_filament_backup; AMSModel ams_mode = AMSModel::GENERIC_AMS; if (obj) { @@ -2663,9 +2661,6 @@ void StatusPanel::update_ams(MachineObject *obj) std::string curr_ams_id = m_ams_control->GetCurentAms(); std::string curr_can_id = m_ams_control->GetCurrentCan(curr_ams_id); - bool is_vt_tray = false; - if (obj->m_tray_tar == std::to_string(VIRTUAL_TRAY_ID)) - is_vt_tray = true; // set segment 1, 2 if (obj->m_tray_now == std::to_string(VIRTUAL_TRAY_ID) ) { @@ -4907,7 +4902,6 @@ wxBoxSizer *ScoreDialog::get_button_sizer() if (m_upload_status_code == StatusCode::UPLOAD_PROGRESS) { int need_upload_nums = need_upload_images.size(); int upload_nums = 0; - int upload_failed_nums = 0; ProgressDialog *progress_dialog = new ProgressDialog(_L("Upload Pictrues"), _L("Number of images successfully uploaded") + ": " + std::to_string(upload_nums) + "/" + std::to_string(need_upload_nums), need_upload_nums, this); for (std::set>::iterator it = need_upload_images.begin(); it != need_upload_images.end();) { std::pair need_upload = *it; diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 6db2ff4c37e..3bcb4eda28e 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -27,6 +27,7 @@ #include #include #include "libslic3r/libslic3r.h" +#include "slic3r/GUI/OptionsGroup.hpp" #include "wxExtensions.hpp" #include "PresetComboBoxes.hpp" #include @@ -272,7 +273,7 @@ void Tab::create_preset_tab() //search input m_search_item = new StaticBox(m_top_panel); StateColor box_colour(std::pair(*wxWHITE, StateColor::Normal)); - StateColor box_border_colour(std::pair(wxColour(238, 238, 238), StateColor::Normal)); + StateColor box_border_colour(std::pair(wxColour("#DBDBDB"), StateColor::Normal)); // ORCA match border color with other input/combo boxes m_search_item->SetBackgroundColor(box_colour); m_search_item->SetBorderColor(box_border_colour); @@ -301,7 +302,7 @@ void Tab::create_preset_tab() if (m_presets_choice) m_presets_choice->Show(); m_btn_save_preset->Show(); - m_btn_delete_preset->Show(); // ORCA: fixes delete preset button visible while search box focused + m_btn_delete_preset->Show(); // ORCA: fixes delete preset button visible while search box focused m_undo_btn->Show(); // ORCA: fixes revert preset button visible while search box focused m_btn_search->Show(); m_search_item->Hide(); @@ -331,7 +332,7 @@ void Tab::create_preset_tab() m_presets_choice->Hide(); m_btn_save_preset->Hide(); - m_btn_delete_preset->Hide(); // ORCA: fixes delete preset button visible while search box focused + m_btn_delete_preset->Hide(); // ORCA: fixes delete preset button visible while search box focused m_undo_btn->Hide(); // ORCA: fixes revert preset button visible while search box focused m_btn_search->Hide(); m_search_item->Show(); @@ -1221,7 +1222,7 @@ void Tab::msw_rescale() // recreate and set new ImageList for tree_ctrl m_icons->RemoveAll(); m_icons = new wxImageList(m_scaled_icons_list.front().bmp().GetWidth(), m_scaled_icons_list.front().bmp().GetHeight(), false); - for (ScalableBitmap& bmp : m_scaled_icons_list) + // for (ScalableBitmap& bmp : m_scaled_icons_list) //m_icons->Add(bmp.bmp()); m_tabctrl->AssignImageList(m_icons); @@ -1255,7 +1256,7 @@ void Tab::sys_color_changed() // recreate and set new ImageList for tree_ctrl m_icons->RemoveAll(); m_icons = new wxImageList(m_scaled_icons_list.front().bmp().GetWidth(), m_scaled_icons_list.front().bmp().GetHeight(), false); - for (ScalableBitmap& bmp : m_scaled_icons_list) + // for (ScalableBitmap& bmp : m_scaled_icons_list) //m_icons->Add(bmp.bmp()); m_tabctrl->AssignImageList(m_icons); @@ -1431,8 +1432,15 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) } - if (opt_key == "single_extruder_multi_material" || opt_key == "extruders_count" ) - update_wiping_button_visibility(); + if (opt_key == "single_extruder_multi_material" ){ + const auto bSEMM = m_config->opt_bool("single_extruder_multi_material"); + wxGetApp().sidebar().show_SEMM_buttons(bSEMM); + wxGetApp().get_tab(Preset::TYPE_PRINT)->update(); + } + + if(opt_key == "purge_in_prime_tower") + wxGetApp().get_tab(Preset::TYPE_PRINT)->update(); + if (opt_key == "enable_prime_tower") { auto timelapse_type = m_config->option>("timelapse_type"); @@ -1609,19 +1617,6 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) } } - - // -1 means caculate all - auto update_flush_volume = [](int idx = -1) { - if (idx < 0) { - size_t filament_size = wxGetApp().plater()->get_extruder_colors_from_plater_config().size(); - for (size_t i = 0; i < filament_size; ++i) - wxGetApp().plater()->sidebar().auto_calc_flushing_volumes(i); - } - else - wxGetApp().plater()->sidebar().auto_calc_flushing_volumes(idx); - }; - - string opt_key_without_idx = opt_key.substr(0, opt_key.find('#')); if (opt_key_without_idx == "long_retractions_when_cut") { @@ -1645,11 +1640,14 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) } - // BBS -#if 0 - if (opt_key == "extruders_count") - wxGetApp().plater()->on_extruders_change(boost::any_cast(value)); -#endif + //Orca: sync filament num if it's a multi tool printer + if (opt_key == "extruders_count" && !m_config->opt_bool("single_extruder_multi_material")){ + auto num_extruder = boost::any_cast(value); + wxGetApp().preset_bundle->set_num_filaments(num_extruder); + wxGetApp().plater()->on_filaments_change(num_extruder); + wxGetApp().get_tab(Preset::TYPE_PRINT)->update(); + wxGetApp().preset_bundle->export_selections(*wxGetApp().app_config); + } if (m_postpone_update_ui) { // It means that not all values are rolled to the system/last saved values jet. @@ -1658,7 +1656,8 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) } update(); - m_active_page->update_visibility(m_mode, true); + if(m_active_page) + m_active_page->update_visibility(m_mode, true); m_page_view->GetParent()->Layout(); } @@ -1677,14 +1676,16 @@ void Tab::show_timelapse_warning_dialog() { void Tab::update_wiping_button_visibility() { if (m_preset_bundle->printers.get_selected_preset().printer_technology() == ptSLA) return; // ys_FIXME - bool wipe_tower_enabled = dynamic_cast( (m_preset_bundle->prints.get_edited_preset().config ).option("enable_prime_tower"))->value; - bool multiple_extruders = dynamic_cast((m_preset_bundle->printers.get_edited_preset().config).option("nozzle_diameter"))->values.size() > 1; + // Orca: it's not used + // + // bool wipe_tower_enabled = dynamic_cast( (m_preset_bundle->prints.get_edited_preset().config ).option("enable_prime_tower"))->value; + // bool multiple_extruders = dynamic_cast((m_preset_bundle->printers.get_edited_preset().config).option("nozzle_diameter"))->values.size() > 1; + // auto wiping_dialog_button = wxGetApp().sidebar().get_wiping_dialog_button(); + // if (wiping_dialog_button) { + // wiping_dialog_button->Show(wipe_tower_enabled && multiple_extruders); + // wiping_dialog_button->GetParent()->Layout(); + // } - auto wiping_dialog_button = wxGetApp().sidebar().get_wiping_dialog_button(); - if (wiping_dialog_button) { - wiping_dialog_button->Show(wipe_tower_enabled && multiple_extruders); - wiping_dialog_button->GetParent()->Layout(); - } } void Tab::activate_option(const std::string& opt_key, const wxString& category) @@ -2261,22 +2262,7 @@ void TabPrint::build() optgroup->append_single_option_line("tree_support_auto_brim"); optgroup->append_single_option_line("tree_support_brim_width"); - page = add_options_page(L("Others"), "custom-gcode_other"); // ORCA: icon only visible on placeholders - optgroup = page->new_optgroup(L("Skirt"), L"param_skirt"); - optgroup->append_single_option_line("skirt_loops"); - optgroup->append_single_option_line("min_skirt_length"); - optgroup->append_single_option_line("skirt_distance"); - optgroup->append_single_option_line("skirt_height"); - optgroup->append_single_option_line("skirt_speed"); - optgroup->append_single_option_line("draft_shield"); - - optgroup = page->new_optgroup(L("Brim"), L"param_adhension"); - optgroup->append_single_option_line("brim_type", "auto-brim"); - optgroup->append_single_option_line("brim_width", "auto-brim#manual"); - optgroup->append_single_option_line("brim_object_gap", "auto-brim#brim-object-gap"); - optgroup->append_single_option_line("brim_ears_max_angle"); - optgroup->append_single_option_line("brim_ears_detection_length"); - + page = add_options_page(L("Multimaterial"), "custom-gcode_multi_material"); // ORCA: icon only visible on placeholders optgroup = page->new_optgroup(L("Prime tower"), L"param_tower"); optgroup->append_single_option_line("enable_prime_tower"); optgroup->append_single_option_line("prime_tower_width"); @@ -2286,15 +2272,52 @@ void TabPrint::build() optgroup->append_single_option_line("wipe_tower_bridging"); optgroup->append_single_option_line("wipe_tower_cone_angle"); optgroup->append_single_option_line("wipe_tower_extra_spacing"); + optgroup->append_single_option_line("wipe_tower_extra_flow"); optgroup->append_single_option_line("wipe_tower_max_purge_speed"); optgroup->append_single_option_line("wipe_tower_no_sparse_layers"); - // optgroup->append_single_option_line("single_extruder_multi_material_priming"); + optgroup->append_single_option_line("single_extruder_multi_material_priming"); + optgroup = page->new_optgroup(L("Filament for Features")); + optgroup->append_single_option_line("wall_filament"); + optgroup->append_single_option_line("sparse_infill_filament"); + optgroup->append_single_option_line("solid_infill_filament"); + optgroup->append_single_option_line("wipe_tower_filament"); + + optgroup = page->new_optgroup(L("Ooze prevention")); + optgroup->append_single_option_line("ooze_prevention"); + optgroup->append_single_option_line("standby_temperature_delta"); + optgroup->append_single_option_line("preheat_time"); + optgroup->append_single_option_line("preheat_steps"); optgroup = page->new_optgroup(L("Flush options"), L"param_flush"); optgroup->append_single_option_line("flush_into_infill", "reduce-wasting-during-filament-change#wipe-into-infill"); optgroup->append_single_option_line("flush_into_objects", "reduce-wasting-during-filament-change#wipe-into-object"); optgroup->append_single_option_line("flush_into_support", "reduce-wasting-during-filament-change#wipe-into-support-enabled-by-default"); + optgroup = page->new_optgroup(L("Advanced"), L"advanced"); + optgroup->append_single_option_line("interlocking_beam"); + optgroup->append_single_option_line("mmu_segmented_region_max_width"); + optgroup->append_single_option_line("mmu_segmented_region_interlocking_depth"); + optgroup->append_single_option_line("interlocking_beam_width"); + optgroup->append_single_option_line("interlocking_orientation"); + optgroup->append_single_option_line("interlocking_beam_layer_count"); + optgroup->append_single_option_line("interlocking_depth"); + optgroup->append_single_option_line("interlocking_boundary_avoidance"); + +page = add_options_page(L("Others"), "custom-gcode_other"); // ORCA: icon only visible on placeholders + optgroup = page->new_optgroup(L("Skirt"), L"param_skirt"); + optgroup->append_single_option_line("skirt_loops"); + optgroup->append_single_option_line("min_skirt_length"); + optgroup->append_single_option_line("skirt_distance"); + optgroup->append_single_option_line("skirt_height"); + optgroup->append_single_option_line("skirt_speed"); + optgroup->append_single_option_line("draft_shield"); + + optgroup = page->new_optgroup(L("Brim"), L"param_adhension"); + optgroup->append_single_option_line("brim_type", "auto-brim"); + optgroup->append_single_option_line("brim_width", "auto-brim#manual"); + optgroup->append_single_option_line("brim_object_gap", "auto-brim#brim-object-gap"); + optgroup->append_single_option_line("brim_ears_max_angle"); + optgroup->append_single_option_line("brim_ears_detection_length"); optgroup = page->new_optgroup(L("Special mode"), L"param_special"); optgroup->append_single_option_line("slicing_mode"); @@ -2310,16 +2333,6 @@ void TabPrint::build() optgroup->append_single_option_line("fuzzy_skin_thickness"); optgroup->append_single_option_line("fuzzy_skin_first_layer"); - optgroup = page->new_optgroup(L("Advanced"), L"advanced"); - optgroup->append_single_option_line("interlocking_beam"); - // optgroup->append_single_option_line("mmu_segmented_region_max_width"); - optgroup->append_single_option_line("mmu_segmented_region_interlocking_depth"); - optgroup->append_single_option_line("interlocking_beam_width"); - optgroup->append_single_option_line("interlocking_orientation"); - optgroup->append_single_option_line("interlocking_beam_layer_count"); - optgroup->append_single_option_line("interlocking_depth"); - optgroup->append_single_option_line("interlocking_boundary_avoidance"); - optgroup = page->new_optgroup(L("G-code output"), L"param_gcode"); optgroup->append_single_option_line("reduce_infill_retraction"); optgroup->append_single_option_line("gcode_add_line_number"); @@ -2339,13 +2352,13 @@ void TabPrint::build() option.opt.is_code = true; option.opt.height = 15; optgroup->append_single_option_line(option); - page = add_options_page(L("Notes"), "custom-gcode_note"); // ORCA: icon only visible on placeholders + optgroup = page->new_optgroup(L("Notes"), "note", 0); option = optgroup->get_option("notes"); option.opt.full_width = true; option.opt.height = 25;//250; optgroup->append_single_option_line(option); - + #if 0 //page = add_options_page(L("Dependencies"), "advanced.png"); // optgroup = page->new_optgroup(L("Profile dependencies")); @@ -2588,8 +2601,6 @@ void TabPrintModel::update_model_config() // Reset m_config manually because there's no corresponding config in m_parent_tab->m_config for (auto plate_item : m_object_configs) { const DynamicPrintConfig& plate_config = plate_item.second->get(); - BedType plate_bed_type = (BedType)0; - PrintSequence plate_print_seq = (PrintSequence)0; if (!plate_config.has("curr_bed_type")) { // same as global DynamicConfig& global_cfg = wxGetApp().preset_bundle->project_config; @@ -2900,7 +2911,6 @@ void TabPrintPlate::on_value_change(const std::string& opt_key, const boost::any void TabPrintPlate::notify_changed(ObjectBase* object) { - auto plate = dynamic_cast(object); auto objects_list = wxGetApp().obj_list(); wxDataViewItemArray items; objects_list->GetSelections(items); @@ -3223,17 +3233,13 @@ void TabFilament::build() optgroup->append_single_option_line("required_nozzle_HRC"); optgroup->append_single_option_line("default_filament_colour"); optgroup->append_single_option_line("filament_diameter"); - optgroup->append_single_option_line("pellet_flow_coefficient", "pellet-flow-coefficient"); - optgroup->append_single_option_line("filament_flow_ratio"); - - optgroup->append_single_option_line("enable_pressure_advance"); - optgroup->append_single_option_line("pressure_advance"); optgroup->append_single_option_line("filament_density"); optgroup->append_single_option_line("filament_shrink"); optgroup->append_single_option_line("filament_cost"); //BBS optgroup->append_single_option_line("temperature_vitrification"); + optgroup->append_single_option_line("idle_temperature"); Line line = { L("Recommended nozzle temperature"), L("Recommended nozzle temperature range of this filament. 0 means no set") }; line.append_option(optgroup->get_option("nozzle_temperature_range_low")); line.append_option(optgroup->get_option("nozzle_temperature_range_high")); @@ -3249,6 +3255,25 @@ void TabFilament::build() on_value_change(opt_key, value); }; + // Orca: New section to focus on flow rate and PA to declutter general section + optgroup = page->new_optgroup(L("Flow ratio and Pressure Advance"), L"param_information"); + optgroup->append_single_option_line("pellet_flow_coefficient", "pellet-flow-coefficient"); + optgroup->append_single_option_line("filament_flow_ratio"); + + optgroup->append_single_option_line("enable_pressure_advance"); + optgroup->append_single_option_line("pressure_advance"); + + // Orca: adaptive pressure advance and calibration model + optgroup->append_single_option_line("adaptive_pressure_advance"); + optgroup->append_single_option_line("adaptive_pressure_advance_overhangs"); + optgroup->append_single_option_line("adaptive_pressure_advance_bridges"); + + option = optgroup->get_option("adaptive_pressure_advance_model"); + option.opt.full_width = true; + option.opt.is_code = true; + option.opt.height = 15; + optgroup->append_single_option_line(option); + // optgroup = page->new_optgroup(L("Print chamber temperature"), L"param_chamber_temp"); optgroup->append_single_option_line("chamber_temperature", "chamber-temperature"); @@ -3418,7 +3443,8 @@ void TabFilament::build() optgroup->append_single_option_line("filament_cooling_moves", "semm"); optgroup->append_single_option_line("filament_cooling_initial_speed", "semm"); optgroup->append_single_option_line("filament_cooling_final_speed", "semm"); - + optgroup->append_single_option_line("filament_stamping_loading_speed"); + optgroup->append_single_option_line("filament_stamping_distance"); create_line_with_widget(optgroup.get(), "filament_ramming_parameters", "", [this](wxWindow* parent) { auto ramming_dialog_btn = new wxButton(parent, wxID_ANY, _(L("Ramming settings"))+dots, wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT); wxGetApp().UpdateDarkUI(ramming_dialog_btn); @@ -3437,13 +3463,10 @@ void TabFilament::build() return sizer; }); - // Orca: multi tool is not supported yet. -#ifdef ORCA_MULTI_TOOL optgroup = page->new_optgroup(L("Toolchange parameters with multi extruder MM printers")); optgroup->append_single_option_line("filament_multitool_ramming"); optgroup->append_single_option_line("filament_multitool_ramming_volume"); optgroup->append_single_option_line("filament_multitool_ramming_flow"); -#endif page = add_options_page(L("Notes"), "custom-gcode_note"); // ORCA: icon only visible on placeholders optgroup = page->new_optgroup(L("Notes"),"note", 0); @@ -3538,9 +3561,18 @@ void TabFilament::toggle_options() toggle_line("cool_plate_temp_initial_layer", support_multi_bed_types ); toggle_line("eng_plate_temp_initial_layer", support_multi_bed_types); toggle_line("textured_plate_temp_initial_layer", support_multi_bed_types); + + // Orca: adaptive pressure advance and calibration model + // If PA is not enabled, disable adaptive pressure advance and hide the model section + // If adaptive PA is not enabled, hide the adaptive PA model section + toggle_option("adaptive_pressure_advance", pa); + toggle_option("adaptive_pressure_advance_overhangs", pa); + bool has_adaptive_pa = m_config->opt_bool("adaptive_pressure_advance", 0); + toggle_line("adaptive_pressure_advance_overhangs", has_adaptive_pa && pa); + toggle_line("adaptive_pressure_advance_model", has_adaptive_pa && pa); + toggle_line("adaptive_pressure_advance_bridges", has_adaptive_pa && pa); bool is_pellet_printer = cfg.opt_bool("pellet_modded_printer"); - toggle_line("pellet_flow_coefficient", is_pellet_printer); toggle_line("filament_diameter", !is_pellet_printer); } @@ -3660,18 +3692,6 @@ void TabPrinter::build_fff() optgroup->append_single_option_line("z_offset"); optgroup->append_single_option_line("preferred_orientation"); - // ConfigOptionDef def; - // def.type = coInt, - // def.set_default_value(new ConfigOptionInt(1)); - // def.label = L("Extruders"); - // def.tooltip = L("Number of extruders of the printer."); - // def.min = 1; - // def.max = 256; - // //BBS - // def.mode = comDevelop; - // Option option(def, "extruders_count"); - // optgroup->append_single_option_line(option); - optgroup = page->new_optgroup(L("Advanced"), L"param_advanced"); optgroup->append_single_option_line("printer_structure"); optgroup->append_single_option_line("gcode_flavor"); @@ -3947,12 +3967,10 @@ void TabPrinter::extruders_count_changed(size_t extruders_count) m_preset_bundle->update_multi_material_filament_presets(); is_count_changed = true; } - // BBS -#if 0 + // Orca: support multi tool else if (m_extruders_count == 1 && m_preset_bundle->project_config.option("flush_volumes_matrix")->values.size()>1) m_preset_bundle->update_multi_material_filament_presets(); -#endif /* This function should be call in any case because of correct updating/rebuilding * of unregular pages of a Printer Settings @@ -4086,14 +4104,86 @@ if (is_marlin_flavor) auto page = add_options_page(L("Multimaterial"), "custom-gcode_multi_material", true); // ORCA: icon only visible on placeholders auto optgroup = page->new_optgroup(L("Single extruder multimaterial setup"), "param_multi_material"); optgroup->append_single_option_line("single_extruder_multi_material", "semm"); - // Orca: we only support Single Extruder Multi Material, so it's always enabled - // optgroup->m_on_change = [this](const t_config_option_key &opt_key, const boost::any &value) { - // wxTheApp->CallAfter([this, opt_key, value]() { - // if (opt_key == "single_extruder_multi_material") { - // build_unregular_pages(); - // } - // }); - // }; + ConfigOptionDef def; + def.type = coInt, def.set_default_value(new ConfigOptionInt((int) m_extruders_count)); + def.label = L("Extruders"); + def.tooltip = L("Number of extruders of the printer."); + def.min = 1; + def.max = MAXIMUM_EXTRUDER_NUMBER; + def.mode = comAdvanced; + Option option(def, "extruders_count"); + optgroup->append_single_option_line(option); + + // Orca: rebuild missed extruder pages + optgroup->m_on_change = [this, optgroup_wk = ConfigOptionsGroupWkp(optgroup)](t_config_option_key opt_key, boost::any value) { + auto optgroup_sh = optgroup_wk.lock(); + if (!optgroup_sh) + return; + + // optgroup->get_value() return int for def.type == coInt, + // Thus, there should be boost::any_cast ! + // Otherwise, boost::any_cast causes an "unhandled unknown exception" + size_t extruders_count = size_t(boost::any_cast(optgroup_sh->get_value("extruders_count"))); + wxTheApp->CallAfter([this, opt_key, value, extruders_count]() { + if (opt_key == "extruders_count" || opt_key == "single_extruder_multi_material") { + extruders_count_changed(extruders_count); + init_options_list(); // m_options_list should be updated before UI updating + update_dirty(); + if (opt_key == "single_extruder_multi_material") { // the single_extruder_multimaterial was added to force pages + on_value_change(opt_key, value); // rebuild - let's make sure the on_value_change is not skipped + + if (boost::any_cast(value) && m_extruders_count > 1) { + SuppressBackgroundProcessingUpdate sbpu; + +// Orca: we use a different logic here. If SEMM is enabled, we set extruder count to 1. +#if 1 + extruders_count_changed(1); +#else + + std::vector nozzle_diameters = + static_cast(m_config->option("nozzle_diameter"))->values; + const double frst_diam = nozzle_diameters[0]; + + for (auto cur_diam : nozzle_diameters) { + // if value is differs from first nozzle diameter value + if (fabs(cur_diam - frst_diam) > EPSILON) { + const wxString msg_text = _( + L("Single Extruder Multi Material is selected, \n" + "and all extruders must have the same diameter.\n" + "Do you want to change the diameter for all extruders to first extruder nozzle diameter value?")); + MessageDialog dialog(parent(), msg_text, _(L("Nozzle diameter")), wxICON_WARNING | wxYES_NO); + + DynamicPrintConfig new_conf = *m_config; + if (dialog.ShowModal() == wxID_YES) { + for (size_t i = 1; i < nozzle_diameters.size(); i++) + nozzle_diameters[i] = frst_diam; + + new_conf.set_key_value("nozzle_diameter", new ConfigOptionFloats(nozzle_diameters)); + } else + new_conf.set_key_value("single_extruder_multi_material", new ConfigOptionBool(false)); + + load_config(new_conf); + break; + } + } +#endif + } + + m_preset_bundle->update_compatible(PresetSelectCompatibleType::Never); + // Upadte related comboboxes on Sidebar and Tabs + Sidebar& sidebar = wxGetApp().plater()->sidebar(); + for (const Preset::Type& type : {Preset::TYPE_PRINT, Preset::TYPE_FILAMENT}) { + sidebar.update_presets(type); + wxGetApp().get_tab(type)->update_tab_ui(); + } + } + } + else { + update_dirty(); + on_value_change(opt_key, value); + } + }); + }; optgroup->append_single_option_line("manual_filament_change", "semm#manual-filament-change"); optgroup = page->new_optgroup(L("Wipe tower"), "param_tower"); @@ -4110,140 +4200,138 @@ if (is_marlin_flavor) m_pages.insert(m_pages.end() - n_after_single_extruder_MM, page); } - // BBS. Just create one extruder page because BBL machine has only on physical extruder. - // Build missed extruder pages - //for (auto extruder_idx = m_extruders_count_old; extruder_idx < m_extruders_count; ++extruder_idx) - auto extruder_idx = 0; - const wxString& page_name = (m_extruders_count > 1) ? wxString::Format("Extruder %d", int(extruder_idx + 1)) : wxString::Format("Extruder"); - bool page_exist = false; - for (auto page_temp : m_pages) { - if (page_temp->title() == page_name) { - page_exist = true; - break; + // Orca: build missed extruder pages + for (auto extruder_idx = m_extruders_count_old; extruder_idx < m_extruders_count; ++extruder_idx) { + // auto extruder_idx = 0; + const wxString& page_name = wxString::Format("Extruder %d", int(extruder_idx + 1)); + bool page_exist = false; + for (auto page_temp : m_pages) { + if (page_temp->title() == page_name) { + page_exist = true; + break; + } } - } - if (!page_exist) - { - //# build page - //const wxString& page_name = wxString::Format("Extruder %d", int(extruder_idx + 1)); - auto page = add_options_page(page_name, "custom-gcode_extruder", true); // ORCA: icon only visible on placeholders - m_pages.insert(m_pages.begin() + n_before_extruders + extruder_idx, page); + if (!page_exist) + { + //# build page + //const wxString& page_name = wxString::Format("Extruder %d", int(extruder_idx + 1)); + auto page = add_options_page(page_name, "custom-gcode_extruder", true); // ORCA: icon only visible on placeholders + m_pages.insert(m_pages.begin() + n_before_extruders + extruder_idx, page); - auto optgroup = page->new_optgroup(L("Size"), L"param_extruder_size", -1, true); - optgroup->append_single_option_line("nozzle_diameter", "", extruder_idx); + auto optgroup = page->new_optgroup(L("Size"), L"param_extruder_size"); + optgroup->append_single_option_line("nozzle_diameter", "", extruder_idx); - optgroup->m_on_change = [this, extruder_idx](const t_config_option_key& opt_key, boost::any value) - { - //if (m_config->opt_bool("single_extruder_multi_material") && m_extruders_count > 1 && opt_key.find_first_of("nozzle_diameter") != std::string::npos) - //{ - // SuppressBackgroundProcessingUpdate sbpu; - // const double new_nd = boost::any_cast(value); - // std::vector nozzle_diameters = static_cast(m_config->option("nozzle_diameter"))->values; - - // // if value was changed - // if (fabs(nozzle_diameters[extruder_idx == 0 ? 1 : 0] - new_nd) > EPSILON) + optgroup->m_on_change = [this, extruder_idx](const t_config_option_key& opt_key, boost::any value) + { + bool is_SEMM = m_config->opt_bool("single_extruder_multi_material"); + if (is_SEMM && m_extruders_count > 1 && opt_key.find_first_of("nozzle_diameter") != std::string::npos) + { + SuppressBackgroundProcessingUpdate sbpu; + const double new_nd = boost::any_cast(value); + std::vector nozzle_diameters = static_cast(m_config->option("nozzle_diameter"))->values; + + // if value was changed + if (fabs(nozzle_diameters[extruder_idx == 0 ? 1 : 0] - new_nd) > EPSILON) + { + const wxString msg_text = _(L("This is a single extruder multimaterial printer, diameters of all extruders " + "will be set to the new value. Do you want to proceed?")); + //wxMessageDialog dialog(parent(), msg_text, _(L("Nozzle diameter")), wxICON_WARNING | wxYES_NO); + MessageDialog dialog(parent(), msg_text, _(L("Nozzle diameter")), wxICON_WARNING | wxYES_NO); + + DynamicPrintConfig new_conf = *m_config; + if (dialog.ShowModal() == wxID_YES) { + for (size_t i = 0; i < nozzle_diameters.size(); i++) { + if (i == extruder_idx) + continue; + nozzle_diameters[i] = new_nd; + } + } + else + nozzle_diameters[extruder_idx] = nozzle_diameters[extruder_idx == 0 ? 1 : 0]; + + new_conf.set_key_value("nozzle_diameter", new ConfigOptionFloats(nozzle_diameters)); + load_config(new_conf); + } + } + + update_dirty(); + update(); + }; + + optgroup = page->new_optgroup(L("Layer height limits"), L"param_layer_height"); + optgroup->append_single_option_line("min_layer_height", "", extruder_idx); + optgroup->append_single_option_line("max_layer_height", "", extruder_idx); + + optgroup = page->new_optgroup(L("Position"), L"param_position"); + optgroup->append_single_option_line("extruder_offset", "", extruder_idx); + + //BBS: don't show retract related config menu in machine page + optgroup = page->new_optgroup(L("Retraction"), L"param_retraction"); + optgroup->append_single_option_line("retraction_length", "", extruder_idx); + optgroup->append_single_option_line("retract_restart_extra", "", extruder_idx); + optgroup->append_single_option_line("z_hop", "", extruder_idx); + optgroup->append_single_option_line("z_hop_types", "", extruder_idx); + optgroup->append_single_option_line("travel_slope", "", extruder_idx); + optgroup->append_single_option_line("retraction_speed", "", extruder_idx); + optgroup->append_single_option_line("deretraction_speed", "", extruder_idx); + optgroup->append_single_option_line("retraction_minimum_travel", "", extruder_idx); + optgroup->append_single_option_line("retract_when_changing_layer", "", extruder_idx); + optgroup->append_single_option_line("wipe", "", extruder_idx); + optgroup->append_single_option_line("wipe_distance", "", extruder_idx); + optgroup->append_single_option_line("retract_before_wipe", "", extruder_idx); + + optgroup = page->new_optgroup(L("Lift Z Enforcement"), L"param_extruder_lift_enforcement"); + optgroup->append_single_option_line("retract_lift_above", "", extruder_idx); + optgroup->append_single_option_line("retract_lift_below", "", extruder_idx); + optgroup->append_single_option_line("retract_lift_enforce", "", extruder_idx); + + optgroup = page->new_optgroup(L("Retraction when switching material"), L"param_retraction_material_change"); + optgroup->append_single_option_line("retract_length_toolchange", "", extruder_idx); + optgroup->append_single_option_line("retract_restart_extra_toolchange", "", extruder_idx); + // do not display this params now + optgroup->append_single_option_line("long_retractions_when_cut", "", extruder_idx); + optgroup->append_single_option_line("retraction_distances_when_cut", "", extruder_idx); + + #if 0 + //optgroup = page->new_optgroup(L("Preview"), -1, true); + + //auto reset_to_filament_color = [this, extruder_idx](wxWindow* parent) { + // m_reset_to_filament_color = new ScalableButton(parent, wxID_ANY, "undo", _L("Reset to Filament Color"), + // wxDefaultSize, wxDefaultPosition, wxBU_LEFT | wxBU_EXACTFIT, true); + // ScalableButton* btn = m_reset_to_filament_color; + // btn->SetFont(Slic3r::GUI::wxGetApp().normal_font()); + // btn->SetSize(btn->GetBestSize()); + // auto sizer = new wxBoxSizer(wxHORIZONTAL); + // sizer->Add(btn); + + // btn->Bind(wxEVT_BUTTON, [this, extruder_idx](wxCommandEvent& e) // { - // const wxString msg_text = _(L("This is a single extruder multimaterial printer, diameters of all extruders " - // "will be set to the new value. Do you want to proceed?")); - // //wxMessageDialog dialog(parent(), msg_text, _(L("Nozzle diameter")), wxICON_WARNING | wxYES_NO); - // MessageDialog dialog(parent(), msg_text, _(L("Nozzle diameter")), wxICON_WARNING | wxYES_NO); + // std::vector colors = static_cast(m_config->option("extruder_colour"))->values; + // colors[extruder_idx] = ""; // DynamicPrintConfig new_conf = *m_config; - // if (dialog.ShowModal() == wxID_YES) { - // for (size_t i = 0; i < nozzle_diameters.size(); i++) { - // if (i==extruder_idx) - // continue; - // nozzle_diameters[i] = new_nd; - // } - // } - // else - // nozzle_diameters[extruder_idx] = nozzle_diameters[extruder_idx == 0 ? 1 : 0]; - - // new_conf.set_key_value("nozzle_diameter", new ConfigOptionFloats(nozzle_diameters)); + // new_conf.set_key_value("extruder_colour", new ConfigOptionStrings(colors)); // load_config(new_conf); - // } - //} - - update_dirty(); - update(); - }; - - optgroup = page->new_optgroup(L("Layer height limits"), L"param_layer_height", -1, true); - optgroup->append_single_option_line("min_layer_height", "", extruder_idx); - optgroup->append_single_option_line("max_layer_height", "", extruder_idx); - - optgroup = page->new_optgroup(L("Position"), L"param_position", -1, true); - optgroup->append_single_option_line("extruder_offset", "", extruder_idx); - - //BBS: don't show retract related config menu in machine page - optgroup = page->new_optgroup(L("Retraction"), L"param_retraction"); - optgroup->append_single_option_line("retraction_length", "", extruder_idx); - optgroup->append_single_option_line("retract_restart_extra", "", extruder_idx); - optgroup->append_single_option_line("z_hop", "", extruder_idx); - optgroup->append_single_option_line("z_hop_types", "", extruder_idx); - optgroup->append_single_option_line("travel_slope", "", extruder_idx); - optgroup->append_single_option_line("retraction_speed", "", extruder_idx); - optgroup->append_single_option_line("deretraction_speed", "", extruder_idx); - optgroup->append_single_option_line("retraction_minimum_travel", "", extruder_idx); - optgroup->append_single_option_line("retract_when_changing_layer", "", extruder_idx); - optgroup->append_single_option_line("wipe", "", extruder_idx); - optgroup->append_single_option_line("wipe_distance", "", extruder_idx); - optgroup->append_single_option_line("retract_before_wipe", "", extruder_idx); - - optgroup = page->new_optgroup(L("Lift Z Enforcement"), L"param_extruder_lift_enforcement", -1, true); - optgroup->append_single_option_line("retract_lift_above", "", extruder_idx); - optgroup->append_single_option_line("retract_lift_below", "", extruder_idx); - optgroup->append_single_option_line("retract_lift_enforce", "", extruder_idx); - - optgroup = page->new_optgroup(L("Retraction when switching material"), L"param_retraction_material_change", -1, true); - optgroup->append_single_option_line("retract_length_toolchange", "", extruder_idx); - optgroup->append_single_option_line("retract_restart_extra_toolchange", "", extruder_idx); - // do not display this params now - optgroup->append_single_option_line("long_retractions_when_cut", "", extruder_idx); - optgroup->append_single_option_line("retraction_distances_when_cut", "", extruder_idx); - -#if 0 - //optgroup = page->new_optgroup(L("Preview"), -1, true); - - //auto reset_to_filament_color = [this, extruder_idx](wxWindow* parent) { - // m_reset_to_filament_color = new ScalableButton(parent, wxID_ANY, "undo", _L("Reset to Filament Color"), - // wxDefaultSize, wxDefaultPosition, wxBU_LEFT | wxBU_EXACTFIT, true); - // ScalableButton* btn = m_reset_to_filament_color; - // btn->SetFont(Slic3r::GUI::wxGetApp().normal_font()); - // btn->SetSize(btn->GetBestSize()); - // auto sizer = new wxBoxSizer(wxHORIZONTAL); - // sizer->Add(btn); - - // btn->Bind(wxEVT_BUTTON, [this, extruder_idx](wxCommandEvent& e) - // { - // std::vector colors = static_cast(m_config->option("extruder_colour"))->values; - // colors[extruder_idx] = ""; - - // DynamicPrintConfig new_conf = *m_config; - // new_conf.set_key_value("extruder_colour", new ConfigOptionStrings(colors)); - // load_config(new_conf); - - // update_dirty(); - // update(); - // }); - - // return sizer; - //}; - ////BBS - //Line line = optgroup->create_single_option_line("extruder_colour", "", extruder_idx); - //line.append_widget(reset_to_filament_color); - //optgroup->append_line(line); -#endif - } + // update_dirty(); + // update(); + // }); + + // return sizer; + //}; + ////BBS + //Line line = optgroup->create_single_option_line("extruder_colour", "", extruder_idx); + //line.append_widget(reset_to_filament_color); + //optgroup->append_line(line); + #endif + } +} // BBS. No extra extruder page for single physical extruder machine // # remove extra pages -#if 0 if (m_extruders_count < m_extruders_count_old) m_pages.erase( m_pages.begin() + n_before_extruders + m_extruders_count, m_pages.begin() + n_before_extruders + m_extruders_count_old); -#endif Thaw(); @@ -4264,15 +4352,12 @@ if (is_marlin_flavor) // this gets executed after preset is loaded and before GUI fields are updated void TabPrinter::on_preset_loaded() { - // BBS -#if 0 + // Orca // update the extruders count field auto *nozzle_diameter = dynamic_cast(m_config->option("nozzle_diameter")); size_t extruders_count = nozzle_diameter->values.size(); // update the GUI field according to the number of nozzle diameters supplied extruders_count_changed(extruders_count); -#endif - build_unregular_pages(); } void TabPrinter::update_pages() @@ -4319,7 +4404,7 @@ void TabPrinter::reload_config() // "extruders_count" doesn't update from the update_config(), // so update it implicitly - if (m_active_page && m_active_page->title() == "General") + if (m_active_page && m_active_page->title() == "Multimaterial") m_active_page->set_value("extruders_count", int(m_extruders_count)); } @@ -4329,7 +4414,7 @@ void TabPrinter::activate_selected_page(std::function throw_if_canceled) // "extruders_count" doesn't update from the update_config(), // so update it implicitly - if (m_active_page && m_active_page->title() == "General") + if (m_active_page && m_active_page->title() == "Multimaterial") m_active_page->set_value("extruders_count", int(m_extruders_count)); } @@ -4368,13 +4453,26 @@ void TabPrinter::toggle_options() } if (m_active_page->title() == L("Multimaterial")) { - // toggle_option("single_extruder_multi_material", have_multiple_extruders); - // SoftFever: hide specific settings for BBL printer - for (auto el : - {"purge_in_prime_tower", "enable_filament_ramming", "cooling_tube_retraction", "cooling_tube_length", "parking_pos_retraction", "extra_loading_move", "high_current_on_filament_swap", }) - toggle_option(el, !is_BBL_printer); + for (auto el : { + "enable_filament_ramming", + "cooling_tube_retraction", + "cooling_tube_length", + "parking_pos_retraction", + "extra_loading_move", + "high_current_on_filament_swap", + }) + toggle_option(el, !is_BBL_printer); + auto bSEMM = m_config->opt_bool("single_extruder_multi_material"); + if (!bSEMM && m_config->opt_bool("manual_filament_change")) { + DynamicPrintConfig new_conf = *m_config; + new_conf.set_key_value("manual_filament_change", new ConfigOptionBool(false)); + load_config(new_conf); + } + toggle_option("extruders_count", !bSEMM); + toggle_option("manual_filament_change", bSEMM); + toggle_option("purge_in_prime_tower", bSEMM && !is_BBL_printer); } wxString extruder_number; long val = 1; @@ -4657,14 +4755,14 @@ void Tab::rebuild_page_tree() if (sel_item == m_last_select_item) m_last_select_item = item; else - m_last_select_item = NULL; + m_last_select_item = 0; // allow activate page before selection of a page_tree item m_disable_tree_sel_changed_event = false; //BBS: GUI refactor if (item >= 0) { - bool ret = update_current_page_in_background(item); + update_current_page_in_background(item); //if m_active_page is changed in update_current_page_in_background //will just update the selected item of the treectrl if (m_parent->is_active_and_shown_tab(this)) // FIX: modify state not update @@ -5484,7 +5582,6 @@ void Tab::delete_preset() if (m_presets->get_preset_base(current_preset) == ¤t_preset) { //root preset is_base_preset = true; if (current_preset.type == Preset::Type::TYPE_PRINTER && !current_preset.is_system) { //Customize third-party printers - Preset ¤t_preset = m_presets->get_selected_preset(); int filament_preset_num = 0; int process_preset_num = 0; for (const Preset &preset : m_preset_bundle->filaments.get_presets()) { @@ -5748,7 +5845,6 @@ wxSizer* TabPrinter::create_bed_shape_widget(wxWindow* parent) sizer->Add(btn, 0, wxALIGN_CENTER_VERTICAL); btn->Bind(wxEVT_BUTTON, ([this](wxCommandEvent e) { - bool is_configed_by_BBL = PresetUtils::system_printer_bed_model(m_preset_bundle->printers.get_edited_preset()).size() > 0; BedShapeDialog dlg(this); dlg.build_dialog(*m_config->option("printable_area"), *m_config->option("bed_custom_texture"), diff --git a/src/slic3r/GUI/TabButton.cpp b/src/slic3r/GUI/TabButton.cpp index 04742223c3f..49c153c286e 100644 --- a/src/slic3r/GUI/TabButton.cpp +++ b/src/slic3r/GUI/TabButton.cpp @@ -17,7 +17,7 @@ END_EVENT_TABLE() static wxColour BORDER_HOVER_COL = wxColour(0, 150, 136); const static wxColour TAB_BUTTON_BG = wxColour("#FEFFFF"); -const static wxColour TAB_BUTTON_SEL = wxColour(219, 253, 213, 255); +const static wxColour TAB_BUTTON_SEL = wxColour("#BFE1DE"); // ORCA TabButton::TabButton() : paddingSize(43, 16) @@ -29,7 +29,7 @@ TabButton::TabButton() std::make_pair(wxColour("#FEFFFF"), (int) StateColor::Normal)); border_color = StateColor( - std::make_pair(wxColour("#FEFFFF"), (int) StateColor::Checked), + std::make_pair(TAB_BUTTON_SEL, (int) StateColor::Checked), // ORCA use same color for border to prevent 1px blank border std::make_pair(BORDER_HOVER_COL, (int) StateColor::Hovered), std::make_pair(wxColour("#FEFFFF"), (int)StateColor::Normal)); } diff --git a/src/slic3r/GUI/Tabbook.cpp b/src/slic3r/GUI/Tabbook.cpp index 9b3174540ed..cda915ba777 100644 --- a/src/slic3r/GUI/Tabbook.cpp +++ b/src/slic3r/GUI/Tabbook.cpp @@ -15,7 +15,7 @@ wxDEFINE_EVENT(wxCUSTOMEVT_TABBOOK_SEL_CHANGED, wxCommandEvent); const static wxColour TAB_BUTTON_BG = wxColour("#FEFFFF"); -const static wxColour TAB_BUTTON_SEL = wxColour(219, 253, 213, 255); +const static wxColour TAB_BUTTON_SEL = wxColour("#BFE1DE"); // ORCA static const wxFont& TAB_BUTTON_FONT = Label::Body_14; static const wxFont& TAB_BUTTON_FONT_SEL = Label::Head_14; diff --git a/src/slic3r/GUI/Tabbook.hpp b/src/slic3r/GUI/Tabbook.hpp index 7dd19389def..61eee685b8a 100644 --- a/src/slic3r/GUI/Tabbook.hpp +++ b/src/slic3r/GUI/Tabbook.hpp @@ -198,8 +198,6 @@ class Tabbook: public wxBookCtrlBase // check that only the selected page is visible and others are hidden: for (size_t page = 0; page < m_pages.size(); page++) { - wxWindow* win_a = GetPage(page); - wxWindow* win_b = GetPage(n); if (page != n && GetPage(page) != GetPage(n)) { m_pages[page]->Hide(); } diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp index b47f3c0389c..1b46e2b7dd1 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.cpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp @@ -1654,7 +1654,7 @@ void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* pres const DynamicPrintConfig& new_config = presets->get_edited_preset().config; type = presets->type(); - const std::map& category_icon_map = wxGetApp().get_tab(type)->get_category_icon_map(); + // const std::map& category_icon_map = wxGetApp().get_tab(type)->get_category_icon_map(); //m_tree->model->AddPreset(type, from_u8(presets->get_edited_preset().name), old_pt); diff --git a/src/slic3r/GUI/UnsavedChangesDialog.hpp b/src/slic3r/GUI/UnsavedChangesDialog.hpp index 4597e2cc545..f91fa844f49 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.hpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.hpp @@ -459,7 +459,7 @@ class DiffPresetDialog : public DPIDialog std::string get_left_preset_name(Preset::Type type); std::string get_right_preset_name(Preset::Type type); - std::vector get_selected_options(Preset::Type type) const { return std::move(m_tree->options(type, true)); } + std::vector get_selected_options(Preset::Type type) const { return m_tree->options(type, true); } std::array types_list() const; diff --git a/src/slic3r/GUI/UpdateDialogs.cpp b/src/slic3r/GUI/UpdateDialogs.cpp index d78136a0940..deba5a7a97e 100644 --- a/src/slic3r/GUI/UpdateDialogs.cpp +++ b/src/slic3r/GUI/UpdateDialogs.cpp @@ -24,12 +24,11 @@ namespace Slic3r { namespace GUI { - -static const char* URL_CHANGELOG = "%1%"; -static const char* URL_DOWNLOAD = "%1%"; -static const char* URL_DEV = "%1%"; - -static const std::string CONFIG_UPDATE_WIKI_URL(""); +// Orca: Replace static char* with macro defs +// currently disabled until needed +// #define URL_CHANGELOG "%1%" +// #define URL_DOWNLOAD "%1%" +// #define URL_DEV "%1%" // MsgUpdateSlic3r diff --git a/src/slic3r/GUI/UpgradePanel.cpp b/src/slic3r/GUI/UpgradePanel.cpp index e9384c385be..e2376326e4c 100644 --- a/src/slic3r/GUI/UpgradePanel.cpp +++ b/src/slic3r/GUI/UpgradePanel.cpp @@ -670,8 +670,6 @@ void MachineInfoPanel::update_ams_ext(MachineObject *obj) show_ams(true); std::map ver_list = obj->get_ams_version(); - AmsPanelHash::iterator iter = m_amspanel_list.begin(); - for (auto i = 0; i < m_amspanel_list.GetCount(); i++) { AmsPanel* amspanel = m_amspanel_list[i]; amspanel->Hide(); diff --git a/src/slic3r/GUI/UserManager.cpp b/src/slic3r/GUI/UserManager.cpp index 29f5f2d137d..0fd8dfce258 100644 --- a/src/slic3r/GUI/UserManager.cpp +++ b/src/slic3r/GUI/UserManager.cpp @@ -25,7 +25,6 @@ void UserManager::set_agent(NetworkAgent* agent) int UserManager::parse_json(std::string payload) { - bool restored_json = false; json j; json j_pre = json::parse(payload); if (j_pre.empty()) { @@ -41,7 +40,7 @@ int UserManager::parse_json(std::string payload) //bind if (j_pre["bind"]["command"].get() == "bind") { std::string dev_id; - std:; string result; + std::string result; if (j_pre["bind"].contains("dev_id")) { dev_id = j_pre["bind"]["dev_id"].get(); diff --git a/src/slic3r/GUI/WebDownPluginDlg.cpp b/src/slic3r/GUI/WebDownPluginDlg.cpp index 82d2816f2e6..49fc439887b 100644 --- a/src/slic3r/GUI/WebDownPluginDlg.cpp +++ b/src/slic3r/GUI/WebDownPluginDlg.cpp @@ -1,27 +1,17 @@ #include "WebDownPluginDlg.hpp" -#include "ConfigWizard.hpp" - -#include #include "I18N.hpp" #include "libslic3r/AppConfig.hpp" -#include "slic3r/GUI/wxExtensions.hpp" #include "slic3r/GUI/GUI_App.hpp" -#include "libslic3r_version.h" #include -#include #include - #include #include -#include #include #include -#include #include "MainFrame.hpp" -#include #include #include #include @@ -227,7 +217,7 @@ void DownPluginFrame::OnScriptMessage(wxWebViewEvent &evt) auto plugin_folder = (boost::filesystem::path(wxStandardPaths::Get().GetUserDataDir().ToUTF8().data()) / "plugins").make_preferred().string(); desktop_open_any_folder(plugin_folder); } - } catch (std::exception &e) { + } catch (std::exception&) { // wxMessageBox(e.what(), "json Exception", MB_OK); } } diff --git a/src/slic3r/GUI/WebGuideDialog.cpp b/src/slic3r/GUI/WebGuideDialog.cpp index 63255d73c67..94913348e18 100644 --- a/src/slic3r/GUI/WebGuideDialog.cpp +++ b/src/slic3r/GUI/WebGuideDialog.cpp @@ -109,6 +109,7 @@ GuideFrame::GuideFrame(GUI_App *pGUI, long style) // INI m_SectionName = "firstguide"; PrivacyUse = false; + StealthMode = false; InstallNetplugin = false; m_MainPtr = pGUI; @@ -486,6 +487,15 @@ void GuideFrame::OnScriptMessage(wxWebViewEvent &evt) else InstallNetplugin = false; } + else if (strCmd == "save_stealth_mode") { + wxString strAction = j["data"]["action"]; + + if (strAction == "yes") { + StealthMode = true; + } else { + StealthMode = false; + } + } } catch (std::exception &e) { // wxMessageBox(e.what(), "json Exception", MB_OK); BOOST_LOG_TRIVIAL(trace) << "GuideFrame::OnScriptMessage;Error:" << e.what(); @@ -616,6 +626,7 @@ int GuideFrame::SaveProfile() // m_MainPtr->app_config->set(std::string(m_SectionName.mb_str()), "privacyuse", "0"); m_MainPtr->app_config->set("region", m_Region); + m_MainPtr->app_config->set_bool("stealth_mode", StealthMode); //finish m_MainPtr->app_config->set(std::string(m_SectionName.mb_str()), "finish", "1"); @@ -882,13 +893,13 @@ bool GuideFrame::apply_config(AppConfig *app_config, PresetBundle *preset_bundle } std::string first_added_filament; - auto get_first_added_material_preset = [this, app_config](const std::string& section_name, std::string& first_added_preset) { + /*auto get_first_added_material_preset = [this, app_config](const std::string& section_name, std::string& first_added_preset) { if (m_appconfig_new.has_section(section_name)) { // get first of new added preset names const std::map& old_presets = app_config->has_section(section_name) ? app_config->get_section(section_name) : std::map(); first_added_preset = get_first_added_preset(old_presets, m_appconfig_new.get_section(section_name)); } - }; + };*/ // Not switch filament //get_first_added_material_preset(AppConfig::SECTION_FILAMENTS, first_added_filament); @@ -949,7 +960,6 @@ bool GuideFrame::run() BOOST_LOG_TRIVIAL(info) << "GuideFrame cancelled"; if (app.preset_bundle->printers.only_default_printers()) { //we install the default here - bool apply_keeped_changes = false; //clear filament section and use default materials app.app_config->set_variant(PresetBundle::BBL_BUNDLE, PresetBundle::BBL_DEFAULT_PRINTER_MODEL, PresetBundle::BBL_DEFAULT_PRINTER_VARIANT, "true"); @@ -1129,7 +1139,7 @@ int GuideFrame::LoadProfile() wxString strVendor = from_u8(iter->path().string()).BeforeLast('.'); strVendor = strVendor.AfterLast( '\\'); - strVendor = strVendor.AfterLast('\/'); + strVendor = strVendor.AfterLast('/'); wxString strExtension = from_u8(iter->path().string()).AfterLast('.').Lower(); if (w2s(strVendor) == PresetBundle::BBL_BUNDLE && strExtension.CmpNoCase("json") == 0) @@ -1148,7 +1158,7 @@ int GuideFrame::LoadProfile() //cout << iter->path().string() << endl; wxString strVendor = from_u8(iter->path().string()).BeforeLast('.'); strVendor = strVendor.AfterLast( '\\'); - strVendor = strVendor.AfterLast('\/'); + strVendor = strVendor.AfterLast('/'); wxString strExtension = from_u8(iter->path().string()).AfterLast('.').Lower(); if (w2s(strVendor) != PresetBundle::BBL_BUNDLE && strExtension.CmpNoCase("json")==0) @@ -1223,6 +1233,9 @@ int GuideFrame::LoadProfile() m_ProfileJson["network_plugin_install"] = wxGetApp().app_config->get("app","installed_networking"); m_ProfileJson["network_plugin_compability"] = wxGetApp().is_compatibility_version() ? "1" : "0"; network_plugin_ready = wxGetApp().is_compatibility_version(); + + StealthMode = wxGetApp().app_config->get_bool("app","stealth_mode"); + m_ProfileJson["stealth_mode"] = StealthMode; } catch (std::exception &e) { //wxLogMessage("GUIDE: load_profile_error %s ", e.what()); @@ -1530,9 +1543,6 @@ int GuideFrame::LoadProfileFamily(std::string strVendor, std::string strFilePath BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "Vendor: " << strVendor <<", tFilaList Add: " << s1; } - int nFalse = 0; - int nModel = 0; - int nFinish = 0; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", got %1% filaments") % nsize; for (int n = 0; n < nsize; n++) { json OneFF = pFilament.at(n); @@ -1642,7 +1652,7 @@ std::string GuideFrame::w2s(wxString sSrc) void GuideFrame::GetStardardFilePath(std::string &FilePath) { StrReplace(FilePath, "\\", w2s(wxString::Format("%c", boost::filesystem::path::preferred_separator))); - StrReplace(FilePath, "\/", w2s(wxString::Format("%c", boost::filesystem::path::preferred_separator))); + StrReplace(FilePath, "/", w2s(wxString::Format("%c", boost::filesystem::path::preferred_separator))); } bool GuideFrame::LoadFile(std::string jPath, std::string &sContent) diff --git a/src/slic3r/GUI/WebGuideDialog.hpp b/src/slic3r/GUI/WebGuideDialog.hpp index ff66f5cb34d..4fd495fe6dd 100644 --- a/src/slic3r/GUI/WebGuideDialog.hpp +++ b/src/slic3r/GUI/WebGuideDialog.hpp @@ -109,6 +109,7 @@ class GuideFrame : public DPIDialog // User Config bool PrivacyUse; + bool StealthMode; std::string m_Region; bool InstallNetplugin; diff --git a/src/slic3r/GUI/WebUserLoginDialog.cpp b/src/slic3r/GUI/WebUserLoginDialog.cpp index b95aa50b5f0..4385f43dae4 100644 --- a/src/slic3r/GUI/WebUserLoginDialog.cpp +++ b/src/slic3r/GUI/WebUserLoginDialog.cpp @@ -3,7 +3,6 @@ #include #include "I18N.hpp" #include "libslic3r/AppConfig.hpp" -#include "slic3r/GUI/wxExtensions.hpp" #include "slic3r/GUI/GUI_App.hpp" #include "libslic3r_version.h" @@ -13,11 +12,9 @@ #include #include -#include #include #include -#include #include #include "MainFrame.hpp" diff --git a/src/slic3r/GUI/WebViewDialog.cpp b/src/slic3r/GUI/WebViewDialog.cpp index fab48fa6793..a5e17afab43 100644 --- a/src/slic3r/GUI/WebViewDialog.cpp +++ b/src/slic3r/GUI/WebViewDialog.cpp @@ -5,7 +5,6 @@ #include "slic3r/GUI/GUI_App.hpp" #include "slic3r/GUI/MainFrame.hpp" #include "libslic3r_version.h" -#include "../Utils/Http.hpp" #include #include diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index ea2fea852c7..c9a7e5c6e15 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -137,7 +137,7 @@ void AMSrefresh::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, con wxWindow::Create(parent, id, pos, size, wxBORDER_NONE); SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); - Bind(wxEVT_TIMER, &AMSrefresh::on_timer, this); + Bind(wxEVT_TIMER, [this](wxTimerEvent&) { on_timer(); }); Bind(wxEVT_PAINT, &AMSrefresh::paintEvent, this); Bind(wxEVT_ENTER_WINDOW, &AMSrefresh::OnEnterWindow, this); Bind(wxEVT_LEAVE_WINDOW, &AMSrefresh::OnLeaveWindow, this); @@ -166,14 +166,14 @@ void AMSrefresh::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, con m_playing_timer = new wxTimer(); m_playing_timer->SetOwner(this); - wxPostEvent(this, wxTimerEvent()); + on_timer(); SetSize(AMS_REFRESH_SIZE); SetMinSize(AMS_REFRESH_SIZE); SetMaxSize(AMS_REFRESH_SIZE); } -void AMSrefresh::on_timer(wxTimerEvent &event) +void AMSrefresh::on_timer() { //if (m_rotation_angle >= m_rfid_bitmap_list.size()) { // m_rotation_angle = 0; @@ -472,7 +472,7 @@ void AMSextruder::doRender(wxDC& dc) { //m_current_colur = wxSize size = GetSize(); - dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID)); + dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxPENSTYLE_SOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); if (!m_none_ams_mode) { @@ -484,24 +484,24 @@ void AMSextruder::doRender(wxDC& dc) if (m_vams_loading) { - if (m_current_colur.Alpha() == 0) { dc.SetPen(wxPen(*wxWHITE, 6, wxSOLID)); } - else { dc.SetPen(wxPen(m_current_colur, 6, wxSOLID)); } + if (m_current_colur.Alpha() == 0) { dc.SetPen(wxPen(*wxWHITE, 6, wxPENSTYLE_SOLID)); } + else { dc.SetPen(wxPen(m_current_colur, 6, wxPENSTYLE_SOLID)); } dc.DrawRoundedRectangle(-size.x / 2, size.y * 0.1, size.x, size.y, 4); if ((m_current_colur == *wxWHITE || m_current_colur.Alpha() == 0) && !wxGetApp().dark_mode()) { - dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxSOLID)); + dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxPENSTYLE_SOLID)); 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) { - if (m_current_colur.Alpha() == 0) {dc.SetPen(wxPen(*wxWHITE, 6, wxSOLID));} - else {dc.SetPen(wxPen(m_current_colur, 6, wxSOLID));} + if (m_current_colur.Alpha() == 0) {dc.SetPen(wxPen(*wxWHITE, 6, wxPENSTYLE_SOLID));} + else {dc.SetPen(wxPen(m_current_colur, 6, wxPENSTYLE_SOLID));} dc.DrawLine(size.x / 2, -1, size.x / 2, size.y * 0.6 - 1); if ((m_current_colur == *wxWHITE || m_current_colur.Alpha() == 0) && !wxGetApp().dark_mode()) { - dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxSOLID)); + dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxPENSTYLE_SOLID)); 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); } @@ -509,12 +509,12 @@ void AMSextruder::doRender(wxDC& dc) } else { if (m_ams_loading) { - if (m_current_colur.Alpha() == 0) { dc.SetPen(wxPen(*wxWHITE, 6, wxSOLID)); } - else { dc.SetPen(wxPen(m_current_colur, 6, wxSOLID)); } + if (m_current_colur.Alpha() == 0) { dc.SetPen(wxPen(*wxWHITE, 6, wxPENSTYLE_SOLID)); } + else { dc.SetPen(wxPen(m_current_colur, 6, wxPENSTYLE_SOLID)); } dc.DrawLine(size.x / 2, -1, size.x / 2, size.y * 0.6 - 1); if ((m_current_colur == *wxWHITE || m_current_colur.Alpha() == 0) && !wxGetApp().dark_mode()) { - dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxSOLID)); + dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxPENSTYLE_SOLID)); 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); } @@ -587,18 +587,18 @@ void AMSVirtualRoad::doRender(wxDC& dc) wxSize size = GetSize(); if (m_vams_loading) { - if (m_current_color.Alpha() == 0) { dc.SetPen(wxPen(*wxWHITE, 6, wxSOLID)); } - else { dc.SetPen(wxPen(m_current_color, 6, wxSOLID)); } + if (m_current_color.Alpha() == 0) { dc.SetPen(wxPen(*wxWHITE, 6, wxPENSTYLE_SOLID)); } + else { dc.SetPen(wxPen(m_current_color, 6, wxPENSTYLE_SOLID)); } } else { - dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID)); + dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxPENSTYLE_SOLID)); } 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 || m_current_color.Alpha() == 0) && !wxGetApp().dark_mode()) { - dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxSOLID)); + dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxPENSTYLE_SOLID)); 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); } @@ -988,11 +988,11 @@ void AMSLib::render_extra_lib(wxDC& dc) //draw road - dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID)); + dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxPENSTYLE_SOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); if (m_pass_road) { - dc.SetPen(wxPen(m_info.material_colour, 6, wxSOLID)); + dc.SetPen(wxPen(m_info.material_colour, 6, wxPENSTYLE_SOLID)); } if (m_can_index == 0 || m_can_index == 3) { @@ -1114,9 +1114,9 @@ void AMSLib::render_generic_lib(wxDC &dc) // selected if (m_selected) { - dc.SetPen(wxPen(tmp_lib_colour, 2, wxSOLID)); + dc.SetPen(wxPen(tmp_lib_colour, 2, wxPENSTYLE_SOLID)); if (tmp_lib_colour.Alpha() == 0) { - dc.SetPen(wxPen(wxColour(tmp_lib_colour.Red(), tmp_lib_colour.Green(),tmp_lib_colour.Blue(),128), 2, wxSOLID)); + dc.SetPen(wxPen(wxColour(tmp_lib_colour.Red(), tmp_lib_colour.Green(),tmp_lib_colour.Blue(),128), 2, wxPENSTYLE_SOLID)); } dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); if (m_radius == 0) { @@ -1131,7 +1131,7 @@ void AMSLib::render_generic_lib(wxDC &dc) } if (!m_selected && m_hover) { - dc.SetPen(wxPen(AMS_CONTROL_BRAND_COLOUR, 2, wxSOLID)); + dc.SetPen(wxPen(AMS_CONTROL_BRAND_COLOUR, 2, wxPENSTYLE_SOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); if (m_radius == 0) { dc.DrawRectangle(0, 0, size.x, size.y); @@ -1144,7 +1144,7 @@ void AMSLib::render_generic_lib(wxDC &dc) dc.SetBrush(wxBrush(tmp_lib_colour)); } else { - dc.SetPen(wxPen(tmp_lib_colour, 1, wxSOLID)); + dc.SetPen(wxPen(tmp_lib_colour, 1, wxPENSTYLE_SOLID)); dc.SetBrush(wxBrush(tmp_lib_colour)); } @@ -1230,7 +1230,7 @@ void AMSLib::render_generic_lib(wxDC &dc) dc.SetBrush(wxBrush(tmp_lib_colour)); } else { - dc.SetPen(wxPen(tmp_lib_colour, 1, wxSOLID)); + dc.SetPen(wxPen(tmp_lib_colour, 1, wxPENSTYLE_SOLID)); dc.SetBrush(wxBrush(tmp_lib_colour)); } } @@ -1260,7 +1260,7 @@ void AMSLib::render_generic_lib(wxDC &dc) #endif } if (tmp_lib_colour.Red() > 238 && tmp_lib_colour.Green() > 238 && tmp_lib_colour.Blue() > 238) { - dc.SetPen(wxPen(wxColour(130, 129, 128), 1, wxSOLID)); + dc.SetPen(wxPen(wxColour(130, 129, 128), 1, wxPENSTYLE_SOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); dc.DrawLine(FromDIP(4), FromDIP(4) + top, size.x - FromDIP(4), FromDIP(4) + top); } @@ -1268,10 +1268,10 @@ void AMSLib::render_generic_lib(wxDC &dc) else { dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); if (tmp_lib_colour.Red() > 238 && tmp_lib_colour.Green() > 238 && tmp_lib_colour.Blue() > 238) { - dc.SetPen(wxPen(wxColour(130, 129, 128), 2, wxSOLID)); + dc.SetPen(wxPen(wxColour(130, 129, 128), 2, wxPENSTYLE_SOLID)); } else { - dc.SetPen(wxPen(tmp_lib_colour, 2, wxSOLID)); + dc.SetPen(wxPen(tmp_lib_colour, 2, wxPENSTYLE_SOLID)); } #ifdef __APPLE__ @@ -1285,7 +1285,7 @@ void AMSLib::render_generic_lib(wxDC &dc) } //border - dc.SetPen(wxPen(wxColour(130, 130, 128), 1, wxSOLID)); + dc.SetPen(wxPen(wxColour(130, 130, 128), 1, wxPENSTYLE_SOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); #ifdef __APPLE__ dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4), size.x - FromDIP(7), size.y - FromDIP(7), m_radius); @@ -1371,7 +1371,6 @@ AMSRoad::AMSRoad(wxWindow *parent, wxWindowID id, Caninfo info, int canindex, in m_info = info; m_canindex = canindex; // road type - auto mode = AMSRoadMode::AMS_ROAD_MODE_END; if (m_canindex == 0 && maxcan == 1) { m_rode_mode = AMSRoadMode::AMS_ROAD_MODE_NONE; } else if (m_canindex == 0 && maxcan > 1) { @@ -1492,7 +1491,7 @@ void AMSRoad::doRender(wxDC &dc) { wxSize size = GetSize(); - dc.SetPen(wxPen(m_road_def_color, 2, wxSOLID)); + dc.SetPen(wxPen(m_road_def_color, 2, wxPENSTYLE_SOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); // left mode if (m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_LEFT) { dc.DrawRoundedRectangle(-10, -10, size.x / 2 + 10, size.y * 0.6 + 10, 4); } @@ -1535,8 +1534,8 @@ void AMSRoad::doRender(wxDC &dc) // mode none // if (m_pass_rode_mode.size() == 1 && m_pass_rode_mode[0] == AMSPassRoadMode::AMS_ROAD_MODE_NONE) return; - if (m_road_color.Alpha() == 0) {dc.SetPen(wxPen(*wxWHITE, m_passroad_width, wxSOLID));} - else {dc.SetPen(wxPen(m_road_color, m_passroad_width, wxSOLID));} + if (m_road_color.Alpha() == 0) {dc.SetPen(wxPen(*wxWHITE, m_passroad_width, wxPENSTYLE_SOLID));} + else {dc.SetPen(wxPen(m_road_color, m_passroad_width, wxPENSTYLE_SOLID));} dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); @@ -1563,7 +1562,7 @@ void AMSRoad::doRender(wxDC &dc) // 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)); + dc.SetPen(wxPen(m_road_def_color, 2, wxPENSTYLE_SOLID)); dc.SetBrush(wxBrush(m_road_def_color)); dc.DrawRoundedRectangle(size.x * 0.37 / 2, size.y * 0.6 - size.y / 6, size.x * 0.63, size.y / 3, m_radius); } @@ -2244,7 +2243,7 @@ void AmsCans::doRender(wxDC& dc) // A1 - dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID)); + dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxPENSTYLE_SOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); try @@ -2285,32 +2284,32 @@ void AmsCans::doRender(wxDC& dc) if (!m_road_canid.empty()) { if (m_road_canid == "0") { - dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID)); + dc.SetPen(wxPen(m_road_colour, passroad_width, wxPENSTYLE_SOLID)); dc.DrawLine(a1_left, FromDIP(30), a1_left, a1_top); dc.DrawLine(a1_left, a1_top, end_top, a1_top); } if (m_road_canid == "1") { - dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID)); + dc.SetPen(wxPen(m_road_colour, passroad_width, wxPENSTYLE_SOLID)); dc.DrawLine(a2_left, FromDIP(160), a2_left, a2_top); dc.DrawLine(a2_left, a2_top, end_top, a2_top); } if (m_road_canid == "2") { - dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID)); + dc.SetPen(wxPen(m_road_colour, passroad_width, wxPENSTYLE_SOLID)); dc.DrawLine(a3_left, FromDIP(160), a3_left, a3_top); dc.DrawLine(a3_left, a3_top, end_top, a3_top); } if (m_road_canid == "3") { - dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID)); + dc.SetPen(wxPen(m_road_colour, passroad_width, wxPENSTYLE_SOLID)); dc.DrawLine(a4_left, FromDIP(30), a4_left, a4_top); dc.DrawLine(a4_left, a4_top, end_top, a4_top); } } //to Extruder - dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID)); + dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxPENSTYLE_SOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); dc.DrawLine(end_top, a1_top, end_top, size.y); @@ -2318,19 +2317,19 @@ void AmsCans::doRender(wxDC& dc) if (!m_road_canid.empty()) { if (!m_road_canid.empty()) { if (m_road_canid == "0") { - dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID)); + dc.SetPen(wxPen(m_road_colour, passroad_width, wxPENSTYLE_SOLID)); dc.DrawLine(end_top, a1_top, end_top, size.y); } else if (m_road_canid == "1") { - dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID)); + dc.SetPen(wxPen(m_road_colour, passroad_width, wxPENSTYLE_SOLID)); dc.DrawLine(end_top, a2_top, end_top, size.y); } else if (m_road_canid == "2") { - dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID)); + dc.SetPen(wxPen(m_road_colour, passroad_width, wxPENSTYLE_SOLID)); dc.DrawLine(end_top, a3_top, end_top, size.y); } else if (m_road_canid == "3") { - dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID)); + dc.SetPen(wxPen(m_road_colour, passroad_width, wxPENSTYLE_SOLID)); dc.DrawLine(end_top, a4_top, end_top, size.y); } } @@ -3100,7 +3099,6 @@ void AMSControl::SetClibrationLink(wxString link) void AMSControl::PlayRridLoading(wxString amsid, wxString canid) { AmsCansHash::iterator iter = m_ams_cans_list.begin(); - auto count_item_index = 0; for (auto i = 0; i < m_ams_cans_list.GetCount(); i++) { AmsCansWindow *cans = m_ams_cans_list[i]; @@ -3112,7 +3110,6 @@ void AMSControl::PlayRridLoading(wxString amsid, wxString canid) void AMSControl::StopRridLoading(wxString amsid, wxString canid) { AmsCansHash::iterator iter = m_ams_cans_list.begin(); - auto count_item_index = 0; for (auto i = 0; i < m_ams_cans_list.GetCount(); i++) { AmsCansWindow *cans = m_ams_cans_list[i]; diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index afcee66365d..701be1bf34f 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -175,7 +175,7 @@ class AMSrefresh : public wxWindow void PlayLoading(); void StopLoading(); void create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size); - void on_timer(wxTimerEvent &event); + void on_timer(); void OnEnterWindow(wxMouseEvent &evt); void OnLeaveWindow(wxMouseEvent &evt); void OnClick(wxMouseEvent &evt); diff --git a/src/slic3r/GUI/Widgets/ComboBox.cpp b/src/slic3r/GUI/Widgets/ComboBox.cpp index 79ae2fc8baa..fc66d524a54 100644 --- a/src/slic3r/GUI/Widgets/ComboBox.cpp +++ b/src/slic3r/GUI/Widgets/ComboBox.cpp @@ -24,7 +24,7 @@ static wxWindow *GetScrollParent(wxWindow *pWindow) wxWindow *pWin = pWindow; while (pWin->GetParent()) { auto pWin2 = pWin->GetParent(); - if (auto top = dynamic_cast(pWin2)) + if (dynamic_cast(pWin2)) return dynamic_cast(pWin); pWin = pWin2; } @@ -58,7 +58,7 @@ ComboBox::ComboBox(wxWindow *parent, std::make_pair(0xE5F0EE, (int) StateColor::Focused), // ORCA updated background color for focused item std::make_pair(*wxWHITE, (int) StateColor::Normal))); TextInput::SetLabelColor(StateColor( - std::make_pair(wxColour("#ACACAC"), (int) StateColor::Disabled), // ORCA: Use same color for disabled text on combo boxes + std::make_pair(0x6B6B6B, (int) StateColor::Disabled), // ORCA: Use same color for disabled text on combo boxes std::make_pair(0x262E30, (int) StateColor::Normal))); } if (auto scroll = GetScrollParent(this)) diff --git a/src/slic3r/GUI/Widgets/FanControl.cpp b/src/slic3r/GUI/Widgets/FanControl.cpp index 222362e9171..e7430037d41 100644 --- a/src/slic3r/GUI/Widgets/FanControl.cpp +++ b/src/slic3r/GUI/Widgets/FanControl.cpp @@ -112,7 +112,7 @@ void Fan::render(wxDC& dc) void Fan::doRender(wxDC& dc) { - auto rpm = wxT("rpm"); + // auto rpm = wxT("rpm"); wxSize size = GetSize(); dc.DrawBitmap(m_bitmap_bk.bmp(), wxPoint(0,0)); diff --git a/src/slic3r/GUI/Widgets/ImageSwitchButton.cpp b/src/slic3r/GUI/Widgets/ImageSwitchButton.cpp index af48b6d27ad..d30f94976d6 100644 --- a/src/slic3r/GUI/Widgets/ImageSwitchButton.cpp +++ b/src/slic3r/GUI/Widgets/ImageSwitchButton.cpp @@ -108,7 +108,6 @@ void ImageSwitchButton::render(wxDC& dc) wxSize size = GetSize(); wxSize szIcon; - wxSize szContent = textSize; ScalableBitmap &icon = GetValue() ? m_on : m_off; int content_height = icon.GetBmpHeight() + textSize.y + m_padding; @@ -268,7 +267,6 @@ void FanSwitchButton::render(wxDC& dc) wxSize size = GetSize(); wxSize szIcon; - wxSize szContent = textSize; ScalableBitmap& icon = GetValue() ? m_on : m_off; //int content_height = icon.GetBmpHeight() + textSize.y + m_padding; diff --git a/src/slic3r/GUI/Widgets/RoundedRectangle.cpp b/src/slic3r/GUI/Widgets/RoundedRectangle.cpp index 07f2aa0b305..f86f144ddc8 100644 --- a/src/slic3r/GUI/Widgets/RoundedRectangle.cpp +++ b/src/slic3r/GUI/Widgets/RoundedRectangle.cpp @@ -1,5 +1,4 @@ #include "RoundedRectangle.hpp" -#include "../wxExtensions.hpp" #include #include diff --git a/src/slic3r/GUI/Widgets/SpinInput.cpp b/src/slic3r/GUI/Widgets/SpinInput.cpp index 795b38df897..cee447769ec 100644 --- a/src/slic3r/GUI/Widgets/SpinInput.cpp +++ b/src/slic3r/GUI/Widgets/SpinInput.cpp @@ -21,8 +21,8 @@ END_EVENT_TABLE() */ SpinInput::SpinInput() - : label_color(std::make_pair(0x909090, (int) StateColor::Disabled), std::make_pair(0x6B6B6B, (int) StateColor::Normal)) - , text_color(std::make_pair(0x909090, (int) StateColor::Disabled), std::make_pair(0x262E30, (int) StateColor::Normal)) + : label_color(std::make_pair(0x6B6B6B, (int) StateColor::Disabled), std::make_pair(0x6B6B6B, (int) StateColor::Normal)) + , text_color(std::make_pair(0x6B6B6B, (int) StateColor::Disabled), std::make_pair(0x262E30, (int) StateColor::Normal)) { radius = 0; border_width = 1; @@ -205,8 +205,6 @@ void SpinInput::messureSize() if (size.y < h) { size.y = h; } - wxSize minSize = size; - minSize.x = GetMinWidth(); StaticBox::SetSize(size); SetMinSize(size); wxSize btnSize = {14, (size.y - 4) / 2}; diff --git a/src/slic3r/GUI/Widgets/StateColor.cpp b/src/slic3r/GUI/Widgets/StateColor.cpp index 9038d9c62fd..f2e1b07027d 100644 --- a/src/slic3r/GUI/Widgets/StateColor.cpp +++ b/src/slic3r/GUI/Widgets/StateColor.cpp @@ -6,43 +6,43 @@ static bool gDarkMode = false; static bool operator<(wxColour const &l, wxColour const &r) { return l.GetRGBA() < r.GetRGBA(); } static std::map gDarkColors{ - {"#009688", "#00675b"}, - {"#1F8EEA", "#2778D2"}, - {"#FF6F00", "#D15B00"}, - {"#D01B1B", "#BB2A3A"}, - {"#262E30", "#EFEFF0"}, - {"#2C2C2E", "#B3B3B4"}, - {"#6B6B6B", "#818183"}, - {"#ACACAC", "#54545A"}, - {"#EEEEEE", "#4C4C55"}, - {"#E8E8E8", "#3E3E45"}, - {"#323A3D", "#E5E5E4"}, - {"#FFFFFF", "#2D2D31"}, - {"#F8F8F8", "#36363C"}, - {"#F1F1F1", "#36363B"}, - {"#3B4446", "#2D2D30"}, - {"#CECECE", "#54545B"}, - {"#DBFDD5", "#3B3B40"}, - {"#000000", "#FFFFFE"}, - {"#F4F4F4", "#36363D"}, - {"#DBDBDB", "#4A4A51"}, - {"#EDFAF2", "#283232"}, - {"#323A3C", "#E5E5E6"}, - {"#6B6B6A", "#B3B3B5"}, - {"#303A3C", "#E5E5E5"}, - {"#FEFFFF", "#242428"}, - {"#A6A9AA", "#2D2D29"}, - {"#363636", "#B2B3B5"}, - {"#F0F0F1", "#404040"}, - {"#9E9E9E", "#53545A"}, - {"#D7E8DE", "#1F2B27"}, - {"#2B3436", "#808080"}, + {"#009688", "#00675b"}, // rgb(0, 150, 136) ORCA color + {"#1F8EEA", "#2778D2"}, // rgb(31, 142, 234) ??? + {"#FF6F00", "#D15B00"}, // rgb(255, 111, 0) Secondary color + {"#D01B1B", "#BB2A3A"}, // rgb(208, 27, 27) ??? + {"#262E30", "#EFEFF0"}, // rgb(38, 46, 48) Button text color | Input Text Color + {"#2C2C2E", "#B3B3B4"}, // rgb(44, 44, 46) ??? + {"#6B6B6B", "#818183"}, // rgb(107, 107, 107) Disabled Text + {"#ACACAC", "#65656A"}, // rgb(172, 172, 172) Disabled Text on boxes | Dimmed Elements + {"#EEEEEE", "#4C4C55"}, // rgb(238, 238, 238) Separator Line | Title Line Color + {"#E8E8E8", "#3E3E45"}, // rgb(232, 232, 232) ??? + {"#323A3D", "#E5E5E4"}, // rgb(50, 58, 61) Softer text color + {"#FFFFFF", "#2D2D31"}, // rgb(255, 255, 255) Window background + {"#F8F8F8", "#36363C"}, // rgb(248, 248, 248) Sidebar > Titlebar > Gradient Top | BBL monitor page titlebar bg + {"#F1F1F1", "#36363B"}, // rgb(241, 241, 241) Sidebar > Titlebar > Gradient Bottom + {"#3B4446", "#2D2D30"}, // rgb(59, 68, 78) Top Bar / Main tab bar bg color + {"#CECECE", "#54545B"}, // rgb(206, 206, 206) Sidebar wxPanel bg | + {"#DBFDD5", "#3B3B40"}, // rgb(219, 253, 213) Not Used anymore // Was used for BBS combo boxes etc + {"#000000", "#FFFFFE"}, // rgb(0, 0, 0) Mostly Text color wxBlack + {"#F4F4F4", "#36363D"}, // rgb(244, 244, 244) ??? + {"#DBDBDB", "#4A4A51"}, // rgb(219, 219, 219) Input/Combo Box Border Color + {"#EDFAF2", "#283232"}, // rgb(229, 240, 238) Not Used anymore // Was used for BBS Combo / Dropdown focused background color + {"#323A3C", "#E5E5E6"}, // rgb(50, 58, 60) Text color used on search list | + {"#6B6B6A", "#B3B3B5"}, // rgb(107, 107, 106) Button Dimmed text | Input box side text + {"#303A3C", "#E5E5E5"}, // rgb(48, 58, 60) Object Table > Column header text color | StaticBox Border Color + {"#FEFFFF", "#242428"}, // rgb(254, 255, 255) Side Tabbar bg | + {"#A6A9AA", "#2D2D29"}, // rgb(166, 169, 170) Seperator color + {"#363636", "#B2B3B5"}, // rgb(54, 54, 54) Sidebar > Parameter Label/Title color | Sidebar tab text | Create Filament window text + {"#F0F0F1", "#333337"}, // rgb(240, 240, 241) Disabled element background // ORCA Used better background color for dark mode + {"#9E9E9E", "#53545A"}, // rgb(158, 158, 158) ??? + {"#D7E8DE", "#1F2B27"}, // rgb(215, 232, 222) Not Used anymore // Leftover from BBS + {"#2B3436", "#808080"}, // rgb(43, 52, 54) Not Used anymore // Leftover from BBS. Was used as main fill color of icons {"#ABABAB", "#ABABAB"}, - {"#D9D9D9", "#2D2D32"}, + {"#D9D9D9", "#2D2D32"}, // rgb(217, 217, 217) Sidebar > Toggle button track color //{"#F0F0F0", "#4C4C54"}, - // ORCA - {"#BFE1DE", "#223C3C"}, // rgb(191, 225, 222) Dropdown checked item background color > ORCA color with %25 opacity - {"#E5F0EE", "#283232"}, // rgb(229, 240, 238) Combo / Dropdown focused background color > ORCA color with %10 opacity + // ORCA + {"#BFE1DE", "#223C3C"}, // rgb(191, 225, 222) Dropdown checked item background color > ORCA color with %25 opacity + {"#E5F0EE", "#283232"}, // rgb(229, 240, 238) Combo / Dropdown focused background color > ORCA color with %10 opacity }; std::tuple StateColor::GetLAB(const wxColour& color) { diff --git a/src/slic3r/GUI/Widgets/StepCtrl.cpp b/src/slic3r/GUI/Widgets/StepCtrl.cpp index 73a3e80dd31..cdd25ea1f07 100644 --- a/src/slic3r/GUI/Widgets/StepCtrl.cpp +++ b/src/slic3r/GUI/Widgets/StepCtrl.cpp @@ -322,7 +322,6 @@ void StepIndicator::doRender(wxDC &dc) dc.DrawEllipse(circleX - radius, circleY - radius, radius * 2, radius * 2); // Draw content ( icon or text ) in circle if (disabled) { - wxSize sz = bmp_ok.GetBmpSize(); dc.DrawBitmap(bmp_ok.bmp(), circleX - radius, circleY - radius); } else { dc.SetFont(font_tip); diff --git a/src/slic3r/GUI/Widgets/TabCtrl.cpp b/src/slic3r/GUI/Widgets/TabCtrl.cpp index 36778f68165..73d792a4e09 100644 --- a/src/slic3r/GUI/Widgets/TabCtrl.cpp +++ b/src/slic3r/GUI/Widgets/TabCtrl.cpp @@ -304,7 +304,7 @@ void TabCtrl::doRender(wxDC& dc) #else dc.SetPen(wxPen(border_color.colorForStates(states), border_width)); dc.DrawLine(0, size.y - BS2, size.x, size.y - BS2); - wxColour c(0xf2, 0x75, 0x4e, 0xff); + wxColour c("#009688"); // ORCA selected tab underline stroke color dc.SetPen(wxPen(c, 1)); dc.SetBrush(c); dc.DrawRoundedRectangle(x1 - radius, size.y - BS2 - border_width * 3, x2 + radius * 2 - x1, border_width * 3, radius); diff --git a/src/slic3r/GUI/Widgets/TempInput.cpp b/src/slic3r/GUI/Widgets/TempInput.cpp index f581f73bf18..6ae82776dea 100644 --- a/src/slic3r/GUI/Widgets/TempInput.cpp +++ b/src/slic3r/GUI/Widgets/TempInput.cpp @@ -412,7 +412,6 @@ void TempInput::render(wxDC &dc) /*if (!text.IsEmpty()) { }*/ - wxSize textSize = text_ctrl->GetSize(); if (align_right) { if (pt.x + labelSize.x > size.x) text = wxControl::Ellipsize(text, dc, wxELLIPSIZE_END, size.x - pt.x); pt.y = (size.y - labelSize.y) / 2; diff --git a/src/slic3r/GUI/Widgets/TextInput.cpp b/src/slic3r/GUI/Widgets/TextInput.cpp index 6e1c0f11e27..0aaeaa23da3 100644 --- a/src/slic3r/GUI/Widgets/TextInput.cpp +++ b/src/slic3r/GUI/Widgets/TextInput.cpp @@ -19,9 +19,9 @@ END_EVENT_TABLE() */ TextInput::TextInput() - : label_color(std::make_pair(0x909090, (int) StateColor::Disabled), + : label_color(std::make_pair(0x6B6B6B, (int) StateColor::Disabled), std::make_pair(0x6B6B6B, (int) StateColor::Normal)) - , text_color(std::make_pair(0x909090, (int) StateColor::Disabled), + , text_color(std::make_pair(0x6B6B6B, (int) StateColor::Disabled), std::make_pair(0x262E30, (int) StateColor::Normal)) { radius = 0; diff --git a/src/slic3r/GUI/Widgets/WebView.cpp b/src/slic3r/GUI/Widgets/WebView.cpp index 11f431c308a..2bbe519c463 100644 --- a/src/slic3r/GUI/Widgets/WebView.cpp +++ b/src/slic3r/GUI/Widgets/WebView.cpp @@ -373,7 +373,7 @@ bool WebView::RunScript(wxWebView *webView, wxString const &javascript) }, NULL); return true; #endif - } catch (std::exception &e) { + } catch (std::exception&) { return false; } } diff --git a/src/slic3r/GUI/WipeTowerDialog.cpp b/src/slic3r/GUI/WipeTowerDialog.cpp index 78662c1f3a9..e965c803ffc 100644 --- a/src/slic3r/GUI/WipeTowerDialog.cpp +++ b/src/slic3r/GUI/WipeTowerDialog.cpp @@ -3,7 +3,6 @@ #include "libslic3r/FlushVolCalc.hpp" #include "WipeTowerDialog.hpp" #include "BitmapCache.hpp" -#include "GUI.hpp" #include "I18N.hpp" #include "GUI_App.hpp" #include "MsgDialog.hpp" @@ -735,9 +734,6 @@ void WipingPanel::update_warning_texts() static const wxColour g_warning_color = *wxRED; static const wxColour g_normal_color = *wxBLACK; - wxString multi_str = m_flush_multiplier_ebox->GetValue(); - float multiplier = wxAtof(multi_str); - bool has_exception_flush = false; for (int i = 0; i < edit_boxes.size(); i++) { auto& box_vec = edit_boxes[i]; diff --git a/src/slic3r/GUI/wxExtensions.cpp b/src/slic3r/GUI/wxExtensions.cpp index b542723e158..65ed46ba423 100644 --- a/src/slic3r/GUI/wxExtensions.cpp +++ b/src/slic3r/GUI/wxExtensions.cpp @@ -491,7 +491,6 @@ wxBitmap* get_default_extruder_color_icon(bool thin_icon/* = false*/) const double em = Slic3r::GUI::wxGetApp().em_unit(); const int icon_width = lround((thin_icon ? 2 : 4.5) * em); const int icon_height = lround(2 * em); - bool dark_mode = Slic3r::GUI::wxGetApp().dark_mode(); wxClientDC cdc((wxWindow*)Slic3r::GUI::wxGetApp().mainframe); wxMemoryDC dc(&cdc); diff --git a/src/slic3r/Utils/ASCIIFolding.cpp b/src/slic3r/Utils/ASCIIFolding.cpp index 0eb02a5f8cd..7e474480675 100644 --- a/src/slic3r/Utils/ASCIIFolding.cpp +++ b/src/slic3r/Utils/ASCIIFolding.cpp @@ -1953,8 +1953,7 @@ std::string fold_utf8_to_ascii(const std::string &src, bool is_convert_for_filen for (wchar_t c : wstr) fold_to_ascii(c, out); if (is_convert_for_filename) { - std::wstring_convert> converter; - auto dstStr = converter.to_bytes(dst); + auto dstStr = boost::locale::conv::utf_to_utf(dst); std::size_t found = dstStr.find_last_of("/\\"); if (found != std::string::npos) { @@ -1964,7 +1963,7 @@ std::string fold_utf8_to_ascii(const std::string &src, bool is_convert_for_filen std::string newFileName = regex_replace(filename, reg, ""); dstStr = dir + "\\" + newFileName; } - dst = converter.from_bytes(dstStr); + return dstStr; } return boost::locale::conv::utf_to_utf(dst.c_str(), dst.c_str() + dst.size()); diff --git a/src/slic3r/Utils/CalibUtils.cpp b/src/slic3r/Utils/CalibUtils.cpp index b5f9aaf0edd..88c59075ea7 100644 --- a/src/slic3r/Utils/CalibUtils.cpp +++ b/src/slic3r/Utils/CalibUtils.cpp @@ -519,7 +519,7 @@ bool CalibUtils::calib_flowrate(int pass, const CalibInfo &calib_info, wxString const ConfigOptionFloats *nozzle_diameter_config = printer_config.option("nozzle_diameter"); assert(nozzle_diameter_config->values.size() > 0); float nozzle_diameter = nozzle_diameter_config->values[0]; - float xyScale = nozzle_diameter / 0.6; + // float xyScale = nozzle_diameter / 0.6; // scale z to have 7 layers double first_layer_height = print_config.option("initial_layer_print_height")->value; double layer_height = nozzle_diameter / 2.0; // prefer 0.2 layer height for 0.4 nozzle @@ -1067,7 +1067,6 @@ bool CalibUtils::process_and_store_3mf(Model *model, const DynamicPrintConfig &f { GLVolumeCollection glvolume_collection; std::vector colors_out(1); - unsigned char rgb_color[4] = {255, 255, 255, 255}; ColorRGBA new_color {1.0f, 1.0f, 1.0f, 1.0f}; colors_out.push_back(new_color); @@ -1080,9 +1079,9 @@ bool CalibUtils::process_and_store_3mf(Model *model, const DynamicPrintConfig &f const ModelObject &model_object = *model->objects[obj_idx]; for (int volume_idx = 0; volume_idx < (int)model_object.volumes.size(); ++ volume_idx) { - const ModelVolume &model_volume = *model_object.volumes[volume_idx]; + // const ModelVolume &model_volume = *model_object.volumes[volume_idx]; for (int instance_idx = 0; instance_idx < (int)model_object.instances.size(); ++ instance_idx) { - const ModelInstance &model_instance = *model_object.instances[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()->set_render_color(new_color); glvolume_collection.volumes.back()->set_color(new_color); @@ -1128,11 +1127,11 @@ bool CalibUtils::process_and_store_3mf(Model *model, const DynamicPrintConfig &f store_params.strategy = SaveStrategy::Silence | SaveStrategy::WithGcode | SaveStrategy::SplitModel | SaveStrategy::SkipModel; - bool success = Slic3r::store_bbs_3mf(store_params); + Slic3r::store_bbs_3mf(store_params); store_params.strategy = SaveStrategy::Silence | SaveStrategy::SplitModel | SaveStrategy::WithSliceInfo | SaveStrategy::SkipAuxiliary; store_params.path = config_3mf_path.c_str(); - success = Slic3r::store_bbs_3mf(store_params); + Slic3r::store_bbs_3mf(store_params); release_PlateData_list(plate_data_list); return true; diff --git a/src/slic3r/Utils/ESP3D.cpp b/src/slic3r/Utils/ESP3D.cpp index 57b917e3a19..c95d292afe7 100644 --- a/src/slic3r/Utils/ESP3D.cpp +++ b/src/slic3r/Utils/ESP3D.cpp @@ -1,8 +1,6 @@ #include "ESP3D.hpp" #include -#include -#include #include #include #include @@ -12,13 +10,7 @@ #include #include -#include #include -#include -#include -#include -#include -#include #include "libslic3r/PrintConfig.hpp" #include "slic3r/GUI/GUI.hpp" @@ -26,7 +18,6 @@ #include "slic3r/GUI/MsgDialog.hpp" #include "Http.hpp" #include "SerialMessage.hpp" -#include "SerialMessageType.hpp" namespace fs = boost::filesystem; namespace pt = boost::property_tree; @@ -67,7 +58,7 @@ bool ESP3D::upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn std::string short_name = get_short_name(upload_data.upload_path.string()); bool res = false; - auto http = Http::post(std::move((boost::format("http://%1%/upload_serial") % m_host).str())); + auto http = Http::post((boost::format("http://%1%/upload_serial") % m_host).str()); http.header("Connection", "keep-alive") .form_add_file("file", upload_data.source_path, short_name) .on_complete([&](std::string body, unsigned status) { @@ -180,4 +171,4 @@ std::string ESP3D::format_command(const std::string& path, const std::string& ar return (boost::format("http://%1%%2%?%3%=%4%") % m_host % path % arg % val).str(); } -} // namespace Slic3r \ No newline at end of file +} // namespace Slic3r diff --git a/src/slic3r/Utils/Obico.cpp b/src/slic3r/Utils/Obico.cpp index 5541d1c6830..6486e43114d 100644 --- a/src/slic3r/Utils/Obico.cpp +++ b/src/slic3r/Utils/Obico.cpp @@ -10,10 +10,8 @@ #include #include #include -#include #include -#include #include #include "slic3r/GUI/GUI.hpp" @@ -22,8 +20,6 @@ #include "slic3r/GUI/format.hpp" #include "Http.hpp" #include "libslic3r/AppConfig.hpp" -#include "Bonjour.hpp" -#include "slic3r/GUI/BonjourDialog.hpp" namespace fs = boost::filesystem; namespace pt = boost::property_tree; diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp index cdd91eb22ec..55bb4264636 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -52,7 +52,6 @@ using Slic3r::GUI::Config::SnapshotDB; namespace Slic3r { -static const char *INDEX_FILENAME = "index.idx"; static const char *TMP_EXTENSION = ".data"; diff --git a/src/slic3r/Utils/UndoRedo.cpp b/src/slic3r/Utils/UndoRedo.cpp index eaf90c73490..8e7bd703c34 100644 --- a/src/slic3r/Utils/UndoRedo.cpp +++ b/src/slic3r/Utils/UndoRedo.cpp @@ -1071,7 +1071,7 @@ bool StackImpl::has_redo_snapshot() const // BBS: undo-redo until modify record auto it = std::lower_bound(m_snapshots.begin(), m_snapshots.end(), Snapshot(m_active_snapshot_time)); - for (it; it != m_snapshots.end(); ++it) { + for (; it != m_snapshots.end(); ++it) { if (snapshot_modifies_project(*it)) return true; } @@ -1340,12 +1340,12 @@ bool StackImpl::has_real_change_from(size_t time) const Snapshot(m_active_snapshot_time)); if (it_active == m_snapshots.end()) return true; if (it_active > it_time) { - for (it_time; it_time < it_active; ++it_time) { + for (; it_time < it_active; ++it_time) { if (snapshot_modifies_project(*it_time)) return true; } } else { - for (it_active; it_active < it_time; ++it_active) { + for (; it_active < it_time; ++it_active) { if (snapshot_modifies_project(*it_active)) return true; }