diff --git a/.github/workflows/build_deps.yml b/.github/workflows/build_deps.yml
index e9ce9a8563..163cbca23c 100644
--- a/.github/workflows/build_deps.yml
+++ b/.github/workflows/build_deps.yml
@@ -66,11 +66,6 @@ jobs:
working-directory: ${{ github.workspace }}
run: |
choco install strawberryperl
- $Folder = ${{ github.workspace }}/deps/build
- if (!(Test-Path -Path $Folder)) {
- mkdir ${{ github.workspace }}/deps/build
- mkdir ${{ github.workspace }}/deps/build/OrcaSlicer_dep
- }
.\build_release_vs2022.bat deps
.\build_release_vs2022.bat pack
cd ${{ github.workspace }}/deps/build
diff --git a/README.md b/README.md
index 47d8bc51cf..22f8d26f32 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@ Join our Discord community here:
🚨🚨🚨Important Security Alert🚨🚨🚨
-Please be aware that "**orcaslicer.net**" or "**orcaslicer.info**" are NOT an official website for OrcaSlicer and may be potentially malicious. These sites appear to use AI-generated content, lacking genuine context and seems to exist solely to profit from advertisements. Worse, it may redirect download links to harmful sources. For your safety, avoid downloading OrcaSlicer from this site as the links may be compromised.
+Please be aware that "**orcaslicer.net**", "**orcaslicer.co**" or "**orca-slicer.com**" are NOT an official website for OrcaSlicer and may be potentially malicious. These sites appear to use AI-generated content, lacking genuine context and seems to exist solely to profit from advertisements. Worse, it may redirect download links to harmful sources. For your safety, avoid downloading OrcaSlicer from this site as the links may be compromised.
If you see the above sites in your searches, report them as spam or unsafe to the search engine. This small action will assist everyone.
diff --git a/cmake/modules/Findlibnoise.cmake b/cmake/modules/Findlibnoise.cmake
new file mode 100644
index 0000000000..f40ce0fabd
--- /dev/null
+++ b/cmake/modules/Findlibnoise.cmake
@@ -0,0 +1,15 @@
+find_path(LIBNOISE_INCLUDE_DIR libnoise/noise.h)
+find_library(LIBNOISE_LIBRARY NAMES libnoise libnoise_static liblibnoise_static)
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(libnoise DEFAULT_MSG
+ LIBNOISE_LIBRARY
+ LIBNOISE_INCLUDE_DIR
+)
+
+if(libnoise_FOUND)
+ add_library(noise::noise STATIC IMPORTED)
+ set_target_properties(noise::noise PROPERTIES
+ IMPORTED_LOCATION "${LIBNOISE_LIBRARY}"
+ INTERFACE_INCLUDE_DIRECTORIES "${LIBNOISE_INCLUDE_DIR}"
+ )
+endif()
\ No newline at end of file
diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt
index 88915369f7..77cae3382b 100644
--- a/deps/CMakeLists.txt
+++ b/deps/CMakeLists.txt
@@ -293,6 +293,7 @@ include(MPFR/MPFR.cmake)
include(CGAL/CGAL.cmake)
include(NLopt/NLopt.cmake)
+include(libnoise/libnoise.cmake)
# I *think* 1.1 is used for *just* md5 hashing?
@@ -360,6 +361,7 @@ set(_dep_list
${PNG_PKG}
${ZLIB_PKG}
${EXPAT_PKG}
+ dep_libnoise
)
if (MSVC)
diff --git a/deps/libnoise/libnoise.cmake b/deps/libnoise/libnoise.cmake
new file mode 100644
index 0000000000..0e19f26926
--- /dev/null
+++ b/deps/libnoise/libnoise.cmake
@@ -0,0 +1,4 @@
+orcaslicer_add_cmake_project(libnoise
+ URL https://github.com/SoftFever/Orca-deps-libnoise/archive/refs/tags/1.0.zip
+ URL_HASH SHA256=96ffd6cc47898dd8147aab53d7d1b1911b507d9dbaecd5613ca2649468afd8b6
+)
\ No newline at end of file
diff --git a/doc/Home.md b/doc/Home.md
index 998edbe409..0abdd8fc01 100644
--- a/doc/Home.md
+++ b/doc/Home.md
@@ -36,3 +36,4 @@ The guide below takes you through the key calibration tests in Orca - flow rate,
- [How to build Orca Slicer](./How-to-build)
- [Localization and translation guide](Localization_guide)
- [Developer Reference](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/developer-reference/Home.md)
+- [How to create profiles](./How-to-create-profiles)
\ No newline at end of file
diff --git a/doc/How-to-create-profiles.md b/doc/How-to-create-profiles.md
new file mode 100644
index 0000000000..3161a71633
--- /dev/null
+++ b/doc/How-to-create-profiles.md
@@ -0,0 +1,180 @@
+# Guide: Develop Profiles for OrcaSlicer
+
+## Introduction
+This guide will help you develop profiles for OrcaSlicer.
+
+## High-level Overview
+OrcaSlicer uses JSON files to store profiles. There are four types of profiles:
+1. Printer model (type `machine_model`). Example: `Orca 3D Fuse1.json`
+2. Printer variant (type `machine`). Example: `Orca 3D Fuse1 0.2 nozzle.json`
+3. Filament (type `filament`). Example: `Generic PLA @Orca 3D Fuse1@.json`
+4. Process (type `process`). Example: `0.10mm Standard @Orca 3D Fuse1 0.2.json`
+
+Additionally, there is an overall meta file for each vendor (`Orca 3D.json`).
+
+For easier understanding, let's consider a scenario with a printer manufacturer called `Orca 3D`. The manufacturer offers one printer model called `Fuse 1`, which supports 0.2/0.4/0.6/0.8mm nozzles and common market filaments.
+
+In this case:
+- Vendor profile: `Orca 3D`
+- Printer profile: `Orca 3D Fuse1`
+- Printer variant profile: `Orca 3D Fuse1 0.4 nozzle`
+- Filament profile: `Generic PLA @Orca 3D Fuse1@`
+- Process profile: `0.20mm Standard @Orca 3D Fuse1 0.4`
+
+The profile name should be same as the filename without the `.json` extension in principal.
+Naming conventions:
+1. Vendor profile: `vendor_name.json`
+2. Printer profile: `vendor_name` + `printer_name` + `.json`
+3. Printer variant profile: `vendor_name` + `printer_variant_name` + `.json` (where `printer_variant_name` typically includes `printer_name` + `nozzle_diameter`)
+4. Filament profile: `filament_vendor_name` + `filament_name` + " @" + `vendor_name` + `printer_name`/`printer_variant_name` + `.json`
+5. Process profile: `layer_height` + `preset_name` + " @" + `vendor_name` + `printer_name`/`printer_variant_name` + `.json` (`preset_name` typically includes "standard," "fine," "fast," "draft," etc.)
+
+
+A typical file structure for a vendor:
+```
+resources\profiles\
+ - Orca 3D.json
+ - Orca 3D\
+ - machine\
+ - Orca 3D Fuse1.json
+ - Orca 3D Fuse1 0.2 nozzle.json
+ - Orca 3D Fuse1 0.4 nozzle.json
+ - process\
+ - 0.10mm Standard @Orca 3D Fuse1 0.2.json
+ - 0.20mm Standard @Orca 3D Fuse1 0.4.json
+ - filament\
+ - Generic PLA @Orca 3D Fuse1@.json
+```
+
+
+**NOTE 1**: Use short vendor names in filenames to avoid excessive length.
+**NOTE 2**: Filament profiles are **optional**. Create them only if the vendor has specifically tuned profiles for the given printer. See [Filament profiles](#filament-profiles) for details.
+
+## Filament Profiles
+OrcaSlicer features a global filament library called `OrcaFilamentLibrary`, which is automatically available for all printers. It includes generic filaments like `Generic PLA @System` and `Generic ABS @System` etc.
+
+Printer vendors can override specific filaments in the global library for certain printer models by creating new filament profiles.
+
+Relationship diagram:
+```mermaid
+graph TD;
+ OrcaFilamentLibrary-->Orca_3D_filament;
+ OrcaFilamentLibrary-->Vendor_A_filament;
+ OrcaFilamentLibrary-->Vendor_B_filament;
+```
+
+**NOTE**: Create new filament profiles only if you have truly specifically tuned the filament for the given printer. Otherwise, use the global library. The global library has a better chance to receive optimizations and updates from OrcaSlicer contributors, which will benefit users of all printers.
+
+### Adding Filament Profiles to the Global Library
+In this section, we will discuss how to add a new filament profile into the global library.
+If you want to add a new generic profile into the global library, you need to create a new file in the `resources\profiles\OrcaFilamentLibrary\filament` folder. If a base type already exists in the global library, you can use this file as a base profile by inheriting it.
+The following sample JSON file shows how to create a new generic filament profile `Generic PLA-GF @System` in the global library.
+
+1. The first step is to create a new file in the `resources\profiles\OrcaFilamentLibrary\filament` folder. The file name should be `Generic PLA-GF @System.json`. Please note that we leave the `compatible_printers` field empty so that it is available for all printers.
+
+```json
+{
+ "type": "filament",
+ "filament_id": "GFL99",
+ "setting_id": "GFSA05",
+ "name": "Generic PLA-GF @System",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_filament_pla",
+ "filament_type": ["PLA-GF"],
+ "filament_flow_ratio": [
+ "0.96"
+ ],
+ "compatible_printers": []
+}
+```
+
+2. Register the profile in `resources\profiles\OrcaFilamentLibrary.json`:
+
+```json
+{
+ "name": "OrcaFilamentLibrary",
+ "version": "02.02.00.04",
+ "force_update": "0",
+ "description": "Orca Filament Library",
+ "filament_list": [
+ // ...
+ {
+ "name": "Generic PLA-GF @System",
+ "sub_path": "filament/Generic PLA-GF @System.json"
+ }
+ ]
+}
+```
+
+3. The last step is to validate the newly added filament profiles. You can run OrcaSlicer to verify if the filament you just added is available and usable. You can also use the [Orca profile validator](https://github.com/SoftFever/Orca_tools/releases/tag/1) tool to help debug any errors. **NOTE**: You need to delete the `%appdata%/OrcaSlicer/system` folder to force OrcaSlicer to reload your lastest changes.
+
+The process is the same if you want to add a new brand filament profile into the global library. You need to create a new file in the `resources\profiles\OrcaFilamentLibrary\filament\brand_name` folder. The only difference is that you should put the file into the brand's own subfolder.`resources\profiles\OrcaFilamentLibrary\filament\brand_name`.
+
+### Adding Filament Profiles to Printer Vendor Library
+In this section, we will discuss how to add a new filament profile for a certain vendor.
+If you want to add a new filament profile, whether it's a brand new profile or a specialized version of a global filament profile for a given printer, you need to create a new file in the `resources\profiles\vendor_name\filament` folder. If a base type already exists in the global library, you can use this file as a base profile by inheriting it.
+Below is a sample JSON file showing how to create a specialized `Generic ABS` filament profile for the ToolChanger printer.
+Please note that here we must leave the compatible_printers field non-empty, unlike in the global library.
+
+```json
+{
+ "type": "filament",
+ "setting_id": "GFB99_MTC_0",
+ "name": "Generic ABS @MyToolChanger",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "Generic ABS @System",
+ "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"
+ ]
+}
+```
+
+## Process Profiles
+WIP...
+
+## Printer Profiles
+WIP...
+
+## Printer Variant Profiles
+WIP...
\ No newline at end of file
diff --git a/flatpak/io.github.softfever.OrcaSlicer.yml b/flatpak/io.github.softfever.OrcaSlicer.yml
index 0eb8b86c14..73ab58b17d 100755
--- a/flatpak/io.github.softfever.OrcaSlicer.yml
+++ b/flatpak/io.github.softfever.OrcaSlicer.yml
@@ -56,7 +56,7 @@ modules:
- "*.a"
sources:
- type: archive
- url: https://archive.mesa3d.org/mesa-20.2.6.tar.xz
+ url: https://archive.mesa3d.org/older-versions/20.x/mesa-20.2.6.tar.xz
sha256: f12ca3c6c622f11cd79ad66b4220f04514fa96f795062fe92a37339ab19885db
- name: glu
@@ -260,13 +260,18 @@ modules:
url: https://github.com/glfw/glfw/archive/refs/tags/3.3.7.zip
dest: external-packages/GLFW
sha256: e02d956935e5b9fb4abf90e2c2e07c9a0526d7eacae8ee5353484c69a2a76cd0
+ # libnoise
+ - type: file
+ url: https://github.com/SoftFever/Orca-deps-libnoise/archive/refs/tags/1.0.zip
+ dest: external-packages/libnoise
+ sha256: 96ffd6cc47898dd8147aab53d7d1b1911b507d9dbaecd5613ca2649468afd8b6
- name: OrcaSlicer
buildsystem: simple
build-commands:
- |
- mkdir -p build && cd build
- CXXFLAGS=-std=gnu++20 cmake ../ \
+ mkdir -p build
+ CXXFLAGS=-std=gnu++20 cmake . -B build \
-DSLIC3R_PCH=OFF \
-DSLIC3R_FHS=ON \
-DSLIC3R_GTK=3 \
@@ -278,7 +283,9 @@ modules:
-DBBL_RELEASE_TO_PUBLIC=1 \
-DCMAKE_PREFIX_PATH=/app \
-DCMAKE_INSTALL_PREFIX=/app
- CXXFLAGS=-std=gnu++20 cmake --build . --target install -j$FLATPAK_BUILDER_N_JOBS
+ CXXFLAGS=-std=gnu++20 cmake --build build --target OrcaSlicer -j$FLATPAK_BUILDER_N_JOBS
+ ./run_gettext.sh
+ CXXFLAGS=-std=gnu++20 cmake --build build --target install -j$FLATPAK_BUILDER_N_JOBS
cleanup:
- /include
diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot
index be45f8d755..58d02ffe60 100644
--- a/localization/i18n/OrcaSlicer.pot
+++ b/localization/i18n/OrcaSlicer.pot
@@ -14938,3 +14938,81 @@ msgstr ""
#: resources/data/hints.ini: [hint:Avoid warping]
msgid "Avoid warping\nDid you know that when printing materials that are prone to warping such as ABS, appropriately increasing the heatbed temperature can reduce the probability of warping."
msgstr ""
+
+#: src/slic3r/GUI/Tab.cpp:
+msgid "Dependencies"
+msgstr ""
+
+msgid "Profile dependencies"
+msgstr ""
+
+msgid "This is a default preset."
+msgstr ""
+
+msgid "This is a system preset."
+msgstr ""
+
+msgid "Current preset is inherited from the default preset."
+msgstr ""
+
+msgid "Current preset is inherited from"
+msgstr ""
+
+msgid "It can't be deleted or modified."
+msgstr ""
+
+msgid "Any modifications should be saved as a new preset inherited from this one."
+msgstr ""
+
+msgid "To do that please specify a new name for the preset."
+msgstr ""
+
+msgid "Additional information:"
+msgstr ""
+
+msgid "vendor"
+msgstr ""
+
+msgid ", ver: "
+msgstr ""
+
+msgid "printer model"
+msgstr ""
+
+msgid "default print profile"
+msgstr ""
+
+msgid "default filament profile"
+msgstr ""
+
+msgid "default SLA material profile"
+msgstr ""
+
+msgid "default SLA print profile"
+msgstr ""
+
+msgid "full profile name"
+msgstr ""
+
+msgid "symbolic profile name"
+msgstr ""
+
+msgid ""
+"A copy of the current system preset will be created, which will be detached from the system preset."
+msgstr ""
+
+msgid ""
+"The current custom preset will be detached from the parent system preset."
+msgstr ""
+
+msgid ""
+"Modifications to the current profile will be saved."
+msgstr ""
+
+msgid ""
+"This action is not revertible.\nDo you want to proceed?"
+msgstr ""
+
+msgid ""
+"Detach preset"
+msgstr ""
\ No newline at end of file
diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po
index 7be3f31cc7..33ca51bc49 100644
--- a/localization/i18n/ca/OrcaSlicer_ca.po
+++ b/localization/i18n/ca/OrcaSlicer_ca.po
@@ -17414,6 +17414,85 @@ msgstr ""
"augmentar adequadament la temperatura del llit pot reduir la probabilitat de "
"deformació."
+#: src/slic3r/GUI/Tab.cpp:
+msgid "Dependencies"
+msgstr ""
+
+msgid "Profile dependencies"
+msgstr ""
+
+msgid "This is a default preset."
+msgstr ""
+
+msgid "This is a system preset."
+msgstr ""
+
+msgid "Current preset is inherited from the default preset."
+msgstr ""
+
+msgid "Current preset is inherited from"
+msgstr ""
+
+msgid "It can't be deleted or modified."
+msgstr ""
+
+msgid "Any modifications should be saved as a new preset inherited from this one."
+msgstr ""
+
+msgid "To do that please specify a new name for the preset."
+msgstr ""
+
+msgid "Additional information:"
+msgstr ""
+
+msgid "vendor"
+msgstr ""
+
+msgid ", ver: "
+msgstr ""
+
+msgid "printer model"
+msgstr ""
+
+msgid "default print profile"
+msgstr ""
+
+msgid "default filament profile"
+msgstr ""
+
+msgid "default SLA material profile"
+msgstr ""
+
+msgid "default SLA print profile"
+msgstr ""
+
+msgid "full profile name"
+msgstr ""
+
+msgid "symbolic profile name"
+msgstr ""
+
+msgid ""
+"A copy of the current system preset will be created, which will be detached from the system preset."
+msgstr ""
+
+msgid ""
+"The current custom preset will be detached from the parent system preset."
+msgstr ""
+
+msgid ""
+"Modifications to the current profile will be saved."
+msgstr ""
+
+msgid ""
+"This action is not revertible.\nDo you want to proceed?"
+msgstr ""
+
+msgid ""
+"Detach preset"
+msgstr ""
+
+
#~ msgid "ShiftLeft mouse button"
#~ msgstr "Màj+Botó esquerre del ratolí"
diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po
index 8087ede4a3..694d030fcb 100644
--- a/localization/i18n/cs/OrcaSlicer_cs.po
+++ b/localization/i18n/cs/OrcaSlicer_cs.po
@@ -16400,6 +16400,85 @@ msgid ""
"probability of warping."
msgstr ""
+#: src/slic3r/GUI/Tab.cpp:
+msgid "Dependencies"
+msgstr ""
+
+msgid "Profile dependencies"
+msgstr ""
+
+msgid "This is a default preset."
+msgstr ""
+
+msgid "This is a system preset."
+msgstr ""
+
+msgid "Current preset is inherited from the default preset."
+msgstr ""
+
+msgid "Current preset is inherited from"
+msgstr ""
+
+msgid "It can't be deleted or modified."
+msgstr ""
+
+msgid "Any modifications should be saved as a new preset inherited from this one."
+msgstr ""
+
+msgid "To do that please specify a new name for the preset."
+msgstr ""
+
+msgid "Additional information:"
+msgstr ""
+
+msgid "vendor"
+msgstr ""
+
+msgid ", ver: "
+msgstr ""
+
+msgid "printer model"
+msgstr ""
+
+msgid "default print profile"
+msgstr ""
+
+msgid "default filament profile"
+msgstr ""
+
+msgid "default SLA material profile"
+msgstr ""
+
+msgid "default SLA print profile"
+msgstr ""
+
+msgid "full profile name"
+msgstr ""
+
+msgid "symbolic profile name"
+msgstr ""
+
+msgid ""
+"A copy of the current system preset will be created, which will be detached from the system preset."
+msgstr ""
+
+msgid ""
+"The current custom preset will be detached from the parent system preset."
+msgstr ""
+
+msgid ""
+"Modifications to the current profile will be saved."
+msgstr ""
+
+msgid ""
+"This action is not revertible.\nDo you want to proceed?"
+msgstr ""
+
+msgid ""
+"Detach preset"
+msgstr ""
+
+
#~ msgid "Unselect"
#~ msgstr "Zrušení výběru"
diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po
index a4a7cdfa5d..5eb9abfbba 100644
--- a/localization/i18n/de/OrcaSlicer_de.po
+++ b/localization/i18n/de/OrcaSlicer_de.po
@@ -17868,6 +17868,85 @@ msgstr ""
"wie z.B. ABS, durch eine entsprechende Erhöhung der Heizbetttemperatur die "
"Wahrscheinlichkeit von Verwerfungen verringert werden kann."
+#: src/slic3r/GUI/Tab.cpp:
+msgid "Dependencies"
+msgstr ""
+
+msgid "Profile dependencies"
+msgstr ""
+
+msgid "This is a default preset."
+msgstr ""
+
+msgid "This is a system preset."
+msgstr ""
+
+msgid "Current preset is inherited from the default preset."
+msgstr ""
+
+msgid "Current preset is inherited from"
+msgstr ""
+
+msgid "It can't be deleted or modified."
+msgstr ""
+
+msgid "Any modifications should be saved as a new preset inherited from this one."
+msgstr ""
+
+msgid "To do that please specify a new name for the preset."
+msgstr ""
+
+msgid "Additional information:"
+msgstr ""
+
+msgid "vendor"
+msgstr ""
+
+msgid ", ver: "
+msgstr ""
+
+msgid "printer model"
+msgstr ""
+
+msgid "default print profile"
+msgstr ""
+
+msgid "default filament profile"
+msgstr ""
+
+msgid "default SLA material profile"
+msgstr ""
+
+msgid "default SLA print profile"
+msgstr ""
+
+msgid "full profile name"
+msgstr ""
+
+msgid "symbolic profile name"
+msgstr ""
+
+msgid ""
+"A copy of the current system preset will be created, which will be detached from the system preset."
+msgstr ""
+
+msgid ""
+"The current custom preset will be detached from the parent system preset."
+msgstr ""
+
+msgid ""
+"Modifications to the current profile will be saved."
+msgstr ""
+
+msgid ""
+"This action is not revertible.\nDo you want to proceed?"
+msgstr ""
+
+msgid ""
+"Detach preset"
+msgstr ""
+
+
#~ msgid "ShiftLeft mouse button"
#~ msgstr "Umschalttaste + Linksklick"
diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po
index 6b70c07fd6..ca4ec0ae02 100644
--- a/localization/i18n/en/OrcaSlicer_en.po
+++ b/localization/i18n/en/OrcaSlicer_en.po
@@ -16238,6 +16238,85 @@ msgstr ""
"ABS, appropriately increasing the heatbed temperature can reduce the "
"probability of warping?"
+#: src/slic3r/GUI/Tab.cpp:
+msgid "Dependencies"
+msgstr ""
+
+msgid "Profile dependencies"
+msgstr ""
+
+msgid "This is a default preset."
+msgstr ""
+
+msgid "This is a system preset."
+msgstr ""
+
+msgid "Current preset is inherited from the default preset."
+msgstr ""
+
+msgid "Current preset is inherited from"
+msgstr ""
+
+msgid "It can't be deleted or modified."
+msgstr ""
+
+msgid "Any modifications should be saved as a new preset inherited from this one."
+msgstr ""
+
+msgid "To do that please specify a new name for the preset."
+msgstr ""
+
+msgid "Additional information:"
+msgstr ""
+
+msgid "vendor"
+msgstr ""
+
+msgid ", ver: "
+msgstr ""
+
+msgid "printer model"
+msgstr ""
+
+msgid "default print profile"
+msgstr ""
+
+msgid "default filament profile"
+msgstr ""
+
+msgid "default SLA material profile"
+msgstr ""
+
+msgid "default SLA print profile"
+msgstr ""
+
+msgid "full profile name"
+msgstr ""
+
+msgid "symbolic profile name"
+msgstr ""
+
+msgid ""
+"A copy of the current system preset will be created, which will be detached from the system preset."
+msgstr ""
+
+msgid ""
+"The current custom preset will be detached from the parent system preset."
+msgstr ""
+
+msgid ""
+"Modifications to the current profile will be saved."
+msgstr ""
+
+msgid ""
+"This action is not revertible.\nDo you want to proceed?"
+msgstr ""
+
+msgid ""
+"Detach preset"
+msgstr ""
+
+
#~ msgctxt "Verb"
#~ msgid "Scale"
#~ msgstr "Scale"
diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po
index 4959cf9cd3..576d095919 100644
--- a/localization/i18n/es/OrcaSlicer_es.po
+++ b/localization/i18n/es/OrcaSlicer_es.po
@@ -17853,6 +17853,85 @@ msgstr ""
"aumentar adecuadamente la temperatura de la cama térmica puede reducir la "
"probabilidad de deformaciones."
+#: src/slic3r/GUI/Tab.cpp:
+msgid "Dependencies"
+msgstr ""
+
+msgid "Profile dependencies"
+msgstr ""
+
+msgid "This is a default preset."
+msgstr ""
+
+msgid "This is a system preset."
+msgstr ""
+
+msgid "Current preset is inherited from the default preset."
+msgstr ""
+
+msgid "Current preset is inherited from"
+msgstr ""
+
+msgid "It can't be deleted or modified."
+msgstr ""
+
+msgid "Any modifications should be saved as a new preset inherited from this one."
+msgstr ""
+
+msgid "To do that please specify a new name for the preset."
+msgstr ""
+
+msgid "Additional information:"
+msgstr ""
+
+msgid "vendor"
+msgstr ""
+
+msgid ", ver: "
+msgstr ""
+
+msgid "printer model"
+msgstr ""
+
+msgid "default print profile"
+msgstr ""
+
+msgid "default filament profile"
+msgstr ""
+
+msgid "default SLA material profile"
+msgstr ""
+
+msgid "default SLA print profile"
+msgstr ""
+
+msgid "full profile name"
+msgstr ""
+
+msgid "symbolic profile name"
+msgstr ""
+
+msgid ""
+"A copy of the current system preset will be created, which will be detached from the system preset."
+msgstr ""
+
+msgid ""
+"The current custom preset will be detached from the parent system preset."
+msgstr ""
+
+msgid ""
+"Modifications to the current profile will be saved."
+msgstr ""
+
+msgid ""
+"This action is not revertible.\nDo you want to proceed?"
+msgstr ""
+
+msgid ""
+"Detach preset"
+msgstr ""
+
+
#~ msgid "ShiftLeft mouse button"
#~ msgstr "Mayúsculas + Botón izquierdo del ratón"
diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po
index 537142692c..2521fd4c4a 100644
--- a/localization/i18n/fr/OrcaSlicer_fr.po
+++ b/localization/i18n/fr/OrcaSlicer_fr.po
@@ -18004,6 +18004,85 @@ msgstr ""
"déformer, tels que l’ABS, une augmentation appropriée de la température du "
"plateau chauffant peut réduire la probabilité de déformation."
+#: src/slic3r/GUI/Tab.cpp:
+msgid "Dependencies"
+msgstr ""
+
+msgid "Profile dependencies"
+msgstr ""
+
+msgid "This is a default preset."
+msgstr ""
+
+msgid "This is a system preset."
+msgstr ""
+
+msgid "Current preset is inherited from the default preset."
+msgstr ""
+
+msgid "Current preset is inherited from"
+msgstr ""
+
+msgid "It can't be deleted or modified."
+msgstr ""
+
+msgid "Any modifications should be saved as a new preset inherited from this one."
+msgstr ""
+
+msgid "To do that please specify a new name for the preset."
+msgstr ""
+
+msgid "Additional information:"
+msgstr ""
+
+msgid "vendor"
+msgstr ""
+
+msgid ", ver: "
+msgstr ""
+
+msgid "printer model"
+msgstr ""
+
+msgid "default print profile"
+msgstr ""
+
+msgid "default filament profile"
+msgstr ""
+
+msgid "default SLA material profile"
+msgstr ""
+
+msgid "default SLA print profile"
+msgstr ""
+
+msgid "full profile name"
+msgstr ""
+
+msgid "symbolic profile name"
+msgstr ""
+
+msgid ""
+"A copy of the current system preset will be created, which will be detached from the system preset."
+msgstr ""
+
+msgid ""
+"The current custom preset will be detached from the parent system preset."
+msgstr ""
+
+msgid ""
+"Modifications to the current profile will be saved."
+msgstr ""
+
+msgid ""
+"This action is not revertible.\nDo you want to proceed?"
+msgstr ""
+
+msgid ""
+"Detach preset"
+msgstr ""
+
+
#~ msgid "ShiftLeft mouse button"
#~ msgstr "ShiftLeft mouse button"
diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po
index 3bf96206c6..e968dc9df8 100644
--- a/localization/i18n/hu/OrcaSlicer_hu.po
+++ b/localization/i18n/hu/OrcaSlicer_hu.po
@@ -16426,6 +16426,85 @@ msgstr ""
"Tudtad, hogy a vetemedésre hajlamos anyagok (például ABS) nyomtatásakor a "
"tárgyasztal hőmérsékletének növelése csökkentheti a vetemedés valószínűségét?"
+#: src/slic3r/GUI/Tab.cpp:
+msgid "Dependencies"
+msgstr ""
+
+msgid "Profile dependencies"
+msgstr ""
+
+msgid "This is a default preset."
+msgstr ""
+
+msgid "This is a system preset."
+msgstr ""
+
+msgid "Current preset is inherited from the default preset."
+msgstr ""
+
+msgid "Current preset is inherited from"
+msgstr ""
+
+msgid "It can't be deleted or modified."
+msgstr ""
+
+msgid "Any modifications should be saved as a new preset inherited from this one."
+msgstr ""
+
+msgid "To do that please specify a new name for the preset."
+msgstr ""
+
+msgid "Additional information:"
+msgstr ""
+
+msgid "vendor"
+msgstr ""
+
+msgid ", ver: "
+msgstr ""
+
+msgid "printer model"
+msgstr ""
+
+msgid "default print profile"
+msgstr ""
+
+msgid "default filament profile"
+msgstr ""
+
+msgid "default SLA material profile"
+msgstr ""
+
+msgid "default SLA print profile"
+msgstr ""
+
+msgid "full profile name"
+msgstr ""
+
+msgid "symbolic profile name"
+msgstr ""
+
+msgid ""
+"A copy of the current system preset will be created, which will be detached from the system preset."
+msgstr ""
+
+msgid ""
+"The current custom preset will be detached from the parent system preset."
+msgstr ""
+
+msgid ""
+"Modifications to the current profile will be saved."
+msgstr ""
+
+msgid ""
+"This action is not revertible.\nDo you want to proceed?"
+msgstr ""
+
+msgid ""
+"Detach preset"
+msgstr ""
+
+
#~ msgctxt "Verb"
#~ msgid "Scale"
#~ msgstr "Átméretezés"
diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po
index ad04e3acca..9a8f0538d0 100644
--- a/localization/i18n/it/OrcaSlicer_it.po
+++ b/localization/i18n/it/OrcaSlicer_it.po
@@ -17271,6 +17271,85 @@ msgstr ""
"aumentare in modo appropriato la temperatura del piano riscaldato può "
"ridurre la probabilità di deformazione."
+#: src/slic3r/GUI/Tab.cpp:
+msgid "Dependencies"
+msgstr ""
+
+msgid "Profile dependencies"
+msgstr ""
+
+msgid "This is a default preset."
+msgstr ""
+
+msgid "This is a system preset."
+msgstr ""
+
+msgid "Current preset is inherited from the default preset."
+msgstr ""
+
+msgid "Current preset is inherited from"
+msgstr ""
+
+msgid "It can't be deleted or modified."
+msgstr ""
+
+msgid "Any modifications should be saved as a new preset inherited from this one."
+msgstr ""
+
+msgid "To do that please specify a new name for the preset."
+msgstr ""
+
+msgid "Additional information:"
+msgstr ""
+
+msgid "vendor"
+msgstr ""
+
+msgid ", ver: "
+msgstr ""
+
+msgid "printer model"
+msgstr ""
+
+msgid "default print profile"
+msgstr ""
+
+msgid "default filament profile"
+msgstr ""
+
+msgid "default SLA material profile"
+msgstr ""
+
+msgid "default SLA print profile"
+msgstr ""
+
+msgid "full profile name"
+msgstr ""
+
+msgid "symbolic profile name"
+msgstr ""
+
+msgid ""
+"A copy of the current system preset will be created, which will be detached from the system preset."
+msgstr ""
+
+msgid ""
+"The current custom preset will be detached from the parent system preset."
+msgstr ""
+
+msgid ""
+"Modifications to the current profile will be saved."
+msgstr ""
+
+msgid ""
+"This action is not revertible.\nDo you want to proceed?"
+msgstr ""
+
+msgid ""
+"Detach preset"
+msgstr ""
+
+
#~ msgid "ShiftLeft mouse button"
#~ msgstr "MaiuscTasto sinistro del mouse"
diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po
index d981372f8c..eea6b1e457 100644
--- a/localization/i18n/ja/OrcaSlicer_ja.po
+++ b/localization/i18n/ja/OrcaSlicer_ja.po
@@ -16111,6 +16111,85 @@ msgstr ""
"ABS, appropriately increasing the heatbed temperature can reduce the "
"probability of warping?"
+#: src/slic3r/GUI/Tab.cpp:
+msgid "Dependencies"
+msgstr ""
+
+msgid "Profile dependencies"
+msgstr ""
+
+msgid "This is a default preset."
+msgstr ""
+
+msgid "This is a system preset."
+msgstr ""
+
+msgid "Current preset is inherited from the default preset."
+msgstr ""
+
+msgid "Current preset is inherited from"
+msgstr ""
+
+msgid "It can't be deleted or modified."
+msgstr ""
+
+msgid "Any modifications should be saved as a new preset inherited from this one."
+msgstr ""
+
+msgid "To do that please specify a new name for the preset."
+msgstr ""
+
+msgid "Additional information:"
+msgstr ""
+
+msgid "vendor"
+msgstr ""
+
+msgid ", ver: "
+msgstr ""
+
+msgid "printer model"
+msgstr ""
+
+msgid "default print profile"
+msgstr ""
+
+msgid "default filament profile"
+msgstr ""
+
+msgid "default SLA material profile"
+msgstr ""
+
+msgid "default SLA print profile"
+msgstr ""
+
+msgid "full profile name"
+msgstr ""
+
+msgid "symbolic profile name"
+msgstr ""
+
+msgid ""
+"A copy of the current system preset will be created, which will be detached from the system preset."
+msgstr ""
+
+msgid ""
+"The current custom preset will be detached from the parent system preset."
+msgstr ""
+
+msgid ""
+"Modifications to the current profile will be saved."
+msgstr ""
+
+msgid ""
+"This action is not revertible.\nDo you want to proceed?"
+msgstr ""
+
+msgid ""
+"Detach preset"
+msgstr ""
+
+
#~ msgid "Unselect"
#~ msgstr "選択解除"
diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po
index 058f9d3e9b..98f10a5e47 100644
--- a/localization/i18n/ko/OrcaSlicer_ko.po
+++ b/localization/i18n/ko/OrcaSlicer_ko.po
@@ -16921,6 +16921,85 @@ msgstr ""
"ABS와 같이 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 "
"높이면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?"
+#: src/slic3r/GUI/Tab.cpp:
+msgid "Dependencies"
+msgstr ""
+
+msgid "Profile dependencies"
+msgstr ""
+
+msgid "This is a default preset."
+msgstr ""
+
+msgid "This is a system preset."
+msgstr ""
+
+msgid "Current preset is inherited from the default preset."
+msgstr ""
+
+msgid "Current preset is inherited from"
+msgstr ""
+
+msgid "It can't be deleted or modified."
+msgstr ""
+
+msgid "Any modifications should be saved as a new preset inherited from this one."
+msgstr ""
+
+msgid "To do that please specify a new name for the preset."
+msgstr ""
+
+msgid "Additional information:"
+msgstr ""
+
+msgid "vendor"
+msgstr ""
+
+msgid ", ver: "
+msgstr ""
+
+msgid "printer model"
+msgstr ""
+
+msgid "default print profile"
+msgstr ""
+
+msgid "default filament profile"
+msgstr ""
+
+msgid "default SLA material profile"
+msgstr ""
+
+msgid "default SLA print profile"
+msgstr ""
+
+msgid "full profile name"
+msgstr ""
+
+msgid "symbolic profile name"
+msgstr ""
+
+msgid ""
+"A copy of the current system preset will be created, which will be detached from the system preset."
+msgstr ""
+
+msgid ""
+"The current custom preset will be detached from the parent system preset."
+msgstr ""
+
+msgid ""
+"Modifications to the current profile will be saved."
+msgstr ""
+
+msgid ""
+"This action is not revertible.\nDo you want to proceed?"
+msgstr ""
+
+msgid ""
+"Detach preset"
+msgstr ""
+
+
#~ msgid "ShiftLeft mouse button"
#~ msgstr "Shift + 왼쪽 마우스 버튼"
diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po
index ac6e5934c0..b925ee20b1 100644
--- a/localization/i18n/nl/OrcaSlicer_nl.po
+++ b/localization/i18n/nl/OrcaSlicer_nl.po
@@ -16677,6 +16677,85 @@ msgstr ""
"kromtrekken, zoals ABS, een juiste verhoging van de temperatuur van het "
"warmtebed de kans op kromtrekken kan verkleinen?"
+#: src/slic3r/GUI/Tab.cpp:
+msgid "Dependencies"
+msgstr ""
+
+msgid "Profile dependencies"
+msgstr ""
+
+msgid "This is a default preset."
+msgstr ""
+
+msgid "This is a system preset."
+msgstr ""
+
+msgid "Current preset is inherited from the default preset."
+msgstr ""
+
+msgid "Current preset is inherited from"
+msgstr ""
+
+msgid "It can't be deleted or modified."
+msgstr ""
+
+msgid "Any modifications should be saved as a new preset inherited from this one."
+msgstr ""
+
+msgid "To do that please specify a new name for the preset."
+msgstr ""
+
+msgid "Additional information:"
+msgstr ""
+
+msgid "vendor"
+msgstr ""
+
+msgid ", ver: "
+msgstr ""
+
+msgid "printer model"
+msgstr ""
+
+msgid "default print profile"
+msgstr ""
+
+msgid "default filament profile"
+msgstr ""
+
+msgid "default SLA material profile"
+msgstr ""
+
+msgid "default SLA print profile"
+msgstr ""
+
+msgid "full profile name"
+msgstr ""
+
+msgid "symbolic profile name"
+msgstr ""
+
+msgid ""
+"A copy of the current system preset will be created, which will be detached from the system preset."
+msgstr ""
+
+msgid ""
+"The current custom preset will be detached from the parent system preset."
+msgstr ""
+
+msgid ""
+"Modifications to the current profile will be saved."
+msgstr ""
+
+msgid ""
+"This action is not revertible.\nDo you want to proceed?"
+msgstr ""
+
+msgid ""
+"Detach preset"
+msgstr ""
+
+
#~ msgctxt "Verb"
#~ msgid "Scale"
#~ msgstr "Schalen"
diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po
index 7576fc583c..e9a1b2131c 100644
--- a/localization/i18n/pl/OrcaSlicer_pl.po
+++ b/localization/i18n/pl/OrcaSlicer_pl.po
@@ -17658,6 +17658,85 @@ msgstr ""
"takimi jak ABS, odpowiednie zwiększenie temperatury podgrzewanej płyty może "
"zmniejszyć prawdopodobieństwo odkształceń."
+#: src/slic3r/GUI/Tab.cpp:
+msgid "Dependencies"
+msgstr ""
+
+msgid "Profile dependencies"
+msgstr ""
+
+msgid "This is a default preset."
+msgstr ""
+
+msgid "This is a system preset."
+msgstr ""
+
+msgid "Current preset is inherited from the default preset."
+msgstr ""
+
+msgid "Current preset is inherited from"
+msgstr ""
+
+msgid "It can't be deleted or modified."
+msgstr ""
+
+msgid "Any modifications should be saved as a new preset inherited from this one."
+msgstr ""
+
+msgid "To do that please specify a new name for the preset."
+msgstr ""
+
+msgid "Additional information:"
+msgstr ""
+
+msgid "vendor"
+msgstr ""
+
+msgid ", ver: "
+msgstr ""
+
+msgid "printer model"
+msgstr ""
+
+msgid "default print profile"
+msgstr ""
+
+msgid "default filament profile"
+msgstr ""
+
+msgid "default SLA material profile"
+msgstr ""
+
+msgid "default SLA print profile"
+msgstr ""
+
+msgid "full profile name"
+msgstr ""
+
+msgid "symbolic profile name"
+msgstr ""
+
+msgid ""
+"A copy of the current system preset will be created, which will be detached from the system preset."
+msgstr ""
+
+msgid ""
+"The current custom preset will be detached from the parent system preset."
+msgstr ""
+
+msgid ""
+"Modifications to the current profile will be saved."
+msgstr ""
+
+msgid ""
+"This action is not revertible.\nDo you want to proceed?"
+msgstr ""
+
+msgid ""
+"Detach preset"
+msgstr ""
+
+
#~ msgid "ShiftLeft mouse button"
#~ msgstr "Shift + Lewy przycisk myszy"
diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po
index 85867bb031..1d19826f60 100644
--- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po
+++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po
@@ -17237,6 +17237,85 @@ msgstr ""
"aumentar adequadamente a temperatura da mesa aquecida pode reduzir a "
"probabilidade de empenamento?"
+#: src/slic3r/GUI/Tab.cpp:
+msgid "Dependencies"
+msgstr ""
+
+msgid "Profile dependencies"
+msgstr ""
+
+msgid "This is a default preset."
+msgstr ""
+
+msgid "This is a system preset."
+msgstr ""
+
+msgid "Current preset is inherited from the default preset."
+msgstr ""
+
+msgid "Current preset is inherited from"
+msgstr ""
+
+msgid "It can't be deleted or modified."
+msgstr ""
+
+msgid "Any modifications should be saved as a new preset inherited from this one."
+msgstr ""
+
+msgid "To do that please specify a new name for the preset."
+msgstr ""
+
+msgid "Additional information:"
+msgstr ""
+
+msgid "vendor"
+msgstr ""
+
+msgid ", ver: "
+msgstr ""
+
+msgid "printer model"
+msgstr ""
+
+msgid "default print profile"
+msgstr ""
+
+msgid "default filament profile"
+msgstr ""
+
+msgid "default SLA material profile"
+msgstr ""
+
+msgid "default SLA print profile"
+msgstr ""
+
+msgid "full profile name"
+msgstr ""
+
+msgid "symbolic profile name"
+msgstr ""
+
+msgid ""
+"A copy of the current system preset will be created, which will be detached from the system preset."
+msgstr ""
+
+msgid ""
+"The current custom preset will be detached from the parent system preset."
+msgstr ""
+
+msgid ""
+"Modifications to the current profile will be saved."
+msgstr ""
+
+msgid ""
+"This action is not revertible.\nDo you want to proceed?"
+msgstr ""
+
+msgid ""
+"Detach preset"
+msgstr ""
+
+
#~ msgid "ShiftLeft mouse button"
#~ msgstr "Botão do mouse ShiftLeft"
diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po
index 368635fff3..6ab78684c2 100644
--- a/localization/i18n/ru/OrcaSlicer_ru.po
+++ b/localization/i18n/ru/OrcaSlicer_ru.po
@@ -17883,6 +17883,85 @@ msgstr ""
"ABS, повышение температуры подогреваемого стола может снизить эту "
"вероятность?"
+#: src/slic3r/GUI/Tab.cpp:
+msgid "Dependencies"
+msgstr ""
+
+msgid "Profile dependencies"
+msgstr ""
+
+msgid "This is a default preset."
+msgstr ""
+
+msgid "This is a system preset."
+msgstr ""
+
+msgid "Current preset is inherited from the default preset."
+msgstr ""
+
+msgid "Current preset is inherited from"
+msgstr ""
+
+msgid "It can't be deleted or modified."
+msgstr ""
+
+msgid "Any modifications should be saved as a new preset inherited from this one."
+msgstr ""
+
+msgid "To do that please specify a new name for the preset."
+msgstr ""
+
+msgid "Additional information:"
+msgstr ""
+
+msgid "vendor"
+msgstr ""
+
+msgid ", ver: "
+msgstr ""
+
+msgid "printer model"
+msgstr ""
+
+msgid "default print profile"
+msgstr ""
+
+msgid "default filament profile"
+msgstr ""
+
+msgid "default SLA material profile"
+msgstr ""
+
+msgid "default SLA print profile"
+msgstr ""
+
+msgid "full profile name"
+msgstr ""
+
+msgid "symbolic profile name"
+msgstr ""
+
+msgid ""
+"A copy of the current system preset will be created, which will be detached from the system preset."
+msgstr ""
+
+msgid ""
+"The current custom preset will be detached from the parent system preset."
+msgstr ""
+
+msgid ""
+"Modifications to the current profile will be saved."
+msgstr ""
+
+msgid ""
+"This action is not revertible.\nDo you want to proceed?"
+msgstr ""
+
+msgid ""
+"Detach preset"
+msgstr ""
+
+
#~ msgid "ShiftLeft mouse button"
#~ msgstr "Левая кнопка мыши"
diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po
index e46d2a89ac..db438ac87b 100644
--- a/localization/i18n/sv/OrcaSlicer_sv.po
+++ b/localization/i18n/sv/OrcaSlicer_sv.po
@@ -16268,6 +16268,85 @@ msgstr ""
"ABS, kan en lämplig ökning av värmebäddens temperatur minska sannolikheten "
"för vridning."
+#: src/slic3r/GUI/Tab.cpp:
+msgid "Dependencies"
+msgstr ""
+
+msgid "Profile dependencies"
+msgstr ""
+
+msgid "This is a default preset."
+msgstr ""
+
+msgid "This is a system preset."
+msgstr ""
+
+msgid "Current preset is inherited from the default preset."
+msgstr ""
+
+msgid "Current preset is inherited from"
+msgstr ""
+
+msgid "It can't be deleted or modified."
+msgstr ""
+
+msgid "Any modifications should be saved as a new preset inherited from this one."
+msgstr ""
+
+msgid "To do that please specify a new name for the preset."
+msgstr ""
+
+msgid "Additional information:"
+msgstr ""
+
+msgid "vendor"
+msgstr ""
+
+msgid ", ver: "
+msgstr ""
+
+msgid "printer model"
+msgstr ""
+
+msgid "default print profile"
+msgstr ""
+
+msgid "default filament profile"
+msgstr ""
+
+msgid "default SLA material profile"
+msgstr ""
+
+msgid "default SLA print profile"
+msgstr ""
+
+msgid "full profile name"
+msgstr ""
+
+msgid "symbolic profile name"
+msgstr ""
+
+msgid ""
+"A copy of the current system preset will be created, which will be detached from the system preset."
+msgstr ""
+
+msgid ""
+"The current custom preset will be detached from the parent system preset."
+msgstr ""
+
+msgid ""
+"Modifications to the current profile will be saved."
+msgstr ""
+
+msgid ""
+"This action is not revertible.\nDo you want to proceed?"
+msgstr ""
+
+msgid ""
+"Detach preset"
+msgstr ""
+
+
#~ msgctxt "Verb"
#~ msgid "Scale"
#~ msgstr "Skala"
diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po
index beb9bf7111..f39c76321e 100644
--- a/localization/i18n/tr/OrcaSlicer_tr.po
+++ b/localization/i18n/tr/OrcaSlicer_tr.po
@@ -17345,6 +17345,85 @@ msgstr ""
"sıcaklığının uygun şekilde arttırılmasının bükülme olasılığını "
"azaltabileceğini biliyor muydunuz?"
+#: src/slic3r/GUI/Tab.cpp:
+msgid "Dependencies"
+msgstr ""
+
+msgid "Profile dependencies"
+msgstr ""
+
+msgid "This is a default preset."
+msgstr ""
+
+msgid "This is a system preset."
+msgstr ""
+
+msgid "Current preset is inherited from the default preset."
+msgstr ""
+
+msgid "Current preset is inherited from"
+msgstr ""
+
+msgid "It can't be deleted or modified."
+msgstr ""
+
+msgid "Any modifications should be saved as a new preset inherited from this one."
+msgstr ""
+
+msgid "To do that please specify a new name for the preset."
+msgstr ""
+
+msgid "Additional information:"
+msgstr ""
+
+msgid "vendor"
+msgstr ""
+
+msgid ", ver: "
+msgstr ""
+
+msgid "printer model"
+msgstr ""
+
+msgid "default print profile"
+msgstr ""
+
+msgid "default filament profile"
+msgstr ""
+
+msgid "default SLA material profile"
+msgstr ""
+
+msgid "default SLA print profile"
+msgstr ""
+
+msgid "full profile name"
+msgstr ""
+
+msgid "symbolic profile name"
+msgstr ""
+
+msgid ""
+"A copy of the current system preset will be created, which will be detached from the system preset."
+msgstr ""
+
+msgid ""
+"The current custom preset will be detached from the parent system preset."
+msgstr ""
+
+msgid ""
+"Modifications to the current profile will be saved."
+msgstr ""
+
+msgid ""
+"This action is not revertible.\nDo you want to proceed?"
+msgstr ""
+
+msgid ""
+"Detach preset"
+msgstr ""
+
+
#~ msgid "ShiftLeft mouse button"
#~ msgstr "Shift + Sol fare düğmesi"
diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po
index 9ad2539bdc..3b7746d84f 100644
--- a/localization/i18n/uk/OrcaSlicer_uk.po
+++ b/localization/i18n/uk/OrcaSlicer_uk.po
@@ -17186,6 +17186,85 @@ msgstr ""
"ABS, відповідне підвищення температури гарячого ліжка може зменшити "
"ймовірність деформації."
+#: src/slic3r/GUI/Tab.cpp:
+msgid "Dependencies"
+msgstr ""
+
+msgid "Profile dependencies"
+msgstr ""
+
+msgid "This is a default preset."
+msgstr ""
+
+msgid "This is a system preset."
+msgstr ""
+
+msgid "Current preset is inherited from the default preset."
+msgstr ""
+
+msgid "Current preset is inherited from"
+msgstr ""
+
+msgid "It can't be deleted or modified."
+msgstr ""
+
+msgid "Any modifications should be saved as a new preset inherited from this one."
+msgstr ""
+
+msgid "To do that please specify a new name for the preset."
+msgstr ""
+
+msgid "Additional information:"
+msgstr ""
+
+msgid "vendor"
+msgstr ""
+
+msgid ", ver: "
+msgstr ""
+
+msgid "printer model"
+msgstr ""
+
+msgid "default print profile"
+msgstr ""
+
+msgid "default filament profile"
+msgstr ""
+
+msgid "default SLA material profile"
+msgstr ""
+
+msgid "default SLA print profile"
+msgstr ""
+
+msgid "full profile name"
+msgstr ""
+
+msgid "symbolic profile name"
+msgstr ""
+
+msgid ""
+"A copy of the current system preset will be created, which will be detached from the system preset."
+msgstr ""
+
+msgid ""
+"The current custom preset will be detached from the parent system preset."
+msgstr ""
+
+msgid ""
+"Modifications to the current profile will be saved."
+msgstr ""
+
+msgid ""
+"This action is not revertible.\nDo you want to proceed?"
+msgstr ""
+
+msgid ""
+"Detach preset"
+msgstr ""
+
+
#~ msgid "ShiftLeft mouse button"
#~ msgstr "ShiftЛіва кнопка миші"
diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po
index f9bb50944f..2e2d49487e 100644
--- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po
+++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po
@@ -15986,6 +15986,85 @@ msgstr ""
"避免翘曲\n"
"您知道吗?打印ABS这类易翘曲材料时,适当提高热床温度可以降低翘曲的概率。"
+#: src/slic3r/GUI/Tab.cpp:
+msgid "Dependencies"
+msgstr ""
+
+msgid "Profile dependencies"
+msgstr ""
+
+msgid "This is a default preset."
+msgstr ""
+
+msgid "This is a system preset."
+msgstr ""
+
+msgid "Current preset is inherited from the default preset."
+msgstr ""
+
+msgid "Current preset is inherited from"
+msgstr ""
+
+msgid "It can't be deleted or modified."
+msgstr ""
+
+msgid "Any modifications should be saved as a new preset inherited from this one."
+msgstr ""
+
+msgid "To do that please specify a new name for the preset."
+msgstr ""
+
+msgid "Additional information:"
+msgstr ""
+
+msgid "vendor"
+msgstr ""
+
+msgid ", ver: "
+msgstr ""
+
+msgid "printer model"
+msgstr ""
+
+msgid "default print profile"
+msgstr ""
+
+msgid "default filament profile"
+msgstr ""
+
+msgid "default SLA material profile"
+msgstr ""
+
+msgid "default SLA print profile"
+msgstr ""
+
+msgid "full profile name"
+msgstr ""
+
+msgid "symbolic profile name"
+msgstr ""
+
+msgid ""
+"A copy of the current system preset will be created, which will be detached from the system preset."
+msgstr ""
+
+msgid ""
+"The current custom preset will be detached from the parent system preset."
+msgstr ""
+
+msgid ""
+"Modifications to the current profile will be saved."
+msgstr ""
+
+msgid ""
+"This action is not revertible.\nDo you want to proceed?"
+msgstr ""
+
+msgid ""
+"Detach preset"
+msgstr ""
+
+
#~ msgid "ShiftLeft mouse button"
#~ msgstr "Shift + 鼠标左键"
diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po
index 0540cb89e9..e596bb54a7 100644
--- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po
+++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po
@@ -10567,7 +10567,8 @@ msgstr ""
"2. 避免因外牆速度變化而產生類似 Z 條紋的瑕疵。\n"
"3. 防止外牆因列印速度過快而出現 VFAs(細微表面瑕疵)。\n"
"\n"
-"譯者補充:最小層時間(Minimum Layer Time)是指列印每一層所需的最短時間。如果列印機以較快的速度完成一層的列印時間短於這個設定值,為了確保每層有足夠的時間冷卻和固化,列印機會自動減慢速度,以延長該層的列印時間,"
+"譯者補充:最小層時間(Minimum Layer Time)是指列印每一層所需的最短時間。如果列印機以較快的速度完成一層的列印時間短於這個設定值,"
+"為了確保每層有足夠的時間冷卻和固化,列印機會自動減慢速度,以延長該層的列印時間,"
"達到最小層時間的要求。這樣可以避免因冷卻不足而導致的列印缺陷,如層間附著不良或變形。\n"
"\n"
@@ -14691,7 +14692,7 @@ msgstr ""
"結束 > 開始 + 步距)"
msgid "VFA test"
-msgstr "VFA震紋測試"
+msgstr "VFA 震紋測試"
msgid "Start speed: "
msgstr "起始速度:"
@@ -15795,7 +15796,7 @@ msgid ""
"Did you know that you can use sandwich mode (inner-outer-inner) to improve precision and layer consistency if your model doesn't have very steep overhangs?"
msgstr ""
"三明治模式\n"
-"你知道嗎?如果模型中沒有太陡峭的懸空區域,可以使用三明治模式(內層-外層-內層)來提升精度並增強層的一致性。"
+"你知道嗎?如果模型中沒有太陡峭的懸空區域,可以使用三明治模式\n""(內層-外層-內層)來提升精度並增強層的一致性。"
#: resources/data/hints.ini: [hint:Chamber temperature]
msgid ""
@@ -15811,7 +15812,7 @@ msgid ""
"Did you know that calibrating your printer can do wonders? Check out our beloved calibration solution in OrcaSlicer."
msgstr ""
"校準\n"
-"你知道校準列印設備可以帶來奇效嗎?快來看看我們在 OrcaSlicer 中的校準解決方案。"
+"你知道校準列印設備可以帶來奇效嗎?快來看看我們在 OrcaSlicer 中的\n""校準解決方案。"
#: resources/data/hints.ini: [hint:Auxiliary fan]
msgid ""
@@ -15859,7 +15860,7 @@ msgid ""
"Did you know that Reverse on odd feature can significantly improve the surface quality of your overhangs?"
msgstr ""
"奇數反向\n"
-"你知道 奇數反向 功能可以顯著改善懸垂部分的表面品質嗎?"
+"你知道嗎?奇數反向 功能能大幅提升懸空結構的表面品質 "
#: resources/data/hints.ini: [hint:Cut Tool]
msgid ""
@@ -15875,7 +15876,7 @@ msgid ""
"Did you know that you can fix a corrupted 3D model to avoid a lot of slicing problems on the Windows system?"
msgstr ""
"修復模型\n"
-"你知道可以修復損壞的 3D 模型,以避免在 Windows 系統上出現大量切片問題嗎?"
+"你知道嗎?在 Windows 系統上修復損壞的 3D 模型,\n""可以有效避免許多切片時的問題。"
#: resources/data/hints.ini: [hint:Timelapse]
msgid ""
@@ -15899,7 +15900,7 @@ msgid ""
"Did you know that you can rotate objects to an optimal orientation for printing by a simple click?"
msgstr ""
"自動定向\n"
-"你知道嗎,你只需單擊滑鼠,即可將物件旋轉到適合的列印方向。"
+"你知道嗎?你只需單擊滑鼠,即可將物件旋轉到適合的列印方向。"
#: resources/data/hints.ini: [hint:Lay on Face]
msgid ""
@@ -15907,7 +15908,7 @@ msgid ""
"Did you know that you can quickly orient a model so that one of its faces sits on the print bed? Select the \"Place on face\" function or press the F key."
msgstr ""
"指定列印物件底部\n"
-"你知道嗎,你可以快速指定模型的底面,使其位於列印板上。選擇 \"選擇底面\" 功能或按F鍵。"
+"你知道嗎?你可以快速指定模型的底面,使其位於列印板上。\n""選擇「選擇底面」或按 F 鍵。"
#: resources/data/hints.ini: [hint:Object List]
msgid ""
@@ -15915,7 +15916,7 @@ msgid ""
"Did you know that you can view all objects/parts in a list and change settings for each object/part?"
msgstr ""
"物件清單\n"
-"你知道嗎?你可以在清單中檢視所有物件/部件,並為每個物件/部件調整設定。"
+"你知道嗎?你可以在清單中檢視所有物件/部件,並為每個物件/部件\n""調整設定。"
#: resources/data/hints.ini: [hint:Search Functionality]
msgid ""
@@ -15923,7 +15924,7 @@ msgid ""
"Did you know that you use the Search tool to quickly find a specific Orca Slicer setting?"
msgstr ""
"搜尋功能\n"
-"你知道可以使用搜尋工具快速找到特定的設定嗎?"
+"你知道嗎?使用「搜尋工具」可以快速定位特定的 Orca Slicer 設定。"
#: resources/data/hints.ini: [hint:Simplify Model]
msgid ""
@@ -15931,7 +15932,7 @@ msgid ""
"Did you know that you can reduce the number of triangles in a mesh using the Simplify mesh feature? Right-click the model and select Simplify model."
msgstr ""
"簡化模型\n"
-"你知道可以使用簡化網格功能來減少網格中的三角形數量嗎?右鍵點擊模型並選擇簡化模型。"
+"你知道嗎?透過「簡化網格」功能,你可以減少模型中的三角形數量。\n""只需右鍵點擊模型,然後選擇「簡化模型」。"
#: resources/data/hints.ini: [hint:Slicing Parameter Table]
msgid ""
@@ -15939,7 +15940,7 @@ msgid ""
"Did you know that you can view all objects/parts on a table and change settings for each object/part?"
msgstr ""
"參數表格\n"
-"你知道嗎?你可以看參數表格上的所有物件/零件,並更改每個物件/零件的設定。"
+"你知道嗎?你可以看參數表格上的所有物件/零件,並更改每個物件/零\n""件的設定。"
#: resources/data/hints.ini: [hint:Split to Objects/Parts]
msgid ""
@@ -15947,7 +15948,7 @@ msgid ""
"Did you know that you can split a big object into small ones for easy colorizing or printing?"
msgstr ""
"分割成物件/零件\n"
-"你知道嗎?你可以把一個大物件分割成多個小物件/零件以便著色或列印。"
+"你知道嗎?你可以把一個大物件分割成多個小物件/零件以便著色或\n""列印。"
#: resources/data/hints.ini: [hint:Subtract a Part]
msgid ""
@@ -15955,7 +15956,7 @@ msgid ""
"Did you know that you can subtract one mesh from another using the Negative part modifier? That way you can, for example, create easily resizable holes directly in Orca Slicer."
msgstr ""
"減去零件\n"
-"你知道可以使用負零件修飾器從一個網格中減去另一個網格嗎?這樣,你可以在 Orca Slicer 中輕鬆創建可調整大小的孔洞。"
+"你知道嗎?你可以使用「負零件修飾器」將一個網格從另一個網格中減\n""去。這樣,就能直接在 Orca Slicer 裡輕鬆創建尺寸可調的孔洞。"
#: resources/data/hints.ini: [hint:STEP]
msgid ""
@@ -15964,8 +15965,9 @@ msgid ""
"Orca Slicer supports slicing STEP files, providing smoother results than a lower resolution STL. Give it a try!"
msgstr ""
"STEP檔案\n"
-"你知道嗎,通過切片 STEP 檔案而不是 STL 檔案可以提高列印品質。\n"
-" Orca Slicer 支援切片 STEP 檔案,提供比低解析度 STL 更平滑的結果。試試看!"
+"你知道嗎?通過切片 STEP 檔案而不是 STL 檔案可以提高列印品質。\n"
+"Orca Slicer 支援切片 STEP 檔案,提供比低解析度 STL 更平滑的結果。\n"
+"試試看!"
#: resources/data/hints.ini: [hint:Z seam location]
msgid ""
@@ -15973,7 +15975,7 @@ msgid ""
"Did you know that you can customize the location of the Z seam, and even paint it on your print, to have it in a less visible location? This improves the overall look of your model. Check it out!"
msgstr ""
"Z接縫位置\n"
-"你知道嗎,你可以自訂Z接縫的位置,甚至可以將其繪製在列印上,使其位於不太可見的位置。這樣可以改善模型的整體外觀。試試看!"
+"你知道嗎?你可以自訂Z接縫的位置,甚至可以將其繪製在列印上,使\n""其位於不太可見的位置。這樣可以改善模型的整體外觀。試試看!"
#: resources/data/hints.ini: [hint:Fine-tuning for flow rate]
msgid ""
@@ -15981,7 +15983,7 @@ msgid ""
"Did you know that flow rate can be fine-tuned for even better-looking prints? Depending on the material, you can improve the overall finish of the printed model by doing some fine-tuning."
msgstr ""
"流量微調\n"
-"你知道嗎,你可以微調流量,以獲得更好看的列印效果。根據線材的不同,可以通過進行一些微調來提高列印模型的整體光潔度。"
+"你知道嗎?你可以微調流量,以獲得更好看的列印效果。根據線材的不\n""同,可以通過進行一些微調來提高列印模型的整體光潔度。"
#: resources/data/hints.ini: [hint:Split your prints into plates]
msgid ""
@@ -15989,7 +15991,7 @@ msgid ""
"Did you know that you can split a model that has a lot of parts into individual plates ready to print? This will simplify the process of keeping track of all the parts."
msgstr ""
"分類列印\n"
-"你知道嗎,你可以把一個有很多零件的模型安排到多個獨立的列印板,然後列印出來,這將簡化對所有零件的管理。"
+"你知道嗎?你可以把一個有很多零件的模型安排到多個獨立的列印板,\n""然後列印出來,這將簡化對所有零件的管理。"
#: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer Height]
msgid ""
@@ -15997,7 +15999,7 @@ msgid ""
"Did you know that you can print a model even faster, by using the Adaptive Layer Height option? Check it out!"
msgstr ""
"自適應層高度加速列印\n"
-"你知道嗎,你可以使用\"自適應層高度\"選項可以更快地列印模型。試試看!"
+"你知道嗎?你可以使用\"自適應層高度\"選項可以更快地列印模型。\n""試試看!"
#: resources/data/hints.ini: [hint:Support painting]
msgid ""
@@ -16005,7 +16007,7 @@ msgid ""
"Did you know that you can paint the location of your supports? This feature makes it easy to place the support material only on the sections of the model that actually need it."
msgstr ""
"自訂支撐\n"
-"你知道嗎,你可以手動繪製增加/隱藏支撐的位置,此功能使僅將支撐材料放置在實際需要的模型截面上變得容易。"
+"你知道嗎?你可以手動繪製增加/隱藏支撐的位置,此功能使僅將支撐\n""材料放置在實際需要的模型截面上變得容易。"
#: resources/data/hints.ini: [hint:Different types of supports]
msgid ""
@@ -16013,7 +16015,7 @@ msgid ""
"Did you know that you can choose from multiple types of supports? Tree supports work great for organic models, while saving filament and improving print speed. Check them out!"
msgstr ""
"支撐類型\n"
-"你知道嗎,有多種可選的支撐類型,樹狀支撐非常適合人物/動物模型,同時可以節線材並提高列印速度。試試看!"
+"你知道嗎?有多種可選的支撐類型,樹狀支撐非常適合人物/動物模型,\n""同時可以節線材並提高列印速度。試試看!"
#: resources/data/hints.ini: [hint:Printing Silk Filament]
msgid ""
@@ -16021,7 +16023,7 @@ msgid ""
"Did you know that Silk filament needs special consideration to print it successfully? Higher temperature and lower speed are always recommended for the best results."
msgstr ""
"列印絲綢線材\n"
-"你知道嗎,絲綢線材需要特別考慮才能成功列印。為了獲得最佳效果,通常建議使用較高的溫度和較低的速度。"
+"你知道嗎?絲綢線材需要特別考慮才能成功列印。為了獲得最佳效果,\n""通常建議使用較高的溫度和較低的速度。"
#: resources/data/hints.ini: [hint:Brim for better adhesion]
msgid ""
@@ -16029,7 +16031,7 @@ msgid ""
"Did you know that when printing models have a small contact interface with the printing surface, it's recommended to use a brim?"
msgstr ""
"使用 Brim\n"
-"你知道嗎?當模型與熱床表面的接觸面積較小時,建議使用 Brim 以提高列印成功率。"
+"你知道嗎?當模型與熱床表面的接觸面積較小時,建議使用 Brim 以提\n""高列印成功率。"
#: resources/data/hints.ini: [hint:Set parameters for multiple objects]
msgid ""
@@ -16053,7 +16055,7 @@ msgid ""
"Did you know that you can save the wasted filament by flushing them into support/objects/infill during filament change?"
msgstr ""
"廢料運用到支撐/物件/填充中\n"
-"你知道嗎?你可以在換料時將廢料運用到支撐/物件/填充,以節省浪費的線材。"
+"你知道嗎?你可以在換料時將廢料運用到支撐/物件/填充,以節省浪費\n""的線材。"
#: resources/data/hints.ini: [hint:Improve strength]
msgid ""
@@ -16061,15 +16063,16 @@ msgid ""
"Did you know that you can use more wall loops and higher sparse infill density to improve the strength of the model?"
msgstr ""
"提高強度\n"
-"你知道嗎?你可以使用更多的牆層數和更高的疏散填充密度來提高模型的強度。"
+"你知道嗎?你可以使用更多的牆層數和更高的疏散填充密度來提高模型\n""強度。"
#: resources/data/hints.ini: [hint:When need to print with the printer door opened]
msgid ""
"When need to print with the printer door opened\n"
"Did you know that opening the printer door can reduce the probability of extruder/hotend clogging when printing lower temperature filament with a higher enclosure temperature. More info about this in the Wiki."
msgstr ""
-"需要在開啟列印設備門的情況下列印\n"
-"你知道當列印低溫耗材且機身溫度較高時,開啟列印設備門可以減少擠出機/熱端堵塞的機率嗎?更多資訊請參閱Wiki。"
+"當列印時需要打開機門時\n"
+"你知道嗎?在列印低溫耗材且機箱內溫度較高的情況下,打開列印\n""設備機門可以有效降低擠出機或噴嘴堵塞的機率。\n"
+"詳情可在Wiki上查看。"
#: resources/data/hints.ini: [hint:Avoid warping]
msgid ""
@@ -16077,4 +16080,85 @@ msgid ""
"Did you know that when printing materials that are prone to warping such as ABS, appropriately increasing the heatbed temperature can reduce the probability of warping."
msgstr ""
"避免翹曲\n"
+"你知道嗎?當列印容易翹曲的材料(如 ABS)時,適當提高熱床溫度\n""可以降低翹曲的機率。"
+
+#: src/slic3r/GUI/Tab.cpp:
+msgid "Dependencies"
+msgstr "相依項目"
+
+msgid "Profile dependencies"
+msgstr "設定檔相依項目"
+
+msgid "This is a default preset."
+msgstr "預設配置。"
+
+msgid "This is a system preset."
+msgstr "這是系統預設配置"
+
+msgid "Current preset is inherited from the default preset."
+msgstr "目前的配置繼承自預設配置。"
+
+msgid "Current preset is inherited from"
+msgstr "目前的配置繼承自"
+
+msgid "It can't be deleted or modified."
+msgstr "它無法被刪除或修改。"
+
+msgid "Any modifications should be saved as a new preset inherited from this one."
+msgstr "若要進行任何修改,請另存為一個新的預設配置,並繼承自此預設配置。"
+
+msgid "To do that please specify a new name for the preset."
+msgstr "為此,請為新的預設配置指定一個名稱。"
+
+msgid "Additional information:"
+msgstr "其他資訊:"
+
+msgid "vendor"
+msgstr "供應商"
+
+msgid ", ver: "
+msgstr ",版本"
+
+msgid "printer model"
+msgstr "列印設備型號"
+
+msgid "default print profile"
+msgstr "預設列印設定檔"
+
+msgid "default filament profile"
+msgstr "預設線材設定檔"
+
+msgid "default SLA material profile"
+msgstr "預設 SLA 材料設定檔"
+
+msgid "default SLA print profile"
+msgstr "預設 SLA 列印設定檔"
+
+msgid "full profile name"
+msgstr "完整設定檔名稱"
+
+msgid "symbolic profile name"
+msgstr "簡易設定檔名稱"
+
+msgid ""
+"A copy of the current system preset will be created, which will be detached from the system preset."
+msgstr "將建立目前系統配置的副本,且該副本將與系統配置分離不相關聯。"
+
+msgid ""
+"The current custom preset will be detached from the parent system preset."
+msgstr "當前的自訂配置將與父系統配置分離不相關聯。"
+
+msgid ""
+"Modifications to the current profile will be saved."
+msgstr ""
+"目前設定檔的修改將會保存下來。"
+
+msgid ""
+"This action is not revertible.\nDo you want to proceed?"
+msgstr ""
+"此操作無法還原。\n您確定要繼續嗎?"
+
+msgid ""
+"Detach preset"
+msgstr "解除預設關聯"
"你知道嗎?當列印容易翹曲的材料(如 ABS)時,適當提高熱床溫度可以降低翹曲的機率。"
diff --git a/resources/images/OrcaSlicer_about.svg b/resources/images/OrcaSlicer_about.svg
index 43d9bd4729..5b675c07f8 100644
--- a/resources/images/OrcaSlicer_about.svg
+++ b/resources/images/OrcaSlicer_about.svg
@@ -1,537 +1 @@
-
-
+
\ No newline at end of file
diff --git a/resources/images/OrcaSlicer_about_dark.svg b/resources/images/OrcaSlicer_about_dark.svg
new file mode 100644
index 0000000000..efff0dc6fc
--- /dev/null
+++ b/resources/images/OrcaSlicer_about_dark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources/images/splash_logo.svg b/resources/images/splash_logo.svg
index 45a5b3be25..3bcd34637d 100644
--- a/resources/images/splash_logo.svg
+++ b/resources/images/splash_logo.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/resources/images/splash_logo_dark.svg b/resources/images/splash_logo_dark.svg
index 5ea2bebcbd..5caad657ed 100644
--- a/resources/images/splash_logo_dark.svg
+++ b/resources/images/splash_logo_dark.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json
index 045909f8a0..bf4ec872a1 100644
--- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json
+++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json
@@ -91,9 +91,6 @@
"filament_cost": [
"0"
],
- "filament_density": [
- "0"
- ],
"filament_deretraction_speed": [
"80"
],
diff --git a/resources/profiles/Anycubic/filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json
index f750630fb6..4ff125b1e9 100644
--- a/resources/profiles/Anycubic/filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json
+++ b/resources/profiles/Anycubic/filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json
@@ -91,9 +91,6 @@
"filament_cost": [
"0"
],
- "filament_density": [
- "0"
- ],
"filament_deretraction_speed": [
"80"
],
diff --git a/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json
index 989e5d9fff..b3dfccd36f 100644
--- a/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json
+++ b/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json
@@ -91,9 +91,6 @@
"filament_cost": [
"0"
],
- "filament_density": [
- "0"
- ],
"filament_deretraction_speed": [
"25"
],
diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 0.4 nozzle.json
index 46e01ed821..91a96361d3 100644
--- a/resources/profiles/Anycubic/machine/Anycubic Kobra 0.4 nozzle.json
+++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 0.4 nozzle.json
@@ -106,9 +106,9 @@
"default_filament_profile": [
"Anycubic Generic PLA"
],
- "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM204 S[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nG28 ; home all\nG1 Y1.0 Z0.3 F1000 ; move print head up\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nG92 E0.0\n; initial load\nG1 X205.0 E19 F1000\nG1 Y1.6\nG1 X5.0 E19 F1000\nG92 E0.0\n; intro line\nG1 Y2.0 Z0.2 F1000\nG1 X65.0 E9.0 F1000\nG1 X105.0 E12.5 F1000\nG92 E0.0",
- "machine_end_gcode": "G1 E-1.0 F2100 ; retract\nG92 E0.0\nG1{if max_layer_z < printable_height} Z{z_offset+min(max_layer_z+30, printable_height)}{endif} E-34.0 F720 ; move print head up & retract filament\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y105 F3000 ; park print head\nM84 ; disable motors",
+ "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM204 P[machine_max_acceleration_extruding] R[machine_max_acceleration_retracting] T[machine_max_acceleration_travel]\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nG28 ; home all\nG1 Y1.0 Z0.3 F{travel_speed*60} ; move print head up\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nG92 E0.0\n; initial load\nG1 X205.0 E19 F1000\nG1 Y1.6\nG1 X5.0 E19 F1000\nG92 E0.0\n; intro line\nG1 Y2.0 Z0.2 F1000\nG1 X65.0 E9.0 F1000\nG1 X105.0 E12.5 F1000\nG92 E0.0",
+ "machine_end_gcode": "G1 E-1.0 F2100 ; retract\nG92 E0.0\nG1 X0{if max_layer_z < printable_height} Z{z_offset+min(max_layer_z+30, printable_height)}{endif} E-34.0 F{travel_speed*60} ; move print head up & retract filament\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y105 F{travel_speed*60} ; park print head\nM84 ; disable motors",
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\n\n",
"layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]",
"scan_first_layer": "0"
-}
\ No newline at end of file
+}
diff --git a/resources/profiles/Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json
index 709dcf918f..a28efca93a 100644
--- a/resources/profiles/Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json
+++ b/resources/profiles/Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json
@@ -110,8 +110,8 @@
"default_filament_profile": [
"Anycubic Generic PLA"
],
- "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM204 S[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nG28 ; home all\nG1 Y1.0 Z0.3 F1000 ; move print head up\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nG92 E0.0\n; initial load\nG1 X205.0 E19 F1000\nG1 Y1.6\nG1 X5.0 E19 F1000\nG92 E0.0\n; intro line\nG1 Y2.0 Z0.2 F1000\nG1 X65.0 E9.0 F1000\nG1 X105.0 E12.5 F1000\nG92 E0.0",
- "machine_end_gcode": "G1 E-1.0 F2100 ; retract\nG92 E0.0\nG1{if max_layer_z < printable_height} Z{z_offset+min(max_layer_z+30, printable_height)}{endif} E-34.0 F720 ; move print head up & retract filament\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y105 F3000 ; park print head\nM84 ; disable motors",
+ "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM204 P[machine_max_acceleration_extruding] R[machine_max_acceleration_retracting] T[machine_max_acceleration_travel]\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nG28 ; home all\nG1 Y1.0 Z0.3 F{travel_speed*60} ; move print head up\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nG92 E0.0\n; initial load\nG1 X205.0 E19 F1000\nG1 Y1.6\nG1 X5.0 E19 F1000\nG92 E0.0\n; intro line\nG1 Y2.0 Z0.2 F1000\nG1 X65.0 E9.0 F1000\nG1 X105.0 E12.5 F1000\nG92 E0.0",
+ "machine_end_gcode": "G1 E-1.0 F2100 ; retract\nG92 E0.0\nG1 X0{if max_layer_z < printable_height} Z{z_offset+min(max_layer_z+30, printable_height)}{endif} E-34.0 F{travel_speed*60} ; move print head up & retract filament\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y105 F{travel_speed*60} ; park print head\nM84 ; disable motors",
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\n\n",
"layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]",
"scan_first_layer": "0"
diff --git a/resources/profiles/Creality/filament/Creality Generic ABS @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic ABS @Hi-all.json
index 13fbd8c737..4f30a0525a 100644
--- a/resources/profiles/Creality/filament/Creality Generic ABS @Hi-all.json
+++ b/resources/profiles/Creality/filament/Creality Generic ABS @Hi-all.json
@@ -7,6 +7,7 @@
"inherits": "Creality Generic ABS",
"filament_max_volumetric_speed": ["9"],
"slow_down_layer_time": ["5"],
+ "filament_start_gcode": ["; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n"],
"compatible_printers": [
"Creality Hi 0.4 nozzle",
"Creality Hi 0.6 nozzle"
diff --git a/resources/profiles/Creality/filament/Creality Generic ASA @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic ASA @Hi-all.json
index 7e229dc729..d73dc9a05b 100644
--- a/resources/profiles/Creality/filament/Creality Generic ASA @Hi-all.json
+++ b/resources/profiles/Creality/filament/Creality Generic ASA @Hi-all.json
@@ -7,6 +7,7 @@
"inherits": "Creality Generic ASA",
"filament_max_volumetric_speed": ["9"],
"slow_down_layer_time": ["5"],
+ "filament_start_gcode": ["; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n"],
"compatible_printers": [
"Creality Hi 0.4 nozzle",
"Creality Hi 0.6 nozzle"
diff --git a/resources/profiles/Creality/filament/Creality Generic PETG @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PETG @Hi-all.json
index 11a699ef25..a5d13fd022 100644
--- a/resources/profiles/Creality/filament/Creality Generic PETG @Hi-all.json
+++ b/resources/profiles/Creality/filament/Creality Generic PETG @Hi-all.json
@@ -17,6 +17,7 @@
"textured_plate_temp_initial_layer" : ["70"],
"nozzle_temperature_initial_layer": ["250"],
"nozzle_temperature": ["250"],
+ "filament_start_gcode": ["; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n"],
"compatible_printers": [
"Creality Hi 0.4 nozzle",
"Creality Hi 0.6 nozzle"
diff --git a/resources/profiles/Creality/filament/Creality Generic PLA @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PLA @Hi-all.json
index dd1da0b595..39ff7bf9c8 100644
--- a/resources/profiles/Creality/filament/Creality Generic PLA @Hi-all.json
+++ b/resources/profiles/Creality/filament/Creality Generic PLA @Hi-all.json
@@ -86,6 +86,7 @@
"filament_ramming_parameters": [
"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
],
+ "filament_start_gcode": ["; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n"],
"compatible_printers": [
"Creality Hi 0.4 nozzle",
"Creality Hi 0.6 nozzle"
diff --git a/resources/profiles/Creality/filament/Creality Generic TPU @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic TPU @Hi-all.json
index f34d8600c3..f98b6f6571 100644
--- a/resources/profiles/Creality/filament/Creality Generic TPU @Hi-all.json
+++ b/resources/profiles/Creality/filament/Creality Generic TPU @Hi-all.json
@@ -29,6 +29,7 @@
"slow_down_layer_time": [
"5"
],
+ "filament_start_gcode": ["; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n"],
"compatible_printers": [
"Creality Hi 0.4 nozzle",
"Creality Hi 0.6 nozzle"
diff --git a/resources/profiles/Custom.json b/resources/profiles/Custom.json
index 5141e5f323..eea4025908 100644
--- a/resources/profiles/Custom.json
+++ b/resources/profiles/Custom.json
@@ -1,6 +1,6 @@
{
"name": "Custom Printer",
- "version": "02.02.00.04",
+ "version": "02.02.00.05",
"force_update": "0",
"description": "My configurations",
"machine_model_list": [
@@ -173,120 +173,44 @@
],
"filament_list": [
{
- "name": "fdm_filament_common",
- "sub_path": "filament/fdm_filament_common.json"
+ "name": "Generic PLA @MyToolChanger",
+ "sub_path": "filament/Generic PLA @MyToolChanger.json"
},
{
- "name": "fdm_filament_pla",
- "sub_path": "filament/fdm_filament_pla.json"
+ "name": "Generic PLA-CF @MyToolChanger",
+ "sub_path": "filament/Generic PLA-CF @MyToolChanger.json"
},
{
- "name": "fdm_filament_tpu",
- "sub_path": "filament/fdm_filament_tpu.json"
+ "name": "Generic PETG @MyToolChanger",
+ "sub_path": "filament/Generic PETG @MyToolChanger.json"
},
{
- "name": "fdm_filament_pet",
- "sub_path": "filament/fdm_filament_pet.json"
+ "name": "Generic ABS @MyToolChanger",
+ "sub_path": "filament/Generic ABS @MyToolChanger.json"
},
{
- "name": "fdm_filament_abs",
- "sub_path": "filament/fdm_filament_abs.json"
+ "name": "Generic TPU @MyToolChanger",
+ "sub_path": "filament/Generic TPU @MyToolChanger.json"
},
{
- "name": "fdm_filament_pc",
- "sub_path": "filament/fdm_filament_pc.json"
+ "name": "Generic ASA @MyToolChanger",
+ "sub_path": "filament/Generic ASA @MyToolChanger.json"
},
{
- "name": "fdm_filament_asa",
- "sub_path": "filament/fdm_filament_asa.json"
+ "name": "Generic PC @MyToolChanger",
+ "sub_path": "filament/Generic PC @MyToolChanger.json"
},
{
- "name": "fdm_filament_pva",
- "sub_path": "filament/fdm_filament_pva.json"
+ "name": "Generic PVA @MyToolChanger",
+ "sub_path": "filament/Generic PVA @MyToolChanger.json"
},
{
- "name": "fdm_filament_pa",
- "sub_path": "filament/fdm_filament_pa.json"
+ "name": "Generic PA @MyToolChanger",
+ "sub_path": "filament/Generic PA @MyToolChanger.json"
},
{
- "name": "My Generic PLA",
- "sub_path": "filament/My Generic PLA.json"
- },
- {
- "name": "My Generic PLA-CF",
- "sub_path": "filament/My Generic PLA-CF.json"
- },
- {
- "name": "My Generic PETG",
- "sub_path": "filament/My Generic PETG.json"
- },
- {
- "name": "My Generic ABS",
- "sub_path": "filament/My Generic ABS.json"
- },
- {
- "name": "My Generic TPU",
- "sub_path": "filament/My Generic TPU.json"
- },
- {
- "name": "My Generic ASA",
- "sub_path": "filament/My Generic ASA.json"
- },
- {
- "name": "My Generic PC",
- "sub_path": "filament/My Generic PC.json"
- },
- {
- "name": "My Generic PVA",
- "sub_path": "filament/My Generic PVA.json"
- },
- {
- "name": "My Generic PA",
- "sub_path": "filament/My Generic PA.json"
- },
- {
- "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"
+ "name": "Generic PA-CF @MyToolChanger",
+ "sub_path": "filament/Generic PA-CF @MyToolChanger.json"
}
],
"machine_list": [
diff --git a/resources/profiles/Custom/filament/My Generic ABS @MyToolChanger.json b/resources/profiles/Custom/filament/Generic ABS @MyToolChanger.json
similarity index 81%
rename from resources/profiles/Custom/filament/My Generic ABS @MyToolChanger.json
rename to resources/profiles/Custom/filament/Generic ABS @MyToolChanger.json
index fb8f51bf95..23238a1ea2 100644
--- a/resources/profiles/Custom/filament/My Generic ABS @MyToolChanger.json
+++ b/resources/profiles/Custom/filament/Generic ABS @MyToolChanger.json
@@ -1,17 +1,11 @@
{
"type": "filament",
- "filament_id": "GFB99",
"setting_id": "GFB99_MTC_0",
- "name": "My Generic ABS @MyToolChanger",
+ "name": "Generic ABS @MyToolChanger",
+ "renamed_from": "My Generic ABS @MyToolChanger",
"from": "system",
"instantiation": "true",
- "inherits": "fdm_filament_abs",
- "filament_flow_ratio": [
- "0.926"
- ],
- "filament_max_volumetric_speed": [
- "12"
- ],
+ "inherits": "Generic ABS @System",
"filament_cooling_final_speed": [
"3.5"
],
diff --git a/resources/profiles/Custom/filament/My Generic ASA @MyToolChanger.json b/resources/profiles/Custom/filament/Generic ASA @MyToolChanger.json
similarity index 81%
rename from resources/profiles/Custom/filament/My Generic ASA @MyToolChanger.json
rename to resources/profiles/Custom/filament/Generic ASA @MyToolChanger.json
index 05bab114b4..28f13fc7c2 100644
--- a/resources/profiles/Custom/filament/My Generic ASA @MyToolChanger.json
+++ b/resources/profiles/Custom/filament/Generic ASA @MyToolChanger.json
@@ -1,17 +1,11 @@
{
"type": "filament",
- "filament_id": "GFB98",
"setting_id": "GFB98_MTC_0",
- "name": "My Generic ASA @MyToolChanger",
+ "name": "Generic ASA @MyToolChanger",
+ "renamed_from": "My Generic ASA @MyToolChanger",
"from": "system",
"instantiation": "true",
- "inherits": "fdm_filament_asa",
- "filament_flow_ratio": [
- "0.93"
- ],
- "filament_max_volumetric_speed": [
- "12"
- ],
+ "inherits": "Generic ASA @System",
"filament_cooling_final_speed": [
"3.5"
],
diff --git a/resources/profiles/Custom/filament/My Generic PA @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PA @MyToolChanger.json
similarity index 77%
rename from resources/profiles/Custom/filament/My Generic PA @MyToolChanger.json
rename to resources/profiles/Custom/filament/Generic PA @MyToolChanger.json
index 17a9b793cc..76ab962feb 100644
--- a/resources/profiles/Custom/filament/My Generic PA @MyToolChanger.json
+++ b/resources/profiles/Custom/filament/Generic PA @MyToolChanger.json
@@ -1,20 +1,11 @@
{
"type": "filament",
- "filament_id": "GFN99",
"setting_id": "GFN99_MTC_0",
- "name": "My Generic PA @MyToolChanger",
+ "name": "Generic PA @MyToolChanger",
+ "renamed_from": "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"
- ],
+ "inherits": "Generic PA @System",
"filament_cooling_final_speed": [
"3.5"
],
diff --git a/resources/profiles/Custom/filament/Generic PA-CF @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PA-CF @MyToolChanger.json
new file mode 100644
index 0000000000..a0dfaa0829
--- /dev/null
+++ b/resources/profiles/Custom/filament/Generic PA-CF @MyToolChanger.json
@@ -0,0 +1,51 @@
+{
+ "type": "filament",
+ "setting_id": "GFN98_MTC_0",
+ "name": "Generic PA-CF @MyToolChanger",
+ "renamed_from": "My Generic PA-CF @MyToolChanger",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "Generic PA-CF @System",
+ "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/Generic PC @MyToolChanger.json
similarity index 83%
rename from resources/profiles/Custom/filament/My Generic PC @MyToolChanger.json
rename to resources/profiles/Custom/filament/Generic PC @MyToolChanger.json
index 7ae24c6774..0ff6bee88f 100644
--- a/resources/profiles/Custom/filament/My Generic PC @MyToolChanger.json
+++ b/resources/profiles/Custom/filament/Generic PC @MyToolChanger.json
@@ -2,16 +2,11 @@
"type": "filament",
"filament_id": "GFC99",
"setting_id": "GFC99_MTC_0",
- "name": "My Generic PC @MyToolChanger",
+ "name": "Generic PC @MyToolChanger",
+ "renamed_from": "My Generic PC @MyToolChanger",
"from": "system",
"instantiation": "true",
- "inherits": "fdm_filament_pc",
- "filament_max_volumetric_speed": [
- "12"
- ],
- "filament_flow_ratio": [
- "0.94"
- ],
+ "inherits": "Generic PC @System",
"filament_cooling_final_speed": [
"3.5"
],
diff --git a/resources/profiles/Custom/filament/Generic PETG @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PETG @MyToolChanger.json
new file mode 100644
index 0000000000..27f0c96efc
--- /dev/null
+++ b/resources/profiles/Custom/filament/Generic PETG @MyToolChanger.json
@@ -0,0 +1,52 @@
+{
+ "type": "filament",
+ "filament_id": "GFG99",
+ "setting_id": "GFG99_MTC_0",
+ "name": "Generic PETG @MyToolChanger",
+ "renamed_from": "My Generic PETG @MyToolChanger",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "Generic PETG @System",
+ "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/Generic PLA @MyToolChanger.json
similarity index 80%
rename from resources/profiles/Custom/filament/My Generic PLA @MyToolChanger.json
rename to resources/profiles/Custom/filament/Generic PLA @MyToolChanger.json
index facaf08984..ef24ac2afb 100644
--- a/resources/profiles/Custom/filament/My Generic PLA @MyToolChanger.json
+++ b/resources/profiles/Custom/filament/Generic PLA @MyToolChanger.json
@@ -2,19 +2,11 @@
"type": "filament",
"filament_id": "GFL99",
"setting_id": "GFL99_MTC_0",
- "name": "My Generic PLA @MyToolChanger",
+ "name": "Generic PLA @MyToolChanger",
+ "renamed_from": "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"
- ],
+ "inherits": "Generic PLA @System",
"filament_cooling_final_speed": [
"3.5"
],
diff --git a/resources/profiles/Custom/filament/My Generic PLA-CF @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PLA-CF @MyToolChanger.json
similarity index 77%
rename from resources/profiles/Custom/filament/My Generic PLA-CF @MyToolChanger.json
rename to resources/profiles/Custom/filament/Generic PLA-CF @MyToolChanger.json
index 8adf8d53d2..8be0250760 100644
--- a/resources/profiles/Custom/filament/My Generic PLA-CF @MyToolChanger.json
+++ b/resources/profiles/Custom/filament/Generic PLA-CF @MyToolChanger.json
@@ -2,22 +2,11 @@
"type": "filament",
"filament_id": "GFL98",
"setting_id": "GFL98_MTC_0",
- "name": "My Generic PLA-CF @MyToolChanger",
+ "name": "Generic PLA-CF @MyToolChanger",
+ "renamed_from": "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"
- ],
+ "inherits": "Generic PLA-CF @System",
"filament_cooling_final_speed": [
"3.5"
],
diff --git a/resources/profiles/Custom/filament/Generic PVA @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PVA @MyToolChanger.json
new file mode 100644
index 0000000000..acb5e848af
--- /dev/null
+++ b/resources/profiles/Custom/filament/Generic PVA @MyToolChanger.json
@@ -0,0 +1,52 @@
+{
+ "type": "filament",
+ "filament_id": "GFS99",
+ "setting_id": "GFS99_MTC_0",
+ "name": "Generic PVA @MyToolChanger",
+ "renamed_from": "My Generic PVA @MyToolChanger",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "Generic PVA @System",
+ "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 TPU @MyToolChanger.json b/resources/profiles/Custom/filament/Generic TPU @MyToolChanger.json
similarity index 73%
rename from resources/profiles/Custom/filament/My Generic TPU @MyToolChanger.json
rename to resources/profiles/Custom/filament/Generic TPU @MyToolChanger.json
index 54c4a15a19..1f207dc2f1 100644
--- a/resources/profiles/Custom/filament/My Generic TPU @MyToolChanger.json
+++ b/resources/profiles/Custom/filament/Generic TPU @MyToolChanger.json
@@ -2,10 +2,11 @@
"type": "filament",
"filament_id": "GFU99",
"setting_id": "GFU99_MTC_0",
- "name": "My Generic TPU @MyToolChanger",
+ "name": "Generic TPU @MyToolChanger",
+ "renamed_from": "My Generic TPU @MyToolChanger",
"from": "system",
"instantiation": "true",
- "inherits": "fdm_filament_tpu",
+ "inherits": "Generic TPU @System",
"filament_max_volumetric_speed": [
"3.2"
],
diff --git a/resources/profiles/Custom/filament/My Generic ABS.json b/resources/profiles/Custom/filament/My Generic ABS.json
deleted file mode 100644
index 14fe0490e5..0000000000
--- a/resources/profiles/Custom/filament/My Generic ABS.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "type": "filament",
- "filament_id": "GFB99",
- "setting_id": "GFSA04",
- "name": "My Generic ABS",
- "from": "system",
- "instantiation": "true",
- "inherits": "fdm_filament_abs",
- "filament_flow_ratio": [
- "0.926"
- ],
- "filament_max_volumetric_speed": [
- "12"
- ],
- "compatible_printers": [
- "MyKlipper 0.4 nozzle",
- "MyKlipper 0.2 nozzle",
- "MyKlipper 0.6 nozzle",
- "MyKlipper 0.8 nozzle",
- "MyMarlin 0.4 nozzle",
- "MyRRF 0.4 nozzle"
- ]
-}
\ No newline at end of file
diff --git a/resources/profiles/Custom/filament/My Generic ASA.json b/resources/profiles/Custom/filament/My Generic ASA.json
deleted file mode 100644
index ca6539c115..0000000000
--- a/resources/profiles/Custom/filament/My Generic ASA.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "type": "filament",
- "filament_id": "GFB98",
- "setting_id": "GFSA04",
- "name": "My Generic ASA",
- "from": "system",
- "instantiation": "true",
- "inherits": "fdm_filament_asa",
- "filament_flow_ratio": [
- "0.93"
- ],
- "filament_max_volumetric_speed": [
- "12"
- ],
- "compatible_printers": [
- "MyKlipper 0.4 nozzle",
- "MyKlipper 0.2 nozzle",
- "MyKlipper 0.6 nozzle",
- "MyKlipper 0.8 nozzle",
- "MyMarlin 0.4 nozzle",
- "MyRRF 0.4 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
deleted file mode 100644
index 0b0f065eed..0000000000
--- a/resources/profiles/Custom/filament/My Generic PA-CF @MyToolChanger.json
+++ /dev/null
@@ -1,63 +0,0 @@
-{
- "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 PA-CF.json b/resources/profiles/Custom/filament/My Generic PA-CF.json
deleted file mode 100644
index 60efac620c..0000000000
--- a/resources/profiles/Custom/filament/My Generic PA-CF.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "type": "filament",
- "filament_id": "GFN98",
- "setting_id": "GFSA04",
- "name": "My 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": [
- "MyKlipper 0.4 nozzle",
- "MyKlipper 0.2 nozzle",
- "MyKlipper 0.6 nozzle",
- "MyKlipper 0.8 nozzle",
- "MyMarlin 0.4 nozzle",
- "MyRRF 0.4 nozzle"
- ]
-}
\ No newline at end of file
diff --git a/resources/profiles/Custom/filament/My Generic PA.json b/resources/profiles/Custom/filament/My Generic PA.json
deleted file mode 100644
index 2e284b6d37..0000000000
--- a/resources/profiles/Custom/filament/My Generic PA.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "type": "filament",
- "filament_id": "GFN99",
- "setting_id": "GFSA04",
- "name": "My 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": [
- "MyKlipper 0.4 nozzle",
- "MyKlipper 0.2 nozzle",
- "MyKlipper 0.6 nozzle",
- "MyKlipper 0.8 nozzle",
- "MyMarlin 0.4 nozzle",
- "MyRRF 0.4 nozzle"
- ]
-}
\ No newline at end of file
diff --git a/resources/profiles/Custom/filament/My Generic PC.json b/resources/profiles/Custom/filament/My Generic PC.json
deleted file mode 100644
index 4738b42e18..0000000000
--- a/resources/profiles/Custom/filament/My Generic PC.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "type": "filament",
- "filament_id": "GFC99",
- "setting_id": "GFSA04",
- "name": "My Generic PC",
- "from": "system",
- "instantiation": "true",
- "inherits": "fdm_filament_pc",
- "filament_max_volumetric_speed": [
- "12"
- ],
- "filament_flow_ratio": [
- "0.94"
- ],
- "compatible_printers": [
- "MyKlipper 0.4 nozzle",
- "MyKlipper 0.2 nozzle",
- "MyKlipper 0.6 nozzle",
- "MyKlipper 0.8 nozzle",
- "MyMarlin 0.4 nozzle",
- "MyRRF 0.4 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
deleted file mode 100644
index f9cb2e0b16..0000000000
--- a/resources/profiles/Custom/filament/My Generic PETG @MyToolChanger.json
+++ /dev/null
@@ -1,87 +0,0 @@
-{
- "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 PETG.json b/resources/profiles/Custom/filament/My Generic PETG.json
deleted file mode 100644
index f640aea59e..0000000000
--- a/resources/profiles/Custom/filament/My Generic PETG.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
- "type": "filament",
- "filament_id": "GFG99",
- "setting_id": "GFSA04",
- "name": "My 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": [
- "MyKlipper 0.4 nozzle",
- "MyKlipper 0.2 nozzle",
- "MyKlipper 0.6 nozzle",
- "MyKlipper 0.8 nozzle",
- "MyMarlin 0.4 nozzle",
- "MyRRF 0.4 nozzle"
- ]
-}
\ No newline at end of file
diff --git a/resources/profiles/Custom/filament/My Generic PLA-CF.json b/resources/profiles/Custom/filament/My Generic PLA-CF.json
deleted file mode 100644
index b0ed43b93c..0000000000
--- a/resources/profiles/Custom/filament/My Generic PLA-CF.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "type": "filament",
- "filament_id": "GFL98",
- "setting_id": "GFSA04",
- "name": "My 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": [
- "MyKlipper 0.4 nozzle",
- "MyKlipper 0.2 nozzle",
- "MyKlipper 0.6 nozzle",
- "MyKlipper 0.8 nozzle",
- "MyMarlin 0.4 nozzle",
- "MyRRF 0.4 nozzle"
- ]
-}
\ No newline at end of file
diff --git a/resources/profiles/Custom/filament/My Generic PLA.json b/resources/profiles/Custom/filament/My Generic PLA.json
deleted file mode 100644
index 54dc3dc779..0000000000
--- a/resources/profiles/Custom/filament/My Generic PLA.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "type": "filament",
- "filament_id": "GFL99",
- "setting_id": "GFSA04",
- "name": "My 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": [
- "MyKlipper 0.4 nozzle",
- "MyKlipper 0.2 nozzle",
- "MyKlipper 0.6 nozzle",
- "MyKlipper 0.8 nozzle",
- "MyMarlin 0.4 nozzle",
- "MyRRF 0.4 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
deleted file mode 100644
index a2dd357753..0000000000
--- a/resources/profiles/Custom/filament/My Generic PVA @MyToolChanger.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "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 PVA.json b/resources/profiles/Custom/filament/My Generic PVA.json
deleted file mode 100644
index ba874665cb..0000000000
--- a/resources/profiles/Custom/filament/My Generic PVA.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "type": "filament",
- "filament_id": "GFS99",
- "setting_id": "GFSA04",
- "name": "My 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": [
- "MyKlipper 0.4 nozzle",
- "MyKlipper 0.2 nozzle",
- "MyKlipper 0.6 nozzle",
- "MyKlipper 0.8 nozzle",
- "MyMarlin 0.4 nozzle",
- "MyRRF 0.4 nozzle"
- ]
-}
\ No newline at end of file
diff --git a/resources/profiles/Custom/filament/My Generic TPU.json b/resources/profiles/Custom/filament/My Generic TPU.json
deleted file mode 100644
index 359d3da7a7..0000000000
--- a/resources/profiles/Custom/filament/My Generic TPU.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "type": "filament",
- "filament_id": "GFU99",
- "setting_id": "GFSA04",
- "name": "My Generic TPU",
- "from": "system",
- "instantiation": "true",
- "inherits": "fdm_filament_tpu",
- "filament_max_volumetric_speed": [
- "3.2"
- ],
- "compatible_printers": [
- "MyKlipper 0.4 nozzle",
- "MyKlipper 0.2 nozzle",
- "MyKlipper 0.6 nozzle",
- "MyKlipper 0.8 nozzle",
- "MyMarlin 0.4 nozzle",
- "MyRRF 0.4 nozzle"
- ]
-}
\ No newline at end of file
diff --git a/resources/profiles/Custom/machine/MyKlipper.json b/resources/profiles/Custom/machine/MyKlipper.json
index 8c4b9f56e9..9f909d3615 100644
--- a/resources/profiles/Custom/machine/MyKlipper.json
+++ b/resources/profiles/Custom/machine/MyKlipper.json
@@ -8,5 +8,5 @@
"bed_model": "",
"bed_texture": "orcaslicer_bed_texture.svg",
"hotend_model": "",
- "default_materials": "My Generic ABS;My Generic PLA;My Generic PLA-CF;My Generic PETG;My Generic TPU;My Generic ASA;My Generic PC;My Generic PVA;My Generic PA;My Generic PA-CF"
+ "default_materials": "Generic ABS @System;Generic PLA @System;Generic PLA-CF @System;Generic PETG @System;Generic TPU @System;Generic ASA @System;Generic PC @System;Generic PVA @System;Generic PA @System;Generic PA-CF @System"
}
diff --git a/resources/profiles/Custom/machine/MyMarlin.json b/resources/profiles/Custom/machine/MyMarlin.json
index 78f5f2c125..afd744e9a2 100644
--- a/resources/profiles/Custom/machine/MyMarlin.json
+++ b/resources/profiles/Custom/machine/MyMarlin.json
@@ -8,5 +8,5 @@
"bed_model": "",
"bed_texture": "orcaslicer_bed_texture.svg",
"hotend_model": "",
- "default_materials": "My Generic ABS;My Generic PLA;My Generic PLA-CF;My Generic PETG;My Generic TPU;My Generic ASA;My Generic PC;My Generic PVA;My Generic PA;My Generic PA-CF"
+ "default_materials": "Generic ABS @System;Generic PLA @System;Generic PLA-CF @System;Generic PETG @System;Generic TPU @System;Generic ASA @System;Generic PC @System;Generic PVA @System;Generic PA @System;Generic PA-CF @System"
}
diff --git a/resources/profiles/Custom/machine/MyRRF.json b/resources/profiles/Custom/machine/MyRRF.json
index f03683d61f..c830e20956 100644
--- a/resources/profiles/Custom/machine/MyRRF.json
+++ b/resources/profiles/Custom/machine/MyRRF.json
@@ -8,5 +8,5 @@
"bed_model": "",
"bed_texture": "orcaslicer_bed_texture.svg",
"hotend_model": "",
- "default_materials": "My Generic ABS;My Generic PLA;My Generic PLA-CF;My Generic PETG;My Generic TPU;My Generic ASA;My Generic PC;My Generic PVA;My Generic PA;My Generic PA-CF"
-}
+ "default_materials": "Generic ABS @System;Generic PLA @System;Generic PLA-CF @System;Generic PETG @System;Generic TPU @System;Generic ASA @System;Generic PC @System;Generic PVA @System;Generic PA @System;Generic PA-CF @System"
+}
\ No newline at end of file
diff --git a/resources/profiles/Custom/machine/MyToolChanger.json b/resources/profiles/Custom/machine/MyToolChanger.json
index 9c927e4be2..97b29c97e7 100644
--- a/resources/profiles/Custom/machine/MyToolChanger.json
+++ b/resources/profiles/Custom/machine/MyToolChanger.json
@@ -8,5 +8,5 @@
"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"
+ "default_materials": "Generic PLA @MyToolChanger;Generic ABS @MyToolChanger;Generic PLA-CF @MyToolChanger;Generic PETG @MyToolChanger;Generic TPU @MyToolChanger;Generic ASA @MyToolChanger;Generic PC @MyToolChanger;Generic PVA @MyToolChanger;Generic PA @MyToolChanger;Generic PA-CF @MyToolChanger"
}
diff --git a/resources/profiles/DeltaMaker.json b/resources/profiles/DeltaMaker.json
new file mode 100755
index 0000000000..4314c00860
--- /dev/null
+++ b/resources/profiles/DeltaMaker.json
@@ -0,0 +1,91 @@
+{
+ "name": "DeltaMaker",
+ "url": "",
+ "version": "02.02.00.04",
+ "force_update": "0",
+ "description": "DeltaMaker configurations",
+ "machine_model_list": [
+ {
+ "name": "DeltaMaker 2",
+ "sub_path": "machine/DeltaMaker 2.json"
+ },
+ {
+ "name": "DeltaMaker 2T",
+ "sub_path": "machine/DeltaMaker 2T.json"
+ },
+ {
+ "name": "DeltaMaker 2XT",
+ "sub_path": "machine/DeltaMaker 2XT.json"
+ }
+ ],
+ "process_list": [
+ {
+ "name": "fdm_process_common",
+ "sub_path": "process/fdm_process_common.json"
+ },
+ {
+ "name": "0.12mm Fine @DeltaMaker",
+ "sub_path": "process/0.12mm Fine @DeltaMaker.json"
+ },
+ {
+ "name": "0.18mm Standard @DeltaMaker",
+ "sub_path": "process/0.18mm Standard @DeltaMaker.json"
+ },
+ {
+ "name": "0.25mm Draft @DeltaMaker",
+ "sub_path": "process/0.25mm Draft @DeltaMaker.json"
+ }
+ ],
+ "filament_list": [
+ {
+ "name": "fdm_filament_common",
+ "sub_path": "filament/fdm_filament_common.json"
+ },
+ {
+ "name": "fdm_filament_pet",
+ "sub_path": "filament/fdm_filament_pet.json"
+ },
+ {
+ "name": "fdm_filament_pla",
+ "sub_path": "filament/fdm_filament_pla.json"
+ },
+ {
+ "name": "fdm_filament_tpu",
+ "sub_path": "filament/fdm_filament_tpu.json"
+ },
+ {
+ "name": "DeltaMaker Brand PLA",
+ "sub_path": "filament/DeltaMaker Brand PLA.json"
+ },
+ {
+ "name": "DeltaMaker Generic PLA",
+ "sub_path": "filament/DeltaMaker Generic PLA.json"
+ },
+ {
+ "name": "DeltaMaker Generic PETG",
+ "sub_path": "filament/DeltaMaker Generic PETG.json"
+ },
+ {
+ "name": "DeltaMaker Generic TPU",
+ "sub_path": "filament/DeltaMaker Generic TPU.json"
+ }
+ ],
+ "machine_list": [
+ {
+ "name": "fdm_machine_common",
+ "sub_path": "machine/fdm_machine_common.json"
+ },
+ {
+ "name": "DeltaMaker 2 0.35 nozzle",
+ "sub_path": "machine/DeltaMaker 2 0.35 nozzle.json"
+ },
+ {
+ "name": "DeltaMaker 2T 0.5 nozzle",
+ "sub_path": "machine/DeltaMaker 2T 0.5 nozzle.json"
+ },
+ {
+ "name": "DeltaMaker 2XT 0.5 nozzle",
+ "sub_path": "machine/DeltaMaker 2XT 0.5 nozzle.json"
+ }
+ ]
+}
diff --git a/resources/profiles/DeltaMaker/DeltaMaker 2T_cover.png b/resources/profiles/DeltaMaker/DeltaMaker 2T_cover.png
new file mode 100755
index 0000000000..ff5fcd04cc
Binary files /dev/null and b/resources/profiles/DeltaMaker/DeltaMaker 2T_cover.png differ
diff --git a/resources/profiles/DeltaMaker/DeltaMaker 2XT_cover.png b/resources/profiles/DeltaMaker/DeltaMaker 2XT_cover.png
new file mode 100755
index 0000000000..81beb8c63e
Binary files /dev/null and b/resources/profiles/DeltaMaker/DeltaMaker 2XT_cover.png differ
diff --git a/resources/profiles/DeltaMaker/DeltaMaker 2_cover.png b/resources/profiles/DeltaMaker/DeltaMaker 2_cover.png
new file mode 100755
index 0000000000..24ad52bd70
Binary files /dev/null and b/resources/profiles/DeltaMaker/DeltaMaker 2_cover.png differ
diff --git a/resources/profiles/DeltaMaker/deltamaker_2_buildplate_model.stl b/resources/profiles/DeltaMaker/deltamaker_2_buildplate_model.stl
new file mode 100755
index 0000000000..8d67fdb68f
Binary files /dev/null and b/resources/profiles/DeltaMaker/deltamaker_2_buildplate_model.stl differ
diff --git a/resources/profiles/DeltaMaker/deltamaker_2_buildplate_texture.png b/resources/profiles/DeltaMaker/deltamaker_2_buildplate_texture.png
new file mode 100755
index 0000000000..153ad3b4ff
Binary files /dev/null and b/resources/profiles/DeltaMaker/deltamaker_2_buildplate_texture.png differ
diff --git a/resources/profiles/DeltaMaker/deltamaker_2_buildplate_texture.svg b/resources/profiles/DeltaMaker/deltamaker_2_buildplate_texture.svg
new file mode 100755
index 0000000000..c27a94302d
--- /dev/null
+++ b/resources/profiles/DeltaMaker/deltamaker_2_buildplate_texture.svg
@@ -0,0 +1,99 @@
+
diff --git a/resources/profiles/DeltaMaker/filament/DeltaMaker Brand PLA.json b/resources/profiles/DeltaMaker/filament/DeltaMaker Brand PLA.json
new file mode 100755
index 0000000000..b368ac417c
--- /dev/null
+++ b/resources/profiles/DeltaMaker/filament/DeltaMaker Brand PLA.json
@@ -0,0 +1,22 @@
+{
+ "type": "filament",
+ "filament_id": "GFL99",
+ "setting_id": "GFSL99",
+ "name": "DeltaMaker Brand PLA",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_filament_pla",
+ "filament_flow_ratio": ["0.987"],
+ "filament_max_volumetric_speed": ["12"],
+ "slow_down_layer_time": ["8"],
+ "filament_vendor": ["DeltaMaker"],
+ "nozzle_temperature_range_low": ["210"],
+ "nozzle_temperature_range_high": ["235"],
+ "nozzle_temperature": ["230"],
+ "nozzle_temperature_initial_layer": ["235"],
+ "compatible_printers": [
+ "DeltaMaker 2 0.35 nozzle",
+ "DeltaMaker 2T 0.5 nozzle",
+ "DeltaMaker 2XT 0.5 nozzle"
+ ]
+}
diff --git a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PETG.json b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PETG.json
new file mode 100755
index 0000000000..5064d61bca
--- /dev/null
+++ b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PETG.json
@@ -0,0 +1,23 @@
+{
+ "type": "filament",
+ "filament_id": "GFG99",
+ "setting_id": "GFSG99",
+ "name": "DeltaMaker 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"],
+ "fan_max_speed": ["40"],
+ "fan_min_speed": ["20"],
+ "slow_down_min_speed": ["10"],
+ "slow_down_layer_time": ["8"],
+ "filament_flow_ratio": ["0.95"],
+ "filament_max_volumetric_speed": ["2"],
+ "filament_start_gcode": ["; filament start gcode\n"],
+ "compatible_printers": [
+ "DeltaMaker Pro 0.5 nozzle"
+ ]
+}
diff --git a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PLA.json b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PLA.json
new file mode 100755
index 0000000000..14797b6984
--- /dev/null
+++ b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PLA.json
@@ -0,0 +1,17 @@
+{
+ "type": "filament",
+ "filament_id": "GFL99",
+ "setting_id": "GFSA04",
+ "name": "DeltaMaker Generic PLA",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_filament_pla",
+ "filament_flow_ratio": ["0.987"],
+ "filament_max_volumetric_speed": ["10"],
+ "slow_down_layer_time": ["8"],
+ "compatible_printers": [
+ "DeltaMaker 2 0.35 nozzle",
+ "DeltaMaker 2T 0.5 nozzle",
+ "DeltaMaker 2XT 0.5 nozzle"
+ ]
+}
diff --git a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic TPU.json b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic TPU.json
new file mode 100755
index 0000000000..78bdc3273a
--- /dev/null
+++ b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic TPU.json
@@ -0,0 +1,14 @@
+{
+ "type": "filament",
+ "filament_id": "GFB99",
+ "setting_id": "GFSA04",
+ "name": "DeltaMaker Generic TPU",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_filament_tpu",
+ "filament_flow_ratio": ["0.94"],
+ "filament_max_volumetric_speed": ["4.5"],
+ "compatible_printers": [
+ "DeltaMaker Pro 0.5 nozzle"
+ ]
+}
diff --git a/resources/profiles/DeltaMaker/filament/fdm_filament_common.json b/resources/profiles/DeltaMaker/filament/fdm_filament_common.json
new file mode 100755
index 0000000000..d2ba9bc380
--- /dev/null
+++ b/resources/profiles/DeltaMaker/filament/fdm_filament_common.json
@@ -0,0 +1,50 @@
+{
+ "type": "filament",
+ "name": "fdm_filament_common",
+ "from": "system",
+ "instantiation": "false",
+ "cool_plate_temp" : ["0"],
+ "eng_plate_temp" : ["0"],
+ "hot_plate_temp" : ["0"],
+ "textured_plate_temp" : ["0"],
+ "cool_plate_temp_initial_layer" : ["0"],
+ "eng_plate_temp_initial_layer" : ["0"],
+ "hot_plate_temp_initial_layer" : ["0"],
+ "textured_plate_temp_initial_layer" : ["0"],
+ "overhang_fan_threshold": ["50%"],
+ "overhang_fan_speed": ["100"],
+ "slow_down_for_layer_cooling": ["1"],
+ "close_fan_the_first_x_layers": ["1"],
+ "filament_end_gcode": ["; filament end gcode \n"],
+ "filament_flow_ratio": ["1.0"],
+ "reduce_fan_stop_start_freq": ["1"],
+ "fan_cooling_layer_time": ["100"],
+ "filament_cost": ["38"],
+ "filament_density": ["1.25"],
+ "filament_deretraction_speed": ["150"],
+ "filament_diameter": ["1.75"],
+ "filament_max_volumetric_speed": ["15"],
+ "filament_minimal_purge_on_wipe_tower": ["15"],
+ "filament_retraction_minimum_travel": ["3.0"],
+ "filament_retract_before_wipe": ["1"],
+ "filament_retract_when_changing_layer": ["0"],
+ "filament_retraction_length": ["8.0"],
+ "filament_z_hop": ["0.8"],
+ "filament_z_hop_types": ["nil"],
+ "filament_retract_restart_extra": ["0.0"],
+ "filament_retraction_speed": ["150"],
+ "filament_settings_id": [""],
+ "filament_soluble": ["0"],
+ "filament_type": ["PLA"],
+ "filament_vendor": ["Generic"],
+ "filament_wipe": ["1"],
+ "filament_wipe_distance": ["8.0"],
+ "bed_type": ["Cool Plate"],
+ "full_fan_speed_layer": ["0"],
+ "fan_max_speed": ["100"],
+ "fan_min_speed": ["100"],
+ "slow_down_min_speed": ["10"],
+ "slow_down_layer_time": ["8"],
+ "filament_start_gcode": ["; filament start gcode\n"],
+ "temperature_vitrification": ["60"]
+}
diff --git a/resources/profiles/DeltaMaker/filament/fdm_filament_pet.json b/resources/profiles/DeltaMaker/filament/fdm_filament_pet.json
new file mode 100755
index 0000000000..f71c7e00b4
--- /dev/null
+++ b/resources/profiles/DeltaMaker/filament/fdm_filament_pet.json
@@ -0,0 +1,24 @@
+{
+ "type": "filament",
+ "name": "fdm_filament_pet",
+ "from": "system",
+ "instantiation": "false",
+ "inherits": "fdm_filament_common",
+ "slow_down_for_layer_cooling": ["1"],
+ "close_fan_the_first_x_layers": ["3"],
+ "fan_cooling_layer_time": ["15"],
+ "filament_max_volumetric_speed": ["0"],
+ "filament_type": ["PETG"],
+ "filament_density": ["1.27"],
+ "filament_cost": ["30"],
+ "nozzle_temperature_initial_layer": ["240"],
+ "reduce_fan_stop_start_freq": ["1"],
+ "fan_max_speed": ["40"],
+ "fan_min_speed": ["20"],
+ "overhang_fan_speed": ["50"],
+ "nozzle_temperature": ["250"],
+ "temperature_vitrification": ["80"],
+ "nozzle_temperature_range_low": ["235"],
+ "nozzle_temperature_range_high": ["255"],
+ "filament_start_gcode": ["; filament start gcode\n"]
+}
diff --git a/resources/profiles/DeltaMaker/filament/fdm_filament_pla.json b/resources/profiles/DeltaMaker/filament/fdm_filament_pla.json
new file mode 100755
index 0000000000..20ab632a4c
--- /dev/null
+++ b/resources/profiles/DeltaMaker/filament/fdm_filament_pla.json
@@ -0,0 +1,27 @@
+{
+ "type": "filament",
+ "name": "fdm_filament_pla",
+ "from": "system",
+ "instantiation": "false",
+ "inherits": "fdm_filament_common",
+ "fan_cooling_layer_time": "100",
+ "filament_max_volumetric_speed": ["0"],
+ "filament_type": ["PLA"],
+ "filament_density": ["1.24"],
+ "filament_cost": ["29"],
+ "nozzle_temperature_initial_layer": ["205"],
+ "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": ["210"],
+ "temperature_vitrification": ["60"],
+ "nozzle_temperature_range_low": ["190"],
+ "nozzle_temperature_range_high": ["210"],
+ "slow_down_min_speed": ["10"],
+ "slow_down_layer_time": ["4"],
+ "filament_start_gcode": ["; filament start gcode\n"]
+}
diff --git a/resources/profiles/DeltaMaker/filament/fdm_filament_tpu.json b/resources/profiles/DeltaMaker/filament/fdm_filament_tpu.json
new file mode 100755
index 0000000000..92ed40afc9
--- /dev/null
+++ b/resources/profiles/DeltaMaker/filament/fdm_filament_tpu.json
@@ -0,0 +1,26 @@
+{
+ "type": "filament",
+ "name": "fdm_filament_tpu",
+ "from": "system",
+ "instantiation": "false",
+ "inherits": "fdm_filament_common",
+ "slow_down_for_layer_cooling": ["1"],
+ "close_fan_the_first_x_layers": ["3"],
+ "fan_cooling_layer_time": ["30"],
+ "filament_max_volumetric_speed": ["0"],
+ "filament_type": ["ABS"],
+ "filament_density": ["1.10"],
+ "filament_cost": ["20"],
+ "nozzle_temperature_initial_layer": ["240"],
+ "reduce_fan_stop_start_freq": ["1"],
+ "fan_max_speed": ["5"],
+ "fan_min_speed": ["5"],
+ "overhang_fan_threshold": ["25%"],
+ "overhang_fan_speed": ["80"],
+ "nozzle_temperature": ["235"],
+ "temperature_vitrification": ["110"],
+ "nozzle_temperature_range_low": ["235"],
+ "nozzle_temperature_range_high": ["240"],
+ "slow_down_min_speed": ["10"],
+ "slow_down_layer_time": ["15"]
+}
diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2 0.35 nozzle.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2 0.35 nozzle.json
new file mode 100755
index 0000000000..f14cb56feb
--- /dev/null
+++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2 0.35 nozzle.json
@@ -0,0 +1,25 @@
+{
+ "type": "machine",
+ "setting_id": "GM001",
+ "name": "DeltaMaker 2 0.35 nozzle",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_machine_common",
+ "printer_model": "DeltaMaker 2",
+ "default_print_profile": "0.18mm Standard @DeltaMaker",
+ "nozzle_diameter": ["0.35"],
+ "printer_variant": "0.35",
+ "printable_height": "260",
+ "printable_area": [
+ "-69x-120",
+ "-138x0",
+ "-69x120",
+ "69x120",
+ "138x0",
+ "69x-120"
+ ],
+ "default_filament_profile": [
+ "DeltaMaker Brand PLA",
+ "DeltaMaker Generic PLA"
+ ]
+}
diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2.json
new file mode 100755
index 0000000000..31349d707f
--- /dev/null
+++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2.json
@@ -0,0 +1,11 @@
+{
+ "type": "machine_model",
+ "name": "DeltaMaker 2",
+ "model_id": "deltamaker-2",
+ "nozzle_diameter": "0.35",
+ "machine_tech": "FFF",
+ "family": "DeltaMaker",
+ "bed_model": "deltamaker_2_buildplate_model.stl",
+ "bed_texture": "deltamaker_2_buildplate_texture.png",
+ "default_materials": "DeltaMaker Brand PLA;DeltaMaker Generic PLA"
+}
diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2T 0.5 nozzle.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2T 0.5 nozzle.json
new file mode 100755
index 0000000000..5d26bcc52d
--- /dev/null
+++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2T 0.5 nozzle.json
@@ -0,0 +1,25 @@
+{
+ "type": "machine",
+ "setting_id": "GM002",
+ "name": "DeltaMaker 2T 0.5 nozzle",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_machine_common",
+ "printer_model": "DeltaMaker 2T",
+ "default_print_profile": "0.18mm Standard @DeltaMaker",
+ "nozzle_diameter": ["0.5"],
+ "printer_variant": "0.5",
+ "printable_height": "460",
+ "printable_area": [
+ "-69x-120",
+ "-138x0",
+ "-69x120",
+ "69x120",
+ "138x0",
+ "69x-120"
+ ],
+ "default_filament_profile": [
+ "DeltaMaker Brand PLA",
+ "DeltaMaker Generic PLA"
+ ]
+}
diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2T.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2T.json
new file mode 100755
index 0000000000..f4909fd6a7
--- /dev/null
+++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2T.json
@@ -0,0 +1,11 @@
+{
+ "type": "machine_model",
+ "name": "DeltaMaker 2T",
+ "model_id": "deltamaker-2t",
+ "nozzle_diameter": "0.5",
+ "machine_tech": "FFF",
+ "family": "DeltaMaker",
+ "bed_model": "deltamaker_2_buildplate_model.stl",
+ "bed_texture": "deltamaker_2_buildplate_texture.png",
+ "default_materials": "DeltaMaker Brand PLA;DeltaMaker Generic PLA"
+}
diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT 0.5 nozzle.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT 0.5 nozzle.json
new file mode 100755
index 0000000000..a6f1ac18f4
--- /dev/null
+++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT 0.5 nozzle.json
@@ -0,0 +1,25 @@
+{
+ "type": "machine",
+ "setting_id": "GM003",
+ "name": "DeltaMaker 2XT 0.5 nozzle",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_machine_common",
+ "printer_model": "DeltaMaker 2XT",
+ "default_print_profile": "0.25mm Draft @DeltaMaker",
+ "nozzle_diameter": ["0.5"],
+ "printer_variant": "0.5",
+ "printable_height": "565",
+ "printable_area": [
+ "-69x-120",
+ "-138x0",
+ "-69x120",
+ "69x120",
+ "138x0",
+ "69x-120"
+ ],
+ "default_filament_profile": [
+ "DeltaMaker Brand PLA",
+ "DeltaMaker Generic PLA"
+ ]
+}
diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT.json
new file mode 100755
index 0000000000..8ea63e79ab
--- /dev/null
+++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT.json
@@ -0,0 +1,11 @@
+{
+ "type": "machine_model",
+ "name": "DeltaMaker 2XT",
+ "model_id": "deltamaker-2xt",
+ "nozzle_diameter": "0.5",
+ "machine_tech": "FFF",
+ "family": "DeltaMaker",
+ "bed_model": "deltamaker_2_buildplate_model.stl",
+ "bed_texture": "deltamaker_2_buildplate_texture.png",
+ "default_materials": "DeltaMaker Brand PLA;DeltaMaker Generic PLA"
+}
diff --git a/resources/profiles/DeltaMaker/machine/fdm_klipper_common.json b/resources/profiles/DeltaMaker/machine/fdm_klipper_common.json
new file mode 100755
index 0000000000..fcfe4d6f72
--- /dev/null
+++ b/resources/profiles/DeltaMaker/machine/fdm_klipper_common.json
@@ -0,0 +1,60 @@
+{
+ "type": "machine",
+ "name": "fdm_klipper_common",
+ "from": "system",
+ "instantiation": "false",
+ "inherits": "fdm_machine_common",
+ "gcode_flavor": "klipper",
+ "machine_max_acceleration_e": ["5000", "5000"],
+ "machine_max_acceleration_extruding": ["5000", "5000"],
+ "machine_max_acceleration_retracting": ["5000", "5000"],
+ "machine_max_acceleration_travel": ["5000", "5000"],
+ "machine_max_acceleration_x": ["5000", "5000"],
+ "machine_max_acceleration_y": ["5000", "5000"],
+ "machine_max_acceleration_z": ["1000", "1000"],
+ "machine_max_speed_e": ["25", "25"],
+ "machine_max_speed_x": ["500", "200"],
+ "machine_max_speed_y": ["500", "200"],
+ "machine_max_speed_z": ["120", "120"],
+ "machine_max_jerk_e": ["2.5", "2.5"],
+ "machine_max_jerk_x": ["9", "9"],
+ "machine_max_jerk_y": ["9", "9"],
+ "machine_max_jerk_z": ["2", "2"],
+ "machine_min_extruding_rate": ["0", "0"],
+ "machine_min_travel_rate": ["0", "0"],
+ "max_layer_height": ["0.32"],
+ "min_layer_height": ["0.08"],
+ "printable_height": "250",
+ "extruder_clearance_radius": "65",
+ "extruder_clearance_height_to_rod": "36",
+ "extruder_clearance_height_to_lid": "140",
+ "printer_settings_id": "",
+ "printer_technology": "FFF",
+ "printer_variant": "0.5",
+ "retraction_minimum_travel": ["1"],
+ "retract_before_wipe": ["70%"],
+ "retract_when_changing_layer": ["1"],
+ "retraction_length": ["8"],
+ "retract_length_toolchange": ["2"],
+ "z_hop": ["0.8"],
+ "retract_restart_extra": ["0"],
+ "retract_restart_extra_toolchange": ["0"],
+ "retraction_speed": ["60"],
+ "deretraction_speed": ["30"],
+ "z_hop_types": "Normal Lift",
+ "silent_mode": "1",
+ "single_extruder_multi_material": "1",
+ "change_filament_gcode": "",
+ "wipe": ["1"],
+ "default_filament_profile": ["DeltaMaker PLA"],
+ "default_print_profile": "0.20mm Standard @DeltaMaker 2 0.35 nozzle",
+ "bed_exclude_area": ["0x0"],
+ "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM109 S[nozzle_temperature_initial_layer]\nSTART_PRINT EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer_single]\n",
+ "machine_end_gcode": "END_PRINT",
+ "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]",
+ "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n",
+ "machine_pause_gcode": "PAUSE",
+ "scan_first_layer": "0",
+ "nozzle_type": "undefined",
+ "auxiliary_fan": "0"
+}
diff --git a/resources/profiles/DeltaMaker/machine/fdm_machine_common.json b/resources/profiles/DeltaMaker/machine/fdm_machine_common.json
new file mode 100755
index 0000000000..ae0fda9a5d
--- /dev/null
+++ b/resources/profiles/DeltaMaker/machine/fdm_machine_common.json
@@ -0,0 +1,54 @@
+{
+ "type": "machine",
+ "name": "fdm_machine_common",
+ "from": "system",
+ "instantiation": "false",
+ "printer_technology": "FFF",
+ "extruder_colour": ["#FCE94F"],
+ "extruder_offset": ["0x0"],
+ "gcode_flavor": "klipper",
+ "silent_mode": "1",
+ "machine_max_acceleration_e": ["5000"],
+ "machine_max_acceleration_extruding": ["5000"],
+ "machine_max_acceleration_retracting": ["5000"],
+ "machine_max_acceleration_x": ["3500"],
+ "machine_max_acceleration_y": ["3500"],
+ "machine_max_acceleration_z": ["500"],
+ "machine_max_speed_e": ["120"],
+ "machine_max_speed_x": ["500"],
+ "machine_max_speed_y": ["500"],
+ "machine_max_speed_z": ["150"],
+ "machine_max_jerk_e": ["2.5"],
+ "machine_max_jerk_x": ["10"],
+ "machine_max_jerk_y": ["10"],
+ "machine_max_jerk_z": ["2"],
+ "machine_min_extruding_rate": ["0"],
+ "machine_min_travel_rate": ["0"],
+ "max_layer_height": ["0.3"],
+ "min_layer_height": ["0.1"],
+ "extruder_clearance_radius": "65",
+ "extruder_clearance_height_to_rod": "36",
+ "extruder_clearance_height_to_lid": "140",
+ "printer_settings_id": "",
+ "retraction_minimum_travel": ["2"],
+ "retract_before_wipe": ["0%"],
+ "retract_when_changing_layer": ["1"],
+ "retraction_length": ["7"],
+ "retract_length_toolchange": ["2"],
+ "z_hop": ["0.8"],
+ "retract_restart_extra": ["0"],
+ "retract_restart_extra_toolchange": ["0"],
+ "retraction_speed": ["80"],
+ "deretraction_speed": ["40"],
+ "single_extruder_multi_material": "0",
+ "change_filament_gcode": "",
+ "z_lift_type": "NormalLift",
+ "default_print_profile": "",
+ "nozzle_type": "undefine",
+ "auxiliary_fan": "0",
+ "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": "",
+ "machine_start_gcode": "M104 S[nozzle_temperature_initial_layer] ; set temp\nG28\nM109 S[nozzle_temperature_initial_layer] ; wait for temp\nG28\nG91 ; relative positioning\nG1 Z-40 F4000\nG90 ; absolute positioning\n",
+ "machine_end_gcode": "G28\nM104 S0\nM84 ; disable motors"
+}
diff --git a/resources/profiles/DeltaMaker/process/0.12mm Fine @DeltaMaker.json b/resources/profiles/DeltaMaker/process/0.12mm Fine @DeltaMaker.json
new file mode 100755
index 0000000000..0c2f9c0d22
--- /dev/null
+++ b/resources/profiles/DeltaMaker/process/0.12mm Fine @DeltaMaker.json
@@ -0,0 +1,20 @@
+{
+ "type": "process",
+ "setting_id": "GP004",
+ "name": "0.12mm Fine @DeltaMaker",
+ "from": "system",
+ "inherits": "fdm_process_common",
+ "instantiation": "true",
+ "layer_height": "0.12",
+ "bottom_shell_layers": "6",
+ "sparse_infill_density": "15%",
+ "infill_wall_overlap": "35%",
+ "ironing_flow": "15%",
+ "ironing_spacing": "0.1",
+ "skirt_distance": "3",
+ "skirt_height": "1",
+ "tree_support_branch_angle": "40",
+ "detect_thin_wall": "1",
+ "top_shell_layers": "8",
+ "travel_speed": "150"
+}
diff --git a/resources/profiles/DeltaMaker/process/0.18mm Standard @DeltaMaker.json b/resources/profiles/DeltaMaker/process/0.18mm Standard @DeltaMaker.json
new file mode 100755
index 0000000000..97e2e11d25
--- /dev/null
+++ b/resources/profiles/DeltaMaker/process/0.18mm Standard @DeltaMaker.json
@@ -0,0 +1,25 @@
+{
+ "type": "process",
+ "setting_id": "GP004",
+ "name": "0.18mm Standard @DeltaMaker",
+ "from": "system",
+ "inherits": "fdm_process_common",
+ "instantiation": "true",
+ "layer_height": "0.18",
+ "sparse_infill_density": "15%",
+ "initial_layer_print_height": "0.25",
+ "infill_wall_overlap": "35%",
+ "ironing_flow": "15%",
+ "ironing_spacing": "0.1",
+ "ironing_speed": "15",
+ "overhang_2_4_speed": "20",
+ "overhang_3_4_speed": "15",
+ "wall_loops": "3",
+ "skirt_distance": "3",
+ "skirt_height": "1",
+ "skirt_loops": "2",
+ "detect_thin_wall": "1",
+ "inner_wall_speed": "40",
+ "top_surface_speed": "15",
+ "sparse_infill_speed": "40"
+}
diff --git a/resources/profiles/DeltaMaker/process/0.25mm Draft @DeltaMaker.json b/resources/profiles/DeltaMaker/process/0.25mm Draft @DeltaMaker.json
new file mode 100755
index 0000000000..89d4261bfd
--- /dev/null
+++ b/resources/profiles/DeltaMaker/process/0.25mm Draft @DeltaMaker.json
@@ -0,0 +1,24 @@
+{
+ "type": "process",
+ "setting_id": "GP004",
+ "name": "0.25mm Draft @DeltaMaker",
+ "from": "system",
+ "inherits": "fdm_process_common",
+ "instantiation": "true",
+ "adaptive_layer_height": "1",
+ "layer_height": "0.25",
+ "bottom_shell_layers": "3",
+ "bridge_speed": "60",
+ "wall_infill_order": "inner wall/outer wall/infill",
+ "sparse_infill_density": "15%",
+ "sparse_infill_line_width": "0.40",
+ "infill_wall_overlap": "35%",
+ "ironing_flow": "15%",
+ "overhang_2_4_speed": "20",
+ "overhang_3_4_speed": "15",
+ "wall_loops": "2",
+ "print_settings_id": "",
+ "standby_temperature_delta": "-5",
+ "detect_thin_wall": "1",
+ "top_shell_layers": "4"
+}
diff --git a/resources/profiles/DeltaMaker/process/fdm_process_common.json b/resources/profiles/DeltaMaker/process/fdm_process_common.json
new file mode 100755
index 0000000000..2253394cc7
--- /dev/null
+++ b/resources/profiles/DeltaMaker/process/fdm_process_common.json
@@ -0,0 +1,114 @@
+{
+ "type": "process",
+ "name": "fdm_process_common",
+ "from": "system",
+ "instantiation": "false",
+ "adaptive_layer_height": "0",
+ "reduce_crossing_wall": "0",
+ "max_travel_detour_distance": "20.0",
+ "bottom_surface_pattern": "monotonic",
+ "bottom_shell_thickness": "0.8",
+ "bridge_speed": "100",
+ "brim_type": "no_brim",
+ "brim_width": "4",
+ "brim_object_gap": "0.1",
+ "print_sequence": "by layer",
+ "default_acceleration": "1000",
+ "initial_layer_acceleration": "500",
+ "top_surface_acceleration": "1000",
+ "travel_acceleration": "1000",
+ "inner_wall_acceleration": "1000",
+ "outer_wall_acceleration": "700",
+ "bridge_no_support": "0",
+ "draft_shield": "disabled",
+ "elefant_foot_compensation": "0",
+ "enable_arc_fitting": "0",
+ "wall_infill_order": "inner wall/outer wall/infill",
+ "infill_direction": "45",
+ "sparse_infill_density": "50%",
+ "sparse_infill_pattern": "gyroid",
+ "initial_layer_print_height": "0.25",
+ "infill_combination": "0",
+ "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}_{layer_height}mm_{filament_type[initial_tool]}_{print_time}.gcode",
+ "detect_overhang_wall": "1",
+ "slowdown_for_curled_perimeters": "1",
+ "overhang_1_4_speed": "0",
+ "overhang_2_4_speed": "50",
+ "overhang_3_4_speed": "30",
+ "overhang_4_4_speed": "10",
+ "line_width": "120%",
+ "inner_wall_line_width": "110%",
+ "outer_wall_line_width": "100%",
+ "top_surface_line_width": "100%",
+ "sparse_infill_line_width": "100%",
+ "initial_layer_line_width": "120%",
+ "internal_solid_infill_line_width": "120%",
+ "support_line_width": "110%",
+ "wall_loops": "2",
+ "print_settings_id": "",
+ "raft_layers": "0",
+ "seam_position": "aligned",
+ "skirt_distance": "3.0",
+ "skirt_height": "2",
+ "min_skirt_length": "4",
+ "skirt_loops": "3",
+ "minimum_sparse_infill_area": "15",
+ "spiral_mode": "0",
+ "standby_temperature_delta": "-5",
+ "enable_support": "0",
+ "resolution": "0.012",
+ "support_type": "tree(auto)",
+ "support_on_build_plate_only": "0",
+ "support_top_z_distance": "0.25",
+ "support_bottom_z_distance": "0.25",
+ "support_filament": "0",
+ "support_interface_loop_pattern": "0",
+ "support_interface_filament": "0",
+ "support_interface_top_layers": "1",
+ "support_interface_bottom_layers": "0",
+ "support_interface_spacing": "0.25",
+ "support_interface_speed": "80",
+ "support_base_pattern": "default",
+ "support_base_pattern_spacing": "2.5",
+ "support_speed": "75",
+ "support_threshold_angle": "25",
+ "support_object_xy_distance": "0.8",
+ "tree_support_branch_angle": "45",
+ "tree_support_wall_count": "0",
+ "tree_support_with_infill": "0",
+ "detect_thin_wall": "0",
+ "top_surface_pattern": "monotonicline",
+ "top_shell_thickness": "0.8",
+ "enable_prime_tower": "0",
+ "wipe_tower_no_sparse_layers": "0",
+ "prime_tower_width": "12.0",
+ "xy_hole_compensation": "0",
+ "xy_contour_compensation": "0",
+ "layer_height": "0.2",
+ "bottom_shell_layers": "4",
+ "top_shell_layers": "4",
+ "bridge_flow": "0.98",
+ "initial_layer_speed": "20",
+ "initial_layer_infill_speed": "20",
+ "initial_layer_travel_speed": "50%",
+ "slow_down_layers": "2",
+ "outer_wall_speed": "50",
+ "inner_wall_speed": "80",
+ "sparse_infill_speed": "80",
+ "internal_solid_infill_speed": "75",
+ "top_surface_speed": "50",
+ "gap_infill_speed": "30",
+ "travel_speed": "150",
+ "compatible_printers": [
+ "DeltaMaker 2 0.35 nozzle",
+ "DeltaMaker 2T 0.5 nozzle",
+ "DeltaMaker 2XT 0.5 nozzle"
+ ]
+}
diff --git a/resources/profiles/DeltaMaker/process/fdm_process_klipper_common.json b/resources/profiles/DeltaMaker/process/fdm_process_klipper_common.json
new file mode 100755
index 0000000000..1fe8e43149
--- /dev/null
+++ b/resources/profiles/DeltaMaker/process/fdm_process_klipper_common.json
@@ -0,0 +1,23 @@
+{
+ "type": "process",
+ "name": "fdm_process_klipper_common",
+ "from": "system",
+ "instantiation": "false",
+ "inherits": "fdm_process_common",
+ "default_acceleration": "5000",
+ "top_surface_acceleration": "3000",
+ "travel_acceleration": "6000",
+ "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": "120",
+ "internal_solid_infill_speed": "120",
+ "top_surface_speed": "100",
+ "gap_infill_speed": "100",
+ "sparse_infill_speed": "120",
+ "travel_speed": "250",
+ "exclude_object": "1"
+}
diff --git a/resources/profiles/OrcaFilamentLibrary.json b/resources/profiles/OrcaFilamentLibrary.json
new file mode 100644
index 0000000000..6ade81d8dc
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary.json
@@ -0,0 +1,84 @@
+{
+ "name": "OrcaFilamentLibrary",
+ "version": "02.02.00.04",
+ "force_update": "0",
+ "description": "Orca Filament Library",
+ "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": "Generic PLA @System",
+ "sub_path": "filament/Generic PLA @System.json"
+ },
+ {
+ "name": "Generic PLA-CF @System",
+ "sub_path": "filament/Generic PLA-CF @System.json"
+ },
+ {
+ "name": "Generic PETG @System",
+ "sub_path": "filament/Generic PETG @System.json"
+ },
+ {
+ "name": "Generic ABS @System",
+ "sub_path": "filament/Generic ABS @System.json"
+ },
+ {
+ "name": "Generic TPU @System",
+ "sub_path": "filament/Generic TPU @System.json"
+ },
+ {
+ "name": "Generic ASA @System",
+ "sub_path": "filament/Generic ASA @System.json"
+ },
+ {
+ "name": "Generic PC @System",
+ "sub_path": "filament/Generic PC @System.json"
+ },
+ {
+ "name": "Generic PVA @System",
+ "sub_path": "filament/Generic PVA @System.json"
+ },
+ {
+ "name": "Generic PA @System",
+ "sub_path": "filament/Generic PA @System.json"
+ },
+ {
+ "name": "Generic PA-CF @System",
+ "sub_path": "filament/Generic PA-CF @System.json"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic ABS @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic ABS @System.json
new file mode 100644
index 0000000000..ea71bb0be1
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic ABS @System.json
@@ -0,0 +1,11 @@
+{
+ "type": "filament",
+ "filament_id": "GFB99",
+ "setting_id": "GFSA04",
+ "name": "Generic ABS @System",
+ "from": "system",
+ "instantiation": "true",
+ "renamed_from": "My Generic ABS",
+ "inherits": "fdm_filament_abs",
+ "compatible_printers": []
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic ASA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic ASA @System.json
new file mode 100644
index 0000000000..a271c38eb0
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic ASA @System.json
@@ -0,0 +1,11 @@
+{
+ "type": "filament",
+ "filament_id": "GFB98",
+ "setting_id": "GFSA04",
+ "name": "Generic ASA @System",
+ "from": "system",
+ "instantiation": "true",
+ "renamed_from": "My Generic ASA",
+ "inherits": "fdm_filament_asa",
+ "compatible_printers": []
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PA @System.json
new file mode 100644
index 0000000000..4ea536ff67
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PA @System.json
@@ -0,0 +1,11 @@
+{
+ "type": "filament",
+ "filament_id": "GFN99",
+ "setting_id": "GFSA04",
+ "name": "Generic PA @System",
+ "from": "system",
+ "instantiation": "true",
+ "renamed_from": "My Generic PA",
+ "inherits": "fdm_filament_pa",
+ "compatible_printers": []
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PA-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PA-CF @System.json
new file mode 100644
index 0000000000..db9bda2b68
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PA-CF @System.json
@@ -0,0 +1,14 @@
+{
+ "type": "filament",
+ "filament_id": "GFN98",
+ "setting_id": "GFSA04",
+ "name": "Generic PA-CF @System",
+ "from": "system",
+ "instantiation": "true",
+ "renamed_from": "My Generic PA-CF",
+ "inherits": "fdm_filament_pa",
+ "filament_type": [
+ "PA-CF"
+ ],
+ "compatible_printers": []
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PC @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PC @System.json
new file mode 100644
index 0000000000..a675580352
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PC @System.json
@@ -0,0 +1,11 @@
+{
+ "type": "filament",
+ "filament_id": "GFC99",
+ "setting_id": "GFSA04",
+ "name": "Generic PC @System",
+ "from": "system",
+ "instantiation": "true",
+ "renamed_from": "My Generic PC",
+ "inherits": "fdm_filament_pc",
+ "compatible_printers": []
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG @System.json
new file mode 100644
index 0000000000..b8894b5689
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG @System.json
@@ -0,0 +1,11 @@
+{
+ "type": "filament",
+ "filament_id": "GFG99",
+ "setting_id": "GFSA04",
+ "name": "Generic PETG @System",
+ "from": "system",
+ "instantiation": "true",
+ "renamed_from": "My Generic PETG",
+ "inherits": "fdm_filament_pet",
+ "compatible_printers": []
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA @System.json
new file mode 100644
index 0000000000..bd6664bcc1
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA @System.json
@@ -0,0 +1,11 @@
+{
+ "type": "filament",
+ "filament_id": "GFL99",
+ "setting_id": "GFSA04",
+ "name": "Generic PLA @System",
+ "from": "system",
+ "instantiation": "true",
+ "renamed_from": "My Generic PLA",
+ "inherits": "fdm_filament_pla",
+ "compatible_printers": []
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA-CF @System.json
new file mode 100644
index 0000000000..b3230a54c3
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA-CF @System.json
@@ -0,0 +1,17 @@
+{
+ "type": "filament",
+ "filament_id": "GFL98",
+ "setting_id": "GFSA04",
+ "name": "Generic PLA-CF @System",
+ "from": "system",
+ "instantiation": "true",
+ "renamed_from": "My Generic PLA-CF",
+ "inherits": "fdm_filament_pla",
+ "filament_flow_ratio": [
+ "0.95"
+ ],
+ "filament_type": [
+ "PLA-CF"
+ ],
+ "compatible_printers": []
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PVA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PVA @System.json
new file mode 100644
index 0000000000..9cd38a379c
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PVA @System.json
@@ -0,0 +1,11 @@
+{
+ "type": "filament",
+ "filament_id": "GFS99",
+ "setting_id": "GFSA04",
+ "name": "Generic PVA @System",
+ "from": "system",
+ "instantiation": "true",
+ "renamed_from": "My Generic PVA",
+ "inherits": "fdm_filament_pva",
+ "compatible_printers": []
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic TPU @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic TPU @System.json
new file mode 100644
index 0000000000..2d579a4a09
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic TPU @System.json
@@ -0,0 +1,11 @@
+{
+ "type": "filament",
+ "filament_id": "GFU99",
+ "setting_id": "GFSA04",
+ "name": "Generic TPU @System",
+ "from": "system",
+ "instantiation": "true",
+ "renamed_from": "My Generic TPU",
+ "inherits": "fdm_filament_tpu",
+ "compatible_printers": []
+}
\ No newline at end of file
diff --git a/resources/profiles/Custom/filament/fdm_filament_abs.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_abs.json
similarity index 79%
rename from resources/profiles/Custom/filament/fdm_filament_abs.json
rename to resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_abs.json
index b9d4eeda31..f571c47f6f 100644
--- a/resources/profiles/Custom/filament/fdm_filament_abs.json
+++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_abs.json
@@ -4,28 +4,28 @@
"from": "system",
"instantiation": "false",
"inherits": "fdm_filament_common",
- "cool_plate_temp" : [
+ "cool_plate_temp": [
"105"
],
- "eng_plate_temp" : [
+ "eng_plate_temp": [
"105"
],
- "hot_plate_temp" : [
+ "hot_plate_temp": [
"105"
],
- "textured_plate_temp" : [
+ "textured_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"
],
- "textured_plate_temp_initial_layer" : [
+ "textured_plate_temp_initial_layer": [
"105"
],
"slow_down_for_layer_cooling": [
@@ -37,9 +37,6 @@
"fan_cooling_layer_time": [
"30"
],
- "filament_max_volumetric_speed": [
- "28.6"
- ],
"filament_type": [
"ABS"
],
@@ -84,5 +81,11 @@
],
"slow_down_layer_time": [
"3"
+ ],
+ "filament_flow_ratio": [
+ "0.926"
+ ],
+ "filament_max_volumetric_speed": [
+ "12"
]
-}
+}
\ No newline at end of file
diff --git a/resources/profiles/Custom/filament/fdm_filament_asa.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_asa.json
similarity index 96%
rename from resources/profiles/Custom/filament/fdm_filament_asa.json
rename to resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_asa.json
index 262c561bda..8baa401de1 100644
--- a/resources/profiles/Custom/filament/fdm_filament_asa.json
+++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_asa.json
@@ -37,9 +37,6 @@
"fan_cooling_layer_time": [
"35"
],
- "filament_max_volumetric_speed": [
- "28.6"
- ],
"filament_type": [
"ASA"
],
@@ -84,5 +81,11 @@
],
"slow_down_layer_time": [
"3"
+ ],
+ "filament_flow_ratio": [
+ "0.93"
+ ],
+ "filament_max_volumetric_speed": [
+ "12"
]
}
diff --git a/resources/profiles/Custom/filament/fdm_filament_common.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_common.json
similarity index 100%
rename from resources/profiles/Custom/filament/fdm_filament_common.json
rename to resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_common.json
diff --git a/resources/profiles/Custom/filament/fdm_filament_pa.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pa.json
similarity index 99%
rename from resources/profiles/Custom/filament/fdm_filament_pa.json
rename to resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pa.json
index 58f53cd451..8528ef7543 100644
--- a/resources/profiles/Custom/filament/fdm_filament_pa.json
+++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pa.json
@@ -37,9 +37,6 @@
"fan_cooling_layer_time": [
"4"
],
- "filament_max_volumetric_speed": [
- "8"
- ],
"filament_type": [
"PA"
],
@@ -49,9 +46,6 @@
"filament_cost": [
"20"
],
- "nozzle_temperature_initial_layer": [
- "290"
- ],
"reduce_fan_stop_start_freq": [
"0"
],
@@ -64,9 +58,6 @@
"overhang_fan_speed": [
"30"
],
- "nozzle_temperature": [
- "290"
- ],
"temperature_vitrification": [
"108"
],
@@ -81,5 +72,14 @@
],
"slow_down_layer_time": [
"2"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "290"
+ ],
+ "nozzle_temperature": [
+ "290"
+ ],
+ "filament_max_volumetric_speed": [
+ "10"
]
}
diff --git a/resources/profiles/Custom/filament/fdm_filament_pc.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pc.json
similarity index 96%
rename from resources/profiles/Custom/filament/fdm_filament_pc.json
rename to resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pc.json
index cec8b89a38..fd855bd484 100644
--- a/resources/profiles/Custom/filament/fdm_filament_pc.json
+++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pc.json
@@ -37,9 +37,6 @@
"fan_cooling_layer_time": [
"30"
],
- "filament_max_volumetric_speed": [
- "23.2"
- ],
"filament_type": [
"PC"
],
@@ -84,5 +81,11 @@
],
"slow_down_layer_time": [
"2"
+ ],
+ "filament_max_volumetric_speed": [
+ "12"
+ ],
+ "filament_flow_ratio": [
+ "0.94"
]
}
diff --git a/resources/profiles/Custom/filament/fdm_filament_pet.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pet.json
similarity index 84%
rename from resources/profiles/Custom/filament/fdm_filament_pet.json
rename to resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pet.json
index bb2323e9c1..212edcc5bf 100644
--- a/resources/profiles/Custom/filament/fdm_filament_pet.json
+++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pet.json
@@ -28,18 +28,9 @@
"textured_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"
],
@@ -52,18 +43,6 @@
"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"
],
@@ -78,5 +57,38 @@
],
"filament_start_gcode": [
"; filament start gcode\n"
+ ],
+ "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"
]
}
diff --git a/resources/profiles/Custom/filament/fdm_filament_pla.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pla.json
similarity index 81%
rename from resources/profiles/Custom/filament/fdm_filament_pla.json
rename to resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pla.json
index 82c6772f35..1c8ee472a9 100644
--- a/resources/profiles/Custom/filament/fdm_filament_pla.json
+++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pla.json
@@ -7,9 +7,6 @@
"fan_cooling_layer_time": [
"100"
],
- "filament_max_volumetric_speed": [
- "12"
- ],
"filament_type": [
"PLA"
],
@@ -19,28 +16,28 @@
"filament_cost": [
"20"
],
- "cool_plate_temp" : [
+ "cool_plate_temp": [
"60"
],
- "eng_plate_temp" : [
+ "eng_plate_temp": [
"60"
],
- "hot_plate_temp" : [
+ "hot_plate_temp": [
"60"
],
- "textured_plate_temp" : [
+ "textured_plate_temp": [
"60"
],
- "cool_plate_temp_initial_layer" : [
+ "cool_plate_temp_initial_layer": [
"60"
],
- "eng_plate_temp_initial_layer" : [
+ "eng_plate_temp_initial_layer": [
"60"
],
- "hot_plate_temp_initial_layer" : [
+ "hot_plate_temp_initial_layer": [
"60"
],
- "textured_plate_temp_initial_layer" : [
+ "textured_plate_temp_initial_layer": [
"60"
],
"nozzle_temperature_initial_layer": [
@@ -82,13 +79,19 @@
"slow_down_min_speed": [
"10"
],
- "slow_down_layer_time": [
- "4"
- ],
"additional_cooling_fan_speed": [
"70"
],
"filament_start_gcode": [
"; filament start gcode\n"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "12"
+ ],
+ "slow_down_layer_time": [
+ "6"
]
-}
+}
\ No newline at end of file
diff --git a/resources/profiles/Custom/filament/fdm_filament_pva.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pva.json
similarity index 81%
rename from resources/profiles/Custom/filament/fdm_filament_pva.json
rename to resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pva.json
index ebf25aa3ae..f7a5a010fa 100644
--- a/resources/profiles/Custom/filament/fdm_filament_pva.json
+++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pva.json
@@ -4,36 +4,33 @@
"from": "system",
"instantiation": "false",
"inherits": "fdm_filament_common",
- "cool_plate_temp" : [
+ "cool_plate_temp": [
"35"
],
- "eng_plate_temp" : [
+ "eng_plate_temp": [
"0"
],
- "hot_plate_temp" : [
+ "hot_plate_temp": [
"45"
],
- "textured_plate_temp" : [
+ "textured_plate_temp": [
"45"
],
- "cool_plate_temp_initial_layer" : [
+ "cool_plate_temp_initial_layer": [
"35"
],
- "eng_plate_temp_initial_layer" : [
+ "eng_plate_temp_initial_layer": [
"0"
],
- "hot_plate_temp_initial_layer" : [
+ "hot_plate_temp_initial_layer": [
"45"
],
- "textured_plate_temp_initial_layer" : [
+ "textured_plate_temp_initial_layer": [
"45"
],
"fan_cooling_layer_time": [
"100"
],
- "filament_max_volumetric_speed": [
- "15"
- ],
"filament_soluble": [
"1"
],
@@ -85,16 +82,22 @@
"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"
+ ],
+ "filament_flow_ratio": [
+ "0.95"
+ ],
+ "filament_max_volumetric_speed": [
+ "12"
+ ],
+ "slow_down_layer_time": [
+ "7"
+ ],
+ "slow_down_min_speed": [
+ "10"
]
-}
+}
\ No newline at end of file
diff --git a/resources/profiles/Custom/filament/fdm_filament_tpu.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_tpu.json
similarity index 82%
rename from resources/profiles/Custom/filament/fdm_filament_tpu.json
rename to resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_tpu.json
index d00b7dbcab..46726ab5e5 100644
--- a/resources/profiles/Custom/filament/fdm_filament_tpu.json
+++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_tpu.json
@@ -4,36 +4,33 @@
"from": "system",
"instantiation": "false",
"inherits": "fdm_filament_common",
- "cool_plate_temp" : [
+ "cool_plate_temp": [
"30"
],
- "eng_plate_temp" : [
+ "eng_plate_temp": [
"30"
],
- "hot_plate_temp" : [
+ "hot_plate_temp": [
"35"
],
- "textured_plate_temp" : [
+ "textured_plate_temp": [
"35"
],
- "cool_plate_temp_initial_layer" : [
+ "cool_plate_temp_initial_layer": [
"30"
],
- "eng_plate_temp_initial_layer" : [
+ "eng_plate_temp_initial_layer": [
"30"
],
- "hot_plate_temp_initial_layer" : [
+ "hot_plate_temp_initial_layer": [
"35"
],
- "textured_plate_temp_initial_layer" : [
+ "textured_plate_temp_initial_layer": [
"35"
],
"fan_cooling_layer_time": [
"100"
],
- "filament_max_volumetric_speed": [
- "15"
- ],
"filament_type": [
"TPU"
],
@@ -84,5 +81,8 @@
],
"filament_start_gcode": [
"; filament start gcode\n"
+ ],
+ "filament_max_volumetric_speed": [
+ "3.2"
]
-}
+}
\ No newline at end of file
diff --git a/resources/profiles/Ratrig/ratrig-vminion-bed.stl b/resources/profiles/Ratrig/ratrig-vminion-bed.stl
index 1bfbd6a41c..83f5e82931 100644
Binary files a/resources/profiles/Ratrig/ratrig-vminion-bed.stl and b/resources/profiles/Ratrig/ratrig-vminion-bed.stl differ
diff --git a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.2 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.2 nozzle.json
index 51f2fe45b3..27a7e04f7a 100644
--- a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.2 nozzle.json
+++ b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.2 nozzle.json
@@ -29,6 +29,7 @@
"retraction_minimum_travel": [
"0.5"
],
+ "support_multi_bed_types": "1",
"machine_max_acceleration_e": [
"5000",
"5000"
diff --git a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.4 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.4 nozzle.json
index eef703056e..377a8a4f95 100644
--- a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.4 nozzle.json
+++ b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.4 nozzle.json
@@ -29,6 +29,7 @@
"retraction_minimum_travel": [
"1"
],
+ "support_multi_bed_types": "1",
"machine_max_acceleration_e": [
"5000",
"5000"
diff --git a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.6 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.6 nozzle.json
index 015f9871e6..def97c08c2 100644
--- a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.6 nozzle.json
+++ b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.6 nozzle.json
@@ -29,6 +29,7 @@
"retraction_minimum_travel": [
"1.5"
],
+ "support_multi_bed_types": "1",
"machine_max_acceleration_e": [
"5000",
"5000"
diff --git a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.8 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.8 nozzle.json
index ddfc77be1c..bb2075a477 100644
--- a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.8 nozzle.json
+++ b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.8 nozzle.json
@@ -29,6 +29,7 @@
"retraction_minimum_travel": [
"2"
],
+ "support_multi_bed_types": "1",
"machine_max_acceleration_e": [
"5000",
"5000"
diff --git a/resources/profiles/Sovol/process/0.08mm High Quality @Sovol SV06 ACE 0.4 nozzle.json b/resources/profiles/Sovol/process/0.08mm High Quality @Sovol SV06 ACE 0.4 nozzle.json
index ceccf574ed..d3afff8cf3 100644
--- a/resources/profiles/Sovol/process/0.08mm High Quality @Sovol SV06 ACE 0.4 nozzle.json
+++ b/resources/profiles/Sovol/process/0.08mm High Quality @Sovol SV06 ACE 0.4 nozzle.json
@@ -30,7 +30,7 @@
"precise_outer_wall": "1",
"outer_wall_line_width": "0.4",
"wall_infill_order": "inner wall/outer wall/infill",
- "wall_sequence": "inner-outer-inner wall",
+ "wall_sequence": "inner wall/outer wall",
"line_width": "0.4",
"infill_direction": "45",
"sparse_infill_density": "10%",
diff --git a/resources/profiles/Sovol/process/0.12mm Quality @Sovol SV06 ACE 0.4 nozzle.json b/resources/profiles/Sovol/process/0.12mm Quality @Sovol SV06 ACE 0.4 nozzle.json
index f67d1d699c..dcfff90f5b 100644
--- a/resources/profiles/Sovol/process/0.12mm Quality @Sovol SV06 ACE 0.4 nozzle.json
+++ b/resources/profiles/Sovol/process/0.12mm Quality @Sovol SV06 ACE 0.4 nozzle.json
@@ -30,7 +30,7 @@
"precise_outer_wall": "1",
"outer_wall_line_width": "0.4",
"wall_infill_order": "inner wall/outer wall/infill",
- "wall_sequence": "inner-outer-inner wall",
+ "wall_sequence": "inner wall/outer wall",
"line_width": "0.4",
"infill_direction": "45",
"sparse_infill_density": "10%",
diff --git a/resources/profiles/Sovol/process/0.12mm Standard @Sovol SV06 ACE 0.2 nozzle.json b/resources/profiles/Sovol/process/0.12mm Standard @Sovol SV06 ACE 0.2 nozzle.json
index 5a69751f77..999e183e97 100644
--- a/resources/profiles/Sovol/process/0.12mm Standard @Sovol SV06 ACE 0.2 nozzle.json
+++ b/resources/profiles/Sovol/process/0.12mm Standard @Sovol SV06 ACE 0.2 nozzle.json
@@ -30,7 +30,7 @@
"precise_outer_wall": "1",
"outer_wall_line_width": "0.2",
"wall_infill_order": "inner wall/outer wall/infill",
- "wall_sequence": "inner-outer-inner wall",
+ "wall_sequence": "inner wall/outer wall",
"line_width": "0.2",
"infill_direction": "45",
"sparse_infill_density": "10%",
diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 ACE.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 ACE.json
index 22dccda48e..bcf4911d39 100644
--- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 ACE.json
+++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 ACE.json
@@ -30,7 +30,7 @@
"precise_outer_wall": "1",
"outer_wall_line_width": "0.4",
"wall_infill_order": "inner wall/outer wall/infill",
- "wall_sequence": "inner-outer-inner wall",
+ "wall_sequence": "inner wall/outer wall",
"line_width": "0.4",
"infill_direction": "45",
"sparse_infill_density": "10%",
diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 Plus ACE.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 Plus ACE.json
index 30a5e8cc66..98f8337726 100644
--- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 Plus ACE.json
+++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 Plus ACE.json
@@ -30,7 +30,7 @@
"precise_outer_wall": "1",
"outer_wall_line_width": "0.4",
"wall_infill_order": "inner wall/outer wall/infill",
- "wall_sequence": "inner-outer-inner wall",
+ "wall_sequence": "inner wall/outer wall",
"line_width": "0.4",
"infill_direction": "45",
"sparse_infill_density": "10%",
diff --git a/resources/profiles/Sovol/process/0.28mm Fast @Sovol SV06 ACE 0.4 nozzle.json b/resources/profiles/Sovol/process/0.28mm Fast @Sovol SV06 ACE 0.4 nozzle.json
index 8880df809a..93d3f5810b 100644
--- a/resources/profiles/Sovol/process/0.28mm Fast @Sovol SV06 ACE 0.4 nozzle.json
+++ b/resources/profiles/Sovol/process/0.28mm Fast @Sovol SV06 ACE 0.4 nozzle.json
@@ -30,7 +30,7 @@
"precise_outer_wall": "1",
"outer_wall_line_width": "0.4",
"wall_infill_order": "inner wall/outer wall/infill",
- "wall_sequence": "inner-outer-inner wall",
+ "wall_sequence": "inner wall/outer wall",
"line_width": "0.4",
"infill_direction": "45",
"sparse_infill_density": "10%",
diff --git a/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV06 ACE 0.6 nozzle.json b/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV06 ACE 0.6 nozzle.json
index 4cf3aae54b..6ee3bf467d 100644
--- a/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV06 ACE 0.6 nozzle.json
+++ b/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV06 ACE 0.6 nozzle.json
@@ -30,7 +30,7 @@
"precise_outer_wall": "1",
"outer_wall_line_width": "0.6",
"wall_infill_order": "inner wall/outer wall/infill",
- "wall_sequence": "inner-outer-inner wall",
+ "wall_sequence": "inner wall/outer wall",
"line_width": "0.6",
"infill_direction": "45",
"sparse_infill_density": "10%",
diff --git a/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV06 ACE 0.8 nozzle.json b/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV06 ACE 0.8 nozzle.json
index 4893698c15..9703776c7f 100644
--- a/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV06 ACE 0.8 nozzle.json
+++ b/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV06 ACE 0.8 nozzle.json
@@ -30,7 +30,7 @@
"precise_outer_wall": "1",
"outer_wall_line_width": "0.8",
"wall_infill_order": "inner wall/outer wall/infill",
- "wall_sequence": "inner-outer-inner wall",
+ "wall_sequence": "inner wall/outer wall",
"line_width": "0.8",
"infill_direction": "45",
"sparse_infill_density": "10%",
diff --git a/resources/web/guide/22/22.js b/resources/web/guide/22/22.js
index cdb00f26c8..ce75dd59eb 100644
--- a/resources/web/guide/22/22.js
+++ b/resources/web/guide/22/22.js
@@ -2,7 +2,7 @@
var m_ProfileItem;
var FilamentPriority=new Array( "pla","abs","pet","tpu","pc");
-var VendorPriority=new Array("bambu lab","bambulab","bbl","kexcelled","polymaker","esun","generic");
+var VendorPriority=new Array("Orca Built-in","bambu lab","bambulab","bbl","kexcelled","polymaker","esun","Generic");
function OnInit()
{
@@ -139,7 +139,7 @@ function SortUI()
if( fModel=='')
{
// Orca: hide
- bFind=false;
+ bFind=true;
}
else
{
@@ -199,7 +199,11 @@ function SortUI()
let strModel=pFila.attr("model");
let strFilalist=pFila.attr("filalist");
- pFila.attr("model", strModel+fModel);
+ if(strModel == '' || fModel == '')
+ pFila.attr("model", '');
+ else
+ pFila.attr("model", strModel+fModel);
+
pFila.attr("filalist", strFilalist+fWholeName+';');
}
diff --git a/resources/web/guide/23/23.js b/resources/web/guide/23/23.js
index ba92265a96..1b9ce0e562 100644
--- a/resources/web/guide/23/23.js
+++ b/resources/web/guide/23/23.js
@@ -71,30 +71,7 @@ function SortUI()
ModelList.push(OneMode);
}
- //machine
-// let HtmlMachine='';
-//
-// let nMachine=m_ProfileItem['machine'].length;
-// for(let n=0;n'+sName+'';
-// }
-// }
-//
-// $('#MachineList .CValues').append(HtmlMachine);
-// $('#MachineList .CValues input').prop("checked",true);
-// if(nMachine<=1)
-// {
-// $('#MachineList').hide();
-// }
-
+
//model
let HtmlMode='';
nMode=ModelList.length;
@@ -131,15 +108,6 @@ function SortUI()
let fSelect=OneFila['selected'];
let fModel=OneFila['models']
- //alert( fWholeName+' - '+fShortName+' - '+fVendor+' - '+fType+' - '+fSelect+' - '+fModel );
-
-// if(OneFila['name'].indexOf("Bambu PA-CF")>=0)
-// {
-// alert( fShortName+' - '+fVendor+' - '+fType+' - '+fSelect+' - '+fModel )
-//
-// let b=1+2;
-// }
-
let bFind=false;
//let bCheck=$("#MachineList input:first").prop("checked");
if( fModel=='')
@@ -204,7 +172,10 @@ function SortUI()
let strModel=pFila.attr("model");
let strFilalist=pFila.attr("filalist");
- pFila.attr("model", strModel+fModel);
+ if(strModel == '' || fModel == '')
+ pFila.attr("model", '');
+ else
+ pFila.attr("model", strModel+fModel);
pFila.attr("filalist", strFilalist+fWholeName+';');
}
diff --git a/src/OrcaSlicer_profile_validator.cpp b/src/OrcaSlicer_profile_validator.cpp
index ba4e7ce687..84fe4c2037 100644
--- a/src/OrcaSlicer_profile_validator.cpp
+++ b/src/OrcaSlicer_profile_validator.cpp
@@ -147,6 +147,8 @@ int main(int argc, char* argv[])
std::cout << "Validation failed" << std::endl;
return 1;
}
+ // Report loaded presets
+ std::cout << "Total loaded vendors: " << preset_bundle->vendors.size() << std::endl;
if (generate_user_preset) {
generate_custom_presets(preset_bundle, app_config);
diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt
index ea08f39cfb..7c673231e0 100644
--- a/src/libslic3r/CMakeLists.txt
+++ b/src/libslic3r/CMakeLists.txt
@@ -550,7 +550,7 @@ set(OCCT_LIBS
TKernel
)
-
+find_package(libnoise REQUIRED)
target_link_libraries(libslic3r
libnest2d
admesh
@@ -576,6 +576,7 @@ target_link_libraries(libslic3r
JPEG::JPEG
qoi
opencv_world
+ noise::noise
)
if(NOT WIN32)
diff --git a/src/libslic3r/Config.cpp b/src/libslic3r/Config.cpp
index e826bb4c5b..57f51f0b23 100644
--- a/src/libslic3r/Config.cpp
+++ b/src/libslic3r/Config.cpp
@@ -839,8 +839,9 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex
}
else if (!load_inherits_to_config && boost::iequals(it.key(), BBL_JSON_KEY_INHERITS)) {
key_values.emplace(BBL_JSON_KEY_INHERITS, it.value());
- }
- else {
+ } else if (boost::iequals(it.key(), ORCA_JSON_KEY_RENAMED_FROM)) {
+ key_values.emplace(ORCA_JSON_KEY_RENAMED_FROM, it.value());
+ } else {
t_config_option_key opt_key = it.key();
std::string value_str;
diff --git a/src/libslic3r/LayerRegion.cpp b/src/libslic3r/LayerRegion.cpp
index ef5d325f56..60ba2721e3 100644
--- a/src/libslic3r/LayerRegion.cpp
+++ b/src/libslic3r/LayerRegion.cpp
@@ -87,6 +87,7 @@ void LayerRegion::make_perimeters(const SurfaceCollection &slices, const LayerRe
&slices,
&compatible_regions,
this->layer()->height,
+ this->layer()->slice_z,
this->flow(frPerimeter),
®ion_config,
&this->layer()->object()->config(),
diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp
index 624a710902..99ab5a6e0a 100644
--- a/src/libslic3r/PerimeterGenerator.cpp
+++ b/src/libslic3r/PerimeterGenerator.cpp
@@ -22,6 +22,7 @@
#include "libslic3r/AABBTreeLines.hpp"
#include "Print.hpp"
#include "Algorithm/LineSplit.hpp"
+#include "libnoise/noise.h"
static const int overhang_sampling_number = 6;
static const double narrow_loop_length_threshold = 10;
static const double min_degree_gap = 0.1;
@@ -44,6 +45,14 @@ static double random_value() {
return dist(gen);
}
+class UniformNoise: public noise::module::Module {
+ public:
+ UniformNoise(): Module (GetSourceModuleCount ()) {};
+
+ virtual int GetSourceModuleCount() const { return 0; }
+ virtual double GetValue(double x, double y, double z) const { return random_value() * 2 - 1; }
+};
+
// Hierarchy of perimeters.
class PerimeterGeneratorLoop {
public:
@@ -66,9 +75,39 @@ public:
bool is_internal_contour() const;
};
+static std::unique_ptr get_noise_module(const FuzzySkinConfig& cfg) {
+ if (cfg.noise_type == NoiseType::Perlin) {
+ auto perlin_noise = noise::module::Perlin();
+ perlin_noise.SetFrequency(1 / cfg.noise_scale);
+ perlin_noise.SetOctaveCount(cfg.noise_octaves);
+ perlin_noise.SetPersistence(cfg.noise_persistence);
+ return std::make_unique(perlin_noise);
+ } else if (cfg.noise_type == NoiseType::Billow) {
+ auto billow_noise = noise::module::Billow();
+ billow_noise.SetFrequency(1 / cfg.noise_scale);
+ billow_noise.SetOctaveCount(cfg.noise_octaves);
+ billow_noise.SetPersistence(cfg.noise_persistence);
+ return std::make_unique(billow_noise);
+ } else if (cfg.noise_type == NoiseType::RidgedMulti) {
+ auto ridged_multi_noise = noise::module::RidgedMulti();
+ ridged_multi_noise.SetFrequency(1 / cfg.noise_scale);
+ ridged_multi_noise.SetOctaveCount(cfg.noise_octaves);
+ return std::make_unique(ridged_multi_noise);
+ } else if (cfg.noise_type == NoiseType::Voronoi) {
+ auto voronoi_noise = noise::module::Voronoi();
+ voronoi_noise.SetFrequency(1 / cfg.noise_scale);
+ voronoi_noise.SetDisplacement(1.0);
+ return std::make_unique(voronoi_noise);
+ } else {
+ return std::make_unique();
+ }
+}
+
// Thanks Cura developers for this function.
-static void fuzzy_polyline(Points& poly, bool closed, const FuzzySkinConfig& cfg)
+static void fuzzy_polyline(Points& poly, bool closed, coordf_t slice_z, const FuzzySkinConfig& cfg)
{
+ std::unique_ptr noise = get_noise_module(cfg);
+
const double min_dist_between_points = cfg.point_distance * 3. / 4.; // hardcoded: the point distance may vary between 3/4 and 5/4 the supplied value
const double range_random_point_dist = cfg.point_distance / 2.;
double dist_left_over = random_value() * (min_dist_between_points / 2.); // the distance to be traversed on the line before making the first new point
@@ -90,8 +129,9 @@ static void fuzzy_polyline(Points& poly, bool closed, const FuzzySkinConfig& cfg
for (; p0pa_dist < p0p1_size;
p0pa_dist += min_dist_between_points + random_value() * range_random_point_dist)
{
- double r = random_value() * (cfg.thickness * 2.) - cfg.thickness;
- out.emplace_back(*p0 + (p0p1 * (p0pa_dist / p0p1_size) + perp(p0p1).cast().normalized() * r).cast());
+ Point pa = *p0 + (p0p1 * (p0pa_dist / p0p1_size)).cast();
+ double r = noise->GetValue(unscale_(pa.x()), unscale_(pa.y()), slice_z) * cfg.thickness;
+ out.emplace_back(pa + (perp(p0p1).cast().normalized() * r).cast());
}
dist_left_over = p0pa_dist - p0p1_size;
p0 = &p1;
@@ -108,8 +148,10 @@ static void fuzzy_polyline(Points& poly, bool closed, const FuzzySkinConfig& cfg
}
// Thanks Cura developers for this function.
-static void fuzzy_extrusion_line(std::vector& ext_lines, const FuzzySkinConfig& cfg)
+static void fuzzy_extrusion_line(std::vector& ext_lines, coordf_t slice_z, const FuzzySkinConfig& cfg)
{
+ std::unique_ptr noise = get_noise_module(cfg);
+
const double min_dist_between_points = cfg.point_distance * 3. / 4.; // hardcoded: the point distance may vary between 3/4 and 5/4 the supplied value
const double range_random_point_dist = cfg.point_distance / 2.;
double dist_left_over = random_value() * (min_dist_between_points / 2.); // the distance to be traversed on the line before making the first new point
@@ -128,8 +170,9 @@ static void fuzzy_extrusion_line(std::vector& ext_li
double p0p1_size = p0p1.norm();
double p0pa_dist = dist_left_over;
for (; p0pa_dist < p0p1_size; p0pa_dist += min_dist_between_points + random_value() * range_random_point_dist) {
- double r = random_value() * (cfg.thickness * 2.) - cfg.thickness;
- out.emplace_back(p0->p + (p0p1 * (p0pa_dist / p0p1_size) + perp(p0p1).cast().normalized() * r).cast(), p1.w, p1.perimeter_index);
+ Point pa = p0->p + (p0p1 * (p0pa_dist / p0p1_size)).cast();
+ double r = noise->GetValue(unscale_(pa.x()), unscale_(pa.y()), slice_z) * cfg.thickness;
+ out.emplace_back(pa + (perp(p0p1).cast().normalized() * r).cast(), p1.w, p1.perimeter_index);
}
dist_left_over = p0pa_dist - p0p1_size;
p0 = &p1;
@@ -544,7 +587,7 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime
}
fuzzified = loop.polygon;
- fuzzy_polyline(fuzzified.points, true, config);
+ fuzzy_polyline(fuzzified.points, true, perimeter_generator.slice_z, config);
return &fuzzified;
}
@@ -589,16 +632,17 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime
// Fuzzy splitted polygon
if (std::all_of(splitted.begin(), splitted.end(), [](const Algorithm::SplitLineJunction& j) { return j.clipped; })) {
// The entire polygon is fuzzified
- fuzzy_polyline(fuzzified.points, true, r.first);
+ fuzzy_polyline(fuzzified.points, true, perimeter_generator.slice_z, r.first);
} else {
Points segment;
segment.reserve(splitted.size());
fuzzified.points.clear();
- const auto fuzzy_current_segment = [&segment, &fuzzified, &r]() {
+ const auto slice_z = perimeter_generator.slice_z;
+ const auto fuzzy_current_segment = [&segment, &fuzzified, &r, slice_z]() {
fuzzified.points.push_back(segment.front());
const auto back = segment.back();
- fuzzy_polyline(segment, false, r.first);
+ fuzzy_polyline(segment, false, slice_z, r.first);
fuzzified.points.insert(fuzzified.points.end(), segment.begin(), segment.end());
fuzzified.points.push_back(back);
segment.clear();
@@ -970,6 +1014,8 @@ static void smooth_overhang_level(ExtrusionPaths &paths)
static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& perimeter_generator, std::vector& pg_extrusions,
bool &steep_overhang_contour, bool &steep_overhang_hole)
{
+ const auto slice_z = perimeter_generator.slice_z;
+
// Detect steep overhangs
bool overhangs_reverse = perimeter_generator.config->overhang_reverse &&
perimeter_generator.layer_id % 2 == 1; // Only calculate overhang degree on even (from GUI POV) layers
@@ -989,7 +1035,7 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p
const auto& config = regions.begin()->first;
const bool fuzzify = should_fuzzify(config, perimeter_generator.layer_id, extrusion->inset_idx, is_contour);
if (fuzzify)
- fuzzy_extrusion_line(extrusion->junctions, config);
+ fuzzy_extrusion_line(extrusion->junctions, slice_z, config);
} else {
// Find all affective regions
std::vector> fuzzified_regions;
@@ -1011,17 +1057,17 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p
// Fuzzy splitted extrusion
if (std::all_of(splitted.begin(), splitted.end(), [](const Algorithm::SplitLineJunction& j) { return j.clipped; })) {
// The entire polygon is fuzzified
- fuzzy_extrusion_line(extrusion->junctions, r.first);
+ fuzzy_extrusion_line(extrusion->junctions, slice_z, r.first);
} else {
const auto current_ext = extrusion->junctions;
std::vector segment;
segment.reserve(current_ext.size());
extrusion->junctions.clear();
- const auto fuzzy_current_segment = [&segment, extrusion, &r]() {
+ const auto fuzzy_current_segment = [&segment, &extrusion, &r, slice_z]() {
extrusion->junctions.push_back(segment.front());
const auto back = segment.back();
- fuzzy_extrusion_line(segment, r.first);
+ fuzzy_extrusion_line(segment, slice_z, r.first);
extrusion->junctions.insert(extrusion->junctions.end(), segment.begin(), segment.end());
extrusion->junctions.push_back(back);
segment.clear();
@@ -1858,7 +1904,11 @@ static void group_region_by_fuzzify(PerimeterGenerator& g)
region_config.fuzzy_skin,
scaled(region_config.fuzzy_skin_thickness.value),
scaled(region_config.fuzzy_skin_point_distance.value),
- region_config.fuzzy_skin_first_layer
+ region_config.fuzzy_skin_first_layer,
+ region_config.fuzzy_skin_noise_type,
+ region_config.fuzzy_skin_scale,
+ region_config.fuzzy_skin_octaves,
+ region_config.fuzzy_skin_persistence
};
auto& surfaces = regions[cfg];
for (const auto& surface : region->slices.surfaces) {
diff --git a/src/libslic3r/PerimeterGenerator.hpp b/src/libslic3r/PerimeterGenerator.hpp
index 733920e310..0b79cc40c2 100644
--- a/src/libslic3r/PerimeterGenerator.hpp
+++ b/src/libslic3r/PerimeterGenerator.hpp
@@ -16,10 +16,21 @@ struct FuzzySkinConfig
coord_t thickness;
coord_t point_distance;
bool fuzzy_first_layer;
+ NoiseType noise_type;
+ double noise_scale;
+ int noise_octaves;
+ double noise_persistence;
bool operator==(const FuzzySkinConfig& r) const
{
- return type == r.type && thickness == r.thickness && point_distance == r.point_distance && fuzzy_first_layer == r.fuzzy_first_layer;
+ return type == r.type
+ && thickness == r.thickness
+ && point_distance == r.point_distance
+ && fuzzy_first_layer == r.fuzzy_first_layer
+ && noise_type == r.noise_type
+ && noise_scale == r.noise_scale
+ && noise_octaves == r.noise_octaves
+ && noise_persistence == r.noise_persistence;
}
bool operator!=(const FuzzySkinConfig& r) const { return !(*this == r); }
@@ -35,6 +46,10 @@ template<> struct hash
boost::hash_combine(seed, std::hash{}(c.thickness));
boost::hash_combine(seed, std::hash{}(c.point_distance));
boost::hash_combine(seed, std::hash{}(c.fuzzy_first_layer));
+ boost::hash_combine(seed, std::hash{}(c.noise_type));
+ boost::hash_combine(seed, std::hash{}(c.noise_scale));
+ boost::hash_combine(seed, std::hash{}(c.noise_octaves));
+ boost::hash_combine(seed, std::hash{}(c.noise_persistence));
return seed;
}
};
@@ -51,6 +66,7 @@ public:
const ExPolygons *lower_slices;
double layer_height;
int layer_id;
+ coordf_t slice_z;
Flow perimeter_flow;
Flow ext_perimeter_flow;
Flow overhang_flow;
@@ -83,6 +99,7 @@ public:
const SurfaceCollection* slices,
const LayerRegionPtrs *compatible_regions,
double layer_height,
+ coordf_t slice_z,
Flow flow,
const PrintRegionConfig* config,
const PrintObjectConfig* object_config,
@@ -98,7 +115,7 @@ public:
//BBS
ExPolygons* fill_no_overlap)
: slices(slices), compatible_regions(compatible_regions), upper_slices(nullptr), lower_slices(nullptr), layer_height(layer_height),
- layer_id(-1), perimeter_flow(flow), ext_perimeter_flow(flow),
+ slice_z(slice_z), layer_id(-1), perimeter_flow(flow), ext_perimeter_flow(flow),
overhang_flow(flow), solid_infill_flow(flow),
config(config), object_config(object_config), print_config(print_config),
m_spiral_vase(spiral_mode),
diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp
index d4610cc961..7ddb0884ed 100644
--- a/src/libslic3r/Preset.cpp
+++ b/src/libslic3r/Preset.cpp
@@ -576,9 +576,10 @@ std::string Preset::label(bool no_alias) const
bool is_compatible_with_print(const PresetWithVendorProfile &preset, const PresetWithVendorProfile &active_print, const PresetWithVendorProfile &active_printer)
{
- if (preset.vendor != nullptr && preset.vendor != active_printer.vendor)
- // The current profile has a vendor assigned and it is different from the active print's vendor.
- return false;
+ // Orca: we allow cross vendor compatibility
+ // if (preset.vendor != nullptr && preset.vendor != active_printer.vendor)
+ // // The current profile has a vendor assigned and it is different from the active print's vendor.
+ // return false;
auto &condition = preset.preset.compatible_prints_condition();
auto *compatible_prints = dynamic_cast(preset.preset.config.option("compatible_prints"));
bool has_compatible_prints = compatible_prints != nullptr && ! compatible_prints->values.empty();
@@ -613,9 +614,19 @@ bool is_compatible_with_parent_printer(const PresetWithVendorProfile& preset, co
bool is_compatible_with_printer(const PresetWithVendorProfile &preset, const PresetWithVendorProfile &active_printer, const DynamicPrintConfig *extra_config)
{
- if (preset.vendor != nullptr && preset.vendor != active_printer.vendor)
- // The current profile has a vendor assigned and it is different from the active print's vendor.
- return false;
+ // Orca: we allow cross vendor compatibility
+ // if (preset.vendor != nullptr && preset.vendor != active_printer.vendor)
+ // // The current profile has a vendor assigned and it is different from the active print's vendor.
+ // return false;
+
+ // Orca: check excluded printers
+ if (preset.vendor != nullptr && preset.preset.type == Preset::TYPE_FILAMENT) {
+ const auto& excluded_printers = preset.preset.m_excluded_from;
+ const auto excluded = preset.vendor->name == PresetBundle::ORCA_FILAMENT_LIBRARY &&
+ excluded_printers.find(active_printer.preset.name) != excluded_printers.end();
+ if (excluded)
+ return false;
+ }
auto &condition = preset.preset.compatible_printers_condition();
auto *compatible_printers = dynamic_cast(preset.preset.config.option("compatible_printers"));
bool has_compatible_printers = compatible_printers != nullptr && ! compatible_printers->values.empty();
@@ -629,10 +640,9 @@ bool is_compatible_with_printer(const PresetWithVendorProfile &preset, const Pre
}
}
return preset.preset.is_default || active_printer.preset.name.empty() || !has_compatible_printers ||
- std::find(compatible_printers->values.begin(), compatible_printers->values.end(), active_printer.preset.name) !=
- compatible_printers->values.end()
- //BBS
- || (!active_printer.preset.is_system && is_compatible_with_parent_printer(preset, active_printer));
+ std::find(compatible_printers->values.begin(), compatible_printers->values.end(), active_printer.preset.name) !=
+ compatible_printers->values.end() ||
+ (!active_printer.preset.is_system && is_compatible_with_parent_printer(preset, active_printer));
}
bool is_compatible_with_printer(const PresetWithVendorProfile &preset, const PresetWithVendorProfile &active_printer)
@@ -779,7 +789,7 @@ static std::vector s_Preset_print_options {
"minimum_sparse_infill_area", "reduce_infill_retraction","internal_solid_infill_pattern","gap_fill_target",
"ironing_type", "ironing_pattern", "ironing_flow", "ironing_speed", "ironing_spacing", "ironing_angle", "ironing_inset",
"max_travel_detour_distance",
- "fuzzy_skin", "fuzzy_skin_thickness", "fuzzy_skin_point_distance", "fuzzy_skin_first_layer",
+ "fuzzy_skin", "fuzzy_skin_thickness", "fuzzy_skin_point_distance", "fuzzy_skin_first_layer", "fuzzy_skin_noise_type", "fuzzy_skin_scale", "fuzzy_skin_octaves", "fuzzy_skin_persistence",
"max_volumetric_extrusion_rate_slope", "max_volumetric_extrusion_rate_slope_segment_length","extrusion_rate_smoothing_external_perimeter_only",
"inner_wall_speed", "outer_wall_speed", "sparse_infill_speed", "internal_solid_infill_speed",
"top_surface_speed", "support_speed", "support_object_xy_distance", "support_interface_speed",
@@ -1145,7 +1155,7 @@ void PresetCollection::load_presets(
if (key_values.find("instantiation") != key_values.end())
preset.is_visible = key_values["instantiation"] != "false";
- //BBS: use inherit config as the base
+ //Orca: find and use the inherit config as the base
Preset* inherit_preset = nullptr;
ConfigOption* inherits_config = config.option(BBL_JSON_KEY_INHERITS);
@@ -1154,6 +1164,12 @@ void PresetCollection::load_presets(
ConfigOptionString * option_str = dynamic_cast (inherits_config);
std::string inherits_value = option_str->value;
inherit_preset = this->find_preset(inherits_value, false, true);
+ // Orca: try to find if the parent preset has been renamed
+ if (inherit_preset == nullptr) {
+ auto it = this->find_preset_renamed(inherits_value);
+ if (it != m_presets.end())
+ inherit_preset = &(*it);
+ }
} else {
;
}
@@ -2123,6 +2139,7 @@ bool PresetCollection::clone_presets(std::vector const &presets,
auto &preset = new_presets.back();
preset.vendor = nullptr;
preset.renamed_from.clear();
+ preset.m_excluded_from.clear();
preset.setting_id.clear();
preset.inherits().clear();
preset.is_default = false;
@@ -2251,6 +2268,7 @@ void PresetCollection::save_current_preset(const std::string &new_name, bool det
preset.inherits().clear();
preset.alias.clear();
preset.renamed_from.clear();
+ preset.m_excluded_from.clear();
BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": save preset %1% , with detach")%new_name;
}
//BBS: add lock logic for sync preset in background
@@ -2278,6 +2296,7 @@ void PresetCollection::save_current_preset(const std::string &new_name, bool det
preset.vendor = nullptr;
preset.alias.clear();
preset.renamed_from.clear();
+ preset.m_excluded_from.clear();
preset.setting_id.clear();
if (detach) {
// Clear the link to the parent profile.
@@ -2525,6 +2544,17 @@ Preset* PresetCollection::find_preset(const std::string &name, bool first_visibl
first_visible_if_not_found ? &this->first_visible() : nullptr;
}
+const Preset* PresetCollection::find_preset2(const std::string& name) const
+{
+ auto preset = const_cast(this)->find_preset(name, false, true);
+ if (preset == nullptr) {
+ auto _name = get_preset_name_renamed(name);
+ if(_name != nullptr)
+ preset = const_cast(this)->find_preset(*_name, false, true);
+ }
+ return preset;
+}
+
// Return index of the first visible preset. Certainly at least the '- default -' preset shall be visible.
size_t PresetCollection::first_visible_idx() const
{
@@ -2859,6 +2889,38 @@ void PresetCollection::update_map_alias_to_profile_name()
//std::sort(m_map_alias_to_profile_name.begin(), m_map_alias_to_profile_name.end(), [](auto &l, auto &r) { return l.first < r.first; });
}
+void PresetCollection::update_library_profile_excluded_from()
+{
+ // Orca: Collect all filament presets that has empty compatible_printers and belongs to the Orca Filament Library.
+ std::map*> excluded_froms;
+ for (Preset& preset : m_presets) {
+ if (preset.vendor != nullptr && preset.vendor->name == PresetBundle::ORCA_FILAMENT_LIBRARY) {
+ // check if the preset has empty compatible_printers
+ const auto* compatible_printers = dynamic_cast(preset.config.option("compatible_printers"));
+ if (compatible_printers == nullptr || compatible_printers->values.empty())
+ excluded_froms[preset.alias] = &preset.m_excluded_from;
+ }
+ }
+
+ // Check all presets that has the same alias as the filament presets with empty compatible_printers in Orca Filament Library.
+ for (const Preset& preset : m_presets) {
+ if (preset.vendor == nullptr || preset.vendor->name == PresetBundle::ORCA_FILAMENT_LIBRARY)
+ continue;
+
+ const auto* compatible_printers = dynamic_cast(preset.config.option("compatible_printers"));
+ // All profiles in concrete vendor profile shouldn't have empty compatible_printers, but here we check it for safety.
+ if (compatible_printers == nullptr || compatible_printers->values.empty())
+ continue;
+ auto itr = excluded_froms.find(preset.alias);
+ if (itr != excluded_froms.end()) {
+ // Add the printer models to the excluded_from list.
+ for (const std::string& printer_name : compatible_printers->values) {
+ itr->second->insert(printer_name);
+ }
+ }
+ }
+}
+
void PresetCollection::update_map_system_profile_renamed()
{
m_map_system_profile_renamed.clear();
diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp
index 145ae5b6f7..6eae6df160 100644
--- a/src/libslic3r/Preset.hpp
+++ b/src/libslic3r/Preset.hpp
@@ -3,6 +3,7 @@
#include
#include
+#include
#include
#include
#include
@@ -63,7 +64,8 @@
#define BBL_JSON_KEY_DEFAULT_MATERIALS "default_materials"
#define BBL_JSON_KEY_MODEL_ID "model_id"
-//BBL: json path
+// Orca extension
+#define ORCA_JSON_KEY_RENAMED_FROM "renamed_from"
namespace Slic3r {
@@ -232,6 +234,11 @@ public:
// and to match the "inherits" field of user profiles with updated system profiles.
std::vector renamed_from;
+ // Orca: maintain a list of printer models that are excluded from this preset, designed for filaments without compatible_printer defined
+ // (hence they are visible to all printer models by default) in Orca Filament Library. However, we might have speciliazed filament for
+ // certain printer models defined in the vendor profile as well, in this case we want to hide this generic preset for these printer models.
+ std::set m_excluded_from;
+
//BBS
Semver version; // version of preset
std::string ini_str; // ini string of preset
@@ -595,6 +602,8 @@ public:
Preset* find_preset(const std::string &name, bool first_visible_if_not_found = false, bool real = false);
const Preset* find_preset(const std::string &name, bool first_visible_if_not_found = false) const
{ return const_cast(this)->find_preset(name, first_visible_if_not_found); }
+ // Orca: find preset, if not found, keep searching in the renamed history
+ const Preset* find_preset2(const std::string &name) const;
size_t first_visible_idx() const;
// Return index of the first compatible preset. Certainly at least the '- default -' preset shall be compatible.
@@ -718,6 +727,10 @@ protected:
// Update m_map_system_profile_renamed from loaded system profiles.
void update_map_system_profile_renamed();
+ // Orca: update m_excluded_from loaded system profiles.
+ void update_library_profile_excluded_from();
+
+
void set_custom_preset_alias(Preset &preset);
private:
diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp
index 5facc8e50f..09ab659b4b 100644
--- a/src/libslic3r/PresetBundle.cpp
+++ b/src/libslic3r/PresetBundle.cpp
@@ -1,6 +1,7 @@
#include
#include "PresetBundle.hpp"
+#include "PrintConfig.hpp"
#include "libslic3r.h"
#include "Utils.hpp"
#include "Model.hpp"
@@ -43,11 +44,12 @@ static std::vector s_project_options {
"flush_multiplier",
};
-//BBS: add BBL as default
-const char *PresetBundle::BBL_BUNDLE = "Custom";
-const char *PresetBundle::BBL_DEFAULT_PRINTER_MODEL = "MyKlipper 0.4 nozzle";
-const char *PresetBundle::BBL_DEFAULT_PRINTER_VARIANT = "0.4";
-const char *PresetBundle::BBL_DEFAULT_FILAMENT = "My Generic PLA";
+//Orca: add custom as default
+const char *PresetBundle::ORCA_DEFAULT_BUNDLE = "Custom";
+const char *PresetBundle::ORCA_DEFAULT_PRINTER_MODEL = "MyKlipper 0.4 nozzle";
+const char *PresetBundle::ORCA_DEFAULT_PRINTER_VARIANT = "0.4";
+const char *PresetBundle::ORCA_DEFAULT_FILAMENT = "My Generic PLA";
+const char *PresetBundle::ORCA_FILAMENT_LIBRARY = "OrcaFilamentLibrary";
PresetBundle::PresetBundle()
: prints(Preset::TYPE_PRINT, Preset::print_options(), static_cast(FullPrintConfig::defaults()))
@@ -1094,7 +1096,7 @@ void PresetBundle::remove_users_preset(AppConfig &config, std::mapconfig.has("printer_model")) {
@@ -1162,66 +1164,6 @@ void PresetBundle::remove_users_preset(AppConfig &config, std::map PresetBundle::load_system_presets(ForwardCompatibilitySubstitutionRule compatibility_rule)
-{
- //BBS: add config related logs
- BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" enter, compatibility_rule %1%")%compatibility_rule;
- if (compatibility_rule == ForwardCompatibilitySubstitutionRule::EnableSystemSilent)
- // Loading system presets, don't log substitutions.
- compatibility_rule = ForwardCompatibilitySubstitutionRule::EnableSilent;
- else if (compatibility_rule == ForwardCompatibilitySubstitutionRule::EnableSilentDisableSystem)
- // Loading system presets, throw on unknown option value.
- compatibility_rule = ForwardCompatibilitySubstitutionRule::Disable;
-
- // Here the vendor specific read only Config Bundles are stored.
- //BBS: change directory by design
- boost::filesystem::path dir = (boost::filesystem::path(data_dir()) / PRESET_SYSTEM_DIR).make_preferred();
- PresetsConfigSubstitutions substitutions;
- std::string errors_cummulative;
- bool first = true;
- for (auto &dir_entry : boost::filesystem::directory_iterator(dir))
- if (Slic3r::is_ini_file(dir_entry)) {
- std::string name = dir_entry.path().filename().string();
- // Remove the .ini suffix.
- name.erase(name.size() - 4);
- try {
- // Load the config bundle, flatten it.
- if (first) {
- // Reset this PresetBundle and load the first vendor config.
- append(substitutions, this->load_configbundle(dir_entry.path().string(), PresetBundle::LoadSystem, compatibility_rule).first);
- first = false;
- } else {
- // Load the other vendor configs, merge them with this PresetBundle.
- // Report duplicate profiles.
- PresetBundle other;
- append(substitutions, other.load_configbundle(dir_entry.path().string(), PresetBundle::LoadSystem, compatibility_rule).first);
- std::vector duplicates = this->merge_presets(std::move(other));
- if (! duplicates.empty()) {
- errors_cummulative += "Vendor configuration file " + name + " contains the following presets with names used by other vendors: ";
- for (size_t i = 0; i < duplicates.size(); ++ i) {
- if (i > 0)
- errors_cummulative += ", ";
- errors_cummulative += duplicates[i];
- }
- }
- }
- } catch (const std::runtime_error &err) {
- errors_cummulative += err.what();
- errors_cummulative += "\n";
- }
- }
- if (first) {
- // No config bundle loaded, reset.
- this->reset(false);
- }
-
- this->update_system_maps();
- //BBS: add config related logs
- BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" finished, errors_cummulative %1%")%errors_cummulative;
- return std::make_pair(std::move(substitutions), errors_cummulative);
-}*/
//BBS: add json related logic, load system presets from json
std::pair PresetBundle::load_system_presets_from_json(ForwardCompatibilitySubstitutionRule compatibility_rule)
@@ -1244,45 +1186,61 @@ std::pair PresetBundle::load_system_pre
PresetsConfigSubstitutions substitutions;
std::string errors_cummulative;
bool first = true;
- for (auto &dir_entry : boost::filesystem::directory_iterator(dir))
- {
+ std::vector vendor_names;
+ // store all vendor names in vendor_names
+ for (auto& dir_entry : boost::filesystem::directory_iterator(dir)) {
std::string vendor_file = dir_entry.path().string();
- if (Slic3r::is_json_file(vendor_file)) {
- std::string vendor_name = dir_entry.path().filename().string();
- // Remove the .json suffix.
- vendor_name.erase(vendor_name.size() - 5);
+ if (!Slic3r::is_json_file(vendor_file))
+ continue;
- if (validation_mode && !vendor_to_validate.empty() && vendor_name != vendor_to_validate)
- continue;
+ std::string vendor_name = dir_entry.path().filename().string();
- try {
- // Load the config bundle, flatten it.
- if (first) {
- // Reset this PresetBundle and load the first vendor config.
- append(substitutions, this->load_vendor_configs_from_json(dir.string(), vendor_name, PresetBundle::LoadSystem, compatibility_rule).first);
- first = false;
- } else {
- // Load the other vendor configs, merge them with this PresetBundle.
- // Report duplicate profiles.
- PresetBundle other;
- append(substitutions, other.load_vendor_configs_from_json(dir.string(), vendor_name, PresetBundle::LoadSystem, compatibility_rule).first);
- std::vector duplicates = this->merge_presets(std::move(other));
- if (! duplicates.empty()) {
- errors_cummulative += "Found duplicated settings in vendor " + vendor_name + "'s json file lists: ";
- for (size_t i = 0; i < duplicates.size(); ++ i) {
- if (i > 0)
- errors_cummulative += ", ";
- errors_cummulative += duplicates[i];
- }
+ // Remove the .json suffix.
+ vendor_name.erase(vendor_name.size() - 5);
+ vendor_names.push_back(vendor_name);
+ }
+ // Move ORCA_FILAMENT_LIBRARY to the beginning of the list
+ for (size_t i = 0; i < vendor_names.size(); ++ i) {
+ if (vendor_names[i] == ORCA_FILAMENT_LIBRARY) {
+ std::swap(vendor_names[0], vendor_names[i]);
+ break;
+ }
+ }
+
+ for (auto &vendor_name : vendor_names)
+ {
+ if (validation_mode && !vendor_to_validate.empty() && vendor_name != vendor_to_validate)
+ continue;
+
+ try {
+ // Load the config bundle, flatten it.
+ if (first) {
+ // Reset this PresetBundle and load the first vendor config.
+ append(substitutions, this->load_vendor_configs_from_json(dir.string(), vendor_name, PresetBundle::LoadSystem, compatibility_rule).first);
+ first = false;
+ } else {
+ // Load the other vendor configs, merge them with this PresetBundle.
+ // Report duplicate profiles.
+ PresetBundle other;
+ append(substitutions, other.load_vendor_configs_from_json(dir.string(), vendor_name, PresetBundle::LoadSystem, compatibility_rule, this).first);
+ std::vector duplicates = this->merge_presets(std::move(other));
+ if (!duplicates.empty()) {
+ errors_cummulative += "Found duplicated settings in vendor " + vendor_name + "'s json file lists: ";
+ for (size_t i = 0; i < duplicates.size(); ++i) {
+ if (i > 0)
+ errors_cummulative += ", ";
+ errors_cummulative += duplicates[i];
+ ++m_errors;
+ BOOST_LOG_TRIVIAL(error) << "Found duplicated preset: " + duplicates[i] + " in vendor: " + vendor_name + ": ";
}
}
- } catch (const std::runtime_error &err) {
- if (validation_mode)
- throw err;
- else {
- errors_cummulative += err.what();
- errors_cummulative += "\n";
- }
+ }
+ } catch (const std::runtime_error &err) {
+ if (validation_mode)
+ throw err;
+ else {
+ errors_cummulative += err.what();
+ errors_cummulative += "\n";
}
}
}
@@ -1443,6 +1401,8 @@ void PresetBundle::update_system_maps()
this->sla_prints .update_map_alias_to_profile_name();
this->filaments .update_map_alias_to_profile_name();
this->sla_materials.update_map_alias_to_profile_name();
+
+ this->filaments.update_library_profile_excluded_from();
}
static inline std::string remove_ini_suffix(const std::string &name)
@@ -2411,54 +2371,7 @@ ConfigSubstitutions PresetBundle::load_config_file(const std::string &path, Forw
//BBS: add config related logs
BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" can not load config file %1% not from gcode")%path ;
throw Slic3r::RuntimeError(std::string("Unknown configuration file: ") + path);
- // 1) Try to load the config file into a boost property tree.
- /*boost::property_tree::ptree tree;
- try {
- boost::nowide::ifstream ifs(path);
- boost::property_tree::read_ini(ifs, tree);
- } catch (const std::ifstream::failure &err) {
- throw Slic3r::RuntimeError(std::string("The Config Bundle cannot be loaded: ") + path + "\n\tReason: " + err.what());
- } catch (const boost::property_tree::file_parser_error &err) {
- throw Slic3r::RuntimeError(format("Failed loading the Config Bundle \"%1%\": %2% at line %3%",
- err.filename(), err.message(), err.line()));
- } catch (const std::runtime_error &err) {
- throw Slic3r::RuntimeError(std::string("Failed loading the preset file: ") + path + "\n\tReason: " + err.what());
- }
-
- // 2) Continue based on the type of the configuration file.
- ConfigFileType config_file_type = guess_config_file_type(tree);
- ConfigSubstitutions config_substitutions;
- try {
- switch (config_file_type) {
- case CONFIG_FILE_TYPE_UNKNOWN:
- throw Slic3r::RuntimeError(std::string("Unknown configuration file type: ") + path);
- case CONFIG_FILE_TYPE_APP_CONFIG:
- throw Slic3r::RuntimeError(std::string("Invalid configuration file: ") + path + ". This is an application config file.");
- case CONFIG_FILE_TYPE_CONFIG:
- {
- // Initialize a config from full defaults.
- DynamicPrintConfig config;
- config.apply(FullPrintConfig::defaults());
- config_substitutions = config.load(tree, compatibility_rule);
- Preset::normalize(config);
- load_config_file_config(path, true, std::move(config));
- //BBS: add config related logs
- BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": normal config, finished, got %1% substitutions")%config_substitutions.size();
- return config_substitutions;
- }
- case CONFIG_FILE_TYPE_CONFIG_BUNDLE:
- //BBS: add config related logs
- BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": found config bundle");
- return load_config_file_config_bundle(path, tree, compatibility_rule);
- }
- } catch (const ConfigurationError &e) {
- throw Slic3r::RuntimeError(format("Invalid configuration file %1%: %2%", path, e.what()));
- }
-
- //BBS: add config related logs
- BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" finished, should not be here");
- // This shall never happen. Suppres compiler warnings.
- assert(false);*/
+
return ConfigSubstitutions{};
}
@@ -2720,572 +2633,9 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool
BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": finished");
}
-// Load the active configuration of a config bundle from a boost property_tree. This is a private method called from load_config_file.
-/*ConfigSubstitutions PresetBundle::load_config_file_config_bundle(
- const std::string &path, const boost::property_tree::ptree &tree, ForwardCompatibilitySubstitutionRule compatibility_rule)
-{
- // 1) Load the config bundle into a temp data.
- PresetBundle tmp_bundle;
- // Load the config bundle, but don't save the loaded presets to user profile directory, as only the presets marked as active in the loaded preset bundle
- // will be loaded into the master PresetBundle and activated.
- auto [presets_substitutions, presets_imported] = tmp_bundle.load_configbundle(path, {}, compatibility_rule);
- UNUSED(presets_imported);
-
- std::string bundle_name = std::string(" - ") + boost::filesystem::path(path).filename().string();
-
- //BBS: add config related logs
- BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": enter, bundle_name %1%")%bundle_name;
- // 2) Extract active configs from the config bundle, copy them and activate them in this bundle.
- ConfigSubstitutions config_substitutions;
- auto load_one = [&path, &bundle_name, &presets_substitutions = presets_substitutions, &config_substitutions](
- PresetCollection &collection_dst, PresetCollection &collection_src, const std::string &preset_name_src, bool activate) -> std::string {
- // If there are substitutions reported for this preset, move them to config_substitutions.
- if (auto it = std::find_if(presets_substitutions.begin(), presets_substitutions.end(), [&preset_name_src](const PresetConfigSubstitutions& subs){ return subs.preset_name == preset_name_src; });
- it != presets_substitutions.end() && ! it->substitutions.empty())
- append(config_substitutions, std::move(it->substitutions));
- Preset *preset_src = collection_src.find_preset(preset_name_src, false);
- Preset *preset_dst = collection_dst.find_preset(preset_name_src, false);
- assert(preset_src != nullptr);
- std::string preset_name_dst;
- if (preset_dst != nullptr && preset_dst->is_default) {
- // No need to copy a default preset, it always exists in collection_dst.
- if (activate)
- collection_dst.select_preset(0);
- return preset_name_src;
- } else if (preset_dst != nullptr && preset_src->config == preset_dst->config) {
- // Don't save as the config exists in the current bundle and its content is the same.
- return preset_name_src;
- } else {
- // Generate a new unique name.
- preset_name_dst = preset_name_src + bundle_name;
- Preset *preset_dup = nullptr;
- for (size_t i = 1; (preset_dup = collection_dst.find_preset(preset_name_dst, false)) != nullptr; ++ i) {
- if (preset_src->config == preset_dup->config)
- // The preset has been already copied into collection_dst.
- return preset_name_dst;
- // Try to generate another name.
- char buf[64];
- sprintf(buf, " (%d)", (int)i);
- preset_name_dst = preset_name_src + buf + bundle_name;
- }
- }
- assert(! preset_name_dst.empty());
- // Save preset_src->config into collection_dst under preset_name_dst.
- // The "compatible_printers" field should not have been exported into a config.ini or a G-code anyway,
- // but some of the alpha versions of Slic3r did.
- ConfigOption *opt_compatible = preset_src->config.optptr("compatible_printers");
- if (opt_compatible != nullptr) {
- assert(opt_compatible->type() == coStrings);
- if (opt_compatible->type() == coStrings)
- static_cast(opt_compatible)->values.clear();
- }
- (collection_dst.type() == Preset::TYPE_FILAMENT ?
- collection_dst.load_preset(path, preset_name_dst, preset_src->config, activate) :
- // Only move the source config for non filament profiles, as single filament profile may be referenced multiple times.
- collection_dst.load_preset(path, preset_name_dst, std::move(preset_src->config), activate))
- .is_external = true;
- return preset_name_dst;
- };
- load_one(this->prints, tmp_bundle.prints, tmp_bundle.prints .get_selected_preset_name(), true);
- load_one(this->sla_prints, tmp_bundle.sla_prints, tmp_bundle.sla_prints .get_selected_preset_name(), true);
- load_one(this->filaments, tmp_bundle.filaments, tmp_bundle.filaments .get_selected_preset_name(), true);
- load_one(this->sla_materials, tmp_bundle.sla_materials, tmp_bundle.sla_materials.get_selected_preset_name(), true);
- load_one(this->printers, tmp_bundle.printers, tmp_bundle.printers .get_selected_preset_name(), true);
- this->update_multi_material_filament_presets();
- for (size_t i = 1; i < std::min(tmp_bundle.filament_presets.size(), this->filament_presets.size()); ++ i)
- this->filament_presets[i] = load_one(this->filaments, tmp_bundle.filaments, tmp_bundle.filament_presets[i], false);
-
- this->update_compatible(PresetSelectCompatibleType::Never);
-
- sort_remove_duplicates(config_substitutions);
-
- //BBS: add config related logs
- BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": finished, got %1% substitutions")%config_substitutions.size();
- return config_substitutions;
-}*/
-
-// Process the Config Bundle loaded as a Boost property tree.
-// For each print, filament and printer preset (group defined by group_name), apply the inherited presets.
-// The presets starting with '*' are considered non-terminal and they are
-// removed through the flattening process by this function.
-// This function will never fail, but it will produce error messages through boost::log.
-// system_profiles will not be flattened, and they will be kept inside the "inherits" field
-/*static void flatten_configbundle_hierarchy(boost::property_tree::ptree &tree, const std::string &group_name, const std::vector &system_profiles)
-{
- namespace pt = boost::property_tree;
-
- // 1) For the group given by group_name, initialize the presets.
- struct Prst {
- Prst(const std::string &name, pt::ptree *node) : name(name), node(node) {}
- // Name of this preset. If the name starts with '*', it is an intermediate preset,
- // which will not make it into the result.
- const std::string name;
- // Link to the source boost property tree node, owned by tree.
- pt::ptree *node;
- // Link to the presets, from which this preset inherits.
- std::vector inherits;
- // Link to the presets, for which this preset is a direct parent.
- std::vector parent_of;
- // When running the Kahn's Topological sorting algorithm, this counter is decreased from inherits.size() to zero.
- // A cycle is indicated, if the number does not drop to zero after the Kahn's algorithm finishes.
- size_t num_incoming_edges_left = 0;
- // Sorting by the name, to be used when inserted into std::set.
- bool operator==(const Prst &rhs) const { return this->name == rhs.name; }
- bool operator< (const Prst &rhs) const { return this->name < rhs.name; }
- };
- // Find the presets, store them into a std::map, addressed by their names.
- std::set presets;
- std::string group_name_preset = group_name + ":";
- for (auto §ion : tree)
- if (boost::starts_with(section.first, group_name_preset) && section.first.size() > group_name_preset.size())
- presets.emplace(section.first.substr(group_name_preset.size()), §ion.second);
- // Fill in the "inherits" and "parent_of" members, report invalid inheritance fields.
- for (const Prst &prst : presets) {
- // Parse the list of comma separated values, possibly enclosed in quotes.
- std::vector inherits_names;
- std::vector inherits_system;
- if (Slic3r::unescape_strings_cstyle(prst.node->get("inherits", ""), inherits_names)) {
- // Resolve the inheritance by name.
- std::vector &inherits_nodes = const_cast(prst).inherits;
- for (const std::string &node_name : inherits_names) {
- auto it_system = std::lower_bound(system_profiles.begin(), system_profiles.end(), node_name);
- if (it_system != system_profiles.end() && *it_system == node_name) {
- // Loading a user config budnle, this preset is derived from a system profile.
- inherits_system.emplace_back(node_name);
- } else {
- auto it = presets.find(Prst(node_name, nullptr));
- if (it == presets.end())
- BOOST_LOG_TRIVIAL(error) << "flatten_configbundle_hierarchy: The preset " << prst.name << " inherits an unknown preset \"" << node_name << "\"";
- else {
- inherits_nodes.emplace_back(const_cast(&(*it)));
- inherits_nodes.back()->parent_of.emplace_back(const_cast(&prst));
- }
- }
- }
- } else {
- BOOST_LOG_TRIVIAL(error) << "flatten_configbundle_hierarchy: The preset " << prst.name << " has an invalid \"inherits\" field";
- }
- // Remove the "inherits" key, it has no meaning outside of the config bundle.
- const_cast(prst.node)->erase("inherits");
- if (! inherits_system.empty()) {
- // Loaded a user config bundle, where a profile inherits a system profile.
- // User profile should be derived from a single system profile only.
- assert(inherits_system.size() == 1);
- if (inherits_system.size() > 1)
- BOOST_LOG_TRIVIAL(error) << "flatten_configbundle_hierarchy: The preset " << prst.name << " inherits from more than single system preset";
- prst.node->put("inherits", Slic3r::escape_string_cstyle(inherits_system.front()));
- }
- }
-
- // 2) Create a linear ordering for the directed acyclic graph of preset inheritance.
- // https://en.wikipedia.org/wiki/Topological_sorting
- // Kahn's algorithm.
- std::vector sorted;
- {
- // Initialize S with the set of all nodes with no incoming edge.
- std::deque S;
- for (const Prst &prst : presets)
- if (prst.inherits.empty())
- S.emplace_back(const_cast(&prst));
- else
- const_cast(&prst)->num_incoming_edges_left = prst.inherits.size();
- while (! S.empty()) {
- Prst *n = S.front();
- S.pop_front();
- sorted.emplace_back(n);
- for (Prst *m : n->parent_of) {
- assert(m->num_incoming_edges_left > 0);
- if (-- m->num_incoming_edges_left == 0) {
- // We have visited all parents of m.
- S.emplace_back(m);
- }
- }
- }
- if (sorted.size() < presets.size()) {
- for (const Prst &prst : presets)
- if (prst.num_incoming_edges_left)
- BOOST_LOG_TRIVIAL(error) << "flatten_configbundle_hierarchy: The preset " << prst.name << " has cyclic dependencies";
- }
- }
-
- // Apply the dependencies in their topological ordering.
- for (Prst *prst : sorted) {
- // Merge the preset nodes in their order of application.
- // Iterate in a reverse order, so the last change will be placed first in merged.
- for (auto it_inherits = prst->inherits.rbegin(); it_inherits != prst->inherits.rend(); ++ it_inherits)
- for (auto it = (*it_inherits)->node->begin(); it != (*it_inherits)->node->end(); ++ it)
- if (it->first == "renamed_from") {
- // Don't inherit "renamed_from" flag, it does not make sense. The "renamed_from" flag only makes sense for a concrete preset.
- if (boost::starts_with((*it_inherits)->name, "*"))
- BOOST_LOG_TRIVIAL(error) << boost::format("Nonpublic intermediate preset %1% contains a \"renamed_from\" field, which is ignored") % (*it_inherits)->name;
- } else if (prst->node->find(it->first) == prst->node->not_found())
- prst->node->add_child(it->first, it->second);
- }
-
- // Remove the "internal" presets from the ptree. These presets are marked with '*'.
- group_name_preset += '*';
- for (auto it_section = tree.begin(); it_section != tree.end(); ) {
- if (boost::starts_with(it_section->first, group_name_preset) && it_section->first.size() > group_name_preset.size())
- // Remove the "internal" preset from the ptree.
- it_section = tree.erase(it_section);
- else
- // Keep the preset.
- ++ it_section;
- }
-}*/
-
-// preset_bundle is set when loading user config bundles, which must not overwrite the system profiles.
-/*static void flatten_configbundle_hierarchy(boost::property_tree::ptree &tree, const PresetBundle *preset_bundle)
-{
- flatten_configbundle_hierarchy(tree, "print", preset_bundle ? preset_bundle->prints.system_preset_names() : std::vector());
- flatten_configbundle_hierarchy(tree, "filament", preset_bundle ? preset_bundle->filaments.system_preset_names() : std::vector());
- flatten_configbundle_hierarchy(tree, "sla_print", preset_bundle ? preset_bundle->sla_prints.system_preset_names() : std::vector());
- flatten_configbundle_hierarchy(tree, "sla_material", preset_bundle ? preset_bundle->sla_materials.system_preset_names() : std::vector());
- flatten_configbundle_hierarchy(tree, "printer", preset_bundle ? preset_bundle->printers.system_preset_names() : std::vector());
-}*/
-
-// Load a config bundle file, into presets and store the loaded presets into separate files
-// of the local configuration directory.
-/*std::pair PresetBundle::load_configbundle(
- const std::string &path, LoadConfigBundleAttributes flags, ForwardCompatibilitySubstitutionRule compatibility_rule)
-{
- // Enable substitutions for user config bundle, throw an exception when loading a system profile.
- ConfigSubstitutionContext substitution_context { compatibility_rule };
- PresetsConfigSubstitutions substitutions;
-
- //BBS: add config related logs
- BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" enter, path %1%, compatibility_rule %2%")%path.c_str()%compatibility_rule;
- if (flags.has(LoadConfigBundleAttribute::ResetUserProfile) || flags.has(LoadConfigBundleAttribute::LoadSystem))
- // Reset this bundle, delete user profile files if SaveImported.
- this->reset(flags.has(LoadConfigBundleAttribute::SaveImported));
-
- // 1) Read the complete config file into a boost::property_tree.
- namespace pt = boost::property_tree;
- pt::ptree tree;
- boost::nowide::ifstream ifs(path);
- try {
- pt::read_ini(ifs, tree);
- } catch (const boost::property_tree::ini_parser::ini_parser_error &err) {
- throw Slic3r::RuntimeError(format("Failed loading config bundle \"%1%\"\nError: \"%2%\" at line %3%", path, err.message(), err.line()).c_str());
- }
-
- const VendorProfile *vendor_profile = nullptr;
- if (flags.has(LoadConfigBundleAttribute::LoadSystem) || flags.has(LoadConfigBundleAttribute::LoadVendorOnly)) {
- auto vp = VendorProfile::from_ini(tree, path);
- if (vp.models.size() == 0) {
- BOOST_LOG_TRIVIAL(error) << boost::format("Vendor bundle: `%1%`: No printer model defined.") % path;
- return std::make_pair(PresetsConfigSubstitutions{}, 0);
- } else if (vp.num_variants() == 0) {
- BOOST_LOG_TRIVIAL(error) << boost::format("Vendor bundle: `%1%`: No printer variant defined") % path;
- return std::make_pair(PresetsConfigSubstitutions{}, 0);
- }
- vendor_profile = &this->vendors.insert({vp.id, vp}).first->second;
- }
-
- //BBS: add config related logs
- if (vendor_profile)
- BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(", loaded vendor profile, name %1%, id %2%, version %3%")%vendor_profile->name%vendor_profile->id%vendor_profile->config_version.to_string();
-
- if (flags.has(LoadConfigBundleAttribute::LoadVendorOnly))
- return std::make_pair(PresetsConfigSubstitutions{}, 0);
-
- // 1.5) Flatten the config bundle by applying the inheritance rules. Internal profiles (with names starting with '*') are removed.
- // If loading a user config bundle, do not flatten with the system profiles, but keep the "inherits" flag intact.
- flatten_configbundle_hierarchy(tree, flags.has(LoadConfigBundleAttribute::LoadSystem) ? nullptr : this);
-
- // 2) Parse the property_tree, extract the active preset names and the profiles, save them into local config files.
- // Parse the obsolete preset names, to be deleted when upgrading from the old configuration structure.
- std::vector loaded_prints;
- std::vector loaded_filaments;
- std::vector loaded_sla_prints;
- std::vector loaded_sla_materials;
- std::vector loaded_printers;
- std::vector loaded_physical_printers;
- std::string active_print;
- std::vector active_filaments;
- std::string active_sla_print;
- std::string active_sla_material;
- std::string active_printer;
- std::string active_physical_printer;
- size_t presets_loaded = 0;
- size_t ph_printers_loaded = 0;
-
- for (const auto §ion : tree) {
- PresetCollection *presets = nullptr;
- std::string preset_name;
- PhysicalPrinterCollection *ph_printers = nullptr;
- std::string ph_printer_name;
- if (boost::starts_with(section.first, "print:")) {
- presets = &this->prints;
- preset_name = section.first.substr(6);
- } else if (boost::starts_with(section.first, "filament:")) {
- presets = &this->filaments;
- preset_name = section.first.substr(9);
- } else if (boost::starts_with(section.first, "sla_print:")) {
- presets = &this->sla_prints;
- preset_name = section.first.substr(10);
- } else if (boost::starts_with(section.first, "sla_material:")) {
- presets = &this->sla_materials;
- preset_name = section.first.substr(13);
- } else if (boost::starts_with(section.first, "printer:")) {
- presets = &this->printers;
- preset_name = section.first.substr(8);
- } else if (boost::starts_with(section.first, "physical_printer:")) {
- ph_printers = &this->physical_printers;
- ph_printer_name = section.first.substr(17);
- } else if (section.first == "presets") {
- // Load the names of the active presets.
- for (auto &kvp : section.second) {
- if (kvp.first == "print") {
- active_print = kvp.second.data();
- } else if (boost::starts_with(kvp.first, "filament")) {
- int idx = 0;
- if (kvp.first == "filament" || sscanf(kvp.first.c_str(), "filament_%d", &idx) == 1) {
- if (int(active_filaments.size()) <= idx)
- active_filaments.resize(idx + 1, std::string());
- active_filaments[idx] = kvp.second.data();
- }
- } else if (kvp.first == "sla_print") {
- active_sla_print = kvp.second.data();
- } else if (kvp.first == "sla_material") {
- active_sla_material = kvp.second.data();
- } else if (kvp.first == "printer") {
- active_printer = kvp.second.data();
- } else if (kvp.first == "physical_printer") {
- active_physical_printer = kvp.second.data();
- }
- }
- } else if (section.first == "obsolete_presets") {
- // Parse the names of obsolete presets. These presets will be deleted from user's
- // profile directory on installation of this vendor preset.
- for (auto &kvp : section.second) {
- std::vector *dst = nullptr;
- if (kvp.first == "print")
- dst = &this->obsolete_presets.prints;
- else if (kvp.first == "filament")
- dst = &this->obsolete_presets.filaments;
- else if (kvp.first == "sla_print")
- dst = &this->obsolete_presets.sla_prints;
- else if (kvp.first == "sla_material")
- dst = &this->obsolete_presets.sla_materials;
- else if (kvp.first == "printer")
- dst = &this->obsolete_presets.printers;
- if (dst)
- unescape_strings_cstyle(kvp.second.data(), *dst);
- }
- } else if (section.first == "settings") {
-#ifdef SUPPORT_AUTO_CENTER
- // Load the settings.
- for (auto &kvp : section.second) {
- if (kvp.first == "autocenter") {
- }
- }
-#endif
- } else
- // Ignore an unknown section.
- continue;
- if (presets != nullptr) {
- // Load the print, filament or printer preset.
- const DynamicPrintConfig *default_config = nullptr;
- DynamicPrintConfig config;
- std::string alias_name;
- std::vector renamed_from;
- try {
- auto parse_config_section = [§ion, &alias_name, &renamed_from, &substitution_context, &path](DynamicPrintConfig &config) {
- substitution_context.substitutions.clear();
- for (auto &kvp : section.second) {
- if (kvp.first == "alias")
- alias_name = kvp.second.data();
- else if (kvp.first == "renamed_from") {
- if (! unescape_strings_cstyle(kvp.second.data(), renamed_from)) {
- BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The preset \"" <<
- section.first << "\" contains invalid \"renamed_from\" key, which is being ignored.";
- }
- }
- // Throws on parsing error. For system presets, no substituion is being done, but an exception is thrown.
- config.set_deserialize(kvp.first, kvp.second.data(), substitution_context);
- }
- };
- if (presets == &this->printers) {
- // Select the default config based on the printer_technology field extracted from kvp.
- DynamicPrintConfig config_src;
- parse_config_section(config_src);
- default_config = &presets->default_preset_for(config_src).config;
- config = *default_config;
- config.apply(config_src);
- } else {
- default_config = &presets->default_preset().config;
- config = *default_config;
- parse_config_section(config);
- }
- } catch (const ConfigurationError &e) {
- throw ConfigurationError(format("Invalid configuration bundle \"%1%\", section [%2%]: ", path, section.first) + e.what());
- }
- Preset::normalize(config);
- // Report configuration fields, which are misplaced into a wrong group.
- std::string incorrect_keys = Preset::remove_invalid_keys(config, *default_config);
- if (! incorrect_keys.empty())
- BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" <<
- section.first << "\" contains the following incorrect keys: " << incorrect_keys << ", which were removed";
- if (flags.has(LoadConfigBundleAttribute::LoadSystem) && presets == &printers) {
- // Filter out printer presets, which are not mentioned in the vendor profile.
- // These presets are considered not installed.
- auto printer_model = config.opt_string("printer_model");
- if (printer_model.empty()) {
- BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" <<
- section.first << "\" defines no printer model, it will be ignored.";
- continue;
- }
- auto printer_variant = config.opt_string("printer_variant");
- if (printer_variant.empty()) {
- BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" <<
- section.first << "\" defines no printer variant, it will be ignored.";
- continue;
- }
- auto it_model = std::find_if(vendor_profile->models.cbegin(), vendor_profile->models.cend(),
- [&](const VendorProfile::PrinterModel &m) { return m.id == printer_model; }
- );
- if (it_model == vendor_profile->models.end()) {
- BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" <<
- section.first << "\" defines invalid printer model \"" << printer_model << "\", it will be ignored.";
- continue;
- }
- auto it_variant = it_model->variant(printer_variant);
- if (it_variant == nullptr) {
- BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" <<
- section.first << "\" defines invalid printer variant \"" << printer_variant << "\", it will be ignored.";
- continue;
- }
- const Preset *preset_existing = presets->find_preset(section.first, false);
- if (preset_existing != nullptr) {
- BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" <<
- section.first << "\" has already been loaded from another Config Bundle.";
- continue;
- }
- } else if (! flags.has(LoadConfigBundleAttribute::LoadSystem)) {
- // This is a user config bundle.
- const Preset *existing = presets->find_preset(preset_name, false);
- if (existing != nullptr) {
- if (existing->is_system) {
- assert(existing->vendor != nullptr);
- BOOST_LOG_TRIVIAL(error) << "Error in a user provided Config Bundle \"" << path << "\": The " << presets->name() << " preset \"" <<
- existing->name << "\" is a system preset of vendor " << existing->vendor->name << " and it will be ignored.";
- continue;
- } else {
- assert(existing->vendor == nullptr);
- BOOST_LOG_TRIVIAL(trace) << "A " << presets->name() << " preset \"" << existing->name << "\" was overwritten with a preset from user Config Bundle \"" << path << "\"";
- }
- } else {
- BOOST_LOG_TRIVIAL(trace) << "A new " << presets->name() << " preset \"" << preset_name << "\" was imported from user Config Bundle \"" << path << "\"";
- }
- }
- // Decide a full path to this .ini file.
- auto file_name = boost::algorithm::iends_with(preset_name, ".json") ? preset_name : preset_name + ".json";
- //BBS: change directoties by design
- auto file_path = (boost::filesystem::path(data_dir()) /PRESET_SYSTEM_DIR/ presets->section_name() / file_name).make_preferred();
- // Load the preset into the list of presets, save it to disk.
- Preset &loaded = presets->load_preset(file_path.string(), preset_name, std::move(config), false);
- if (flags.has(LoadConfigBundleAttribute::SaveImported))
- loaded.save(nullptr);
- if (flags.has(LoadConfigBundleAttribute::LoadSystem)) {
- loaded.is_system = true;
- loaded.vendor = vendor_profile;
- }
-
- // Derive the profile logical name aka alias from the preset name if the alias was not stated explicitely.
- if (alias_name.empty()) {
- size_t end_pos = preset_name.find_first_of("@");
- if (end_pos != std::string::npos) {
- alias_name = preset_name.substr(0, end_pos);
- if (renamed_from.empty())
- // Add the preset name with the '@' character removed into the "renamed_from" list.
- renamed_from.emplace_back(alias_name + preset_name.substr(end_pos + 1));
- boost::trim_right(alias_name);
- }
- }
- if (alias_name.empty())
- loaded.alias = preset_name;
- else
- loaded.alias = std::move(alias_name);
- loaded.renamed_from = std::move(renamed_from);
- if (! substitution_context.empty())
- substitutions.push_back({
- preset_name, presets->type(), PresetConfigSubstitutions::Source::ConfigBundle,
- std::string(), std::move(substitution_context.substitutions) });
- ++ presets_loaded;
- //BBS: add config related logs
- BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(", got preset %1%, from %2%")%loaded.name %path;
- }
-
- if (ph_printers != nullptr) {
- // Load the physical printer
- const DynamicPrintConfig& default_config = ph_printers->default_config();
- DynamicPrintConfig config = default_config;
-
- substitution_context.substitutions.clear();
- try {
- for (auto& kvp : section.second)
- config.set_deserialize(kvp.first, kvp.second.data(), substitution_context);
- } catch (const ConfigurationError &e) {
- throw ConfigurationError(format("Invalid configuration bundle \"%1%\", section [%2%]: ", path, section.first) + e.what());
- }
-
- // Report configuration fields, which are misplaced into a wrong group.
- std::string incorrect_keys = Preset::remove_invalid_keys(config, default_config);
- if (!incorrect_keys.empty())
- BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The physical printer \"" <<
- section.first << "\" contains the following incorrect keys: " << incorrect_keys << ", which were removed";
-
- const PhysicalPrinter* ph_printer_existing = ph_printers->find_printer(ph_printer_name, false);
- if (ph_printer_existing != nullptr) {
- BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The physical printer \"" <<
- section.first << "\" has already been loaded from another Config Bundle.";
- continue;
- }
-
- // Decide a full path to this .ini file.
- //BBS: change directoties by design
- auto file_name = boost::algorithm::iends_with(ph_printer_name, ".json") ? ph_printer_name : ph_printer_name + ".json";
- auto file_path = (boost::filesystem::path(data_dir())/PRESET_SYSTEM_DIR/"physical_printer" / file_name).make_preferred();
- // Load the preset into the list of presets, save it to disk.
- ph_printers->load_printer(file_path.string(), ph_printer_name, std::move(config), false, flags.has(LoadConfigBundleAttribute::SaveImported));
- if (! substitution_context.empty())
- substitutions.push_back({
- ph_printer_name, Preset::TYPE_PHYSICAL_PRINTER, PresetConfigSubstitutions::Source::ConfigBundle,
- std::string(), std::move(substitution_context.substitutions) });
- ++ ph_printers_loaded;
- }
- }
-
- // 3) Activate the presets and physical printer if any exists.
- if (! flags.has(LoadConfigBundleAttribute::LoadSystem)) {
- if (! active_print.empty())
- prints.select_preset_by_name(active_print, true);
- if (! active_sla_print.empty())
- sla_prints.select_preset_by_name(active_sla_print, true);
- if (! active_sla_material.empty())
- sla_materials.select_preset_by_name(active_sla_material, true);
- if (! active_printer.empty())
- printers.select_preset_by_name(active_printer, true);
- if (! active_physical_printer.empty())
- physical_printers.select_printer(active_physical_printer, active_printer);
- // Activate the first filament preset.
- if (! active_filaments.empty() && ! active_filaments.front().empty())
- filaments.select_preset_by_name(active_filaments.front(), true);
- this->update_multi_material_filament_presets();
- for (size_t i = 0; i < std::min(this->filament_presets.size(), active_filaments.size()); ++ i)
- this->filament_presets[i] = filaments.find_preset(active_filaments[i], true)->name;
- this->update_compatible(PresetSelectCompatibleType::Never);
- }
-
- //BBS: add config related logs
- BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(", finished, presets_loaded %1%, ph_printers_loaded %2%")%presets_loaded %ph_printers_loaded;
- return std::make_pair(std::move(substitutions), presets_loaded + ph_printers_loaded);
-}*/
-
//BBS: Load a config bundle file from json
std::pair PresetBundle::load_vendor_configs_from_json(
- const std::string &path, const std::string &vendor_name, LoadConfigBundleAttributes flags, ForwardCompatibilitySubstitutionRule compatibility_rule)
+ const std::string &path, const std::string &vendor_name, LoadConfigBundleAttributes flags, ForwardCompatibilitySubstitutionRule compatibility_rule, const PresetBundle* base_bundle)
{
// Enable substitutions for user config bundle, throw an exception when loading a system profile.
ConfigSubstitutionContext substitution_context { compatibility_rule };
@@ -3494,7 +2844,7 @@ std::pair PresetBundle::load_vendor_configs_
PresetCollection *presets = nullptr;
size_t presets_loaded = 0;
- auto parse_subfile = [this, path, vendor_name, presets_loaded, current_vendor_profile](
+ auto parse_subfile = [this, path, vendor_name, presets_loaded, current_vendor_profile, base_bundle](
ConfigSubstitutionContext& substitution_context,
PresetsConfigSubstitutions& substitutions,
LoadConfigBundleAttributes& flags,
@@ -3518,6 +2868,7 @@ std::pair PresetBundle::load_vendor_configs_
//parse the json elements
DynamicPrintConfig config_src;
+ std::string _renamed_from_str;
config_src.load_from_json(subfile, substitution_context, false, key_values, reason);
if (!reason.empty()) {
++m_errors;
@@ -3538,19 +2889,32 @@ std::pair PresetBundle::load_vendor_configs_
if (it1 != key_values.end()) {
inherits = it1->second;
auto it2 = config_maps.find(inherits);
- if (it2 != config_maps.end()) {
+ default_config = nullptr;
+ if (it2 != config_maps.end())
default_config = &(it2->second);
+ if(default_config == nullptr && base_bundle != nullptr) {
+ auto base_it2 = base_bundle->m_config_maps.find(inherits);
+ if (base_it2 != base_bundle->m_config_maps.end())
+ default_config = &(base_it2->second);
+ }
+ if (default_config != nullptr) {
if (filament_id.empty() && (presets_collection->type() == Preset::TYPE_FILAMENT)) {
auto filament_id_map_iter = filament_id_maps.find(inherits);
if (filament_id_map_iter != filament_id_maps.end()) {
filament_id = filament_id_map_iter->second;
}
+ if (filament_id.empty() && base_bundle != nullptr) {
+ auto filament_id_map_iter = base_bundle->m_filament_id_maps.find(inherits);
+ if (filament_id_map_iter != base_bundle->m_filament_id_maps.end()) {
+ filament_id = filament_id_map_iter->second;
+ }
+ }
}
}
else {
++m_errors;
- BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": can not find inherits "< PresetBundle::load_vendor_configs_
}
if (config.has("alias"))
alias_name = (dynamic_cast(config.option("alias")))->value;
- if (config.has("renamed_from")) {
- const ConfigOptionVectorBase *vec = static_cast(config.option("renamed_from"));
- renamed_from = vec->vserialize();
+
+ if (key_values.find(ORCA_JSON_KEY_RENAMED_FROM) != key_values.end()) {
+ if (!unescape_strings_cstyle(key_values[ORCA_JSON_KEY_RENAMED_FROM], renamed_from)) {
+ BOOST_LOG_TRIVIAL(error) << "Error in a Config \"" << path << "\": The preset \"" << preset_name
+ << "\" contains invalid \"renamed_from\" key, which is being ignored.";
+ }
}
Preset::normalize(config);
}
@@ -3729,6 +3096,10 @@ std::pair PresetBundle::load_vendor_configs_
throw ConfigurationError((boost::format("Failed loading configuration file %1%\nSuggest cleaning the directory %2% firstly") % subfile_path % path).str());
}
}
+ if (vendor_name == ORCA_FILAMENT_LIBRARY) {
+ m_config_maps = configs;
+ m_filament_id_maps = filament_id_maps;
+ }
//3.3) paste the printers
presets = &this->printers;
@@ -3965,179 +3336,6 @@ void PresetBundle::update_compatible(PresetSelectCompatibleType select_other_pri
BOOST_LOG_TRIVIAL(info) << boost::format("update_compatibility for all presets exit");
}
-//BBS: add a API to dump current configbundle as default configbundle
-/*void PresetBundle::export_current_configbundle(const std::string &path)
-{
- boost::nowide::ofstream c;
- c.open(path, std::ios::out | std::ios::trunc);
-
- c << "# generate the configbundle for BBL" << std::endl;
-
- const Preset& print_selected_preset = this->prints.get_selected_preset();
- const Preset* system_print = NULL;
- const Preset& filament_selected_preset = this->filaments.get_selected_preset();
- const Preset* system_filament = NULL;
- const Preset& printer_selected_preset = this->printers.get_selected_preset();
- const Preset* system_printer = NULL;
-
- // Export the print
- std::string print_bbl = "@BBL-3DP";
- size_t pos = print_selected_preset.name.find(print_bbl);
- if (std::string::npos != pos)
- {
- std::string system_print_name = print_selected_preset.name.substr(0, pos + print_bbl.size());
- system_print = this->prints.find_preset(system_print_name);
- if (system_print)
- {
- c << std::endl << "[" << this->prints.section_name() << ":" << system_print->name << "]" << std::endl;
- for (const std::string &opt_key : print_selected_preset.config.keys())
- {
- if (!opt_key.compare("inherits"))
- continue;
- const ConfigOption *option1 = system_print->config.option(opt_key);
- const ConfigOption *option2 = print_selected_preset.config.option(opt_key);
- if (option1 && option2 && (*option1 != *option2))
- c << opt_key << " = " << print_selected_preset.config.opt_serialize(opt_key) << std::endl;
- }
- c << std::endl;
- }
- }
-
- // Export the filament
- std::string filament_bbl = "@BBL-3DP";
- pos = filament_selected_preset.name.find(filament_bbl);
- if (std::string::npos != pos)
- {
- std::string system_filamant_name = filament_selected_preset.name.substr(0, pos + filament_bbl.size());
- system_filament = this->filaments.find_preset(system_filamant_name);
- if (system_filament)
- {
- c << std::endl << "[" << this->filaments.section_name() << ":" << system_filament->name << "]" << std::endl;
- for (const std::string &opt_key : filament_selected_preset.config.keys())
- {
- if (!opt_key.compare("inherits"))
- continue;
- const ConfigOption *option1 = system_filament->config.option(opt_key);
- const ConfigOption *option2 = filament_selected_preset.config.option(opt_key);
- if (option1 && option2 && (*option1 != *option2))
- c << opt_key << " = " << filament_selected_preset.config.opt_serialize(opt_key) << std::endl;
- }
- c << std::endl;
- }
- }
-
- // Export the printer
- std::string printer_bbl = "BBL-3DP-001";
- pos = printer_selected_preset.name.find(printer_bbl);
- if (std::string::npos != pos)
- {
- std::string system_printer_name = printer_selected_preset.name.substr(0, pos + printer_bbl.size());
- system_printer = this->printers.find_preset(system_printer_name);
- if (system_printer)
- {
- c << std::endl << "[" << this->printers.section_name() << ":" << system_printer->name << "]" << std::endl;
- for (const std::string &opt_key : printer_selected_preset.config.keys())
- {
- c << opt_key << " = " << printer_selected_preset.config.opt_serialize(opt_key) << std::endl;
- }
- c << std::endl;
- }
- }
-
- c.close();
-}*/
-
-
-//void PresetBundle::export_configbundle(const std::string &path, bool export_system_settings, bool export_physical_printers/* = false*/)
-//{
-// boost::nowide::ofstream c;
-// c.open(path, std::ios::out | std::ios::trunc);
-//
-// // Put a comment at the first line including the time stamp and Slic3r version.
-// c << "# " << Slic3r::header_slic3r_generated() << std::endl;
-//
-// // Export the print, filament and printer profiles.
-//
-// for (const PresetCollection *presets : {
-// (const PresetCollection*)&this->prints, (const PresetCollection*)&this->filaments,
-// (const PresetCollection*)&this->sla_prints, (const PresetCollection*)&this->sla_materials,
-// (const PresetCollection*)&this->printers }) {
-// for (const Preset &preset : (*presets)()) {
-// //BBS: add project embedded preset logic and refine is_external
-// if (preset.is_default || preset.is_project_embedded || (preset.is_system && ! export_system_settings))
-// //if (preset.is_default || preset.is_external || (preset.is_system && ! export_system_settings))
-// // Only export the common presets, not external files or the default preset.
-// continue;
-// c << std::endl << "[" << presets->section_name() << ":" << preset.name << "]" << std::endl;
-// for (const std::string &opt_key : preset.config.keys())
-// c << opt_key << " = " << preset.config.opt_serialize(opt_key) << std::endl;
-// }
-// }
-//
-// if (export_physical_printers) {
-// for (const PhysicalPrinter& ph_printer : this->physical_printers) {
-// c << std::endl << "[physical_printer:" << ph_printer.name << "]" << std::endl;
-// for (const std::string& opt_key : ph_printer.config.keys())
-// c << opt_key << " = " << ph_printer.config.opt_serialize(opt_key) << std::endl;
-// }
-// }
-//
-// // Export the names of the active presets.
-// c << std::endl << "[presets]" << std::endl;
-// c << "print = " << this->prints.get_selected_preset_name() << std::endl;
-// c << "sla_print = " << this->sla_prints.get_selected_preset_name() << std::endl;
-// c << "sla_material = " << this->sla_materials.get_selected_preset_name() << std::endl;
-// c << "printer = " << this->printers.get_selected_preset_name() << std::endl;
-// for (size_t i = 0; i < this->filament_presets.size(); ++ i) {
-// char suffix[64];
-// if (i > 0)
-// sprintf(suffix, "_%d", (int)i);
-// else
-// suffix[0] = 0;
-// c << "filament" << suffix << " = " << this->filament_presets[i] << std::endl;
-// }
-//
-// if (export_physical_printers && this->physical_printers.get_selected_idx() >= 0)
-// c << "physical_printer = " << this->physical_printers.get_selected_printer_name() << std::endl;
-//#if 0
-// // Export the following setting values from the provided setting repository.
-// static const char *settings_keys[] = { "autocenter" };
-// c << "[settings]" << std::endl;
-// for (size_t i = 0; i < sizeof(settings_keys) / sizeof(settings_keys[0]); ++ i)
-// c << settings_keys[i] << " = " << settings.serialize(settings_keys[i]) << std::endl;
-//#endif
-//
-// c.close();
-//}
-
-//BBS: add export system preset functions
-/*void PresetBundle::export_system_configs(const std::string &path)
-{
- // Export the print, filament and printer profiles.
- for (const PresetCollection *presets : {
- (const PresetCollection*)&this->prints, (const PresetCollection*)&this->filaments,
- (const PresetCollection*)&this->sla_prints, (const PresetCollection*)&this->sla_materials,
- (const PresetCollection*)&this->printers }) {
- for (const Preset &preset : (*presets)()) {
- if (preset.is_system)
- {
- // Only export the system presets
- boost::nowide::ofstream c;
- std::string file_path = path + std::string("\\") + preset.name;
-
- c.open(file_path, std::ios::out | std::ios::trunc);
-
- // Put a comment at the first line including the time stamp and Slic3r version.
- c << "# " << Slic3r::header_slic3r_generated() << std::endl;
- //c << std::endl << "[" << presets->section_name() << ":" << preset.name << "]" << std::endl;
- for (const std::string &opt_key : preset.config.keys())
- c << opt_key << " = " << preset.config.opt_serialize(opt_key) << std::endl;
-
- c.close();
- }
- }
- }
-}*/
std::vector PresetBundle::export_current_configs(const std::string & path,
std::function override_confirm,
@@ -4200,6 +3398,9 @@ bool PresetBundle::has_errors() const
for (auto& preset : filaments) {
if (!preset.is_system)
continue;
+ // It's per design that the Orca Filament Library can have the empty compatible_printers.
+ if(preset.vendor->name == PresetBundle::ORCA_FILAMENT_LIBRARY)
+ continue;
auto* compatible_printers = dynamic_cast(preset.config.option("compatible_printers"));
if (compatible_printers == nullptr || compatible_printers->values.empty()) {
has_errors = true;
diff --git a/src/libslic3r/PresetBundle.hpp b/src/libslic3r/PresetBundle.hpp
index da952dde27..58b5941168 100644
--- a/src/libslic3r/PresetBundle.hpp
+++ b/src/libslic3r/PresetBundle.hpp
@@ -160,7 +160,12 @@ public:
// and the system profiles will point to the VendorProfile instances owned by PresetBundle::vendors.
VendorMap vendors;
- struct ObsoletePresets {
+ // Orca: for OrcaFilamentLibrary
+ std::map m_config_maps;
+ std::map m_filament_id_maps;
+
+ struct ObsoletePresets
+ {
std::vector prints;
std::vector sla_prints;
std::vector filaments;
@@ -212,9 +217,9 @@ public:
// Don't do any config substitutions when loading a system profile, perform and report substitutions otherwise.
/*std::pair load_configbundle(
const std::string &path, LoadConfigBundleAttributes flags, ForwardCompatibilitySubstitutionRule compatibility_rule);*/
- //BBS: add json related logic
+ //Orca: load config bundle from json, pass the base bundle to support cross vendor inheritance
std::pair load_vendor_configs_from_json(
- const std::string &path, const std::string &vendor_name, LoadConfigBundleAttributes flags, ForwardCompatibilitySubstitutionRule compatibility_rule);
+ const std::string &path, const std::string &vendor_name, LoadConfigBundleAttributes flags, ForwardCompatibilitySubstitutionRule compatibility_rule, const PresetBundle* base_bundle = nullptr);
// Export a config bundle file containing all the presets and the names of the active presets.
//void export_configbundle(const std::string &path, bool export_system_settings = false, bool export_physical_printers = false);
@@ -261,11 +266,13 @@ public:
std::pair load_system_filaments_json(ForwardCompatibilitySubstitutionRule compatibility_rule);
VendorProfile get_custom_vendor_models() const;
- //BBS: add BBL as default
- static const char *BBL_BUNDLE;
- static const char *BBL_DEFAULT_PRINTER_MODEL;
- static const char *BBL_DEFAULT_PRINTER_VARIANT;
- static const char *BBL_DEFAULT_FILAMENT;
+ //orca: add 'custom' as default
+ static const char *ORCA_DEFAULT_BUNDLE;
+ static const char *ORCA_DEFAULT_PRINTER_MODEL;
+ static const char *ORCA_DEFAULT_PRINTER_VARIANT;
+ static const char *ORCA_DEFAULT_FILAMENT;
+ static const char *ORCA_FILAMENT_LIBRARY;
+
static std::array types_list(PrinterTechnology pt) {
if (pt == ptFFF)
diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp
index 1c259a028c..03573d08bd 100644
--- a/src/libslic3r/PrintConfig.cpp
+++ b/src/libslic3r/PrintConfig.cpp
@@ -123,6 +123,15 @@ static t_config_enum_values s_keys_map_FuzzySkinType {
};
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(FuzzySkinType)
+static t_config_enum_values s_keys_map_NoiseType {
+ { "classic", int(NoiseType::Classic) },
+ { "perlin", int(NoiseType::Perlin) },
+ { "billow", int(NoiseType::Billow) },
+ { "ridgedmulti", int(NoiseType::RidgedMulti) },
+ { "voronoi", int(NoiseType::Voronoi) }
+};
+CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(NoiseType)
+
static t_config_enum_values s_keys_map_InfillPattern {
{ "concentric", ipConcentric },
{ "zig-zag", ipRectilinear },
@@ -1262,38 +1271,38 @@ void PrintConfigDef::init_fff_params()
def = this->add("compatible_printers", coStrings);
def->label = L("Compatible machine");
- def->mode = comDevelop;
+ def->mode = comAdvanced;
def->set_default_value(new ConfigOptionStrings());
def->cli = ConfigOptionDef::nocli;
//BBS.
def = this->add("upward_compatible_machine", coStrings);
def->label = L("upward compatible machine");
- def->mode = comDevelop;
+ def->mode = comAdvanced;
def->set_default_value(new ConfigOptionStrings());
def->cli = ConfigOptionDef::nocli;
def = this->add("compatible_printers_condition", coString);
def->label = L("Compatible machine condition");
- //def->tooltip = L("A boolean expression using the configuration values of an active printer profile. "
- // "If this expression evaluates to true, this profile is considered compatible "
- // "with the active printer profile.");
- def->mode = comDevelop;
+ def->tooltip = L("A boolean expression using the configuration values of an active printer profile. "
+ "If this expression evaluates to true, this profile is considered compatible "
+ "with the active printer profile.");
+ def->mode = comAdvanced;
def->set_default_value(new ConfigOptionString());
def->cli = ConfigOptionDef::nocli;
def = this->add("compatible_prints", coStrings);
def->label = L("Compatible process profiles");
- def->mode = comDevelop;
+ def->mode = comAdvanced;
def->set_default_value(new ConfigOptionStrings());
def->cli = ConfigOptionDef::nocli;
def = this->add("compatible_prints_condition", coString);
def->label = L("Compatible process profiles condition");
- //def->tooltip = L("A boolean expression using the configuration values of an active print profile. "
- // "If this expression evaluates to true, this profile is considered compatible "
- // "with the active print profile.");
- def->mode = comDevelop;
+ def->tooltip = L("A boolean expression using the configuration values of an active print profile. "
+ "If this expression evaluates to true, this profile is considered compatible "
+ "with the active print profile.");
+ def->mode = comAdvanced;
def->set_default_value(new ConfigOptionString());
def->cli = ConfigOptionDef::nocli;
@@ -2632,6 +2641,57 @@ void PrintConfigDef::init_fff_params()
def->mode = comSimple;
def->set_default_value(new ConfigOptionBool(0));
+ def = this->add("fuzzy_skin_noise_type", coEnum);
+ def->label = L("Fuzzy skin noise type");
+ def->category = L("Others");
+ def->tooltip = L("Noise type to use for fuzzy skin generation.\n"
+ "Classic: Classic uniform random noise.\n"
+ "Perlin: Perlin noise, which gives a more consistent texture.\n"
+ "Billow: Similar to perlin noise, but clumpier.\n"
+ "Ridged Multifractal: Ridged noise with sharp, jagged features. Creates marble-like textures.\n"
+ "Voronoi: Divides the surface into voronoi cells, and displaces each one by a random amount. Creates a patchwork texture.");
+ def->enum_keys_map = &ConfigOptionEnum::get_enum_values();
+ def->enum_values.push_back("classic");
+ def->enum_values.push_back("perlin");
+ def->enum_values.push_back("billow");
+ def->enum_values.push_back("ridgedmulti");
+ def->enum_values.push_back("voronoi");
+ def->enum_labels.push_back(L("Classic"));
+ def->enum_labels.push_back(L("Perlin"));
+ def->enum_labels.push_back(L("Billow"));
+ def->enum_labels.push_back(L("Ridged Multifractal"));
+ def->enum_labels.push_back(L("Voronoi"));
+ def->mode = comSimple;
+ def->set_default_value(new ConfigOptionEnum(NoiseType::Classic));
+
+ def = this->add("fuzzy_skin_scale", coFloat);
+ def->label = L("Fuzzy skin feature size");
+ def->category = L("Others");
+ def->tooltip = L("The base size of the coherent noise features, in mm. Higher values will result in larger features.");
+ def->sidetext = L("mm");
+ def->min = 0.1;
+ def->max = 500;
+ def->mode = comAdvanced;
+ def->set_default_value(new ConfigOptionFloat(1.0));
+
+ def = this->add("fuzzy_skin_octaves", coInt);
+ def->label = L("Fuzzy Skin Noise Octaves");
+ def->category = L("Others");
+ def->tooltip = L("The number of octaves of coherent noise to use. Higher values increase the detail of the noise, but also increase computation time.");
+ def->min = 1;
+ def->max = 10;
+ def->mode = comAdvanced;
+ def->set_default_value(new ConfigOptionInt(4));
+
+ def = this->add("fuzzy_skin_persistence", coFloat);
+ def->label = L("Fuzzy skin noise persistence");
+ def->category = L("Others");
+ def->tooltip = L("The decay rate for higher octaves of the coherent noise. Lower values will result in smoother noise.");
+ def->min = 0.01;
+ def->max = 1;
+ def->mode = comAdvanced;
+ def->set_default_value(new ConfigOptionFloat(0.5));
+
def = this->add("filter_out_gap_fill", coFloat);
def->label = L("Filter out tiny gaps");
def->category = L("Layers and Perimeters");
diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp
index 88cc8438bf..33a0e7eabf 100644
--- a/src/libslic3r/PrintConfig.hpp
+++ b/src/libslic3r/PrintConfig.hpp
@@ -41,6 +41,14 @@ enum class FuzzySkinType {
AllWalls,
};
+enum class NoiseType {
+ Classic,
+ Perlin,
+ Billow,
+ RidgedMulti,
+ Voronoi,
+};
+
enum PrintHostType {
htPrusaLink, htPrusaConnect, htOctoPrint, htDuet, htFlashAir, htAstroBox, htRepetier, htMKS, htESP3D, htCrealityPrint, htObico, htFlashforge, htSimplyPrint
};
@@ -402,6 +410,7 @@ static std::string get_bed_temp_1st_layer_key(const BedType type)
CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(PrinterTechnology)
CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(GCodeFlavor)
CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(FuzzySkinType)
+CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(NoiseType)
CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(InfillPattern)
CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(IroningType)
CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(SlicingMode)
@@ -917,6 +926,10 @@ PRINT_CONFIG_CLASS_DEFINE(
((ConfigOptionFloat, fuzzy_skin_thickness))
((ConfigOptionFloat, fuzzy_skin_point_distance))
((ConfigOptionBool, fuzzy_skin_first_layer))
+ ((ConfigOptionEnum, fuzzy_skin_noise_type))
+ ((ConfigOptionFloat, fuzzy_skin_scale))
+ ((ConfigOptionInt, fuzzy_skin_octaves))
+ ((ConfigOptionFloat, fuzzy_skin_persistence))
((ConfigOptionFloat, gap_infill_speed))
((ConfigOptionInt, sparse_infill_filament))
((ConfigOptionFloatOrPercent, sparse_infill_line_width))
diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp
index 0c5d78de77..b76eaa4574 100644
--- a/src/libslic3r/PrintObject.cpp
+++ b/src/libslic3r/PrintObject.cpp
@@ -1117,6 +1117,10 @@ bool PrintObject::invalidate_state_by_config_options(
|| opt_key == "fuzzy_skin_thickness"
|| opt_key == "fuzzy_skin_point_distance"
|| opt_key == "fuzzy_skin_first_layer"
+ || opt_key == "fuzzy_skin_noise_type"
+ || opt_key == "fuzzy_skin_scale"
+ || opt_key == "fuzzy_skin_octaves"
+ || opt_key == "fuzzy_skin_persistence"
|| opt_key == "detect_overhang_wall"
|| opt_key == "overhang_reverse"
|| opt_key == "overhang_reverse_internal_only"
diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt
index 10d3f37648..3de396c9d0 100644
--- a/src/slic3r/CMakeLists.txt
+++ b/src/slic3r/CMakeLists.txt
@@ -616,7 +616,8 @@ source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${SLIC3R_GUI_SOURCES})
encoding_check(libslic3r_gui)
-target_link_libraries(libslic3r_gui libslic3r cereal::cereal imgui imguizmo minilzo GLEW::GLEW OpenGL::GL hidapi ${wxWidgets_LIBRARIES} glfw libcurl OpenSSL::SSL OpenSSL::Crypto)
+find_package(libnoise REQUIRED)
+target_link_libraries(libslic3r_gui libslic3r cereal::cereal imgui imguizmo minilzo GLEW::GLEW OpenGL::GL hidapi ${wxWidgets_LIBRARIES} glfw libcurl OpenSSL::SSL OpenSSL::Crypto noise::noise)
if (MSVC)
target_link_libraries(libslic3r_gui Setupapi.lib)
diff --git a/src/slic3r/GUI/3DBed.cpp b/src/slic3r/GUI/3DBed.cpp
index 9d73383096..5c843f4cbe 100644
--- a/src/slic3r/GUI/3DBed.cpp
+++ b/src/slic3r/GUI/3DBed.cpp
@@ -246,7 +246,7 @@ void Bed3D::Axes::render()
//BBS: add part plate logic
bool Bed3D::set_shape(const Pointfs& printable_area, const double printable_height, const std::string& custom_model, bool force_as_custom,
- const Vec2d position, bool with_reset)
+ const Vec2d& position, bool with_reset)
{
/*auto check_texture = [](const std::string& texture) {
boost::system::error_code ec; // so the exists call does not throw (e.g. after a permission problem)
@@ -612,7 +612,7 @@ void Bed3D::render_system(GLCanvas3D& canvas, const Transform3d& view_matrix, co
void Bed3D::update_model_offset()
{
// move the model so that its origin (0.0, 0.0, 0.0) goes into the bed shape center and a bit down to avoid z-fighting with the texture quad
- Vec3d shift = m_extended_bounding_box.center();
+ Vec3d shift = m_build_volume.bounding_volume().center();
shift(2) = -0.03;
Vec3d* model_offset_ptr = const_cast(&m_model_offset);
*model_offset_ptr = shift;
diff --git a/src/slic3r/GUI/3DBed.hpp b/src/slic3r/GUI/3DBed.hpp
index ed19e24b53..1f3d3aab8a 100644
--- a/src/slic3r/GUI/3DBed.hpp
+++ b/src/slic3r/GUI/3DBed.hpp
@@ -121,7 +121,7 @@ public:
// as this class does not use it, thus there is no need to update the UI.
// BBS
bool set_shape(const Pointfs& printable_area, const double printable_height, const std::string& custom_model, bool force_as_custom = false,
- const Vec2d position = Vec2d::Zero(), bool with_reset = true);
+ const Vec2d& position = Vec2d::Zero(), bool with_reset = true);
void set_position(Vec2d& position);
void set_axes_mode(bool origin);
diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp
index 435cc62bb4..05ffc67326 100644
--- a/src/slic3r/GUI/AboutDialog.cpp
+++ b/src/slic3r/GUI/AboutDialog.cpp
@@ -219,7 +219,7 @@ AboutDialog::AboutDialog()
std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str();
SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO));
- wxPanel *m_panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(560), FromDIP(237)), wxTAB_TRAVERSAL);
+ wxPanel* m_panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(560), FromDIP(125)), wxTAB_TRAVERSAL);
wxBoxSizer *panel_versizer = new wxBoxSizer(wxVERTICAL);
wxBoxSizer *vesizer = new wxBoxSizer(wxVERTICAL);
@@ -232,8 +232,10 @@ AboutDialog::AboutDialog()
main_sizer->Add(m_panel, 1, wxEXPAND | wxALL, 0);
main_sizer->Add(ver_sizer, 0, wxEXPAND | wxALL, 0);
+ bool is_dark = wxGetApp().app_config->get("dark_color_mode") == "1";
+
// logo
- m_logo_bitmap = ScalableBitmap(this, "OrcaSlicer_about", 250);
+ m_logo_bitmap = ScalableBitmap(this, is_dark ? "OrcaSlicer_about" : "OrcaSlicer_about_dark", FromDIP(125));
m_logo = new wxStaticBitmap(this, wxID_ANY, m_logo_bitmap.bmp(), wxDefaultPosition,wxDefaultSize, 0);
m_logo->SetSizer(vesizer);
@@ -242,33 +244,31 @@ AboutDialog::AboutDialog()
// version
{
- auto _build_string_font = Label::Body_10;
+ auto _build_string_font = Label::Body_12;
// _build_string_font.SetStyle(wxFONTSTYLE_ITALIC);
- vesizer->Add(0, FromDIP(165), 1, wxEXPAND, FromDIP(5));
- auto version_string = _L("Orca Slicer") + " " + std::string(SoftFever_VERSION);
+ vesizer->Add(0, 0, 1, wxEXPAND, FromDIP(5));
+ auto version_string = std::string(SoftFever_VERSION); // _L("Orca Slicer ") + " " + std::string(SoftFever_VERSION);
wxStaticText* version = new wxStaticText(this, wxID_ANY, version_string.c_str(), wxDefaultPosition, wxDefaultSize);
- wxStaticText* credits_string = new wxStaticText(this, wxID_ANY,
- wxString::Format("Build %s.\nOrcaSlicer is based on PrusaSlicer and BambuStudio",
- std::string(GIT_COMMIT_HASH)),
- wxDefaultPosition, wxDefaultSize);
+ wxStaticText* credits_string = new wxStaticText(this, wxID_ANY, wxString::Format("Build %s", std::string(GIT_COMMIT_HASH)), wxDefaultPosition, wxDefaultSize);
credits_string->SetFont(_build_string_font);
wxFont version_font = GetFont();
#ifdef __WXMSW__
- version_font.SetPointSize(version_font.GetPointSize()-1);
+ version_font.SetPointSize(version_font.GetPointSize()-1);
#else
version_font.SetPointSize(11);
#endif
- version_font.SetPointSize(FromDIP(16));
+ version_font.SetPointSize(FromDIP(20));
version->SetFont(version_font);
- version->SetForegroundColour(wxColour("#FFFFFD"));
- credits_string->SetForegroundColour(wxColour("#FFFFFD"));
- version->SetBackgroundColour(wxColour("#4d4d4d"));
- credits_string->SetBackgroundColour(wxColour("#4d4d4d"));
+ version->SetForegroundColour(wxColour("#949494"));
+ credits_string->SetForegroundColour(wxColour("#949494"));
+ version->SetBackgroundColour(wxColour("#FFFFFF"));
+ credits_string->SetBackgroundColour(wxColour("#FFFFFF"));
- vesizer->Add(version, 0, wxALL | wxALIGN_CENTER_HORIZONTAL, FromDIP(5));
- vesizer->Add(credits_string, 0, wxALL | wxALIGN_CENTER_HORIZONTAL, FromDIP(5));
-// #if BBL_INTERNAL_TESTING
+ vesizer->Add(version, 0, wxRIGHT | wxALIGN_RIGHT, FromDIP(20));
+ vesizer->AddSpacer(FromDIP(5));
+ vesizer->Add(credits_string, 0, wxRIGHT | wxALIGN_RIGHT, FromDIP(20));
+ // #if BBL_INTERNAL_TESTING
// wxString build_time = wxString::Format("Build Time: %s", std::string(SLIC3R_BUILD_TIME));
// wxStaticText* build_time_text = new wxStaticText(this, wxID_ANY, build_time, wxDefaultPosition, wxDefaultSize);
// build_time_text->SetForegroundColour(wxColour("#FFFFFE"));
diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp
index 44ed3da012..a376aa7f1f 100644
--- a/src/slic3r/GUI/ConfigManipulation.cpp
+++ b/src/slic3r/GUI/ConfigManipulation.cpp
@@ -708,9 +708,14 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co
toggle_line("support_interface_not_for_body",config->opt_int("support_interface_filament")&&!config->opt_int("support_filament"));
bool has_fuzzy_skin = (config->opt_enum("fuzzy_skin") != FuzzySkinType::None);
- for (auto el : { "fuzzy_skin_thickness", "fuzzy_skin_point_distance", "fuzzy_skin_first_layer"})
+ for (auto el : { "fuzzy_skin_thickness", "fuzzy_skin_point_distance", "fuzzy_skin_first_layer", "fuzzy_skin_noise_type"})
toggle_line(el, has_fuzzy_skin);
+ NoiseType fuzzy_skin_noise_type = config->opt_enum("fuzzy_skin_noise_type");
+ toggle_line("fuzzy_skin_scale", has_fuzzy_skin && fuzzy_skin_noise_type != NoiseType::Classic);
+ toggle_line("fuzzy_skin_octaves", has_fuzzy_skin && fuzzy_skin_noise_type != NoiseType::Classic && fuzzy_skin_noise_type != NoiseType::Voronoi);
+ toggle_line("fuzzy_skin_persistence", has_fuzzy_skin && (fuzzy_skin_noise_type == NoiseType::Perlin || fuzzy_skin_noise_type == NoiseType::Billow));
+
bool have_arachne = config->opt_enum("wall_generator") == PerimeterGeneratorType::Arachne;
for (auto el : { "wall_transition_length", "wall_transition_filter_deviation", "wall_transition_angle",
"min_feature_size", "min_length_factor", "min_bead_width", "wall_distribution_count", "initial_layer_min_bead_width"})
diff --git a/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp
index 1768d8cd47..f6c059e540 100644
--- a/src/slic3r/GUI/ConfigWizard.cpp
+++ b/src/slic3r/GUI/ConfigWizard.cpp
@@ -123,18 +123,18 @@ BundleMap BundleMap::load()
const auto vendor_dir = (boost::filesystem::path(Slic3r::data_dir()) / PRESET_SYSTEM_DIR).make_preferred();
const auto rsrc_vendor_dir = (boost::filesystem::path(resources_dir()) / "profiles").make_preferred();
- //BBS: add BBL as default
- //BBS: add json logic for vendor bundle
- auto bbl_bundle_path = (vendor_dir / PresetBundle::BBL_BUNDLE).replace_extension(".json");
- auto bbl_bundle_rsrc = false;
- if (!boost::filesystem::exists(bbl_bundle_path)) {
- bbl_bundle_path = (rsrc_vendor_dir / PresetBundle::BBL_BUNDLE).replace_extension(".json");
- bbl_bundle_rsrc = true;
+ //Orca: add custom as default
+ //Orca: add json logic for vendor bundle
+ auto orca_bundle_path = (vendor_dir / PresetBundle::ORCA_DEFAULT_BUNDLE).replace_extension(".json");
+ auto orca_bundle_rsrc = false;
+ if (!boost::filesystem::exists(orca_bundle_path)) {
+ orca_bundle_path = (rsrc_vendor_dir / PresetBundle::ORCA_DEFAULT_BUNDLE).replace_extension(".json");
+ orca_bundle_rsrc = true;
}
{
Bundle bbl_bundle;
- if (bbl_bundle.load(std::move(bbl_bundle_path), bbl_bundle_rsrc, true))
- res.emplace(PresetBundle::BBL_BUNDLE, std::move(bbl_bundle));
+ if (bbl_bundle.load(std::move(orca_bundle_path), orca_bundle_rsrc, true))
+ res.emplace(PresetBundle::ORCA_DEFAULT_BUNDLE, std::move(bbl_bundle));
}
// Load the other bundles in the datadir/vendor directory
@@ -163,10 +163,10 @@ BundleMap BundleMap::load()
Bundle& BundleMap::bbl_bundle()
{
- //BBS: add BBL as default
- auto it = find(PresetBundle::BBL_BUNDLE);
+ //Orca: add custom as default
+ auto it = find(PresetBundle::ORCA_DEFAULT_BUNDLE);
if (it == end()) {
- throw Slic3r::RuntimeError("ConfigWizard: Internal error in BundleMap: BBL_BUNDLE not loaded");
+ throw Slic3r::RuntimeError("ConfigWizard: Internal error in BundleMap: ORCA_DEFAULT_BUNDLE not loaded");
}
return it->second;
@@ -625,12 +625,11 @@ std::set PagePrinters::get_selected_models()
void PagePrinters::set_run_reason(ConfigWizard::RunReason run_reason)
{
- //BBS: add BBL as default
+ //Orca: add custom as default
if (is_primary_printer_page
&& (run_reason == ConfigWizard::RR_DATA_EMPTY || run_reason == ConfigWizard::RR_DATA_LEGACY)
&& printer_pickers.size() > 0
- && printer_pickers[0]->vendor_id == PresetBundle::BBL_BUNDLE) {
- //BBS: select alll bbs machine by default
+ && printer_pickers[0]->vendor_id == PresetBundle::ORCA_DEFAULT_BUNDLE) {
//printer_pickers[0]->select_one(0, true);
printer_pickers[0]->select_all(true);
}
@@ -1941,8 +1940,8 @@ void ConfigWizard::priv::create_3rdparty_pages()
{
for (const auto &pair : bundles) {
const VendorProfile *vendor = pair.second.vendor_profile;
- //BBS: add BBL as default
- if (vendor->id == PresetBundle::BBL_BUNDLE) { continue; }
+ //Orca: add custom as default
+ if (vendor->id == PresetBundle::ORCA_DEFAULT_BUNDLE) { continue; }
bool is_fff_technology = false;
bool is_sla_technology = false;
diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp
index 00b9685861..31eb38b728 100644
--- a/src/slic3r/GUI/GCodeViewer.cpp
+++ b/src/slic3r/GUI/GCodeViewer.cpp
@@ -845,7 +845,7 @@ void GCodeViewer::init(ConfigOptionMode mode, PresetBundle* preset_bundle)
}
if (filename.empty()) {
- filename = preset_bundle->get_hotend_model_for_printer_model(PresetBundle::BBL_DEFAULT_PRINTER_MODEL);
+ filename = preset_bundle->get_hotend_model_for_printer_model(PresetBundle::ORCA_DEFAULT_PRINTER_MODEL);
}
}
}
@@ -1056,8 +1056,6 @@ void GCodeViewer::load(const GCodeProcessorResult& gcode_result, const Print& pr
set_view_type(EViewType::ColorPrint);
}
- m_fold = false;
-
bool only_gcode_3mf = false;
PartPlate* current_plate = wxGetApp().plater()->get_partplate_list().get_curr_plate();
bool current_has_print_instances = current_plate->has_printable_instances();
@@ -4644,15 +4642,15 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv
ImGui::SameLine();
std::wstring btn_name;
if (m_fold)
- btn_name = ImGui::UnfoldButtonIcon + boost::nowide::widen(std::string(""));
+ btn_name = ImGui::UnfoldButtonIcon;
else
- btn_name = ImGui::FoldButtonIcon + boost::nowide::widen(std::string(""));
+ btn_name = ImGui::FoldButtonIcon;
ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0));
ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.0f, 0.59f, 0.53f, 1.00f));
ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.0f, 0.59f, 0.53f, 0.78f));
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0.0f, 0.0f));
//ImGui::PushItemWidth(
- float button_width = ImGui::CalcTextSize(into_u8(btn_name).c_str()).x;
+ float button_width = 34.0f;
if (ImGui::Button(into_u8(btn_name).c_str(), ImVec2(button_width, 0))) {
m_fold = !m_fold;
}
diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index dbf08d54ad..02448d63c9 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -4782,7 +4782,7 @@ void GUI_App::start_sync_user_preset(bool with_progress_dlg)
m_sync_update_thread = Slic3r::create_thread(
[this, progressFn, cancelFn, finishFn, t = std::weak_ptr(m_user_sync_token)] {
// get setting list, update setting list
- std::string version = preset_bundle->get_vendor_profile_version(PresetBundle::BBL_BUNDLE).to_string();
+ std::string version = preset_bundle->get_vendor_profile_version(PresetBundle::ORCA_DEFAULT_BUNDLE).to_string();
int ret = m_agent->get_setting_list2(version, [this](auto info) {
auto type = info[BBL_JSON_KEY_TYPE];
auto name = info[BBL_JSON_KEY_NAME];
diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp
index fdc0fc18e3..675f004c93 100644
--- a/src/slic3r/GUI/PartPlate.hpp
+++ b/src/slic3r/GUI/PartPlate.hpp
@@ -692,11 +692,6 @@ public:
m_height_limit_mode = mode;
}
- // SoftFever
- const std::string& get_logo_texture_filename() const {
- return m_logo_texture_filename;
- }
-
int get_curr_plate_index() const { return m_current_plate; }
PartPlate* get_curr_plate() { return m_plate_list[m_current_plate]; }
const PartPlate* get_curr_plate() const { return m_plate_list[m_current_plate]; }
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 3e5474fbf3..3a57ead3a3 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -8167,13 +8167,14 @@ void Plater::priv::set_bed_shape(const Pointfs& shape, const Pointfs& exclude_ar
float prev_height_lid, prev_height_rod;
partplate_list.get_height_limits(prev_height_lid, prev_height_rod);
- auto prev_logo = partplate_list.get_logo_texture_filename();
double height_to_lid = config->opt_float("extruder_clearance_height_to_lid");
double height_to_rod = config->opt_float("extruder_clearance_height_to_rod");
- auto custom_bed_texture = config->opt_string("bed_custom_texture");
Pointfs prev_exclude_areas = partplate_list.get_exclude_area();
- new_shape |= (height_to_lid != prev_height_lid) || (height_to_rod != prev_height_rod) || (prev_exclude_areas != exclude_areas) || (prev_logo != custom_bed_texture);
+ new_shape |= (height_to_lid != prev_height_lid) || (height_to_rod != prev_height_rod) || (prev_exclude_areas != exclude_areas);
+ if (!new_shape && partplate_list.get_logo_texture_filename() != custom_texture) {
+ partplate_list.update_logo_texture_filename(custom_texture);
+ }
if (new_shape) {
if (view3D) view3D->bed_shape_changed();
if (preview) preview->bed_shape_changed();
diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp
index 8005d4ee6d..fea8908d75 100644
--- a/src/slic3r/GUI/Tab.cpp
+++ b/src/slic3r/GUI/Tab.cpp
@@ -2352,8 +2352,12 @@ page = add_options_page(L("Others"), "custom-gcode_other"); // ORCA: icon only v
optgroup->append_single_option_line("timelapse_type", "Timelapse");
optgroup->append_single_option_line("fuzzy_skin");
+ optgroup->append_single_option_line("fuzzy_skin_noise_type");
optgroup->append_single_option_line("fuzzy_skin_point_distance");
optgroup->append_single_option_line("fuzzy_skin_thickness");
+ optgroup->append_single_option_line("fuzzy_skin_scale");
+ optgroup->append_single_option_line("fuzzy_skin_octaves");
+ optgroup->append_single_option_line("fuzzy_skin_persistence");
optgroup->append_single_option_line("fuzzy_skin_first_layer");
optgroup = page->new_optgroup(L("G-code output"), L"param_gcode");
@@ -2382,7 +2386,6 @@ page = add_options_page(L("Others"), "custom-gcode_other"); // ORCA: icon only v
option.opt.height = 25;//250;
optgroup->append_single_option_line(option);
-#if 1
page = add_options_page(L("Dependencies"), "custom-gcode_advanced");
optgroup = page->new_optgroup(L("Profile dependencies"));
@@ -2395,7 +2398,6 @@ page = add_options_page(L("Others"), "custom-gcode_other"); // ORCA: icon only v
optgroup->append_single_option_line(option);
build_preset_description_line(optgroup.get());
-#endif
}
// Reload current config (aka presets->edited_preset->config) into the UI fields.
@@ -3528,14 +3530,6 @@ void TabFilament::build()
optgroup->append_single_option_line("filament_multitool_ramming_volume");
optgroup->append_single_option_line("filament_multitool_ramming_flow");
- page = add_options_page(L("Notes"), "custom-gcode_note"); // ORCA: icon only visible on placeholders
- optgroup = page->new_optgroup(L("Notes"),"note", 0);
- optgroup->label_width = 0;
- option = optgroup->get_option("filament_notes");
- option.opt.full_width = true;
- option.opt.height = notes_field_height;// 250;
- optgroup->append_single_option_line(option);
-#if 1
page = add_options_page(L("Dependencies"), "advanced");
optgroup = page->new_optgroup(L("Profile dependencies"));
create_line_with_widget(optgroup.get(), "compatible_printers", "", [this](wxWindow* parent) {
@@ -3554,8 +3548,15 @@ void TabFilament::build()
option.opt.full_width = true;
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);
+ optgroup->label_width = 0;
+ option = optgroup->get_option("filament_notes");
+ option.opt.full_width = true;
+ option.opt.height = notes_field_height;// 250;
+ optgroup->append_single_option_line(option);
+
//build_preset_description_line(optgroup.get());
-#endif
}
// Reload current config (aka presets->edited_preset->config) into the UI fields.
diff --git a/src/slic3r/GUI/WebGuideDialog.cpp b/src/slic3r/GUI/WebGuideDialog.cpp
index f8994ff929..479726a9ff 100644
--- a/src/slic3r/GUI/WebGuideDialog.cpp
+++ b/src/slic3r/GUI/WebGuideDialog.cpp
@@ -1,9 +1,13 @@
#include "WebGuideDialog.hpp"
#include "ConfigWizard.hpp"
+#include
+#include
+#include
#include
#include "I18N.hpp"
#include "libslic3r/AppConfig.hpp"
+#include "libslic3r/PresetBundle.hpp"
#include "slic3r/GUI/wxExtensions.hpp"
#include "slic3r/GUI/GUI_App.hpp"
#include "libslic3r_version.h"
@@ -576,13 +580,6 @@ void GuideFrame::OnError(wxWebViewEvent &evt)
void GuideFrame::OnScriptResponseMessage(wxCommandEvent &WXUNUSED(evt))
{
- // if (!m_response_js.empty())
- //{
- // RunScript(m_response_js);
- //}
-
- // RunScript("This is a message to Web!");
- // RunScript("postMessage(\"AABBCCDD\");");
}
bool GuideFrame::IsFirstUse()
@@ -592,30 +589,12 @@ bool GuideFrame::IsFirstUse()
if (strVal == "1")
return false;
- if (bbl_bundle_rsrc == true)
+ if (orca_bundle_rsrc == true)
return true;
return true;
}
-/*int GuideFrame::CopyDir(const boost::filesystem::path &from_dir, const boost::filesystem::path &to_dir)
-{
- if (!boost::filesystem::is_directory(from_dir)) return -1;
- // i assume to_dir.parent surely exists
- if (!boost::filesystem::is_directory(to_dir)) boost::filesystem::create_directory(to_dir);
- for (auto &dir_entry : boost::filesystem::directory_iterator(from_dir)) {
- if (!boost::filesystem::is_directory(dir_entry.path())) {
- std::string em;
- CopyFileResult cfr = copy_file(dir_entry.path().string(), (to_dir / dir_entry.path().filename()).string(), em, false);
- if (cfr != SUCCESS) { BOOST_LOG_TRIVIAL(error) << "Error when copying files from " << from_dir << " to " << to_dir << ": " << em; }
- } else {
- CopyDir(dir_entry.path(), to_dir / dir_entry.path().filename());
- }
- }
-
- return 0;
-}*/
-
int GuideFrame::SaveProfile()
{
// SoftFever: don't collect info
@@ -633,77 +612,6 @@ int GuideFrame::SaveProfile()
m_MainPtr->app_config->save();
- //Load BBS Conf
- /*wxString strConfPath = wxGetApp().app_config->config_path();
- json jCfg;
- std::ifstream(w2s(strConfPath)) >> jCfg;
-
- //model
- jCfg["models"] = json::array();
- int nM = m_ProfileJson["model"].size();
- int nModelChoose = 0;
- for (int m = 0; m < nM; m++)
- {
- json amodel = m_ProfileJson["model"][m];
-
- amodel["nozzle_diameter"] = amodel["nozzle_selected"];
- amodel.erase("nozzle_selected");
- amodel.erase("preview");
- amodel.erase("sub_path");
- amodel.erase("cover");
- amodel.erase("materials");
-
- std::string ss = amodel["nozzle_diameter"];
- if (ss.compare("") != 0) {
- nModelChoose++;
- jCfg["models"].push_back(amodel);
- }
- }
- if (nModelChoose == 0)
- jCfg.erase("models");
-
- if (nModelChoose > 0) {
- // filament
- jCfg["filaments"] = json::array();
- for (auto it = m_ProfileJson["filament"].begin(); it != m_ProfileJson["filament"].end(); ++it) {
- if (it.value()["selected"] == 1) { jCfg["filaments"].push_back(it.key()); }
- }
-
- // Preset
- jCfg["presets"]["filaments"] = json::array();
- jCfg["presets"]["filaments"].push_back(jCfg["filaments"][0]);
-
- std::string PresetMachine = m_ProfileJson["machine"][0]["name"];
- jCfg["presets"]["machine"] = PresetMachine;
-
- int nTotal = m_ProfileJson["process"].size();
- int nSet = nTotal / 2;
- if (nSet > 0) nSet--;
-
- std::string sMode = m_ProfileJson["process"][nSet]["name"];
- jCfg["presets"]["process"] = sMode;
-
- } else {
- jCfg["presets"]["filaments"] = json::array();
- jCfg["presets"]["filaments"].push_back("Default Filament");
-
- jCfg["presets"]["machine"] = "Default Printer";
-
- jCfg["presets"]["process"] = "Default Setting";
- }
-
- std::string sOut = jCfg.dump(4, ' ', false);
-
- std::ofstream output_file(w2s(strConfPath));
- output_file << sOut;
- output_file.close();
-
- //Copy Profiles
- if (bbl_bundle_rsrc)
- {
- CopyDir(rsrc_vendor_dir,vendor_dir);
- }*/
-
std::string strAll = m_ProfileJson.dump(-1, ' ', false, json::error_handler_t::ignore);
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "before save to app_config: "<< std::endl<set_variant(PresetBundle::BBL_BUNDLE,
- PresetBundle::BBL_DEFAULT_PRINTER_MODEL, PresetBundle::BBL_DEFAULT_PRINTER_VARIANT, "true");
+ app.app_config->set_variant(PresetBundle::ORCA_DEFAULT_BUNDLE,
+ PresetBundle::ORCA_DEFAULT_PRINTER_MODEL, PresetBundle::ORCA_DEFAULT_PRINTER_VARIANT, "true");
app.app_config->clear_section(AppConfig::SECTION_FILAMENTS);
- app.preset_bundle->load_selections(*app.app_config, {PresetBundle::BBL_DEFAULT_PRINTER_MODEL, PresetBundle::BBL_DEFAULT_PRINTER_VARIANT, PresetBundle::BBL_DEFAULT_FILAMENT, std::string()});
+ app.preset_bundle->load_selections(*app.app_config, {PresetBundle::ORCA_DEFAULT_PRINTER_MODEL, PresetBundle::ORCA_DEFAULT_PRINTER_VARIANT, PresetBundle::ORCA_DEFAULT_FILAMENT, std::string()});
app.app_config->set_legacy_datadir(false);
app.update_mode();
@@ -1025,6 +933,8 @@ int GuideFrame::GetFilamentInfo( std::string VendorDirectory, json & pFilaList,
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " Before Format Inherits Path: VendorDirectory - " << VendorDirectory << ", sub_path - " << FPath;
wxString strNewFile = wxString::Format("%s%c%s", wxString(VendorDirectory.c_str(), wxConvUTF8), boost::filesystem::path::preferred_separator, FPath);
boost::filesystem::path inherits_path(w2s(strNewFile));
+ if (!boost::filesystem::exists(inherits_path))
+ inherits_path = (boost::filesystem::path(m_OrcaFilaLibPath) / boost::filesystem::path(FPath)).make_preferred();
//boost::filesystem::path nf(strNewFile.c_str());
if (boost::filesystem::exists(inherits_path))
@@ -1066,31 +976,7 @@ int GuideFrame::GetFilamentInfo( std::string VendorDirectory, json & pFilaList,
int GuideFrame::LoadProfile()
{
try {
- //wxString ExePath = boost::dll::program_location().parent_path().string();
- //wxString TargetFolder = ExePath + "\\resources\\profiles\\";
- //wxString TargetFolderSearch = ExePath + "\\resources\\profiles\\*.json";
-
- //intptr_t handle;
- //_finddata_t findData;
-
- //handle = _findfirst(TargetFolderSearch.mb_str(), &findData); // ???????????
- //if (handle == -1) { return -1; }
-
- //do {
- // if (findData.attrib & _A_SUBDIR && strcmp(findData.name, ".") == 0 && strcmp(findData.name, "..") == 0) // ??????????"."?".."
- // {
- // // cout << findData.name << "\t\n";
- // } else {
- // wxString strVendor = wxString(findData.name).BeforeLast('.');
- // LoadProfileFamily(strVendor, TargetFolder + findData.name);
- // }
-
- //} while (_findnext(handle, &findData) == 0); // ???????????
-
- // BBS: change directories by design
- //BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", will load config from %1%.") % bbl_bundle_path;
m_ProfileJson = json::parse("{}");
- //m_ProfileJson["configpath"] = Slic3r::data_dir();
m_ProfileJson["model"] = json::array();
m_ProfileJson["machine"] = json::object();
m_ProfileJson["filament"] = json::object();
@@ -1099,76 +985,63 @@ int GuideFrame::LoadProfile()
vendor_dir = (boost::filesystem::path(Slic3r::data_dir()) / PRESET_SYSTEM_DIR ).make_preferred();
rsrc_vendor_dir = (boost::filesystem::path(resources_dir()) / "profiles").make_preferred();
- // BBS: add BBL as default
- // BBS: add json logic for vendor bundle
- auto bbl_bundle_path = vendor_dir;
- bbl_bundle_rsrc = false;
- if (!boost::filesystem::exists((vendor_dir / PresetBundle::BBL_BUNDLE).replace_extension(".json"))) {
- bbl_bundle_path = rsrc_vendor_dir;
- bbl_bundle_rsrc = true;
- }
+ // Orca: add custom as default
+ // Orca: add json logic for vendor bundle
+ orca_bundle_rsrc = true;
- // intptr_t handle;
- //_finddata_t findData;
-
- //handle = _findfirst((bbl_bundle_path / "*.json").make_preferred().string().c_str(), &findData); // ???????????
- // if (handle == -1) { return -1; }
-
- // do {
- // if (findData.attrib & _A_SUBDIR && strcmp(findData.name, ".") == 0 && strcmp(findData.name, "..") == 0) // ??????????"."?".."
- // {
- // // cout << findData.name << "\t\n";
- // } else {
- // wxString strVendor = wxString(findData.name).BeforeLast('.');
- // LoadProfileFamily(w2s(strVendor), vendor_dir.make_preferred().string() + "\\"+ findData.name);
- // }
-
- //} while (_findnext(handle, &findData) == 0); // ???????????
-
-
- //load BBL bundle from user data path
- string targetPath = bbl_bundle_path.make_preferred().string();
- boost::filesystem::path myPath(targetPath);
- boost::filesystem::directory_iterator endIter;
- for (boost::filesystem::directory_iterator iter(myPath); iter != endIter; iter++) {
- if (boost::filesystem::is_directory(*iter)) {
- //cout << "is dir" << endl;
- //cout << iter->path().string() << endl;
- } else {
- //cout << "is a file" << endl;
- //cout << iter->path().string() << endl;
-
- wxString strVendor = from_u8(iter->path().string()).BeforeLast('.');
- 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)
- LoadProfileFamily(w2s(strVendor), iter->path().string());
+ // search if there exists a .json file in vendor_dir folder, if exists, set orca_bundle_rsrc to false
+ for (const auto& entry : boost::filesystem::directory_iterator(vendor_dir)) {
+ if (!boost::filesystem::is_directory(entry) && boost::iequals(entry.path().extension().string(), ".json") && !boost::iequals(entry.path().stem().string(), PresetBundle::ORCA_FILAMENT_LIBRARY)) {
+ orca_bundle_rsrc = false;
+ break;
+ }
+ }
+
+ // load the default filament library first
+ std::set loaded_vendors;
+ auto filament_library_name = boost::filesystem::path(PresetBundle::ORCA_FILAMENT_LIBRARY).replace_extension(".json");
+ if (boost::filesystem::exists(vendor_dir / filament_library_name)) {
+ LoadProfileFamily(PresetBundle::ORCA_FILAMENT_LIBRARY, (vendor_dir / filament_library_name).string());
+ m_OrcaFilaLibPath = (vendor_dir / PresetBundle::ORCA_FILAMENT_LIBRARY).string();
+ } else {
+ LoadProfileFamily(PresetBundle::ORCA_FILAMENT_LIBRARY, (rsrc_vendor_dir / filament_library_name).string());
+ m_OrcaFilaLibPath = (rsrc_vendor_dir / PresetBundle::ORCA_FILAMENT_LIBRARY).string();
+ }
+ loaded_vendors.insert(PresetBundle::ORCA_FILAMENT_LIBRARY);
+
+ //load custom bundle from user data path
+ boost::filesystem::directory_iterator endIter;
+ for (boost::filesystem::directory_iterator iter(vendor_dir); iter != endIter; iter++) {
+ if (!boost::filesystem::is_directory(*iter)) {
+ wxString strVendor = from_u8(iter->path().string()).BeforeLast('.');
+ strVendor = strVendor.AfterLast('\\');
+ strVendor = strVendor.AfterLast('/');
+
+ wxString strExtension = from_u8(iter->path().string()).AfterLast('.').Lower();
+ if(strExtension.CmpNoCase("json") != 0 || loaded_vendors.find(w2s(strVendor)) != loaded_vendors.end())
+ continue;
+
+ LoadProfileFamily(w2s(strVendor), iter->path().string());
+ loaded_vendors.insert(w2s(strVendor));
}
}
- //string others_targetPath = rsrc_vendor_dir.string();
boost::filesystem::directory_iterator others_endIter;
for (boost::filesystem::directory_iterator iter(rsrc_vendor_dir); iter != others_endIter; iter++) {
- if (boost::filesystem::is_directory(*iter)) {
- //cout << "is dir" << endl;
- //cout << iter->path().string() << endl;
- } else {
- //cout << "is a file" << endl;
- //cout << iter->path().string() << endl;
+ if (!boost::filesystem::is_directory(*iter)) {
wxString strVendor = from_u8(iter->path().string()).BeforeLast('.');
strVendor = strVendor.AfterLast('\\');
strVendor = strVendor.AfterLast('/');
wxString strExtension = from_u8(iter->path().string()).AfterLast('.').Lower();
+ if (strExtension.CmpNoCase("json") != 0 || loaded_vendors.find(w2s(strVendor)) != loaded_vendors.end())
+ continue;
- if (w2s(strVendor) != PresetBundle::BBL_BUNDLE && strExtension.CmpNoCase("json")==0)
- LoadProfileFamily(w2s(strVendor), iter->path().string());
+ LoadProfileFamily(w2s(strVendor), iter->path().string());
+ loaded_vendors.insert(w2s(strVendor));
}
}
- //LoadProfileFamily(PresetBundle::BBL_BUNDLE, bbl_bundle_path.string());
const auto enabled_filaments = wxGetApp().app_config->has_section(AppConfig::SECTION_FILAMENTS) ? wxGetApp().app_config->get_section(AppConfig::SECTION_FILAMENTS) : std::map();
m_appconfig_new.set_vendors(*wxGetApp().app_config);
@@ -1264,185 +1137,6 @@ void StringReplace(string &strBase, string strSrc, string strDes)
}
-//int GuideFrame::LoadProfileFamily(std::string strVendor, std::string strFilePath)
-//{
-// //wxString strFolder = strFilePath.BeforeLast(boost::filesystem::path::preferred_separator);
-// boost::filesystem::path file_path(strFilePath);
-// boost::filesystem::path vendor_dir = boost::filesystem::absolute(file_path.parent_path()/ strVendor).make_preferred();
-// BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", vendor path %1%.")% vendor_dir.string();
-// try {
-//
-// //wxLogMessage("GUIDE: json_path1 %s", w2s(strFilePath));
-//
-// std::string contents;
-// LoadFile(strFilePath, contents);
-// //wxLogMessage("GUIDE: json_path1 content: %s", contents);
-// json jLocal=json::parse(contents);
-// //wxLogMessage("GUIDE: json_path1 Loaded");
-//
-// // BBS:models
-// json pmodels = jLocal["machine_model_list"];
-// int nsize = pmodels.size();
-//
-// BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", got %1% machine models")%nsize;
-//
-// for (int n = 0; n < nsize; n++) {
-// json OneModel = pmodels.at(n);
-//
-// OneModel["model"] = OneModel["name"];
-// OneModel.erase("name");
-//
-// std::string s1 = OneModel["model"];
-// std::string s2 = OneModel["sub_path"];
-//
-// boost::filesystem::path sub_path = boost::filesystem::absolute(vendor_dir / s2).make_preferred();
-// std::string sub_file = sub_path.string();
-//
-// //wxLogMessage("GUIDE: json_path2 %s", w2s(ModelFilePath));
-// LoadFile(sub_file, contents);
-// //wxLogMessage("GUIDE: json_path2 content: %s", contents);
-// json pm=json::parse(contents);
-// //wxLogMessage("GUIDE: json_path2 loaded");
-//
-// OneModel["vendor"] = strVendor;
-// std::string NozzleOpt = pm["nozzle_diameter"];
-// StringReplace(NozzleOpt, " ", "");
-// OneModel["nozzle_diameter"] = NozzleOpt;
-// OneModel["materials"] = pm["default_materials"];
-//
-// //wxString strCoverPath = wxString::Format("%s\\%s\\%s_cover.png", strFolder, strVendor, std::string(s1.mb_str()));
-// std::string cover_file = s1+"_cover.png";
-// boost::filesystem::path cover_path = boost::filesystem::absolute(vendor_dir / cover_file).make_preferred();
-// OneModel["cover"] = cover_path.string();
-//
-// OneModel["nozzle_selected"] = "";
-//
-// m_ProfileJson["model"].push_back(OneModel);
-// }
-//
-// // BBS:Machine
-// json pmachine = jLocal["machine_list"];
-// nsize = pmachine.size();
-// BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", got %1% machines")%nsize;
-// for (int n = 0; n < nsize; n++) {
-// json OneMachine = pmachine.at(n);
-//
-// std::string s1 = OneMachine["name"];
-// std::string s2 = OneMachine["sub_path"];
-//
-// //wxString ModelFilePath = wxString::Format("%s\\%s\\%s", strFolder, strVendor, s2);
-// boost::filesystem::path sub_path = boost::filesystem::absolute(vendor_dir / s2).make_preferred();
-// std::string sub_file = sub_path.string();
-// LoadFile(sub_file, contents);
-// json pm = json::parse(contents);
-//
-// std::string strInstant = pm["instantiation"];
-// if (strInstant.compare("true") == 0) {
-// OneMachine["model"] = pm["printer_model"];
-//
-// m_ProfileJson["machine"].push_back(OneMachine);
-// }
-// }
-//
-// // BBS:Filament
-// json pFilament = jLocal["filament_list"];
-// nsize = pFilament.size();
-//
-// 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);
-//
-// std::string s1 = OneFF["name"];
-// std::string s2 = OneFF["sub_path"];
-//
-// if (!m_ProfileJson["filament"].contains(s1))
-// {
-// //wxString ModelFilePath = wxString::Format("%s\\%s\\%s", strFolder, strVendor, s2);
-// boost::filesystem::path sub_path = boost::filesystem::absolute(vendor_dir / s2).make_preferred();
-// std::string sub_file = sub_path.string();
-// LoadFile(sub_file, contents);
-// json pm = json::parse(contents);
-//
-// std::string strInstant = pm["instantiation"];
-// if (strInstant == "true") {
-// std::string sV;
-// std::string sT;
-//
-// int nRet = GetFilamentInfo(sub_file, sV, sT);
-// if (nRet != 0) continue;
-//
-// OneFF["vendor"] = sV;
-// OneFF["type"] = sT;
-//
-// OneFF["models"] = "";
-// OneFF["selected"] = 0;
-// }
-// else
-// continue;
-//
-// } else {
-// OneFF = m_ProfileJson["filament"][s1];
-// }
-//
-// std::string vModel = "";
-// int nm = m_ProfileJson["model"].size();
-// int bFind = 0;
-// for (int m = 0; m < nm; m++) {
-// std::string strFF = m_ProfileJson["model"][m]["materials"];
-// strFF = (boost::format(";%1%;")%strFF).str();
-// std::string strTT = (boost::format(";%1%;")%s1).str();
-// if (strFF.find(strTT) != std::string::npos) {
-// std::string sModel = m_ProfileJson["model"][m]["model"];
-//
-// vModel = (boost::format("%1%[%2%]")%vModel %sModel).str();
-// bFind = 1;
-// }
-// }
-//
-// OneFF["models"] = vModel;
-//
-// m_ProfileJson["filament"][s1] = OneFF;
-// }
-//
-// //process
-// json pProcess = jLocal["process_list"];
-// nsize = pProcess.size();
-// BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", got %1% processes")%nsize;
-// for (int n = 0; n < nsize; n++) {
-// json OneProcess = pProcess.at(n);
-//
-// std::string s2 = OneProcess["sub_path"];
-// //wxString ModelFilePath = wxString::Format("%s\\%s\\%s", strFolder, strVendor, s2);
-// boost::filesystem::path sub_path = boost::filesystem::absolute(vendor_dir / s2).make_preferred();
-// std::string sub_file = sub_path.string();
-// LoadFile(sub_file, contents);
-// json pm = json::parse(contents);
-//
-// std::string bInstall = pm["instantiation"];
-// if (bInstall == "true")
-// {
-// m_ProfileJson["process"].push_back(OneProcess);
-// }
-// }
-//
-// }
-// catch(nlohmann::detail::parse_error &err) {
-// BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": parse "< bundles, bool snapshot) const;
+ bool install_bundles_rsrc(const std::vector& bundles, bool snapshot) const;
void check_installed_vendor_profiles() const;
Updates get_printer_config_updates(bool update = false) const;
Updates get_config_updates(const Semver& old_slic3r_version) const;
@@ -1042,7 +1042,7 @@ void PresetUpdater::priv::sync_printer_config(std::string http_url)
}
}
-bool PresetUpdater::priv::install_bundles_rsrc(std::vector bundles, bool snapshot) const
+bool PresetUpdater::priv::install_bundles_rsrc(const std::vector& bundles, bool snapshot) const
{
Updates updates;
@@ -1071,8 +1071,7 @@ bool PresetUpdater::priv::install_bundles_rsrc(std::vector bundles,
}
-//BBS: refine preset update logic
-// Install indicies from resources. Only installs those that are either missing or older than in resources.
+// Orca: copy/update the vendor profiles from resource to system folder
void PresetUpdater::priv::check_installed_vendor_profiles() const
{
BOOST_LOG_TRIVIAL(info) << "[Orca Updater]:Checking whether the profile from resource is newer";
@@ -1080,8 +1079,9 @@ void PresetUpdater::priv::check_installed_vendor_profiles() const
AppConfig *app_config = GUI::wxGetApp().app_config;
const auto enabled_vendors = app_config->vendors();
- //BBS: refine the init check logic
- std::vector bundles;
+ std::set bundles;
+ // Orca: always install filament library
+ bundles.insert(PresetBundle::ORCA_FILAMENT_LIBRARY);
for (auto &dir_entry : boost::filesystem::directory_iterator(rsrc_path)) {
const auto &path = dir_entry.path();
std::string file_path = path.string();
@@ -1090,9 +1090,13 @@ void PresetUpdater::priv::check_installed_vendor_profiles() const
std::string vendor_name = path.filename().string();
// Remove the .json suffix.
vendor_name.erase(vendor_name.size() - 5);
+ if (bundles.find(vendor_name) != bundles.end())continue;
+
+ const auto is_vendor_enabled = (vendor_name == PresetBundle::ORCA_DEFAULT_BUNDLE) // always update configs from resource to vendor for ORCA_DEFAULT_BUNDLE
+ || (enabled_vendors.find(vendor_name) != enabled_vendors.end());
if (enabled_config_update) {
if ( fs::exists(path_in_vendor)) {
- if (enabled_vendors.find(vendor_name) != enabled_vendors.end()) {
+ if (is_vendor_enabled) {
Semver resource_ver = get_version_from_json(file_path);
Semver vendor_ver = get_version_from_json(path_in_vendor.string());
@@ -1100,7 +1104,7 @@ void PresetUpdater::priv::check_installed_vendor_profiles() const
if (!version_match || (vendor_ver < resource_ver)) {
BOOST_LOG_TRIVIAL(info) << "[Orca Updater]:found vendor "< 0)
- install_bundles_rsrc(bundles, false);
+ if (bundles.size() > 0) {
+ install_bundles_rsrc(std::vector(bundles.begin(), bundles.end()), false);
+ }
}
Updates PresetUpdater::priv::get_printer_config_updates(bool update) const